@cbjk_iris/schema 0.0.0-stage → 0.0.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.
@@ -0,0 +1,1449 @@
1
+ import { A as SiteLogo, C as ContactInfo, D as SiteConfig, E as MenuItem, F as SiteTexts, M as siteConfigSchema, N as DeepPartial, O as SiteConfigError, P as PurchaseButtonTexts, S as CommerceConfig, T as LeadsConfig, _ as DEFAULT_TEXTS, a as ModuleId, b as BrandConfig, c as ColorToken, d as LeadField, f as PURCHASE_PLATFORMS, g as SocialNetwork, h as SectionIcon, i as MODULE_IDS, j as resolveSiteConfig, k as SiteConfigInput, l as ColorTokens, m as SECTION_ICONS, n as DEFAULT_MODULES, o as COLOR_TOKENS, p as PurchasePlatform, r as MODULES, s as ColorMode, t as applySiteConfigDefaults, u as DEFAULT_BUTTON_ORDER, v as resolveTexts, w as FooterConfig, x as BrandFont, y as BrandColors } from "./defaults-NwFmMIfx.mjs";
2
+ import { z } from "zod";
3
+ //#region src/catalog.d.ts
4
+ /** Hosts aceitos por plataforma (dado, não contrato: acrescentar host é PR ao arquiteto). */
5
+ export declare const PLATFORM_HOSTS: {
6
+ readonly mercadoLivre: readonly ["mercadolivre.com.br", "mercadolivre.com", "mercadolibre.com"];
7
+ readonly shopee: readonly ["shopee.com.br", "shopee.com", "shope.ee"];
8
+ readonly amazon: readonly ["amazon.com.br", "amazon.com", "amzn.to", "a.co"];
9
+ };
10
+ type MarketplacePlatform = keyof typeof PLATFORM_HOSTS;
11
+ /** Link https de um marketplace: host da lista ou subdomínio, sem credenciais nem porta, até 2048. */
12
+ export declare function platformUrl(platform: MarketplacePlatform): z.ZodString;
13
+ declare const specSchema: z.ZodObject<{
14
+ label: z.ZodString;
15
+ value: z.ZodString;
16
+ }, z.core.$strict>;
17
+ export declare const installmentSchema: z.ZodObject<{
18
+ count: z.ZodNumber;
19
+ value: z.ZodNumber;
20
+ hasInterest: z.ZodOptional<z.ZodBoolean>;
21
+ }, z.core.$strict>;
22
+ export declare const catalogItemBase: z.ZodObject<{
23
+ slug: z.ZodString;
24
+ name: z.ZodString;
25
+ shortDescription: z.ZodString;
26
+ description: z.ZodString;
27
+ images: z.ZodArray<z.ZodString>;
28
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
29
+ label: z.ZodString;
30
+ value: z.ZodString;
31
+ }, z.core.$strict>>>;
32
+ order: z.ZodOptional<z.ZodNumber>;
33
+ }, z.core.$strip>;
34
+ export declare const productSchema: z.ZodObject<{
35
+ slug: z.ZodString;
36
+ name: z.ZodString;
37
+ shortDescription: z.ZodString;
38
+ description: z.ZodString;
39
+ images: z.ZodArray<z.ZodString>;
40
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
41
+ label: z.ZodString;
42
+ value: z.ZodString;
43
+ }, z.core.$strict>>>;
44
+ order: z.ZodOptional<z.ZodNumber>;
45
+ kind: z.ZodLiteral<"product">;
46
+ category: z.ZodString;
47
+ price: z.ZodNumber;
48
+ originalPrice: z.ZodOptional<z.ZodNumber>;
49
+ installment: z.ZodOptional<z.ZodObject<{
50
+ count: z.ZodNumber;
51
+ value: z.ZodNumber;
52
+ hasInterest: z.ZodOptional<z.ZodBoolean>;
53
+ }, z.core.$strict>>;
54
+ stockQty: z.ZodNumber;
55
+ whatsappButton: z.ZodDefault<z.ZodBoolean>;
56
+ mercadoLivreLink: z.ZodOptional<z.ZodString>;
57
+ shopeeLink: z.ZodOptional<z.ZodString>;
58
+ amazonLink: z.ZodOptional<z.ZodString>;
59
+ externalLink: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strict>;
61
+ export declare const serviceSchema: z.ZodObject<{
62
+ slug: z.ZodString;
63
+ name: z.ZodString;
64
+ shortDescription: z.ZodString;
65
+ description: z.ZodString;
66
+ images: z.ZodArray<z.ZodString>;
67
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
68
+ label: z.ZodString;
69
+ value: z.ZodString;
70
+ }, z.core.$strict>>>;
71
+ order: z.ZodOptional<z.ZodNumber>;
72
+ kind: z.ZodLiteral<"service">;
73
+ }, z.core.$strict>;
74
+ /** content/products/<slug>.json: sem kind e sem slug (vêm do diretório e do nome do arquivo). */
75
+ export declare const productContentSchema: z.ZodObject<{
76
+ installment: z.ZodOptional<z.ZodObject<{
77
+ count: z.ZodNumber;
78
+ value: z.ZodNumber;
79
+ hasInterest: z.ZodOptional<z.ZodBoolean>;
80
+ }, z.core.$strict>>;
81
+ description: z.ZodString;
82
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
83
+ label: z.ZodString;
84
+ value: z.ZodString;
85
+ }, z.core.$strict>>>;
86
+ name: z.ZodString;
87
+ images: z.ZodArray<z.ZodString>;
88
+ shortDescription: z.ZodString;
89
+ order: z.ZodOptional<z.ZodNumber>;
90
+ category: z.ZodString;
91
+ price: z.ZodNumber;
92
+ originalPrice: z.ZodOptional<z.ZodNumber>;
93
+ stockQty: z.ZodNumber;
94
+ whatsappButton: z.ZodDefault<z.ZodBoolean>;
95
+ mercadoLivreLink: z.ZodOptional<z.ZodString>;
96
+ shopeeLink: z.ZodOptional<z.ZodString>;
97
+ amazonLink: z.ZodOptional<z.ZodString>;
98
+ externalLink: z.ZodOptional<z.ZodString>;
99
+ }, z.core.$strict>;
100
+ /** content/services/<slug>.json */
101
+ export declare const serviceContentSchema: z.ZodObject<{
102
+ description: z.ZodString;
103
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
104
+ label: z.ZodString;
105
+ value: z.ZodString;
106
+ }, z.core.$strict>>>;
107
+ name: z.ZodString;
108
+ images: z.ZodArray<z.ZodString>;
109
+ shortDescription: z.ZodString;
110
+ order: z.ZodOptional<z.ZodNumber>;
111
+ }, z.core.$strict>;
112
+ type Product = z.output<typeof productSchema>;
113
+ type ProductInput = z.input<typeof productSchema>;
114
+ type Service = z.output<typeof serviceSchema>;
115
+ type ServiceInput = z.input<typeof serviceSchema>;
116
+ type CatalogItem = Product | Service;
117
+ type Spec = z.output<typeof specSchema>;
118
+ type Installment = z.output<typeof installmentSchema>;
119
+ interface ProductFilter {
120
+ /** comparação exata, sem diferenciar maiúsculas */
121
+ category?: string;
122
+ /** remove um produto pelo slug (útil para "relacionados") */
123
+ excludeSlug?: string;
124
+ limit?: number;
125
+ }
126
+ interface PurchaseContext {
127
+ /** URL do WhatsApp já montada para este produto (lib/whatsapp); null = sem WhatsApp no site */
128
+ whatsappUrl: string | null;
129
+ /** siteConfig.commerce.buttonOrder já resolvido: as 5 plataformas, cada uma uma vez */
130
+ order: readonly PurchasePlatform[];
131
+ /** siteConfig.texts.products.buttons, já resolvido por resolveTexts */
132
+ texts: PurchaseButtonTexts;
133
+ }
134
+ interface PurchaseButton {
135
+ platform: PurchasePlatform;
136
+ href: string;
137
+ /** texto final, já resolvido */
138
+ label: string;
139
+ emphasis: "primary" | "secondary";
140
+ /** variante do Button: primary+whatsapp = "cta"; primary+outro = "default"; secondary = "outline" */
141
+ variant: "cta" | "default" | "outline";
142
+ rel: "noopener noreferrer";
143
+ target: "_blank";
144
+ }
145
+ type ResolvePurchaseButtons = (product: Product, ctx: PurchaseContext) => PurchaseButton[];
146
+ //#endregion
147
+ //#region src/fields.d.ts
148
+ /** Mensagens padrão do zod em pt-BR, por parse ({ error: ptBRError }), sem mexer na config global. */
149
+ export declare const ptBRError: z.core.$ZodErrorMap<z.core.$ZodIssue>;
150
+ export declare const slugSchema: z.ZodString;
151
+ export declare const httpsUrl: z.ZodString;
152
+ /**
153
+ * Valor CSS que vai cru para o <style> do layout (cores, raio, tokens de forma). Estrutura
154
+ * permitida, não lista negra: até 200 caracteres; só os caracteres A-Z a-z 0-9, espaço e
155
+ * . , % # ( ) / + - * _ (sem colchete, que abriria um bloco que engole o resto da folha; sem
156
+ * ; : { } < > @ aspas, barra invertida e não-ASCII); sem início ou fim de comentário;
157
+ * parênteses balanceados; só as funções de CSS_FUNCTIONS; var() só com --nome.
158
+ */
159
+ export declare const cssValue: z.ZodString;
160
+ //#endregion
161
+ //#region src/page.d.ts
162
+ /** Slugs que não podem ser página (rotas dos módulos e do Next), mesmo com o módulo desligado. */
163
+ export declare const RESERVED_PAGE_SLUGS: readonly ["produtos", "produto", "servicos", "servico", "ultimos-projetos", "api", "_next", "home"];
164
+ export declare const pageSlugSchema: z.ZodString;
165
+ export declare const homeSchema: z.ZodObject<{
166
+ sections: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
167
+ id: z.ZodOptional<z.ZodString>;
168
+ slides: z.ZodArray<z.ZodObject<{
169
+ image: z.ZodString;
170
+ alt: z.ZodString;
171
+ title: z.ZodString;
172
+ subtitle: z.ZodOptional<z.ZodString>;
173
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
174
+ label: z.ZodString;
175
+ href: z.ZodString;
176
+ }, z.core.$strict>, z.ZodObject<{
177
+ label: z.ZodString;
178
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
179
+ }, z.core.$strict>]>>;
180
+ secondaryCta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
181
+ label: z.ZodString;
182
+ href: z.ZodString;
183
+ }, z.core.$strict>, z.ZodObject<{
184
+ label: z.ZodString;
185
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
186
+ }, z.core.$strict>]>>;
187
+ href: z.ZodOptional<z.ZodString>;
188
+ align: z.ZodOptional<z.ZodEnum<{
189
+ left: "left";
190
+ center: "center";
191
+ right: "right";
192
+ }>>;
193
+ }, z.core.$strict>>;
194
+ autoplay: z.ZodOptional<z.ZodBoolean>;
195
+ interval: z.ZodOptional<z.ZodNumber>;
196
+ height: z.ZodOptional<z.ZodEnum<{
197
+ sm: "sm";
198
+ md: "md";
199
+ lg: "lg";
200
+ full: "full";
201
+ }>>;
202
+ type: z.ZodLiteral<"hero">;
203
+ }, z.core.$strict>, z.ZodObject<{
204
+ id: z.ZodOptional<z.ZodString>;
205
+ title: z.ZodOptional<z.ZodString>;
206
+ subtitle: z.ZodOptional<z.ZodString>;
207
+ items: z.ZodArray<z.ZodObject<{
208
+ icon: z.ZodEnum<{
209
+ phone: "phone";
210
+ "shield-check": "shield-check";
211
+ "badge-check": "badge-check";
212
+ award: "award";
213
+ star: "star";
214
+ "thumbs-up": "thumbs-up";
215
+ heart: "heart";
216
+ gem: "gem";
217
+ clock: "clock";
218
+ timer: "timer";
219
+ calendar: "calendar";
220
+ truck: "truck";
221
+ package: "package";
222
+ "credit-card": "credit-card";
223
+ "hand-coins": "hand-coins";
224
+ wrench: "wrench";
225
+ hammer: "hammer";
226
+ ruler: "ruler";
227
+ "paint-roller": "paint-roller";
228
+ house: "house";
229
+ zap: "zap";
230
+ droplets: "droplets";
231
+ lightbulb: "lightbulb";
232
+ leaf: "leaf";
233
+ recycle: "recycle";
234
+ users: "users";
235
+ headset: "headset";
236
+ "message-circle": "message-circle";
237
+ "map-pin": "map-pin";
238
+ sparkles: "sparkles";
239
+ }>;
240
+ title: z.ZodString;
241
+ text: z.ZodString;
242
+ }, z.core.$strict>>;
243
+ type: z.ZodLiteral<"benefits">;
244
+ }, z.core.$strict>, z.ZodObject<{
245
+ id: z.ZodOptional<z.ZodString>;
246
+ title: z.ZodOptional<z.ZodString>;
247
+ subtitle: z.ZodOptional<z.ZodString>;
248
+ text: z.ZodString;
249
+ image: z.ZodString;
250
+ imageAlt: z.ZodString;
251
+ imageSide: z.ZodOptional<z.ZodEnum<{
252
+ left: "left";
253
+ right: "right";
254
+ }>>;
255
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
256
+ label: z.ZodString;
257
+ href: z.ZodString;
258
+ }, z.core.$strict>, z.ZodObject<{
259
+ label: z.ZodString;
260
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
261
+ }, z.core.$strict>]>>;
262
+ type: z.ZodLiteral<"text-image">;
263
+ }, z.core.$strict>, z.ZodObject<{
264
+ id: z.ZodOptional<z.ZodString>;
265
+ title: z.ZodOptional<z.ZodString>;
266
+ subtitle: z.ZodOptional<z.ZodString>;
267
+ text: z.ZodOptional<z.ZodString>;
268
+ cta: z.ZodUnion<readonly [z.ZodObject<{
269
+ label: z.ZodString;
270
+ href: z.ZodString;
271
+ }, z.core.$strict>, z.ZodObject<{
272
+ label: z.ZodString;
273
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
274
+ }, z.core.$strict>]>;
275
+ tone: z.ZodOptional<z.ZodEnum<{
276
+ primary: "primary";
277
+ cta: "cta";
278
+ muted: "muted";
279
+ }>>;
280
+ type: z.ZodLiteral<"cta-banner">;
281
+ }, z.core.$strict>, z.ZodObject<{
282
+ id: z.ZodOptional<z.ZodString>;
283
+ title: z.ZodOptional<z.ZodString>;
284
+ subtitle: z.ZodOptional<z.ZodString>;
285
+ items: z.ZodArray<z.ZodObject<{
286
+ name: z.ZodString;
287
+ text: z.ZodString;
288
+ role: z.ZodOptional<z.ZodString>;
289
+ rating: z.ZodOptional<z.ZodLiteral<2 | 5 | 1 | 4 | 3>>;
290
+ image: z.ZodOptional<z.ZodString>;
291
+ }, z.core.$strict>>;
292
+ type: z.ZodLiteral<"testimonials">;
293
+ }, z.core.$strict>, z.ZodObject<{
294
+ id: z.ZodOptional<z.ZodString>;
295
+ title: z.ZodOptional<z.ZodString>;
296
+ subtitle: z.ZodOptional<z.ZodString>;
297
+ items: z.ZodArray<z.ZodObject<{
298
+ value: z.ZodString;
299
+ label: z.ZodString;
300
+ }, z.core.$strict>>;
301
+ type: z.ZodLiteral<"stats">;
302
+ }, z.core.$strict>, z.ZodObject<{
303
+ id: z.ZodOptional<z.ZodString>;
304
+ title: z.ZodOptional<z.ZodString>;
305
+ subtitle: z.ZodOptional<z.ZodString>;
306
+ items: z.ZodArray<z.ZodObject<{
307
+ question: z.ZodString;
308
+ answer: z.ZodString;
309
+ }, z.core.$strict>>;
310
+ type: z.ZodLiteral<"faq">;
311
+ }, z.core.$strict>, z.ZodObject<{
312
+ id: z.ZodOptional<z.ZodString>;
313
+ title: z.ZodOptional<z.ZodString>;
314
+ subtitle: z.ZodOptional<z.ZodString>;
315
+ showMap: z.ZodOptional<z.ZodBoolean>;
316
+ type: z.ZodLiteral<"contact">;
317
+ }, z.core.$strict>, z.ZodObject<{
318
+ id: z.ZodOptional<z.ZodString>;
319
+ title: z.ZodOptional<z.ZodString>;
320
+ subtitle: z.ZodOptional<z.ZodString>;
321
+ fields: z.ZodOptional<z.ZodArray<z.ZodEnum<{
322
+ phone: "phone";
323
+ email: "email";
324
+ name: "name";
325
+ message: "message";
326
+ }>>>;
327
+ submitLabel: z.ZodOptional<z.ZodString>;
328
+ consentText: z.ZodOptional<z.ZodString>;
329
+ type: z.ZodLiteral<"lead-form">;
330
+ }, z.core.$strict>, z.ZodObject<{
331
+ id: z.ZodOptional<z.ZodString>;
332
+ title: z.ZodOptional<z.ZodString>;
333
+ subtitle: z.ZodOptional<z.ZodString>;
334
+ html: z.ZodString;
335
+ minHeight: z.ZodOptional<z.ZodString>;
336
+ type: z.ZodLiteral<"widget">;
337
+ }, z.core.$strict>, z.ZodObject<{
338
+ id: z.ZodOptional<z.ZodString>;
339
+ title: z.ZodOptional<z.ZodString>;
340
+ subtitle: z.ZodOptional<z.ZodString>;
341
+ category: z.ZodOptional<z.ZodString>;
342
+ limit: z.ZodOptional<z.ZodNumber>;
343
+ type: z.ZodLiteral<"products">;
344
+ }, z.core.$strict>, z.ZodObject<{
345
+ id: z.ZodOptional<z.ZodString>;
346
+ title: z.ZodOptional<z.ZodString>;
347
+ subtitle: z.ZodOptional<z.ZodString>;
348
+ limit: z.ZodOptional<z.ZodNumber>;
349
+ type: z.ZodLiteral<"services">;
350
+ }, z.core.$strict>, z.ZodObject<{
351
+ id: z.ZodOptional<z.ZodString>;
352
+ title: z.ZodOptional<z.ZodString>;
353
+ subtitle: z.ZodOptional<z.ZodString>;
354
+ limit: z.ZodOptional<z.ZodNumber>;
355
+ type: z.ZodLiteral<"gallery">;
356
+ }, z.core.$strict>], "type">>;
357
+ }, z.core.$strict>;
358
+ export declare const pageSchema: z.ZodObject<{
359
+ title: z.ZodString;
360
+ description: z.ZodOptional<z.ZodString>;
361
+ sections: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
362
+ id: z.ZodOptional<z.ZodString>;
363
+ slides: z.ZodArray<z.ZodObject<{
364
+ image: z.ZodString;
365
+ alt: z.ZodString;
366
+ title: z.ZodString;
367
+ subtitle: z.ZodOptional<z.ZodString>;
368
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
369
+ label: z.ZodString;
370
+ href: z.ZodString;
371
+ }, z.core.$strict>, z.ZodObject<{
372
+ label: z.ZodString;
373
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
374
+ }, z.core.$strict>]>>;
375
+ secondaryCta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
376
+ label: z.ZodString;
377
+ href: z.ZodString;
378
+ }, z.core.$strict>, z.ZodObject<{
379
+ label: z.ZodString;
380
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
381
+ }, z.core.$strict>]>>;
382
+ href: z.ZodOptional<z.ZodString>;
383
+ align: z.ZodOptional<z.ZodEnum<{
384
+ left: "left";
385
+ center: "center";
386
+ right: "right";
387
+ }>>;
388
+ }, z.core.$strict>>;
389
+ autoplay: z.ZodOptional<z.ZodBoolean>;
390
+ interval: z.ZodOptional<z.ZodNumber>;
391
+ height: z.ZodOptional<z.ZodEnum<{
392
+ sm: "sm";
393
+ md: "md";
394
+ lg: "lg";
395
+ full: "full";
396
+ }>>;
397
+ type: z.ZodLiteral<"hero">;
398
+ }, z.core.$strict>, z.ZodObject<{
399
+ id: z.ZodOptional<z.ZodString>;
400
+ title: z.ZodOptional<z.ZodString>;
401
+ subtitle: z.ZodOptional<z.ZodString>;
402
+ items: z.ZodArray<z.ZodObject<{
403
+ icon: z.ZodEnum<{
404
+ phone: "phone";
405
+ "shield-check": "shield-check";
406
+ "badge-check": "badge-check";
407
+ award: "award";
408
+ star: "star";
409
+ "thumbs-up": "thumbs-up";
410
+ heart: "heart";
411
+ gem: "gem";
412
+ clock: "clock";
413
+ timer: "timer";
414
+ calendar: "calendar";
415
+ truck: "truck";
416
+ package: "package";
417
+ "credit-card": "credit-card";
418
+ "hand-coins": "hand-coins";
419
+ wrench: "wrench";
420
+ hammer: "hammer";
421
+ ruler: "ruler";
422
+ "paint-roller": "paint-roller";
423
+ house: "house";
424
+ zap: "zap";
425
+ droplets: "droplets";
426
+ lightbulb: "lightbulb";
427
+ leaf: "leaf";
428
+ recycle: "recycle";
429
+ users: "users";
430
+ headset: "headset";
431
+ "message-circle": "message-circle";
432
+ "map-pin": "map-pin";
433
+ sparkles: "sparkles";
434
+ }>;
435
+ title: z.ZodString;
436
+ text: z.ZodString;
437
+ }, z.core.$strict>>;
438
+ type: z.ZodLiteral<"benefits">;
439
+ }, z.core.$strict>, z.ZodObject<{
440
+ id: z.ZodOptional<z.ZodString>;
441
+ title: z.ZodOptional<z.ZodString>;
442
+ subtitle: z.ZodOptional<z.ZodString>;
443
+ text: z.ZodString;
444
+ image: z.ZodString;
445
+ imageAlt: z.ZodString;
446
+ imageSide: z.ZodOptional<z.ZodEnum<{
447
+ left: "left";
448
+ right: "right";
449
+ }>>;
450
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
451
+ label: z.ZodString;
452
+ href: z.ZodString;
453
+ }, z.core.$strict>, z.ZodObject<{
454
+ label: z.ZodString;
455
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
456
+ }, z.core.$strict>]>>;
457
+ type: z.ZodLiteral<"text-image">;
458
+ }, z.core.$strict>, z.ZodObject<{
459
+ id: z.ZodOptional<z.ZodString>;
460
+ title: z.ZodOptional<z.ZodString>;
461
+ subtitle: z.ZodOptional<z.ZodString>;
462
+ text: z.ZodOptional<z.ZodString>;
463
+ cta: z.ZodUnion<readonly [z.ZodObject<{
464
+ label: z.ZodString;
465
+ href: z.ZodString;
466
+ }, z.core.$strict>, z.ZodObject<{
467
+ label: z.ZodString;
468
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
469
+ }, z.core.$strict>]>;
470
+ tone: z.ZodOptional<z.ZodEnum<{
471
+ primary: "primary";
472
+ cta: "cta";
473
+ muted: "muted";
474
+ }>>;
475
+ type: z.ZodLiteral<"cta-banner">;
476
+ }, z.core.$strict>, z.ZodObject<{
477
+ id: z.ZodOptional<z.ZodString>;
478
+ title: z.ZodOptional<z.ZodString>;
479
+ subtitle: z.ZodOptional<z.ZodString>;
480
+ items: z.ZodArray<z.ZodObject<{
481
+ name: z.ZodString;
482
+ text: z.ZodString;
483
+ role: z.ZodOptional<z.ZodString>;
484
+ rating: z.ZodOptional<z.ZodLiteral<2 | 5 | 1 | 4 | 3>>;
485
+ image: z.ZodOptional<z.ZodString>;
486
+ }, z.core.$strict>>;
487
+ type: z.ZodLiteral<"testimonials">;
488
+ }, z.core.$strict>, z.ZodObject<{
489
+ id: z.ZodOptional<z.ZodString>;
490
+ title: z.ZodOptional<z.ZodString>;
491
+ subtitle: z.ZodOptional<z.ZodString>;
492
+ items: z.ZodArray<z.ZodObject<{
493
+ value: z.ZodString;
494
+ label: z.ZodString;
495
+ }, z.core.$strict>>;
496
+ type: z.ZodLiteral<"stats">;
497
+ }, z.core.$strict>, z.ZodObject<{
498
+ id: z.ZodOptional<z.ZodString>;
499
+ title: z.ZodOptional<z.ZodString>;
500
+ subtitle: z.ZodOptional<z.ZodString>;
501
+ items: z.ZodArray<z.ZodObject<{
502
+ question: z.ZodString;
503
+ answer: z.ZodString;
504
+ }, z.core.$strict>>;
505
+ type: z.ZodLiteral<"faq">;
506
+ }, z.core.$strict>, z.ZodObject<{
507
+ id: z.ZodOptional<z.ZodString>;
508
+ title: z.ZodOptional<z.ZodString>;
509
+ subtitle: z.ZodOptional<z.ZodString>;
510
+ showMap: z.ZodOptional<z.ZodBoolean>;
511
+ type: z.ZodLiteral<"contact">;
512
+ }, z.core.$strict>, z.ZodObject<{
513
+ id: z.ZodOptional<z.ZodString>;
514
+ title: z.ZodOptional<z.ZodString>;
515
+ subtitle: z.ZodOptional<z.ZodString>;
516
+ fields: z.ZodOptional<z.ZodArray<z.ZodEnum<{
517
+ phone: "phone";
518
+ email: "email";
519
+ name: "name";
520
+ message: "message";
521
+ }>>>;
522
+ submitLabel: z.ZodOptional<z.ZodString>;
523
+ consentText: z.ZodOptional<z.ZodString>;
524
+ type: z.ZodLiteral<"lead-form">;
525
+ }, z.core.$strict>, z.ZodObject<{
526
+ id: z.ZodOptional<z.ZodString>;
527
+ title: z.ZodOptional<z.ZodString>;
528
+ subtitle: z.ZodOptional<z.ZodString>;
529
+ html: z.ZodString;
530
+ minHeight: z.ZodOptional<z.ZodString>;
531
+ type: z.ZodLiteral<"widget">;
532
+ }, z.core.$strict>, z.ZodObject<{
533
+ id: z.ZodOptional<z.ZodString>;
534
+ title: z.ZodOptional<z.ZodString>;
535
+ subtitle: z.ZodOptional<z.ZodString>;
536
+ category: z.ZodOptional<z.ZodString>;
537
+ limit: z.ZodOptional<z.ZodNumber>;
538
+ type: z.ZodLiteral<"products">;
539
+ }, z.core.$strict>, z.ZodObject<{
540
+ id: z.ZodOptional<z.ZodString>;
541
+ title: z.ZodOptional<z.ZodString>;
542
+ subtitle: z.ZodOptional<z.ZodString>;
543
+ limit: z.ZodOptional<z.ZodNumber>;
544
+ type: z.ZodLiteral<"services">;
545
+ }, z.core.$strict>, z.ZodObject<{
546
+ id: z.ZodOptional<z.ZodString>;
547
+ title: z.ZodOptional<z.ZodString>;
548
+ subtitle: z.ZodOptional<z.ZodString>;
549
+ limit: z.ZodOptional<z.ZodNumber>;
550
+ type: z.ZodLiteral<"gallery">;
551
+ }, z.core.$strict>], "type">>;
552
+ }, z.core.$strict>;
553
+ type Home = z.output<typeof homeSchema>;
554
+ type Page = z.output<typeof pageSchema>;
555
+ //#endregion
556
+ //#region src/issues.d.ts
557
+ export declare function formatIssuePath(path: readonly PropertyKey[]): string;
558
+ //#endregion
559
+ //#region src/links.d.ts
560
+ declare const siteLinkSchema: z.ZodUnion<readonly [z.ZodObject<{
561
+ label: z.ZodString;
562
+ href: z.ZodString;
563
+ }, z.core.$strict>, z.ZodObject<{
564
+ label: z.ZodString;
565
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
566
+ }, z.core.$strict>]>;
567
+ type SiteLink = z.output<typeof siteLinkSchema>;
568
+ //#endregion
569
+ //#region src/theme/tokens.d.ts
570
+ type LengthUnit = "px" | "rem" | "em";
571
+ type ShapeTokenSpec = {
572
+ name: `--${string}`;
573
+ kind: "length";
574
+ min: string;
575
+ max: string;
576
+ units?: readonly LengthUnit[];
577
+ sera: string;
578
+ } | {
579
+ name: `--${string}`;
580
+ kind: "percentage" | "number";
581
+ min: number;
582
+ max: number;
583
+ sera: string;
584
+ } | {
585
+ name: `--${string}`;
586
+ kind: "color" | "shadow";
587
+ sera: string;
588
+ } | {
589
+ name: `--${string}`;
590
+ kind: "keyword";
591
+ values: readonly string[];
592
+ sera: string;
593
+ };
594
+ export declare const SHAPE_TOKENS: readonly [{
595
+ readonly name: "--radius";
596
+ readonly kind: "length";
597
+ readonly min: "0";
598
+ readonly max: "2rem";
599
+ readonly sera: "0.625rem";
600
+ }, {
601
+ readonly name: "--radius-control";
602
+ readonly kind: "length";
603
+ readonly min: "0";
604
+ readonly max: "9999px";
605
+ readonly sera: "0px";
606
+ }, {
607
+ readonly name: "--radius-card";
608
+ readonly kind: "length";
609
+ readonly min: "0";
610
+ readonly max: "3rem";
611
+ readonly sera: "0px";
612
+ }, {
613
+ readonly name: "--radius-media";
614
+ readonly kind: "length";
615
+ readonly min: "0";
616
+ readonly max: "3rem";
617
+ readonly sera: "0px";
618
+ }, {
619
+ readonly name: "--radius-surface";
620
+ readonly kind: "length";
621
+ readonly min: "0";
622
+ readonly max: "3rem";
623
+ readonly sera: "var(--radius)";
624
+ }, {
625
+ readonly name: "--radius-field";
626
+ readonly kind: "length";
627
+ readonly min: "0";
628
+ readonly max: "9999px";
629
+ readonly sera: "calc(var(--radius) * 0.8)";
630
+ }, {
631
+ readonly name: "--radius-card-compact";
632
+ readonly kind: "length";
633
+ readonly min: "0";
634
+ readonly max: "3rem";
635
+ readonly sera: "0.125rem";
636
+ }, {
637
+ readonly name: "--border-width";
638
+ readonly kind: "length";
639
+ readonly min: "0";
640
+ readonly max: "4px";
641
+ readonly sera: "1px";
642
+ }, {
643
+ readonly name: "--surface-border-width";
644
+ readonly kind: "length";
645
+ readonly min: "0";
646
+ readonly max: "4px";
647
+ readonly sera: "1px";
648
+ }, {
649
+ readonly name: "--card-ring-width";
650
+ readonly kind: "length";
651
+ readonly min: "0";
652
+ readonly max: "4px";
653
+ readonly sera: "1px";
654
+ }, {
655
+ readonly name: "--card-ring-color";
656
+ readonly kind: "color";
657
+ readonly sera: "color-mix(in oklab, var(--foreground) 5%, transparent)";
658
+ }, {
659
+ readonly name: "--popover-ring-color";
660
+ readonly kind: "color";
661
+ readonly sera: "color-mix(in oklab, var(--foreground) 10%, transparent)";
662
+ }, {
663
+ readonly name: "--shadow-card";
664
+ readonly kind: "shadow";
665
+ readonly sera: "var(--shadow-sm)";
666
+ }, {
667
+ readonly name: "--shadow-card-hover";
668
+ readonly kind: "shadow";
669
+ readonly sera: "var(--shadow-md)";
670
+ }, {
671
+ readonly name: "--shadow-overlay";
672
+ readonly kind: "shadow";
673
+ readonly sera: "var(--shadow-md)";
674
+ }, {
675
+ readonly name: "--shadow-control";
676
+ readonly kind: "shadow";
677
+ readonly sera: "var(--shadow-xs)";
678
+ }, {
679
+ readonly name: "--surface-alpha";
680
+ readonly kind: "percentage";
681
+ readonly min: 0;
682
+ readonly max: 100;
683
+ readonly sera: "100%";
684
+ }, {
685
+ readonly name: "--blur";
686
+ readonly kind: "length";
687
+ readonly min: "0";
688
+ readonly max: "24px";
689
+ readonly sera: "0px";
690
+ }, {
691
+ readonly name: "--header-alpha";
692
+ readonly kind: "percentage";
693
+ readonly min: 0;
694
+ readonly max: 100;
695
+ readonly sera: "86%";
696
+ }, {
697
+ readonly name: "--header-blur";
698
+ readonly kind: "length";
699
+ readonly min: "0";
700
+ readonly max: "40px";
701
+ readonly sera: "40px";
702
+ }, {
703
+ readonly name: "--overlay-alpha";
704
+ readonly kind: "percentage";
705
+ readonly min: 0;
706
+ readonly max: 100;
707
+ readonly sera: "20%";
708
+ }, {
709
+ readonly name: "--overlay-blur";
710
+ readonly kind: "length";
711
+ readonly min: "0";
712
+ readonly max: "24px";
713
+ readonly sera: "8px";
714
+ }, {
715
+ readonly name: "--density";
716
+ readonly kind: "number";
717
+ readonly min: 0.75;
718
+ readonly max: 1.25;
719
+ readonly sera: "1";
720
+ }, {
721
+ readonly name: "--control-case";
722
+ readonly kind: "keyword";
723
+ readonly values: readonly ["uppercase", "none"];
724
+ readonly sera: "uppercase";
725
+ }, {
726
+ readonly name: "--control-tracking";
727
+ readonly kind: "length";
728
+ readonly min: "0em";
729
+ readonly max: "0.2em";
730
+ readonly units: readonly ["em"];
731
+ readonly sera: "0.1em";
732
+ }, {
733
+ readonly name: "--control-weight";
734
+ readonly kind: "number";
735
+ readonly min: 400;
736
+ readonly max: 800;
737
+ readonly sera: "600";
738
+ }, {
739
+ readonly name: "--title-case";
740
+ readonly kind: "keyword";
741
+ readonly values: readonly ["uppercase", "none"];
742
+ readonly sera: "uppercase";
743
+ }, {
744
+ readonly name: "--title-tracking";
745
+ readonly kind: "length";
746
+ readonly min: "0em";
747
+ readonly max: "0.2em";
748
+ readonly units: readonly ["em"];
749
+ readonly sera: "0.05em";
750
+ }, {
751
+ readonly name: "--label-case";
752
+ readonly kind: "keyword";
753
+ readonly values: readonly ["uppercase", "none"];
754
+ readonly sera: "uppercase";
755
+ }, {
756
+ readonly name: "--label-tracking";
757
+ readonly kind: "length";
758
+ readonly min: "0em";
759
+ readonly max: "0.2em";
760
+ readonly units: readonly ["em"];
761
+ readonly sera: "0.025em";
762
+ }, {
763
+ readonly name: "--ring-width";
764
+ readonly kind: "length";
765
+ readonly min: "1px";
766
+ readonly max: "4px";
767
+ readonly sera: "2px";
768
+ }];
769
+ type ShapeTokenName = (typeof SHAPE_TOKENS)[number]["name"];
770
+ /** Nome sem o "--", usado como chave em brand.shape (ex.: "radius-control"). */
771
+ type ShapeTokenKey = ShapeTokenName extends `--${infer K}` ? K : never;
772
+ type ShapeTokens = Record<ShapeTokenKey, string>;
773
+ export declare const SHAPE_TOKEN_KEYS: readonly [ShapeTokenKey, ...ShapeTokenKey[]];
774
+ /** Estilos embutidos (Q-09). */
775
+ export declare const STYLE_IDS: readonly ["sera", "soft", "glass", "flat"];
776
+ type StyleId = (typeof STYLE_IDS)[number];
777
+ export declare const DEFAULT_STYLE_ID: StyleId;
778
+ /** Variável do tema que diz o estilo preferido dele (no :root). */
779
+ export declare const IRIS_STYLE_VAR = "--iris-style";
780
+ /**
781
+ * Utilitários congelados do §5.4, definidos no iris.css do core. Mesma lista do "utilities"
782
+ * de docs/spec/style-inventory.json (um teste confere).
783
+ */
784
+ export declare const FROZEN_UTILITIES: readonly ["rounded-control", "rounded-card", "rounded-media", "rounded-surface", "rounded-surface-lg", "rounded-field", "rounded-card-compact", "shadow-card", "shadow-card-hover", "shadow-overlay", "shadow-control", "surface-card", "surface-popover", "surface-header", "surface-overlay", "border-control", "border-surface", "border-selected", "divider-t", "divider-b", "divider-l", "divider-r", "divider-between-y", "ring-focus", "py-section", "p-card", "gap-density", "weight-control", "case-control", "case-control-compact", "case-title", "case-label"];
785
+ //#endregion
786
+ //#region src/define.d.ts
787
+ declare const FIELD_ASK: readonly ["always", "optional", "never"];
788
+ /**
789
+ * Metadados de campo, via .meta() (por último na cadeia, depois de .optional() e .default()).
790
+ * Validados em runtime por defineSection: não há module augmentation do zod, para não mudar
791
+ * o zod de quem instala o pacote.
792
+ */
793
+ export declare const fieldMetaSchema: z.ZodObject<{
794
+ label: z.ZodOptional<z.ZodString>;
795
+ description: z.ZodOptional<z.ZodString>;
796
+ example: z.ZodOptional<z.ZodString>;
797
+ input: z.ZodOptional<z.ZodEnum<{
798
+ number: "number";
799
+ text: "text";
800
+ url: "url";
801
+ link: "link";
802
+ confirm: "confirm";
803
+ multiline: "multiline";
804
+ image: "image";
805
+ select: "select";
806
+ icon: "icon";
807
+ multiselect: "multiselect";
808
+ }>>;
809
+ ask: z.ZodOptional<z.ZodEnum<{
810
+ optional: "optional";
811
+ never: "never";
812
+ always: "always";
813
+ }>>;
814
+ order: z.ZodOptional<z.ZodNumber>;
815
+ }, z.core.$strict>;
816
+ type FieldMeta = z.infer<typeof fieldMetaSchema>;
817
+ type FieldAsk = (typeof FIELD_ASK)[number];
818
+ type SectionModule = "core" | ModuleId;
819
+ interface SectionLimits {
820
+ maxPerPage?: number;
821
+ homeOnly?: boolean;
822
+ }
823
+ /** Campos comuns das seções (menos o hero, que só tem id). */
824
+ export declare const sectionBase: z.ZodObject<{
825
+ id: z.ZodOptional<z.ZodString>;
826
+ title: z.ZodOptional<z.ZodString>;
827
+ subtitle: z.ZodOptional<z.ZodString>;
828
+ }, z.core.$strip>;
829
+ /** Metadado do campo (o registrado na própria instância). */
830
+ export declare function fieldMeta(schema: z.ZodType): FieldMeta | undefined;
831
+ /** Se a CLI pergunta o campo: o ask do metadado, ou "always" se obrigatório e "never" se opcional. */
832
+ export declare function fieldAsk(schema: z.ZodType): FieldAsk;
833
+ /** Monta o schema final da seção: os campos mais o type literal, strict. */
834
+ declare function sectionSchemaOf<T extends string, S extends z.ZodRawShape>(type: T, fields: z.ZodObject<S>): z.ZodObject<(keyof S & "type" extends never ? S & {
835
+ type: z.ZodLiteral<T>;
836
+ } : { [K in keyof S as K extends "type" ? never : K]: S[K]; } & {
837
+ type: z.ZodLiteral<T>;
838
+ }) extends (infer T_1) ? { [k in keyof T_1]: T_1[k]; } : never, z.core.$strict>;
839
+ type SectionSchemaOf<T extends string, S extends z.ZodRawShape> = ReturnType<typeof sectionSchemaOf<T, S>>;
840
+ interface SectionPreset<V = unknown> {
841
+ id: string;
842
+ label: string;
843
+ value: V;
844
+ }
845
+ interface SectionDefinition<T extends string = string, M extends SectionModule = SectionModule, S extends z.ZodRawShape = z.ZodRawShape> {
846
+ type: T;
847
+ module: M;
848
+ label: string;
849
+ description: string;
850
+ schema: SectionSchemaOf<T, S>;
851
+ presets: SectionPreset<Omit<z.input<SectionSchemaOf<T, S>>, "type">>[];
852
+ limits: SectionLimits;
853
+ }
854
+ /**
855
+ * Define uma seção. Falha na hora (na importação do pacote) se: o type não é kebab-case,
856
+ * um metadado é inválido, um campo perguntado não tem label, ou um preset não valida.
857
+ */
858
+ export declare function defineSection<const T extends string, const M extends SectionModule, S extends z.ZodRawShape>(def: {
859
+ type: T;
860
+ module: M;
861
+ label: string;
862
+ description: string;
863
+ fields: z.ZodObject<S>;
864
+ presets?: SectionPreset<Omit<z.input<SectionSchemaOf<T, S>>, "type">>[];
865
+ limits?: SectionLimits;
866
+ }): SectionDefinition<T, M, S>;
867
+ //#endregion
868
+ //#region src/sections/index.d.ts
869
+ /** Todas as definições, na ordem de hoje: as do núcleo e depois as dos módulos. */
870
+ export declare const sectionDefinitions: readonly [SectionDefinition<"hero", "core", {
871
+ id: z.ZodOptional<z.ZodString>;
872
+ slides: z.ZodArray<z.ZodObject<{
873
+ image: z.ZodString;
874
+ alt: z.ZodString;
875
+ title: z.ZodString;
876
+ subtitle: z.ZodOptional<z.ZodString>;
877
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
878
+ label: z.ZodString;
879
+ href: z.ZodString;
880
+ }, z.core.$strict>, z.ZodObject<{
881
+ label: z.ZodString;
882
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
883
+ }, z.core.$strict>]>>;
884
+ secondaryCta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
885
+ label: z.ZodString;
886
+ href: z.ZodString;
887
+ }, z.core.$strict>, z.ZodObject<{
888
+ label: z.ZodString;
889
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
890
+ }, z.core.$strict>]>>;
891
+ href: z.ZodOptional<z.ZodString>;
892
+ align: z.ZodOptional<z.ZodEnum<{
893
+ left: "left";
894
+ center: "center";
895
+ right: "right";
896
+ }>>;
897
+ }, z.core.$strict>>;
898
+ autoplay: z.ZodOptional<z.ZodBoolean>;
899
+ interval: z.ZodOptional<z.ZodNumber>;
900
+ height: z.ZodOptional<z.ZodEnum<{
901
+ sm: "sm";
902
+ md: "md";
903
+ lg: "lg";
904
+ full: "full";
905
+ }>>;
906
+ }>, SectionDefinition<"benefits", "core", {
907
+ id: z.ZodOptional<z.ZodString>;
908
+ title: z.ZodOptional<z.ZodString>;
909
+ subtitle: z.ZodOptional<z.ZodString>;
910
+ items: z.ZodArray<z.ZodObject<{
911
+ icon: z.ZodEnum<{
912
+ phone: "phone";
913
+ "shield-check": "shield-check";
914
+ "badge-check": "badge-check";
915
+ award: "award";
916
+ star: "star";
917
+ "thumbs-up": "thumbs-up";
918
+ heart: "heart";
919
+ gem: "gem";
920
+ clock: "clock";
921
+ timer: "timer";
922
+ calendar: "calendar";
923
+ truck: "truck";
924
+ package: "package";
925
+ "credit-card": "credit-card";
926
+ "hand-coins": "hand-coins";
927
+ wrench: "wrench";
928
+ hammer: "hammer";
929
+ ruler: "ruler";
930
+ "paint-roller": "paint-roller";
931
+ house: "house";
932
+ zap: "zap";
933
+ droplets: "droplets";
934
+ lightbulb: "lightbulb";
935
+ leaf: "leaf";
936
+ recycle: "recycle";
937
+ users: "users";
938
+ headset: "headset";
939
+ "message-circle": "message-circle";
940
+ "map-pin": "map-pin";
941
+ sparkles: "sparkles";
942
+ }>;
943
+ title: z.ZodString;
944
+ text: z.ZodString;
945
+ }, z.core.$strict>>;
946
+ }>, SectionDefinition<"text-image", "core", {
947
+ id: z.ZodOptional<z.ZodString>;
948
+ title: z.ZodOptional<z.ZodString>;
949
+ subtitle: z.ZodOptional<z.ZodString>;
950
+ text: z.ZodString;
951
+ image: z.ZodString;
952
+ imageAlt: z.ZodString;
953
+ imageSide: z.ZodOptional<z.ZodEnum<{
954
+ left: "left";
955
+ right: "right";
956
+ }>>;
957
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
958
+ label: z.ZodString;
959
+ href: z.ZodString;
960
+ }, z.core.$strict>, z.ZodObject<{
961
+ label: z.ZodString;
962
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
963
+ }, z.core.$strict>]>>;
964
+ }>, SectionDefinition<"cta-banner", "core", {
965
+ id: z.ZodOptional<z.ZodString>;
966
+ title: z.ZodOptional<z.ZodString>;
967
+ subtitle: z.ZodOptional<z.ZodString>;
968
+ text: z.ZodOptional<z.ZodString>;
969
+ cta: z.ZodUnion<readonly [z.ZodObject<{
970
+ label: z.ZodString;
971
+ href: z.ZodString;
972
+ }, z.core.$strict>, z.ZodObject<{
973
+ label: z.ZodString;
974
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
975
+ }, z.core.$strict>]>;
976
+ tone: z.ZodOptional<z.ZodEnum<{
977
+ primary: "primary";
978
+ cta: "cta";
979
+ muted: "muted";
980
+ }>>;
981
+ }>, SectionDefinition<"testimonials", "core", {
982
+ id: z.ZodOptional<z.ZodString>;
983
+ title: z.ZodOptional<z.ZodString>;
984
+ subtitle: z.ZodOptional<z.ZodString>;
985
+ items: z.ZodArray<z.ZodObject<{
986
+ name: z.ZodString;
987
+ text: z.ZodString;
988
+ role: z.ZodOptional<z.ZodString>;
989
+ rating: z.ZodOptional<z.ZodLiteral<2 | 5 | 1 | 4 | 3>>;
990
+ image: z.ZodOptional<z.ZodString>;
991
+ }, z.core.$strict>>;
992
+ }>, SectionDefinition<"stats", "core", {
993
+ id: z.ZodOptional<z.ZodString>;
994
+ title: z.ZodOptional<z.ZodString>;
995
+ subtitle: z.ZodOptional<z.ZodString>;
996
+ items: z.ZodArray<z.ZodObject<{
997
+ value: z.ZodString;
998
+ label: z.ZodString;
999
+ }, z.core.$strict>>;
1000
+ }>, SectionDefinition<"faq", "core", {
1001
+ id: z.ZodOptional<z.ZodString>;
1002
+ title: z.ZodOptional<z.ZodString>;
1003
+ subtitle: z.ZodOptional<z.ZodString>;
1004
+ items: z.ZodArray<z.ZodObject<{
1005
+ question: z.ZodString;
1006
+ answer: z.ZodString;
1007
+ }, z.core.$strict>>;
1008
+ }>, SectionDefinition<"contact", "core", {
1009
+ id: z.ZodOptional<z.ZodString>;
1010
+ title: z.ZodOptional<z.ZodString>;
1011
+ subtitle: z.ZodOptional<z.ZodString>;
1012
+ showMap: z.ZodOptional<z.ZodBoolean>;
1013
+ }>, SectionDefinition<"lead-form", "core", {
1014
+ id: z.ZodOptional<z.ZodString>;
1015
+ title: z.ZodOptional<z.ZodString>;
1016
+ subtitle: z.ZodOptional<z.ZodString>;
1017
+ fields: z.ZodOptional<z.ZodArray<z.ZodEnum<{
1018
+ phone: "phone";
1019
+ email: "email";
1020
+ name: "name";
1021
+ message: "message";
1022
+ }>>>;
1023
+ submitLabel: z.ZodOptional<z.ZodString>;
1024
+ consentText: z.ZodOptional<z.ZodString>;
1025
+ }>, SectionDefinition<"widget", "core", {
1026
+ id: z.ZodOptional<z.ZodString>;
1027
+ title: z.ZodOptional<z.ZodString>;
1028
+ subtitle: z.ZodOptional<z.ZodString>;
1029
+ html: z.ZodString;
1030
+ minHeight: z.ZodOptional<z.ZodString>;
1031
+ }>, SectionDefinition<"products", "products", {
1032
+ id: z.ZodOptional<z.ZodString>;
1033
+ title: z.ZodOptional<z.ZodString>;
1034
+ subtitle: z.ZodOptional<z.ZodString>;
1035
+ category: z.ZodOptional<z.ZodString>;
1036
+ limit: z.ZodOptional<z.ZodNumber>;
1037
+ }>, SectionDefinition<"services", "services", {
1038
+ id: z.ZodOptional<z.ZodString>;
1039
+ title: z.ZodOptional<z.ZodString>;
1040
+ subtitle: z.ZodOptional<z.ZodString>;
1041
+ limit: z.ZodOptional<z.ZodNumber>;
1042
+ }>, SectionDefinition<"gallery", "gallery", {
1043
+ id: z.ZodOptional<z.ZodString>;
1044
+ title: z.ZodOptional<z.ZodString>;
1045
+ subtitle: z.ZodOptional<z.ZodString>;
1046
+ limit: z.ZodOptional<z.ZodNumber>;
1047
+ }>];
1048
+ export declare const sectionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1049
+ id: z.ZodOptional<z.ZodString>;
1050
+ slides: z.ZodArray<z.ZodObject<{
1051
+ image: z.ZodString;
1052
+ alt: z.ZodString;
1053
+ title: z.ZodString;
1054
+ subtitle: z.ZodOptional<z.ZodString>;
1055
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
1056
+ label: z.ZodString;
1057
+ href: z.ZodString;
1058
+ }, z.core.$strict>, z.ZodObject<{
1059
+ label: z.ZodString;
1060
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
1061
+ }, z.core.$strict>]>>;
1062
+ secondaryCta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
1063
+ label: z.ZodString;
1064
+ href: z.ZodString;
1065
+ }, z.core.$strict>, z.ZodObject<{
1066
+ label: z.ZodString;
1067
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
1068
+ }, z.core.$strict>]>>;
1069
+ href: z.ZodOptional<z.ZodString>;
1070
+ align: z.ZodOptional<z.ZodEnum<{
1071
+ left: "left";
1072
+ center: "center";
1073
+ right: "right";
1074
+ }>>;
1075
+ }, z.core.$strict>>;
1076
+ autoplay: z.ZodOptional<z.ZodBoolean>;
1077
+ interval: z.ZodOptional<z.ZodNumber>;
1078
+ height: z.ZodOptional<z.ZodEnum<{
1079
+ sm: "sm";
1080
+ md: "md";
1081
+ lg: "lg";
1082
+ full: "full";
1083
+ }>>;
1084
+ type: z.ZodLiteral<"hero">;
1085
+ }, z.core.$strict>, z.ZodObject<{
1086
+ id: z.ZodOptional<z.ZodString>;
1087
+ title: z.ZodOptional<z.ZodString>;
1088
+ subtitle: z.ZodOptional<z.ZodString>;
1089
+ items: z.ZodArray<z.ZodObject<{
1090
+ icon: z.ZodEnum<{
1091
+ phone: "phone";
1092
+ "shield-check": "shield-check";
1093
+ "badge-check": "badge-check";
1094
+ award: "award";
1095
+ star: "star";
1096
+ "thumbs-up": "thumbs-up";
1097
+ heart: "heart";
1098
+ gem: "gem";
1099
+ clock: "clock";
1100
+ timer: "timer";
1101
+ calendar: "calendar";
1102
+ truck: "truck";
1103
+ package: "package";
1104
+ "credit-card": "credit-card";
1105
+ "hand-coins": "hand-coins";
1106
+ wrench: "wrench";
1107
+ hammer: "hammer";
1108
+ ruler: "ruler";
1109
+ "paint-roller": "paint-roller";
1110
+ house: "house";
1111
+ zap: "zap";
1112
+ droplets: "droplets";
1113
+ lightbulb: "lightbulb";
1114
+ leaf: "leaf";
1115
+ recycle: "recycle";
1116
+ users: "users";
1117
+ headset: "headset";
1118
+ "message-circle": "message-circle";
1119
+ "map-pin": "map-pin";
1120
+ sparkles: "sparkles";
1121
+ }>;
1122
+ title: z.ZodString;
1123
+ text: z.ZodString;
1124
+ }, z.core.$strict>>;
1125
+ type: z.ZodLiteral<"benefits">;
1126
+ }, z.core.$strict>, z.ZodObject<{
1127
+ id: z.ZodOptional<z.ZodString>;
1128
+ title: z.ZodOptional<z.ZodString>;
1129
+ subtitle: z.ZodOptional<z.ZodString>;
1130
+ text: z.ZodString;
1131
+ image: z.ZodString;
1132
+ imageAlt: z.ZodString;
1133
+ imageSide: z.ZodOptional<z.ZodEnum<{
1134
+ left: "left";
1135
+ right: "right";
1136
+ }>>;
1137
+ cta: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
1138
+ label: z.ZodString;
1139
+ href: z.ZodString;
1140
+ }, z.core.$strict>, z.ZodObject<{
1141
+ label: z.ZodString;
1142
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
1143
+ }, z.core.$strict>]>>;
1144
+ type: z.ZodLiteral<"text-image">;
1145
+ }, z.core.$strict>, z.ZodObject<{
1146
+ id: z.ZodOptional<z.ZodString>;
1147
+ title: z.ZodOptional<z.ZodString>;
1148
+ subtitle: z.ZodOptional<z.ZodString>;
1149
+ text: z.ZodOptional<z.ZodString>;
1150
+ cta: z.ZodUnion<readonly [z.ZodObject<{
1151
+ label: z.ZodString;
1152
+ href: z.ZodString;
1153
+ }, z.core.$strict>, z.ZodObject<{
1154
+ label: z.ZodString;
1155
+ whatsapp: z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodString]>;
1156
+ }, z.core.$strict>]>;
1157
+ tone: z.ZodOptional<z.ZodEnum<{
1158
+ primary: "primary";
1159
+ cta: "cta";
1160
+ muted: "muted";
1161
+ }>>;
1162
+ type: z.ZodLiteral<"cta-banner">;
1163
+ }, z.core.$strict>, z.ZodObject<{
1164
+ id: z.ZodOptional<z.ZodString>;
1165
+ title: z.ZodOptional<z.ZodString>;
1166
+ subtitle: z.ZodOptional<z.ZodString>;
1167
+ items: z.ZodArray<z.ZodObject<{
1168
+ name: z.ZodString;
1169
+ text: z.ZodString;
1170
+ role: z.ZodOptional<z.ZodString>;
1171
+ rating: z.ZodOptional<z.ZodLiteral<2 | 5 | 1 | 4 | 3>>;
1172
+ image: z.ZodOptional<z.ZodString>;
1173
+ }, z.core.$strict>>;
1174
+ type: z.ZodLiteral<"testimonials">;
1175
+ }, z.core.$strict>, z.ZodObject<{
1176
+ id: z.ZodOptional<z.ZodString>;
1177
+ title: z.ZodOptional<z.ZodString>;
1178
+ subtitle: z.ZodOptional<z.ZodString>;
1179
+ items: z.ZodArray<z.ZodObject<{
1180
+ value: z.ZodString;
1181
+ label: z.ZodString;
1182
+ }, z.core.$strict>>;
1183
+ type: z.ZodLiteral<"stats">;
1184
+ }, z.core.$strict>, z.ZodObject<{
1185
+ id: z.ZodOptional<z.ZodString>;
1186
+ title: z.ZodOptional<z.ZodString>;
1187
+ subtitle: z.ZodOptional<z.ZodString>;
1188
+ items: z.ZodArray<z.ZodObject<{
1189
+ question: z.ZodString;
1190
+ answer: z.ZodString;
1191
+ }, z.core.$strict>>;
1192
+ type: z.ZodLiteral<"faq">;
1193
+ }, z.core.$strict>, z.ZodObject<{
1194
+ id: z.ZodOptional<z.ZodString>;
1195
+ title: z.ZodOptional<z.ZodString>;
1196
+ subtitle: z.ZodOptional<z.ZodString>;
1197
+ showMap: z.ZodOptional<z.ZodBoolean>;
1198
+ type: z.ZodLiteral<"contact">;
1199
+ }, z.core.$strict>, z.ZodObject<{
1200
+ id: z.ZodOptional<z.ZodString>;
1201
+ title: z.ZodOptional<z.ZodString>;
1202
+ subtitle: z.ZodOptional<z.ZodString>;
1203
+ fields: z.ZodOptional<z.ZodArray<z.ZodEnum<{
1204
+ phone: "phone";
1205
+ email: "email";
1206
+ name: "name";
1207
+ message: "message";
1208
+ }>>>;
1209
+ submitLabel: z.ZodOptional<z.ZodString>;
1210
+ consentText: z.ZodOptional<z.ZodString>;
1211
+ type: z.ZodLiteral<"lead-form">;
1212
+ }, z.core.$strict>, z.ZodObject<{
1213
+ id: z.ZodOptional<z.ZodString>;
1214
+ title: z.ZodOptional<z.ZodString>;
1215
+ subtitle: z.ZodOptional<z.ZodString>;
1216
+ html: z.ZodString;
1217
+ minHeight: z.ZodOptional<z.ZodString>;
1218
+ type: z.ZodLiteral<"widget">;
1219
+ }, z.core.$strict>, z.ZodObject<{
1220
+ id: z.ZodOptional<z.ZodString>;
1221
+ title: z.ZodOptional<z.ZodString>;
1222
+ subtitle: z.ZodOptional<z.ZodString>;
1223
+ category: z.ZodOptional<z.ZodString>;
1224
+ limit: z.ZodOptional<z.ZodNumber>;
1225
+ type: z.ZodLiteral<"products">;
1226
+ }, z.core.$strict>, z.ZodObject<{
1227
+ id: z.ZodOptional<z.ZodString>;
1228
+ title: z.ZodOptional<z.ZodString>;
1229
+ subtitle: z.ZodOptional<z.ZodString>;
1230
+ limit: z.ZodOptional<z.ZodNumber>;
1231
+ type: z.ZodLiteral<"services">;
1232
+ }, z.core.$strict>, z.ZodObject<{
1233
+ id: z.ZodOptional<z.ZodString>;
1234
+ title: z.ZodOptional<z.ZodString>;
1235
+ subtitle: z.ZodOptional<z.ZodString>;
1236
+ limit: z.ZodOptional<z.ZodNumber>;
1237
+ type: z.ZodLiteral<"gallery">;
1238
+ }, z.core.$strict>], "type">;
1239
+ type Section = z.output<typeof sectionSchema>;
1240
+ type SectionInput = z.input<typeof sectionSchema>;
1241
+ type SectionType = Section["type"];
1242
+ type SectionOf<T extends SectionType> = Extract<Section, {
1243
+ type: T;
1244
+ }>;
1245
+ type SectionDefinitionOf<T extends SectionType> = Extract<(typeof sectionDefinitions)[number], {
1246
+ type: T;
1247
+ }>;
1248
+ export declare const SECTION_TYPES: readonly SectionType[];
1249
+ export declare function getSectionDefinition<T extends SectionType>(type: T): SectionDefinitionOf<T>;
1250
+ /** Tipos de seção de um módulo ("core" = sempre presentes). */
1251
+ export declare function sectionsOfModule(module: SectionModule): SectionType[];
1252
+ type HeroSection = SectionOf<"hero">;
1253
+ type HeroSlide = HeroSection["slides"][number];
1254
+ type BenefitsSection = SectionOf<"benefits">;
1255
+ type TextImageSection = SectionOf<"text-image">;
1256
+ type CtaBannerSection = SectionOf<"cta-banner">;
1257
+ type TestimonialsSection = SectionOf<"testimonials">;
1258
+ type StatsSection = SectionOf<"stats">;
1259
+ type FaqSection = SectionOf<"faq">;
1260
+ type ContactSection = SectionOf<"contact">;
1261
+ type LeadFormSection = SectionOf<"lead-form">;
1262
+ type WidgetSection = SectionOf<"widget">;
1263
+ type ProductsSection = SectionOf<"products">;
1264
+ type ServicesSection = SectionOf<"services">;
1265
+ type GallerySection = SectionOf<"gallery">;
1266
+ //#endregion
1267
+ //#region src/registry.d.ts
1268
+ type SectionComponent<T extends SectionType> = (props: {
1269
+ section: SectionOf<T>;
1270
+ }) => unknown;
1271
+ type SectionRegistry = { [T in SectionType]?: SectionComponent<T>; };
1272
+ //#endregion
1273
+ //#region src/engine-api.d.ts
1274
+ interface Diagnostic {
1275
+ level: "error" | "warning";
1276
+ /** relativo à raiz do projeto */
1277
+ file: string;
1278
+ /** ex.: "sections[2].items[0].answer" ou "--radius-card" */
1279
+ path?: string;
1280
+ /** pt-BR */
1281
+ message: string;
1282
+ /** comando ou correção */
1283
+ hint?: string;
1284
+ }
1285
+ interface SyncResult {
1286
+ changed: string[];
1287
+ upToDate: boolean;
1288
+ diagnostics: Diagnostic[];
1289
+ }
1290
+ interface ThemeInfo {
1291
+ name: string;
1292
+ source: "builtin" | "project";
1293
+ style?: StyleId;
1294
+ }
1295
+ interface StyleInfo {
1296
+ id: StyleId;
1297
+ label: string;
1298
+ description: string;
1299
+ }
1300
+ /** Também usado no envelope --json da CLI. */
1301
+ interface FileChange {
1302
+ path: string;
1303
+ action: "create" | "update" | "delete";
1304
+ }
1305
+ /** De onde o ImportTheme baixa o tema: exatamente uma fonte. */
1306
+ type ImportThemeSource = {
1307
+ tweakcn: string;
1308
+ url?: never;
1309
+ shadcn?: never;
1310
+ } | {
1311
+ url: string;
1312
+ tweakcn?: never;
1313
+ shadcn?: never;
1314
+ } | {
1315
+ shadcn: string;
1316
+ tweakcn?: never;
1317
+ url?: never;
1318
+ };
1319
+ /** Importa site.config.ts pelo Node (type stripping) e resolve. */
1320
+ type LoadSiteConfig = (root: string) => Promise<SiteConfig>;
1321
+ type ListThemes = (root: string) => ThemeInfo[];
1322
+ type ListStyles = () => StyleInfo[];
1323
+ type ValidateTheme = (root: string, name: string) => Diagnostic[];
1324
+ /** ex-brand:sync: fontes + contraste */
1325
+ type SyncBrand = (root: string, opts: {
1326
+ check: boolean;
1327
+ }) => SyncResult;
1328
+ /** ex-theme:add, sem escrever. Só https:, e só variáveis CSS dentro de :root e .dark */
1329
+ type ImportTheme = (source: ImportThemeSource, as?: string) => Promise<{
1330
+ name: string;
1331
+ css: string;
1332
+ }>;
1333
+ type SyncRegistry = (root: string, opts: {
1334
+ check: boolean;
1335
+ }) => SyncResult;
1336
+ type SyncRoutes = (root: string, opts: {
1337
+ check: boolean;
1338
+ }) => SyncResult;
1339
+ /** brand + registry + routes */
1340
+ type Sync = (root: string, opts: {
1341
+ check: boolean;
1342
+ }) => SyncResult;
1343
+ type CheckContent = (root: string) => Diagnostic[];
1344
+ /** Tira as seções do módulo de content/home.json e content/pages/*.json. dryRun: só devolve as mudanças (P-4). */
1345
+ type RemoveModuleContent = (root: string, id: ModuleId, opts?: {
1346
+ dryRun?: boolean;
1347
+ }) => {
1348
+ changes: FileChange[];
1349
+ };
1350
+ //#endregion
1351
+ //#region src/cli.d.ts
1352
+ export declare const EXIT_CODES: {
1353
+ readonly INTERNAL: 1;
1354
+ readonly USAGE: 2;
1355
+ readonly MISSING_REQUIRED: 3;
1356
+ readonly VALIDATION: 4;
1357
+ readonly CONFLICT: 5;
1358
+ readonly ENVIRONMENT: 6;
1359
+ readonly CONFIG_NOT_EDITABLE: 7;
1360
+ readonly CANCELLED: 130;
1361
+ };
1362
+ type CliErrorCode = keyof typeof EXIT_CODES;
1363
+ type CliError = { [C in CliErrorCode]: {
1364
+ code: C;
1365
+ exitCode: (typeof EXIT_CODES)[C];
1366
+ message: string;
1367
+ hint?: string;
1368
+ missing?: string[];
1369
+ }; }[CliErrorCode];
1370
+ interface CliResultBase {
1371
+ schemaVersion: 1;
1372
+ command: string;
1373
+ changes: FileChange[];
1374
+ warnings: Diagnostic[];
1375
+ }
1376
+ type CliResult<T = unknown> = (CliResultBase & {
1377
+ ok: true;
1378
+ data: T;
1379
+ }) | (CliResultBase & {
1380
+ ok: false;
1381
+ data: null;
1382
+ error: CliError;
1383
+ });
1384
+ /** Valida um envelope --json em runtime (usado pelos testes de não travamento da CLI). */
1385
+ export declare const cliResultSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1386
+ ok: z.ZodLiteral<true>;
1387
+ data: z.ZodUnknown;
1388
+ schemaVersion: z.ZodLiteral<1>;
1389
+ command: z.ZodString;
1390
+ changes: z.ZodArray<z.ZodObject<{
1391
+ path: z.ZodString;
1392
+ action: z.ZodEnum<{
1393
+ create: "create";
1394
+ update: "update";
1395
+ delete: "delete";
1396
+ }>;
1397
+ }, z.core.$strict>>;
1398
+ warnings: z.ZodArray<z.ZodObject<{
1399
+ level: z.ZodEnum<{
1400
+ error: "error";
1401
+ warning: "warning";
1402
+ }>;
1403
+ file: z.ZodString;
1404
+ path: z.ZodOptional<z.ZodString>;
1405
+ message: z.ZodString;
1406
+ hint: z.ZodOptional<z.ZodString>;
1407
+ }, z.core.$strict>>;
1408
+ }, z.core.$strict>, z.ZodObject<{
1409
+ ok: z.ZodLiteral<false>;
1410
+ data: z.ZodNull;
1411
+ error: z.ZodObject<{
1412
+ code: z.ZodEnum<{
1413
+ INTERNAL: "INTERNAL";
1414
+ USAGE: "USAGE";
1415
+ MISSING_REQUIRED: "MISSING_REQUIRED";
1416
+ VALIDATION: "VALIDATION";
1417
+ CONFLICT: "CONFLICT";
1418
+ ENVIRONMENT: "ENVIRONMENT";
1419
+ CONFIG_NOT_EDITABLE: "CONFIG_NOT_EDITABLE";
1420
+ CANCELLED: "CANCELLED";
1421
+ }>;
1422
+ exitCode: z.ZodNumber;
1423
+ message: z.ZodString;
1424
+ hint: z.ZodOptional<z.ZodString>;
1425
+ missing: z.ZodOptional<z.ZodArray<z.ZodString>>;
1426
+ }, z.core.$strict>;
1427
+ schemaVersion: z.ZodLiteral<1>;
1428
+ command: z.ZodString;
1429
+ changes: z.ZodArray<z.ZodObject<{
1430
+ path: z.ZodString;
1431
+ action: z.ZodEnum<{
1432
+ create: "create";
1433
+ update: "update";
1434
+ delete: "delete";
1435
+ }>;
1436
+ }, z.core.$strict>>;
1437
+ warnings: z.ZodArray<z.ZodObject<{
1438
+ level: z.ZodEnum<{
1439
+ error: "error";
1440
+ warning: "warning";
1441
+ }>;
1442
+ file: z.ZodString;
1443
+ path: z.ZodOptional<z.ZodString>;
1444
+ message: z.ZodString;
1445
+ hint: z.ZodOptional<z.ZodString>;
1446
+ }, z.core.$strict>>;
1447
+ }, z.core.$strict>], "ok">;
1448
+ //#endregion
1449
+ export { type BenefitsSection, type BrandColors, type BrandConfig, type BrandFont, COLOR_TOKENS, type CatalogItem, type CheckContent, type CliError, type CliErrorCode, type CliResult, type ColorMode, type ColorToken, type ColorTokens, type CommerceConfig, type ContactInfo, type ContactSection, type CtaBannerSection, DEFAULT_BUTTON_ORDER, DEFAULT_MODULES, DEFAULT_TEXTS, type DeepPartial, type Diagnostic, type FaqSection, type FieldMeta, type FileChange, type FooterConfig, type GallerySection, type HeroSection, type HeroSlide, type Home, type ImportTheme, type ImportThemeSource, type Installment, type LeadField, type LeadFormSection, type LeadsConfig, type ListStyles, type ListThemes, type LoadSiteConfig, MODULES, MODULE_IDS, type MarketplacePlatform, type MenuItem, type ModuleId, PURCHASE_PLATFORMS, type Page, type Product, type ProductFilter, type ProductInput, type ProductsSection, type PurchaseButton, type PurchaseButtonTexts, type PurchaseContext, type PurchasePlatform, type RemoveModuleContent, type ResolvePurchaseButtons, SECTION_ICONS, type Section, type SectionComponent, type SectionDefinition, type SectionIcon, type SectionInput, type SectionLimits, type SectionModule, type SectionOf, type SectionPreset, type SectionRegistry, type SectionType, type Service, type ServiceInput, type ServicesSection, type ShapeTokenKey, type ShapeTokenName, type ShapeTokenSpec, type ShapeTokens, type SiteConfig, SiteConfigError, type SiteConfigInput, type SiteLink, type SiteLogo, type SiteTexts, type SocialNetwork, type Spec, type StatsSection, type StyleId, type StyleInfo, type Sync, type SyncBrand, type SyncRegistry, type SyncResult, type SyncRoutes, type TestimonialsSection, type TextImageSection, type ThemeInfo, type ValidateTheme, type WidgetSection, applySiteConfigDefaults, resolveSiteConfig, resolveTexts, siteConfigSchema };