@nok-integration/storefront-react 0.17.1 → 0.18.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.
package/dist/index.d.ts CHANGED
@@ -114,6 +114,33 @@ declare const CartItem: z.ZodObject<{
114
114
  amount: number;
115
115
  currency: string;
116
116
  }>;
117
+ /**
118
+ * The undiscounted per-unit price, from the catalogue. Display only.
119
+ *
120
+ * Drawn as a struck-through figure under what the line costs now, with a `-NN%` badge
121
+ * over the thumbnail — Figma's cart draws every discounted line that way and, until
122
+ * this field existed, a consumer had no way to. The saving was simply invisible in the
123
+ * basket and appeared for the first time at checkout.
124
+ *
125
+ * Absent means the line is at full price, which is the ordinary case. Present only when
126
+ * it is strictly greater than `unit_price`: a compare-at equal to or below the live
127
+ * price is not a sale, and drawing one would be an invented discount.
128
+ *
129
+ * **The catalogue's figure, not an order's.** `OrderItem.compare_at_unit_price` is the
130
+ * one DAZN sent at intake and is frozen there, because a receipt whose struck price
131
+ * moves next week is not a receipt. A cart is live, so this one moves with
132
+ * merchandising — that is correct here and wrong there.
133
+ */
134
+ compare_at_unit_price: z.ZodOptional<z.ZodObject<{
135
+ amount: z.ZodNumber;
136
+ currency: z.ZodString;
137
+ }, "strict", z.ZodTypeAny, {
138
+ amount: number;
139
+ currency: string;
140
+ }, {
141
+ amount: number;
142
+ currency: string;
143
+ }>>;
117
144
  /**
118
145
  * Product title for this line, e.g. "Signature Hoodie".
119
146
  *
@@ -168,6 +195,10 @@ declare const CartItem: z.ZodObject<{
168
195
  amount: number;
169
196
  currency: string;
170
197
  };
198
+ compare_at_unit_price?: {
199
+ amount: number;
200
+ currency: string;
201
+ } | undefined;
171
202
  title?: string | undefined;
172
203
  image?: string | undefined;
173
204
  attributes?: Record<string, string> | undefined;
@@ -183,6 +214,10 @@ declare const CartItem: z.ZodObject<{
183
214
  amount: number;
184
215
  currency: string;
185
216
  };
217
+ compare_at_unit_price?: {
218
+ amount: number;
219
+ currency: string;
220
+ } | undefined;
186
221
  title?: string | undefined;
187
222
  image?: string | undefined;
188
223
  attributes?: Record<string, string> | undefined;
@@ -222,6 +257,10 @@ export declare interface CartLineItemProps {
222
257
  * above, for a host with its own catalogue data.
223
258
  */
224
259
  compareAt?: Money;
260
+ /**
261
+ * Overrides the percentage on the badge. Normally omitted: given a `compareAt`, the
262
+ * badge is derived from it and the two figures cannot then disagree.
263
+ */
225
264
  discountPct?: number;
226
265
  maxQty?: number;
227
266
  onQtyChange: (qty: number) => void;
@@ -297,10 +336,7 @@ export declare interface CartViewProps {
297
336
  * Label for the primary CTA. Default `Proceed to checkout`.
298
337
  *
299
338
  * DAZN's checkout is the next step and DAZN name it; a host whose own wording is
300
- * "Continue" or "Go to checkout" should not have to accept ours. The locked-cart label
301
- * is deliberately NOT configurable — it takes the fan back to a checkout that already
302
- * exists, which is a different action from starting one, and a host renaming it could
303
- * imply a second checkout is being created.
339
+ * "Continue" or "Go to checkout" should not have to accept ours.
304
340
  */
305
341
  checkoutLabel?: string;
306
342
  }
@@ -444,18 +480,48 @@ declare const CategoryPage: z.ZodObject<{
444
480
  }>>;
445
481
  size_guide: z.ZodOptional<z.ZodObject<{
446
482
  title: z.ZodString;
483
+ subtitle: z.ZodOptional<z.ZodString>;
447
484
  columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
448
485
  rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
486
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
487
+ note: z.ZodOptional<z.ZodString>;
488
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
489
+ label: z.ZodString;
490
+ description: z.ZodString;
491
+ }, "strip", z.ZodTypeAny, {
492
+ label: string;
493
+ description: string;
494
+ }, {
495
+ label: string;
496
+ description: string;
497
+ }>, "many">>;
498
+ fabric: z.ZodOptional<z.ZodString>;
449
499
  notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
450
500
  }, "strip", z.ZodTypeAny, {
451
501
  title: string;
502
+ subtitle?: string | undefined;
452
503
  columns?: string[] | undefined;
453
504
  rows?: string[][] | undefined;
505
+ unit?: "cm" | "in" | undefined;
506
+ note?: string | undefined;
507
+ measurements?: {
508
+ label: string;
509
+ description: string;
510
+ }[] | undefined;
511
+ fabric?: string | undefined;
454
512
  notes?: string[] | undefined;
455
513
  }, {
456
514
  title: string;
515
+ subtitle?: string | undefined;
457
516
  columns?: string[] | undefined;
458
517
  rows?: string[][] | undefined;
518
+ unit?: "cm" | "in" | undefined;
519
+ note?: string | undefined;
520
+ measurements?: {
521
+ label: string;
522
+ description: string;
523
+ }[] | undefined;
524
+ fabric?: string | undefined;
459
525
  notes?: string[] | undefined;
460
526
  }>>;
461
527
  }, "strip", z.ZodTypeAny, {
@@ -474,11 +540,11 @@ declare const CategoryPage: z.ZodObject<{
474
540
  image?: string | undefined;
475
541
  available?: number | undefined;
476
542
  }[];
543
+ description?: string | undefined;
477
544
  compare_at?: {
478
545
  amount: number;
479
546
  currency: string;
480
547
  } | undefined;
481
- description?: string | undefined;
482
548
  badges?: string[] | undefined;
483
549
  promo?: {
484
550
  message: string;
@@ -486,8 +552,16 @@ declare const CategoryPage: z.ZodObject<{
486
552
  } | undefined;
487
553
  size_guide?: {
488
554
  title: string;
555
+ subtitle?: string | undefined;
489
556
  columns?: string[] | undefined;
490
557
  rows?: string[][] | undefined;
558
+ unit?: "cm" | "in" | undefined;
559
+ note?: string | undefined;
560
+ measurements?: {
561
+ label: string;
562
+ description: string;
563
+ }[] | undefined;
564
+ fabric?: string | undefined;
491
565
  notes?: string[] | undefined;
492
566
  } | undefined;
493
567
  }, {
@@ -506,11 +580,11 @@ declare const CategoryPage: z.ZodObject<{
506
580
  image?: string | undefined;
507
581
  available?: number | undefined;
508
582
  }[];
583
+ description?: string | undefined;
509
584
  compare_at?: {
510
585
  amount: number;
511
586
  currency: string;
512
587
  } | undefined;
513
- description?: string | undefined;
514
588
  badges?: string[] | undefined;
515
589
  promo?: {
516
590
  message: string;
@@ -518,8 +592,16 @@ declare const CategoryPage: z.ZodObject<{
518
592
  } | undefined;
519
593
  size_guide?: {
520
594
  title: string;
595
+ subtitle?: string | undefined;
521
596
  columns?: string[] | undefined;
522
597
  rows?: string[][] | undefined;
598
+ unit?: "cm" | "in" | undefined;
599
+ note?: string | undefined;
600
+ measurements?: {
601
+ label: string;
602
+ description: string;
603
+ }[] | undefined;
604
+ fabric?: string | undefined;
523
605
  notes?: string[] | undefined;
524
606
  } | undefined;
525
607
  }>, "many">;
@@ -542,11 +624,11 @@ declare const CategoryPage: z.ZodObject<{
542
624
  image?: string | undefined;
543
625
  available?: number | undefined;
544
626
  }[];
627
+ description?: string | undefined;
545
628
  compare_at?: {
546
629
  amount: number;
547
630
  currency: string;
548
631
  } | undefined;
549
- description?: string | undefined;
550
632
  badges?: string[] | undefined;
551
633
  promo?: {
552
634
  message: string;
@@ -554,8 +636,16 @@ declare const CategoryPage: z.ZodObject<{
554
636
  } | undefined;
555
637
  size_guide?: {
556
638
  title: string;
639
+ subtitle?: string | undefined;
557
640
  columns?: string[] | undefined;
558
641
  rows?: string[][] | undefined;
642
+ unit?: "cm" | "in" | undefined;
643
+ note?: string | undefined;
644
+ measurements?: {
645
+ label: string;
646
+ description: string;
647
+ }[] | undefined;
648
+ fabric?: string | undefined;
559
649
  notes?: string[] | undefined;
560
650
  } | undefined;
561
651
  }[];
@@ -578,11 +668,11 @@ declare const CategoryPage: z.ZodObject<{
578
668
  image?: string | undefined;
579
669
  available?: number | undefined;
580
670
  }[];
671
+ description?: string | undefined;
581
672
  compare_at?: {
582
673
  amount: number;
583
674
  currency: string;
584
675
  } | undefined;
585
- description?: string | undefined;
586
676
  badges?: string[] | undefined;
587
677
  promo?: {
588
678
  message: string;
@@ -590,8 +680,16 @@ declare const CategoryPage: z.ZodObject<{
590
680
  } | undefined;
591
681
  size_guide?: {
592
682
  title: string;
683
+ subtitle?: string | undefined;
593
684
  columns?: string[] | undefined;
594
685
  rows?: string[][] | undefined;
686
+ unit?: "cm" | "in" | undefined;
687
+ note?: string | undefined;
688
+ measurements?: {
689
+ label: string;
690
+ description: string;
691
+ }[] | undefined;
692
+ fabric?: string | undefined;
595
693
  notes?: string[] | undefined;
596
694
  } | undefined;
597
695
  }[];
@@ -668,18 +766,48 @@ declare const CategoryPage: z.ZodObject<{
668
766
  }>>;
669
767
  size_guide: z.ZodOptional<z.ZodObject<{
670
768
  title: z.ZodString;
769
+ subtitle: z.ZodOptional<z.ZodString>;
671
770
  columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
672
771
  rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
772
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
773
+ note: z.ZodOptional<z.ZodString>;
774
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
775
+ label: z.ZodString;
776
+ description: z.ZodString;
777
+ }, "strip", z.ZodTypeAny, {
778
+ label: string;
779
+ description: string;
780
+ }, {
781
+ label: string;
782
+ description: string;
783
+ }>, "many">>;
784
+ fabric: z.ZodOptional<z.ZodString>;
673
785
  notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
674
786
  }, "strip", z.ZodTypeAny, {
675
787
  title: string;
788
+ subtitle?: string | undefined;
676
789
  columns?: string[] | undefined;
677
790
  rows?: string[][] | undefined;
791
+ unit?: "cm" | "in" | undefined;
792
+ note?: string | undefined;
793
+ measurements?: {
794
+ label: string;
795
+ description: string;
796
+ }[] | undefined;
797
+ fabric?: string | undefined;
678
798
  notes?: string[] | undefined;
679
799
  }, {
680
800
  title: string;
801
+ subtitle?: string | undefined;
681
802
  columns?: string[] | undefined;
682
803
  rows?: string[][] | undefined;
804
+ unit?: "cm" | "in" | undefined;
805
+ note?: string | undefined;
806
+ measurements?: {
807
+ label: string;
808
+ description: string;
809
+ }[] | undefined;
810
+ fabric?: string | undefined;
683
811
  notes?: string[] | undefined;
684
812
  }>>;
685
813
  }, "strip", z.ZodTypeAny, {
@@ -698,11 +826,11 @@ declare const CategoryPage: z.ZodObject<{
698
826
  image?: string | undefined;
699
827
  available?: number | undefined;
700
828
  }[];
829
+ description?: string | undefined;
701
830
  compare_at?: {
702
831
  amount: number;
703
832
  currency: string;
704
833
  } | undefined;
705
- description?: string | undefined;
706
834
  badges?: string[] | undefined;
707
835
  promo?: {
708
836
  message: string;
@@ -710,8 +838,16 @@ declare const CategoryPage: z.ZodObject<{
710
838
  } | undefined;
711
839
  size_guide?: {
712
840
  title: string;
841
+ subtitle?: string | undefined;
713
842
  columns?: string[] | undefined;
714
843
  rows?: string[][] | undefined;
844
+ unit?: "cm" | "in" | undefined;
845
+ note?: string | undefined;
846
+ measurements?: {
847
+ label: string;
848
+ description: string;
849
+ }[] | undefined;
850
+ fabric?: string | undefined;
715
851
  notes?: string[] | undefined;
716
852
  } | undefined;
717
853
  }, {
@@ -730,11 +866,11 @@ declare const CategoryPage: z.ZodObject<{
730
866
  image?: string | undefined;
731
867
  available?: number | undefined;
732
868
  }[];
869
+ description?: string | undefined;
733
870
  compare_at?: {
734
871
  amount: number;
735
872
  currency: string;
736
873
  } | undefined;
737
- description?: string | undefined;
738
874
  badges?: string[] | undefined;
739
875
  promo?: {
740
876
  message: string;
@@ -742,8 +878,16 @@ declare const CategoryPage: z.ZodObject<{
742
878
  } | undefined;
743
879
  size_guide?: {
744
880
  title: string;
881
+ subtitle?: string | undefined;
745
882
  columns?: string[] | undefined;
746
883
  rows?: string[][] | undefined;
884
+ unit?: "cm" | "in" | undefined;
885
+ note?: string | undefined;
886
+ measurements?: {
887
+ label: string;
888
+ description: string;
889
+ }[] | undefined;
890
+ fabric?: string | undefined;
747
891
  notes?: string[] | undefined;
748
892
  } | undefined;
749
893
  }>;
@@ -765,11 +909,11 @@ declare const CategoryPage: z.ZodObject<{
765
909
  image?: string | undefined;
766
910
  available?: number | undefined;
767
911
  }[];
912
+ description?: string | undefined;
768
913
  compare_at?: {
769
914
  amount: number;
770
915
  currency: string;
771
916
  } | undefined;
772
- description?: string | undefined;
773
917
  badges?: string[] | undefined;
774
918
  promo?: {
775
919
  message: string;
@@ -777,8 +921,16 @@ declare const CategoryPage: z.ZodObject<{
777
921
  } | undefined;
778
922
  size_guide?: {
779
923
  title: string;
924
+ subtitle?: string | undefined;
780
925
  columns?: string[] | undefined;
781
926
  rows?: string[][] | undefined;
927
+ unit?: "cm" | "in" | undefined;
928
+ note?: string | undefined;
929
+ measurements?: {
930
+ label: string;
931
+ description: string;
932
+ }[] | undefined;
933
+ fabric?: string | undefined;
782
934
  notes?: string[] | undefined;
783
935
  } | undefined;
784
936
  };
@@ -801,11 +953,11 @@ declare const CategoryPage: z.ZodObject<{
801
953
  image?: string | undefined;
802
954
  available?: number | undefined;
803
955
  }[];
956
+ description?: string | undefined;
804
957
  compare_at?: {
805
958
  amount: number;
806
959
  currency: string;
807
960
  } | undefined;
808
- description?: string | undefined;
809
961
  badges?: string[] | undefined;
810
962
  promo?: {
811
963
  message: string;
@@ -813,25 +965,24 @@ declare const CategoryPage: z.ZodObject<{
813
965
  } | undefined;
814
966
  size_guide?: {
815
967
  title: string;
968
+ subtitle?: string | undefined;
816
969
  columns?: string[] | undefined;
817
970
  rows?: string[][] | undefined;
971
+ unit?: "cm" | "in" | undefined;
972
+ note?: string | undefined;
973
+ measurements?: {
974
+ label: string;
975
+ description: string;
976
+ }[] | undefined;
977
+ fabric?: string | undefined;
818
978
  notes?: string[] | undefined;
819
979
  } | undefined;
820
980
  };
821
981
  title?: string | undefined;
822
982
  }>, z.ZodObject<{
823
- kind: z.ZodLiteral<"lifestyle_image">;
824
- images: z.ZodArray<z.ZodString, "many">;
825
- }, "strip", z.ZodTypeAny, {
826
- kind: "lifestyle_image";
827
- images: string[];
828
- }, {
829
- kind: "lifestyle_image";
830
- images: string[];
831
- }>, z.ZodObject<{
832
- kind: z.ZodLiteral<"grid">;
983
+ kind: z.ZodLiteral<"product_gallery">;
833
984
  title: z.ZodString;
834
- products: z.ZodArray<z.ZodObject<{
985
+ product: z.ZodObject<{
835
986
  sku: z.ZodString;
836
987
  title: z.ZodString;
837
988
  category: z.ZodString;
@@ -889,18 +1040,48 @@ declare const CategoryPage: z.ZodObject<{
889
1040
  }>>;
890
1041
  size_guide: z.ZodOptional<z.ZodObject<{
891
1042
  title: z.ZodString;
1043
+ subtitle: z.ZodOptional<z.ZodString>;
892
1044
  columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
893
1045
  rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
1046
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
1047
+ note: z.ZodOptional<z.ZodString>;
1048
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
1049
+ label: z.ZodString;
1050
+ description: z.ZodString;
1051
+ }, "strip", z.ZodTypeAny, {
1052
+ label: string;
1053
+ description: string;
1054
+ }, {
1055
+ label: string;
1056
+ description: string;
1057
+ }>, "many">>;
1058
+ fabric: z.ZodOptional<z.ZodString>;
894
1059
  notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
895
1060
  }, "strip", z.ZodTypeAny, {
896
1061
  title: string;
1062
+ subtitle?: string | undefined;
897
1063
  columns?: string[] | undefined;
898
1064
  rows?: string[][] | undefined;
1065
+ unit?: "cm" | "in" | undefined;
1066
+ note?: string | undefined;
1067
+ measurements?: {
1068
+ label: string;
1069
+ description: string;
1070
+ }[] | undefined;
1071
+ fabric?: string | undefined;
899
1072
  notes?: string[] | undefined;
900
1073
  }, {
901
1074
  title: string;
1075
+ subtitle?: string | undefined;
902
1076
  columns?: string[] | undefined;
903
1077
  rows?: string[][] | undefined;
1078
+ unit?: "cm" | "in" | undefined;
1079
+ note?: string | undefined;
1080
+ measurements?: {
1081
+ label: string;
1082
+ description: string;
1083
+ }[] | undefined;
1084
+ fabric?: string | undefined;
904
1085
  notes?: string[] | undefined;
905
1086
  }>>;
906
1087
  }, "strip", z.ZodTypeAny, {
@@ -919,11 +1100,11 @@ declare const CategoryPage: z.ZodObject<{
919
1100
  image?: string | undefined;
920
1101
  available?: number | undefined;
921
1102
  }[];
1103
+ description?: string | undefined;
922
1104
  compare_at?: {
923
1105
  amount: number;
924
1106
  currency: string;
925
1107
  } | undefined;
926
- description?: string | undefined;
927
1108
  badges?: string[] | undefined;
928
1109
  promo?: {
929
1110
  message: string;
@@ -931,8 +1112,16 @@ declare const CategoryPage: z.ZodObject<{
931
1112
  } | undefined;
932
1113
  size_guide?: {
933
1114
  title: string;
1115
+ subtitle?: string | undefined;
934
1116
  columns?: string[] | undefined;
935
1117
  rows?: string[][] | undefined;
1118
+ unit?: "cm" | "in" | undefined;
1119
+ note?: string | undefined;
1120
+ measurements?: {
1121
+ label: string;
1122
+ description: string;
1123
+ }[] | undefined;
1124
+ fabric?: string | undefined;
936
1125
  notes?: string[] | undefined;
937
1126
  } | undefined;
938
1127
  }, {
@@ -951,11 +1140,11 @@ declare const CategoryPage: z.ZodObject<{
951
1140
  image?: string | undefined;
952
1141
  available?: number | undefined;
953
1142
  }[];
1143
+ description?: string | undefined;
954
1144
  compare_at?: {
955
1145
  amount: number;
956
1146
  currency: string;
957
1147
  } | undefined;
958
- description?: string | undefined;
959
1148
  badges?: string[] | undefined;
960
1149
  promo?: {
961
1150
  message: string;
@@ -963,15 +1152,23 @@ declare const CategoryPage: z.ZodObject<{
963
1152
  } | undefined;
964
1153
  size_guide?: {
965
1154
  title: string;
1155
+ subtitle?: string | undefined;
966
1156
  columns?: string[] | undefined;
967
1157
  rows?: string[][] | undefined;
1158
+ unit?: "cm" | "in" | undefined;
1159
+ note?: string | undefined;
1160
+ measurements?: {
1161
+ label: string;
1162
+ description: string;
1163
+ }[] | undefined;
1164
+ fabric?: string | undefined;
968
1165
  notes?: string[] | undefined;
969
1166
  } | undefined;
970
- }>, "many">;
1167
+ }>;
971
1168
  }, "strip", z.ZodTypeAny, {
972
1169
  title: string;
973
- kind: "grid";
974
- products: {
1170
+ kind: "product_gallery";
1171
+ product: {
975
1172
  sku: string;
976
1173
  title: string;
977
1174
  price: {
@@ -987,11 +1184,11 @@ declare const CategoryPage: z.ZodObject<{
987
1184
  image?: string | undefined;
988
1185
  available?: number | undefined;
989
1186
  }[];
1187
+ description?: string | undefined;
990
1188
  compare_at?: {
991
1189
  amount: number;
992
1190
  currency: string;
993
1191
  } | undefined;
994
- description?: string | undefined;
995
1192
  badges?: string[] | undefined;
996
1193
  promo?: {
997
1194
  message: string;
@@ -999,15 +1196,23 @@ declare const CategoryPage: z.ZodObject<{
999
1196
  } | undefined;
1000
1197
  size_guide?: {
1001
1198
  title: string;
1199
+ subtitle?: string | undefined;
1002
1200
  columns?: string[] | undefined;
1003
1201
  rows?: string[][] | undefined;
1202
+ unit?: "cm" | "in" | undefined;
1203
+ note?: string | undefined;
1204
+ measurements?: {
1205
+ label: string;
1206
+ description: string;
1207
+ }[] | undefined;
1208
+ fabric?: string | undefined;
1004
1209
  notes?: string[] | undefined;
1005
1210
  } | undefined;
1006
- }[];
1211
+ };
1007
1212
  }, {
1008
1213
  title: string;
1009
- kind: "grid";
1010
- products: {
1214
+ kind: "product_gallery";
1215
+ product: {
1011
1216
  sku: string;
1012
1217
  title: string;
1013
1218
  price: {
@@ -1023,11 +1228,11 @@ declare const CategoryPage: z.ZodObject<{
1023
1228
  image?: string | undefined;
1024
1229
  available?: number | undefined;
1025
1230
  }[];
1231
+ description?: string | undefined;
1026
1232
  compare_at?: {
1027
1233
  amount: number;
1028
1234
  currency: string;
1029
1235
  } | undefined;
1030
- description?: string | undefined;
1031
1236
  badges?: string[] | undefined;
1032
1237
  promo?: {
1033
1238
  message: string;
@@ -1035,135 +1240,434 @@ declare const CategoryPage: z.ZodObject<{
1035
1240
  } | undefined;
1036
1241
  size_guide?: {
1037
1242
  title: string;
1243
+ subtitle?: string | undefined;
1038
1244
  columns?: string[] | undefined;
1039
1245
  rows?: string[][] | undefined;
1246
+ unit?: "cm" | "in" | undefined;
1247
+ note?: string | undefined;
1248
+ measurements?: {
1249
+ label: string;
1250
+ description: string;
1251
+ }[] | undefined;
1252
+ fabric?: string | undefined;
1040
1253
  notes?: string[] | undefined;
1041
1254
  } | undefined;
1042
- }[];
1255
+ };
1043
1256
  }>, z.ZodObject<{
1044
- kind: z.ZodLiteral<"review">;
1045
- quotes: z.ZodArray<z.ZodObject<{
1046
- quote: z.ZodString;
1047
- author: z.ZodString;
1048
- }, "strip", z.ZodTypeAny, {
1049
- quote: string;
1050
- author: string;
1051
- }, {
1052
- quote: string;
1053
- author: string;
1054
- }>, "many">;
1055
- disclaimer: z.ZodOptional<z.ZodString>;
1257
+ kind: z.ZodLiteral<"lifestyle_image">;
1258
+ images: z.ZodArray<z.ZodString, "many">;
1056
1259
  }, "strip", z.ZodTypeAny, {
1057
- kind: "review";
1058
- quotes: {
1059
- quote: string;
1060
- author: string;
1061
- }[];
1062
- disclaimer?: string | undefined;
1260
+ kind: "lifestyle_image";
1261
+ images: string[];
1063
1262
  }, {
1064
- kind: "review";
1065
- quotes: {
1066
- quote: string;
1067
- author: string;
1068
- }[];
1069
- disclaimer?: string | undefined;
1263
+ kind: "lifestyle_image";
1264
+ images: string[];
1070
1265
  }>, z.ZodObject<{
1071
- kind: z.ZodLiteral<"why_us">;
1072
- items: z.ZodArray<z.ZodObject<{
1073
- icon: z.ZodOptional<z.ZodEnum<["payment", "delivery", "returns"]>>;
1266
+ kind: z.ZodLiteral<"grid">;
1267
+ title: z.ZodOptional<z.ZodString>;
1268
+ products: z.ZodArray<z.ZodObject<{
1269
+ sku: z.ZodString;
1074
1270
  title: z.ZodString;
1075
- body: z.ZodString;
1076
- }, "strip", z.ZodTypeAny, {
1077
- title: string;
1078
- body: string;
1079
- icon?: "payment" | "delivery" | "returns" | undefined;
1080
- }, {
1081
- title: string;
1082
- body: string;
1083
- icon?: "payment" | "delivery" | "returns" | undefined;
1084
- }>, "many">;
1085
- }, "strip", z.ZodTypeAny, {
1086
- items: {
1087
- title: string;
1088
- body: string;
1089
- icon?: "payment" | "delivery" | "returns" | undefined;
1090
- }[];
1091
- kind: "why_us";
1092
- }, {
1093
- items: {
1094
- title: string;
1095
- body: string;
1096
- icon?: "payment" | "delivery" | "returns" | undefined;
1097
- }[];
1098
- kind: "why_us";
1099
- }>, z.ZodObject<{
1100
- kind: z.ZodLiteral<"explore">;
1101
- title: z.ZodString;
1102
- links: z.ZodArray<z.ZodObject<{
1103
- label: z.ZodString;
1104
- code: z.ZodString;
1105
- }, "strip", z.ZodTypeAny, {
1106
- code: string;
1107
- label: string;
1108
- }, {
1109
- code: string;
1110
- label: string;
1111
- }>, "many">;
1112
- }, "strip", z.ZodTypeAny, {
1113
- title: string;
1114
- kind: "explore";
1115
- links: {
1116
- code: string;
1117
- label: string;
1118
- }[];
1119
- }, {
1120
- title: string;
1121
- kind: "explore";
1122
- links: {
1123
- code: string;
1124
- label: string;
1125
- }[];
1126
- }>]>, "many">;
1127
- }, "strip", z.ZodTypeAny, {
1128
- code: string;
1129
- hero: {
1130
- title: string;
1131
- image?: string | undefined;
1132
- subtitle?: string | undefined;
1133
- };
1134
- blocks: ({
1135
- title: string;
1136
- kind: "rail";
1137
- products: {
1138
- sku: string;
1139
- title: string;
1140
- price: {
1271
+ category: z.ZodString;
1272
+ price: z.ZodObject<{
1273
+ amount: z.ZodNumber;
1274
+ currency: z.ZodString;
1275
+ }, "strict", z.ZodTypeAny, {
1141
1276
  amount: number;
1142
1277
  currency: string;
1143
- };
1144
- category: string;
1145
- media: string[];
1146
- variants: {
1278
+ }, {
1279
+ amount: number;
1280
+ currency: string;
1281
+ }>;
1282
+ compare_at: z.ZodOptional<z.ZodObject<{
1283
+ amount: z.ZodNumber;
1284
+ currency: z.ZodString;
1285
+ }, "strict", z.ZodTypeAny, {
1286
+ amount: number;
1287
+ currency: string;
1288
+ }, {
1289
+ amount: number;
1290
+ currency: string;
1291
+ }>>;
1292
+ media: z.ZodArray<z.ZodString, "many">;
1293
+ variants: z.ZodArray<z.ZodObject<{
1294
+ sku: z.ZodString;
1295
+ attributes: z.ZodRecord<z.ZodString, z.ZodString>;
1296
+ in_stock: z.ZodBoolean;
1297
+ image: z.ZodOptional<z.ZodString>;
1298
+ available: z.ZodOptional<z.ZodNumber>;
1299
+ }, "strip", z.ZodTypeAny, {
1147
1300
  sku: string;
1148
1301
  attributes: Record<string, string>;
1149
1302
  in_stock: boolean;
1150
1303
  image?: string | undefined;
1151
1304
  available?: number | undefined;
1152
- }[];
1153
- compare_at?: {
1154
- amount: number;
1155
- currency: string;
1156
- } | undefined;
1157
- description?: string | undefined;
1158
- badges?: string[] | undefined;
1159
- promo?: {
1160
- message: string;
1161
- ends_at?: string | undefined;
1305
+ }, {
1306
+ sku: string;
1307
+ attributes: Record<string, string>;
1308
+ in_stock: boolean;
1309
+ image?: string | undefined;
1310
+ available?: number | undefined;
1311
+ }>, "many">;
1312
+ description: z.ZodOptional<z.ZodString>;
1313
+ badges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1314
+ promo: z.ZodOptional<z.ZodObject<{
1315
+ message: z.ZodString;
1316
+ ends_at: z.ZodOptional<z.ZodString>;
1317
+ }, "strip", z.ZodTypeAny, {
1318
+ message: string;
1319
+ ends_at?: string | undefined;
1320
+ }, {
1321
+ message: string;
1322
+ ends_at?: string | undefined;
1323
+ }>>;
1324
+ size_guide: z.ZodOptional<z.ZodObject<{
1325
+ title: z.ZodString;
1326
+ subtitle: z.ZodOptional<z.ZodString>;
1327
+ columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1328
+ rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
1329
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
1330
+ note: z.ZodOptional<z.ZodString>;
1331
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
1332
+ label: z.ZodString;
1333
+ description: z.ZodString;
1334
+ }, "strip", z.ZodTypeAny, {
1335
+ label: string;
1336
+ description: string;
1337
+ }, {
1338
+ label: string;
1339
+ description: string;
1340
+ }>, "many">>;
1341
+ fabric: z.ZodOptional<z.ZodString>;
1342
+ notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1343
+ }, "strip", z.ZodTypeAny, {
1344
+ title: string;
1345
+ subtitle?: string | undefined;
1346
+ columns?: string[] | undefined;
1347
+ rows?: string[][] | undefined;
1348
+ unit?: "cm" | "in" | undefined;
1349
+ note?: string | undefined;
1350
+ measurements?: {
1351
+ label: string;
1352
+ description: string;
1353
+ }[] | undefined;
1354
+ fabric?: string | undefined;
1355
+ notes?: string[] | undefined;
1356
+ }, {
1357
+ title: string;
1358
+ subtitle?: string | undefined;
1359
+ columns?: string[] | undefined;
1360
+ rows?: string[][] | undefined;
1361
+ unit?: "cm" | "in" | undefined;
1362
+ note?: string | undefined;
1363
+ measurements?: {
1364
+ label: string;
1365
+ description: string;
1366
+ }[] | undefined;
1367
+ fabric?: string | undefined;
1368
+ notes?: string[] | undefined;
1369
+ }>>;
1370
+ }, "strip", z.ZodTypeAny, {
1371
+ sku: string;
1372
+ title: string;
1373
+ price: {
1374
+ amount: number;
1375
+ currency: string;
1376
+ };
1377
+ category: string;
1378
+ media: string[];
1379
+ variants: {
1380
+ sku: string;
1381
+ attributes: Record<string, string>;
1382
+ in_stock: boolean;
1383
+ image?: string | undefined;
1384
+ available?: number | undefined;
1385
+ }[];
1386
+ description?: string | undefined;
1387
+ compare_at?: {
1388
+ amount: number;
1389
+ currency: string;
1390
+ } | undefined;
1391
+ badges?: string[] | undefined;
1392
+ promo?: {
1393
+ message: string;
1394
+ ends_at?: string | undefined;
1162
1395
  } | undefined;
1163
1396
  size_guide?: {
1164
1397
  title: string;
1398
+ subtitle?: string | undefined;
1165
1399
  columns?: string[] | undefined;
1166
1400
  rows?: string[][] | undefined;
1401
+ unit?: "cm" | "in" | undefined;
1402
+ note?: string | undefined;
1403
+ measurements?: {
1404
+ label: string;
1405
+ description: string;
1406
+ }[] | undefined;
1407
+ fabric?: string | undefined;
1408
+ notes?: string[] | undefined;
1409
+ } | undefined;
1410
+ }, {
1411
+ sku: string;
1412
+ title: string;
1413
+ price: {
1414
+ amount: number;
1415
+ currency: string;
1416
+ };
1417
+ category: string;
1418
+ media: string[];
1419
+ variants: {
1420
+ sku: string;
1421
+ attributes: Record<string, string>;
1422
+ in_stock: boolean;
1423
+ image?: string | undefined;
1424
+ available?: number | undefined;
1425
+ }[];
1426
+ description?: string | undefined;
1427
+ compare_at?: {
1428
+ amount: number;
1429
+ currency: string;
1430
+ } | undefined;
1431
+ badges?: string[] | undefined;
1432
+ promo?: {
1433
+ message: string;
1434
+ ends_at?: string | undefined;
1435
+ } | undefined;
1436
+ size_guide?: {
1437
+ title: string;
1438
+ subtitle?: string | undefined;
1439
+ columns?: string[] | undefined;
1440
+ rows?: string[][] | undefined;
1441
+ unit?: "cm" | "in" | undefined;
1442
+ note?: string | undefined;
1443
+ measurements?: {
1444
+ label: string;
1445
+ description: string;
1446
+ }[] | undefined;
1447
+ fabric?: string | undefined;
1448
+ notes?: string[] | undefined;
1449
+ } | undefined;
1450
+ }>, "many">;
1451
+ }, "strip", z.ZodTypeAny, {
1452
+ kind: "grid";
1453
+ products: {
1454
+ sku: string;
1455
+ title: string;
1456
+ price: {
1457
+ amount: number;
1458
+ currency: string;
1459
+ };
1460
+ category: string;
1461
+ media: string[];
1462
+ variants: {
1463
+ sku: string;
1464
+ attributes: Record<string, string>;
1465
+ in_stock: boolean;
1466
+ image?: string | undefined;
1467
+ available?: number | undefined;
1468
+ }[];
1469
+ description?: string | undefined;
1470
+ compare_at?: {
1471
+ amount: number;
1472
+ currency: string;
1473
+ } | undefined;
1474
+ badges?: string[] | undefined;
1475
+ promo?: {
1476
+ message: string;
1477
+ ends_at?: string | undefined;
1478
+ } | undefined;
1479
+ size_guide?: {
1480
+ title: string;
1481
+ subtitle?: string | undefined;
1482
+ columns?: string[] | undefined;
1483
+ rows?: string[][] | undefined;
1484
+ unit?: "cm" | "in" | undefined;
1485
+ note?: string | undefined;
1486
+ measurements?: {
1487
+ label: string;
1488
+ description: string;
1489
+ }[] | undefined;
1490
+ fabric?: string | undefined;
1491
+ notes?: string[] | undefined;
1492
+ } | undefined;
1493
+ }[];
1494
+ title?: string | undefined;
1495
+ }, {
1496
+ kind: "grid";
1497
+ products: {
1498
+ sku: string;
1499
+ title: string;
1500
+ price: {
1501
+ amount: number;
1502
+ currency: string;
1503
+ };
1504
+ category: string;
1505
+ media: string[];
1506
+ variants: {
1507
+ sku: string;
1508
+ attributes: Record<string, string>;
1509
+ in_stock: boolean;
1510
+ image?: string | undefined;
1511
+ available?: number | undefined;
1512
+ }[];
1513
+ description?: string | undefined;
1514
+ compare_at?: {
1515
+ amount: number;
1516
+ currency: string;
1517
+ } | undefined;
1518
+ badges?: string[] | undefined;
1519
+ promo?: {
1520
+ message: string;
1521
+ ends_at?: string | undefined;
1522
+ } | undefined;
1523
+ size_guide?: {
1524
+ title: string;
1525
+ subtitle?: string | undefined;
1526
+ columns?: string[] | undefined;
1527
+ rows?: string[][] | undefined;
1528
+ unit?: "cm" | "in" | undefined;
1529
+ note?: string | undefined;
1530
+ measurements?: {
1531
+ label: string;
1532
+ description: string;
1533
+ }[] | undefined;
1534
+ fabric?: string | undefined;
1535
+ notes?: string[] | undefined;
1536
+ } | undefined;
1537
+ }[];
1538
+ title?: string | undefined;
1539
+ }>, z.ZodObject<{
1540
+ kind: z.ZodLiteral<"review">;
1541
+ quotes: z.ZodArray<z.ZodObject<{
1542
+ quote: z.ZodString;
1543
+ author: z.ZodString;
1544
+ }, "strip", z.ZodTypeAny, {
1545
+ quote: string;
1546
+ author: string;
1547
+ }, {
1548
+ quote: string;
1549
+ author: string;
1550
+ }>, "many">;
1551
+ disclaimer: z.ZodOptional<z.ZodString>;
1552
+ }, "strip", z.ZodTypeAny, {
1553
+ kind: "review";
1554
+ quotes: {
1555
+ quote: string;
1556
+ author: string;
1557
+ }[];
1558
+ disclaimer?: string | undefined;
1559
+ }, {
1560
+ kind: "review";
1561
+ quotes: {
1562
+ quote: string;
1563
+ author: string;
1564
+ }[];
1565
+ disclaimer?: string | undefined;
1566
+ }>, z.ZodObject<{
1567
+ kind: z.ZodLiteral<"why_us">;
1568
+ items: z.ZodArray<z.ZodObject<{
1569
+ icon: z.ZodOptional<z.ZodEnum<["payment", "delivery", "returns"]>>;
1570
+ title: z.ZodString;
1571
+ body: z.ZodString;
1572
+ }, "strip", z.ZodTypeAny, {
1573
+ title: string;
1574
+ body: string;
1575
+ icon?: "payment" | "delivery" | "returns" | undefined;
1576
+ }, {
1577
+ title: string;
1578
+ body: string;
1579
+ icon?: "payment" | "delivery" | "returns" | undefined;
1580
+ }>, "many">;
1581
+ }, "strip", z.ZodTypeAny, {
1582
+ items: {
1583
+ title: string;
1584
+ body: string;
1585
+ icon?: "payment" | "delivery" | "returns" | undefined;
1586
+ }[];
1587
+ kind: "why_us";
1588
+ }, {
1589
+ items: {
1590
+ title: string;
1591
+ body: string;
1592
+ icon?: "payment" | "delivery" | "returns" | undefined;
1593
+ }[];
1594
+ kind: "why_us";
1595
+ }>, z.ZodObject<{
1596
+ kind: z.ZodLiteral<"explore">;
1597
+ title: z.ZodString;
1598
+ links: z.ZodArray<z.ZodObject<{
1599
+ label: z.ZodString;
1600
+ code: z.ZodString;
1601
+ }, "strip", z.ZodTypeAny, {
1602
+ code: string;
1603
+ label: string;
1604
+ }, {
1605
+ code: string;
1606
+ label: string;
1607
+ }>, "many">;
1608
+ }, "strip", z.ZodTypeAny, {
1609
+ title: string;
1610
+ kind: "explore";
1611
+ links: {
1612
+ code: string;
1613
+ label: string;
1614
+ }[];
1615
+ }, {
1616
+ title: string;
1617
+ kind: "explore";
1618
+ links: {
1619
+ code: string;
1620
+ label: string;
1621
+ }[];
1622
+ }>]>, "many">;
1623
+ }, "strip", z.ZodTypeAny, {
1624
+ code: string;
1625
+ hero: {
1626
+ title: string;
1627
+ image?: string | undefined;
1628
+ subtitle?: string | undefined;
1629
+ };
1630
+ blocks: ({
1631
+ title: string;
1632
+ kind: "rail";
1633
+ products: {
1634
+ sku: string;
1635
+ title: string;
1636
+ price: {
1637
+ amount: number;
1638
+ currency: string;
1639
+ };
1640
+ category: string;
1641
+ media: string[];
1642
+ variants: {
1643
+ sku: string;
1644
+ attributes: Record<string, string>;
1645
+ in_stock: boolean;
1646
+ image?: string | undefined;
1647
+ available?: number | undefined;
1648
+ }[];
1649
+ description?: string | undefined;
1650
+ compare_at?: {
1651
+ amount: number;
1652
+ currency: string;
1653
+ } | undefined;
1654
+ badges?: string[] | undefined;
1655
+ promo?: {
1656
+ message: string;
1657
+ ends_at?: string | undefined;
1658
+ } | undefined;
1659
+ size_guide?: {
1660
+ title: string;
1661
+ subtitle?: string | undefined;
1662
+ columns?: string[] | undefined;
1663
+ rows?: string[][] | undefined;
1664
+ unit?: "cm" | "in" | undefined;
1665
+ note?: string | undefined;
1666
+ measurements?: {
1667
+ label: string;
1668
+ description: string;
1669
+ }[] | undefined;
1670
+ fabric?: string | undefined;
1167
1671
  notes?: string[] | undefined;
1168
1672
  } | undefined;
1169
1673
  }[];
@@ -1189,11 +1693,11 @@ declare const CategoryPage: z.ZodObject<{
1189
1693
  image?: string | undefined;
1190
1694
  available?: number | undefined;
1191
1695
  }[];
1696
+ description?: string | undefined;
1192
1697
  compare_at?: {
1193
1698
  amount: number;
1194
1699
  currency: string;
1195
1700
  } | undefined;
1196
- description?: string | undefined;
1197
1701
  badges?: string[] | undefined;
1198
1702
  promo?: {
1199
1703
  message: string;
@@ -1201,8 +1705,16 @@ declare const CategoryPage: z.ZodObject<{
1201
1705
  } | undefined;
1202
1706
  size_guide?: {
1203
1707
  title: string;
1708
+ subtitle?: string | undefined;
1204
1709
  columns?: string[] | undefined;
1205
1710
  rows?: string[][] | undefined;
1711
+ unit?: "cm" | "in" | undefined;
1712
+ note?: string | undefined;
1713
+ measurements?: {
1714
+ label: string;
1715
+ description: string;
1716
+ }[] | undefined;
1717
+ fabric?: string | undefined;
1206
1718
  notes?: string[] | undefined;
1207
1719
  } | undefined;
1208
1720
  };
@@ -1211,7 +1723,6 @@ declare const CategoryPage: z.ZodObject<{
1211
1723
  kind: "lifestyle_image";
1212
1724
  images: string[];
1213
1725
  } | {
1214
- title: string;
1215
1726
  kind: "grid";
1216
1727
  products: {
1217
1728
  sku: string;
@@ -1229,11 +1740,11 @@ declare const CategoryPage: z.ZodObject<{
1229
1740
  image?: string | undefined;
1230
1741
  available?: number | undefined;
1231
1742
  }[];
1743
+ description?: string | undefined;
1232
1744
  compare_at?: {
1233
1745
  amount: number;
1234
1746
  currency: string;
1235
1747
  } | undefined;
1236
- description?: string | undefined;
1237
1748
  badges?: string[] | undefined;
1238
1749
  promo?: {
1239
1750
  message: string;
@@ -1241,11 +1752,20 @@ declare const CategoryPage: z.ZodObject<{
1241
1752
  } | undefined;
1242
1753
  size_guide?: {
1243
1754
  title: string;
1755
+ subtitle?: string | undefined;
1244
1756
  columns?: string[] | undefined;
1245
1757
  rows?: string[][] | undefined;
1758
+ unit?: "cm" | "in" | undefined;
1759
+ note?: string | undefined;
1760
+ measurements?: {
1761
+ label: string;
1762
+ description: string;
1763
+ }[] | undefined;
1764
+ fabric?: string | undefined;
1246
1765
  notes?: string[] | undefined;
1247
1766
  } | undefined;
1248
1767
  }[];
1768
+ title?: string | undefined;
1249
1769
  } | {
1250
1770
  kind: "review";
1251
1771
  quotes: {
@@ -1267,6 +1787,50 @@ declare const CategoryPage: z.ZodObject<{
1267
1787
  code: string;
1268
1788
  label: string;
1269
1789
  }[];
1790
+ } | {
1791
+ title: string;
1792
+ kind: "product_gallery";
1793
+ product: {
1794
+ sku: string;
1795
+ title: string;
1796
+ price: {
1797
+ amount: number;
1798
+ currency: string;
1799
+ };
1800
+ category: string;
1801
+ media: string[];
1802
+ variants: {
1803
+ sku: string;
1804
+ attributes: Record<string, string>;
1805
+ in_stock: boolean;
1806
+ image?: string | undefined;
1807
+ available?: number | undefined;
1808
+ }[];
1809
+ description?: string | undefined;
1810
+ compare_at?: {
1811
+ amount: number;
1812
+ currency: string;
1813
+ } | undefined;
1814
+ badges?: string[] | undefined;
1815
+ promo?: {
1816
+ message: string;
1817
+ ends_at?: string | undefined;
1818
+ } | undefined;
1819
+ size_guide?: {
1820
+ title: string;
1821
+ subtitle?: string | undefined;
1822
+ columns?: string[] | undefined;
1823
+ rows?: string[][] | undefined;
1824
+ unit?: "cm" | "in" | undefined;
1825
+ note?: string | undefined;
1826
+ measurements?: {
1827
+ label: string;
1828
+ description: string;
1829
+ }[] | undefined;
1830
+ fabric?: string | undefined;
1831
+ notes?: string[] | undefined;
1832
+ } | undefined;
1833
+ };
1270
1834
  })[];
1271
1835
  }, {
1272
1836
  code: string;
@@ -1294,11 +1858,11 @@ declare const CategoryPage: z.ZodObject<{
1294
1858
  image?: string | undefined;
1295
1859
  available?: number | undefined;
1296
1860
  }[];
1861
+ description?: string | undefined;
1297
1862
  compare_at?: {
1298
1863
  amount: number;
1299
1864
  currency: string;
1300
1865
  } | undefined;
1301
- description?: string | undefined;
1302
1866
  badges?: string[] | undefined;
1303
1867
  promo?: {
1304
1868
  message: string;
@@ -1306,8 +1870,16 @@ declare const CategoryPage: z.ZodObject<{
1306
1870
  } | undefined;
1307
1871
  size_guide?: {
1308
1872
  title: string;
1873
+ subtitle?: string | undefined;
1309
1874
  columns?: string[] | undefined;
1310
1875
  rows?: string[][] | undefined;
1876
+ unit?: "cm" | "in" | undefined;
1877
+ note?: string | undefined;
1878
+ measurements?: {
1879
+ label: string;
1880
+ description: string;
1881
+ }[] | undefined;
1882
+ fabric?: string | undefined;
1311
1883
  notes?: string[] | undefined;
1312
1884
  } | undefined;
1313
1885
  }[];
@@ -1333,11 +1905,11 @@ declare const CategoryPage: z.ZodObject<{
1333
1905
  image?: string | undefined;
1334
1906
  available?: number | undefined;
1335
1907
  }[];
1908
+ description?: string | undefined;
1336
1909
  compare_at?: {
1337
1910
  amount: number;
1338
1911
  currency: string;
1339
1912
  } | undefined;
1340
- description?: string | undefined;
1341
1913
  badges?: string[] | undefined;
1342
1914
  promo?: {
1343
1915
  message: string;
@@ -1345,8 +1917,16 @@ declare const CategoryPage: z.ZodObject<{
1345
1917
  } | undefined;
1346
1918
  size_guide?: {
1347
1919
  title: string;
1920
+ subtitle?: string | undefined;
1348
1921
  columns?: string[] | undefined;
1349
1922
  rows?: string[][] | undefined;
1923
+ unit?: "cm" | "in" | undefined;
1924
+ note?: string | undefined;
1925
+ measurements?: {
1926
+ label: string;
1927
+ description: string;
1928
+ }[] | undefined;
1929
+ fabric?: string | undefined;
1350
1930
  notes?: string[] | undefined;
1351
1931
  } | undefined;
1352
1932
  };
@@ -1355,7 +1935,6 @@ declare const CategoryPage: z.ZodObject<{
1355
1935
  kind: "lifestyle_image";
1356
1936
  images: string[];
1357
1937
  } | {
1358
- title: string;
1359
1938
  kind: "grid";
1360
1939
  products: {
1361
1940
  sku: string;
@@ -1373,11 +1952,11 @@ declare const CategoryPage: z.ZodObject<{
1373
1952
  image?: string | undefined;
1374
1953
  available?: number | undefined;
1375
1954
  }[];
1955
+ description?: string | undefined;
1376
1956
  compare_at?: {
1377
1957
  amount: number;
1378
1958
  currency: string;
1379
1959
  } | undefined;
1380
- description?: string | undefined;
1381
1960
  badges?: string[] | undefined;
1382
1961
  promo?: {
1383
1962
  message: string;
@@ -1385,11 +1964,20 @@ declare const CategoryPage: z.ZodObject<{
1385
1964
  } | undefined;
1386
1965
  size_guide?: {
1387
1966
  title: string;
1967
+ subtitle?: string | undefined;
1388
1968
  columns?: string[] | undefined;
1389
1969
  rows?: string[][] | undefined;
1970
+ unit?: "cm" | "in" | undefined;
1971
+ note?: string | undefined;
1972
+ measurements?: {
1973
+ label: string;
1974
+ description: string;
1975
+ }[] | undefined;
1976
+ fabric?: string | undefined;
1390
1977
  notes?: string[] | undefined;
1391
1978
  } | undefined;
1392
1979
  }[];
1980
+ title?: string | undefined;
1393
1981
  } | {
1394
1982
  kind: "review";
1395
1983
  quotes: {
@@ -1411,6 +1999,50 @@ declare const CategoryPage: z.ZodObject<{
1411
1999
  code: string;
1412
2000
  label: string;
1413
2001
  }[];
2002
+ } | {
2003
+ title: string;
2004
+ kind: "product_gallery";
2005
+ product: {
2006
+ sku: string;
2007
+ title: string;
2008
+ price: {
2009
+ amount: number;
2010
+ currency: string;
2011
+ };
2012
+ category: string;
2013
+ media: string[];
2014
+ variants: {
2015
+ sku: string;
2016
+ attributes: Record<string, string>;
2017
+ in_stock: boolean;
2018
+ image?: string | undefined;
2019
+ available?: number | undefined;
2020
+ }[];
2021
+ description?: string | undefined;
2022
+ compare_at?: {
2023
+ amount: number;
2024
+ currency: string;
2025
+ } | undefined;
2026
+ badges?: string[] | undefined;
2027
+ promo?: {
2028
+ message: string;
2029
+ ends_at?: string | undefined;
2030
+ } | undefined;
2031
+ size_guide?: {
2032
+ title: string;
2033
+ subtitle?: string | undefined;
2034
+ columns?: string[] | undefined;
2035
+ rows?: string[][] | undefined;
2036
+ unit?: "cm" | "in" | undefined;
2037
+ note?: string | undefined;
2038
+ measurements?: {
2039
+ label: string;
2040
+ description: string;
2041
+ }[] | undefined;
2042
+ fabric?: string | undefined;
2043
+ notes?: string[] | undefined;
2044
+ } | undefined;
2045
+ };
1414
2046
  })[];
1415
2047
  }>;
1416
2048
 
@@ -1524,11 +2156,11 @@ declare function createClient(options: ClientOptions): {
1524
2156
  image?: string | undefined;
1525
2157
  available?: number | undefined;
1526
2158
  }[];
2159
+ description?: string | undefined;
1527
2160
  compare_at?: {
1528
2161
  amount: number;
1529
2162
  currency: string;
1530
2163
  } | undefined;
1531
- description?: string | undefined;
1532
2164
  badges?: string[] | undefined;
1533
2165
  promo?: {
1534
2166
  message: string;
@@ -1536,8 +2168,16 @@ declare function createClient(options: ClientOptions): {
1536
2168
  } | undefined;
1537
2169
  size_guide?: {
1538
2170
  title: string;
2171
+ subtitle?: string | undefined;
1539
2172
  columns?: string[] | undefined;
1540
2173
  rows?: string[][] | undefined;
2174
+ unit?: "cm" | "in" | undefined;
2175
+ note?: string | undefined;
2176
+ measurements?: {
2177
+ label: string;
2178
+ description: string;
2179
+ }[] | undefined;
2180
+ fabric?: string | undefined;
1541
2181
  notes?: string[] | undefined;
1542
2182
  } | undefined;
1543
2183
  }[];
@@ -1562,11 +2202,11 @@ declare function createClient(options: ClientOptions): {
1562
2202
  image?: string | undefined;
1563
2203
  available?: number | undefined;
1564
2204
  }[];
2205
+ description?: string | undefined;
1565
2206
  compare_at?: {
1566
2207
  amount: number;
1567
2208
  currency: string;
1568
2209
  } | undefined;
1569
- description?: string | undefined;
1570
2210
  badges?: string[] | undefined;
1571
2211
  promo?: {
1572
2212
  message: string;
@@ -1574,8 +2214,16 @@ declare function createClient(options: ClientOptions): {
1574
2214
  } | undefined;
1575
2215
  size_guide?: {
1576
2216
  title: string;
2217
+ subtitle?: string | undefined;
1577
2218
  columns?: string[] | undefined;
1578
2219
  rows?: string[][] | undefined;
2220
+ unit?: "cm" | "in" | undefined;
2221
+ note?: string | undefined;
2222
+ measurements?: {
2223
+ label: string;
2224
+ description: string;
2225
+ }[] | undefined;
2226
+ fabric?: string | undefined;
1579
2227
  notes?: string[] | undefined;
1580
2228
  } | undefined;
1581
2229
  }>;
@@ -1596,11 +2244,11 @@ declare function createClient(options: ClientOptions): {
1596
2244
  image?: string | undefined;
1597
2245
  available?: number | undefined;
1598
2246
  }[];
2247
+ description?: string | undefined;
1599
2248
  compare_at?: {
1600
2249
  amount: number;
1601
2250
  currency: string;
1602
2251
  } | undefined;
1603
- description?: string | undefined;
1604
2252
  badges?: string[] | undefined;
1605
2253
  promo?: {
1606
2254
  message: string;
@@ -1608,8 +2256,16 @@ declare function createClient(options: ClientOptions): {
1608
2256
  } | undefined;
1609
2257
  size_guide?: {
1610
2258
  title: string;
2259
+ subtitle?: string | undefined;
1611
2260
  columns?: string[] | undefined;
1612
2261
  rows?: string[][] | undefined;
2262
+ unit?: "cm" | "in" | undefined;
2263
+ note?: string | undefined;
2264
+ measurements?: {
2265
+ label: string;
2266
+ description: string;
2267
+ }[] | undefined;
2268
+ fabric?: string | undefined;
1613
2269
  notes?: string[] | undefined;
1614
2270
  } | undefined;
1615
2271
  }[];
@@ -1652,11 +2308,11 @@ declare function createClient(options: ClientOptions): {
1652
2308
  image?: string | undefined;
1653
2309
  available?: number | undefined;
1654
2310
  }[];
2311
+ description?: string | undefined;
1655
2312
  compare_at?: {
1656
2313
  amount: number;
1657
2314
  currency: string;
1658
2315
  } | undefined;
1659
- description?: string | undefined;
1660
2316
  badges?: string[] | undefined;
1661
2317
  promo?: {
1662
2318
  message: string;
@@ -1664,8 +2320,16 @@ declare function createClient(options: ClientOptions): {
1664
2320
  } | undefined;
1665
2321
  size_guide?: {
1666
2322
  title: string;
2323
+ subtitle?: string | undefined;
1667
2324
  columns?: string[] | undefined;
1668
2325
  rows?: string[][] | undefined;
2326
+ unit?: "cm" | "in" | undefined;
2327
+ note?: string | undefined;
2328
+ measurements?: {
2329
+ label: string;
2330
+ description: string;
2331
+ }[] | undefined;
2332
+ fabric?: string | undefined;
1669
2333
  notes?: string[] | undefined;
1670
2334
  } | undefined;
1671
2335
  }[];
@@ -1691,11 +2355,11 @@ declare function createClient(options: ClientOptions): {
1691
2355
  image?: string | undefined;
1692
2356
  available?: number | undefined;
1693
2357
  }[];
2358
+ description?: string | undefined;
1694
2359
  compare_at?: {
1695
2360
  amount: number;
1696
2361
  currency: string;
1697
2362
  } | undefined;
1698
- description?: string | undefined;
1699
2363
  badges?: string[] | undefined;
1700
2364
  promo?: {
1701
2365
  message: string;
@@ -1703,8 +2367,16 @@ declare function createClient(options: ClientOptions): {
1703
2367
  } | undefined;
1704
2368
  size_guide?: {
1705
2369
  title: string;
2370
+ subtitle?: string | undefined;
1706
2371
  columns?: string[] | undefined;
1707
2372
  rows?: string[][] | undefined;
2373
+ unit?: "cm" | "in" | undefined;
2374
+ note?: string | undefined;
2375
+ measurements?: {
2376
+ label: string;
2377
+ description: string;
2378
+ }[] | undefined;
2379
+ fabric?: string | undefined;
1708
2380
  notes?: string[] | undefined;
1709
2381
  } | undefined;
1710
2382
  };
@@ -1713,7 +2385,6 @@ declare function createClient(options: ClientOptions): {
1713
2385
  kind: "lifestyle_image";
1714
2386
  images: string[];
1715
2387
  } | {
1716
- title: string;
1717
2388
  kind: "grid";
1718
2389
  products: {
1719
2390
  sku: string;
@@ -1731,11 +2402,11 @@ declare function createClient(options: ClientOptions): {
1731
2402
  image?: string | undefined;
1732
2403
  available?: number | undefined;
1733
2404
  }[];
2405
+ description?: string | undefined;
1734
2406
  compare_at?: {
1735
2407
  amount: number;
1736
2408
  currency: string;
1737
2409
  } | undefined;
1738
- description?: string | undefined;
1739
2410
  badges?: string[] | undefined;
1740
2411
  promo?: {
1741
2412
  message: string;
@@ -1743,11 +2414,20 @@ declare function createClient(options: ClientOptions): {
1743
2414
  } | undefined;
1744
2415
  size_guide?: {
1745
2416
  title: string;
2417
+ subtitle?: string | undefined;
1746
2418
  columns?: string[] | undefined;
1747
2419
  rows?: string[][] | undefined;
2420
+ unit?: "cm" | "in" | undefined;
2421
+ note?: string | undefined;
2422
+ measurements?: {
2423
+ label: string;
2424
+ description: string;
2425
+ }[] | undefined;
2426
+ fabric?: string | undefined;
1748
2427
  notes?: string[] | undefined;
1749
2428
  } | undefined;
1750
2429
  }[];
2430
+ title?: string | undefined;
1751
2431
  } | {
1752
2432
  kind: "review";
1753
2433
  quotes: {
@@ -1769,6 +2449,50 @@ declare function createClient(options: ClientOptions): {
1769
2449
  code: string;
1770
2450
  label: string;
1771
2451
  }[];
2452
+ } | {
2453
+ title: string;
2454
+ kind: "product_gallery";
2455
+ product: {
2456
+ sku: string;
2457
+ title: string;
2458
+ category: string;
2459
+ price: {
2460
+ amount: number;
2461
+ currency: string;
2462
+ };
2463
+ media: string[];
2464
+ variants: {
2465
+ sku: string;
2466
+ attributes: Record<string, string>;
2467
+ in_stock: boolean;
2468
+ image?: string | undefined;
2469
+ available?: number | undefined;
2470
+ }[];
2471
+ description?: string | undefined;
2472
+ compare_at?: {
2473
+ amount: number;
2474
+ currency: string;
2475
+ } | undefined;
2476
+ badges?: string[] | undefined;
2477
+ promo?: {
2478
+ message: string;
2479
+ ends_at?: string | undefined;
2480
+ } | undefined;
2481
+ size_guide?: {
2482
+ title: string;
2483
+ subtitle?: string | undefined;
2484
+ columns?: string[] | undefined;
2485
+ rows?: string[][] | undefined;
2486
+ unit?: "cm" | "in" | undefined;
2487
+ note?: string | undefined;
2488
+ measurements?: {
2489
+ label: string;
2490
+ description: string;
2491
+ }[] | undefined;
2492
+ fabric?: string | undefined;
2493
+ notes?: string[] | undefined;
2494
+ } | undefined;
2495
+ };
1772
2496
  })[];
1773
2497
  }>;
1774
2498
  };
@@ -1810,6 +2534,10 @@ declare function createClient(options: ClientOptions): {
1810
2534
  image?: string | undefined;
1811
2535
  available?: number | undefined;
1812
2536
  title?: string | undefined;
2537
+ compare_at_unit_price?: {
2538
+ amount: number;
2539
+ currency: string;
2540
+ } | undefined;
1813
2541
  }[];
1814
2542
  cart_id: string;
1815
2543
  totals: {
@@ -1829,12 +2557,20 @@ declare function createClient(options: ClientOptions): {
1829
2557
  amount: number;
1830
2558
  currency: string;
1831
2559
  };
2560
+ discount?: {
2561
+ amount: number;
2562
+ currency: string;
2563
+ } | undefined;
1832
2564
  };
1833
2565
  locked?: {
1834
2566
  since: string;
1835
2567
  reason: "checkout_handoff";
1836
2568
  expires_at?: string | undefined;
1837
2569
  } | undefined;
2570
+ hold?: {
2571
+ expires_at: string;
2572
+ taken_at: string;
2573
+ } | undefined;
1838
2574
  hidden_lines?: ("shipping" | "tax")[] | undefined;
1839
2575
  }>;
1840
2576
  get: () => Promise<{
@@ -1854,6 +2590,10 @@ declare function createClient(options: ClientOptions): {
1854
2590
  image?: string | undefined;
1855
2591
  available?: number | undefined;
1856
2592
  title?: string | undefined;
2593
+ compare_at_unit_price?: {
2594
+ amount: number;
2595
+ currency: string;
2596
+ } | undefined;
1857
2597
  }[];
1858
2598
  cart_id: string;
1859
2599
  totals: {
@@ -1873,12 +2613,20 @@ declare function createClient(options: ClientOptions): {
1873
2613
  amount: number;
1874
2614
  currency: string;
1875
2615
  };
2616
+ discount?: {
2617
+ amount: number;
2618
+ currency: string;
2619
+ } | undefined;
1876
2620
  };
1877
2621
  locked?: {
1878
2622
  since: string;
1879
2623
  reason: "checkout_handoff";
1880
2624
  expires_at?: string | undefined;
1881
2625
  } | undefined;
2626
+ hold?: {
2627
+ expires_at: string;
2628
+ taken_at: string;
2629
+ } | undefined;
1882
2630
  hidden_lines?: ("shipping" | "tax")[] | undefined;
1883
2631
  }>;
1884
2632
  addItem: (body: AddCartItemRequest) => Promise<{
@@ -1898,6 +2646,10 @@ declare function createClient(options: ClientOptions): {
1898
2646
  image?: string | undefined;
1899
2647
  available?: number | undefined;
1900
2648
  title?: string | undefined;
2649
+ compare_at_unit_price?: {
2650
+ amount: number;
2651
+ currency: string;
2652
+ } | undefined;
1901
2653
  }[];
1902
2654
  cart_id: string;
1903
2655
  totals: {
@@ -1917,12 +2669,20 @@ declare function createClient(options: ClientOptions): {
1917
2669
  amount: number;
1918
2670
  currency: string;
1919
2671
  };
2672
+ discount?: {
2673
+ amount: number;
2674
+ currency: string;
2675
+ } | undefined;
1920
2676
  };
1921
2677
  locked?: {
1922
2678
  since: string;
1923
2679
  reason: "checkout_handoff";
1924
2680
  expires_at?: string | undefined;
1925
2681
  } | undefined;
2682
+ hold?: {
2683
+ expires_at: string;
2684
+ taken_at: string;
2685
+ } | undefined;
1926
2686
  hidden_lines?: ("shipping" | "tax")[] | undefined;
1927
2687
  }>;
1928
2688
  updateItem: (sku: string, body: UpdateCartItemRequest) => Promise<{
@@ -1942,6 +2702,10 @@ declare function createClient(options: ClientOptions): {
1942
2702
  image?: string | undefined;
1943
2703
  available?: number | undefined;
1944
2704
  title?: string | undefined;
2705
+ compare_at_unit_price?: {
2706
+ amount: number;
2707
+ currency: string;
2708
+ } | undefined;
1945
2709
  }[];
1946
2710
  cart_id: string;
1947
2711
  totals: {
@@ -1961,12 +2725,20 @@ declare function createClient(options: ClientOptions): {
1961
2725
  amount: number;
1962
2726
  currency: string;
1963
2727
  };
2728
+ discount?: {
2729
+ amount: number;
2730
+ currency: string;
2731
+ } | undefined;
1964
2732
  };
1965
2733
  locked?: {
1966
2734
  since: string;
1967
2735
  reason: "checkout_handoff";
1968
2736
  expires_at?: string | undefined;
1969
2737
  } | undefined;
2738
+ hold?: {
2739
+ expires_at: string;
2740
+ taken_at: string;
2741
+ } | undefined;
1970
2742
  hidden_lines?: ("shipping" | "tax")[] | undefined;
1971
2743
  }>;
1972
2744
  removeItem: (sku: string) => Promise<{
@@ -1986,6 +2758,10 @@ declare function createClient(options: ClientOptions): {
1986
2758
  image?: string | undefined;
1987
2759
  available?: number | undefined;
1988
2760
  title?: string | undefined;
2761
+ compare_at_unit_price?: {
2762
+ amount: number;
2763
+ currency: string;
2764
+ } | undefined;
1989
2765
  }[];
1990
2766
  cart_id: string;
1991
2767
  totals: {
@@ -2005,54 +2781,155 @@ declare function createClient(options: ClientOptions): {
2005
2781
  amount: number;
2006
2782
  currency: string;
2007
2783
  };
2784
+ discount?: {
2785
+ amount: number;
2786
+ currency: string;
2787
+ } | undefined;
2008
2788
  };
2009
2789
  locked?: {
2010
2790
  since: string;
2011
2791
  reason: "checkout_handoff";
2012
2792
  expires_at?: string | undefined;
2013
2793
  } | undefined;
2014
- hidden_lines?: ("shipping" | "tax")[] | undefined;
2794
+ hold?: {
2795
+ expires_at: string;
2796
+ taken_at: string;
2797
+ } | undefined;
2798
+ hidden_lines?: ("shipping" | "tax")[] | undefined;
2799
+ }>;
2800
+ /**
2801
+ * Hand the cart to DAZN checkout and get the URL to send the fan to.
2802
+ *
2803
+ * The URL is opaque — redirect to it, never parse it. This is the last call in our
2804
+ * journey; payment, order and confirmation all happen on DAZN.
2805
+ */
2806
+ handoff: () => Promise<{
2807
+ checkout_url: string;
2808
+ }>;
2809
+ };
2810
+ /**
2811
+ * The fan's own orders (ADR-0015). Session-scoped: there is no way to ask for
2812
+ * someone else's, because there is no parameter that names a customer.
2813
+ */
2814
+ stockAlerts: {
2815
+ /** "Remind me when available" — idempotent per SKU for the session's principal. */
2816
+ create: (body: StockAlertRequest) => Promise<{
2817
+ sku: string;
2818
+ created_at: string;
2819
+ notified_at?: string | undefined;
2820
+ }>;
2821
+ };
2822
+ orders: {
2823
+ list: () => Promise<{
2824
+ orders: {
2825
+ status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2826
+ currency: string;
2827
+ total: {
2828
+ amount: number;
2829
+ currency: string;
2830
+ };
2831
+ order_ref: string;
2832
+ placed_at: string;
2833
+ headline: string;
2834
+ item_count: number;
2835
+ image?: string | undefined;
2836
+ images?: string[] | undefined;
2837
+ }[];
2838
+ }>;
2839
+ get: (orderRef: string) => Promise<{
2840
+ status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2841
+ currency: string;
2842
+ items: {
2843
+ sku: string;
2844
+ qty: number;
2845
+ unit_price: {
2846
+ amount: number;
2847
+ currency: string;
2848
+ };
2849
+ line_total: {
2850
+ amount: number;
2851
+ currency: string;
2852
+ };
2853
+ line_ref: string;
2854
+ cancelled_qty: number;
2855
+ refunded_qty: number;
2856
+ attributes?: Record<string, string> | undefined;
2857
+ image?: string | undefined;
2858
+ title?: string | undefined;
2859
+ compare_at_unit_price?: {
2860
+ amount: number;
2861
+ currency: string;
2862
+ } | undefined;
2863
+ }[];
2864
+ totals: {
2865
+ shipping: {
2866
+ amount: number;
2867
+ currency: string;
2868
+ };
2869
+ tax: {
2870
+ amount: number;
2871
+ currency: string;
2872
+ };
2873
+ items: {
2874
+ amount: number;
2875
+ currency: string;
2876
+ };
2877
+ grand_total: {
2878
+ amount: number;
2879
+ currency: string;
2880
+ };
2881
+ discount?: {
2882
+ amount: number;
2883
+ currency: string;
2884
+ } | undefined;
2885
+ };
2886
+ order_ref: string;
2887
+ placed_at: string;
2888
+ ship_to: {
2889
+ country: string;
2890
+ name: string;
2891
+ line1: string;
2892
+ city: string;
2893
+ postcode: string;
2894
+ line2?: string | undefined;
2895
+ region?: string | undefined;
2896
+ };
2897
+ headline: string;
2898
+ progress: {
2899
+ label: string;
2900
+ step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2901
+ current: boolean;
2902
+ at?: string | undefined;
2903
+ }[];
2904
+ email?: string | undefined;
2905
+ payment?: {
2906
+ brand: string;
2907
+ last4?: string | undefined;
2908
+ } | undefined;
2909
+ returns?: {
2910
+ status: "reported" | "package_received" | "completed";
2911
+ return_ref: string;
2912
+ reported_at: string;
2913
+ }[] | undefined;
2914
+ estimated_delivery?: {
2915
+ from: string;
2916
+ to: string;
2917
+ } | undefined;
2918
+ tracking?: {
2919
+ carrier: string;
2920
+ url?: string | undefined;
2921
+ reference?: string | undefined;
2922
+ } | undefined;
2923
+ can_cancel?: boolean | undefined;
2924
+ can_return?: boolean | undefined;
2015
2925
  }>;
2016
2926
  /**
2017
- * Hand the cart to DAZN checkout and get the URL to send the fan to.
2927
+ * Ask for the order to be cancelled (ADR-0024). Returns the order as it now stands.
2018
2928
  *
2019
- * The URL is opaque redirect to it, never parse it. This is the last call in our
2020
- * journey; payment, order and confirmation all happen on DAZN.
2929
+ * A request, not a refund: DAZN are merchant of record and the money is theirs to
2930
+ * move. This records the fan's ask and hands it on.
2021
2931
  */
2022
- handoff: () => Promise<{
2023
- checkout_url: string;
2024
- }>;
2025
- };
2026
- /**
2027
- * The fan's own orders (ADR-0015). Session-scoped: there is no way to ask for
2028
- * someone else's, because there is no parameter that names a customer.
2029
- */
2030
- stockAlerts: {
2031
- /** "Remind me when available" — idempotent per SKU for the session's principal. */
2032
- create: (body: StockAlertRequest) => Promise<{
2033
- sku: string;
2034
- created_at: string;
2035
- notified_at?: string | undefined;
2036
- }>;
2037
- };
2038
- orders: {
2039
- list: () => Promise<{
2040
- orders: {
2041
- status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2042
- currency: string;
2043
- total: {
2044
- amount: number;
2045
- currency: string;
2046
- };
2047
- order_ref: string;
2048
- placed_at: string;
2049
- headline: string;
2050
- item_count: number;
2051
- image?: string | undefined;
2052
- images?: string[] | undefined;
2053
- }[];
2054
- }>;
2055
- get: (orderRef: string) => Promise<{
2932
+ requestCancellation: (orderRef: string, body: RequestCancellationRequest) => Promise<{
2056
2933
  status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2057
2934
  currency: string;
2058
2935
  items: {
@@ -2122,6 +2999,11 @@ declare function createClient(options: ClientOptions): {
2122
2999
  brand: string;
2123
3000
  last4?: string | undefined;
2124
3001
  } | undefined;
3002
+ returns?: {
3003
+ status: "reported" | "package_received" | "completed";
3004
+ return_ref: string;
3005
+ reported_at: string;
3006
+ }[] | undefined;
2125
3007
  estimated_delivery?: {
2126
3008
  from: string;
2127
3009
  to: string;
@@ -2131,6 +3013,73 @@ declare function createClient(options: ClientOptions): {
2131
3013
  url?: string | undefined;
2132
3014
  reference?: string | undefined;
2133
3015
  } | undefined;
3016
+ can_cancel?: boolean | undefined;
3017
+ can_return?: boolean | undefined;
3018
+ }>;
3019
+ /** Report items coming back, and get the return — including its label when ready. */
3020
+ createReturn: (orderRef: string, body: CreateReturnRequest) => Promise<{
3021
+ status: "reported" | "package_received" | "completed";
3022
+ items: {
3023
+ sku: string;
3024
+ qty: number;
3025
+ unit_price: {
3026
+ amount: number;
3027
+ currency: string;
3028
+ };
3029
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3030
+ line_ref: string;
3031
+ attributes?: Record<string, string> | undefined;
3032
+ image?: string | undefined;
3033
+ title?: string | undefined;
3034
+ compare_at_unit_price?: {
3035
+ amount: number;
3036
+ currency: string;
3037
+ } | undefined;
3038
+ }[];
3039
+ order_ref: string;
3040
+ return_ref: string;
3041
+ reported_at: string;
3042
+ progress: {
3043
+ label: string;
3044
+ step: "reported" | "package_received" | "completed";
3045
+ current: boolean;
3046
+ at?: string | undefined;
3047
+ }[];
3048
+ label_url?: string | undefined;
3049
+ label_email?: string | undefined;
3050
+ }>;
3051
+ };
3052
+ returns: {
3053
+ get: (returnRef: string) => Promise<{
3054
+ status: "reported" | "package_received" | "completed";
3055
+ items: {
3056
+ sku: string;
3057
+ qty: number;
3058
+ unit_price: {
3059
+ amount: number;
3060
+ currency: string;
3061
+ };
3062
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3063
+ line_ref: string;
3064
+ attributes?: Record<string, string> | undefined;
3065
+ image?: string | undefined;
3066
+ title?: string | undefined;
3067
+ compare_at_unit_price?: {
3068
+ amount: number;
3069
+ currency: string;
3070
+ } | undefined;
3071
+ }[];
3072
+ order_ref: string;
3073
+ return_ref: string;
3074
+ reported_at: string;
3075
+ progress: {
3076
+ label: string;
3077
+ step: "reported" | "package_received" | "completed";
3078
+ current: boolean;
3079
+ at?: string | undefined;
3080
+ }[];
3081
+ label_url?: string | undefined;
3082
+ label_email?: string | undefined;
2134
3083
  }>;
2135
3084
  };
2136
3085
  /**
@@ -2180,6 +3129,37 @@ declare function createClient(options: ClientOptions): {
2180
3129
  };
2181
3130
  };
2182
3131
 
3132
+ /** `POST /v1/orders/{order_ref}/returns` */
3133
+ declare const CreateReturnRequest: z.ZodObject<{
3134
+ items: z.ZodArray<z.ZodObject<{
3135
+ line_ref: z.ZodString;
3136
+ qty: z.ZodNumber;
3137
+ reason: z.ZodEnum<["too_large", "too_small", "arrived_too_late", "item_damaged", "not_as_described", "changed_my_mind"]>;
3138
+ }, "strip", z.ZodTypeAny, {
3139
+ qty: number;
3140
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3141
+ line_ref: string;
3142
+ }, {
3143
+ qty: number;
3144
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3145
+ line_ref: string;
3146
+ }>, "many">;
3147
+ }, "strict", z.ZodTypeAny, {
3148
+ items: {
3149
+ qty: number;
3150
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3151
+ line_ref: string;
3152
+ }[];
3153
+ }, {
3154
+ items: {
3155
+ qty: number;
3156
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
3157
+ line_ref: string;
3158
+ }[];
3159
+ }>;
3160
+
3161
+ declare type CreateReturnRequest = z.infer<typeof CreateReturnRequest>;
3162
+
2183
3163
  /**
2184
3164
  * The session seam, implemented once at the transport level.
2185
3165
  *
@@ -2312,7 +3292,7 @@ export declare interface EmptyStateProps {
2312
3292
  * | invalid_request | 400 | malformed body or missing field |
2313
3293
  * | unauthorized | 401 | missing/invalid session or credentials |
2314
3294
  * | out_of_stock | 409 | requested qty exceeds available stock |
2315
- * | cart_locked | 409 | cart handed to checkout; mutations refused |
3295
+ * | cart_locked | 409 | RETIRED (ADR-0025); defined, never raised |
2316
3296
  * | sku_not_found | 404 | a referenced SKU/product does not exist |
2317
3297
  * | category_not_found | 404 | a referenced category code does not exist |
2318
3298
  * | amount_mismatch | 422 | totals do not match the authorised amount |
@@ -2335,7 +3315,7 @@ declare type ErrorCode = z.infer<typeof ErrorCode>;
2335
3315
  * | invalid_request | 400 | malformed body or missing field |
2336
3316
  * | unauthorized | 401 | missing/invalid session or credentials |
2337
3317
  * | out_of_stock | 409 | requested qty exceeds available stock |
2338
- * | cart_locked | 409 | cart handed to checkout; mutations refused |
3318
+ * | cart_locked | 409 | RETIRED (ADR-0025); defined, never raised |
2339
3319
  * | sku_not_found | 404 | a referenced SKU/product does not exist |
2340
3320
  * | category_not_found | 404 | a referenced category code does not exist |
2341
3321
  * | amount_mismatch | 422 | totals do not match the authorised amount |
@@ -2391,6 +3371,11 @@ export declare function ExploreList({ title, links }: {
2391
3371
  links: ExploreLink[];
2392
3372
  }): JSX.Element;
2393
3373
 
3374
+ /** Why an item is coming back, from Figma's `Reason for return` sheet. */
3375
+ declare const FanReturnReason: z.ZodEnum<["too_large", "too_small", "arrived_too_late", "item_damaged", "not_as_described", "changed_my_mind"]>;
3376
+
3377
+ declare type FanReturnReason = z.infer<typeof FanReturnReason>;
3378
+
2394
3379
  /** Horizontal chip filter bar for the PLP. Chips are toggle buttons. */
2395
3380
  export declare function FilterBar({ options, active, onToggle, onClear }: FilterBarProps): JSX.Element;
2396
3381
 
@@ -2579,6 +3564,9 @@ export declare type OnEvent = (event: ShopEvent) => void;
2579
3564
  * anyone who opens the email an hour later. So the two screens are two routes, and the one
2580
3565
  * that navigates here is the one that knows — the checkout that has just finished.
2581
3566
  *
3567
+ * Below the widget the two are the same three blocks, and they are the same components:
3568
+ * see `OrderReceipt`.
3569
+ *
2582
3570
  * Read-only, like tracking. The frame's footer is "Done" rather than "Cancel order"
2583
3571
  * precisely because cancellation is DAZN's under ADR-0008 and ADR-0017.
2584
3572
  */
@@ -2599,6 +3587,500 @@ export declare interface OrderConfirmationViewProps {
2599
3587
  onDone?: () => void;
2600
3588
  }
2601
3589
 
3590
+ /**
3591
+ * `GET /v1/orders/{order_ref}` — one order in full.
3592
+ *
3593
+ * **`estimated_delivery` is a window, not a date, and it is advisory.** It comes from the
3594
+ * fulfilment side rather than from DAZN, so it reflects when the warehouse expects to have
3595
+ * it delivered. Absent when nothing can be estimated — which is honest, and better than a
3596
+ * date the fan will hold us to.
3597
+ */
3598
+ declare const OrderDetail: z.ZodObject<{
3599
+ order_ref: z.ZodBranded<z.ZodString, "OrderRef">;
3600
+ placed_at: z.ZodString;
3601
+ currency: z.ZodString;
3602
+ /**
3603
+ * Where the order confirmation went, for the confirmation screen's "We've sent a
3604
+ * confirmation to ..." line. The address DAZN gave us at intake, echoed back.
3605
+ *
3606
+ * Returned only on the detail read, which is already scoped to the order's own owner,
3607
+ * and never on the list. It is PII: render it, and keep it out of logs and analytics
3608
+ * like every other address in this package.
3609
+ *
3610
+ * Optional because intake's is: a market whose carrier takes no email places orders
3611
+ * without one. Absent means the line is not drawn, never that a placeholder is.
3612
+ */
3613
+ email: z.ZodOptional<z.ZodString>;
3614
+ status: z.ZodEnum<["packing", "on_its_way", "out_for_delivery", "delivered", "cancelled"]>;
3615
+ headline: z.ZodString;
3616
+ estimated_delivery: z.ZodOptional<z.ZodObject<{
3617
+ from: z.ZodString;
3618
+ to: z.ZodString;
3619
+ }, "strip", z.ZodTypeAny, {
3620
+ from: string;
3621
+ to: string;
3622
+ }, {
3623
+ from: string;
3624
+ to: string;
3625
+ }>>;
3626
+ progress: z.ZodArray<z.ZodObject<{
3627
+ step: z.ZodEnum<["packing", "on_its_way", "out_for_delivery", "delivered", "cancelled"]>;
3628
+ /** Ready-to-render label for the step, localised with the rest of the response. */
3629
+ label: z.ZodString;
3630
+ /** When the step completed. Absent = not reached yet. */
3631
+ at: z.ZodOptional<z.ZodString>;
3632
+ /** Exactly one entry is `current`; every earlier one is complete. */
3633
+ current: z.ZodBoolean;
3634
+ }, "strip", z.ZodTypeAny, {
3635
+ label: string;
3636
+ step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
3637
+ current: boolean;
3638
+ at?: string | undefined;
3639
+ }, {
3640
+ label: string;
3641
+ step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
3642
+ current: boolean;
3643
+ at?: string | undefined;
3644
+ }>, "many">;
3645
+ tracking: z.ZodOptional<z.ZodObject<{
3646
+ carrier: z.ZodString;
3647
+ reference: z.ZodOptional<z.ZodString>;
3648
+ url: z.ZodOptional<z.ZodString>;
3649
+ }, "strip", z.ZodTypeAny, {
3650
+ carrier: string;
3651
+ url?: string | undefined;
3652
+ reference?: string | undefined;
3653
+ }, {
3654
+ carrier: string;
3655
+ url?: string | undefined;
3656
+ reference?: string | undefined;
3657
+ }>>;
3658
+ items: z.ZodArray<z.ZodObject<{
3659
+ line_ref: z.ZodString;
3660
+ sku: z.ZodString;
3661
+ qty: z.ZodNumber;
3662
+ unit_price: z.ZodObject<{
3663
+ amount: z.ZodNumber;
3664
+ currency: z.ZodString;
3665
+ }, "strict", z.ZodTypeAny, {
3666
+ amount: number;
3667
+ currency: string;
3668
+ }, {
3669
+ amount: number;
3670
+ currency: string;
3671
+ }>;
3672
+ line_total: z.ZodObject<{
3673
+ amount: z.ZodNumber;
3674
+ currency: z.ZodString;
3675
+ }, "strict", z.ZodTypeAny, {
3676
+ amount: number;
3677
+ currency: string;
3678
+ }, {
3679
+ amount: number;
3680
+ currency: string;
3681
+ }>;
3682
+ /**
3683
+ * The undiscounted per-unit price, echoed from intake. Display only.
3684
+ *
3685
+ * Drawn as a struck-through price with a saving badge beside what was paid. Absent
3686
+ * means the line was sold at full price, which is the ordinary case; see `OrderLine`
3687
+ * for why this is DAZN's figure and not our catalogue's.
3688
+ */
3689
+ compare_at_unit_price: z.ZodOptional<z.ZodObject<{
3690
+ amount: z.ZodNumber;
3691
+ currency: z.ZodString;
3692
+ }, "strict", z.ZodTypeAny, {
3693
+ amount: number;
3694
+ currency: string;
3695
+ }, {
3696
+ amount: number;
3697
+ currency: string;
3698
+ }>>;
3699
+ title: z.ZodOptional<z.ZodString>;
3700
+ image: z.ZodOptional<z.ZodString>;
3701
+ /** Variant attributes, e.g. `{ size: 'M' }`. Same shape as everywhere else. */
3702
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
3703
+ /**
3704
+ * Units of this line cancelled or refunded so far. Present so a partially cancelled
3705
+ * order reads honestly instead of showing the original quantity as though nothing
3706
+ * happened. Zero is the normal case and is sent rather than omitted.
3707
+ */
3708
+ cancelled_qty: z.ZodNumber;
3709
+ refunded_qty: z.ZodNumber;
3710
+ }, "strip", z.ZodTypeAny, {
3711
+ sku: string;
3712
+ qty: number;
3713
+ unit_price: {
3714
+ amount: number;
3715
+ currency: string;
3716
+ };
3717
+ line_total: {
3718
+ amount: number;
3719
+ currency: string;
3720
+ };
3721
+ line_ref: string;
3722
+ cancelled_qty: number;
3723
+ refunded_qty: number;
3724
+ compare_at_unit_price?: {
3725
+ amount: number;
3726
+ currency: string;
3727
+ } | undefined;
3728
+ title?: string | undefined;
3729
+ image?: string | undefined;
3730
+ attributes?: Record<string, string> | undefined;
3731
+ }, {
3732
+ sku: string;
3733
+ qty: number;
3734
+ unit_price: {
3735
+ amount: number;
3736
+ currency: string;
3737
+ };
3738
+ line_total: {
3739
+ amount: number;
3740
+ currency: string;
3741
+ };
3742
+ line_ref: string;
3743
+ cancelled_qty: number;
3744
+ refunded_qty: number;
3745
+ compare_at_unit_price?: {
3746
+ amount: number;
3747
+ currency: string;
3748
+ } | undefined;
3749
+ title?: string | undefined;
3750
+ image?: string | undefined;
3751
+ attributes?: Record<string, string> | undefined;
3752
+ }>, "many">;
3753
+ ship_to: z.ZodObject<{
3754
+ name: z.ZodString;
3755
+ line1: z.ZodString;
3756
+ line2: z.ZodOptional<z.ZodString>;
3757
+ city: z.ZodString;
3758
+ region: z.ZodOptional<z.ZodString>;
3759
+ postcode: z.ZodString;
3760
+ country: z.ZodString;
3761
+ }, "strip", z.ZodTypeAny, {
3762
+ country: string;
3763
+ name: string;
3764
+ line1: string;
3765
+ city: string;
3766
+ postcode: string;
3767
+ line2?: string | undefined;
3768
+ region?: string | undefined;
3769
+ }, {
3770
+ country: string;
3771
+ name: string;
3772
+ line1: string;
3773
+ city: string;
3774
+ postcode: string;
3775
+ line2?: string | undefined;
3776
+ region?: string | undefined;
3777
+ }>;
3778
+ payment: z.ZodOptional<z.ZodObject<{
3779
+ brand: z.ZodString;
3780
+ last4: z.ZodOptional<z.ZodString>;
3781
+ }, "strip", z.ZodTypeAny, {
3782
+ brand: string;
3783
+ last4?: string | undefined;
3784
+ }, {
3785
+ brand: string;
3786
+ last4?: string | undefined;
3787
+ }>>;
3788
+ /** Exactly what DAZN charged, echoed. Never recomputed here. */
3789
+ totals: z.ZodObject<{
3790
+ items: z.ZodObject<{
3791
+ amount: z.ZodNumber;
3792
+ currency: z.ZodString;
3793
+ }, "strict", z.ZodTypeAny, {
3794
+ amount: number;
3795
+ currency: string;
3796
+ }, {
3797
+ amount: number;
3798
+ currency: string;
3799
+ }>;
3800
+ shipping: z.ZodObject<{
3801
+ amount: z.ZodNumber;
3802
+ currency: z.ZodString;
3803
+ }, "strict", z.ZodTypeAny, {
3804
+ amount: number;
3805
+ currency: string;
3806
+ }, {
3807
+ amount: number;
3808
+ currency: string;
3809
+ }>;
3810
+ tax: z.ZodObject<{
3811
+ amount: z.ZodNumber;
3812
+ currency: z.ZodString;
3813
+ }, "strict", z.ZodTypeAny, {
3814
+ amount: number;
3815
+ currency: string;
3816
+ }, {
3817
+ amount: number;
3818
+ currency: string;
3819
+ }>;
3820
+ discount: z.ZodOptional<z.ZodObject<{
3821
+ amount: z.ZodNumber;
3822
+ currency: z.ZodString;
3823
+ }, "strict", z.ZodTypeAny, {
3824
+ amount: number;
3825
+ currency: string;
3826
+ }, {
3827
+ amount: number;
3828
+ currency: string;
3829
+ }>>;
3830
+ grand_total: z.ZodObject<{
3831
+ amount: z.ZodNumber;
3832
+ currency: z.ZodString;
3833
+ }, "strict", z.ZodTypeAny, {
3834
+ amount: number;
3835
+ currency: string;
3836
+ }, {
3837
+ amount: number;
3838
+ currency: string;
3839
+ }>;
3840
+ }, "strip", z.ZodTypeAny, {
3841
+ shipping: {
3842
+ amount: number;
3843
+ currency: string;
3844
+ };
3845
+ tax: {
3846
+ amount: number;
3847
+ currency: string;
3848
+ };
3849
+ items: {
3850
+ amount: number;
3851
+ currency: string;
3852
+ };
3853
+ grand_total: {
3854
+ amount: number;
3855
+ currency: string;
3856
+ };
3857
+ discount?: {
3858
+ amount: number;
3859
+ currency: string;
3860
+ } | undefined;
3861
+ }, {
3862
+ shipping: {
3863
+ amount: number;
3864
+ currency: string;
3865
+ };
3866
+ tax: {
3867
+ amount: number;
3868
+ currency: string;
3869
+ };
3870
+ items: {
3871
+ amount: number;
3872
+ currency: string;
3873
+ };
3874
+ grand_total: {
3875
+ amount: number;
3876
+ currency: string;
3877
+ };
3878
+ discount?: {
3879
+ amount: number;
3880
+ currency: string;
3881
+ } | undefined;
3882
+ }>;
3883
+ /**
3884
+ * Whether this order can still be cancelled, and whether it can be returned.
3885
+ *
3886
+ * **Decided by the engine and sent, not derived by the consumer from `status`.** The
3887
+ * rule involves a dispatch cut-off and a returns window that a screen has no way of
3888
+ * knowing, and two consumers deriving it independently would disagree the day either
3889
+ * moves. Absent means no — an older engine that has never heard of either draws
3890
+ * neither button, which is the safe way round for an action that cannot be undone.
3891
+ */
3892
+ can_cancel: z.ZodOptional<z.ZodBoolean>;
3893
+ can_return: z.ZodOptional<z.ZodBoolean>;
3894
+ /** Returns already reported against this order. Absent/empty = none. */
3895
+ returns: z.ZodOptional<z.ZodArray<z.ZodObject<{
3896
+ return_ref: z.ZodString;
3897
+ status: z.ZodEnum<["reported", "package_received", "completed"]>;
3898
+ reported_at: z.ZodString;
3899
+ }, "strip", z.ZodTypeAny, {
3900
+ status: "reported" | "package_received" | "completed";
3901
+ return_ref: string;
3902
+ reported_at: string;
3903
+ }, {
3904
+ status: "reported" | "package_received" | "completed";
3905
+ return_ref: string;
3906
+ reported_at: string;
3907
+ }>, "many">>;
3908
+ }, "strip", z.ZodTypeAny, {
3909
+ status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
3910
+ currency: string;
3911
+ items: {
3912
+ sku: string;
3913
+ qty: number;
3914
+ unit_price: {
3915
+ amount: number;
3916
+ currency: string;
3917
+ };
3918
+ line_total: {
3919
+ amount: number;
3920
+ currency: string;
3921
+ };
3922
+ line_ref: string;
3923
+ cancelled_qty: number;
3924
+ refunded_qty: number;
3925
+ compare_at_unit_price?: {
3926
+ amount: number;
3927
+ currency: string;
3928
+ } | undefined;
3929
+ title?: string | undefined;
3930
+ image?: string | undefined;
3931
+ attributes?: Record<string, string> | undefined;
3932
+ }[];
3933
+ totals: {
3934
+ shipping: {
3935
+ amount: number;
3936
+ currency: string;
3937
+ };
3938
+ tax: {
3939
+ amount: number;
3940
+ currency: string;
3941
+ };
3942
+ items: {
3943
+ amount: number;
3944
+ currency: string;
3945
+ };
3946
+ grand_total: {
3947
+ amount: number;
3948
+ currency: string;
3949
+ };
3950
+ discount?: {
3951
+ amount: number;
3952
+ currency: string;
3953
+ } | undefined;
3954
+ };
3955
+ order_ref: string & z.BRAND<"OrderRef">;
3956
+ placed_at: string;
3957
+ ship_to: {
3958
+ country: string;
3959
+ name: string;
3960
+ line1: string;
3961
+ city: string;
3962
+ postcode: string;
3963
+ line2?: string | undefined;
3964
+ region?: string | undefined;
3965
+ };
3966
+ headline: string;
3967
+ progress: {
3968
+ label: string;
3969
+ step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
3970
+ current: boolean;
3971
+ at?: string | undefined;
3972
+ }[];
3973
+ email?: string | undefined;
3974
+ payment?: {
3975
+ brand: string;
3976
+ last4?: string | undefined;
3977
+ } | undefined;
3978
+ returns?: {
3979
+ status: "reported" | "package_received" | "completed";
3980
+ return_ref: string;
3981
+ reported_at: string;
3982
+ }[] | undefined;
3983
+ estimated_delivery?: {
3984
+ from: string;
3985
+ to: string;
3986
+ } | undefined;
3987
+ tracking?: {
3988
+ carrier: string;
3989
+ url?: string | undefined;
3990
+ reference?: string | undefined;
3991
+ } | undefined;
3992
+ can_cancel?: boolean | undefined;
3993
+ can_return?: boolean | undefined;
3994
+ }, {
3995
+ status: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
3996
+ currency: string;
3997
+ items: {
3998
+ sku: string;
3999
+ qty: number;
4000
+ unit_price: {
4001
+ amount: number;
4002
+ currency: string;
4003
+ };
4004
+ line_total: {
4005
+ amount: number;
4006
+ currency: string;
4007
+ };
4008
+ line_ref: string;
4009
+ cancelled_qty: number;
4010
+ refunded_qty: number;
4011
+ compare_at_unit_price?: {
4012
+ amount: number;
4013
+ currency: string;
4014
+ } | undefined;
4015
+ title?: string | undefined;
4016
+ image?: string | undefined;
4017
+ attributes?: Record<string, string> | undefined;
4018
+ }[];
4019
+ totals: {
4020
+ shipping: {
4021
+ amount: number;
4022
+ currency: string;
4023
+ };
4024
+ tax: {
4025
+ amount: number;
4026
+ currency: string;
4027
+ };
4028
+ items: {
4029
+ amount: number;
4030
+ currency: string;
4031
+ };
4032
+ grand_total: {
4033
+ amount: number;
4034
+ currency: string;
4035
+ };
4036
+ discount?: {
4037
+ amount: number;
4038
+ currency: string;
4039
+ } | undefined;
4040
+ };
4041
+ order_ref: string;
4042
+ placed_at: string;
4043
+ ship_to: {
4044
+ country: string;
4045
+ name: string;
4046
+ line1: string;
4047
+ city: string;
4048
+ postcode: string;
4049
+ line2?: string | undefined;
4050
+ region?: string | undefined;
4051
+ };
4052
+ headline: string;
4053
+ progress: {
4054
+ label: string;
4055
+ step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
4056
+ current: boolean;
4057
+ at?: string | undefined;
4058
+ }[];
4059
+ email?: string | undefined;
4060
+ payment?: {
4061
+ brand: string;
4062
+ last4?: string | undefined;
4063
+ } | undefined;
4064
+ returns?: {
4065
+ status: "reported" | "package_received" | "completed";
4066
+ return_ref: string;
4067
+ reported_at: string;
4068
+ }[] | undefined;
4069
+ estimated_delivery?: {
4070
+ from: string;
4071
+ to: string;
4072
+ } | undefined;
4073
+ tracking?: {
4074
+ carrier: string;
4075
+ url?: string | undefined;
4076
+ reference?: string | undefined;
4077
+ } | undefined;
4078
+ can_cancel?: boolean | undefined;
4079
+ can_return?: boolean | undefined;
4080
+ }>;
4081
+
4082
+ declare type OrderDetail = z.infer<typeof OrderDetail>;
4083
+
2602
4084
  /**
2603
4085
  * The fan's orders (Figma `mobile/order/list`, ADR-0015).
2604
4086
  *
@@ -2614,42 +4096,12 @@ export declare function OrderListView(props: OrderListViewProps): JSX.Element;
2614
4096
  export declare interface OrderListViewProps {
2615
4097
  /** Opens one order. Without it the rows render as static cards rather than dead links. */
2616
4098
  onOpenOrder?: (orderRef: string) => void;
2617
- /** The empty state's call to action — the design's "Find my fit" button. */
4099
+ /** The empty state's call to action — the design's "Continue shopping" button. */
2618
4100
  onStartShopping?: () => void;
2619
4101
  /** Overrides the provider's locale for dates. */
2620
4102
  locale?: string;
2621
4103
  }
2622
4104
 
2623
- /**
2624
- * One row of the timeline.
2625
- *
2626
- * **`at` is present only for a step that has actually happened.** A future step has no
2627
- * date, rather than a projected one: a predicted date rendered in the same place as a
2628
- * recorded one is indistinguishable from a promise, and this timeline is the fan's
2629
- * evidence of what occurred.
2630
- */
2631
- declare const OrderProgressEntry: z.ZodObject<{
2632
- step: z.ZodEnum<["packing", "on_its_way", "out_for_delivery", "delivered", "cancelled"]>;
2633
- /** Ready-to-render label for the step, localised with the rest of the response. */
2634
- label: z.ZodString;
2635
- /** When the step completed. Absent = not reached yet. */
2636
- at: z.ZodOptional<z.ZodString>;
2637
- /** Exactly one entry is `current`; every earlier one is complete. */
2638
- current: z.ZodBoolean;
2639
- }, "strip", z.ZodTypeAny, {
2640
- label: string;
2641
- step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2642
- current: boolean;
2643
- at?: string | undefined;
2644
- }, {
2645
- label: string;
2646
- step: "packing" | "on_its_way" | "out_for_delivery" | "delivered" | "cancelled";
2647
- current: boolean;
2648
- at?: string | undefined;
2649
- }>;
2650
-
2651
- declare type OrderProgressEntry = z.infer<typeof OrderProgressEntry>;
2652
-
2653
4105
  /**
2654
4106
  * A step in the fan-facing progress timeline.
2655
4107
  *
@@ -2706,8 +4158,17 @@ export declare interface OrderSummaryProps {
2706
4158
  * changes at checkout. DAZN owns checkout and therefore owns delivery and tax
2707
4159
  * (ADR-0008), so in the cart both are genuinely unknown rather than genuinely free.
2708
4160
  *
2709
- * When anything is deferred the grand total is withheld too: a total that omits
2710
- * delivery is not a total. Subtotal carries the emphasis instead.
4161
+ * **The grand total is still drawn.** It used to be withheld whenever anything here was
4162
+ * deferred, on the reasoning that a total omitting delivery is not a total. DAZN
4163
+ * reviewed that on 21 Aug 2026 against the frame — which draws a Total row — and chose
4164
+ * the frame. So the row is drawn, carrying `pricing.total`, and on a cart that means the
4165
+ * items total: delivery and tax are added at DAZN's checkout and can move it by the
4166
+ * spread the design's own shipping note quotes (standard $5-16, express $15-23).
4167
+ *
4168
+ * Deferring a row therefore now changes only that row. If the withholding is ever
4169
+ * wanted back, it belongs behind an explicit prop rather than as a side effect of
4170
+ * `deferred` — a prop that silently removes a different row is the kind of surprise this
4171
+ * comment exists to prevent.
2711
4172
  */
2712
4173
  deferred?: DeferredLine[];
2713
4174
  /**
@@ -2742,21 +4203,48 @@ export declare interface OrderSummaryProps {
2742
4203
  * An ordered list, because it is one: the rows have a sequence and a screen reader should
2743
4204
  * announce it as such.
2744
4205
  */
2745
- export declare function OrderTimeline({ progress, locale: localeProp }: OrderTimelineProps): JSX.Element;
4206
+ export declare function OrderTimeline({ progress, estimatedDelivery, locale: localeProp, }: OrderTimelineProps): JSX.Element;
2746
4207
 
2747
4208
  export declare interface OrderTimelineProps {
2748
- progress: OrderProgressEntry[];
4209
+ progress: readonly TimelineEntry[];
4210
+ /**
4211
+ * The delivery window, drawn under the last step while that step is still to come.
4212
+ *
4213
+ * Both frames put it there — "Sunday 27-30 Aug" under `Estimated delivery` — and it is
4214
+ * the only place either screen states it now that neither draws `order.headline`. A
4215
+ * window rather than a date, and advisory: it comes from the warehouse, and the design
4216
+ * writes it as a range precisely so it does not read as a promise of one day.
4217
+ */
4218
+ estimatedDelivery?: {
4219
+ from: string;
4220
+ to: string;
4221
+ };
2749
4222
  /** Overrides the provider's locale for the step dates. */
2750
4223
  locale?: string;
2751
4224
  }
2752
4225
 
2753
4226
  /**
2754
- * Order tracking (Figma `mobile/order/details`, ADR-0015).
4227
+ * Order tracking (Figma `order stats`, 5479:132209).
4228
+ *
4229
+ * One screen with three states, and the engine's `progress` is what draws them: the widget
4230
+ * says where the parcel is, and everything under it is the same for all three.
4231
+ *
4232
+ * The frame's first state carries a "Cancel order" button and its last offers a return,
4233
+ * and **both are ours since 21 Aug** (ADR-0024). Cancelling happens in place, through the
4234
+ * reason sheet at the foot of this file; a return is three screens, so "Return items"
4235
+ * navigates to them. Neither moves money: DAZN remain merchant of record, and what the
4236
+ * engine records is a request handed on.
4237
+ *
4238
+ * Both are drawn on the ENGINE's say-so — `can_cancel` is its dispatch cut-off,
4239
+ * `can_return` its returns window. Neither is a status this screen can infer, and it does
4240
+ * not try.
4241
+ *
4242
+ * "Contact support" is different again: the form behind it is DAZN's, but the row has
4243
+ * somewhere to go without them wiring anything, because pressing it raises
4244
+ * `support_requested`.
2755
4245
  *
2756
- * Read-only by design. Cancellation and refunds remain DAZN's under ADR-0008, so the
2757
- * design's "Cancel order" and "Return items" buttons are deliberately not here: a control
2758
- * that cannot complete is worse than an absent one, and both need a contract from DAZN
2759
- * before they can do anything.
4246
+ * Below the widget this is the confirmation screen: the same rows, the same two cards, the
4247
+ * same components (`OrderReceipt`).
2760
4248
  */
2761
4249
  export declare function OrderTrackingView(props: OrderTrackingViewProps): JSX.Element;
2762
4250
 
@@ -2765,6 +4253,45 @@ export declare interface OrderTrackingViewProps {
2765
4253
  orderRef: string;
2766
4254
  /** Overrides the provider's locale for dates. */
2767
4255
  locale?: string;
4256
+ /**
4257
+ * Open the return flow.
4258
+ *
4259
+ * **Optional now, and it was once required.** Returns were DAZN's under ADR-0008, so
4260
+ * this used to be the only way the row could appear: a control that cannot complete is
4261
+ * worse than an absent one. ADR-0024 gave us the flow — `POST /v1/orders/{ref}/returns`
4262
+ * and the three screens behind it — so the default is no longer "nothing happens".
4263
+ *
4264
+ * It is still the seam, because the flow is three SCREENS and only the host knows where
4265
+ * its routes are — the same reason `OrderListView` takes `onOpenOrder` rather than
4266
+ * navigating itself. What changed is what the handler leads to: mount `ReturnFlowView`
4267
+ * with this order's reference and the whole flow is there.
4268
+ *
4269
+ * Without it the control is not drawn. The SDK will not offer a button whose destination
4270
+ * does not exist, and that has not changed either.
4271
+ */
4272
+ onStartReturn?: () => void;
4273
+ /**
4274
+ * Called once the fan has confirmed a cancellation and the engine has accepted it,
4275
+ * with the order as it now stands. The screen redraws itself either way; this is for a
4276
+ * host that wants to react — refresh a list, close a sheet, send an analytics event.
4277
+ */
4278
+ onCancelled?: (order: OrderDetail) => void;
4279
+ /**
4280
+ * The cancelled screen's "Reorder". Omit it and no button renders.
4281
+ *
4282
+ * The host's, because it means "put these items back in a cart and go somewhere", and
4283
+ * only they know where that is. We raise `reorder_requested` regardless.
4284
+ */
4285
+ onReorder?: () => void;
4286
+ /**
4287
+ * The block's second row, which is always drawn under a delivered order.
4288
+ *
4289
+ * **The Contact Support form is DAZN's**, so the row hands off rather than opening
4290
+ * anything of ours: it raises `support_requested` with the reference, and calls this
4291
+ * handler as well when there is one. Same terms as the checkout CTA, which is likewise
4292
+ * always drawn and likewise ends in an event.
4293
+ */
4294
+ onContactSupport?: () => void;
2768
4295
  }
2769
4296
 
2770
4297
  /** PCP hero — category title and tagline read over a full-screen lifestyle image. */
@@ -2976,21 +4503,69 @@ declare const Product: z.ZodObject<{
2976
4503
  */
2977
4504
  size_guide: z.ZodOptional<z.ZodObject<{
2978
4505
  title: z.ZodString;
2979
- /** Column headings for `rows`, e.g. `['Size', 'Chest (cm)', 'Length (cm)']`. */
4506
+ /** The fit this chart is for, e.g. "Oversized hoodies and zip-ups · Unisex". */
4507
+ subtitle: z.ZodOptional<z.ZodString>;
4508
+ /**
4509
+ * Column headings for `rows`, e.g. `['Size', 'Chest', 'Length']`.
4510
+ *
4511
+ * Bare nouns, with no unit in the heading: the unit belongs to the whole chart and is
4512
+ * named by `unit`, so that a consumer converting to the other unit does not leave
4513
+ * "Chest (cm)" written above a column of inches.
4514
+ */
2980
4515
  columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2981
4516
  /** One row per size; each row's length matches `columns`. */
2982
4517
  rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
4518
+ /**
4519
+ * The unit `rows` are written in.
4520
+ *
4521
+ * Absent means the numbers carry no declared unit — a consumer must then show them as
4522
+ * they are and offer no conversion, because it has nothing to convert from.
4523
+ */
4524
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
4525
+ /** The line under the table, e.g. "All measurements are taken from the garment laid flat, not from the body." */
4526
+ note: z.ZodOptional<z.ZodString>;
4527
+ /** The "How to measure" list. Absent/empty = the section is not drawn. */
4528
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
4529
+ /** e.g. "Chest width". */
4530
+ label: z.ZodString;
4531
+ /** e.g. "Measured 2.5 cm below the armhole, garment flat." */
4532
+ description: z.ZodString;
4533
+ }, "strip", z.ZodTypeAny, {
4534
+ label: string;
4535
+ description: string;
4536
+ }, {
4537
+ label: string;
4538
+ description: string;
4539
+ }>, "many">>;
4540
+ /** The fabric line, e.g. "100% cotton · 220–240 GSM · Oversized fit · Sizes XS–XL". */
4541
+ fabric: z.ZodOptional<z.ZodString>;
2983
4542
  /** Free-text fit guidance, e.g. "Relaxed, slightly oversized fit". */
2984
4543
  notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
2985
4544
  }, "strip", z.ZodTypeAny, {
2986
4545
  title: string;
4546
+ subtitle?: string | undefined;
2987
4547
  columns?: string[] | undefined;
2988
4548
  rows?: string[][] | undefined;
4549
+ unit?: "cm" | "in" | undefined;
4550
+ note?: string | undefined;
4551
+ measurements?: {
4552
+ label: string;
4553
+ description: string;
4554
+ }[] | undefined;
4555
+ fabric?: string | undefined;
2989
4556
  notes?: string[] | undefined;
2990
4557
  }, {
2991
4558
  title: string;
4559
+ subtitle?: string | undefined;
2992
4560
  columns?: string[] | undefined;
2993
4561
  rows?: string[][] | undefined;
4562
+ unit?: "cm" | "in" | undefined;
4563
+ note?: string | undefined;
4564
+ measurements?: {
4565
+ label: string;
4566
+ description: string;
4567
+ }[] | undefined;
4568
+ fabric?: string | undefined;
2994
4569
  notes?: string[] | undefined;
2995
4570
  }>>;
2996
4571
  }, "strip", z.ZodTypeAny, {
@@ -3009,11 +4584,11 @@ declare const Product: z.ZodObject<{
3009
4584
  image?: string | undefined;
3010
4585
  available?: number | undefined;
3011
4586
  }[];
4587
+ description?: string | undefined;
3012
4588
  compare_at?: {
3013
4589
  amount: number;
3014
4590
  currency: string;
3015
4591
  } | undefined;
3016
- description?: string | undefined;
3017
4592
  badges?: string[] | undefined;
3018
4593
  promo?: {
3019
4594
  message: string;
@@ -3021,8 +4596,16 @@ declare const Product: z.ZodObject<{
3021
4596
  } | undefined;
3022
4597
  size_guide?: {
3023
4598
  title: string;
4599
+ subtitle?: string | undefined;
3024
4600
  columns?: string[] | undefined;
3025
4601
  rows?: string[][] | undefined;
4602
+ unit?: "cm" | "in" | undefined;
4603
+ note?: string | undefined;
4604
+ measurements?: {
4605
+ label: string;
4606
+ description: string;
4607
+ }[] | undefined;
4608
+ fabric?: string | undefined;
3026
4609
  notes?: string[] | undefined;
3027
4610
  } | undefined;
3028
4611
  }, {
@@ -3041,11 +4624,11 @@ declare const Product: z.ZodObject<{
3041
4624
  image?: string | undefined;
3042
4625
  available?: number | undefined;
3043
4626
  }[];
4627
+ description?: string | undefined;
3044
4628
  compare_at?: {
3045
4629
  amount: number;
3046
4630
  currency: string;
3047
4631
  } | undefined;
3048
- description?: string | undefined;
3049
4632
  badges?: string[] | undefined;
3050
4633
  promo?: {
3051
4634
  message: string;
@@ -3053,8 +4636,16 @@ declare const Product: z.ZodObject<{
3053
4636
  } | undefined;
3054
4637
  size_guide?: {
3055
4638
  title: string;
4639
+ subtitle?: string | undefined;
3056
4640
  columns?: string[] | undefined;
3057
4641
  rows?: string[][] | undefined;
4642
+ unit?: "cm" | "in" | undefined;
4643
+ note?: string | undefined;
4644
+ measurements?: {
4645
+ label: string;
4646
+ description: string;
4647
+ }[] | undefined;
4648
+ fabric?: string | undefined;
3058
4649
  notes?: string[] | undefined;
3059
4650
  } | undefined;
3060
4651
  }>;
@@ -3083,6 +4674,11 @@ export declare interface ProductDetailProps {
3083
4674
  * PDP "Product details" accordion (mobile/pdp/details). Collapsed clamps the body to
3084
4675
  * three lines with a more/less toggle. Only renders when the catalogue provides a
3085
4676
  * description — no placeholder copy is invented.
4677
+ *
4678
+ * The toggle appears only when the clamp is actually hiding something. It used to render
4679
+ * for every description, so a two-line one offered a "more" that expanded to the same two
4680
+ * lines and a "Less" that collapsed to them again — reported from staging, where most
4681
+ * products have a short description.
3086
4682
  */
3087
4683
  export declare function ProductDetails({ description }: ProductDetailsProps): JSX.Element | null;
3088
4684
 
@@ -3091,6 +4687,29 @@ export declare interface ProductDetailsProps {
3091
4687
  description: string;
3092
4688
  }
3093
4689
 
4690
+ /**
4691
+ * One product as its own gallery (Figma `mobile/limited edition`, 5304:77067).
4692
+ *
4693
+ * **The third shape a product takes on a category page**, and the reason it is its own
4694
+ * component rather than a variant of the other two: `featured` is one product as one large
4695
+ * card, a rail is many products each with their own name and price, and this is one
4696
+ * product whose *pictures* fill the row — so there is a single name and price under it,
4697
+ * not one per card.
4698
+ *
4699
+ * The images are the product's own `media`. There is no second list to keep in step with
4700
+ * the PDP, and a garment reshot in one place is reshot everywhere.
4701
+ *
4702
+ * Figma instances it under two different headings — "Limited edition" on Jackets, "Summer
4703
+ * sets" on Seasonal — so the heading is content and never a constant here.
4704
+ */
4705
+ export declare function ProductGallery({ title, product }: ProductGalleryProps): JSX.Element;
4706
+
4707
+ export declare interface ProductGalleryProps {
4708
+ /** The heading above the row — "Limited edition", "Summer sets". */
4709
+ title: string;
4710
+ product: Product;
4711
+ }
4712
+
3094
4713
  /**
3095
4714
  * PLP grid with cursor-based infinite scroll and a chip FilterBar.
3096
4715
  *
@@ -3233,9 +4852,10 @@ export declare function PromoBanner({ promo }: {
3233
4852
  *
3234
4853
  * When the cap is reached the reason is stated inline rather than the control simply
3235
4854
  * going dead — a disabled `+` with no explanation reads as a bug, and the fan cannot
3236
- * tell "we have no more" from "this is broken".
4855
+ * tell "we have no more" from "this is broken". A caller that already says it passes
4856
+ * {@link QtyStepperProps.capDescribedBy} and gets the wiring without the second copy.
3237
4857
  */
3238
- export declare function QtyStepper({ qty, max, onChange, onRemove, disabled }: QtyStepperProps): JSX.Element;
4858
+ export declare function QtyStepper({ qty, max, onChange, onRemove, disabled, capDescribedBy, }: QtyStepperProps): JSX.Element;
3239
4859
 
3240
4860
  export declare interface QtyStepperProps {
3241
4861
  qty: number;
@@ -3245,6 +4865,18 @@ export declare interface QtyStepperProps {
3245
4865
  /** Called when decrementing from 1 (the decrement becomes a delete). */
3246
4866
  onRemove?: () => void;
3247
4867
  disabled?: boolean;
4868
+ /**
4869
+ * Id of an element that already explains the cap, drawn by the caller.
4870
+ *
4871
+ * Pass this when the surrounding screen states the stock itself — the cart line draws
4872
+ * Figma's `Only N left` label under the whole line, and its out-of-stock line scrims the
4873
+ * thumbnail. Given one, the stepper points `aria-describedby` at it and renders no
4874
+ * message of its own, so the two can never say the same thing twice or disagree.
4875
+ *
4876
+ * Without it the stepper explains its own dead `+`, which is the standalone behaviour
4877
+ * and the reason the message exists at all.
4878
+ */
4879
+ capDescribedBy?: string;
3248
4880
  }
3249
4881
 
3250
4882
  /**
@@ -3272,6 +4904,64 @@ export declare interface RailCarouselProps {
3272
4904
  inset?: boolean;
3273
4905
  }
3274
4906
 
4907
+ export declare interface ReasonOption<T extends string> {
4908
+ value: T;
4909
+ label: string;
4910
+ }
4911
+
4912
+ /**
4913
+ * "Pick one reason, then confirm" — Figma `Reason for cancelling` (4632:17129) and
4914
+ * `Reason for return`.
4915
+ *
4916
+ * One component for both, because they are one component in the file: the same sheet, the
4917
+ * same rows, the same footer, differing only in their title, their options and the word on
4918
+ * the button. Building two would be two things to keep in step.
4919
+ *
4920
+ * **The confirm button starts disabled and the sheet does not preselect anything.** A
4921
+ * reason is the fan's statement about their own order, and a default would put words in
4922
+ * their mouth that the first tap then submits.
4923
+ */
4924
+ export declare function ReasonSheet<T extends string>({ title, options, ctaLabel, selected, onConfirm, onClose, closeLabel, busy, error, }: ReasonSheetProps<T>): JSX.Element;
4925
+
4926
+ export declare interface ReasonSheetProps<T extends string> {
4927
+ title: string;
4928
+ options: readonly ReasonOption<T>[];
4929
+ /** The confirm button's label — "Cancel order" on one sheet, "Select" on the other. */
4930
+ ctaLabel: string;
4931
+ /** Pre-selected value, for a sheet reopened on a line that already has a reason. */
4932
+ selected?: T;
4933
+ onConfirm: (value: T) => void;
4934
+ onClose: () => void;
4935
+ /** What the close control is called to assistive technology. */
4936
+ closeLabel: string;
4937
+ /** Marks the confirm button busy while the request is in flight. */
4938
+ busy?: boolean;
4939
+ /**
4940
+ * A failure from the action this sheet confirms, shown above the button.
4941
+ *
4942
+ * On the sheet rather than replacing the screen behind it: the order is still fine, it
4943
+ * is the request that failed, and the fan's next move is to press the same button again.
4944
+ */
4945
+ error?: string;
4946
+ }
4947
+
4948
+ /**
4949
+ * `POST /v1/orders/{order_ref}/cancellation`
4950
+ *
4951
+ * The whole order. Figma offers no per-line cancel and neither does this: the sheet has
4952
+ * one reason and one button, and a partial cancellation the fan cannot express is not a
4953
+ * shape worth carrying.
4954
+ */
4955
+ declare const RequestCancellationRequest: z.ZodObject<{
4956
+ reason: z.ZodEnum<["changed_my_mind", "ordered_by_mistake", "delivery_too_long"]>;
4957
+ }, "strict", z.ZodTypeAny, {
4958
+ reason: "changed_my_mind" | "ordered_by_mistake" | "delivery_too_long";
4959
+ }, {
4960
+ reason: "changed_my_mind" | "ordered_by_mistake" | "delivery_too_long";
4961
+ }>;
4962
+
4963
+ declare type RequestCancellationRequest = z.infer<typeof RequestCancellationRequest>;
4964
+
3275
4965
  /**
3276
4966
  * Resolve an asset path against the host-configured asset base.
3277
4967
  *
@@ -3297,6 +4987,283 @@ export declare function resolveAssetUrl(src: string, base?: string): string;
3297
4987
  */
3298
4988
  export declare function resolveSku(variants: ProductVariant[], size: string | null, colour: string | null): string | null;
3299
4989
 
4990
+ /**
4991
+ * The reasons the frame offers, in the frame's order.
4992
+ *
4993
+ * Ordered by how often a fan picks them rather than alphabetically, which is the design's
4994
+ * choice and not ours to re-sort: the two sizing reasons lead because sizing is what most
4995
+ * clothing returns are about.
4996
+ */
4997
+ export declare const RETURN_REASONS: readonly ReasonOption<FanReturnReason>[];
4998
+
4999
+ /**
5000
+ * `GET /v1/returns/{return_ref}` — one return in full.
5001
+ *
5002
+ * `label_url` is **opaque and short-lived**, like carrier tracking: render it as a
5003
+ * download, never rebuild it. Absent means the label is not ready, and the screen says so
5004
+ * rather than offering a button that 404s — the frame's own copy promises the PDF by email
5005
+ * as well, which is the path that does not depend on this link still working.
5006
+ */
5007
+ declare const ReturnDetail: z.ZodObject<{
5008
+ return_ref: z.ZodString;
5009
+ order_ref: z.ZodBranded<z.ZodString, "OrderRef">;
5010
+ status: z.ZodEnum<["reported", "package_received", "completed"]>;
5011
+ reported_at: z.ZodString;
5012
+ progress: z.ZodArray<z.ZodObject<{
5013
+ step: z.ZodEnum<["reported", "package_received", "completed"]>;
5014
+ label: z.ZodString;
5015
+ /** When the step completed. Absent = not reached yet, never a projected date. */
5016
+ at: z.ZodOptional<z.ZodString>;
5017
+ current: z.ZodBoolean;
5018
+ }, "strip", z.ZodTypeAny, {
5019
+ label: string;
5020
+ step: "reported" | "package_received" | "completed";
5021
+ current: boolean;
5022
+ at?: string | undefined;
5023
+ }, {
5024
+ label: string;
5025
+ step: "reported" | "package_received" | "completed";
5026
+ current: boolean;
5027
+ at?: string | undefined;
5028
+ }>, "many">;
5029
+ items: z.ZodArray<z.ZodObject<{
5030
+ line_ref: z.ZodString;
5031
+ sku: z.ZodString;
5032
+ qty: z.ZodNumber;
5033
+ reason: z.ZodEnum<["too_large", "too_small", "arrived_too_late", "item_damaged", "not_as_described", "changed_my_mind"]>;
5034
+ unit_price: z.ZodObject<{
5035
+ amount: z.ZodNumber;
5036
+ currency: z.ZodString;
5037
+ }, "strict", z.ZodTypeAny, {
5038
+ amount: number;
5039
+ currency: string;
5040
+ }, {
5041
+ amount: number;
5042
+ currency: string;
5043
+ }>;
5044
+ compare_at_unit_price: z.ZodOptional<z.ZodObject<{
5045
+ amount: z.ZodNumber;
5046
+ currency: z.ZodString;
5047
+ }, "strict", z.ZodTypeAny, {
5048
+ amount: number;
5049
+ currency: string;
5050
+ }, {
5051
+ amount: number;
5052
+ currency: string;
5053
+ }>>;
5054
+ title: z.ZodOptional<z.ZodString>;
5055
+ image: z.ZodOptional<z.ZodString>;
5056
+ attributes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
5057
+ }, "strip", z.ZodTypeAny, {
5058
+ sku: string;
5059
+ qty: number;
5060
+ unit_price: {
5061
+ amount: number;
5062
+ currency: string;
5063
+ };
5064
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5065
+ line_ref: string;
5066
+ compare_at_unit_price?: {
5067
+ amount: number;
5068
+ currency: string;
5069
+ } | undefined;
5070
+ title?: string | undefined;
5071
+ image?: string | undefined;
5072
+ attributes?: Record<string, string> | undefined;
5073
+ }, {
5074
+ sku: string;
5075
+ qty: number;
5076
+ unit_price: {
5077
+ amount: number;
5078
+ currency: string;
5079
+ };
5080
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5081
+ line_ref: string;
5082
+ compare_at_unit_price?: {
5083
+ amount: number;
5084
+ currency: string;
5085
+ } | undefined;
5086
+ title?: string | undefined;
5087
+ image?: string | undefined;
5088
+ attributes?: Record<string, string> | undefined;
5089
+ }>, "many">;
5090
+ label_url: z.ZodOptional<z.ZodString>;
5091
+ /**
5092
+ * Where the label PDF was sent, for the frame's "You'll receive a shipping label PDF to
5093
+ * your email as well" line. PII, like `OrderDetail.email`: render it, never log it.
5094
+ */
5095
+ label_email: z.ZodOptional<z.ZodString>;
5096
+ }, "strip", z.ZodTypeAny, {
5097
+ status: "reported" | "package_received" | "completed";
5098
+ items: {
5099
+ sku: string;
5100
+ qty: number;
5101
+ unit_price: {
5102
+ amount: number;
5103
+ currency: string;
5104
+ };
5105
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5106
+ line_ref: string;
5107
+ compare_at_unit_price?: {
5108
+ amount: number;
5109
+ currency: string;
5110
+ } | undefined;
5111
+ title?: string | undefined;
5112
+ image?: string | undefined;
5113
+ attributes?: Record<string, string> | undefined;
5114
+ }[];
5115
+ order_ref: string & z.BRAND<"OrderRef">;
5116
+ return_ref: string;
5117
+ reported_at: string;
5118
+ progress: {
5119
+ label: string;
5120
+ step: "reported" | "package_received" | "completed";
5121
+ current: boolean;
5122
+ at?: string | undefined;
5123
+ }[];
5124
+ label_url?: string | undefined;
5125
+ label_email?: string | undefined;
5126
+ }, {
5127
+ status: "reported" | "package_received" | "completed";
5128
+ items: {
5129
+ sku: string;
5130
+ qty: number;
5131
+ unit_price: {
5132
+ amount: number;
5133
+ currency: string;
5134
+ };
5135
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5136
+ line_ref: string;
5137
+ compare_at_unit_price?: {
5138
+ amount: number;
5139
+ currency: string;
5140
+ } | undefined;
5141
+ title?: string | undefined;
5142
+ image?: string | undefined;
5143
+ attributes?: Record<string, string> | undefined;
5144
+ }[];
5145
+ order_ref: string;
5146
+ return_ref: string;
5147
+ reported_at: string;
5148
+ progress: {
5149
+ label: string;
5150
+ step: "reported" | "package_received" | "completed";
5151
+ current: boolean;
5152
+ at?: string | undefined;
5153
+ }[];
5154
+ label_url?: string | undefined;
5155
+ label_email?: string | undefined;
5156
+ }>;
5157
+
5158
+ declare type ReturnDetail = z.infer<typeof ReturnDetail>;
5159
+
5160
+ /**
5161
+ * The return flow, end to end — Figma `Return flow` (4551:32294).
5162
+ *
5163
+ * **This is the piece that was missing.** `ReturnItemsView`, `ReturnLabelView` and
5164
+ * `ReturnTrackingView` are presentational: they take an order or a return and draw it.
5165
+ * Something has to load the order, post what the fan chose, and move between the three,
5166
+ * and until now nothing did — the screens were exported and nothing in this package or in
5167
+ * the app mounted them, so a flow that was built could not be reached.
5168
+ *
5169
+ * The shape follows `OrderTrackingView`: a container that owns the fetch and the state,
5170
+ * around views that own the drawing. Same reason as there — a screen that loads itself is
5171
+ * one a host can mount from a route with nothing but a reference.
5172
+ *
5173
+ * **It settles no money and it is not a refund** (ADR-0024). It records goods coming back
5174
+ * so the warehouse can expect them; DAZN remain merchant of record and tell us about the
5175
+ * refund afterwards through the inbound event.
5176
+ */
5177
+ export declare function ReturnFlowView(props: ReturnFlowViewProps): JSX.Element;
5178
+
5179
+ export declare interface ReturnFlowViewProps {
5180
+ /** DAZN's order reference. Required to START a return. */
5181
+ orderRef?: string;
5182
+ /**
5183
+ * An existing return, e.g. `ord_GB26081021-R1`. Given one, the flow opens on its
5184
+ * progress instead of on the item picker — which is what the "Return in progress" row
5185
+ * on the order screen leads to.
5186
+ */
5187
+ returnRef?: string;
5188
+ /** The label screen's "Done". Where it goes is the host's. */
5189
+ onDone?: () => void;
5190
+ /** Overrides the provider's locale for dates. */
5191
+ locale?: string;
5192
+ }
5193
+
5194
+ /**
5195
+ * "What do you want to return?" — Figma `Return flow` (4551:32294), screens 2 to 4.
5196
+ *
5197
+ * **A line is returnable only once it has a reason**, which is why the reason lives inside
5198
+ * the card rather than being asked once for the whole return: the frame puts a `Select
5199
+ * reason` control in every row, and a fan sending back two garments for two different
5200
+ * reasons is the ordinary case rather than an edge one.
5201
+ *
5202
+ * Quantity is not asked for. The frame offers no stepper, so a selected line returns in
5203
+ * full — and inventing a control the design does not draw would be the wrong way to
5204
+ * discover we needed one.
5205
+ */
5206
+ export declare function ReturnItemsView({ order, onSubmit, busy }: ReturnItemsViewProps): JSX.Element;
5207
+
5208
+ export declare interface ReturnItemsViewProps {
5209
+ order: OrderDetail;
5210
+ /** Called with the lines the fan chose. The caller posts them and shows the label. */
5211
+ onSubmit: (items: ReturnRequestItem[]) => void;
5212
+ /** Set while the request is in flight. */
5213
+ busy?: boolean;
5214
+ }
5215
+
5216
+ /**
5217
+ * "We've generated your return label" — Figma `Return flow` (4551:32294), screen 5.
5218
+ *
5219
+ * Two numbered steps and a download. The label is offered as a link rather than a
5220
+ * scripted download because the sheet a fan sees this in may be a webview, and a
5221
+ * script-driven save is exactly what a webview blocks.
5222
+ *
5223
+ * **The button is only drawn when there is a label.** The frame promises the PDF by email
5224
+ * as well, and that promise is the one that survives a link this screen cannot produce —
5225
+ * so when `label_url` is absent the email line still tells the fan where to look, and no
5226
+ * button is offered that would 404.
5227
+ */
5228
+ export declare function ReturnLabelView({ ret, onDone }: ReturnLabelViewProps): JSX.Element;
5229
+
5230
+ export declare interface ReturnLabelViewProps {
5231
+ ret: ReturnDetail;
5232
+ /** The frame's "Done". Where it goes is the host's — see `OrderConfirmationView`. */
5233
+ onDone?: () => void;
5234
+ }
5235
+
5236
+ /**
5237
+ * One line the fan is sending back.
5238
+ *
5239
+ * `qty` rather than a flag, because a line of three can have one returned, and `reason`
5240
+ * per line rather than per return, because the screen asks for it per line — the frame
5241
+ * puts a "Select reason" row inside each item card.
5242
+ */
5243
+ declare const ReturnRequestItem: z.ZodObject<{
5244
+ line_ref: z.ZodString;
5245
+ qty: z.ZodNumber;
5246
+ reason: z.ZodEnum<["too_large", "too_small", "arrived_too_late", "item_damaged", "not_as_described", "changed_my_mind"]>;
5247
+ }, "strip", z.ZodTypeAny, {
5248
+ qty: number;
5249
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5250
+ line_ref: string;
5251
+ }, {
5252
+ qty: number;
5253
+ reason: "too_small" | "changed_my_mind" | "too_large" | "arrived_too_late" | "item_damaged" | "not_as_described";
5254
+ line_ref: string;
5255
+ }>;
5256
+
5257
+ declare type ReturnRequestItem = z.infer<typeof ReturnRequestItem>;
5258
+
5259
+ export declare function ReturnTrackingView({ ret, locale: localeProp }: ReturnTrackingViewProps): JSX.Element;
5260
+
5261
+ export declare interface ReturnTrackingViewProps {
5262
+ ret: ReturnDetail;
5263
+ /** Overrides the provider's locale for the reported date. */
5264
+ locale?: string;
5265
+ }
5266
+
3300
5267
  declare interface Review {
3301
5268
  quote: string;
3302
5269
  author: string;
@@ -3363,6 +5330,23 @@ declare const SessionExchangeRequest: z.ZodObject<{
3363
5330
 
3364
5331
  declare type SessionExchangeRequest = z.infer<typeof SessionExchangeRequest>;
3365
5332
 
5333
+ /**
5334
+ * The design's `.sheet-header` (404:5379): an empty 48 slot, the drag handle, and a close
5335
+ * disc — 48 tall.
5336
+ *
5337
+ * Three slots rather than two, so the handle is centred on the SHEET rather than on what
5338
+ * is left of it once the close control has taken its corner. Drawn once here because the
5339
+ * size guide and both reason sheets instance the same component, and a second hand-built
5340
+ * copy is a second one to drift.
5341
+ */
5342
+ export declare function SheetHeader({ onClose, closeLabel }: SheetHeaderProps): JSX.Element;
5343
+
5344
+ export declare interface SheetHeaderProps {
5345
+ onClose: () => void;
5346
+ /** What the close control is called to assistive technology, e.g. "Close size guide". */
5347
+ closeLabel: string;
5348
+ }
5349
+
3366
5350
  /**
3367
5351
  * PDP shipping & returns block (mobile/pdp/shipping-info). Static informational copy —
3368
5352
  * no free-shipping threshold (per design). The shopper picks the delivery tier at
@@ -3435,6 +5419,48 @@ export declare type ShopEvent = {
3435
5419
  | {
3436
5420
  type: 'stock_alert_requested';
3437
5421
  sku: string;
5422
+ }
5423
+ /**
5424
+ * A fan asked for help with a delivered order (0.17.2).
5425
+ *
5426
+ * **The Contact Support form is DAZN's**, so this is a hand-off rather than a step in a
5427
+ * flow we own: the fan pressed the row on the order screen, and where they go next is
5428
+ * the host's to decide. Same shape as `checkout_handoff` — we know the moment and the
5429
+ * order, and nothing after it.
5430
+ */
5431
+ | {
5432
+ type: 'support_requested';
5433
+ orderRef: string;
5434
+ }
5435
+ /**
5436
+ * The fan confirmed a cancellation and the engine accepted it (ADR-0024).
5437
+ *
5438
+ * Raised after the write succeeds, never on the tap: this is a statement that an order
5439
+ * has been cancelled, and a host acting on it — refreshing a list, telling analytics —
5440
+ * must not act on one that then failed.
5441
+ */
5442
+ | {
5443
+ type: 'order_cancellation_requested';
5444
+ orderRef: string;
5445
+ reason: string;
5446
+ }
5447
+ /** "Reorder" on a cancelled order. The host owns where that goes; we only announce it. */
5448
+ | {
5449
+ type: 'reorder_requested';
5450
+ orderRef: string;
5451
+ }
5452
+ /**
5453
+ * A return has been RECORDED — the engine accepted it and minted the reference.
5454
+ *
5455
+ * Raised after the write, like the cancellation above, and for the same reason: a host
5456
+ * counting returns must not count one the engine refused. It is not a refund and must
5457
+ * not be treated as one; DAZN remain merchant of record and say what is paid back
5458
+ * (ADR-0024).
5459
+ */
5460
+ | {
5461
+ type: 'return_requested';
5462
+ orderRef: string;
5463
+ returnRef: string;
3438
5464
  } | {
3439
5465
  type: 'checkout_handoff';
3440
5466
  cartId: string;
@@ -3736,13 +5762,18 @@ export declare interface ShopSurfaceProps extends Omit<ComponentPropsWithoutRef<
3736
5762
  export declare type ShopTone = 'dark' | 'light';
3737
5763
 
3738
5764
  /**
3739
- * Category-wide sizing help, shown in the PDP "Size guide" overlay.
5765
+ * Sizing help, shown in the PDP "Size guide" overlay (Figma `size-guide`, 4882:58365).
5766
+ *
5767
+ * **A guide belongs to a fit, not to a category.** The design's three variants are
5768
+ * "Oversized hoodies and zip-ups", "Oversized t-shirts" and "Slim fit t-shirts" — two of
5769
+ * which are the same category cut two ways, so a chart keyed by category cannot express
5770
+ * them. `subtitle` is the fit's own name and is what a fan reads to check they are
5771
+ * looking at the right chart.
3740
5772
  *
3741
5773
  * `rows` is a measurement table (one row per size). It is **optional and may be empty**:
3742
- * DAZN has not supplied a measurement chart, and garment measurements are the kind of
3743
- * value that must never be guessed a fabricated chest measurement sends a fan the
3744
- * wrong size. A guide with `notes` but no `rows` is valid and renders as fit guidance
3745
- * alone; a consumer must not synthesise the missing numbers.
5774
+ * garment measurements are the kind of value that must never be guessed a fabricated
5775
+ * chest measurement sends a fan the wrong size. A guide with notes but no `rows` is valid
5776
+ * and renders as fit guidance alone; a consumer must not synthesise the missing numbers.
3746
5777
  *
3747
5778
  * The array fields are `.optional()` rather than `.default([])` deliberately. A zod
3748
5779
  * default makes the schema's input and output types diverge, and this package ships two
@@ -3752,35 +5783,86 @@ export declare type ShopTone = 'dark' | 'light';
3752
5783
  */
3753
5784
  declare const SizeGuide: z.ZodObject<{
3754
5785
  title: z.ZodString;
3755
- /** Column headings for `rows`, e.g. `['Size', 'Chest (cm)', 'Length (cm)']`. */
5786
+ /** The fit this chart is for, e.g. "Oversized hoodies and zip-ups · Unisex". */
5787
+ subtitle: z.ZodOptional<z.ZodString>;
5788
+ /**
5789
+ * Column headings for `rows`, e.g. `['Size', 'Chest', 'Length']`.
5790
+ *
5791
+ * Bare nouns, with no unit in the heading: the unit belongs to the whole chart and is
5792
+ * named by `unit`, so that a consumer converting to the other unit does not leave
5793
+ * "Chest (cm)" written above a column of inches.
5794
+ */
3756
5795
  columns: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3757
5796
  /** One row per size; each row's length matches `columns`. */
3758
5797
  rows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString, "many">, "many">>;
5798
+ /**
5799
+ * The unit `rows` are written in.
5800
+ *
5801
+ * Absent means the numbers carry no declared unit — a consumer must then show them as
5802
+ * they are and offer no conversion, because it has nothing to convert from.
5803
+ */
5804
+ unit: z.ZodOptional<z.ZodEnum<["cm", "in"]>>;
5805
+ /** The line under the table, e.g. "All measurements are taken from the garment laid flat, not from the body." */
5806
+ note: z.ZodOptional<z.ZodString>;
5807
+ /** The "How to measure" list. Absent/empty = the section is not drawn. */
5808
+ measurements: z.ZodOptional<z.ZodArray<z.ZodObject<{
5809
+ /** e.g. "Chest width". */
5810
+ label: z.ZodString;
5811
+ /** e.g. "Measured 2.5 cm below the armhole, garment flat." */
5812
+ description: z.ZodString;
5813
+ }, "strip", z.ZodTypeAny, {
5814
+ label: string;
5815
+ description: string;
5816
+ }, {
5817
+ label: string;
5818
+ description: string;
5819
+ }>, "many">>;
5820
+ /** The fabric line, e.g. "100% cotton · 220–240 GSM · Oversized fit · Sizes XS–XL". */
5821
+ fabric: z.ZodOptional<z.ZodString>;
3759
5822
  /** Free-text fit guidance, e.g. "Relaxed, slightly oversized fit". */
3760
5823
  notes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
3761
5824
  }, "strip", z.ZodTypeAny, {
3762
5825
  title: string;
5826
+ subtitle?: string | undefined;
3763
5827
  columns?: string[] | undefined;
3764
5828
  rows?: string[][] | undefined;
5829
+ unit?: "cm" | "in" | undefined;
5830
+ note?: string | undefined;
5831
+ measurements?: {
5832
+ label: string;
5833
+ description: string;
5834
+ }[] | undefined;
5835
+ fabric?: string | undefined;
3765
5836
  notes?: string[] | undefined;
3766
5837
  }, {
3767
5838
  title: string;
5839
+ subtitle?: string | undefined;
3768
5840
  columns?: string[] | undefined;
3769
5841
  rows?: string[][] | undefined;
5842
+ unit?: "cm" | "in" | undefined;
5843
+ note?: string | undefined;
5844
+ measurements?: {
5845
+ label: string;
5846
+ description: string;
5847
+ }[] | undefined;
5848
+ fabric?: string | undefined;
3770
5849
  notes?: string[] | undefined;
3771
5850
  }>;
3772
5851
 
3773
5852
  declare type SizeGuide = z.infer<typeof SizeGuide>;
3774
5853
 
3775
5854
  /**
3776
- * The category-wide size-guide overlay (28 Jul kickoff: "a category-wide size guide
3777
- * overlay pop-up"), presented as a bottom sheet to match the other PDP overlays.
5855
+ * The PDP size guide (Figma `size-guide`, 4882:58365) a bottom sheet over the product,
5856
+ * opened from the "Size guide" row under the size chips.
3778
5857
  *
3779
- * Renders whatever the guide actually carries. DAZN has supplied **no measurement
3780
- * chart**, so today every guide has `notes` and no `rows`, and the table simply does not
3781
- * appear the component must never fabricate measurements to fill it, because a wrong
3782
- * chest figure sends a fan the wrong size. When the real chart arrives the table renders
3783
- * with no code change.
5858
+ * **It renders whatever the guide actually carries, and draws nothing it has not been
5859
+ * given.** No chart, no table; no `measurements`, no "How to measure"; no `fabric`, no
5860
+ * fabric line. A size guide is one of the few screens where filling a gap with something
5861
+ * plausible has a cost measured in returns, so every block here is conditional and none
5862
+ * of them has a fallback.
5863
+ *
5864
+ * The cm/inches control is the one place the sheet computes rather than renders, and it
5865
+ * only appears when the guide declares the unit its numbers are in — see `convert`.
3784
5866
  */
3785
5867
  export declare function SizeGuideSheet({ guide, onClose }: {
3786
5868
  guide: SizeGuide;
@@ -3912,13 +5994,13 @@ declare const SupportTicketRequest: z.ZodObject<{
3912
5994
  image_url: z.ZodOptional<z.ZodString>;
3913
5995
  }, "strict", z.ZodTypeAny, {
3914
5996
  email: string;
3915
- category: string;
3916
5997
  description: string;
5998
+ category: string;
3917
5999
  image_url?: string | undefined;
3918
6000
  }, {
3919
6001
  email: string;
3920
- category: string;
3921
6002
  description: string;
6003
+ category: string;
3922
6004
  image_url?: string | undefined;
3923
6005
  }>;
3924
6006
 
@@ -3926,6 +6008,22 @@ declare type SupportTicketRequest = z.infer<typeof SupportTicketRequest>;
3926
6008
 
3927
6009
  export declare function swatchColour(name: string): string;
3928
6010
 
6011
+ /**
6012
+ * One row, structurally.
6013
+ *
6014
+ * Deliberately not `OrderProgressEntry` itself. The return timeline (ADR-0024) is drawn
6015
+ * by the same Figma component with a different set of steps — reported, received,
6016
+ * completed — so its entries carry a different `step` enum and would not assign. Nothing
6017
+ * here interprets `step` beyond keying on it, so the widened type costs nothing and saves
6018
+ * a second copy of the timeline that would drift from this one.
6019
+ */
6020
+ declare interface TimelineEntry {
6021
+ step: string;
6022
+ label: string;
6023
+ at?: string;
6024
+ current: boolean;
6025
+ }
6026
+
3929
6027
  /** An optional inline action, e.g. the undo offered after removing a cart line. */
3930
6028
  export declare interface ToastAction {
3931
6029
  label: string;