@bytebrand/fe-ui-core-autobahn 1.0.40 → 1.0.42
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/package.json +1 -1
- package/theme/md3.css +19 -2
- package/vdp/FinanceCalculator.tsx +12 -11
- package/vdp/VdpModules.tsx +26 -15
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.42",
|
|
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
|
@@ -1208,6 +1208,9 @@
|
|
|
1208
1208
|
sticky bottom bar, all payment modes. */
|
|
1209
1209
|
.md3 .fin-rate-old { font-size: 15px; font-weight: 700; color: var(--md-error);
|
|
1210
1210
|
text-decoration: line-through; letter-spacing: 0; flex: none; }
|
|
1211
|
+
/* stacked unit column beside the hero rate (Figma: struck old rate ABOVE "/mtl.") */
|
|
1212
|
+
.md3 .fin-rate-unit { display: flex; flex-direction: column; line-height: 1.25;
|
|
1213
|
+
font-size: 14px; font-weight: 600; color: var(--md-on-surface-variant); flex: none; }
|
|
1211
1214
|
/* condition summary — left cell of row 2 in fin-price-grid */
|
|
1212
1215
|
.md3 .fin-cond { min-width: 0; font-size: 12.5px; color: var(--md-on-surface-variant); }
|
|
1213
1216
|
/* Rate-edit (Rate anpassen) sits between the rate and the CTA now */
|
|
@@ -1395,7 +1398,11 @@
|
|
|
1395
1398
|
which stays bundled inside .vdp-gallery, hidden on mobile via hide-mobile). */
|
|
1396
1399
|
.md3 .vdp-header-summary { order: 2; padding: 0; margin-bottom: 4px; /* flush with the card edges so the trust chips span the same width */ }
|
|
1397
1400
|
.md3 .vdp-aside { order: 3; }
|
|
1398
|
-
|
|
1401
|
+
/* no extra margin-top — .vdp-grid's own gap (14px, set further below) already spaces every
|
|
1402
|
+
mobile card uniformly; an added margin here stacked ON TOP of that gap, making the gap
|
|
1403
|
+
AFTER this card visibly bigger than the gap before it once ReviewsTeaser was inserted
|
|
1404
|
+
between the aside and this card (round 10 fix). */
|
|
1405
|
+
.md3 .vdp-header-extras { order: 4; }
|
|
1399
1406
|
.md3 .vdp-details { order: 5; }
|
|
1400
1407
|
.md3 .vdp-aside { position: static; }
|
|
1401
1408
|
.md3 .price-card { position: static; }
|
|
@@ -1612,7 +1619,17 @@
|
|
|
1612
1619
|
/* tighter stacked rhythm so title→chips→finance card land above the fold */
|
|
1613
1620
|
.md3 .vdp-grid { gap: 14px; }
|
|
1614
1621
|
.md3 .fin-tabs { margin-bottom: 12px; }
|
|
1615
|
-
|
|
1622
|
+
/* no divider above the Persönliche-Beratung row on phone (Figma: the only divider in this
|
|
1623
|
+
zone is the one before "Rate anpassen"); desktop keeps its border-top. */
|
|
1624
|
+
.md3 .fin-info { margin-top: 10px; padding-top: 10px; border-top: 0; }
|
|
1625
|
+
/* tabs divider runs edge-to-edge of the card / sticky bar (Figma) */
|
|
1626
|
+
.md3 .vdp-aside .fin-tabs { margin-left: -16px; margin-right: -16px; }
|
|
1627
|
+
.md3 .vdp-bottom-bar .fin-tabs { margin-left: -14px; margin-right: -14px; }
|
|
1628
|
+
/* Anrufen / phone buttons: Figma blue outline (default outlined is quiet gray) */
|
|
1629
|
+
.md3 .fin-cta-row .mbtn--outlined,
|
|
1630
|
+
.md3 .bb-cta-row .mbtn--outlined:not(.bb-adjust) { box-shadow: inset 0 0 0 1.5px var(--md-primary); }
|
|
1631
|
+
/* mobile page is WHITE like the Figma master — beats the .vdp-tint inline gray */
|
|
1632
|
+
.md3 .vdp-tint { background: var(--md-sc-lowest) !important; }
|
|
1616
1633
|
/* mockup hero rate is a notch bigger on phone (inline style says 48 — hence !important) */
|
|
1617
1634
|
.md3 .fin-rate-main .num { font-size: 52px !important; letter-spacing: -1.5px !important; }
|
|
1618
1635
|
/* the struck old figure must NOT inherit the 52px hero size */
|
|
@@ -333,22 +333,22 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
|
|
|
333
333
|
|
|
334
334
|
{/* 2-col grid: rate|pill (row 1) + condLine|bar (row 2) — fixed right column prevents wrapping */}
|
|
335
335
|
<div className="fin-price-grid">
|
|
336
|
-
{/* col 1 row 1: hero rate
|
|
336
|
+
{/* col 1 row 1: hero rate — Figma: "329 €" all-big, then a small stacked column with
|
|
337
|
+
the struck old rate ABOVE "/mtl." (round 11; was a single baseline row) */}
|
|
337
338
|
<div className="fin-rate-main">
|
|
338
|
-
<div style={{ display: 'flex', alignItems: '
|
|
339
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
|
|
339
340
|
<span
|
|
340
341
|
className="num"
|
|
341
342
|
style={{ fontSize: 48, fontWeight: 800, color: 'var(--md-primary)', letterSpacing: '-2px' }}
|
|
342
343
|
>
|
|
343
|
-
{isCash ? eur(price) : eur(Math.round(monthly))}
|
|
344
|
+
{isCash ? eur(price) : eur(Math.round(monthly))} €
|
|
344
345
|
</span>
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
<s className="num fin-rate-old">{eur(Math.round(oldMonthly))} €</s>
|
|
346
|
+
{!isCash && (
|
|
347
|
+
<span className="fin-rate-unit">
|
|
348
|
+
{/* struck old rate (REAL oldMonthlyInstallment; SRP strikes the same source) */}
|
|
349
|
+
{oldMonthly != null && <s className="num fin-rate-old">{eur(Math.round(oldMonthly))} €</s>}
|
|
350
|
+
<span>{t('autobahn:finance.perMonth')}</span>
|
|
351
|
+
</span>
|
|
352
352
|
)}
|
|
353
353
|
</div>
|
|
354
354
|
{isCash && <div className="md-label-sm">{t('autobahn:finance.fixedPrice')}</div>}
|
|
@@ -491,7 +491,8 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
|
|
|
491
491
|
{/* side-by-side CTAs — mockup ratio ~2:1, with the tiny auto.de-ID sitting
|
|
492
492
|
directly under the Anrufen button (not in its own full-width row). */}
|
|
493
493
|
<div className="fin-cta-row" style={{ display: 'flex', gap: 10, marginTop: 14, alignItems: 'flex-start' }}>
|
|
494
|
-
|
|
494
|
+
{/* file-check, not shield — the Figma CTA carries the document-with-check icon */}
|
|
495
|
+
<Button variant="filled" size="lg" icon="file-check" style={{ flex: 2 }} onClick={onSecure}>
|
|
495
496
|
{t('autobahn:finance.secureOffer')}
|
|
496
497
|
</Button>
|
|
497
498
|
<div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: 4, minWidth: 0 }}>
|
package/vdp/VdpModules.tsx
CHANGED
|
@@ -1168,18 +1168,29 @@ export const VdpBottomBar: React.FunctionComponent<VdpBottomBarProps> = ({
|
|
|
1168
1168
|
</div>
|
|
1169
1169
|
)}
|
|
1170
1170
|
<div className="bb-price-row">
|
|
1171
|
-
<div style={{ display: 'flex', alignItems: '
|
|
1171
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 6, whiteSpace: 'nowrap', minWidth: 0 }}>
|
|
1172
1172
|
<span className="num" style={{ fontWeight: 800, fontSize: 30, color: 'var(--md-primary)', letterSpacing: '-1px' }}>
|
|
1173
1173
|
{isCash ? eur(vehicle.price) : eur(Math.round(rate))} €
|
|
1174
1174
|
</span>
|
|
1175
|
-
{/*
|
|
1176
|
-
{
|
|
1177
|
-
|
|
1178
|
-
|
|
1175
|
+
{/* Figma sticky footer: tiny "z.B.", then the struck old rate stacked ABOVE "/mtl." */}
|
|
1176
|
+
{isCash ? (
|
|
1177
|
+
<>
|
|
1178
|
+
{vehicle.listPrice != null && vehicle.listPrice > vehicle.price && (
|
|
1179
|
+
<s className="num fin-rate-old">{eur(vehicle.listPrice)} €</s>
|
|
1180
|
+
)}
|
|
1181
|
+
<span className="md-label-sm" style={{ fontWeight: 600 }}>{t('autobahn:finance.fixedPrice')}</span>
|
|
1182
|
+
</>
|
|
1183
|
+
) : (
|
|
1184
|
+
<>
|
|
1185
|
+
<span className="md-label-sm" style={{ fontWeight: 600, alignSelf: 'flex-end', paddingBottom: 4 }}>
|
|
1186
|
+
{t('autobahn:finance.exampleLabel')}
|
|
1187
|
+
</span>
|
|
1188
|
+
<span className="fin-rate-unit" style={{ fontSize: 12.5 }}>
|
|
1189
|
+
{oldMonthly != null && <s className="num fin-rate-old">{eur(Math.round(oldMonthly))} €</s>}
|
|
1190
|
+
<span>{t('autobahn:bottom.perMonth')}</span>
|
|
1191
|
+
</span>
|
|
1192
|
+
</>
|
|
1179
1193
|
)}
|
|
1180
|
-
<span className="md-label-sm" style={{ fontWeight: 600 }}>
|
|
1181
|
-
{isCash ? t('autobahn:finance.fixedPrice') : `${t('autobahn:finance.exampleLabel')} ${t('autobahn:bottom.perMonth')}`}
|
|
1182
|
-
</span>
|
|
1183
1194
|
</div>
|
|
1184
1195
|
{ratingLabel && (
|
|
1185
1196
|
<div className="bb-eval">
|
|
@@ -1614,15 +1625,15 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
1614
1625
|
|
|
1615
1626
|
<div className="fin-price-grid">
|
|
1616
1627
|
<div className="fin-rate-main">
|
|
1617
|
-
<div style={{ display: 'flex', alignItems: '
|
|
1628
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
|
|
1618
1629
|
<span className="num" style={{ fontSize: 34, fontWeight: 800, color: 'var(--md-primary)', letterSpacing: '-1px' }}>
|
|
1619
|
-
{isCash ? eur(price) : eur(Math.round(monthly))}
|
|
1630
|
+
{isCash ? eur(price) : eur(Math.round(monthly))} €
|
|
1620
1631
|
</span>
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1632
|
+
{!isCash && (
|
|
1633
|
+
<span className="fin-rate-unit">
|
|
1634
|
+
{oldMonthly != null && <s className="num fin-rate-old">{eur(Math.round(oldMonthly))} €</s>}
|
|
1635
|
+
<span>{t('autobahn:finance.perMonth')}</span>
|
|
1636
|
+
</span>
|
|
1626
1637
|
)}
|
|
1627
1638
|
</div>
|
|
1628
1639
|
</div>
|