@bytebrand/fe-ui-core-autobahn 1.0.46 → 1.0.48

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/fe-ui-core-autobahn",
3
- "version": "1.0.46",
3
+ "version": "1.0.48",
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
@@ -1650,12 +1650,17 @@
1650
1650
  /* sheet: no divider under the header; one under the rate row instead (Figma) */
1651
1651
  .md3 .fin-modal-head { border-bottom: 0; padding-bottom: 8px; }
1652
1652
  .md3 .fin-sheet-adjust { border-top: 1px solid var(--fig-tile-border); padding-top: 16px; }
1653
- /* sheet cash rows (Zahlung/Garantie/Lieferung) — Figma sizes (round 13: bigger still) */
1654
- .md3 .fin-modal .calcrow { padding: 17px 0; }
1653
+ /* sheet cash rows (Zahlung/Garantie/Lieferung) — Figma sizes (round 14: taller still) */
1654
+ .md3 .fin-modal .calcrow { padding: 20px 0; }
1655
1655
  .md3 .fin-modal .calcrow-label { font-size: 15px; color: var(--fig-gray); }
1656
1656
  .md3 .fin-modal .calcrow-value { font-size: 16px !important; color: var(--fig-navy); font-weight: 700 !important; }
1657
1657
  /* breathing room at the sheet's bottom edge — content must not stick to the viewport lip */
1658
1658
  .md3 .fin-modal-body { padding-bottom: 44px; }
1659
+ /* round 14: the sheet column stretches so the cash CTA row (margin-top:auto) can sink to
1660
+ the bottom with the Figma gap; taller-content modes just keep their natural height */
1661
+ .md3 .fin-modal-body > .show-mobile { min-height: 56vh; }
1662
+ /* inactive mode tabs are dark + bold on phone (Figma) */
1663
+ .md3 .fin-tab:not(.on) { color: var(--fig-navy); font-weight: 700; }
1659
1664
  /* condition tiles: Figma value size + roomier gap to the pills above */
1660
1665
  .md3 .zustand-tile .md-title-sm { font-size: 16.5px; }
1661
1666
  .md3 .vdp-header-extras .zustand-grid { margin-top: 10px; }
@@ -94,25 +94,29 @@ export const EvalBar: React.FunctionComponent<{ tier: number; leftPct?: number }
94
94
  /** Figma CTA icon — document with a check-in-circle badge over its bottom-right corner
95
95
  * (no single lucide glyph matches; composed from file-text + a knocked-out check-circle).
96
96
  * The badge backdrop assumes a filled (primary) button. */
97
- export const DocCheckIcon: React.FunctionComponent<{ size?: number }> = ({ size = 19 }) => (
98
- <span style={{ position: 'relative', display: 'inline-flex', flex: 'none' }}>
99
- <Icon name="file-text" size={size} stroke={2} />
100
- <span
101
- style={{
102
- position: 'absolute',
103
- right: -3,
104
- bottom: -2,
105
- display: 'flex',
106
- borderRadius: '50%',
107
- background: 'var(--md-primary)',
108
- padding: 1,
109
- }}
110
- >
111
- {/* badge ≈ half the doc — at 62% it swallowed the document at button size */}
112
- <Icon name="check-circle" size={Math.max(9, Math.round(size * 0.5))} stroke={2.8} />
97
+ export const DocCheckIcon: React.FunctionComponent<{ size?: number }> = ({ size = 19 }) => {
98
+ // inline width/height on BOTH icons — `.mbtn .lucide { width/height: 18px }` otherwise
99
+ // inflates the badge to full icon size and it swallows the document
100
+ const badge = Math.max(9, Math.round(size * 0.5));
101
+ return (
102
+ <span style={{ position: 'relative', display: 'inline-flex', flex: 'none' }}>
103
+ <Icon name="file-text" size={size} stroke={2} style={{ width: size, height: size }} />
104
+ <span
105
+ style={{
106
+ position: 'absolute',
107
+ right: -3,
108
+ bottom: -2,
109
+ display: 'flex',
110
+ borderRadius: '50%',
111
+ background: 'var(--md-primary)',
112
+ padding: 1,
113
+ }}
114
+ >
115
+ <Icon name="check-circle" size={badge} stroke={2.8} style={{ width: badge, height: badge }} />
116
+ </span>
113
117
  </span>
114
- </span>
115
- );
118
+ );
119
+ };
116
120
 
117
121
  export interface TermChipsProps {
118
122
  /** the selectable term values (months), e.g. [12,24,36,48,60,72]. */
@@ -391,6 +395,13 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
391
395
  {/* col 1 row 1: hero rate — Figma: "329 €" all-big, then a small stacked column with
392
396
  the struck old rate ABOVE "/mtl." (round 11; was a single baseline row) */}
393
397
  <div className="fin-rate-main">
398
+ {/* mobile Kaufen (Figma round 14): struck list price ABOVE the price, right-aligned —
399
+ replaces the Festpreis + UVP lines, which stay desktop-only */}
400
+ {isCash && showStrike && (
401
+ <div className="show-mobile" style={{ justifyContent: 'flex-end' }}>
402
+ <s className="num fin-rate-old">{eur(listPrice as number)} €</s>
403
+ </div>
404
+ )}
394
405
  <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
395
406
  <span
396
407
  className="num"
@@ -409,9 +420,9 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
409
420
  </span>
410
421
  )}
411
422
  </div>
412
- {isCash && <div className="md-label-sm">{t('autobahn:finance.fixedPrice')}</div>}
423
+ {isCash && <div className="md-label-sm hide-mobile">{t('autobahn:finance.fixedPrice')}</div>}
413
424
  {isCash && showStrike && (
414
- <div className="fin-kauf">
425
+ <div className="fin-kauf hide-mobile">
415
426
  {t('autobahn:finance.uvp')} <s>{eur(listPrice as number)} €</s>
416
427
  </div>
417
428
  )}
@@ -1755,7 +1755,8 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
1755
1755
  onChange={(checked) => onToggleAddServices && onToggleAddServices(checked)}
1756
1756
  />
1757
1757
  )}
1758
- <div style={{ display: 'flex', gap: 10 }}>
1758
+ {/* pushed to the sheet's bottom edge — Figma keeps a big breathing gap above */}
1759
+ <div style={{ display: 'flex', gap: 10, marginTop: 'auto' }}>
1759
1760
  <Button variant="filled" size="lg" style={{ flex: 1 }} onClick={onSecure}>
1760
1761
  <DocCheckIcon />
1761
1762
  {t('autobahn:finance.secureOffer')}