@bytebrand/fe-ui-core-autobahn 1.0.92 → 1.0.93

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/cards/CarRow.tsx CHANGED
@@ -176,7 +176,7 @@ const CarRow: React.FunctionComponent<CarRowProps> = ({
176
176
  availability/Geprüft pill (not present in the Figma "mcard" export). */}
177
177
  <div
178
178
  className="hide-mobile"
179
- style={{ position: 'absolute', bottom: 12, left: 12, zIndex: 3, display: 'flex', alignItems: 'center', gap: 6 }}
179
+ style={{ position: 'absolute', bottom: 20, left: 12, zIndex: 3, display: 'flex', alignItems: 'center', gap: 6 }}
180
180
  >
181
181
  {car.photos > 1 && (
182
182
  <span className="mcard-photo-chip">
@@ -2,18 +2,8 @@
2
2
  // BaseModalWrapper is replaced by a plain fixed overlay + centered surface.
3
3
  // Deliberately NOT the kit ui/Modal — the cookie consent dialog has no title
4
4
  // bar / close button and must not be dismissible without a choice.
5
- //
6
- // Rendered via ReactDOM.createPortal into document.body (same technique as
7
- // ui/Modal.tsx) rather than inline in the page tree: a React hydration-mismatch
8
- // error ANYWHERE else on the page (a known, separate bug — see the
9
- // SearchNextPage isMobile SSR/CSR mismatch) can corrupt sibling reconciliation
10
- // enough that an inline `position: fixed` overlay ends up mounted in the wrong
11
- // place in the DOM (observed: appearing as plain content below the footer
12
- // instead of as an overlay). A body-level portal is immune to that — its DOM
13
- // node never lives inside the page's own React subtree.
14
5
 
15
6
  import * as React from 'react';
16
- import * as ReactDOM from 'react-dom';
17
7
 
18
8
  import ModalsConfig from './ModalsConfig';
19
9
 
@@ -40,19 +30,13 @@ const SURFACE: React.CSSProperties = {
40
30
  };
41
31
 
42
32
  const BasicModal = ({ isVisible, toggleModal, name, modalProps, handleSentryInit }: IBasicModal) => {
43
- if (!isVisible || typeof document === 'undefined') return null;
44
- return ReactDOM.createPortal(
45
- // wrapped in .md3: autobahn.css scopes every token/utility class (incl.
46
- // .mbtn used by the modal buttons) under `.md3` and intentionally does
47
- // nothing outside it — a bare document.body portal loses the theme.
48
- <div className='md3'>
49
- <div style={OVERLAY} role='dialog' aria-modal='true' aria-label='Cookie-Einstellungen'>
50
- <div style={SURFACE}>
51
- {ModalsConfig[name] && ModalsConfig[name]({ ...modalProps, toggleModal, handleSentryInit })}
52
- </div>
33
+ if (!isVisible) return null;
34
+ return (
35
+ <div style={OVERLAY} role='dialog' aria-modal='true' aria-label='Cookie-Einstellungen'>
36
+ <div style={SURFACE}>
37
+ {ModalsConfig[name] && ModalsConfig[name]({ ...modalProps, toggleModal, handleSentryInit })}
53
38
  </div>
54
- </div>,
55
- document.body
39
+ </div>
56
40
  );
57
41
  };
58
42
 
@@ -6,8 +6,9 @@ export const FIRST_INSTALLMENT_FIX = [
6
6
  ];
7
7
 
8
8
  export const MONTHLY_INSTALLMENT_FIX = [
9
- 'any', 50, 60, 70, 80, 90, 100, 125, 150, 175, 200, 225, 250, 275, 300, 350, 400, 450, 500, // tslint:disable-line
10
- 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000, 1100, 1200, 1300, 1400, 1500 // tslint:disable-line
9
+ 'any', 50, 100, 150, 200, 250, 300, 350, 400, 450, 500, // tslint:disable-line
10
+ 550, 600, 650, 700, 750, 800, 850, 900, 950, 1000, // tslint:disable-line
11
+ 1050, 1100, 1150, 1200, 1250, 1300, 1350, 1400, 1450, 1500 // tslint:disable-line
11
12
  ];
12
13
 
13
14
  export const PAYBACK_PERIOD_FIX = [
@@ -58,7 +58,9 @@ export const IMAGES_COUNT_FIX = [
58
58
  ];
59
59
 
60
60
  export const MILEAGE_FIX = [
61
- 0, 5000, 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000, 100000, 125000, 150000
61
+ 0, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000,
62
+ 55000, 60000, 65000, 70000, 75000, 80000, 85000, 90000, 95000, 100000,
63
+ 105000, 110000, 115000, 120000, 125000, 130000, 135000, 140000, 145000, 150000
62
64
  ];
63
65
 
64
66
  export const POWER_FIX = [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytebrand/fe-ui-core-autobahn",
3
- "version": "1.0.92",
3
+ "version": "1.0.93",
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
@@ -521,6 +521,12 @@ line-height: 31px;
521
521
  border-color var(--dur-2) var(--ease-standard),
522
522
  transform var(--dur-2) var(--ease-standard);
523
523
  }
524
+ /* the hero search card has no clipped media (unlike other .mcard uses) and its
525
+ .mselect-menu dropdowns can grow past the card's own bounds — the base
526
+ .mcard overflow: hidden would otherwise cut off the option list. */
527
+ .md3 .hero-search {
528
+ overflow: visible;
529
+ }
524
530
  .md3 .mcard--elevated {
525
531
  border: 0;
526
532
  box-shadow: var(--md-e1);
@@ -4154,10 +4160,17 @@ line-height: 31px;
4154
4160
  margin: 6px 0 2px;
4155
4161
  touch-action: none;
4156
4162
  }
4163
+ /* inset 9px (half the 18px thumb, see ::-webkit-slider-thumb below) on each side — the native
4164
+ thumb's CENTER can only travel from thumbRadius to (width - thumbRadius) of the <input>'s own
4165
+ box, so it never physically reaches the container's true 0%/100% edge. Widening the input to
4166
+ overhang the container (the previous attempt here) just moves the mismatch: the thumb's outer
4167
+ half then pokes OUT past the container instead of stopping short of it. Insetting the visual
4168
+ track/fill to match the thumb's real (un-overhung) travel range instead — see .exslider-fill's
4169
+ calc() below — is the only way to get all three (track, fill, thumb) to line up flush. */
4157
4170
  .md3 .exslider-track {
4158
4171
  position: absolute;
4159
- left: 0;
4160
- right: 0;
4172
+ left: 9px;
4173
+ right: 9px;
4161
4174
  top: 50%;
4162
4175
  height: 4px;
4163
4176
  transform: translateY(-50%);