@bytebrand/fe-ui-core-autobahn 1.0.41 → 1.0.43
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 +17 -3
- package/vdp/FinanceCalculator.tsx +15 -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.43",
|
|
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 */
|
|
@@ -1616,9 +1619,20 @@
|
|
|
1616
1619
|
/* tighter stacked rhythm so title→chips→finance card land above the fold */
|
|
1617
1620
|
.md3 .vdp-grid { gap: 14px; }
|
|
1618
1621
|
.md3 .fin-tabs { margin-bottom: 12px; }
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
.md3 .fin-
|
|
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; }
|
|
1633
|
+
/* phone hero rate: 44px — with the € folded into the big span (round 11) 52px pushed the
|
|
1634
|
+
stacked /mtl. unit onto a second line; 44px fits "143 €" + stack beside the rating column */
|
|
1635
|
+
.md3 .fin-rate-main .num { font-size: 44px !important; letter-spacing: -1.2px !important; }
|
|
1622
1636
|
/* the struck old figure must NOT inherit the 52px hero size */
|
|
1623
1637
|
.md3 .fin-rate-main .fin-rate-old { font-size: 15px !important; letter-spacing: 0 !important; }
|
|
1624
1638
|
/* narrower rating column (figma bar is 115px) frees room for the bigger rate; let the
|
|
@@ -333,22 +333,25 @@ 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
|
-
{
|
|
344
|
+
{/* cash keeps the long price number-only (a big "13.249 €" overflows the grid cell) */}
|
|
345
|
+
{isCash ? eur(price) : `${eur(Math.round(monthly))} €`}
|
|
344
346
|
</span>
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
347
|
+
{isCash ? (
|
|
348
|
+
<span className="md-body-sm" style={{ fontWeight: 600 }}>€</span>
|
|
349
|
+
) : (
|
|
350
|
+
<span className="fin-rate-unit">
|
|
351
|
+
{/* struck old rate (REAL oldMonthlyInstallment; SRP strikes the same source) */}
|
|
352
|
+
{oldMonthly != null && <s className="num fin-rate-old">{eur(Math.round(oldMonthly))} €</s>}
|
|
353
|
+
<span>{t('autobahn:finance.perMonth')}</span>
|
|
354
|
+
</span>
|
|
352
355
|
)}
|
|
353
356
|
</div>
|
|
354
357
|
{isCash && <div className="md-label-sm">{t('autobahn:finance.fixedPrice')}</div>}
|
|
@@ -491,7 +494,8 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
|
|
|
491
494
|
{/* side-by-side CTAs — mockup ratio ~2:1, with the tiny auto.de-ID sitting
|
|
492
495
|
directly under the Anrufen button (not in its own full-width row). */}
|
|
493
496
|
<div className="fin-cta-row" style={{ display: 'flex', gap: 10, marginTop: 14, alignItems: 'flex-start' }}>
|
|
494
|
-
|
|
497
|
+
{/* file-check, not shield — the Figma CTA carries the document-with-check icon */}
|
|
498
|
+
<Button variant="filled" size="lg" icon="file-check" style={{ flex: 2 }} onClick={onSecure}>
|
|
495
499
|
{t('autobahn:finance.secureOffer')}
|
|
496
500
|
</Button>
|
|
497
501
|
<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>
|