@bytebrand/fe-ui-core-autobahn 1.0.20 → 1.0.21

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.20",
3
+ "version": "1.0.21",
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
@@ -174,6 +174,13 @@
174
174
  border-radius: var(--md-r-full); background: rgba(0,0,0,.55); color: #fff; font-size: 12px; font-weight: 500; backdrop-filter: blur(2px); }
175
175
  .md3 .imglabel .lucide { width: 14px; height: 14px; }
176
176
 
177
+ /* mobile-only row under the gallery image: photo-count (plain text link, not an overlay
178
+ pill — the dark .imglabel pill only makes sense against the image itself) · favorite/share. */
179
+ .md3 .gallery-controls-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 2px 0; }
180
+ .md3 .gallery-photos-btn { display: inline-flex; align-items: center; gap: 6px; border: 0; background: none;
181
+ cursor: pointer; font: inherit; font-size: 13px; font-weight: 600; color: var(--md-on-surface-variant); padding: 0; }
182
+ .md3 .gallery-photos-btn .lucide { width: 15px; height: 15px; }
183
+
177
184
  /* ---------- cards ---------- */
178
185
  .md3 .mcard { background: var(--md-sc-lowest); border-radius: var(--md-r-md); border: 1px solid var(--md-outline-variant);
179
186
  overflow: hidden; transition: box-shadow var(--dur-2) var(--ease-standard), border-color var(--dur-2) var(--ease-standard), transform var(--dur-2) var(--ease-standard); }
@@ -1150,7 +1157,7 @@
1150
1157
  .md3 .fin-tabs { display: flex; border-bottom: 1px solid var(--md-outline-variant); margin-bottom: 18px; }
1151
1158
  .md3 .fin-tab { flex: 1; background: none; border: 0; padding: 11px 4px; cursor: pointer; font: inherit;
1152
1159
  font-size: 13.5px; font-weight: 600; color: var(--md-on-surface-variant); border-bottom: 2px solid transparent;
1153
- margin-bottom: -1px; transition: color .15s, border-color .15s; }
1160
+ margin-bottom: -1px; transition: color .15s, border-color .15s; text-align: center; }
1154
1161
  .md3 .fin-tab.on { color: var(--md-primary); border-bottom-color: var(--md-primary); }
1155
1162
  .md3 .fin-tab:hover:not(.on) { color: var(--md-on-surface); }
1156
1163
  /* 2-col grid: left grows, right fixed 148px — pill (row 1) and bar (row 2) share a column edge, never wrap */
@@ -1208,10 +1215,13 @@
1208
1215
  .md3 .enquiry-phone { margin-top: 16px; }
1209
1216
  }
1210
1217
 
1211
- /* sticky mobile CTA bar (VDP) */
1218
+ /* sticky mobile CTA bar (VDP) — hidden (slid off-screen) until the page scrolls past the
1219
+ main offer card, matching the desktop VdpStickyBar's show/scroll-gated behavior. */
1212
1220
  .md3 .vdp-bottom-bar { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; background: var(--md-sc-lowest);
1213
1221
  border-top: 1px solid var(--md-outline-variant); box-shadow: 0 -2px 14px rgba(0,0,0,.10);
1214
- padding: 10px 16px; align-items: center; gap: 14px; }
1222
+ padding: 10px 16px; align-items: center; gap: 14px;
1223
+ transform: translateY(100%); transition: transform var(--dur-2, .25s); }
1224
+ .md3 .vdp-bottom-bar--on { transform: translateY(0); }
1215
1225
 
1216
1226
  /* bottom-sheet (SRP filters) — sticky header + scrollable body + sticky action bar, slide-up entrance */
1217
1227
  .md3 .sheet-scrim { position: fixed; inset: 0; background: rgba(16,22,42,.5); z-index: 70;
@@ -505,18 +505,13 @@ const FinanceCalculator: React.FunctionComponent<FinanceCalculatorProps> = ({
505
505
  <div className="md-label-sm">{t('autobahn:finance.personalConsultationSub')}</div>
506
506
  </div>
507
507
  </div>
508
- {isCash ? (
508
+ {/* non-cash: the Finanzierungsdetails link already sits on the auto.de-ID row
509
+ above — showing it here too was a duplicate (round-3 regression). */}
510
+ {isCash && (
509
511
  <div style={{ display: 'flex', alignItems: 'center', gap: 6, color: 'var(--md-on-surface-variant)' }}>
510
512
  <Icon name="info" size={15} />
511
513
  <span className="md-label-sm">{t('autobahn:finance.financingLeasingPossible')}</span>
512
514
  </div>
513
- ) : (
514
- onShowDetails && (
515
- <DetailsLink
516
- label={mode === 'leasing' ? t('autobahn:finance.leasingDetails') : t('autobahn:finance.financingDetails')}
517
- onClick={onShowDetails}
518
- />
519
- )
520
515
  )}
521
516
  </div>
522
517
 
@@ -922,6 +922,13 @@ export const VdpStickyBar: React.FunctionComponent<VdpStickyBarProps> = ({ vehic
922
922
 
923
923
  export interface VdpBottomBarProps {
924
924
  vehicle: VehicleDetail;
925
+ /**
926
+ * Whether the bar is docked/visible — mirrors VdpStickyBar's `show` (same
927
+ * page-owned scroll-position toggle, STICKY_SHOW_AT). Was unconditionally
928
+ * visible before, unlike the desktop VdpStickyBar; the mockup only shows it
929
+ * after scrolling past the main offer card.
930
+ */
931
+ show: boolean;
925
932
  /** primary CTA click. */
926
933
  onSecure?: () => void;
927
934
  /** i18n function (drilled from the page). */
@@ -929,8 +936,8 @@ export interface VdpBottomBarProps {
929
936
  }
930
937
 
931
938
  /** Mobile sticky bottom CTA bar — rate + Kaufpreis + "Angebot sichern". */
932
- export const VdpBottomBar: React.FunctionComponent<VdpBottomBarProps> = ({ vehicle, onSecure, t }) => (
933
- <div className="vdp-bottom-bar show-mobile">
939
+ export const VdpBottomBar: React.FunctionComponent<VdpBottomBarProps> = ({ vehicle, show, onSecure, t }) => (
940
+ <div className={'vdp-bottom-bar show-mobile' + (show ? ' vdp-bottom-bar--on' : '')}>
934
941
  <div style={{ flex: 1, minWidth: 0 }}>
935
942
  <div style={{ display: 'flex', alignItems: 'baseline', gap: 5, whiteSpace: 'nowrap' }}>
936
943
  <span className="md-label-sm">{t('autobahn:bottom.from')}</span>