@bytebrand/fe-ui-core-autobahn 1.0.109 → 1.0.110

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.
@@ -280,7 +280,7 @@
280
280
  "srp": {
281
281
  "trust": {
282
282
  "topQuality": "Top Qualität",
283
- "warranty": "1 Jahr Garantie",
283
+ "warranty": "12 Monate Garantie",
284
284
  "financing": "Günstige Finanzierung",
285
285
  "testDrive": "14 Tage Probefahrt"
286
286
  },
@@ -497,7 +497,7 @@
497
497
  "seo": {
498
498
  "title": "{{name}} gebraucht kaufen | auto.de",
499
499
  "regPrefix": "EZ",
500
- "descriptionSuffix": " – online kaufen oder finanzieren bei auto.de. Inkl. 1 Jahr Garantie & 14 Tage Rückgaberecht."
500
+ "descriptionSuffix": " – online kaufen oder finanzieren bei auto.de. Inkl. 12 Monate Garantie & 14 Tage Rückgaberecht."
501
501
  }
502
502
  },
503
503
  "fuel": {
@@ -582,14 +582,14 @@
582
582
  "heading": "Fahrzeugbeschreibung",
583
583
  "showMore": "Mehr anzeigen",
584
584
  "showLess": "Weniger anzeigen",
585
- "defaultBody": "Dieser {{make}} {{model}} ({{trim}}) überzeugt mit {{power}} und {{gear}}. Das Fahrzeug ist scheckheftgepflegt, unfallfrei und stammt aus {{owners}}. Hand. Erstzulassung {{reg}}, Laufleistung {{km}} km, Außenfarbe {{color}}. Jedes auto.de-Fahrzeug durchläuft einen 130-Punkte-Check und kommt mit 1 Jahr Garantie sowie 14 Tagen Rückgaberecht. Lieferung deutschlandweit bis vor die Tür oder Abholung nach Vereinbarung. Finanzierung und Leasing zu fairen Konditionen direkt online — die monatliche Rate berechnest du oben im Rechner."
585
+ "defaultBody": "Dieser {{make}} {{model}} ({{trim}}) überzeugt mit {{power}} und {{gear}}. Das Fahrzeug ist scheckheftgepflegt, unfallfrei und stammt aus {{owners}}. Hand. Erstzulassung {{reg}}, Laufleistung {{km}} km, Außenfarbe {{color}}. Jedes auto.de-Fahrzeug durchläuft einen 130-Punkte-Check und kommt mit 12 Monate Garantie sowie 14 Tagen Rückgaberecht. Lieferung deutschlandweit bis vor die Tür oder Abholung nach Vereinbarung. Finanzierung und Leasing zu fairen Konditionen direkt online — die monatliche Rate berechnest du oben im Rechner."
586
586
  },
587
587
  "trust": {
588
- "warranty": "1 Jahr Garantie",
588
+ "warranty": "12 Monate Garantie",
589
589
  "return": "14 Tage Rückgabe",
590
590
  "delivery": "Lieferung o. Abholung",
591
591
  "inspection": "130-Punkte-Check",
592
- "warrantySub": "Sicher fahren - ein ganzes Jahr",
592
+ "warrantySub": "Sicher fahren - 12 Monate lang",
593
593
  "returnSub": "Ohne Angabe von Gründen",
594
594
  "deliverySub": "Deutschlandweit flexibel wählen",
595
595
  "inspectionSub": "Geprüfte Qualität für mehr Sicherheit"
@@ -280,7 +280,7 @@
280
280
  "srp": {
281
281
  "trust": {
282
282
  "topQuality": "Top Quality",
283
- "warranty": "1 year warranty",
283
+ "warranty": "12 months warranty",
284
284
  "financing": "Affordable financing",
285
285
  "testDrive": "14 days test drive"
286
286
  },
@@ -497,7 +497,7 @@
497
497
  "seo": {
498
498
  "title": "{{name}} used car for sale | auto.de",
499
499
  "regPrefix": "Reg.",
500
- "descriptionSuffix": " – buy or finance online at auto.de. Incl. 1-year warranty & 14-day return policy."
500
+ "descriptionSuffix": " – buy or finance online at auto.de. Incl. 12-month warranty & 14-day return policy."
501
501
  }
502
502
  },
503
503
  "fuel": {
@@ -582,14 +582,14 @@
582
582
  "heading": "Vehicle description",
583
583
  "showMore": "Show more",
584
584
  "showLess": "Show less",
585
- "defaultBody": "This {{make}} {{model}} ({{trim}}) impresses with {{power}} and {{gear}}. The vehicle has a full service history, is accident-free and comes from owner no. {{owners}}. First registration {{reg}}, mileage {{km}} km, exterior colour {{color}}. Every auto.de vehicle passes a 130-point check and comes with a 1-year warranty as well as a 14-day right of return. Delivery throughout Germany to your door, or collection by appointment. Financing and leasing at fair terms directly online — calculate your monthly rate in the calculator above."
585
+ "defaultBody": "This {{make}} {{model}} ({{trim}}) impresses with {{power}} and {{gear}}. The vehicle has a full service history, is accident-free and comes from owner no. {{owners}}. First registration {{reg}}, mileage {{km}} km, exterior colour {{color}}. Every auto.de vehicle passes a 130-point check and comes with a 12-month warranty as well as a 14-day right of return. Delivery throughout Germany to your door, or collection by appointment. Financing and leasing at fair terms directly online — calculate your monthly rate in the calculator above."
586
586
  },
587
587
  "trust": {
588
- "warranty": "1-year warranty",
588
+ "warranty": "12-month warranty",
589
589
  "return": "14-day returns",
590
590
  "delivery": "Delivery or collection",
591
591
  "inspection": "130-point check",
592
- "warrantySub": "Drive safe — a full year",
592
+ "warrantySub": "Drive safe — for 12 months",
593
593
  "returnSub": "No questions asked",
594
594
  "deliverySub": "Flexible across Germany",
595
595
  "inspectionSub": "Inspected quality for extra peace of mind"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/fe-ui-core-autobahn",
3
- "version": "1.0.109",
3
+ "version": "1.0.110",
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
@@ -6718,6 +6718,12 @@ line-height: 31px;
6718
6718
  .md3 .gitem {
6719
6719
  padding: 20px 18px;
6720
6720
  }
6721
+ /* title font-size 16→14 on mobile only — desktop keeps the inline style={{ fontSize: 16 }}
6722
+ set in NewMainPage.tsx's GuaranteeBand unchanged; !important is required here to beat
6723
+ that inline style (icon sizes are untouched, only the title text shrinks). */
6724
+ .md3 .gitem .md-title-sm {
6725
+ font-size: 14px !important;
6726
+ }
6721
6727
  /* steps/hiw: the ≤980 Figma vertical-list card already applies here */
6722
6728
  /* --- VDP header card: structured phone layout (desktop-composed VdpHeaderCard,
6723
6729
  hidden on phone via hide-mobile — kept for tablet widths 600-980px where the
@@ -6821,6 +6827,13 @@ line-height: 31px;
6821
6827
  .md3 .zustand-tile:nth-child(n + 3) {
6822
6828
  border-top: 1px solid #d4dde7;
6823
6829
  }
6830
+ /* Garantie label's "more info" link icon — 15x15 on mobile only (desktop keeps the
6831
+ Icon component's own size={14} prop, untouched); higher specificity than any
6832
+ .zustand-tile .lucide sizing rule beats it regardless of source order. */
6833
+ .md3 .zustand-tile a .lucide {
6834
+ width: 15px;
6835
+ height: 15px;
6836
+ }
6824
6837
  .md3 .curated-grid {
6825
6838
  grid-template-columns: 1fr;
6826
6839
  gap: 12px;
@@ -7029,6 +7042,14 @@ line-height: 31px;
7029
7042
  height: 22px;
7030
7043
  margin-top: 1px;
7031
7044
  }
7045
+ /* "12 Monate Garantie" label's "more info" link icon — 15x15 on mobile only (desktop
7046
+ keeps the Icon component's own size={14} prop) — higher specificity than the 22px
7047
+ rule above beats it regardless of source order. */
7048
+ .md3 .trust-strip a .lucide {
7049
+ width: 15px;
7050
+ height: 15px;
7051
+ margin-top: 0;
7052
+ }
7032
7053
  .md3 .trust-strip > div > span {
7033
7054
  display: block;
7034
7055
  font-family: Arial, Helvetica, sans-serif;
@@ -197,24 +197,43 @@ export const VdpHeaderHighlights: React.FunctionComponent<VdpHeaderCardProps> =
197
197
  export const VdpHeaderCondition: React.FunctionComponent<VdpHeaderCardProps> = ({ vehicle, t }) => {
198
198
  const { condition } = vehicle;
199
199
  // condition.hu === 'Neu' compares the RAW backend data value, not a display string — left as-is.
200
- const tiles: ReadonlyArray<readonly [string, string, string]> = [
200
+ // 4th (optional) tuple element: label opens this URL in a new tab via a small info icon —
201
+ // only the Garantie tile has one, linking out to auto.de's warranty policy page.
202
+ const tiles: ReadonlyArray<readonly [string, string, string, string?]> = [
201
203
  ['wrench', t('autobahn:header.huLabel'), condition.hu === 'Neu' ? t('autobahn:header.huNew') : t('autobahn:header.huUntil', { date: condition.hu })],
202
204
  ['shield-check', t('autobahn:header.accidentFree'), condition.unfallfrei ? t('autobahn:header.yes') : t('autobahn:header.no')],
203
205
  ['clipboard-check', t('autobahn:header.serviceHistory'), condition.scheckheft ? t('autobahn:header.yes') : t('autobahn:header.no')],
204
- ['award', t('autobahn:header.warranty'), condition.garantie],
206
+ ['award', t('autobahn:header.warranty'), condition.garantie, 'https://www.auto.de/garantie/'],
205
207
  ];
206
208
  return (
207
209
  <div className="zustand-grid">
208
- {tiles.map(([ic, l, v]) => (
210
+ {tiles.map(([ic, l, v, labelLinkUrl]) => (
209
211
  <div key={l} className="zustand-tile">
210
212
  <Icon name={ic} size={19} color="var(--md-primary)" stroke={1.9} style={{ flex: 'none' }} />
211
213
  <span style={{ minWidth: 0 }}>
212
- <span
213
- className="md-label-sm"
214
- style={{ display: 'block', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}
215
- >
216
- {l}
217
- </span>
214
+ {labelLinkUrl ? (
215
+ <span className="md-label-sm" style={{ display: 'flex', alignItems: 'center', gap: 4, minWidth: 0 }}>
216
+ <span style={{ minWidth: 0, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>
217
+ {l}
218
+ </span>
219
+ <a
220
+ href={labelLinkUrl}
221
+ target="_blank"
222
+ rel="noopener noreferrer"
223
+ aria-label={l}
224
+ style={{ display: 'inline-flex', flex: 'none', cursor: 'pointer' }}
225
+ >
226
+ <Icon name="info" size={14} color="var(--md-primary)" />
227
+ </a>
228
+ </span>
229
+ ) : (
230
+ <span
231
+ className="md-label-sm"
232
+ style={{ display: 'block', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}
233
+ >
234
+ {l}
235
+ </span>
236
+ )}
218
237
  <span className="md-title-sm" style={{ display: 'block' }}>
219
238
  {v}
220
239
  </span>
@@ -550,8 +569,8 @@ export const VehicleDescription: React.FunctionComponent<VehicleDescriptionProps
550
569
  // Trust strip
551
570
  // ---------------------------------------------------------------------------
552
571
 
553
- /** [kebab-case lucide icon, label, optional subline (mobile Figma tiles)]. */
554
- export type TrustItem = readonly [icon: string, label: string, sub?: string];
572
+ /** [kebab-case lucide icon, label, optional subline (mobile Figma tiles), optional label link URL]. */
573
+ export type TrustItem = readonly [icon: string, label: string, sub?: string, linkUrl?: string];
555
574
 
556
575
  export interface TrustStripProps {
557
576
  /** trust badges; defaults to auto.de's four standard promises. */
@@ -560,9 +579,9 @@ export interface TrustStripProps {
560
579
  t: TranslationFunction;
561
580
  }
562
581
 
563
- /** auto.de's four standard promises — [icon, i18n label key, i18n subline key]. */
564
- const DEFAULT_TRUST: ReadonlyArray<readonly [string, string, string]> = [
565
- ['shield-check', 'autobahn:trust.warranty', 'autobahn:trust.warrantySub'],
582
+ /** auto.de's four standard promises — [icon, i18n label key, i18n subline key, optional label link URL]. */
583
+ const DEFAULT_TRUST: ReadonlyArray<readonly [string, string, string, string?]> = [
584
+ ['shield-check', 'autobahn:trust.warranty', 'autobahn:trust.warrantySub', 'https://www.auto.de/garantie/'],
566
585
  ['undo-2', 'autobahn:trust.return', 'autobahn:trust.returnSub'],
567
586
  ['truck', 'autobahn:trust.delivery', 'autobahn:trust.deliverySub'],
568
587
  ['badge-check', 'autobahn:trust.inspection', 'autobahn:trust.inspectionSub'],
@@ -572,11 +591,26 @@ const DEFAULT_TRUST: ReadonlyArray<readonly [string, string, string]> = [
572
591
  * (the .trust-sub sublines only surface in the mobile tile layout via CSS). */
573
592
  export const TrustStrip: React.FunctionComponent<TrustStripProps> = ({ items, t }) => (
574
593
  <div className="trust-strip">
575
- {(items ?? DEFAULT_TRUST.map(([ic, key, subKey]) => [ic, t(key), t(subKey)] as TrustItem)).map(([ic, label, sub]) => (
594
+ {(items ?? DEFAULT_TRUST.map(([ic, key, subKey, linkUrl]) => [ic, t(key), t(subKey), linkUrl] as TrustItem)).map(([ic, label, sub, linkUrl]) => (
576
595
  <div key={label}>
577
596
  <Icon name={ic} size={17} color="var(--md-primary)" stroke={2} style={{ flex: 'none' }} />
578
597
  <span style={{ minWidth: 0 }}>
579
- {label}
598
+ {linkUrl ? (
599
+ <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4 }}>
600
+ {label}
601
+ <a
602
+ href={linkUrl}
603
+ target="_blank"
604
+ rel="noopener noreferrer"
605
+ aria-label={label}
606
+ style={{ display: 'inline-flex', flex: 'none', cursor: 'pointer' }}
607
+ >
608
+ <Icon name="info" size={14} color="var(--md-primary)" />
609
+ </a>
610
+ </span>
611
+ ) : (
612
+ label
613
+ )}
580
614
  {sub && <span className="trust-sub">{sub}</span>}
581
615
  </span>
582
616
  </div>
@@ -2420,7 +2454,9 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
2420
2454
  <div style={{ display: 'flex', flexDirection: 'column', gap: 16, marginBottom: 18 }}>
2421
2455
  <div>
2422
2456
  <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 6 }}>
2423
- <span className="md-title-sm">{t('autobahn:finance.downPaymentSliderLabelSheet')}</span>
2457
+ <span className="md-title-sm">
2458
+ {t(isLease ? 'autobahn:finance.downPaymentSliderLabelSheet' : 'autobahn:finance.downPaymentSliderLabel')}
2459
+ </span>
2424
2460
  <span className="num" style={{ fontWeight: 700 }}>
2425
2461
  {eur(down)} €
2426
2462
  </span>
@@ -3028,7 +3064,7 @@ export const FinanceDetailsModal: React.FunctionComponent<FinanceDetailsModalPro
3028
3064
  <div>
3029
3065
  <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
3030
3066
  <span className="md-title-sm" style={{ display: 'inline-flex', alignItems: 'center', gap: 5 }}>
3031
- {t('autobahn:finance.downPaymentSliderLabelSheet')}
3067
+ {t(isLease ? 'autobahn:finance.downPaymentSliderLabelSheet' : 'autobahn:finance.downPaymentSliderLabel')}
3032
3068
  </span>
3033
3069
  <span className="num fin-down-value" style={{ fontWeight: 700, color: 'var(--md-primary)' }}>
3034
3070
  {eur(down)} €
package/vdp/types.ts CHANGED
@@ -35,7 +35,7 @@ export interface VehicleCondition {
35
35
  unfallfrei: boolean;
36
36
  /** full service history (Scheckheftgepflegt). */
37
37
  scheckheft: boolean;
38
- /** warranty label, e.g. '1 Jahr inkl.'. */
38
+ /** warranty label, e.g. '12 Monate inkl.'. */
39
39
  garantie: string;
40
40
  }
41
41