@nok-integration/storefront-react 0.12.0 → 0.14.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.
@@ -47,6 +47,11 @@
47
47
  --color-state-text-success: #147e4a;
48
48
  --color-state-surface-success-soft: #def1e9;
49
49
  --color-state-surface-critical-default: #d12424;
50
+ /* semantic/state/text/critical + .../surface/critical/soft. Same hex as the surface
51
+ token above, and a separate token in DAZN's library: one paints a solid critical
52
+ surface, the other writes critical text on a pale one. Keep them apart. */
53
+ --color-state-text-critical: #d12424;
54
+ --color-state-surface-critical-soft: #f5e5e5;
50
55
  --color-state-text-warning: #ff9600;
51
56
  --color-state-surface-warning-soft: #fcf1e1;
52
57
 
@@ -1162,6 +1167,196 @@
1162
1167
  ._summaryCard_1eqkm_275 > :last-child {
1163
1168
  padding: 0 var(--space-16);
1164
1169
  }
1170
+ /*
1171
+ * Figma `mobile/order/status-badge` — 24px tall, 2px radius, 12px bold uppercase.
1172
+ * Squarer and tighter than the catalogue `Badge`, which is a pill; they are separate
1173
+ * components in the design system and stay separate here.
1174
+ */
1175
+ ._badge_ghd02_6 {
1176
+ display: inline-flex;
1177
+ align-items: center;
1178
+ justify-content: center;
1179
+ gap: var(--space-4);
1180
+ height: 24px;
1181
+ min-width: 20px;
1182
+ padding: var(--space-4) var(--space-6);
1183
+ border-radius: var(--radius-2);
1184
+ font-size: var(--type-trimmed-xs-size);
1185
+ line-height: 1;
1186
+ font-weight: var(--font-weight-bold);
1187
+ text-transform: uppercase;
1188
+ white-space: nowrap;
1189
+ }
1190
+
1191
+ ._progress_ghd02_22 {
1192
+ background: var(--color-state-surface-warning-soft);
1193
+ color: var(--color-state-text-warning);
1194
+ }
1195
+
1196
+ ._delivered_ghd02_27 {
1197
+ background: var(--color-state-surface-success-soft);
1198
+ color: var(--color-state-text-success);
1199
+ }
1200
+
1201
+ ._cancelled_ghd02_32 {
1202
+ background: var(--color-state-surface-critical-soft);
1203
+ color: var(--color-state-text-critical);
1204
+ }
1205
+ /* Figma `mobile/order/list` (4024:58594). */
1206
+ ._page_y686q_2 {
1207
+ list-style: none;
1208
+ margin: 0;
1209
+ display: flex;
1210
+ flex-direction: column;
1211
+ gap: var(--space-12);
1212
+ padding: var(--space-16) var(--space-16) var(--space-24);
1213
+ }
1214
+
1215
+ ._empty_y686q_11 {
1216
+ display: flex;
1217
+ align-items: center;
1218
+ justify-content: center;
1219
+ /* The design centres the empty state in the whole screen below the header, not at the
1220
+ top of an otherwise blank page. */
1221
+ min-height: 60dvh;
1222
+ }
1223
+
1224
+ /* `mobile/button`, the design's own dark CTA. Not the shared `Button` primary, whose
1225
+ shape is the cart's; this one is content-width with a 48px floor. */
1226
+ ._cta_y686q_22 {
1227
+ display: inline-flex;
1228
+ align-items: center;
1229
+ justify-content: center;
1230
+ gap: var(--space-8);
1231
+ min-height: 48px;
1232
+ padding: var(--space-12);
1233
+ border: 0;
1234
+ border-radius: var(--radius-8);
1235
+ background: var(--color-surface-max);
1236
+ color: var(--color-text-strong);
1237
+ font-family: inherit;
1238
+ font-size: var(--type-trimmed-md-size);
1239
+ font-weight: var(--font-weight-bold);
1240
+ line-height: 1;
1241
+ cursor: pointer;
1242
+ }
1243
+
1244
+ ._cta_y686q_22:focus-visible {
1245
+ outline: none;
1246
+ box-shadow: var(--focus-ring);
1247
+ }
1248
+
1249
+ ._card_y686q_45 {
1250
+ display: flex;
1251
+ flex-direction: column;
1252
+ gap: var(--space-24);
1253
+ width: 100%;
1254
+ padding: var(--space-16);
1255
+ border: 0;
1256
+ border-radius: var(--radius-12);
1257
+ background: var(--color-surface-soft);
1258
+ color: inherit;
1259
+ font-family: inherit;
1260
+ text-align: left;
1261
+ overflow: hidden;
1262
+ }
1263
+
1264
+ ._tappable_y686q_60 {
1265
+ cursor: pointer;
1266
+ }
1267
+
1268
+ ._tappable_y686q_60:focus-visible {
1269
+ outline: none;
1270
+ box-shadow: var(--focus-ring);
1271
+ }
1272
+
1273
+ ._head_y686q_69 {
1274
+ display: flex;
1275
+ align-items: flex-start;
1276
+ justify-content: space-between;
1277
+ gap: var(--space-8);
1278
+ width: 100%;
1279
+ }
1280
+
1281
+ ._heading_y686q_77 {
1282
+ display: flex;
1283
+ flex: 1 1 auto;
1284
+ flex-direction: column;
1285
+ gap: var(--space-8);
1286
+ min-width: 0;
1287
+ color: var(--color-text-default);
1288
+ }
1289
+
1290
+ ._title_y686q_86 {
1291
+ font-size: var(--type-heading-md-size);
1292
+ font-weight: var(--font-weight-bold);
1293
+ /* The frame's own 1.32, not the token's 1.25 — that value was set from a different
1294
+ screen and moving it would reflow every heading in the package. */
1295
+ line-height: 1.32;
1296
+ overflow: hidden;
1297
+ text-overflow: ellipsis;
1298
+ white-space: nowrap;
1299
+ }
1300
+
1301
+ ._date_y686q_97 {
1302
+ font-size: var(--type-trimmed-sm-size);
1303
+ line-height: 1;
1304
+ }
1305
+
1306
+ ._bottom_y686q_102 {
1307
+ display: flex;
1308
+ align-items: center;
1309
+ justify-content: space-between;
1310
+ gap: var(--space-8);
1311
+ width: 100%;
1312
+ }
1313
+
1314
+ ._strip_y686q_110 {
1315
+ display: flex;
1316
+ gap: var(--space-6);
1317
+ }
1318
+
1319
+ ._tile_y686q_115 {
1320
+ position: relative;
1321
+ flex: 0 0 56px;
1322
+ width: 56px;
1323
+ height: 56px;
1324
+ border-radius: var(--radius-6);
1325
+ overflow: hidden;
1326
+ background: var(--color-surface-subtle);
1327
+ }
1328
+
1329
+ ._image_y686q_125 {
1330
+ object-fit: cover;
1331
+ }
1332
+
1333
+ ._placeholder_y686q_129 {
1334
+ /* No picture resolved for any line. A flat tile keeps the row's rhythm rather than
1335
+ collapsing the strip and shifting the chevron. */
1336
+ background: var(--color-surface-subtle);
1337
+ }
1338
+
1339
+ /* The "+N" tile: the last thumbnail, dimmed, with the count over it. */
1340
+ ._more_y686q_136 {
1341
+ position: absolute;
1342
+ inset: 0;
1343
+ display: flex;
1344
+ align-items: center;
1345
+ justify-content: center;
1346
+ background: rgba(0, 0, 0, 0.54);
1347
+ color: #f9fafa;
1348
+ font-size: var(--type-trimmed-md-size);
1349
+ font-weight: var(--font-weight-bold);
1350
+ line-height: 1;
1351
+ }
1352
+
1353
+ ._chevron_y686q_149 {
1354
+ display: inline-flex;
1355
+ flex: 0 0 24px;
1356
+ width: 24px;
1357
+ height: 24px;
1358
+ color: var(--color-text-default);
1359
+ }
1165
1360
  /* 8 where Figma declares 12, for the reason set out on `.titlePrice` below: the gap sits
1166
1361
  against a text layer whose CSS line box carries leading that Figma's does not. */
1167
1362
  ._tile_1u9l8_3 {
@@ -1830,18 +2025,18 @@
1830
2025
  * left, and `.body` absorbs the slack so the bar is pushed onto the bottom edge on a short
1831
2026
  * cart and still sticks on a long one.
1832
2027
  */
1833
- ._surface_1t90m_15 {
2028
+ ._surface_1wfue_15 {
1834
2029
  display: flex;
1835
2030
  flex-direction: column;
1836
2031
  }
1837
2032
 
1838
- ._screen_1t90m_20 {
2033
+ ._screen_1wfue_20 {
1839
2034
  display: flex;
1840
2035
  flex-direction: column;
1841
2036
  flex: 1 1 auto;
1842
2037
  }
1843
2038
 
1844
- ._body_1t90m_12 {
2039
+ ._body_1wfue_12 {
1845
2040
  display: flex;
1846
2041
  flex-direction: column;
1847
2042
  gap: var(--space-20);
@@ -1849,26 +2044,26 @@
1849
2044
  flex: 1 1 auto;
1850
2045
  }
1851
2046
 
1852
- ._items_1t90m_34 {
2047
+ ._items_1wfue_34 {
1853
2048
  display: flex;
1854
2049
  flex-direction: column;
1855
2050
  gap: var(--space-20);
1856
2051
  }
1857
2052
 
1858
- ._sectionHeader_1t90m_40 {
2053
+ ._sectionHeader_1wfue_40 {
1859
2054
  display: flex;
1860
2055
  align-items: center;
1861
2056
  gap: var(--space-12);
1862
2057
  }
1863
2058
 
1864
- ._sectionTitle_1t90m_46 {
2059
+ ._sectionTitle_1wfue_46 {
1865
2060
  margin: 0;
1866
2061
  font-size: var(--type-heading-md-size);
1867
2062
  line-height: 1.38;
1868
2063
  font-weight: var(--font-weight-bold);
1869
2064
  }
1870
2065
 
1871
- ._count_1t90m_53 {
2066
+ ._count_1wfue_53 {
1872
2067
  display: inline-flex;
1873
2068
  align-items: center;
1874
2069
  justify-content: center;
@@ -1888,7 +2083,7 @@
1888
2083
  * every line, so the space under "Items" and the space between two lines are the same
1889
2084
  * measurement — 148 → 268 → 388, on 100px lines.
1890
2085
  */
1891
- ._lines_1t90m_73 {
2086
+ ._lines_1wfue_73 {
1892
2087
  list-style: none;
1893
2088
  margin: 0;
1894
2089
  padding: 0;
@@ -1897,15 +2092,6 @@
1897
2092
  gap: var(--space-20);
1898
2093
  }
1899
2094
 
1900
- ._lockNotice_1t90m_82 {
1901
- margin: 0;
1902
- padding: var(--space-12) var(--space-16);
1903
- background: var(--color-state-surface-warning-soft);
1904
- color: var(--color-text-default);
1905
- border-bottom: 1px solid var(--color-border-subtle);
1906
- font-size: 14px;
1907
- line-height: 1.4;
1908
- }
1909
2095
  ._gallery_h8m00_1 {
1910
2096
  position: relative;
1911
2097
  display: flex;
@@ -3302,3 +3488,157 @@
3302
3488
  font-variant-numeric: tabular-nums;
3303
3489
  pointer-events: none;
3304
3490
  }
3491
+ /*
3492
+ * Figma `Settings` (636:51006): the card is anchored under the 96px header, inset 16px on
3493
+ * each side, and sized by its content — not a bottom sheet, despite the frame's name.
3494
+ */
3495
+ ._overlay_lm5qk_5 {
3496
+ position: fixed;
3497
+ inset: 0;
3498
+ z-index: 900;
3499
+ display: flex;
3500
+ align-items: flex-start;
3501
+ justify-content: center;
3502
+ /* Clears the header the design draws this beneath. `env()` on top so a notch does not
3503
+ put the card under the status bar in the embed. */
3504
+ padding: calc(96px + env(safe-area-inset-top, 0px)) var(--space-16) var(--space-16);
3505
+ }
3506
+
3507
+ ._scrim_lm5qk_17 {
3508
+ position: absolute;
3509
+ inset: 0;
3510
+ background: rgba(8, 14, 18, 0.5);
3511
+ }
3512
+
3513
+ ._sheet_lm5qk_23 {
3514
+ position: relative;
3515
+ width: 100%;
3516
+ max-width: 343px;
3517
+ max-height: calc(100dvh - 128px);
3518
+ overflow-y: auto;
3519
+ background: var(--color-surface-default);
3520
+ border: 1px solid var(--color-border-transparent-soft);
3521
+ border-radius: var(--radius-12);
3522
+ display: flex;
3523
+ flex-direction: column;
3524
+ animation: _menu-in_lm5qk_1 160ms ease;
3525
+ }
3526
+
3527
+ @keyframes _menu-in_lm5qk_1 {
3528
+ from {
3529
+ opacity: 0;
3530
+ transform: translateY(-8px);
3531
+ }
3532
+ to {
3533
+ opacity: 1;
3534
+ transform: translateY(0);
3535
+ }
3536
+ }
3537
+
3538
+ @media (prefers-reduced-motion: reduce) {
3539
+ ._sheet_lm5qk_23 {
3540
+ animation: none;
3541
+ }
3542
+ }
3543
+
3544
+ /* `.sheet-header`: 48px, its own bottom rule, and the close control alone on the right.
3545
+ The left and centre slots the component defines are empty in this instance. */
3546
+ ._header_lm5qk_56 {
3547
+ display: flex;
3548
+ justify-content: flex-end;
3549
+ border-bottom: 1px solid var(--color-border-transparent-soft);
3550
+ }
3551
+
3552
+ ._close_lm5qk_62 {
3553
+ display: inline-flex;
3554
+ align-items: center;
3555
+ justify-content: center;
3556
+ width: 48px;
3557
+ height: 48px;
3558
+ padding: var(--space-12);
3559
+ border: 0;
3560
+ background: none;
3561
+ color: inherit;
3562
+ cursor: pointer;
3563
+ }
3564
+
3565
+ ._close_lm5qk_62:focus-visible {
3566
+ outline: none;
3567
+ box-shadow: var(--focus-ring);
3568
+ border-radius: var(--radius-4);
3569
+ }
3570
+
3571
+ ._list_lm5qk_81 {
3572
+ list-style: none;
3573
+ margin: 0;
3574
+ padding: var(--space-6) 0;
3575
+ display: flex;
3576
+ flex-direction: column;
3577
+ }
3578
+
3579
+ ._row_lm5qk_89 {
3580
+ display: flex;
3581
+ align-items: center;
3582
+ gap: var(--space-8);
3583
+ width: 100%;
3584
+ padding: var(--space-12) var(--space-16);
3585
+ border: 0;
3586
+ border-bottom: 1px solid var(--color-border-transparent-soft);
3587
+ background: none;
3588
+ color: inherit;
3589
+ font-family: inherit;
3590
+ text-align: left;
3591
+ cursor: pointer;
3592
+ }
3593
+
3594
+ /*
3595
+ * An inert row still looks exactly as designed. It is not greyed out, because it is not
3596
+ * unavailable to this fan for a reason they could act on — the destination does not exist
3597
+ * yet on either side, which is our problem and not something to dress up as their
3598
+ * permission. `aria-disabled` carries the truth to a screen reader.
3599
+ */
3600
+ ._row_lm5qk_89[disabled] {
3601
+ cursor: default;
3602
+ }
3603
+
3604
+ ._row_lm5qk_89:focus-visible {
3605
+ outline: none;
3606
+ box-shadow: var(--focus-ring);
3607
+ }
3608
+
3609
+ ._icon_lm5qk_119 {
3610
+ display: inline-flex;
3611
+ flex: 0 0 24px;
3612
+ width: 24px;
3613
+ height: 24px;
3614
+ color: var(--color-text-default);
3615
+ }
3616
+
3617
+ ._text_lm5qk_127 {
3618
+ display: flex;
3619
+ flex: 1 1 auto;
3620
+ flex-direction: column;
3621
+ gap: var(--space-2);
3622
+ min-width: 0;
3623
+ }
3624
+
3625
+ ._title_lm5qk_135 {
3626
+ font-size: var(--type-paragraph-size);
3627
+ font-weight: var(--font-weight-bold);
3628
+ line-height: 1;
3629
+ color: var(--color-text-default);
3630
+ }
3631
+
3632
+ ._subtitle_lm5qk_142 {
3633
+ font-size: var(--type-trimmed-xs-size);
3634
+ line-height: 1.52;
3635
+ color: var(--color-text-subtle);
3636
+ }
3637
+
3638
+ ._chevron_lm5qk_148 {
3639
+ display: inline-flex;
3640
+ flex: 0 0 16px;
3641
+ width: 16px;
3642
+ height: 16px;
3643
+ color: var(--color-text-subtle);
3644
+ }