@bytebrand/fe-ui-core-autobahn 1.0.141 → 1.0.143
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 +7 -7
- package/vdp/VdpModules.tsx +260 -189
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.143",
|
|
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
|
@@ -6544,15 +6544,15 @@ line-height: 31px;
|
|
|
6544
6544
|
align-items: flex-end;
|
|
6545
6545
|
padding: 0;
|
|
6546
6546
|
}
|
|
6547
|
-
/* one fixed height, whatever is inside
|
|
6548
|
-
the
|
|
6549
|
-
|
|
6550
|
-
|
|
6551
|
-
|
|
6547
|
+
/* one fixed height (the original 85vh look), whatever is inside — collapsed rate controls,
|
|
6548
|
+
the expanded details, or the Kaufen tab. Opening "Finanzierungs-Details" no longer grows the
|
|
6549
|
+
sheet (was min-height 85vh -> 100vh, which jumped it over the page header and, on iOS
|
|
6550
|
+
Safari where 100vh > the visible area, pushed its top off-screen); the details scroll
|
|
6551
|
+
inside instead. max-height caps it to the fixed inset:0 scrim's CURRENT visible height. */
|
|
6552
6552
|
.md3 .fin-modal {
|
|
6553
6553
|
max-width: none;
|
|
6554
|
-
height:
|
|
6555
|
-
max-height:
|
|
6554
|
+
height: 85vh;
|
|
6555
|
+
max-height: calc(100% - 24px);
|
|
6556
6556
|
background: #FFFFFF;
|
|
6557
6557
|
box-shadow: 0px -4px 18px rgba(0, 0, 0, 0.13);
|
|
6558
6558
|
border-radius: 26px 26px 0px 0px;
|
package/vdp/VdpModules.tsx
CHANGED
|
@@ -2216,24 +2216,33 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
2216
2216
|
// modal's mobile "Rate anpassen" sheet renders its own separate copy of that hero row, so it
|
|
2217
2217
|
// needs its own tooltip-open state (not shared with FinanceCalculator's instance).
|
|
2218
2218
|
const [uvpTooltipOpen, setUvpTooltipOpen] = React.useState(false);
|
|
2219
|
-
//
|
|
2220
|
-
//
|
|
2221
|
-
//
|
|
2222
|
-
|
|
2219
|
+
// mobile-only: the Finanzierungs-/Leasingdetails breakdown starts collapsed (opened via "Rate
|
|
2220
|
+
// anpassen") or expanded (opened directly via the page's details link) — reset on every open,
|
|
2221
|
+
// since this component stays mounted (the page always renders it, gated by `open`).
|
|
2222
|
+
const [showBreakdown, setShowBreakdown] = React.useState(!!initialShowBreakdown);
|
|
2223
|
+
// Desktop always shows the breakdown inline but it can sit below the fold of .fin-modal-body's
|
|
2224
|
+
// own scroll area too — whichever of the two refs is actually visible (show-mobile/hide-mobile
|
|
2225
|
+
// via CSS) is the one scrolled to.
|
|
2223
2226
|
const desktopBreakdownRef = React.useRef<HTMLDivElement | null>(null);
|
|
2224
2227
|
const mobileBreakdownRef = React.useRef<HTMLDivElement | null>(null);
|
|
2225
|
-
// mobile: the breakdown
|
|
2226
|
-
//
|
|
2227
|
-
//
|
|
2228
|
-
//
|
|
2228
|
+
// mobile (ADV-276): revealing the breakdown scrolls the sheet body until the "Repräsentatives
|
|
2229
|
+
// Beispiel" headline sits at its top — but never so far that the CTA row under the breakdown
|
|
2230
|
+
// comes into view (on tall screens the breakdown is shorter than the sheet, so the headline
|
|
2231
|
+
// then stops lower, with the bottom CTA row still just below the fold).
|
|
2232
|
+
// The sheet keeps its fixed height (see .fin-modal in md3.css), so nothing jumps; only the
|
|
2233
|
+
// body scrolls. Hand-rolled rAF ease-out so the duration is ours, not the browser's.
|
|
2234
|
+
const mobileBottomCtaRef = React.useRef<HTMLDivElement | null>(null);
|
|
2229
2235
|
const breakdownScrollRaf = React.useRef(0);
|
|
2230
2236
|
const scrollSheetToBreakdown = React.useCallback((): void => {
|
|
2231
2237
|
const el = mobileBreakdownRef.current;
|
|
2232
2238
|
const body = el?.closest('.fin-modal-body') as HTMLElement | null | undefined;
|
|
2233
2239
|
if (!el || !body) return;
|
|
2234
2240
|
const from = body.scrollTop;
|
|
2235
|
-
const
|
|
2236
|
-
const
|
|
2241
|
+
const bodyTop = body.getBoundingClientRect().top;
|
|
2242
|
+
const headlineTop = el.getBoundingClientRect().top - bodyTop + from;
|
|
2243
|
+
const cta = mobileBottomCtaRef.current;
|
|
2244
|
+
const ctaLimit = cta ? cta.getBoundingClientRect().top - bodyTop + from - body.clientHeight : Infinity;
|
|
2245
|
+
const to = Math.max(0, Math.min(headlineTop - 8, ctaLimit, body.scrollHeight - body.clientHeight));
|
|
2237
2246
|
if (to === from) return;
|
|
2238
2247
|
window.cancelAnimationFrame(breakdownScrollRaf.current);
|
|
2239
2248
|
const duration = 400;
|
|
@@ -2247,14 +2256,25 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
2247
2256
|
breakdownScrollRaf.current = window.requestAnimationFrame(step);
|
|
2248
2257
|
}, []);
|
|
2249
2258
|
React.useEffect(() => () => window.cancelAnimationFrame(breakdownScrollRaf.current), []);
|
|
2259
|
+
// opened directly via the page's details link: open expanded and scrolled to the breakdown.
|
|
2250
2260
|
React.useEffect(() => {
|
|
2251
|
-
if (!open
|
|
2261
|
+
if (!open) return;
|
|
2262
|
+
setShowBreakdown(!!initialShowBreakdown);
|
|
2263
|
+
if (!initialShowBreakdown) return;
|
|
2252
2264
|
const timer = window.setTimeout(() => {
|
|
2253
2265
|
if (mobileBreakdownRef.current?.offsetParent) scrollSheetToBreakdown();
|
|
2254
2266
|
else desktopBreakdownRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
2255
2267
|
}, 50);
|
|
2256
2268
|
return () => window.clearTimeout(timer);
|
|
2257
|
-
|
|
2269
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2270
|
+
}, [open, initialShowBreakdown]);
|
|
2271
|
+
// in-sheet details toggle: scroll once the expanded breakdown has rendered. Collapsing doesn't scroll.
|
|
2272
|
+
const revealBreakdownRef = React.useRef(false);
|
|
2273
|
+
React.useEffect(() => {
|
|
2274
|
+
if (!showBreakdown || !revealBreakdownRef.current) return;
|
|
2275
|
+
revealBreakdownRef.current = false;
|
|
2276
|
+
scrollSheetToBreakdown();
|
|
2277
|
+
}, [showBreakdown, scrollSheetToBreakdown]);
|
|
2258
2278
|
|
|
2259
2279
|
// mobile-only: swipe-down-to-dismiss on the grabber/header (the mockup's drag handle).
|
|
2260
2280
|
// The sheet follows the finger (imperative transform — no re-renders while dragging);
|
|
@@ -3429,7 +3449,10 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
3429
3449
|
{/* centered ⓘ details link (mockup shows no chevron) — scrolls to the breakdown below */}
|
|
3430
3450
|
<button
|
|
3431
3451
|
type="button"
|
|
3432
|
-
onClick={
|
|
3452
|
+
onClick={() => {
|
|
3453
|
+
revealBreakdownRef.current = !showBreakdown;
|
|
3454
|
+
setShowBreakdown((v) => !v);
|
|
3455
|
+
}}
|
|
3433
3456
|
style={{ ...expanderBtnStyle, justifyContent: 'center', padding: '2px 0 20px' }}>
|
|
3434
3457
|
<span
|
|
3435
3458
|
style={{
|
|
@@ -3447,86 +3470,58 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
3447
3470
|
{isLease ? t('autobahn:modal.leasingDetails') : t('autobahn:modal.financingDetails')}
|
|
3448
3471
|
</span>
|
|
3449
3472
|
</button>
|
|
3450
|
-
{/* same row-by-row breakdown
|
|
3451
|
-
|
|
3452
|
-
|
|
3453
|
-
|
|
3454
|
-
style={{
|
|
3455
|
-
|
|
3456
|
-
|
|
3457
|
-
|
|
3458
|
-
|
|
3459
|
-
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
alignItems: 'flex-start',
|
|
3486
|
-
gap: 10,
|
|
3487
|
-
background: '#FAFBFD',
|
|
3488
|
-
border: '1px solid #D4DDE7',
|
|
3489
|
-
borderRadius: 6,
|
|
3490
|
-
padding: 10,
|
|
3491
|
-
marginBottom: 10,
|
|
3492
|
-
}}
|
|
3493
|
-
>
|
|
3494
|
-
<svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none' }}>
|
|
3495
|
-
<path d="M2.7002 9.00001L13.5002 3.60001L24.3002 9.00001H2.7002Z" stroke="#0E2238" strokeWidth="1.6" strokeLinejoin="round" />
|
|
3496
|
-
<path d="M4.49961 10.8H22.4996M5.39961 21.6H21.5996M3.59961 24.3H23.3996" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3497
|
-
<path d="M7.2002 10.8V21.6M11.7002 10.8V21.6M15.3002 10.8V21.6M19.8002 10.8V21.6" stroke="#0E2238" strokeWidth="1.6" />
|
|
3498
|
-
</svg>
|
|
3499
|
-
<div style={{ width: '100%' }}>
|
|
3500
|
-
<p
|
|
3501
|
-
style={{
|
|
3502
|
-
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3503
|
-
fontWeight: 700,
|
|
3504
|
-
fontSize: 14,
|
|
3505
|
-
lineHeight: '13px',
|
|
3506
|
-
color: '#0E2238',
|
|
3507
|
-
margin: 0,
|
|
3508
|
-
marginBottom: 3,
|
|
3509
|
-
}}
|
|
3510
|
-
>
|
|
3511
|
-
{isLease ? t('autobahn:modal.leaseLenderLabel') : t('autobahn:modal.lenderLabel')}
|
|
3512
|
-
</p>
|
|
3513
|
-
<p
|
|
3473
|
+
{/* mobile "Finanzierungsdetails" toggle reveals the same row-by-row breakdown
|
|
3474
|
+
table as desktop (breakdownRows, built once above). */}
|
|
3475
|
+
{showBreakdown && (
|
|
3476
|
+
<>
|
|
3477
|
+
<div ref={mobileBreakdownRef} style={{ marginBottom: 5 }}>
|
|
3478
|
+
<p
|
|
3479
|
+
style={{
|
|
3480
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3481
|
+
fontWeight: 700,
|
|
3482
|
+
fontSize: 16,
|
|
3483
|
+
lineHeight: '18px',
|
|
3484
|
+
color: '#0E2238',
|
|
3485
|
+
margin: 0,
|
|
3486
|
+
marginBottom: 5,
|
|
3487
|
+
paddingTop: 10,
|
|
3488
|
+
borderTop: '1px solid rgba(212, 221, 231, 0.95)',
|
|
3489
|
+
}}
|
|
3490
|
+
>
|
|
3491
|
+
{t('autobahn:modal.representativeExample')}
|
|
3492
|
+
</p>
|
|
3493
|
+
<p
|
|
3494
|
+
style={{
|
|
3495
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3496
|
+
fontWeight: 700,
|
|
3497
|
+
fontSize: 9,
|
|
3498
|
+
lineHeight: '12px',
|
|
3499
|
+
color: '#5B6B7F',
|
|
3500
|
+
marginBottom: 5,
|
|
3501
|
+
}}
|
|
3502
|
+
>
|
|
3503
|
+
{t('autobahn:modal.vatDisclaimer')}
|
|
3504
|
+
</p>
|
|
3505
|
+
{breakdownRows}
|
|
3506
|
+
</div>
|
|
3507
|
+
<div
|
|
3514
3508
|
style={{
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3509
|
+
display: 'flex',
|
|
3510
|
+
alignItems: 'flex-start',
|
|
3511
|
+
gap: 10,
|
|
3512
|
+
background: '#FAFBFD',
|
|
3513
|
+
border: '1px solid #D4DDE7',
|
|
3514
|
+
borderRadius: 6,
|
|
3515
|
+
padding: 10,
|
|
3516
|
+
marginBottom: 10,
|
|
3521
3517
|
}}
|
|
3522
3518
|
>
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
<div style={{ height: 1, background: '#D6DEE8', margin: '8px 0' }} />
|
|
3519
|
+
<svg width="27" height="27" viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none' }}>
|
|
3520
|
+
<path d="M2.7002 9.00001L13.5002 3.60001L24.3002 9.00001H2.7002Z" stroke="#0E2238" strokeWidth="1.6" strokeLinejoin="round" />
|
|
3521
|
+
<path d="M4.49961 10.8H22.4996M5.39961 21.6H21.5996M3.59961 24.3H23.3996" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3522
|
+
<path d="M7.2002 10.8V21.6M11.7002 10.8V21.6M15.3002 10.8V21.6M19.8002 10.8V21.6" stroke="#0E2238" strokeWidth="1.6" />
|
|
3523
|
+
</svg>
|
|
3524
|
+
<div style={{ width: '100%' }}>
|
|
3530
3525
|
<p
|
|
3531
3526
|
style={{
|
|
3532
3527
|
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
@@ -3538,7 +3533,7 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
3538
3533
|
marginBottom: 3,
|
|
3539
3534
|
}}
|
|
3540
3535
|
>
|
|
3541
|
-
{t('autobahn:modal.
|
|
3536
|
+
{isLease ? t('autobahn:modal.leaseLenderLabel') : t('autobahn:modal.lenderLabel')}
|
|
3542
3537
|
</p>
|
|
3543
3538
|
<p
|
|
3544
3539
|
style={{
|
|
@@ -3550,122 +3545,198 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
3550
3545
|
margin: 0,
|
|
3551
3546
|
}}
|
|
3552
3547
|
>
|
|
3553
|
-
{t('autobahn:modal.
|
|
3548
|
+
{lenderName || (isLease ? t('autobahn:modal.leaseLenderName') : t('autobahn:modal.lenderName'))}
|
|
3554
3549
|
</p>
|
|
3555
|
-
|
|
3550
|
+
{/* leasing's Darlehensgeber-style card also discloses the contract type
|
|
3551
|
+
(Figma: "Vertragsart: Restwertleasing"), split off by its own divider */}
|
|
3552
|
+
{isLease && (
|
|
3553
|
+
<>
|
|
3554
|
+
<div style={{ height: 1, background: '#D6DEE8', margin: '8px 0' }} />
|
|
3555
|
+
<p
|
|
3556
|
+
style={{
|
|
3557
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3558
|
+
fontWeight: 700,
|
|
3559
|
+
fontSize: 14,
|
|
3560
|
+
lineHeight: '13px',
|
|
3561
|
+
color: '#0E2238',
|
|
3562
|
+
margin: 0,
|
|
3563
|
+
marginBottom: 3,
|
|
3564
|
+
}}
|
|
3565
|
+
>
|
|
3566
|
+
{t('autobahn:modal.contractTypeLabel')}
|
|
3567
|
+
</p>
|
|
3568
|
+
<p
|
|
3569
|
+
style={{
|
|
3570
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3571
|
+
fontWeight: 400,
|
|
3572
|
+
fontSize: 12,
|
|
3573
|
+
lineHeight: '13px',
|
|
3574
|
+
color: '#0E2238',
|
|
3575
|
+
margin: 0,
|
|
3576
|
+
}}
|
|
3577
|
+
>
|
|
3578
|
+
{t('autobahn:modal.contractTypeValue')}
|
|
3579
|
+
</p>
|
|
3580
|
+
</>
|
|
3581
|
+
)}
|
|
3582
|
+
</div>
|
|
3583
|
+
</div>
|
|
3584
|
+
{/* leasing-only mandatory-package disclosure (Figma "Hinweisbox") — the
|
|
3585
|
+
Rundum-Sorglos-Paket is compulsory for leasing (unlike financing, where
|
|
3586
|
+
it's an optional add-on), so it gets its own callout instead of a bullet. */}
|
|
3587
|
+
{isLease && hasAddServicesRow && (
|
|
3588
|
+
<div
|
|
3589
|
+
style={{
|
|
3590
|
+
display: 'flex',
|
|
3591
|
+
alignItems: 'flex-start',
|
|
3592
|
+
gap: 10,
|
|
3593
|
+
background: '#F7FAFE',
|
|
3594
|
+
border: '0.5px solid #D6DEE8',
|
|
3595
|
+
borderRadius: 5,
|
|
3596
|
+
padding: '7px 8px',
|
|
3597
|
+
marginBottom: 10,
|
|
3598
|
+
}}
|
|
3599
|
+
>
|
|
3600
|
+
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none', marginTop: 2 }}>
|
|
3601
|
+
<circle cx="12" cy="12" r="10" stroke="#0E2238" strokeWidth="1.6" />
|
|
3602
|
+
<path d="M12 16v-4" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3603
|
+
<path d="M12 8h.01" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3604
|
+
</svg>
|
|
3605
|
+
<p
|
|
3606
|
+
style={{
|
|
3607
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3608
|
+
fontWeight: 400,
|
|
3609
|
+
fontSize: 10,
|
|
3610
|
+
lineHeight: '10px',
|
|
3611
|
+
textAlign: 'justify',
|
|
3612
|
+
color: '#0E2238',
|
|
3613
|
+
margin: 0,
|
|
3614
|
+
}}
|
|
3615
|
+
>
|
|
3616
|
+
{t('autobahn:modal.packageMandatoryNotice', { amount: eur(addServicesCostRaw ?? 0) })}
|
|
3617
|
+
</p>
|
|
3618
|
+
</div>
|
|
3556
3619
|
)}
|
|
3557
|
-
</div>
|
|
3558
|
-
</div>
|
|
3559
|
-
{/* leasing-only mandatory-package disclosure (Figma "Hinweisbox") — the
|
|
3560
|
-
Rundum-Sorglos-Paket is compulsory for leasing (unlike financing, where
|
|
3561
|
-
it's an optional add-on), so it gets its own callout instead of a bullet. */}
|
|
3562
|
-
{isLease && hasAddServicesRow && (
|
|
3563
|
-
<div
|
|
3564
|
-
style={{
|
|
3565
|
-
display: 'flex',
|
|
3566
|
-
alignItems: 'flex-start',
|
|
3567
|
-
gap: 10,
|
|
3568
|
-
background: '#F7FAFE',
|
|
3569
|
-
border: '0.5px solid #D6DEE8',
|
|
3570
|
-
borderRadius: 5,
|
|
3571
|
-
padding: '7px 8px',
|
|
3572
|
-
marginBottom: 10,
|
|
3573
|
-
}}
|
|
3574
|
-
>
|
|
3575
|
-
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style={{ flex: 'none', marginTop: 2 }}>
|
|
3576
|
-
<circle cx="12" cy="12" r="10" stroke="#0E2238" strokeWidth="1.6" />
|
|
3577
|
-
<path d="M12 16v-4" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3578
|
-
<path d="M12 8h.01" stroke="#0E2238" strokeWidth="1.6" strokeLinecap="round" />
|
|
3579
|
-
</svg>
|
|
3580
3620
|
<p
|
|
3581
3621
|
style={{
|
|
3582
3622
|
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3583
|
-
fontWeight:
|
|
3584
|
-
fontSize:
|
|
3585
|
-
lineHeight: '
|
|
3586
|
-
textAlign: 'justify',
|
|
3587
|
-
color: '#0E2238',
|
|
3588
|
-
margin: 0,
|
|
3589
|
-
}}
|
|
3590
|
-
>
|
|
3591
|
-
{t('autobahn:modal.packageMandatoryNotice', { amount: eur(addServicesCostRaw ?? 0) })}
|
|
3592
|
-
</p>
|
|
3593
|
-
</div>
|
|
3594
|
-
)}
|
|
3595
|
-
<p
|
|
3596
|
-
style={{
|
|
3597
|
-
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3598
|
-
fontWeight: 700,
|
|
3599
|
-
fontSize: 13.3,
|
|
3600
|
-
lineHeight: '17px',
|
|
3601
|
-
color: '#0E2238',
|
|
3602
|
-
margin: 0,
|
|
3603
|
-
marginBottom: 7,
|
|
3604
|
-
}}
|
|
3605
|
-
>
|
|
3606
|
-
{t('autobahn:modal.legalNoticesTitle')}
|
|
3607
|
-
</p>
|
|
3608
|
-
{isLease ? (
|
|
3609
|
-
<>
|
|
3610
|
-
<p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 5 }}>
|
|
3611
|
-
{t('autobahn:modal.legalFootnoteAcquisitionPrice')}
|
|
3612
|
-
</p>
|
|
3613
|
-
<p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 10 }}>
|
|
3614
|
-
{t('autobahn:modal.legalFootnoteListPriceLease')}
|
|
3615
|
-
</p>
|
|
3616
|
-
<p
|
|
3617
|
-
style={{
|
|
3618
|
-
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3619
|
-
fontWeight: 400,
|
|
3620
|
-
fontSize: 12,
|
|
3621
|
-
lineHeight: '12px',
|
|
3623
|
+
fontWeight: 700,
|
|
3624
|
+
fontSize: 13.3,
|
|
3625
|
+
lineHeight: '17px',
|
|
3622
3626
|
color: '#0E2238',
|
|
3623
3627
|
margin: 0,
|
|
3624
|
-
|
|
3628
|
+
marginBottom: 7,
|
|
3625
3629
|
}}
|
|
3626
3630
|
>
|
|
3627
|
-
{t('autobahn:modal.
|
|
3628
|
-
<br />
|
|
3629
|
-
{t('autobahn:modal.closingDisclaimerLine2')}
|
|
3631
|
+
{t('autobahn:modal.legalNoticesTitle')}
|
|
3630
3632
|
</p>
|
|
3631
|
-
|
|
3632
|
-
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
t('autobahn:modal.legalNoticeAddServices'),
|
|
3641
|
-
].map((notice) => (
|
|
3642
|
-
<li
|
|
3643
|
-
key={notice}
|
|
3633
|
+
{isLease ? (
|
|
3634
|
+
<>
|
|
3635
|
+
<p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 5 }}>
|
|
3636
|
+
{t('autobahn:modal.legalFootnoteAcquisitionPrice')}
|
|
3637
|
+
</p>
|
|
3638
|
+
<p style={{ fontFamily: 'Arial, Helvetica, Arimo, sans-serif', fontWeight: 400, fontSize: 12, lineHeight: '12px', color: '#0E2238', margin: 0, marginBottom: 10 }}>
|
|
3639
|
+
{t('autobahn:modal.legalFootnoteListPriceLease')}
|
|
3640
|
+
</p>
|
|
3641
|
+
<p
|
|
3644
3642
|
style={{
|
|
3645
3643
|
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3646
3644
|
fontWeight: 400,
|
|
3647
3645
|
fontSize: 12,
|
|
3648
3646
|
lineHeight: '12px',
|
|
3649
3647
|
color: '#0E2238',
|
|
3648
|
+
margin: 0,
|
|
3649
|
+
paddingBottom: 10,
|
|
3650
3650
|
}}
|
|
3651
3651
|
>
|
|
3652
|
-
{
|
|
3653
|
-
|
|
3654
|
-
|
|
3655
|
-
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
|
|
3668
|
-
|
|
3652
|
+
{t('autobahn:modal.closingDisclaimerLine1')}
|
|
3653
|
+
<br />
|
|
3654
|
+
{t('autobahn:modal.closingDisclaimerLine2')}
|
|
3655
|
+
</p>
|
|
3656
|
+
</>
|
|
3657
|
+
) : (
|
|
3658
|
+
<>
|
|
3659
|
+
<ul style={{ margin: 0, marginBottom: 3, paddingLeft: 16, display: 'flex', flexDirection: 'column', gap: 3 }}>
|
|
3660
|
+
{[
|
|
3661
|
+
t('autobahn:modal.legalNoticeCreditworthiness'),
|
|
3662
|
+
t('autobahn:modal.legalNoticeExample'),
|
|
3663
|
+
t('autobahn:modal.legalNoticeTwoThirds'),
|
|
3664
|
+
t('autobahn:modal.legalNoticeVat'),
|
|
3665
|
+
t('autobahn:modal.legalNoticeAddServices'),
|
|
3666
|
+
].map((notice) => (
|
|
3667
|
+
<li
|
|
3668
|
+
key={notice}
|
|
3669
|
+
style={{
|
|
3670
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3671
|
+
fontWeight: 400,
|
|
3672
|
+
fontSize: 12,
|
|
3673
|
+
lineHeight: '12px',
|
|
3674
|
+
color: '#0E2238',
|
|
3675
|
+
}}
|
|
3676
|
+
>
|
|
3677
|
+
{notice}
|
|
3678
|
+
</li>
|
|
3679
|
+
))}
|
|
3680
|
+
</ul>
|
|
3681
|
+
<p
|
|
3682
|
+
style={{
|
|
3683
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3684
|
+
fontWeight: 400,
|
|
3685
|
+
fontSize: 12,
|
|
3686
|
+
lineHeight: '12px',
|
|
3687
|
+
color: '#0E2238',
|
|
3688
|
+
margin: 0,
|
|
3689
|
+
paddingBottom: 10,
|
|
3690
|
+
}}
|
|
3691
|
+
>
|
|
3692
|
+
{t('autobahn:modal.listPriceFootnote')}
|
|
3693
|
+
</p>
|
|
3694
|
+
</>
|
|
3695
|
+
)}
|
|
3696
|
+
<div ref={mobileBottomCtaRef} className="fin-sheet-cta-row" style={{ display: 'flex', gap: 7, paddingBottom: 15 }}>
|
|
3697
|
+
<Button
|
|
3698
|
+
variant="filled"
|
|
3699
|
+
size="lg"
|
|
3700
|
+
style={{
|
|
3701
|
+
width: 286,
|
|
3702
|
+
height: 50,
|
|
3703
|
+
background: '#005CFF',
|
|
3704
|
+
borderRadius: 16,
|
|
3705
|
+
justifyContent: 'flex-start',
|
|
3706
|
+
paddingLeft: 47,
|
|
3707
|
+
paddingRight: 47,
|
|
3708
|
+
fontFamily: 'Arial, Helvetica, Arimo, sans-serif',
|
|
3709
|
+
fontWeight: 700,
|
|
3710
|
+
fontSize: 16,
|
|
3711
|
+
lineHeight: '18px',
|
|
3712
|
+
textAlign: 'center',
|
|
3713
|
+
color: '#FFFFFF',
|
|
3714
|
+
}}
|
|
3715
|
+
onClick={onSecure}
|
|
3716
|
+
>
|
|
3717
|
+
<span style={{ display: 'inline-flex', marginRight: 18 }}>
|
|
3718
|
+
<DocCheckIcon size={23} />
|
|
3719
|
+
</span>
|
|
3720
|
+
{t('autobahn:finance.requestRate')}
|
|
3721
|
+
</Button>
|
|
3722
|
+
{/* padding:0 — mbtn--lg's 30px side padding left no room for the icon at width 52 */}
|
|
3723
|
+
<Button
|
|
3724
|
+
variant="outlined"
|
|
3725
|
+
size="lg"
|
|
3726
|
+
icon="phone"
|
|
3727
|
+
className="fin-sheet-call-btn"
|
|
3728
|
+
style={{
|
|
3729
|
+
width: 50,
|
|
3730
|
+
height: 50,
|
|
3731
|
+
flex: 'none',
|
|
3732
|
+
padding: 0,
|
|
3733
|
+
background: '#FFFFFF',
|
|
3734
|
+
border: '1.6px solid #005CFF',
|
|
3735
|
+
borderRadius: 16,
|
|
3736
|
+
}}
|
|
3737
|
+
onClick={onCall}
|
|
3738
|
+
/>
|
|
3739
|
+
</div>
|
|
3669
3740
|
</>
|
|
3670
3741
|
)}
|
|
3671
3742
|
</>
|