@bytebrand/fe-ui-core-autobahn 1.0.148 → 1.0.150
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 +37 -2
- package/vdp/VdpModules.tsx +16 -1
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.150",
|
|
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
|
@@ -5446,6 +5446,24 @@ line-height: 31px;
|
|
|
5446
5446
|
order: -1;
|
|
5447
5447
|
align-self: flex-end;
|
|
5448
5448
|
}
|
|
5449
|
+
/* ...but without adding a line to the price row: the struck UVP overlays the empty space
|
|
5450
|
+
above the (52px on a 58px line) Kaufen figure, right-aligned over it — so Kaufen's hero is
|
|
5451
|
+
exactly as tall as the Finanzierung/Leasing one (15px Figma gap from the tab underline to
|
|
5452
|
+
the figure on every tab, nothing below it moves on a tab switch; see .cc-hero-stack). */
|
|
5453
|
+
.md3 .cc-price .pp-hero--buy .pp-hero-rate {
|
|
5454
|
+
position: relative;
|
|
5455
|
+
}
|
|
5456
|
+
.md3 .cc-price .pp-hero--buy .pp-hero-unit-group {
|
|
5457
|
+
position: absolute;
|
|
5458
|
+
right: 0;
|
|
5459
|
+
bottom: calc(100% - 11px);
|
|
5460
|
+
}
|
|
5461
|
+
/* nudge the Kaufen figure 3px down (visual only, layout untouched) so the overlaid struck UVP
|
|
5462
|
+
line clears its glyph tops */
|
|
5463
|
+
.md3 .cc-price .pp-hero--buy .pp-hero-val {
|
|
5464
|
+
position: relative;
|
|
5465
|
+
top: 3px;
|
|
5466
|
+
}
|
|
5449
5467
|
/* Kaufen hero price on mobile — was falling through to the generic (rate-sized) .pp-hero-val
|
|
5450
5468
|
above (65px, shrinking only via the rate-digit len4/5/6 classes cardParts.tsx never applies
|
|
5451
5469
|
in Kaufen mode), so real purchase prices had no digit-based shrink at all here and could
|
|
@@ -6590,8 +6608,16 @@ line-height: 31px;
|
|
|
6590
6608
|
Both capped to the fixed inset:0 scrim's CURRENT visible height (%, not vh — on iOS Safari
|
|
6591
6609
|
100vh > the visible area while the toolbar shows, which pushed the sheet's top off-screen). */
|
|
6592
6610
|
.md3 .fin-modal {
|
|
6611
|
+
/* room under the fold for whatever overlays the bottom of the screen: the home-indicator
|
|
6612
|
+
inset, and on iOS 26+ Safari its floating bottom toolbar (.fin-modal--ios-toolbar below) —
|
|
6613
|
+
without it the "Finanzierungs-Details" link ended up hidden behind the toolbar. */
|
|
6614
|
+
--fin-sheet-bottom-gap: env(safe-area-inset-bottom, 0px);
|
|
6593
6615
|
max-width: none;
|
|
6594
|
-
height
|
|
6616
|
+
/* capped at the full visible height (not 100% - 24px): when the rate AND the details link
|
|
6617
|
+
don't fit otherwise (small iPhones behind Safari's floating toolbar), the sheet goes all the
|
|
6618
|
+
way up — both must be visible on open */
|
|
6619
|
+
--fin-sheet-collapsed: min(calc(var(--fin-sheet-fold, 85vh) + var(--fin-sheet-bottom-gap)), 100%);
|
|
6620
|
+
height: var(--fin-sheet-collapsed);
|
|
6595
6621
|
max-height: none;
|
|
6596
6622
|
background: #FFFFFF;
|
|
6597
6623
|
box-shadow: 0px -4px 18px rgba(0, 0, 0, 0.13);
|
|
@@ -6599,7 +6625,16 @@ line-height: 31px;
|
|
|
6599
6625
|
animation: sheet-up var(--dur-2);
|
|
6600
6626
|
}
|
|
6601
6627
|
.md3 .fin-modal.fin-modal--expanded {
|
|
6602
|
-
|
|
6628
|
+
/* never shorter than the collapsed sheet (which may already be full height) */
|
|
6629
|
+
height: max(var(--fin-sheet-collapsed), calc(100% - 24px));
|
|
6630
|
+
}
|
|
6631
|
+
.md3 .fin-modal .fin-modal-body {
|
|
6632
|
+
padding-bottom: calc(13px + var(--fin-sheet-bottom-gap));
|
|
6633
|
+
}
|
|
6634
|
+
/* iOS 26+ Safari: its floating bottom toolbar sits ON TOP of fixed content (~86pt from the
|
|
6635
|
+
screen bottom incl. the home indicator) — class set by FinanceDetailsModal from the UA */
|
|
6636
|
+
.md3 .fin-modal.fin-modal--ios-toolbar {
|
|
6637
|
+
--fin-sheet-bottom-gap: max(env(safe-area-inset-bottom, 0px), 84px);
|
|
6603
6638
|
}
|
|
6604
6639
|
/* set from the frame after the first fold measure (not on open — no 85vh -> fold shrink) */
|
|
6605
6640
|
.md3 .fin-modal.fin-modal--animated {
|
package/vdp/VdpModules.tsx
CHANGED
|
@@ -2270,6 +2270,16 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
2270
2270
|
const sheetRef = React.useRef<HTMLDivElement | null>(null);
|
|
2271
2271
|
const [sheetFold, setSheetFold] = React.useState<number | null>(null);
|
|
2272
2272
|
const [sheetAnimated, setSheetAnimated] = React.useState(false);
|
|
2273
|
+
// iOS 26+ Safari only (UA "Version/26…", not Chrome/Firefox/Edge for iOS): its floating bottom
|
|
2274
|
+
// toolbar overlays fixed content, so the sheet reserves room under its fold (md3.css
|
|
2275
|
+
// .fin-modal--ios-toolbar). Older iOS Safari keeps content above its toolbar by itself.
|
|
2276
|
+
const iosToolbarOverlay = React.useMemo((): boolean => {
|
|
2277
|
+
if (typeof navigator === 'undefined') return false;
|
|
2278
|
+
const ua = navigator.userAgent;
|
|
2279
|
+
if (!/iP(hone|od)/.test(ua) || /CriOS|FxiOS|EdgiOS/.test(ua)) return false;
|
|
2280
|
+
const m = /Version\/(\d+)/.exec(ua);
|
|
2281
|
+
return !!m && Number(m[1]) >= 26;
|
|
2282
|
+
}, []);
|
|
2273
2283
|
React.useLayoutEffect(() => {
|
|
2274
2284
|
if (!open) return;
|
|
2275
2285
|
const sheet = sheetRef.current;
|
|
@@ -2554,7 +2564,12 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
|
|
|
2554
2564
|
return (
|
|
2555
2565
|
<div className="fin-modal-scrim" onClick={onClose}>
|
|
2556
2566
|
<div
|
|
2557
|
-
className={
|
|
2567
|
+
className={
|
|
2568
|
+
'fin-modal' +
|
|
2569
|
+
(showBreakdown ? ' fin-modal--expanded' : '') +
|
|
2570
|
+
(sheetAnimated ? ' fin-modal--animated' : '') +
|
|
2571
|
+
(iosToolbarOverlay ? ' fin-modal--ios-toolbar' : '')
|
|
2572
|
+
}
|
|
2558
2573
|
style={sheetFold != null ? ({ '--fin-sheet-fold': `${sheetFold}px` } as React.CSSProperties) : undefined}
|
|
2559
2574
|
role="dialog"
|
|
2560
2575
|
aria-modal="true"
|