@bytebrand/fe-ui-core-autobahn 1.0.29 → 1.0.30
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/locales/de/autobahn.json +28 -7
- package/locales/en/autobahn.json +728 -707
- package/package.json +1 -1
- package/theme/md3.css +104 -22
- package/ui/Icon.tsx +2 -0
- package/vdp/VdpModules.tsx +263 -66
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytebrand/fe-ui-core-autobahn",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.30",
|
|
4
4
|
"description": "auto.de md3 (Autobahn) design system — UI primitives, cards, chrome, VDP modules, theme CSS and locales. Ships raw TypeScript source (like fe-ui-core before it); each consumer's bundler compiles it.",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"license": "UNLICENSED",
|
package/theme/md3.css
CHANGED
|
@@ -33,6 +33,15 @@
|
|
|
33
33
|
--md-primary-container: #DBE4FF;
|
|
34
34
|
--md-on-primary-container:#001A45;
|
|
35
35
|
|
|
36
|
+
/* Figma round-9 tokens: bright link blue + the mockup's cool text/border palette */
|
|
37
|
+
--md-link: #005CFF; /* text links + category headings (Figma) */
|
|
38
|
+
--fig-navy: #1D2A38; /* card text */
|
|
39
|
+
--fig-gray: #5B6B7F; /* secondary text */
|
|
40
|
+
--fig-border: #D4DDE7; /* card border */
|
|
41
|
+
--fig-tile-border: #E6ECF3; /* inner tile border */
|
|
42
|
+
--fig-chip-bg: #EAF2FF; /* highlight pill bg */
|
|
43
|
+
--fig-chip-text: #0B2D5C; /* highlight pill text */
|
|
44
|
+
|
|
36
45
|
/* accent (cyan) roles — highlights, focus, on-dark links */
|
|
37
46
|
--md-accent: var(--autode-cyan);
|
|
38
47
|
--md-accent-container: #C6EEFB;
|
|
@@ -163,6 +172,15 @@
|
|
|
163
172
|
flex: 1 1 auto; /* the four chips stretch to fill the block width (mockup), min = natural width */ }
|
|
164
173
|
.md3 .vdp-trust-chip .lucide { width: 14px; height: 14px; flex: none; }
|
|
165
174
|
|
|
175
|
+
/* VDP highlight pills — Figma round 9: light-blue pill, navy bold text, bright-blue check */
|
|
176
|
+
.md3 .vdp-highlights .chip { background: var(--fig-chip-bg); border: 1px solid var(--fig-tile-border);
|
|
177
|
+
color: var(--fig-chip-text); border-radius: 12px; min-height: 40px; height: auto;
|
|
178
|
+
font-size: 13px; font-weight: 700; white-space: normal; line-height: 1.2; }
|
|
179
|
+
.md3 .vdp-highlights .chip .lucide { color: var(--md-link); }
|
|
180
|
+
|
|
181
|
+
/* Fahrzeugdaten / Ausstattung expander links — Figma bright link blue */
|
|
182
|
+
.md3 #vdp-daten .mbtn--text, .md3 #vdp-ausstattung .mbtn--text { color: var(--md-link); }
|
|
183
|
+
|
|
166
184
|
/* status / rating chip (no CTA) */
|
|
167
185
|
.md3 .statchip { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 10px;
|
|
168
186
|
border-radius: var(--md-r-xs); font-size: 12px; font-weight: 600; }
|
|
@@ -930,6 +948,7 @@
|
|
|
930
948
|
box-shadow: 0 2px 8px rgba(0,0,0,.18); }
|
|
931
949
|
.md3 .hiw-title { font-size: 15px; font-weight: 700; margin-top: 4px; margin-bottom: 8px; color: var(--md-on-surface); }
|
|
932
950
|
.md3 .hiw-desc { margin: 0; font-size: 13px; color: var(--md-on-surface-variant); line-height: 1.55; }
|
|
951
|
+
.md3 .hiw-heading { text-align: center; } /* desktop; the mobile card left-aligns it */
|
|
933
952
|
.md3 .footer-grid { display: grid; grid-template-columns: 1.4fr repeat(3,1fr); gap: 28px; }
|
|
934
953
|
.md3 .srp-grid { display: grid; grid-template-columns: 244px 1fr; gap: 24px; align-items: start; }
|
|
935
954
|
/* SRP grid view sits beside the filter rail — 2 columns, not 3 (cards need ≥340px) */
|
|
@@ -1217,19 +1236,43 @@
|
|
|
1217
1236
|
.md3 .enquiry-phone { display: inline-flex; align-items: center; gap: 8px; margin-top: auto; padding-top: 18px;
|
|
1218
1237
|
color: var(--md-primary); font-weight: 700; font-size: 16px; text-decoration: none; }
|
|
1219
1238
|
.md3 .enquiry-form { padding: 24px; }
|
|
1239
|
+
/* outlined float-label fields (Figma phone/message row): label sits ON the top border */
|
|
1240
|
+
.md3 .enq-float { position: relative; display: block; border: 1px solid var(--md-outline-variant);
|
|
1241
|
+
border-radius: var(--md-r-sm); background: var(--md-sc-lowest); }
|
|
1242
|
+
.md3 .enq-float-label { position: absolute; top: -8px; left: 10px; padding: 0 5px; background: var(--md-sc-lowest);
|
|
1243
|
+
font-size: 11.5px; font-weight: 600; color: var(--md-on-surface-variant); line-height: 1.3; z-index: 1; }
|
|
1244
|
+
.md3 .enq-float input, .md3 .enq-float textarea { width: 100%; border: 0; background: none; outline: 0;
|
|
1245
|
+
color: var(--md-on-surface); font: inherit; font-size: 14px; height: 46px; padding: 0 12px; }
|
|
1246
|
+
.md3 .enq-float textarea { height: 96px; padding: 12px; resize: vertical; }
|
|
1247
|
+
.md3 .enq-phone-row { display: grid; grid-template-columns: 82px 96px 1fr; gap: 10px; }
|
|
1248
|
+
.md3 .enq-country { display: flex; align-items: center; justify-content: space-between; gap: 4px;
|
|
1249
|
+
height: 46px; padding: 0 10px 0 12px; font-size: 14px; color: var(--md-on-surface); }
|
|
1250
|
+
/* revocable-consent checkbox + microtext (Figma round 9) */
|
|
1251
|
+
.md3 .enq-consent { display: flex; align-items: flex-start; gap: 9px; margin-top: 10px; cursor: pointer; }
|
|
1252
|
+
.md3 .enq-consent input { width: 17px; height: 17px; margin: 1px 0 0; flex: none; accent-color: var(--md-primary); cursor: pointer; }
|
|
1253
|
+
.md3 .enq-consent span { font-size: 11px; line-height: 1.45; color: var(--md-on-surface-variant); }
|
|
1254
|
+
.md3 .enq-consent a { color: inherit; }
|
|
1220
1255
|
@media (max-width: 780px) {
|
|
1221
1256
|
.md3 .enquiry-grid { grid-template-columns: 1fr; }
|
|
1222
1257
|
.md3 .enquiry-aside { border-right: 0; border-bottom: 1px solid var(--md-outline-variant); }
|
|
1223
1258
|
.md3 .enquiry-phone { margin-top: 16px; }
|
|
1224
1259
|
}
|
|
1225
1260
|
|
|
1226
|
-
/* sticky mobile
|
|
1227
|
-
main offer card, matching the
|
|
1261
|
+
/* sticky mobile bar (VDP) — Figma "Sticky Footer": mode tabs + rate/eval row + CTA row.
|
|
1262
|
+
Hidden (slid off-screen) until the page scrolls past the main offer card, matching the
|
|
1263
|
+
desktop VdpStickyBar's show/scroll-gated behavior. */
|
|
1228
1264
|
.md3 .vdp-bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; background: var(--md-sc-lowest);
|
|
1229
1265
|
border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -2px 14px rgba(0,0,0,.10);
|
|
1230
|
-
padding: 10px
|
|
1266
|
+
padding: 0 14px 10px; flex-direction: column; align-items: stretch; gap: 8px;
|
|
1231
1267
|
transform: translateY(100%); transition: transform var(--dur-2, .25s); }
|
|
1232
1268
|
.md3 .vdp-bottom-bar--on { transform: translateY(0); }
|
|
1269
|
+
.md3 .bb-tabs { margin-bottom: 0; }
|
|
1270
|
+
.md3 .bb-tabs .fin-tab { padding: 9px 4px; font-size: 13.5px; }
|
|
1271
|
+
.md3 .bb-price-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
1272
|
+
.md3 .bb-eval { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; flex: none; width: 118px; }
|
|
1273
|
+
.md3 .bb-eval .fin-eval-pill { padding: 4px 10px; font-size: 11.5px; }
|
|
1274
|
+
.md3 .bb-cta-row { display: flex; gap: 8px; align-items: center; }
|
|
1275
|
+
.md3 .bb-adjust { color: var(--md-on-surface); border-color: var(--md-outline-variant); }
|
|
1233
1276
|
|
|
1234
1277
|
/* bottom-sheet (SRP filters) — sticky header + scrollable body + sticky action bar, slide-up entrance */
|
|
1235
1278
|
.md3 .sheet-scrim { position: fixed; inset: 0; background: rgba(16,22,42,.5); z-index: 70;
|
|
@@ -1298,8 +1341,29 @@
|
|
|
1298
1341
|
.md3 .gitem:nth-child(n+3) { border-top: 1px solid var(--md-outline-variant); }
|
|
1299
1342
|
.md3 .mag-grid { grid-template-columns: 1fr; }
|
|
1300
1343
|
.md3 .zustand-grid { grid-template-columns: repeat(2, 1fr); }
|
|
1301
|
-
|
|
1344
|
+
/* highlight pills: Figma 2-col grid — ALL highlights visible, no swipe-line */
|
|
1345
|
+
.md3 .vdp-highlights { display: grid !important; grid-template-columns: 1fr 1fr; gap: 9px; }
|
|
1346
|
+
.md3 .vdp-highlights .chip { width: 100%; justify-content: flex-start; }
|
|
1347
|
+
/* "So einfach geht's" — Figma mobile card: white card, left title, numbered blue
|
|
1348
|
+
circles in a vertical list with a connector line (replaces the desktop step cards) */
|
|
1349
|
+
.md3 .steps-4 { grid-template-columns: 1fr; gap: 0; }
|
|
1302
1350
|
.md3 .hiw-step:not(:last-child)::after { display: none; }
|
|
1351
|
+
.md3 .hiw-section { background: var(--md-sc-lowest); border: 1px solid var(--fig-border);
|
|
1352
|
+
border-radius: 18px; padding: 22px 20px; }
|
|
1353
|
+
.md3 .hiw-heading { text-align: left; margin-bottom: 18px !important; }
|
|
1354
|
+
.md3 .hiw-step { flex-direction: row; align-items: flex-start; text-align: left; gap: 16px;
|
|
1355
|
+
background: none; border: 0; border-radius: 0; box-shadow: none; padding: 0 0 22px; position: relative; }
|
|
1356
|
+
.md3 .hiw-step:last-child { padding-bottom: 0; }
|
|
1357
|
+
/* connector line between the numbered circles */
|
|
1358
|
+
.md3 .hiw-step:not(:last-child)::before { content: ''; position: absolute; left: 21px; top: 46px; bottom: 2px;
|
|
1359
|
+
width: 2px; background: var(--fig-tile-border); }
|
|
1360
|
+
.md3 .hiw-icon-wrap { width: 44px; height: 44px; margin-bottom: 0; flex: none;
|
|
1361
|
+
background: var(--md-primary); box-shadow: none; }
|
|
1362
|
+
.md3 .hiw-icon-wrap .lucide { display: none; }
|
|
1363
|
+
.md3 .hiw-num { position: static; min-width: 0; width: auto; height: auto; padding: 0;
|
|
1364
|
+
background: none; box-shadow: none; color: #fff; font-size: 17px; font-weight: 700; }
|
|
1365
|
+
.md3 .hiw-title { margin-top: 0; margin-bottom: 5px; font-size: 16px; color: var(--fig-navy); }
|
|
1366
|
+
.md3 .hiw-desc { font-size: 13.5px; color: var(--fig-gray); }
|
|
1303
1367
|
.md3 .curated-grid { grid-template-columns: repeat(2,1fr); }
|
|
1304
1368
|
.md3 .footer-grid { grid-template-columns: repeat(3,1fr); gap: 24px; }
|
|
1305
1369
|
.md3 .hide-tablet { display: none !important; }
|
|
@@ -1366,10 +1430,7 @@
|
|
|
1366
1430
|
/* spec table clamps to 6 rows on phone until "Alle Daten anzeigen" */
|
|
1367
1431
|
.md3 .vdp-specs--clamp .specitem:nth-child(n+7) { display: none; }
|
|
1368
1432
|
.md3 .gitem { padding: 20px 18px; }
|
|
1369
|
-
|
|
1370
|
-
.md3 .hiw-step { flex-direction: row; align-items: flex-start; text-align: left; gap: 14px; }
|
|
1371
|
-
.md3 .hiw-step:not(:last-child)::after { display: none; }
|
|
1372
|
-
.md3 .hiw-icon-wrap { margin-bottom: 0; flex: none; }
|
|
1433
|
+
/* steps/hiw: the ≤980 Figma vertical-list card already applies here */
|
|
1373
1434
|
/* --- VDP header card: structured phone layout (desktop-composed VdpHeaderCard,
|
|
1374
1435
|
hidden on phone via hide-mobile — kept for tablet widths 600-980px where the
|
|
1375
1436
|
card still shows). The compact mobile-only .vdp-header-summary below is
|
|
@@ -1393,12 +1454,10 @@
|
|
|
1393
1454
|
.md3 .vdp-header-summary .vdp-meta > span + span::before { content: ''; margin: 0 8px; }
|
|
1394
1455
|
.md3 .vdp-header-summary .vdp-meta > span { overflow: visible; text-overflow: clip; }
|
|
1395
1456
|
.md3 .vdp-header-summary .vdp-meta .lucide { display: none; }
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
.md3 .vdp-
|
|
1399
|
-
|
|
1400
|
-
.md3 .vdp-highlights::-webkit-scrollbar { display: none; }
|
|
1401
|
-
.md3 .vdp-highlights .chip { flex: none; }
|
|
1457
|
+
/* compact dot-line = km/EZ/Getriebe/Kraftstoff only (mockup) — hides Hand + Karosserie,
|
|
1458
|
+
which only appear in the 2-col fact grid */
|
|
1459
|
+
.md3 .vdp-header-summary .vdp-meta > span:nth-child(n+5) { display: none; }
|
|
1460
|
+
/* highlights: the ≤980 Figma 2-col grid applies here too (no swipe-line since round 9) */
|
|
1402
1461
|
/* condition row: 2×2 on phone */
|
|
1403
1462
|
.md3 .zustand-grid { grid-template-columns: 1fr 1fr; }
|
|
1404
1463
|
.md3 .zustand-tile { border-left: 0; padding: 12px 0; }
|
|
@@ -1443,25 +1502,48 @@
|
|
|
1443
1502
|
.md3 .mslider::-moz-range-thumb { width: 22px; height: 22px; border-radius: 50%; background: var(--md-primary); border: 3px solid #fff; box-shadow: var(--md-e2); cursor: pointer; }
|
|
1444
1503
|
.md3 .eq-cols { column-count: 2; column-gap: 32px; }
|
|
1445
1504
|
.md3 .pmv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; }
|
|
1446
|
-
/* trust strip — quiet one-line reassurance
|
|
1505
|
+
/* trust strip — quiet one-line reassurance on desktop; Figma 2×2 tile card ≤980 */
|
|
1447
1506
|
.md3 .trust-strip { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; row-gap: 10px; padding: 2px 4px; }
|
|
1448
1507
|
.md3 .trust-strip > div { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap;
|
|
1449
1508
|
font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); }
|
|
1450
1509
|
.md3 .trust-strip > div + div::before { content: ''; width: 4px; height: 4px; border-radius: 50%;
|
|
1451
1510
|
background: var(--md-outline-variant); margin: 0 14px; }
|
|
1511
|
+
.md3 .trust-sub { display: none; } /* sublines only exist in the mobile tile layout */
|
|
1512
|
+
|
|
1513
|
+
@media (max-width: 980px) {
|
|
1514
|
+
/* Figma "Trust Highlights - Compact": white card holding 4 bordered tiles,
|
|
1515
|
+
icon + bold title + gray subline each */
|
|
1516
|
+
.md3 .trust-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
|
|
1517
|
+
background: var(--md-sc-lowest); border: 1px solid var(--fig-border); border-radius: 18px;
|
|
1518
|
+
padding: 14px; box-shadow: 0 2px 3px rgba(14,34,56,.07); }
|
|
1519
|
+
.md3 .trust-strip > div { display: flex; align-items: flex-start; white-space: normal;
|
|
1520
|
+
border: 1px solid var(--fig-tile-border); border-radius: 12px; padding: 10px 11px; gap: 9px; }
|
|
1521
|
+
.md3 .trust-strip > div + div::before { content: none; }
|
|
1522
|
+
.md3 .trust-strip > div .lucide { margin-top: 1px; }
|
|
1523
|
+
.md3 .trust-strip > div > span { display: block; font-size: 12.5px; font-weight: 700; color: var(--fig-navy); line-height: 1.3; }
|
|
1524
|
+
.md3 .trust-sub { display: block; margin-top: 2px; font-size: 11px; font-weight: 400; color: var(--fig-gray); line-height: 1.3; }
|
|
1525
|
+
}
|
|
1452
1526
|
|
|
1453
1527
|
@media (max-width: 600px) {
|
|
1454
1528
|
.md3 .eq-cols { column-count: 1; }
|
|
1455
1529
|
.md3 .pmv-grid { grid-template-columns: 1fr; gap: 22px; }
|
|
1456
|
-
.md3 .trust-strip { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 16px; justify-items: start; }
|
|
1457
|
-
.md3 .trust-strip > div + div::before { content: none; }
|
|
1458
1530
|
}
|
|
1459
1531
|
|
|
1460
|
-
/* ---------- CO₂ / energy label —
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
.md3 .co2-
|
|
1532
|
+
/* ---------- CO₂ / energy label — Figma pastel scale (round 9) ----------
|
|
1533
|
+
Every segment shows its pastel class colour; the vehicle's class(es) pop as the
|
|
1534
|
+
saturated tile with a white ring + shadow. PHEV gets BOTH markers (gew./entladen)
|
|
1535
|
+
with tiny labels above the scale. */
|
|
1536
|
+
.md3 .co2-scale { display: flex; gap: 5px; align-items: flex-end; }
|
|
1537
|
+
.md3 .co2-col { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
|
|
1538
|
+
.md3 .co2-mark { font-size: 9.5px; line-height: 1.2; text-align: center; color: var(--fig-gray);
|
|
1539
|
+
white-space: nowrap; overflow: visible; }
|
|
1540
|
+
.md3 .co2-seg { height: 36px; border-radius: 10px; color: #fff; font-weight: 800; font-size: 13px;
|
|
1541
|
+
display: flex; align-items: center; justify-content: center;
|
|
1542
|
+
background: color-mix(in srgb, var(--seg) 38%, #fff);
|
|
1543
|
+
transition: background var(--dur-2) var(--ease-standard); }
|
|
1544
|
+
.md3 .co2-seg--on { background: var(--seg); border: 2px solid #fff;
|
|
1545
|
+
box-shadow: 0 2px 8px rgba(16,22,42,.28); transform: scale(1.06); }
|
|
1546
|
+
.md3 .co2-seg--on2 { border: 2px solid #fff; box-shadow: 0 2px 8px rgba(16,22,42,.22); transform: scale(1.04); }
|
|
1465
1547
|
.md3 .co2-stats { display: flex; flex-wrap: wrap; gap: 10px 26px; margin-bottom: 16px; }
|
|
1466
1548
|
.md3 .dealer-map { position: relative; height: 130px; border-radius: var(--md-r-sm); overflow: hidden;
|
|
1467
1549
|
background: #e8edf3;
|
package/ui/Icon.tsx
CHANGED
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
EyeOff,
|
|
56
56
|
Facebook,
|
|
57
57
|
File,
|
|
58
|
+
FileCheck,
|
|
58
59
|
FileText,
|
|
59
60
|
Flame,
|
|
60
61
|
Fuel,
|
|
@@ -252,6 +253,7 @@ const REGISTRY: Record<string, React.ComponentType<LucideProps>> = {
|
|
|
252
253
|
EyeOff,
|
|
253
254
|
Facebook,
|
|
254
255
|
File,
|
|
256
|
+
FileCheck,
|
|
255
257
|
FileText,
|
|
256
258
|
Flame,
|
|
257
259
|
Fuel,
|