@syntrologie/adapt-product 2.27.0 → 2.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/dist/__fixtures__/variant-payloads.d.ts +33 -0
  2. package/dist/__fixtures__/variant-payloads.d.ts.map +1 -0
  3. package/dist/cdn.d.ts +1 -0
  4. package/dist/cdn.d.ts.map +1 -1
  5. package/dist/cdn.js +9 -3
  6. package/dist/cdn.js.map +2 -2
  7. package/dist/chunk-7Z4Y44WC.js +319 -0
  8. package/dist/chunk-7Z4Y44WC.js.map +7 -0
  9. package/dist/chunk-VY23O32Z.js +10963 -0
  10. package/dist/chunk-VY23O32Z.js.map +7 -0
  11. package/dist/decision/card-effects.d.ts +20 -0
  12. package/dist/decision/card-effects.d.ts.map +1 -0
  13. package/dist/decision/card.d.ts +150 -0
  14. package/dist/decision/card.d.ts.map +1 -0
  15. package/dist/decision/pdp-compose.d.ts +69 -0
  16. package/dist/decision/pdp-compose.d.ts.map +1 -0
  17. package/dist/decision/pdp-effects.d.ts +17 -0
  18. package/dist/decision/pdp-effects.d.ts.map +1 -0
  19. package/dist/decision/pdp.d.ts +214 -0
  20. package/dist/decision/pdp.d.ts.map +1 -0
  21. package/dist/native/nativeSlotSwap.d.ts +40 -0
  22. package/dist/native/nativeSlotSwap.d.ts.map +1 -0
  23. package/dist/native/nativeSlotWatcher.d.ts +135 -0
  24. package/dist/native/nativeSlotWatcher.d.ts.map +1 -0
  25. package/dist/platformAdapter.d.ts +82 -0
  26. package/dist/platformAdapter.d.ts.map +1 -0
  27. package/dist/runtime.d.ts +688 -60
  28. package/dist/runtime.d.ts.map +1 -1
  29. package/dist/runtime.js +10 -2
  30. package/dist/sanitizer.d.ts.map +1 -1
  31. package/dist/schema-primitives.d.ts +450 -29
  32. package/dist/schema-primitives.d.ts.map +1 -1
  33. package/dist/schema.d.ts +4922 -446
  34. package/dist/schema.d.ts.map +1 -1
  35. package/dist/schema.js +13 -1
  36. package/dist/scoring/pool-selection.d.ts +35 -0
  37. package/dist/scoring/pool-selection.d.ts.map +1 -0
  38. package/dist/scoring/scored-template.d.ts +106 -0
  39. package/dist/scoring/scored-template.d.ts.map +1 -0
  40. package/dist/variantCache.d.ts +5 -0
  41. package/dist/variantCache.d.ts.map +1 -0
  42. package/dist/widgets/OtherProductTileLit.d.ts +46 -0
  43. package/dist/widgets/OtherProductTileLit.d.ts.map +1 -0
  44. package/dist/widgets/PdpChartBarStackedLit.d.ts +33 -0
  45. package/dist/widgets/PdpChartBarStackedLit.d.ts.map +1 -0
  46. package/dist/widgets/PdpChartLit.d.ts +56 -0
  47. package/dist/widgets/PdpChartLit.d.ts.map +1 -0
  48. package/dist/widgets/PdpChartMetricPullLit.d.ts +33 -0
  49. package/dist/widgets/PdpChartMetricPullLit.d.ts.map +1 -0
  50. package/dist/widgets/PdpOtherProductsCarouselLit.d.ts +33 -0
  51. package/dist/widgets/PdpOtherProductsCarouselLit.d.ts.map +1 -0
  52. package/dist/widgets/PdpOtherProductsGridLit.d.ts +20 -0
  53. package/dist/widgets/PdpOtherProductsGridLit.d.ts.map +1 -0
  54. package/dist/widgets/PdpOtherProductsLit.d.ts +35 -0
  55. package/dist/widgets/PdpOtherProductsLit.d.ts.map +1 -0
  56. package/dist/widgets/PdpPeerFeedCarouselLit.d.ts +30 -0
  57. package/dist/widgets/PdpPeerFeedCarouselLit.d.ts.map +1 -0
  58. package/dist/widgets/PdpPeerFeedLit.d.ts +51 -0
  59. package/dist/widgets/PdpPeerFeedLit.d.ts.map +1 -0
  60. package/dist/widgets/PdpPeerFeedMasonryLit.d.ts +30 -0
  61. package/dist/widgets/PdpPeerFeedMasonryLit.d.ts.map +1 -0
  62. package/dist/widgets/PdpQaAccordionLit.d.ts +27 -0
  63. package/dist/widgets/PdpQaAccordionLit.d.ts.map +1 -0
  64. package/dist/widgets/PdpQaLit.d.ts +48 -0
  65. package/dist/widgets/PdpQaLit.d.ts.map +1 -0
  66. package/dist/widgets/PdpQaSideBySideLit.d.ts +27 -0
  67. package/dist/widgets/PdpQaSideBySideLit.d.ts.map +1 -0
  68. package/dist/widgets/PdpRegionalFullBleedLit.d.ts +27 -0
  69. package/dist/widgets/PdpRegionalFullBleedLit.d.ts.map +1 -0
  70. package/dist/widgets/PdpRegionalInlineNoteLit.d.ts +27 -0
  71. package/dist/widgets/PdpRegionalInlineNoteLit.d.ts.map +1 -0
  72. package/dist/widgets/PdpRegionalLit.d.ts +48 -0
  73. package/dist/widgets/PdpRegionalLit.d.ts.map +1 -0
  74. package/dist/widgets/PdpRibbonLit.d.ts +31 -0
  75. package/dist/widgets/PdpRibbonLit.d.ts.map +1 -0
  76. package/dist/widgets/PdpSectionHeaderLit.d.ts +30 -0
  77. package/dist/widgets/PdpSectionHeaderLit.d.ts.map +1 -0
  78. package/dist/widgets/PdpSlotLit.d.ts +30 -0
  79. package/dist/widgets/PdpSlotLit.d.ts.map +1 -0
  80. package/dist/widgets/PdpSlotPlaceholderLit.d.ts +22 -0
  81. package/dist/widgets/PdpSlotPlaceholderLit.d.ts.map +1 -0
  82. package/dist/widgets/PdpTrendingNewsHeroLit.d.ts +32 -0
  83. package/dist/widgets/PdpTrendingNewsHeroLit.d.ts.map +1 -0
  84. package/dist/widgets/PdpTrendingNewsLit.d.ts +42 -0
  85. package/dist/widgets/PdpTrendingNewsLit.d.ts.map +1 -0
  86. package/dist/widgets/PdpTrendingNewsMagazineLit.d.ts +32 -0
  87. package/dist/widgets/PdpTrendingNewsMagazineLit.d.ts.map +1 -0
  88. package/dist/widgets/ProductCardLit.d.ts +80 -2
  89. package/dist/widgets/ProductCardLit.d.ts.map +1 -1
  90. package/dist/widgets/ProductComparisonLit.d.ts +9 -4
  91. package/dist/widgets/ProductComparisonLit.d.ts.map +1 -1
  92. package/dist/widgets/ProductGridLit.d.ts +1 -0
  93. package/dist/widgets/ProductGridLit.d.ts.map +1 -1
  94. package/dist/widgets/ProductHeroLit.d.ts +1 -0
  95. package/dist/widgets/ProductHeroLit.d.ts.map +1 -1
  96. package/dist/widgets/ProductRecoCarouselLit.d.ts +24 -0
  97. package/dist/widgets/ProductRecoCarouselLit.d.ts.map +1 -0
  98. package/dist/widgets/SyntroPdpLit.d.ts +366 -0
  99. package/dist/widgets/SyntroPdpLit.d.ts.map +1 -0
  100. package/dist/widgets/VariantPanelLit.d.ts +98 -0
  101. package/dist/widgets/VariantPanelLit.d.ts.map +1 -0
  102. package/dist/widgets/ensureStylesInRoot.d.ts +22 -0
  103. package/dist/widgets/ensureStylesInRoot.d.ts.map +1 -0
  104. package/dist/widgets/entrance.d.ts +35 -0
  105. package/dist/widgets/entrance.d.ts.map +1 -0
  106. package/dist/widgets/renderHealth.d.ts +57 -0
  107. package/dist/widgets/renderHealth.d.ts.map +1 -0
  108. package/dist/widgets/renderHealthReporter.d.ts +66 -0
  109. package/dist/widgets/renderHealthReporter.d.ts.map +1 -0
  110. package/package.json +4 -1
  111. package/dist/chunk-HFT5OENK.js +0 -1101
  112. package/dist/chunk-HFT5OENK.js.map +0 -7
  113. package/dist/chunk-SM35E4R3.js +0 -126
  114. package/dist/chunk-SM35E4R3.js.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAkCpF,eAAO,MAAM,oBAAoB;qBAVZ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUuC,CAAC;AACxE,eAAO,MAAM,0BAA0B;qBAXlB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWyD,CAAC;AAC1F,eAAO,MAAM,oBAAoB;qBAZZ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYuC,CAAC;AACxE,eAAO,MAAM,oBAAoB;qBAbZ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAauC,CAAC;AAExE,eAAO,MAAM,OAAO;;;;;;;;;6BAfC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAAX,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4D/B,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -3,16 +3,24 @@ import {
3
3
  ProductComparisonMountable,
4
4
  ProductGridMountable,
5
5
  ProductHeroMountable,
6
+ SyntroPdpMountable,
7
+ SyntroRecoMountable,
8
+ _testing,
9
+ onActivate,
6
10
  runtime,
7
11
  runtime_default
8
- } from "./chunk-HFT5OENK.js";
9
- import "./chunk-SM35E4R3.js";
12
+ } from "./chunk-VY23O32Z.js";
13
+ import "./chunk-7Z4Y44WC.js";
10
14
  export {
11
15
  ProductCardMountable,
12
16
  ProductComparisonMountable,
13
17
  ProductGridMountable,
14
18
  ProductHeroMountable,
19
+ SyntroPdpMountable,
20
+ SyntroRecoMountable,
21
+ _testing,
15
22
  runtime_default as default,
23
+ onActivate,
16
24
  runtime
17
25
  };
18
26
  //# sourceMappingURL=runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../src/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqDjD"}
1
+ {"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../src/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmDH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmDjD"}
@@ -258,19 +258,6 @@ export declare const productSchema: z.ZodObject<{
258
258
  label: string;
259
259
  tone?: "neutral" | "primary" | "success" | "warning" | undefined;
260
260
  }>>;
261
- attributes: z.ZodArray<z.ZodObject<{
262
- label: z.ZodString;
263
- value: z.ZodString;
264
- emphasis: z.ZodDefault<z.ZodBoolean>;
265
- }, "strict", z.ZodTypeAny, {
266
- value: string;
267
- label: string;
268
- emphasis: boolean;
269
- }, {
270
- value: string;
271
- label: string;
272
- emphasis?: boolean | undefined;
273
- }>, "many">;
274
261
  framing: z.ZodOptional<z.ZodString>;
275
262
  ctas: z.ZodArray<z.ZodObject<{
276
263
  label: z.ZodString;
@@ -280,19 +267,320 @@ export declare const productSchema: z.ZodObject<{
280
267
  actionId: z.ZodOptional<z.ZodString>;
281
268
  }, "strict", z.ZodTypeAny, {
282
269
  label: string;
283
- target: "_self" | "_blank";
284
270
  variant: "primary" | "secondary" | "ghost";
271
+ target: "_self" | "_blank";
285
272
  href?: string | undefined;
286
273
  actionId?: string | undefined;
287
274
  }, {
288
275
  label: string;
276
+ variant?: "primary" | "secondary" | "ghost" | undefined;
289
277
  href?: string | undefined;
290
278
  target?: "_self" | "_blank" | undefined;
291
- variant?: "primary" | "secondary" | "ghost" | undefined;
292
279
  actionId?: string | undefined;
293
280
  }>, "many">;
281
+ /** Cross-platform product identifiers. SKU/GTIN/MPN per GMC; platform handles for bind auto-resolution. */
282
+ identifiers: z.ZodOptional<z.ZodObject<{
283
+ sku: z.ZodOptional<z.ZodString>;
284
+ gtin: z.ZodOptional<z.ZodString>;
285
+ mpn: z.ZodOptional<z.ZodString>;
286
+ shopifyHandle: z.ZodOptional<z.ZodString>;
287
+ wooSlug: z.ZodOptional<z.ZodString>;
288
+ }, "strict", z.ZodTypeAny, {
289
+ sku?: string | undefined;
290
+ gtin?: string | undefined;
291
+ mpn?: string | undefined;
292
+ shopifyHandle?: string | undefined;
293
+ wooSlug?: string | undefined;
294
+ }, {
295
+ sku?: string | undefined;
296
+ gtin?: string | undefined;
297
+ mpn?: string | undefined;
298
+ shopifyHandle?: string | undefined;
299
+ wooSlug?: string | undefined;
300
+ }>>;
301
+ brand: z.ZodOptional<z.ZodString>;
302
+ /** GMC availability enum — drives default badge if no explicit badge set. */
303
+ availability: z.ZodOptional<z.ZodEnum<["in_stock", "preorder", "backorder", "out_of_stock"]>>;
304
+ /** Strikethrough source price. `price` becomes the "was" value when this is set. */
305
+ salePrice: z.ZodOptional<z.ZodObject<{
306
+ amount: z.ZodString;
307
+ cadence: z.ZodOptional<z.ZodString>;
308
+ validUntil: z.ZodOptional<z.ZodString>;
309
+ bind: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
310
+ type: z.ZodLiteral<"dom-selector">;
311
+ selector: z.ZodString;
312
+ }, "strict", z.ZodTypeAny, {
313
+ type: "dom-selector";
314
+ selector: string;
315
+ }, {
316
+ type: "dom-selector";
317
+ selector: string;
318
+ }>, z.ZodObject<{
319
+ type: z.ZodLiteral<"shopify-ajax">;
320
+ handle: z.ZodString;
321
+ base: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
322
+ }, "strict", z.ZodTypeAny, {
323
+ type: "shopify-ajax";
324
+ handle: string;
325
+ base?: string | undefined;
326
+ }, {
327
+ type: "shopify-ajax";
328
+ handle: string;
329
+ base?: string | undefined;
330
+ }>, z.ZodObject<{
331
+ type: z.ZodLiteral<"woocommerce-store-api">;
332
+ slug: z.ZodString;
333
+ base: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
334
+ }, "strict", z.ZodTypeAny, {
335
+ type: "woocommerce-store-api";
336
+ slug: string;
337
+ base?: string | undefined;
338
+ }, {
339
+ type: "woocommerce-store-api";
340
+ slug: string;
341
+ base?: string | undefined;
342
+ }>, z.ZodObject<{
343
+ type: z.ZodLiteral<"jsonld">;
344
+ url: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
345
+ }, "strict", z.ZodTypeAny, {
346
+ type: "jsonld";
347
+ url?: string | undefined;
348
+ }, {
349
+ type: "jsonld";
350
+ url?: string | undefined;
351
+ }>]>>;
352
+ }, "strict", z.ZodTypeAny, {
353
+ amount: string;
354
+ bind?: {
355
+ type: "dom-selector";
356
+ selector: string;
357
+ } | {
358
+ type: "shopify-ajax";
359
+ handle: string;
360
+ base?: string | undefined;
361
+ } | {
362
+ type: "woocommerce-store-api";
363
+ slug: string;
364
+ base?: string | undefined;
365
+ } | {
366
+ type: "jsonld";
367
+ url?: string | undefined;
368
+ } | undefined;
369
+ cadence?: string | undefined;
370
+ validUntil?: string | undefined;
371
+ }, {
372
+ amount: string;
373
+ bind?: {
374
+ type: "dom-selector";
375
+ selector: string;
376
+ } | {
377
+ type: "shopify-ajax";
378
+ handle: string;
379
+ base?: string | undefined;
380
+ } | {
381
+ type: "woocommerce-store-api";
382
+ slug: string;
383
+ base?: string | undefined;
384
+ } | {
385
+ type: "jsonld";
386
+ url?: string | undefined;
387
+ } | undefined;
388
+ cadence?: string | undefined;
389
+ validUntil?: string | undefined;
390
+ }>>;
391
+ /** AggregateRating — value, count, optional max (defaults to 5). */
392
+ rating: z.ZodOptional<z.ZodObject<{
393
+ value: z.ZodNumber;
394
+ count: z.ZodNumber;
395
+ max: z.ZodDefault<z.ZodNumber>;
396
+ }, "strict", z.ZodTypeAny, {
397
+ value: number;
398
+ count: number;
399
+ max: number;
400
+ }, {
401
+ value: number;
402
+ count: number;
403
+ max?: number | undefined;
404
+ }>>;
405
+ /** Category-specific spec rows grouped by section. Renderers show as grouped tables. */
406
+ specs: z.ZodOptional<z.ZodArray<z.ZodObject<{
407
+ section: z.ZodString;
408
+ name: z.ZodString;
409
+ value: z.ZodString;
410
+ unit: z.ZodOptional<z.ZodString>;
411
+ emphasis: z.ZodDefault<z.ZodBoolean>;
412
+ priority: z.ZodOptional<z.ZodNumber>;
413
+ }, "strict", z.ZodTypeAny, {
414
+ name: string;
415
+ value: string;
416
+ section: string;
417
+ emphasis: boolean;
418
+ unit?: string | undefined;
419
+ priority?: number | undefined;
420
+ }, {
421
+ name: string;
422
+ value: string;
423
+ section: string;
424
+ unit?: string | undefined;
425
+ emphasis?: boolean | undefined;
426
+ priority?: number | undefined;
427
+ }>, "many">>;
428
+ /** Flat record of targeting/segmentation labels. Renderer ignores; targeting layer reads. */
429
+ labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
430
+ /** @deprecated Use `specs[]` with `section: "About"`. Retained for backward compatibility. */
431
+ attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{
432
+ label: z.ZodString;
433
+ value: z.ZodString;
434
+ emphasis: z.ZodDefault<z.ZodBoolean>;
435
+ }, "strict", z.ZodTypeAny, {
436
+ value: string;
437
+ label: string;
438
+ emphasis: boolean;
439
+ }, {
440
+ value: string;
441
+ label: string;
442
+ emphasis?: boolean | undefined;
443
+ }>, "many">>;
444
+ /**
445
+ * Optional variant block for products with attribute-based SKUs.
446
+ * When present, indicates the product has multiple SKUs distinguished
447
+ * by attributes (size, color, etc.). This block on the product itself
448
+ * is the seed-data shape the demo uses to serve its Shopify
449
+ * GET /products/{handle}.js endpoint.
450
+ *
451
+ * The card does NOT read this directly to decide whether to show a
452
+ * variant picker: variant presence is resolved at render from the
453
+ * platform adapter's fetchVariants (host API for real tenants, this
454
+ * seed data for the demo), so a single catalog source drives it.
455
+ * For real Shopify/Woo tenants this field is unused on the mount
456
+ * payload; the adapter fetches from the host API instead.
457
+ */
458
+ variants: z.ZodOptional<z.ZodObject<{
459
+ attributes: z.ZodArray<z.ZodObject<{
460
+ key: z.ZodString;
461
+ label: z.ZodString;
462
+ kind: z.ZodEnum<["pill", "swatch"]>;
463
+ values: z.ZodArray<z.ZodObject<{
464
+ id: z.ZodString;
465
+ label: z.ZodString;
466
+ swatch: z.ZodNullable<z.ZodObject<{
467
+ kind: z.ZodEnum<["color", "image"]>;
468
+ value: z.ZodString;
469
+ }, "strip", z.ZodTypeAny, {
470
+ kind: "image" | "color";
471
+ value: string;
472
+ }, {
473
+ kind: "image" | "color";
474
+ value: string;
475
+ }>>;
476
+ }, "strip", z.ZodTypeAny, {
477
+ label: string;
478
+ id: string;
479
+ swatch: {
480
+ kind: "image" | "color";
481
+ value: string;
482
+ } | null;
483
+ }, {
484
+ label: string;
485
+ id: string;
486
+ swatch: {
487
+ kind: "image" | "color";
488
+ value: string;
489
+ } | null;
490
+ }>, "many">;
491
+ }, "strip", z.ZodTypeAny, {
492
+ values: {
493
+ label: string;
494
+ id: string;
495
+ swatch: {
496
+ kind: "image" | "color";
497
+ value: string;
498
+ } | null;
499
+ }[];
500
+ kind: "pill" | "swatch";
501
+ label: string;
502
+ key: string;
503
+ }, {
504
+ values: {
505
+ label: string;
506
+ id: string;
507
+ swatch: {
508
+ kind: "image" | "color";
509
+ value: string;
510
+ } | null;
511
+ }[];
512
+ kind: "pill" | "swatch";
513
+ label: string;
514
+ key: string;
515
+ }>, "many">;
516
+ variants: z.ZodArray<z.ZodObject<{
517
+ id: z.ZodString;
518
+ selection: z.ZodRecord<z.ZodString, z.ZodString>;
519
+ price: z.ZodNumber;
520
+ compare_at_price: z.ZodNullable<z.ZodNumber>;
521
+ in_stock: z.ZodBoolean;
522
+ featured_image: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
523
+ }, "strip", z.ZodTypeAny, {
524
+ id: string;
525
+ price: number;
526
+ in_stock: boolean;
527
+ selection: Record<string, string>;
528
+ compare_at_price: number | null;
529
+ featured_image?: string | undefined;
530
+ }, {
531
+ id: string;
532
+ price: number;
533
+ in_stock: boolean;
534
+ selection: Record<string, string>;
535
+ compare_at_price: number | null;
536
+ featured_image?: string | undefined;
537
+ }>, "many">;
538
+ }, "strip", z.ZodTypeAny, {
539
+ attributes: {
540
+ values: {
541
+ label: string;
542
+ id: string;
543
+ swatch: {
544
+ kind: "image" | "color";
545
+ value: string;
546
+ } | null;
547
+ }[];
548
+ kind: "pill" | "swatch";
549
+ label: string;
550
+ key: string;
551
+ }[];
552
+ variants: {
553
+ id: string;
554
+ price: number;
555
+ in_stock: boolean;
556
+ selection: Record<string, string>;
557
+ compare_at_price: number | null;
558
+ featured_image?: string | undefined;
559
+ }[];
560
+ }, {
561
+ attributes: {
562
+ values: {
563
+ label: string;
564
+ id: string;
565
+ swatch: {
566
+ kind: "image" | "color";
567
+ value: string;
568
+ } | null;
569
+ }[];
570
+ kind: "pill" | "swatch";
571
+ label: string;
572
+ key: string;
573
+ }[];
574
+ variants: {
575
+ id: string;
576
+ price: number;
577
+ in_stock: boolean;
578
+ selection: Record<string, string>;
579
+ compare_at_price: number | null;
580
+ featured_image?: string | undefined;
581
+ }[];
582
+ }>>;
294
583
  }, "strict", z.ZodTypeAny, {
295
- id: string;
296
584
  name: string;
297
585
  image: {
298
586
  src: string;
@@ -312,15 +600,11 @@ export declare const productSchema: z.ZodObject<{
312
600
  url?: string | undefined;
313
601
  } | undefined;
314
602
  };
315
- attributes: {
316
- value: string;
317
- label: string;
318
- emphasis: boolean;
319
- }[];
603
+ id: string;
320
604
  ctas: {
321
605
  label: string;
322
- target: "_self" | "_blank";
323
606
  variant: "primary" | "secondary" | "ghost";
607
+ target: "_self" | "_blank";
324
608
  href?: string | undefined;
325
609
  actionId?: string | undefined;
326
610
  }[];
@@ -349,8 +633,78 @@ export declare const productSchema: z.ZodObject<{
349
633
  tone: "neutral" | "primary" | "success" | "warning";
350
634
  } | undefined;
351
635
  framing?: string | undefined;
636
+ identifiers?: {
637
+ sku?: string | undefined;
638
+ gtin?: string | undefined;
639
+ mpn?: string | undefined;
640
+ shopifyHandle?: string | undefined;
641
+ wooSlug?: string | undefined;
642
+ } | undefined;
643
+ brand?: string | undefined;
644
+ availability?: "in_stock" | "preorder" | "backorder" | "out_of_stock" | undefined;
645
+ salePrice?: {
646
+ amount: string;
647
+ bind?: {
648
+ type: "dom-selector";
649
+ selector: string;
650
+ } | {
651
+ type: "shopify-ajax";
652
+ handle: string;
653
+ base?: string | undefined;
654
+ } | {
655
+ type: "woocommerce-store-api";
656
+ slug: string;
657
+ base?: string | undefined;
658
+ } | {
659
+ type: "jsonld";
660
+ url?: string | undefined;
661
+ } | undefined;
662
+ cadence?: string | undefined;
663
+ validUntil?: string | undefined;
664
+ } | undefined;
665
+ rating?: {
666
+ value: number;
667
+ count: number;
668
+ max: number;
669
+ } | undefined;
670
+ specs?: {
671
+ name: string;
672
+ value: string;
673
+ section: string;
674
+ emphasis: boolean;
675
+ unit?: string | undefined;
676
+ priority?: number | undefined;
677
+ }[] | undefined;
678
+ labels?: Record<string, string | number | boolean> | undefined;
679
+ attributes?: {
680
+ value: string;
681
+ label: string;
682
+ emphasis: boolean;
683
+ }[] | undefined;
684
+ variants?: {
685
+ attributes: {
686
+ values: {
687
+ label: string;
688
+ id: string;
689
+ swatch: {
690
+ kind: "image" | "color";
691
+ value: string;
692
+ } | null;
693
+ }[];
694
+ kind: "pill" | "swatch";
695
+ label: string;
696
+ key: string;
697
+ }[];
698
+ variants: {
699
+ id: string;
700
+ price: number;
701
+ in_stock: boolean;
702
+ selection: Record<string, string>;
703
+ compare_at_price: number | null;
704
+ featured_image?: string | undefined;
705
+ }[];
706
+ } | undefined;
352
707
  }, {
353
- id: string;
354
708
  name: string;
355
709
  image: {
356
710
  src: string;
@@ -370,16 +724,12 @@ export declare const productSchema: z.ZodObject<{
370
724
  url?: string | undefined;
371
725
  } | undefined;
372
726
  };
373
- attributes: {
374
- value: string;
375
- label: string;
376
- emphasis?: boolean | undefined;
377
- }[];
727
+ id: string;
378
728
  ctas: {
379
729
  label: string;
730
+ variant?: "primary" | "secondary" | "ghost" | undefined;
380
731
  href?: string | undefined;
381
732
  target?: "_self" | "_blank" | undefined;
382
- variant?: "primary" | "secondary" | "ghost" | undefined;
383
733
  actionId?: string | undefined;
384
734
  }[];
385
735
  tagline?: string | undefined;
@@ -407,6 +757,77 @@ export declare const productSchema: z.ZodObject<{
407
757
  tone?: "neutral" | "primary" | "success" | "warning" | undefined;
408
758
  } | undefined;
409
759
  framing?: string | undefined;
760
+ identifiers?: {
761
+ sku?: string | undefined;
762
+ gtin?: string | undefined;
763
+ mpn?: string | undefined;
764
+ shopifyHandle?: string | undefined;
765
+ wooSlug?: string | undefined;
766
+ } | undefined;
767
+ brand?: string | undefined;
768
+ availability?: "in_stock" | "preorder" | "backorder" | "out_of_stock" | undefined;
769
+ salePrice?: {
770
+ amount: string;
771
+ bind?: {
772
+ type: "dom-selector";
773
+ selector: string;
774
+ } | {
775
+ type: "shopify-ajax";
776
+ handle: string;
777
+ base?: string | undefined;
778
+ } | {
779
+ type: "woocommerce-store-api";
780
+ slug: string;
781
+ base?: string | undefined;
782
+ } | {
783
+ type: "jsonld";
784
+ url?: string | undefined;
785
+ } | undefined;
786
+ cadence?: string | undefined;
787
+ validUntil?: string | undefined;
788
+ } | undefined;
789
+ rating?: {
790
+ value: number;
791
+ count: number;
792
+ max?: number | undefined;
793
+ } | undefined;
794
+ specs?: {
795
+ name: string;
796
+ value: string;
797
+ section: string;
798
+ unit?: string | undefined;
799
+ emphasis?: boolean | undefined;
800
+ priority?: number | undefined;
801
+ }[] | undefined;
802
+ labels?: Record<string, string | number | boolean> | undefined;
803
+ attributes?: {
804
+ value: string;
805
+ label: string;
806
+ emphasis?: boolean | undefined;
807
+ }[] | undefined;
808
+ variants?: {
809
+ attributes: {
810
+ values: {
811
+ label: string;
812
+ id: string;
813
+ swatch: {
814
+ kind: "image" | "color";
815
+ value: string;
816
+ } | null;
817
+ }[];
818
+ kind: "pill" | "swatch";
819
+ label: string;
820
+ key: string;
821
+ }[];
822
+ variants: {
823
+ id: string;
824
+ price: number;
825
+ in_stock: boolean;
826
+ selection: Record<string, string>;
827
+ compare_at_price: number | null;
828
+ featured_image?: string | undefined;
829
+ }[];
830
+ } | undefined;
410
831
  }>;
411
832
  export type Product = z.infer<typeof productSchema>;
412
833
  export type PriceBind = z.infer<typeof PriceBindZ>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema-primitives.d.ts","sourceRoot":"","sources":["../src/schema-primitives.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,KAAK,2CAiBf,CAAC;AAEJ,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAarB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOrB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsDf,CAAC;AAEZ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"schema-primitives.d.ts","sourceRoot":"","sources":["../src/schema-primitives.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,KAAK,2CAiBf,CAAC;AAEJ,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAarB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAOrB,CAAC;AAsCH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6CtB,2GAA2G;;;;;;;;;;;;;;;;;;;;;IAY3G,6EAA6E;;IAE7E,oFAAoF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAUpF,oEAAoE;;;;;;;;;;;;;;IAWpE,wFAAwF;;;;;;;;;;;;;;;;;;;;;;;IAIxF,6FAA6F;;IAI7F,8FAA8F;;;;;;;;;;;;;;IAc9F;;;;;;;;;;;;;OAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqCI,CAAC;AAEZ,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AACpD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}