@thorprovider/blocks 0.1.1 → 0.1.3

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 (70) hide show
  1. package/.turbo/turbo-build.log +15 -15
  2. package/.turbo/turbo-test.log +42 -5
  3. package/AGENTS.md +1 -1
  4. package/README.md +94 -1
  5. package/dist/.tsbuildinfo +1 -1
  6. package/dist/contracts.d.mts +1266 -97
  7. package/dist/contracts.d.ts +1266 -97
  8. package/dist/contracts.js +225 -9
  9. package/dist/contracts.js.map +1 -1
  10. package/dist/contracts.mjs +207 -10
  11. package/dist/contracts.mjs.map +1 -1
  12. package/dist/index.d.mts +756 -96
  13. package/dist/index.d.ts +756 -96
  14. package/dist/index.js +5114 -3702
  15. package/dist/index.js.map +1 -1
  16. package/dist/index.mjs +4939 -3551
  17. package/dist/index.mjs.map +1 -1
  18. package/docs/standards/theming.md +32 -5
  19. package/package.json +2 -2
  20. package/src/blocks/e-commerce/category-filters/category-filter-2-filter-panel.tsx +136 -93
  21. package/src/blocks/e-commerce/category-filters/category-filter-2.test.tsx +513 -0
  22. package/src/blocks/e-commerce/category-filters/category-filter-2.tsx +728 -148
  23. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation-fulfilment-progress.tsx +14 -8
  24. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.test.tsx +136 -0
  25. package/src/blocks/e-commerce/checkout-forms/checkout-confirmation.tsx +145 -99
  26. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-order-summary.tsx +215 -102
  27. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-payment-step.tsx +6 -2
  28. package/src/blocks/e-commerce/checkout-forms/checkout-form-1-shipping-step.tsx +51 -2
  29. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.test.tsx +216 -0
  30. package/src/blocks/e-commerce/checkout-forms/checkout-form-1.tsx +114 -11
  31. package/src/blocks/e-commerce/navigation/back-to-top.test.tsx +27 -0
  32. package/src/blocks/e-commerce/navigation/back-to-top.tsx +71 -0
  33. package/src/blocks/e-commerce/navigation/breadcrumb.test.tsx +174 -0
  34. package/src/blocks/e-commerce/navigation/breadcrumb.tsx +130 -0
  35. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.test.tsx +74 -0
  36. package/src/blocks/e-commerce/navigation/mobile-bottom-nav.tsx +78 -0
  37. package/src/blocks/e-commerce/navigation/mobile-category-drawer.test.tsx +42 -2
  38. package/src/blocks/e-commerce/navigation/mobile-category-drawer.tsx +10 -8
  39. package/src/blocks/e-commerce/navigation/skip-to-content.test.tsx +35 -0
  40. package/src/blocks/e-commerce/navigation/skip-to-content.tsx +37 -0
  41. package/src/blocks/e-commerce/product-categories/product-category-2.test.tsx +51 -0
  42. package/src/blocks/e-commerce/product-categories/product-category-2.tsx +56 -36
  43. package/src/blocks/e-commerce/product-list/product-card-1.test.tsx +88 -0
  44. package/src/blocks/e-commerce/product-list/product-card-1.tsx +141 -80
  45. package/src/blocks/e-commerce/product-list/product-showcase-1.test.tsx +78 -0
  46. package/src/blocks/e-commerce/product-list/product-showcase-1.tsx +277 -0
  47. package/src/blocks/e-commerce/product-overview/product-overview-1.test.tsx +182 -0
  48. package/src/blocks/e-commerce/product-overview/product-overview-1.tsx +298 -129
  49. package/src/blocks/e-commerce/shopping-carts/shopping-cart-4.test.tsx +229 -0
  50. package/src/blocks/e-commerce/shopping-carts/shopping-cart-4.tsx +313 -110
  51. package/src/blocks/e-commerce/storefront-hero/storefront-hero-1.test.tsx +72 -0
  52. package/src/blocks/e-commerce/storefront-hero/storefront-hero-1.tsx +20 -1
  53. package/src/blocks/marketing/footers/footer-section-1.test.tsx +117 -0
  54. package/src/blocks/marketing/footers/footer-section-1.tsx +46 -9
  55. package/src/blocks/marketing/navbars/navbar-4-account-menu.test.tsx +38 -0
  56. package/src/blocks/marketing/navbars/navbar-4-account-menu.tsx +30 -14
  57. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.test.tsx +204 -0
  58. package/src/blocks/marketing/navbars/navbar-4-cart-sheet.tsx +144 -21
  59. package/src/blocks/marketing/navbars/navbar-4.test.tsx +233 -0
  60. package/src/blocks/marketing/navbars/navbar-4.tsx +235 -60
  61. package/src/index.ts +56 -0
  62. package/src/lib/cart.test.ts +15 -0
  63. package/src/lib/cart.ts +11 -0
  64. package/src/lib/contracts-curated.test.ts +207 -0
  65. package/src/lib/contracts-server-boundary.test.ts +52 -0
  66. package/src/lib/contracts.ts +234 -6
  67. package/src/lib/money.test.ts +64 -0
  68. package/src/lib/money.ts +65 -0
  69. package/tsup.config.ts +0 -1
  70. package/vitest.config.ts +9 -1
@@ -1,6 +1,43 @@
1
1
  import { z } from 'zod';
2
2
  import { Money, ProductPreview, PaymentMethod } from '@thorprovider/types';
3
3
 
4
+ /**
5
+ * True only for a complete, finite decimal string (`"0"`, `"69.99"`, `"-3.5"`).
6
+ * Rejects `""`, `" "`, `"1."`, `".5"`, `"1e3"`, `"abc"`, and non-strings.
7
+ */
8
+ declare function isCompleteFiniteDecimal(value: unknown): value is string;
9
+ /**
10
+ * True when a `Money` value is safe to display and price a purchase with: a
11
+ * complete finite decimal amount and a non-empty currency code. A valid zero
12
+ * (`{ amount: '0', currencyCode: 'USD' }`) is available — zero alone does not
13
+ * make a price unavailable.
14
+ */
15
+ declare function isAvailableMoney(money: Money | null | undefined): money is Money;
16
+ /**
17
+ * Formats a `Money` for display, or `null` when the value is unavailable.
18
+ *
19
+ * This is the safety gate the whole curated surface relies on: an absent or
20
+ * malformed amount (`""`, `" "`, `"abc"`, a non-string, a missing currency)
21
+ * MUST NOT reach `Intl.NumberFormat`, because `Number("")` is `0` and would
22
+ * render a fake `$0.00` for missing data. A backend-resolved valid zero
23
+ * (`{ amount: "0", currencyCode: "USD" }`) is available and formats as zero.
24
+ *
25
+ * When no `formatter` is supplied the currency comes from
26
+ * `money.currencyCode`, so no currency is hardcoded. Callers render their own
27
+ * unavailable/pending/recovery state when this returns `null`.
28
+ */
29
+ declare function formatMoney(money: Money | null | undefined, formatter?: (money: Money) => string): string | null;
30
+
31
+ /**
32
+ * Cart line quantity normalization shared by the curated cart surfaces.
33
+ *
34
+ * The Navbar mini-cart expresses a quantity DELTA while the cart page reports
35
+ * an ABSOLUTE quantity. The boundary normalizes the delta against the
36
+ * authoritative current line quantity (from the backend cart) before mutating;
37
+ * it must never reinterpret one as the other.
38
+ */
39
+ declare function resolveAbsoluteQuantity(currentQuantity: number, delta: number): number;
40
+
4
41
  /**
5
42
  * Serialization contracts for spec-driven storefronts.
6
43
  *
@@ -30,6 +67,689 @@ type CanonProduct = ProductPreview;
30
67
  * one so direct consumers are safe by default.
31
68
  */
32
69
  declare const PRODUCT_IMAGE_FALLBACK: string;
70
+ /**
71
+ * Canonical `Money` (`@thorprovider/types`): a decimal string in major units
72
+ * (`"69.99"`), never cents. A missing price is represented by omitting the
73
+ * field (or `null` on a nullable field), not by an empty string.
74
+ *
75
+ * The amount stays a permissive `z.string()` on purpose: an unresolved backend
76
+ * price may arrive as the canonical sentinel `""`, and tightening the schema
77
+ * would reject the whole view instead of letting the presentation layer render
78
+ * an unavailable state. Validity is enforced at render time by
79
+ * `isAvailableMoney`/`formatMoney` (a `""`/malformed amount never becomes `$0`).
80
+ */
81
+ declare const moneySchema: z.ZodType<Money>;
82
+ declare const productDetailVariantSchema: z.ZodObject<{
83
+ id: z.ZodString;
84
+ title: z.ZodString;
85
+ sku: z.ZodOptional<z.ZodString>;
86
+ availableForSale: z.ZodBoolean;
87
+ selectedOptions: z.ZodArray<z.ZodObject<{
88
+ name: z.ZodString;
89
+ value: z.ZodString;
90
+ }, "strip", z.ZodTypeAny, {
91
+ value: string;
92
+ name: string;
93
+ }, {
94
+ value: string;
95
+ name: string;
96
+ }>, "many">;
97
+ /** Omit or null when the backend has no resolved price (purchase disabled). */
98
+ price: z.ZodOptional<z.ZodNullable<z.ZodType<Money, z.ZodTypeDef, Money>>>;
99
+ compareAtPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
100
+ image: z.ZodOptional<z.ZodObject<{
101
+ id: z.ZodOptional<z.ZodString>;
102
+ url: z.ZodString;
103
+ altText: z.ZodString;
104
+ width: z.ZodOptional<z.ZodNumber>;
105
+ height: z.ZodOptional<z.ZodNumber>;
106
+ }, "strip", z.ZodTypeAny, {
107
+ url: string;
108
+ altText: string;
109
+ id?: string | undefined;
110
+ width?: number | undefined;
111
+ height?: number | undefined;
112
+ }, {
113
+ url: string;
114
+ altText: string;
115
+ id?: string | undefined;
116
+ width?: number | undefined;
117
+ height?: number | undefined;
118
+ }>>;
119
+ }, "strip", z.ZodTypeAny, {
120
+ id: string;
121
+ title: string;
122
+ availableForSale: boolean;
123
+ selectedOptions: {
124
+ value: string;
125
+ name: string;
126
+ }[];
127
+ sku?: string | undefined;
128
+ price?: Money | null | undefined;
129
+ compareAtPrice?: Money | undefined;
130
+ image?: {
131
+ url: string;
132
+ altText: string;
133
+ id?: string | undefined;
134
+ width?: number | undefined;
135
+ height?: number | undefined;
136
+ } | undefined;
137
+ }, {
138
+ id: string;
139
+ title: string;
140
+ availableForSale: boolean;
141
+ selectedOptions: {
142
+ value: string;
143
+ name: string;
144
+ }[];
145
+ sku?: string | undefined;
146
+ price?: Money | null | undefined;
147
+ compareAtPrice?: Money | undefined;
148
+ image?: {
149
+ url: string;
150
+ altText: string;
151
+ id?: string | undefined;
152
+ width?: number | undefined;
153
+ height?: number | undefined;
154
+ } | undefined;
155
+ }>;
156
+ type ProductDetailVariantSpec = z.infer<typeof productDetailVariantSchema>;
157
+ declare const productDetailProductSchema: z.ZodObject<{
158
+ id: z.ZodString;
159
+ handle: z.ZodOptional<z.ZodString>;
160
+ title: z.ZodString;
161
+ description: z.ZodOptional<z.ZodString>;
162
+ vendor: z.ZodOptional<z.ZodString>;
163
+ options: z.ZodArray<z.ZodObject<{
164
+ id: z.ZodString;
165
+ name: z.ZodString;
166
+ values: z.ZodArray<z.ZodString, "many">;
167
+ }, "strip", z.ZodTypeAny, {
168
+ values: string[];
169
+ id: string;
170
+ name: string;
171
+ }, {
172
+ values: string[];
173
+ id: string;
174
+ name: string;
175
+ }>, "many">;
176
+ variants: z.ZodArray<z.ZodObject<{
177
+ id: z.ZodString;
178
+ title: z.ZodString;
179
+ sku: z.ZodOptional<z.ZodString>;
180
+ availableForSale: z.ZodBoolean;
181
+ selectedOptions: z.ZodArray<z.ZodObject<{
182
+ name: z.ZodString;
183
+ value: z.ZodString;
184
+ }, "strip", z.ZodTypeAny, {
185
+ value: string;
186
+ name: string;
187
+ }, {
188
+ value: string;
189
+ name: string;
190
+ }>, "many">;
191
+ /** Omit or null when the backend has no resolved price (purchase disabled). */
192
+ price: z.ZodOptional<z.ZodNullable<z.ZodType<Money, z.ZodTypeDef, Money>>>;
193
+ compareAtPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
194
+ image: z.ZodOptional<z.ZodObject<{
195
+ id: z.ZodOptional<z.ZodString>;
196
+ url: z.ZodString;
197
+ altText: z.ZodString;
198
+ width: z.ZodOptional<z.ZodNumber>;
199
+ height: z.ZodOptional<z.ZodNumber>;
200
+ }, "strip", z.ZodTypeAny, {
201
+ url: string;
202
+ altText: string;
203
+ id?: string | undefined;
204
+ width?: number | undefined;
205
+ height?: number | undefined;
206
+ }, {
207
+ url: string;
208
+ altText: string;
209
+ id?: string | undefined;
210
+ width?: number | undefined;
211
+ height?: number | undefined;
212
+ }>>;
213
+ }, "strip", z.ZodTypeAny, {
214
+ id: string;
215
+ title: string;
216
+ availableForSale: boolean;
217
+ selectedOptions: {
218
+ value: string;
219
+ name: string;
220
+ }[];
221
+ sku?: string | undefined;
222
+ price?: Money | null | undefined;
223
+ compareAtPrice?: Money | undefined;
224
+ image?: {
225
+ url: string;
226
+ altText: string;
227
+ id?: string | undefined;
228
+ width?: number | undefined;
229
+ height?: number | undefined;
230
+ } | undefined;
231
+ }, {
232
+ id: string;
233
+ title: string;
234
+ availableForSale: boolean;
235
+ selectedOptions: {
236
+ value: string;
237
+ name: string;
238
+ }[];
239
+ sku?: string | undefined;
240
+ price?: Money | null | undefined;
241
+ compareAtPrice?: Money | undefined;
242
+ image?: {
243
+ url: string;
244
+ altText: string;
245
+ id?: string | undefined;
246
+ width?: number | undefined;
247
+ height?: number | undefined;
248
+ } | undefined;
249
+ }>, "many">;
250
+ images: z.ZodArray<z.ZodObject<{
251
+ id: z.ZodOptional<z.ZodString>;
252
+ url: z.ZodString;
253
+ altText: z.ZodString;
254
+ width: z.ZodOptional<z.ZodNumber>;
255
+ height: z.ZodOptional<z.ZodNumber>;
256
+ }, "strip", z.ZodTypeAny, {
257
+ url: string;
258
+ altText: string;
259
+ id?: string | undefined;
260
+ width?: number | undefined;
261
+ height?: number | undefined;
262
+ }, {
263
+ url: string;
264
+ altText: string;
265
+ id?: string | undefined;
266
+ width?: number | undefined;
267
+ height?: number | undefined;
268
+ }>, "many">;
269
+ featuredImage: z.ZodOptional<z.ZodObject<{
270
+ id: z.ZodOptional<z.ZodString>;
271
+ url: z.ZodString;
272
+ altText: z.ZodString;
273
+ width: z.ZodOptional<z.ZodNumber>;
274
+ height: z.ZodOptional<z.ZodNumber>;
275
+ }, "strip", z.ZodTypeAny, {
276
+ url: string;
277
+ altText: string;
278
+ id?: string | undefined;
279
+ width?: number | undefined;
280
+ height?: number | undefined;
281
+ }, {
282
+ url: string;
283
+ altText: string;
284
+ id?: string | undefined;
285
+ width?: number | undefined;
286
+ height?: number | undefined;
287
+ }>>;
288
+ }, "strip", z.ZodTypeAny, {
289
+ options: {
290
+ values: string[];
291
+ id: string;
292
+ name: string;
293
+ }[];
294
+ id: string;
295
+ title: string;
296
+ variants: {
297
+ id: string;
298
+ title: string;
299
+ availableForSale: boolean;
300
+ selectedOptions: {
301
+ value: string;
302
+ name: string;
303
+ }[];
304
+ sku?: string | undefined;
305
+ price?: Money | null | undefined;
306
+ compareAtPrice?: Money | undefined;
307
+ image?: {
308
+ url: string;
309
+ altText: string;
310
+ id?: string | undefined;
311
+ width?: number | undefined;
312
+ height?: number | undefined;
313
+ } | undefined;
314
+ }[];
315
+ images: {
316
+ url: string;
317
+ altText: string;
318
+ id?: string | undefined;
319
+ width?: number | undefined;
320
+ height?: number | undefined;
321
+ }[];
322
+ handle?: string | undefined;
323
+ description?: string | undefined;
324
+ vendor?: string | undefined;
325
+ featuredImage?: {
326
+ url: string;
327
+ altText: string;
328
+ id?: string | undefined;
329
+ width?: number | undefined;
330
+ height?: number | undefined;
331
+ } | undefined;
332
+ }, {
333
+ options: {
334
+ values: string[];
335
+ id: string;
336
+ name: string;
337
+ }[];
338
+ id: string;
339
+ title: string;
340
+ variants: {
341
+ id: string;
342
+ title: string;
343
+ availableForSale: boolean;
344
+ selectedOptions: {
345
+ value: string;
346
+ name: string;
347
+ }[];
348
+ sku?: string | undefined;
349
+ price?: Money | null | undefined;
350
+ compareAtPrice?: Money | undefined;
351
+ image?: {
352
+ url: string;
353
+ altText: string;
354
+ id?: string | undefined;
355
+ width?: number | undefined;
356
+ height?: number | undefined;
357
+ } | undefined;
358
+ }[];
359
+ images: {
360
+ url: string;
361
+ altText: string;
362
+ id?: string | undefined;
363
+ width?: number | undefined;
364
+ height?: number | undefined;
365
+ }[];
366
+ handle?: string | undefined;
367
+ description?: string | undefined;
368
+ vendor?: string | undefined;
369
+ featuredImage?: {
370
+ url: string;
371
+ altText: string;
372
+ id?: string | undefined;
373
+ width?: number | undefined;
374
+ height?: number | undefined;
375
+ } | undefined;
376
+ }>;
377
+ type ProductDetailProductSpec = z.infer<typeof productDetailProductSchema>;
378
+ declare const productOverview1PropsSchema: z.ZodObject<{
379
+ product: z.ZodObject<{
380
+ id: z.ZodString;
381
+ handle: z.ZodOptional<z.ZodString>;
382
+ title: z.ZodString;
383
+ description: z.ZodOptional<z.ZodString>;
384
+ vendor: z.ZodOptional<z.ZodString>;
385
+ options: z.ZodArray<z.ZodObject<{
386
+ id: z.ZodString;
387
+ name: z.ZodString;
388
+ values: z.ZodArray<z.ZodString, "many">;
389
+ }, "strip", z.ZodTypeAny, {
390
+ values: string[];
391
+ id: string;
392
+ name: string;
393
+ }, {
394
+ values: string[];
395
+ id: string;
396
+ name: string;
397
+ }>, "many">;
398
+ variants: z.ZodArray<z.ZodObject<{
399
+ id: z.ZodString;
400
+ title: z.ZodString;
401
+ sku: z.ZodOptional<z.ZodString>;
402
+ availableForSale: z.ZodBoolean;
403
+ selectedOptions: z.ZodArray<z.ZodObject<{
404
+ name: z.ZodString;
405
+ value: z.ZodString;
406
+ }, "strip", z.ZodTypeAny, {
407
+ value: string;
408
+ name: string;
409
+ }, {
410
+ value: string;
411
+ name: string;
412
+ }>, "many">;
413
+ /** Omit or null when the backend has no resolved price (purchase disabled). */
414
+ price: z.ZodOptional<z.ZodNullable<z.ZodType<Money, z.ZodTypeDef, Money>>>;
415
+ compareAtPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
416
+ image: z.ZodOptional<z.ZodObject<{
417
+ id: z.ZodOptional<z.ZodString>;
418
+ url: z.ZodString;
419
+ altText: z.ZodString;
420
+ width: z.ZodOptional<z.ZodNumber>;
421
+ height: z.ZodOptional<z.ZodNumber>;
422
+ }, "strip", z.ZodTypeAny, {
423
+ url: string;
424
+ altText: string;
425
+ id?: string | undefined;
426
+ width?: number | undefined;
427
+ height?: number | undefined;
428
+ }, {
429
+ url: string;
430
+ altText: string;
431
+ id?: string | undefined;
432
+ width?: number | undefined;
433
+ height?: number | undefined;
434
+ }>>;
435
+ }, "strip", z.ZodTypeAny, {
436
+ id: string;
437
+ title: string;
438
+ availableForSale: boolean;
439
+ selectedOptions: {
440
+ value: string;
441
+ name: string;
442
+ }[];
443
+ sku?: string | undefined;
444
+ price?: Money | null | undefined;
445
+ compareAtPrice?: Money | undefined;
446
+ image?: {
447
+ url: string;
448
+ altText: string;
449
+ id?: string | undefined;
450
+ width?: number | undefined;
451
+ height?: number | undefined;
452
+ } | undefined;
453
+ }, {
454
+ id: string;
455
+ title: string;
456
+ availableForSale: boolean;
457
+ selectedOptions: {
458
+ value: string;
459
+ name: string;
460
+ }[];
461
+ sku?: string | undefined;
462
+ price?: Money | null | undefined;
463
+ compareAtPrice?: Money | undefined;
464
+ image?: {
465
+ url: string;
466
+ altText: string;
467
+ id?: string | undefined;
468
+ width?: number | undefined;
469
+ height?: number | undefined;
470
+ } | undefined;
471
+ }>, "many">;
472
+ images: z.ZodArray<z.ZodObject<{
473
+ id: z.ZodOptional<z.ZodString>;
474
+ url: z.ZodString;
475
+ altText: z.ZodString;
476
+ width: z.ZodOptional<z.ZodNumber>;
477
+ height: z.ZodOptional<z.ZodNumber>;
478
+ }, "strip", z.ZodTypeAny, {
479
+ url: string;
480
+ altText: string;
481
+ id?: string | undefined;
482
+ width?: number | undefined;
483
+ height?: number | undefined;
484
+ }, {
485
+ url: string;
486
+ altText: string;
487
+ id?: string | undefined;
488
+ width?: number | undefined;
489
+ height?: number | undefined;
490
+ }>, "many">;
491
+ featuredImage: z.ZodOptional<z.ZodObject<{
492
+ id: z.ZodOptional<z.ZodString>;
493
+ url: z.ZodString;
494
+ altText: z.ZodString;
495
+ width: z.ZodOptional<z.ZodNumber>;
496
+ height: z.ZodOptional<z.ZodNumber>;
497
+ }, "strip", z.ZodTypeAny, {
498
+ url: string;
499
+ altText: string;
500
+ id?: string | undefined;
501
+ width?: number | undefined;
502
+ height?: number | undefined;
503
+ }, {
504
+ url: string;
505
+ altText: string;
506
+ id?: string | undefined;
507
+ width?: number | undefined;
508
+ height?: number | undefined;
509
+ }>>;
510
+ }, "strip", z.ZodTypeAny, {
511
+ options: {
512
+ values: string[];
513
+ id: string;
514
+ name: string;
515
+ }[];
516
+ id: string;
517
+ title: string;
518
+ variants: {
519
+ id: string;
520
+ title: string;
521
+ availableForSale: boolean;
522
+ selectedOptions: {
523
+ value: string;
524
+ name: string;
525
+ }[];
526
+ sku?: string | undefined;
527
+ price?: Money | null | undefined;
528
+ compareAtPrice?: Money | undefined;
529
+ image?: {
530
+ url: string;
531
+ altText: string;
532
+ id?: string | undefined;
533
+ width?: number | undefined;
534
+ height?: number | undefined;
535
+ } | undefined;
536
+ }[];
537
+ images: {
538
+ url: string;
539
+ altText: string;
540
+ id?: string | undefined;
541
+ width?: number | undefined;
542
+ height?: number | undefined;
543
+ }[];
544
+ handle?: string | undefined;
545
+ description?: string | undefined;
546
+ vendor?: string | undefined;
547
+ featuredImage?: {
548
+ url: string;
549
+ altText: string;
550
+ id?: string | undefined;
551
+ width?: number | undefined;
552
+ height?: number | undefined;
553
+ } | undefined;
554
+ }, {
555
+ options: {
556
+ values: string[];
557
+ id: string;
558
+ name: string;
559
+ }[];
560
+ id: string;
561
+ title: string;
562
+ variants: {
563
+ id: string;
564
+ title: string;
565
+ availableForSale: boolean;
566
+ selectedOptions: {
567
+ value: string;
568
+ name: string;
569
+ }[];
570
+ sku?: string | undefined;
571
+ price?: Money | null | undefined;
572
+ compareAtPrice?: Money | undefined;
573
+ image?: {
574
+ url: string;
575
+ altText: string;
576
+ id?: string | undefined;
577
+ width?: number | undefined;
578
+ height?: number | undefined;
579
+ } | undefined;
580
+ }[];
581
+ images: {
582
+ url: string;
583
+ altText: string;
584
+ id?: string | undefined;
585
+ width?: number | undefined;
586
+ height?: number | undefined;
587
+ }[];
588
+ handle?: string | undefined;
589
+ description?: string | undefined;
590
+ vendor?: string | undefined;
591
+ featuredImage?: {
592
+ url: string;
593
+ altText: string;
594
+ id?: string | undefined;
595
+ width?: number | undefined;
596
+ height?: number | undefined;
597
+ } | undefined;
598
+ }>;
599
+ selectedVariantId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
600
+ quantity: z.ZodOptional<z.ZodNumber>;
601
+ rating: z.ZodOptional<z.ZodObject<{
602
+ value: z.ZodNumber;
603
+ count: z.ZodNumber;
604
+ }, "strip", z.ZodTypeAny, {
605
+ value: number;
606
+ count: number;
607
+ }, {
608
+ value: number;
609
+ count: number;
610
+ }>>;
611
+ deliveryEstimate: z.ZodOptional<z.ZodString>;
612
+ shipping: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
613
+ sizesLabel: z.ZodOptional<z.ZodString>;
614
+ variantLabel: z.ZodOptional<z.ZodString>;
615
+ reviewsLabel: z.ZodOptional<z.ZodString>;
616
+ addToCartLabel: z.ZodOptional<z.ZodString>;
617
+ outOfStockLabel: z.ZodOptional<z.ZodString>;
618
+ unavailablePriceLabel: z.ZodOptional<z.ZodString>;
619
+ selectVariantLabel: z.ZodOptional<z.ZodString>;
620
+ quantityLabel: z.ZodOptional<z.ZodString>;
621
+ deliveryEstimateLabel: z.ZodOptional<z.ZodString>;
622
+ shippingLabel: z.ZodOptional<z.ZodString>;
623
+ }, "strip", z.ZodTypeAny, {
624
+ product: {
625
+ options: {
626
+ values: string[];
627
+ id: string;
628
+ name: string;
629
+ }[];
630
+ id: string;
631
+ title: string;
632
+ variants: {
633
+ id: string;
634
+ title: string;
635
+ availableForSale: boolean;
636
+ selectedOptions: {
637
+ value: string;
638
+ name: string;
639
+ }[];
640
+ sku?: string | undefined;
641
+ price?: Money | null | undefined;
642
+ compareAtPrice?: Money | undefined;
643
+ image?: {
644
+ url: string;
645
+ altText: string;
646
+ id?: string | undefined;
647
+ width?: number | undefined;
648
+ height?: number | undefined;
649
+ } | undefined;
650
+ }[];
651
+ images: {
652
+ url: string;
653
+ altText: string;
654
+ id?: string | undefined;
655
+ width?: number | undefined;
656
+ height?: number | undefined;
657
+ }[];
658
+ handle?: string | undefined;
659
+ description?: string | undefined;
660
+ vendor?: string | undefined;
661
+ featuredImage?: {
662
+ url: string;
663
+ altText: string;
664
+ id?: string | undefined;
665
+ width?: number | undefined;
666
+ height?: number | undefined;
667
+ } | undefined;
668
+ };
669
+ selectedVariantId?: string | null | undefined;
670
+ quantity?: number | undefined;
671
+ rating?: {
672
+ value: number;
673
+ count: number;
674
+ } | undefined;
675
+ deliveryEstimate?: string | undefined;
676
+ shipping?: Money | undefined;
677
+ sizesLabel?: string | undefined;
678
+ variantLabel?: string | undefined;
679
+ reviewsLabel?: string | undefined;
680
+ addToCartLabel?: string | undefined;
681
+ outOfStockLabel?: string | undefined;
682
+ unavailablePriceLabel?: string | undefined;
683
+ selectVariantLabel?: string | undefined;
684
+ quantityLabel?: string | undefined;
685
+ deliveryEstimateLabel?: string | undefined;
686
+ shippingLabel?: string | undefined;
687
+ }, {
688
+ product: {
689
+ options: {
690
+ values: string[];
691
+ id: string;
692
+ name: string;
693
+ }[];
694
+ id: string;
695
+ title: string;
696
+ variants: {
697
+ id: string;
698
+ title: string;
699
+ availableForSale: boolean;
700
+ selectedOptions: {
701
+ value: string;
702
+ name: string;
703
+ }[];
704
+ sku?: string | undefined;
705
+ price?: Money | null | undefined;
706
+ compareAtPrice?: Money | undefined;
707
+ image?: {
708
+ url: string;
709
+ altText: string;
710
+ id?: string | undefined;
711
+ width?: number | undefined;
712
+ height?: number | undefined;
713
+ } | undefined;
714
+ }[];
715
+ images: {
716
+ url: string;
717
+ altText: string;
718
+ id?: string | undefined;
719
+ width?: number | undefined;
720
+ height?: number | undefined;
721
+ }[];
722
+ handle?: string | undefined;
723
+ description?: string | undefined;
724
+ vendor?: string | undefined;
725
+ featuredImage?: {
726
+ url: string;
727
+ altText: string;
728
+ id?: string | undefined;
729
+ width?: number | undefined;
730
+ height?: number | undefined;
731
+ } | undefined;
732
+ };
733
+ selectedVariantId?: string | null | undefined;
734
+ quantity?: number | undefined;
735
+ rating?: {
736
+ value: number;
737
+ count: number;
738
+ } | undefined;
739
+ deliveryEstimate?: string | undefined;
740
+ shipping?: Money | undefined;
741
+ sizesLabel?: string | undefined;
742
+ variantLabel?: string | undefined;
743
+ reviewsLabel?: string | undefined;
744
+ addToCartLabel?: string | undefined;
745
+ outOfStockLabel?: string | undefined;
746
+ unavailablePriceLabel?: string | undefined;
747
+ selectVariantLabel?: string | undefined;
748
+ quantityLabel?: string | undefined;
749
+ deliveryEstimateLabel?: string | undefined;
750
+ shippingLabel?: string | undefined;
751
+ }>;
752
+ type ProductOverview1SpecProps = z.infer<typeof productOverview1PropsSchema>;
33
753
  declare const cardProductSchema: z.ZodObject<{
34
754
  id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
35
755
  title: z.ZodString;
@@ -38,19 +758,19 @@ declare const cardProductSchema: z.ZodObject<{
38
758
  image: z.ZodString;
39
759
  badge: z.ZodOptional<z.ZodString>;
40
760
  }, "strip", z.ZodTypeAny, {
41
- title: string;
42
- image: string;
43
761
  id: string | number;
762
+ title: string;
44
763
  price: number;
45
- badge?: string | undefined;
764
+ image: string;
46
765
  originalPrice?: number | undefined;
766
+ badge?: string | undefined;
47
767
  }, {
48
- title: string;
49
- image: string;
50
768
  id: string | number;
769
+ title: string;
51
770
  price: number;
52
- badge?: string | undefined;
771
+ image: string;
53
772
  originalPrice?: number | undefined;
773
+ badge?: string | undefined;
54
774
  }>;
55
775
  type CardProduct = z.infer<typeof cardProductSchema>;
56
776
  declare const cartItemSchema: z.ZodObject<{
@@ -58,39 +778,68 @@ declare const cartItemSchema: z.ZodObject<{
58
778
  name: z.ZodString;
59
779
  price: z.ZodNumber;
60
780
  quantity: z.ZodNumber;
61
- image: z.ZodString;
781
+ /** Optional; absent images are omitted, never serialized as `""`. */
782
+ image: z.ZodOptional<z.ZodString>;
62
783
  variant: z.ZodOptional<z.ZodString>;
784
+ /** Canonical backend per-unit price, preferred for display when present. */
785
+ unitPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
786
+ /** Canonical backend line total, preferred over `price * quantity`. */
787
+ lineTotal: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
63
788
  }, "strip", z.ZodTypeAny, {
64
- image: string;
65
789
  id: string;
66
790
  name: string;
67
791
  price: number;
68
792
  quantity: number;
793
+ image?: string | undefined;
69
794
  variant?: string | undefined;
795
+ unitPrice?: Money | undefined;
796
+ lineTotal?: Money | undefined;
70
797
  }, {
71
- image: string;
72
798
  id: string;
73
799
  name: string;
74
800
  price: number;
75
801
  quantity: number;
802
+ image?: string | undefined;
76
803
  variant?: string | undefined;
804
+ unitPrice?: Money | undefined;
805
+ lineTotal?: Money | undefined;
77
806
  }>;
78
807
  type CartItem = z.infer<typeof cartItemSchema>;
808
+ declare const cartTotalsSchema: z.ZodObject<{
809
+ subtotal: z.ZodType<Money, z.ZodTypeDef, Money>;
810
+ discount: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
811
+ tax: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
812
+ shipping: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
813
+ total: z.ZodType<Money, z.ZodTypeDef, Money>;
814
+ }, "strip", z.ZodTypeAny, {
815
+ subtotal: Money;
816
+ total: Money;
817
+ shipping?: Money | undefined;
818
+ discount?: Money | undefined;
819
+ tax?: Money | undefined;
820
+ }, {
821
+ subtotal: Money;
822
+ total: Money;
823
+ shipping?: Money | undefined;
824
+ discount?: Money | undefined;
825
+ tax?: Money | undefined;
826
+ }>;
827
+ type CartTotals = z.infer<typeof cartTotalsSchema>;
79
828
  declare const recentlyViewedItemSchema: z.ZodObject<{
80
829
  id: z.ZodString;
81
830
  name: z.ZodString;
82
831
  price: z.ZodNumber;
83
832
  image: z.ZodString;
84
833
  }, "strip", z.ZodTypeAny, {
85
- image: string;
86
834
  id: string;
87
835
  name: string;
88
836
  price: number;
89
- }, {
90
837
  image: string;
838
+ }, {
91
839
  id: string;
92
840
  name: string;
93
841
  price: number;
842
+ image: string;
94
843
  }>;
95
844
  type RecentlyViewedItem = z.infer<typeof recentlyViewedItemSchema>;
96
845
  declare const promotionSchema: z.ZodObject<{
@@ -98,9 +847,9 @@ declare const promotionSchema: z.ZodObject<{
98
847
  reward: z.ZodString;
99
848
  icon: z.ZodDefault<z.ZodString>;
100
849
  }, "strip", z.ZodTypeAny, {
101
- icon: string;
102
850
  threshold: number;
103
851
  reward: string;
852
+ icon: string;
104
853
  }, {
105
854
  threshold: number;
106
855
  reward: string;
@@ -128,41 +877,42 @@ type UtilityLink = z.infer<typeof utilityLinkSchema>;
128
877
  declare const navCartItemSchema: z.ZodObject<{
129
878
  id: z.ZodString;
130
879
  name: z.ZodString;
131
- variant: z.ZodString;
880
+ variant: z.ZodOptional<z.ZodString>;
132
881
  price: z.ZodNumber;
133
882
  qty: z.ZodNumber;
134
- image: z.ZodString;
883
+ /** Optional; absent images are omitted, never serialized as `""`. */
884
+ image: z.ZodOptional<z.ZodString>;
135
885
  }, "strip", z.ZodTypeAny, {
136
- variant: string;
137
- image: string;
138
886
  id: string;
139
887
  name: string;
140
888
  price: number;
141
889
  qty: number;
890
+ image?: string | undefined;
891
+ variant?: string | undefined;
142
892
  }, {
143
- variant: string;
144
- image: string;
145
893
  id: string;
146
894
  name: string;
147
895
  price: number;
148
896
  qty: number;
897
+ image?: string | undefined;
898
+ variant?: string | undefined;
149
899
  }>;
150
900
  type NavCartItem = z.infer<typeof navCartItemSchema>;
151
901
  declare const storeUserSchema: z.ZodObject<{
152
902
  name: z.ZodString;
153
903
  email: z.ZodString;
154
- avatar: z.ZodString;
904
+ avatar: z.ZodOptional<z.ZodString>;
155
905
  initials: z.ZodString;
156
906
  }, "strip", z.ZodTypeAny, {
157
- email: string;
158
907
  name: string;
159
- avatar: string;
908
+ email: string;
160
909
  initials: string;
910
+ avatar?: string | undefined;
161
911
  }, {
162
- email: string;
163
912
  name: string;
164
- avatar: string;
913
+ email: string;
165
914
  initials: string;
915
+ avatar?: string | undefined;
166
916
  }>;
167
917
  type StoreUser = z.infer<typeof storeUserSchema>;
168
918
  declare const accountMenuItemSchema: z.ZodObject<{
@@ -173,13 +923,13 @@ declare const accountMenuItemSchema: z.ZodObject<{
173
923
  }, "strip", z.ZodTypeAny, {
174
924
  label: string;
175
925
  href: string;
176
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
177
926
  description?: string | undefined;
927
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
178
928
  }, {
179
929
  label: string;
180
930
  href: string;
181
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
182
931
  description?: string | undefined;
932
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
183
933
  }>;
184
934
  type AccountMenuItem = z.infer<typeof accountMenuItemSchema>;
185
935
  /**
@@ -196,26 +946,26 @@ declare const buttonPropsSchema: z.ZodObject<{
196
946
  disabled: z.ZodOptional<z.ZodBoolean>;
197
947
  className: z.ZodOptional<z.ZodString>;
198
948
  }, "strip", z.ZodTypeAny, {
199
- variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | undefined;
200
- className?: string | undefined;
201
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
949
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | undefined;
950
+ size?: "icon" | "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
202
951
  disabled?: boolean | undefined;
203
- }, {
204
- variant?: "default" | "secondary" | "destructive" | "outline" | "ghost" | "link" | undefined;
205
952
  className?: string | undefined;
206
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
953
+ }, {
954
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | undefined;
955
+ size?: "icon" | "default" | "xs" | "sm" | "lg" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
207
956
  disabled?: boolean | undefined;
957
+ className?: string | undefined;
208
958
  }>;
209
959
  type ButtonSpecProps = z.infer<typeof buttonPropsSchema>;
210
960
  declare const storeContainer1PropsSchema: z.ZodObject<{
211
961
  size: z.ZodOptional<z.ZodEnum<["default", "narrow", "wide", "full"]>>;
212
962
  className: z.ZodOptional<z.ZodString>;
213
963
  }, "strip", z.ZodTypeAny, {
214
- className?: string | undefined;
215
964
  size?: "default" | "narrow" | "wide" | "full" | undefined;
216
- }, {
217
965
  className?: string | undefined;
966
+ }, {
218
967
  size?: "default" | "narrow" | "wide" | "full" | undefined;
968
+ className?: string | undefined;
219
969
  }>;
220
970
  type StoreContainer1SpecProps = z.infer<typeof storeContainer1PropsSchema>;
221
971
  declare const productCard1PropsSchema: z.ZodObject<{
@@ -227,77 +977,228 @@ declare const productCard1PropsSchema: z.ZodObject<{
227
977
  image: z.ZodString;
228
978
  badge: z.ZodOptional<z.ZodString>;
229
979
  }, "strip", z.ZodTypeAny, {
230
- title: string;
231
- image: string;
232
980
  id: string | number;
981
+ title: string;
233
982
  price: number;
234
- badge?: string | undefined;
983
+ image: string;
235
984
  originalPrice?: number | undefined;
985
+ badge?: string | undefined;
236
986
  }, {
237
- title: string;
238
- image: string;
239
987
  id: string | number;
988
+ title: string;
240
989
  price: number;
241
- badge?: string | undefined;
990
+ image: string;
242
991
  originalPrice?: number | undefined;
992
+ badge?: string | undefined;
243
993
  }>, "many">;
244
994
  heading: z.ZodOptional<z.ZodString>;
245
995
  maxItems: z.ZodOptional<z.ZodNumber>;
246
996
  }, "strip", z.ZodTypeAny, {
247
997
  products: {
248
- title: string;
249
- image: string;
250
998
  id: string | number;
999
+ title: string;
251
1000
  price: number;
252
- badge?: string | undefined;
1001
+ image: string;
253
1002
  originalPrice?: number | undefined;
1003
+ badge?: string | undefined;
254
1004
  }[];
255
1005
  heading?: string | undefined;
256
1006
  maxItems?: number | undefined;
257
1007
  }, {
258
1008
  products: {
259
- title: string;
260
- image: string;
261
1009
  id: string | number;
1010
+ title: string;
262
1011
  price: number;
263
- badge?: string | undefined;
1012
+ image: string;
264
1013
  originalPrice?: number | undefined;
1014
+ badge?: string | undefined;
265
1015
  }[];
266
1016
  heading?: string | undefined;
267
1017
  maxItems?: number | undefined;
268
1018
  }>;
269
1019
  type ProductCard1SpecProps = z.infer<typeof productCard1PropsSchema>;
1020
+ /**
1021
+ * Canonical product presentation — the serializable projection a storefront host
1022
+ * produces from a canonical `Product` for the merchandising sections. Unlike
1023
+ * `cardProductSchema` (legacy, numeric `price`), `price`/`compareAtPrice` carry
1024
+ * canonical `Money` (decimal major-unit string + currency code), so the block
1025
+ * formats in the shopper's currency and locale and renders a truthful
1026
+ * unavailable state instead of `$0`. Optional fields are omitted, never `""`.
1027
+ *
1028
+ * This contract is additive: `cardProductSchema` and its consumers are
1029
+ * unchanged, and a legacy numeric `price` still renders the legacy output.
1030
+ */
1031
+ declare const productPresentationSchema: z.ZodObject<{
1032
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
1033
+ title: z.ZodString;
1034
+ /** Omitted (never `""`) when the backend has no image. */
1035
+ image: z.ZodOptional<z.ZodString>;
1036
+ imageAlt: z.ZodOptional<z.ZodString>;
1037
+ /** Product destination; omitted when unknown. */
1038
+ href: z.ZodOptional<z.ZodString>;
1039
+ price: z.ZodType<Money, z.ZodTypeDef, Money>;
1040
+ /** Comparison ("was") price; rendered only when valid and higher than `price`. */
1041
+ compareAtPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1042
+ /** Only from real evidence; omitted otherwise (never fabricated). */
1043
+ rating: z.ZodOptional<z.ZodNumber>;
1044
+ badge: z.ZodOptional<z.ZodString>;
1045
+ }, "strip", z.ZodTypeAny, {
1046
+ id: string | number;
1047
+ title: string;
1048
+ price: Money;
1049
+ compareAtPrice?: Money | undefined;
1050
+ image?: string | undefined;
1051
+ rating?: number | undefined;
1052
+ badge?: string | undefined;
1053
+ href?: string | undefined;
1054
+ imageAlt?: string | undefined;
1055
+ }, {
1056
+ id: string | number;
1057
+ title: string;
1058
+ price: Money;
1059
+ compareAtPrice?: Money | undefined;
1060
+ image?: string | undefined;
1061
+ rating?: number | undefined;
1062
+ badge?: string | undefined;
1063
+ href?: string | undefined;
1064
+ imageAlt?: string | undefined;
1065
+ }>;
1066
+ type ProductPresentation = z.infer<typeof productPresentationSchema>;
1067
+ /**
1068
+ * Serializable contract for the combined grid-and-carousel product
1069
+ * presentation (`ProductShowcase1`). The grid pages are fixed-size, navigated
1070
+ * manually (prev/next) with a visible current-page indication; there is no
1071
+ * autoplay and no infinite loop. React-only callbacks are excluded.
1072
+ */
1073
+ declare const productShowcase1PropsSchema: z.ZodObject<{
1074
+ products: z.ZodArray<z.ZodObject<{
1075
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
1076
+ title: z.ZodString;
1077
+ /** Omitted (never `""`) when the backend has no image. */
1078
+ image: z.ZodOptional<z.ZodString>;
1079
+ imageAlt: z.ZodOptional<z.ZodString>;
1080
+ /** Product destination; omitted when unknown. */
1081
+ href: z.ZodOptional<z.ZodString>;
1082
+ price: z.ZodType<Money, z.ZodTypeDef, Money>;
1083
+ /** Comparison ("was") price; rendered only when valid and higher than `price`. */
1084
+ compareAtPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1085
+ /** Only from real evidence; omitted otherwise (never fabricated). */
1086
+ rating: z.ZodOptional<z.ZodNumber>;
1087
+ badge: z.ZodOptional<z.ZodString>;
1088
+ }, "strip", z.ZodTypeAny, {
1089
+ id: string | number;
1090
+ title: string;
1091
+ price: Money;
1092
+ compareAtPrice?: Money | undefined;
1093
+ image?: string | undefined;
1094
+ rating?: number | undefined;
1095
+ badge?: string | undefined;
1096
+ href?: string | undefined;
1097
+ imageAlt?: string | undefined;
1098
+ }, {
1099
+ id: string | number;
1100
+ title: string;
1101
+ price: Money;
1102
+ compareAtPrice?: Money | undefined;
1103
+ image?: string | undefined;
1104
+ rating?: number | undefined;
1105
+ badge?: string | undefined;
1106
+ href?: string | undefined;
1107
+ imageAlt?: string | undefined;
1108
+ }>, "many">;
1109
+ heading: z.ZodOptional<z.ZodString>;
1110
+ description: z.ZodOptional<z.ZodString>;
1111
+ pageSize: z.ZodOptional<z.ZodNumber>;
1112
+ prevLabel: z.ZodOptional<z.ZodString>;
1113
+ nextLabel: z.ZodOptional<z.ZodString>;
1114
+ pageLabel: z.ZodOptional<z.ZodString>;
1115
+ unavailablePriceLabel: z.ZodOptional<z.ZodString>;
1116
+ emptyLabel: z.ZodOptional<z.ZodString>;
1117
+ addToCartLabel: z.ZodOptional<z.ZodString>;
1118
+ }, "strip", z.ZodTypeAny, {
1119
+ products: {
1120
+ id: string | number;
1121
+ title: string;
1122
+ price: Money;
1123
+ compareAtPrice?: Money | undefined;
1124
+ image?: string | undefined;
1125
+ rating?: number | undefined;
1126
+ badge?: string | undefined;
1127
+ href?: string | undefined;
1128
+ imageAlt?: string | undefined;
1129
+ }[];
1130
+ description?: string | undefined;
1131
+ addToCartLabel?: string | undefined;
1132
+ unavailablePriceLabel?: string | undefined;
1133
+ heading?: string | undefined;
1134
+ pageSize?: number | undefined;
1135
+ prevLabel?: string | undefined;
1136
+ nextLabel?: string | undefined;
1137
+ pageLabel?: string | undefined;
1138
+ emptyLabel?: string | undefined;
1139
+ }, {
1140
+ products: {
1141
+ id: string | number;
1142
+ title: string;
1143
+ price: Money;
1144
+ compareAtPrice?: Money | undefined;
1145
+ image?: string | undefined;
1146
+ rating?: number | undefined;
1147
+ badge?: string | undefined;
1148
+ href?: string | undefined;
1149
+ imageAlt?: string | undefined;
1150
+ }[];
1151
+ description?: string | undefined;
1152
+ addToCartLabel?: string | undefined;
1153
+ unavailablePriceLabel?: string | undefined;
1154
+ heading?: string | undefined;
1155
+ pageSize?: number | undefined;
1156
+ prevLabel?: string | undefined;
1157
+ nextLabel?: string | undefined;
1158
+ pageLabel?: string | undefined;
1159
+ emptyLabel?: string | undefined;
1160
+ }>;
1161
+ type ProductShowcase1SpecProps = z.infer<typeof productShowcase1PropsSchema>;
270
1162
  declare const shoppingCart4PropsSchema: z.ZodObject<{
271
1163
  items: z.ZodArray<z.ZodObject<{
272
1164
  id: z.ZodString;
273
1165
  name: z.ZodString;
274
1166
  price: z.ZodNumber;
275
1167
  quantity: z.ZodNumber;
276
- image: z.ZodString;
1168
+ /** Optional; absent images are omitted, never serialized as `""`. */
1169
+ image: z.ZodOptional<z.ZodString>;
277
1170
  variant: z.ZodOptional<z.ZodString>;
1171
+ /** Canonical backend per-unit price, preferred for display when present. */
1172
+ unitPrice: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1173
+ /** Canonical backend line total, preferred over `price * quantity`. */
1174
+ lineTotal: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
278
1175
  }, "strip", z.ZodTypeAny, {
279
- image: string;
280
1176
  id: string;
281
1177
  name: string;
282
1178
  price: number;
283
1179
  quantity: number;
1180
+ image?: string | undefined;
284
1181
  variant?: string | undefined;
1182
+ unitPrice?: Money | undefined;
1183
+ lineTotal?: Money | undefined;
285
1184
  }, {
286
- image: string;
287
1185
  id: string;
288
1186
  name: string;
289
1187
  price: number;
290
1188
  quantity: number;
1189
+ image?: string | undefined;
291
1190
  variant?: string | undefined;
1191
+ unitPrice?: Money | undefined;
1192
+ lineTotal?: Money | undefined;
292
1193
  }>, "many">;
293
1194
  promotions: z.ZodDefault<z.ZodArray<z.ZodObject<{
294
1195
  threshold: z.ZodNumber;
295
1196
  reward: z.ZodString;
296
1197
  icon: z.ZodDefault<z.ZodString>;
297
1198
  }, "strip", z.ZodTypeAny, {
298
- icon: string;
299
1199
  threshold: number;
300
1200
  reward: string;
1201
+ icon: string;
301
1202
  }, {
302
1203
  threshold: number;
303
1204
  reward: string;
@@ -309,23 +1210,50 @@ declare const shoppingCart4PropsSchema: z.ZodObject<{
309
1210
  price: z.ZodNumber;
310
1211
  image: z.ZodString;
311
1212
  }, "strip", z.ZodTypeAny, {
312
- image: string;
313
1213
  id: string;
314
1214
  name: string;
315
1215
  price: number;
316
- }, {
317
1216
  image: string;
1217
+ }, {
318
1218
  id: string;
319
1219
  name: string;
320
1220
  price: number;
1221
+ image: string;
321
1222
  }>, "many">>;
1223
+ /** Backend-authoritative totals; rendered verbatim, never computed locally. */
1224
+ totals: z.ZodOptional<z.ZodObject<{
1225
+ subtotal: z.ZodType<Money, z.ZodTypeDef, Money>;
1226
+ discount: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1227
+ tax: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1228
+ shipping: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1229
+ total: z.ZodType<Money, z.ZodTypeDef, Money>;
1230
+ }, "strip", z.ZodTypeAny, {
1231
+ subtotal: Money;
1232
+ total: Money;
1233
+ shipping?: Money | undefined;
1234
+ discount?: Money | undefined;
1235
+ tax?: Money | undefined;
1236
+ }, {
1237
+ subtotal: Money;
1238
+ total: Money;
1239
+ shipping?: Money | undefined;
1240
+ discount?: Money | undefined;
1241
+ tax?: Money | undefined;
1242
+ }>>;
1243
+ totalsState: z.ZodOptional<z.ZodEnum<["idle", "pending", "error"]>>;
1244
+ totalsErrorLabel: z.ZodOptional<z.ZodString>;
1245
+ totalsUnavailableLabel: z.ZodOptional<z.ZodString>;
1246
+ amountUnavailableLabel: z.ZodOptional<z.ZodString>;
1247
+ retryLabel: z.ZodOptional<z.ZodString>;
322
1248
  taxRate: z.ZodOptional<z.ZodNumber>;
323
1249
  titleLabel: z.ZodOptional<z.ZodString>;
324
1250
  subtotalLabel: z.ZodOptional<z.ZodString>;
1251
+ discountLabel: z.ZodOptional<z.ZodString>;
325
1252
  taxLabel: z.ZodOptional<z.ZodString>;
326
1253
  shippingLabel: z.ZodOptional<z.ZodString>;
327
1254
  shippingFreeLabel: z.ZodOptional<z.ZodString>;
328
1255
  totalLabel: z.ZodOptional<z.ZodString>;
1256
+ totalsPendingLabel: z.ZodOptional<z.ZodString>;
329
1257
  awayFromLabel: z.ZodOptional<z.ZodString>;
330
1258
  activatedLabel: z.ZodOptional<z.ZodString>;
331
1259
  itemsLabel: z.ZodOptional<z.ZodString>;
@@ -340,33 +1268,54 @@ declare const shoppingCart4PropsSchema: z.ZodObject<{
340
1268
  checkoutLabel: z.ZodOptional<z.ZodString>;
341
1269
  quickCheckoutLabel: z.ZodOptional<z.ZodString>;
342
1270
  checkoutNowLabel: z.ZodOptional<z.ZodString>;
1271
+ emptyLabel: z.ZodOptional<z.ZodString>;
1272
+ removeLabel: z.ZodOptional<z.ZodString>;
1273
+ decreaseLabel: z.ZodOptional<z.ZodString>;
1274
+ increaseLabel: z.ZodOptional<z.ZodString>;
343
1275
  }, "strip", z.ZodTypeAny, {
344
1276
  items: {
345
- image: string;
346
1277
  id: string;
347
1278
  name: string;
348
1279
  price: number;
349
1280
  quantity: number;
1281
+ image?: string | undefined;
350
1282
  variant?: string | undefined;
1283
+ unitPrice?: Money | undefined;
1284
+ lineTotal?: Money | undefined;
351
1285
  }[];
352
1286
  promotions: {
353
- icon: string;
354
1287
  threshold: number;
355
1288
  reward: string;
1289
+ icon: string;
356
1290
  }[];
1291
+ shippingLabel?: string | undefined;
1292
+ emptyLabel?: string | undefined;
357
1293
  recentlyViewed?: {
358
- image: string;
359
1294
  id: string;
360
1295
  name: string;
361
1296
  price: number;
1297
+ image: string;
362
1298
  }[] | undefined;
1299
+ totals?: {
1300
+ subtotal: Money;
1301
+ total: Money;
1302
+ shipping?: Money | undefined;
1303
+ discount?: Money | undefined;
1304
+ tax?: Money | undefined;
1305
+ } | undefined;
1306
+ totalsState?: "idle" | "pending" | "error" | undefined;
1307
+ totalsErrorLabel?: string | undefined;
1308
+ totalsUnavailableLabel?: string | undefined;
1309
+ amountUnavailableLabel?: string | undefined;
1310
+ retryLabel?: string | undefined;
363
1311
  taxRate?: number | undefined;
364
1312
  titleLabel?: string | undefined;
365
1313
  subtotalLabel?: string | undefined;
1314
+ discountLabel?: string | undefined;
366
1315
  taxLabel?: string | undefined;
367
- shippingLabel?: string | undefined;
368
1316
  shippingFreeLabel?: string | undefined;
369
1317
  totalLabel?: string | undefined;
1318
+ totalsPendingLabel?: string | undefined;
370
1319
  awayFromLabel?: string | undefined;
371
1320
  activatedLabel?: string | undefined;
372
1321
  itemsLabel?: string | undefined;
@@ -381,33 +1330,53 @@ declare const shoppingCart4PropsSchema: z.ZodObject<{
381
1330
  checkoutLabel?: string | undefined;
382
1331
  quickCheckoutLabel?: string | undefined;
383
1332
  checkoutNowLabel?: string | undefined;
1333
+ removeLabel?: string | undefined;
1334
+ decreaseLabel?: string | undefined;
1335
+ increaseLabel?: string | undefined;
384
1336
  }, {
385
1337
  items: {
386
- image: string;
387
1338
  id: string;
388
1339
  name: string;
389
1340
  price: number;
390
1341
  quantity: number;
1342
+ image?: string | undefined;
391
1343
  variant?: string | undefined;
1344
+ unitPrice?: Money | undefined;
1345
+ lineTotal?: Money | undefined;
392
1346
  }[];
1347
+ shippingLabel?: string | undefined;
1348
+ emptyLabel?: string | undefined;
393
1349
  promotions?: {
394
1350
  threshold: number;
395
1351
  reward: string;
396
1352
  icon?: string | undefined;
397
1353
  }[] | undefined;
398
1354
  recentlyViewed?: {
399
- image: string;
400
1355
  id: string;
401
1356
  name: string;
402
1357
  price: number;
1358
+ image: string;
403
1359
  }[] | undefined;
1360
+ totals?: {
1361
+ subtotal: Money;
1362
+ total: Money;
1363
+ shipping?: Money | undefined;
1364
+ discount?: Money | undefined;
1365
+ tax?: Money | undefined;
1366
+ } | undefined;
1367
+ totalsState?: "idle" | "pending" | "error" | undefined;
1368
+ totalsErrorLabel?: string | undefined;
1369
+ totalsUnavailableLabel?: string | undefined;
1370
+ amountUnavailableLabel?: string | undefined;
1371
+ retryLabel?: string | undefined;
404
1372
  taxRate?: number | undefined;
405
1373
  titleLabel?: string | undefined;
406
1374
  subtotalLabel?: string | undefined;
1375
+ discountLabel?: string | undefined;
407
1376
  taxLabel?: string | undefined;
408
- shippingLabel?: string | undefined;
409
1377
  shippingFreeLabel?: string | undefined;
410
1378
  totalLabel?: string | undefined;
1379
+ totalsPendingLabel?: string | undefined;
411
1380
  awayFromLabel?: string | undefined;
412
1381
  activatedLabel?: string | undefined;
413
1382
  itemsLabel?: string | undefined;
@@ -422,11 +1391,53 @@ declare const shoppingCart4PropsSchema: z.ZodObject<{
422
1391
  checkoutLabel?: string | undefined;
423
1392
  quickCheckoutLabel?: string | undefined;
424
1393
  checkoutNowLabel?: string | undefined;
1394
+ removeLabel?: string | undefined;
1395
+ decreaseLabel?: string | undefined;
1396
+ increaseLabel?: string | undefined;
425
1397
  }>;
426
1398
  type ShoppingCart4SpecProps = z.infer<typeof shoppingCart4PropsSchema>;
1399
+ /**
1400
+ * Optional brand seams shared by the existing blocks. These mirror the
1401
+ * components' optional props as a serializable subset (no React): an accent
1402
+ * marks a trailing segment of the wordmark/brand name, and an editorial image
1403
+ * is a native `<img>` source. Omitting each keeps the block's current output.
1404
+ */
1405
+ declare const logoAccentSchema: z.ZodObject<{
1406
+ text: z.ZodString;
1407
+ className: z.ZodOptional<z.ZodString>;
1408
+ }, "strip", z.ZodTypeAny, {
1409
+ text: string;
1410
+ className?: string | undefined;
1411
+ }, {
1412
+ text: string;
1413
+ className?: string | undefined;
1414
+ }>;
1415
+ type LogoAccent = z.infer<typeof logoAccentSchema>;
1416
+ declare const brandAccentSchema: z.ZodObject<{
1417
+ text: z.ZodString;
1418
+ className: z.ZodOptional<z.ZodString>;
1419
+ }, "strip", z.ZodTypeAny, {
1420
+ text: string;
1421
+ className?: string | undefined;
1422
+ }, {
1423
+ text: string;
1424
+ className?: string | undefined;
1425
+ }>;
1426
+ type BrandAccent = z.infer<typeof brandAccentSchema>;
1427
+ declare const heroImageSchema: z.ZodObject<{
1428
+ src: z.ZodString;
1429
+ alt: z.ZodString;
1430
+ }, "strip", z.ZodTypeAny, {
1431
+ src: string;
1432
+ alt: string;
1433
+ }, {
1434
+ src: string;
1435
+ alt: string;
1436
+ }>;
1437
+ type HeroImage = z.infer<typeof heroImageSchema>;
427
1438
  declare const navbar4PropsSchema: z.ZodObject<{
428
1439
  storeCategories: z.ZodArray<z.ZodType<StoreCategory, z.ZodTypeDef, StoreCategory>, "many">;
429
- shippingNote: z.ZodString;
1440
+ shippingNote: z.ZodOptional<z.ZodString>;
430
1441
  utilityLinks: z.ZodArray<z.ZodObject<{
431
1442
  label: z.ZodString;
432
1443
  href: z.ZodString;
@@ -439,45 +1450,65 @@ declare const navbar4PropsSchema: z.ZodObject<{
439
1450
  }>, "many">;
440
1451
  logoText: z.ZodString;
441
1452
  logoHref: z.ZodOptional<z.ZodString>;
1453
+ /** Optional accent for a trailing segment of `logoText`; omitted → unchanged. */
1454
+ logoAccent: z.ZodOptional<z.ZodObject<{
1455
+ text: z.ZodString;
1456
+ className: z.ZodOptional<z.ZodString>;
1457
+ }, "strip", z.ZodTypeAny, {
1458
+ text: string;
1459
+ className?: string | undefined;
1460
+ }, {
1461
+ text: string;
1462
+ className?: string | undefined;
1463
+ }>>;
1464
+ /**
1465
+ * Consumer-supplied classes merged onto the block's outer surface as the
1466
+ * final argument (e.g. a semantic surface token). Omitted → unchanged.
1467
+ */
1468
+ className: z.ZodOptional<z.ZodString>;
442
1469
  accountHref: z.ZodOptional<z.ZodString>;
443
1470
  searchQuery: z.ZodOptional<z.ZodString>;
444
1471
  items: z.ZodOptional<z.ZodArray<z.ZodObject<{
445
1472
  id: z.ZodString;
446
1473
  name: z.ZodString;
447
- variant: z.ZodString;
1474
+ variant: z.ZodOptional<z.ZodString>;
448
1475
  price: z.ZodNumber;
449
1476
  qty: z.ZodNumber;
450
- image: z.ZodString;
1477
+ /** Optional; absent images are omitted, never serialized as `""`. */
1478
+ image: z.ZodOptional<z.ZodString>;
451
1479
  }, "strip", z.ZodTypeAny, {
452
- variant: string;
453
- image: string;
454
1480
  id: string;
455
1481
  name: string;
456
1482
  price: number;
457
1483
  qty: number;
1484
+ image?: string | undefined;
1485
+ variant?: string | undefined;
458
1486
  }, {
459
- variant: string;
460
- image: string;
461
1487
  id: string;
462
1488
  name: string;
463
1489
  price: number;
464
1490
  qty: number;
1491
+ image?: string | undefined;
1492
+ variant?: string | undefined;
465
1493
  }>, "many">>;
1494
+ /** Authoritative backend subtotal for the mini-cart. */
1495
+ subtotal: z.ZodOptional<z.ZodType<Money, z.ZodTypeDef, Money>>;
1496
+ subtotalUnavailableLabel: z.ZodOptional<z.ZodString>;
466
1497
  user: z.ZodOptional<z.ZodObject<{
467
1498
  name: z.ZodString;
468
1499
  email: z.ZodString;
469
- avatar: z.ZodString;
1500
+ avatar: z.ZodOptional<z.ZodString>;
470
1501
  initials: z.ZodString;
471
1502
  }, "strip", z.ZodTypeAny, {
472
- email: string;
473
1503
  name: string;
474
- avatar: string;
1504
+ email: string;
475
1505
  initials: string;
1506
+ avatar?: string | undefined;
476
1507
  }, {
477
- email: string;
478
1508
  name: string;
479
- avatar: string;
1509
+ email: string;
480
1510
  initials: string;
1511
+ avatar?: string | undefined;
481
1512
  }>>;
482
1513
  accountMenuItems: z.ZodOptional<z.ZodArray<z.ZodObject<{
483
1514
  label: z.ZodString;
@@ -487,77 +1518,215 @@ declare const navbar4PropsSchema: z.ZodObject<{
487
1518
  }, "strip", z.ZodTypeAny, {
488
1519
  label: string;
489
1520
  href: string;
490
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
491
1521
  description?: string | undefined;
1522
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
492
1523
  }, {
493
1524
  label: string;
494
1525
  href: string;
495
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
496
1526
  description?: string | undefined;
1527
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
497
1528
  }>, "many">>;
1529
+ accountPending: z.ZodOptional<z.ZodBoolean>;
1530
+ accountUnavailable: z.ZodOptional<z.ZodBoolean>;
498
1531
  }, "strip", z.ZodTypeAny, {
499
- logoText: string;
500
1532
  storeCategories: StoreCategory[];
501
1533
  utilityLinks: {
502
1534
  label: string;
503
1535
  href: string;
504
1536
  }[];
505
- shippingNote: string;
506
- logoHref?: string | undefined;
507
- user?: {
508
- email: string;
509
- name: string;
510
- avatar: string;
511
- initials: string;
512
- } | undefined;
1537
+ logoText: string;
1538
+ subtotal?: Money | undefined;
1539
+ className?: string | undefined;
513
1540
  items?: {
514
- variant: string;
515
- image: string;
516
1541
  id: string;
517
1542
  name: string;
518
1543
  price: number;
519
1544
  qty: number;
1545
+ image?: string | undefined;
1546
+ variant?: string | undefined;
520
1547
  }[] | undefined;
1548
+ shippingNote?: string | undefined;
1549
+ logoHref?: string | undefined;
1550
+ logoAccent?: {
1551
+ text: string;
1552
+ className?: string | undefined;
1553
+ } | undefined;
521
1554
  accountHref?: string | undefined;
522
1555
  searchQuery?: string | undefined;
1556
+ subtotalUnavailableLabel?: string | undefined;
1557
+ user?: {
1558
+ name: string;
1559
+ email: string;
1560
+ initials: string;
1561
+ avatar?: string | undefined;
1562
+ } | undefined;
523
1563
  accountMenuItems?: {
524
1564
  label: string;
525
1565
  href: string;
526
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
527
1566
  description?: string | undefined;
1567
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
528
1568
  }[] | undefined;
1569
+ accountPending?: boolean | undefined;
1570
+ accountUnavailable?: boolean | undefined;
529
1571
  }, {
530
- logoText: string;
531
1572
  storeCategories: StoreCategory[];
532
1573
  utilityLinks: {
533
1574
  label: string;
534
1575
  href: string;
535
1576
  }[];
536
- shippingNote: string;
537
- logoHref?: string | undefined;
538
- user?: {
539
- email: string;
540
- name: string;
541
- avatar: string;
542
- initials: string;
543
- } | undefined;
1577
+ logoText: string;
1578
+ subtotal?: Money | undefined;
1579
+ className?: string | undefined;
544
1580
  items?: {
545
- variant: string;
546
- image: string;
547
1581
  id: string;
548
1582
  name: string;
549
1583
  price: number;
550
1584
  qty: number;
1585
+ image?: string | undefined;
1586
+ variant?: string | undefined;
551
1587
  }[] | undefined;
1588
+ shippingNote?: string | undefined;
1589
+ logoHref?: string | undefined;
1590
+ logoAccent?: {
1591
+ text: string;
1592
+ className?: string | undefined;
1593
+ } | undefined;
552
1594
  accountHref?: string | undefined;
553
1595
  searchQuery?: string | undefined;
1596
+ subtotalUnavailableLabel?: string | undefined;
1597
+ user?: {
1598
+ name: string;
1599
+ email: string;
1600
+ initials: string;
1601
+ avatar?: string | undefined;
1602
+ } | undefined;
554
1603
  accountMenuItems?: {
555
1604
  label: string;
556
1605
  href: string;
557
- icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
558
1606
  description?: string | undefined;
1607
+ icon?: "orders" | "wishlist" | "addresses" | "settings" | undefined;
559
1608
  }[] | undefined;
1609
+ accountPending?: boolean | undefined;
1610
+ accountUnavailable?: boolean | undefined;
560
1611
  }>;
561
1612
  type Navbar4SpecProps = z.infer<typeof navbar4PropsSchema>;
1613
+ /**
1614
+ * Serializable contracts for the two bounded editorial sections (`faq`, `cta`).
1615
+ * These are the serializable subset of `FaqBlock1Props`/`CtaSection1Props`: the
1616
+ * React-only callbacks (`onPrimaryClick`/`onSecondaryClick`) are intentionally
1617
+ * excluded — the catalog adapter binds them (see design D3).
1618
+ */
1619
+ declare const ctaSchema: z.ZodObject<{
1620
+ label: z.ZodString;
1621
+ href: z.ZodOptional<z.ZodString>;
1622
+ }, "strip", z.ZodTypeAny, {
1623
+ label: string;
1624
+ href?: string | undefined;
1625
+ }, {
1626
+ label: string;
1627
+ href?: string | undefined;
1628
+ }>;
1629
+ type CtaSpec = z.infer<typeof ctaSchema>;
1630
+ declare const faqItemSchema: z.ZodObject<{
1631
+ value: z.ZodString;
1632
+ question: z.ZodString;
1633
+ answer: z.ZodString;
1634
+ }, "strip", z.ZodTypeAny, {
1635
+ value: string;
1636
+ question: string;
1637
+ answer: string;
1638
+ }, {
1639
+ value: string;
1640
+ question: string;
1641
+ answer: string;
1642
+ }>;
1643
+ type FaqItemSpec = z.infer<typeof faqItemSchema>;
1644
+ declare const faqBlock1PropsSchema: z.ZodObject<{
1645
+ items: z.ZodArray<z.ZodObject<{
1646
+ value: z.ZodString;
1647
+ question: z.ZodString;
1648
+ answer: z.ZodString;
1649
+ }, "strip", z.ZodTypeAny, {
1650
+ value: string;
1651
+ question: string;
1652
+ answer: string;
1653
+ }, {
1654
+ value: string;
1655
+ question: string;
1656
+ answer: string;
1657
+ }>, "many">;
1658
+ title: z.ZodOptional<z.ZodString>;
1659
+ description: z.ZodOptional<z.ZodString>;
1660
+ accordionType: z.ZodOptional<z.ZodEnum<["single", "multiple"]>>;
1661
+ }, "strip", z.ZodTypeAny, {
1662
+ items: {
1663
+ value: string;
1664
+ question: string;
1665
+ answer: string;
1666
+ }[];
1667
+ title?: string | undefined;
1668
+ description?: string | undefined;
1669
+ accordionType?: "single" | "multiple" | undefined;
1670
+ }, {
1671
+ items: {
1672
+ value: string;
1673
+ question: string;
1674
+ answer: string;
1675
+ }[];
1676
+ title?: string | undefined;
1677
+ description?: string | undefined;
1678
+ accordionType?: "single" | "multiple" | undefined;
1679
+ }>;
1680
+ type FaqBlock1SpecProps = z.infer<typeof faqBlock1PropsSchema>;
1681
+ declare const ctaSection1PropsSchema: z.ZodObject<{
1682
+ badgeText: z.ZodOptional<z.ZodString>;
1683
+ title: z.ZodOptional<z.ZodString>;
1684
+ description: z.ZodOptional<z.ZodString>;
1685
+ primaryCta: z.ZodOptional<z.ZodObject<{
1686
+ label: z.ZodString;
1687
+ href: z.ZodOptional<z.ZodString>;
1688
+ }, "strip", z.ZodTypeAny, {
1689
+ label: string;
1690
+ href?: string | undefined;
1691
+ }, {
1692
+ label: string;
1693
+ href?: string | undefined;
1694
+ }>>;
1695
+ secondaryCta: z.ZodOptional<z.ZodObject<{
1696
+ label: z.ZodString;
1697
+ href: z.ZodOptional<z.ZodString>;
1698
+ }, "strip", z.ZodTypeAny, {
1699
+ label: string;
1700
+ href?: string | undefined;
1701
+ }, {
1702
+ label: string;
1703
+ href?: string | undefined;
1704
+ }>>;
1705
+ }, "strip", z.ZodTypeAny, {
1706
+ title?: string | undefined;
1707
+ description?: string | undefined;
1708
+ badgeText?: string | undefined;
1709
+ primaryCta?: {
1710
+ label: string;
1711
+ href?: string | undefined;
1712
+ } | undefined;
1713
+ secondaryCta?: {
1714
+ label: string;
1715
+ href?: string | undefined;
1716
+ } | undefined;
1717
+ }, {
1718
+ title?: string | undefined;
1719
+ description?: string | undefined;
1720
+ badgeText?: string | undefined;
1721
+ primaryCta?: {
1722
+ label: string;
1723
+ href?: string | undefined;
1724
+ } | undefined;
1725
+ secondaryCta?: {
1726
+ label: string;
1727
+ href?: string | undefined;
1728
+ } | undefined;
1729
+ }>;
1730
+ type CtaSection1SpecProps = z.infer<typeof ctaSection1PropsSchema>;
562
1731
 
563
- export { type AccountMenuItem, type ButtonSpecProps, type CanonMoney, type CanonProduct, type CardProduct, type CartItem, type NavCartItem, type Navbar4SpecProps, PRODUCT_IMAGE_FALLBACK, type ProductCard1SpecProps, type Promotion, type RecentlyViewedItem, type ShoppingCart4SpecProps, type StoreCategory, type StoreContainer1SpecProps, type StoreUser, type UtilityLink, accountMenuItemSchema, buttonPropsSchema, cardProductSchema, cartItemSchema, navCartItemSchema, navbar4PropsSchema, paymentMethodSchema, productCard1PropsSchema, promotionSchema, recentlyViewedItemSchema, shoppingCart4PropsSchema, storeCategorySchema, storeContainer1PropsSchema, storeUserSchema, utilityLinkSchema };
1732
+ export { type AccountMenuItem, type BrandAccent, type ButtonSpecProps, type CanonMoney, type CanonProduct, type CardProduct, type CartItem, type CartTotals, type CtaSection1SpecProps, type CtaSpec, type FaqBlock1SpecProps, type FaqItemSpec, type HeroImage, type LogoAccent, type NavCartItem, type Navbar4SpecProps, PRODUCT_IMAGE_FALLBACK, type ProductCard1SpecProps, type ProductDetailProductSpec, type ProductDetailVariantSpec, type ProductOverview1SpecProps, type ProductPresentation, type ProductShowcase1SpecProps, type Promotion, type RecentlyViewedItem, type ShoppingCart4SpecProps, type StoreCategory, type StoreContainer1SpecProps, type StoreUser, type UtilityLink, accountMenuItemSchema, brandAccentSchema, buttonPropsSchema, cardProductSchema, cartItemSchema, cartTotalsSchema, ctaSchema, ctaSection1PropsSchema, faqBlock1PropsSchema, faqItemSchema, formatMoney, heroImageSchema, isAvailableMoney, isCompleteFiniteDecimal, logoAccentSchema, moneySchema, navCartItemSchema, navbar4PropsSchema, paymentMethodSchema, productCard1PropsSchema, productDetailProductSchema, productDetailVariantSchema, productOverview1PropsSchema, productPresentationSchema, productShowcase1PropsSchema, promotionSchema, recentlyViewedItemSchema, resolveAbsoluteQuantity, shoppingCart4PropsSchema, storeCategorySchema, storeContainer1PropsSchema, storeUserSchema, utilityLinkSchema };