@revikornmann/muka-ui 0.2.3 → 0.2.4

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.
@@ -121,6 +121,15 @@
121
121
  backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
122
  -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
123
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
+
125
+ /* The transparent frosted margin around the pill overlays scrolling content;
126
+ let scroll/taps fall through to that content, keeping only the pill itself
127
+ interactive (re-enabled on __content below). */
128
+ pointer-events: none;
129
+ }
130
+
131
+ .muka-bottombar--floating .muka-bottombar__content {
132
+ pointer-events: auto;
124
133
  }
125
134
 
126
135
  .muka-bottombar--floating .muka-bottombar__content {
@@ -28,6 +28,7 @@
28
28
  --tb-title-line-height: var(--text-heading-xs-lineHeight);
29
29
  --tb-title-letter-spacing: var(--text-heading-xs-letterSpacing);
30
30
  --tb-breadcrumb-display: none;
31
+ --tb-pad-y: 0;
31
32
  }
32
33
 
33
34
  /* ─── Medium tier ─── */
@@ -58,16 +59,17 @@
58
59
  .muka-topbar:not([data-size]) {
59
60
  --tb-height: var(--topbar-height-lg);
60
61
  --tb-pad: var(--topbar-padding-x-lg);
62
+ --tb-pad-y: var(--spacing-4);
61
63
  --tb-title-position: static;
62
64
  --tb-title-left: auto;
63
65
  --tb-title-transform: none;
64
66
  --tb-title-align: left;
65
67
  --tb-title-max-width: none;
66
- --tb-title-font-family: var(--text-heading-lg-fontFamily);
67
- --tb-title-font-weight: var(--text-heading-lg-fontWeight);
68
- --tb-title-font-size: var(--text-heading-lg-fontSize);
69
- --tb-title-line-height: var(--text-heading-lg-lineHeight);
70
- --tb-title-letter-spacing: var(--text-heading-lg-letterSpacing);
68
+ --tb-title-font-family: var(--text-heading-md-fontFamily);
69
+ --tb-title-font-weight: var(--text-heading-md-fontWeight);
70
+ --tb-title-font-size: var(--text-heading-md-fontSize);
71
+ --tb-title-line-height: var(--text-heading-md-lineHeight);
72
+ --tb-title-letter-spacing: var(--text-heading-md-letterSpacing);
71
73
  --tb-breadcrumb-display: flex;
72
74
  }
73
75
  }
@@ -75,16 +77,17 @@
75
77
  .muka-topbar[data-size='lg'] {
76
78
  --tb-height: var(--topbar-height-lg);
77
79
  --tb-pad: var(--topbar-padding-x-lg);
80
+ --tb-pad-y: var(--spacing-4);
78
81
  --tb-title-position: static;
79
82
  --tb-title-left: auto;
80
83
  --tb-title-transform: none;
81
84
  --tb-title-align: left;
82
85
  --tb-title-max-width: none;
83
- --tb-title-font-family: var(--text-heading-lg-fontFamily);
84
- --tb-title-font-weight: var(--text-heading-lg-fontWeight);
85
- --tb-title-font-size: var(--text-heading-lg-fontSize);
86
- --tb-title-line-height: var(--text-heading-lg-lineHeight);
87
- --tb-title-letter-spacing: var(--text-heading-lg-letterSpacing);
86
+ --tb-title-font-family: var(--text-heading-md-fontFamily);
87
+ --tb-title-font-weight: var(--text-heading-md-fontWeight);
88
+ --tb-title-font-size: var(--text-heading-md-fontSize);
89
+ --tb-title-line-height: var(--text-heading-md-lineHeight);
90
+ --tb-title-letter-spacing: var(--text-heading-md-letterSpacing);
88
91
  --tb-breadcrumb-display: flex;
89
92
  }
90
93
 
@@ -109,17 +112,11 @@
109
112
  border-radius: var(--topbar-drag-handle-radius);
110
113
  }
111
114
 
112
- /* ─── Breadcrumb row (large tier) ─────────────────────── */
115
+ /* ─── Breadcrumb (large tier, stacked above the title) ── */
113
116
 
114
117
  .muka-topbar__breadcrumb {
115
118
  display: var(--tb-breadcrumb-display);
116
119
  align-items: center;
117
- padding: var(--spacing-3) var(--tb-pad) 0;
118
- }
119
-
120
- .muka-topbar:not(.muka-topbar--no-safe-area) .muka-topbar__breadcrumb {
121
- padding-left: max(var(--tb-pad), env(safe-area-inset-left));
122
- padding-right: max(var(--tb-pad), env(safe-area-inset-right));
123
120
  }
124
121
 
125
122
  /* ─── Container (the bar itself) ──────────────────────── */
@@ -128,8 +125,8 @@
128
125
  position: relative;
129
126
  display: flex;
130
127
  align-items: center;
131
- height: var(--tb-height);
132
- padding: 0 var(--tb-pad);
128
+ min-height: var(--tb-height);
129
+ padding: var(--tb-pad-y) var(--tb-pad);
133
130
  }
134
131
 
135
132
  /* Inset content on iPhone landscape with notch / iPad with curved corners. */
@@ -156,6 +153,36 @@
156
153
  display: none;
157
154
  }
158
155
 
156
+ /* ─── Heading (breadcrumb + title) ────────────────────── */
157
+
158
+ /* Base/sm/md: transparent wrapper so the title keeps its absolute-centered
159
+ layout (containing block stays the positioned container) and the breadcrumb
160
+ stays hidden — identical to the pre-refinement mobile bar. */
161
+ .muka-topbar__heading {
162
+ display: contents;
163
+ }
164
+
165
+ /* Large tier: a tight column with the breadcrumb stacked above the title. */
166
+ @media (min-width: 1024px) {
167
+ .muka-topbar:not([data-size]) .muka-topbar__heading {
168
+ display: flex;
169
+ flex-direction: column;
170
+ justify-content: center;
171
+ gap: var(--spacing-1);
172
+ flex: 1 1 0%;
173
+ min-width: 0;
174
+ }
175
+ }
176
+
177
+ .muka-topbar[data-size='lg'] .muka-topbar__heading {
178
+ display: flex;
179
+ flex-direction: column;
180
+ justify-content: center;
181
+ gap: var(--spacing-1);
182
+ flex: 1 1 0%;
183
+ min-width: 0;
184
+ }
185
+
159
186
  /* ─── Title ───────────────────────────────────────────── */
160
187
 
161
188
  .muka-topbar__title {
@@ -29,7 +29,7 @@ const TopBar = ({ title, leading, trailing, trailingSecondary, variant = 'defaul
29
29
  disableSafeArea && 'muka-topbar--no-safe-area',
30
30
  className,
31
31
  ].filter(Boolean).join(' ');
32
- return ((0, jsx_runtime_1.jsxs)("header", { className: topBarClasses, "data-size": size, children: [variant === 'draggable' && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__drag-handle-container", children: (0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__drag-handle" }) })), breadcrumb && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__breadcrumb", children: breadcrumb })), (0, jsx_runtime_1.jsxs)("div", { className: "muka-topbar__container", children: [leading && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__leading", children: leading })), title && ((0, jsx_runtime_1.jsx)("p", { className: "muka-topbar__title", "aria-live": "polite", children: title })), (0, jsx_runtime_1.jsxs)("div", { className: "muka-topbar__trailing", children: [trailingSecondary && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__trailing-action", children: trailingSecondary })), trailing && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__trailing-action", children: trailing }))] })] }), controlBar && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__controlbar", children: controlBar }))] }));
32
+ return ((0, jsx_runtime_1.jsxs)("header", { className: topBarClasses, "data-size": size, children: [variant === 'draggable' && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__drag-handle-container", children: (0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__drag-handle" }) })), (0, jsx_runtime_1.jsxs)("div", { className: "muka-topbar__container", children: [leading && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__leading", children: leading })), (0, jsx_runtime_1.jsxs)("div", { className: "muka-topbar__heading", children: [breadcrumb && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__breadcrumb", children: breadcrumb })), title && ((0, jsx_runtime_1.jsx)("p", { className: "muka-topbar__title", "aria-live": "polite", children: title }))] }), (0, jsx_runtime_1.jsxs)("div", { className: "muka-topbar__trailing", children: [trailingSecondary && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__trailing-action", children: trailingSecondary })), trailing && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__trailing-action", children: trailing }))] })] }), controlBar && ((0, jsx_runtime_1.jsx)("div", { className: "muka-topbar__controlbar", children: controlBar }))] }));
33
33
  };
34
34
  exports.TopBar = TopBar;
35
35
  exports.default = exports.TopBar;
@@ -1 +1 @@
1
- {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../../components/TopBar/TopBar.tsx"],"names":[],"mappings":";;;;AACA,wBAAsB;AA8CtB;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,aAAa,GAAG;QACpB,aAAa;QACb,OAAO,KAAK,WAAW,IAAI,wBAAwB;QACnD,eAAe,IAAI,2BAA2B;QAC9C,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,oCAAQ,SAAS,EAAE,aAAa,eAAa,IAAI,aAC9C,OAAO,KAAK,WAAW,IAAI,CAC1B,gCAAK,SAAS,EAAC,oCAAoC,YACjD,gCAAK,SAAS,EAAC,0BAA0B,GAAG,GACxC,CACP,EAEA,UAAU,IAAI,CACb,gCAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,EAED,iCAAK,SAAS,EAAC,wBAAwB,aACpC,OAAO,IAAI,CACV,gCAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,GACJ,CACP,EAEA,KAAK,IAAI,CACR,8BAAG,SAAS,EAAC,oBAAoB,eAAW,QAAQ,YACjD,KAAK,GACJ,CACL,EAED,iCAAK,SAAS,EAAC,uBAAuB,aACnC,iBAAiB,IAAI,CACpB,gCAAK,SAAS,EAAC,8BAA8B,YAC1C,iBAAiB,GACd,CACP,EACA,QAAQ,IAAI,CACX,gCAAK,SAAS,EAAC,8BAA8B,YAC1C,QAAQ,GACL,CACP,IACG,IACF,EAEL,UAAU,IAAI,CACb,gCAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,IACM,CACV,CAAC;AACJ,CAAC,CAAC;AAnEW,QAAA,MAAM,UAmEjB;AAEF,kBAAe,cAAM,CAAC"}
1
+ {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../../components/TopBar/TopBar.tsx"],"names":[],"mappings":";;;;AACA,wBAAsB;AA8CtB;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,aAAa,GAAG;QACpB,aAAa;QACb,OAAO,KAAK,WAAW,IAAI,wBAAwB;QACnD,eAAe,IAAI,2BAA2B;QAC9C,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,oCAAQ,SAAS,EAAE,aAAa,eAAa,IAAI,aAC9C,OAAO,KAAK,WAAW,IAAI,CAC1B,gCAAK,SAAS,EAAC,oCAAoC,YACjD,gCAAK,SAAS,EAAC,0BAA0B,GAAG,GACxC,CACP,EAED,iCAAK,SAAS,EAAC,wBAAwB,aACpC,OAAO,IAAI,CACV,gCAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,GACJ,CACP,EAED,iCAAK,SAAS,EAAC,sBAAsB,aAClC,UAAU,IAAI,CACb,gCAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,EAEA,KAAK,IAAI,CACR,8BAAG,SAAS,EAAC,oBAAoB,eAAW,QAAQ,YACjD,KAAK,GACJ,CACL,IACG,EAEN,iCAAK,SAAS,EAAC,uBAAuB,aACnC,iBAAiB,IAAI,CACpB,gCAAK,SAAS,EAAC,8BAA8B,YAC1C,iBAAiB,GACd,CACP,EACA,QAAQ,IAAI,CACX,gCAAK,SAAS,EAAC,8BAA8B,YAC1C,QAAQ,GACL,CACP,IACG,IACF,EAEL,UAAU,IAAI,CACb,gCAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,IACM,CACV,CAAC;AACJ,CAAC,CAAC;AArEW,QAAA,MAAM,UAqEjB;AAEF,kBAAe,cAAM,CAAC"}
@@ -50,6 +50,12 @@
50
50
  overflow-y: auto;
51
51
  overflow-x: clip;
52
52
  z-index: 1;
53
+
54
+ /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
55
+ content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
56
+ reveal the content underneath. */
57
+ display: flex;
58
+ flex-direction: column;
53
59
  }
54
60
 
55
61
  /* Inner wrapper constrains content width at the large tier (enterprise desktop)
@@ -57,6 +63,9 @@
57
63
  width. Full-bleed below large. */
58
64
  .muka-view__body-inner {
59
65
  width: 100%;
66
+ /* Grow on short content so the sticky footer is pushed to the bottom rather
67
+ than floating mid-screen. */
68
+ flex: 1 0 auto;
60
69
  }
61
70
 
62
71
  @media (min-width: 1024px) {
@@ -76,6 +85,8 @@
76
85
  /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
77
86
 
78
87
  .muka-view__footer {
88
+ position: sticky;
89
+ bottom: 0;
79
90
  flex-shrink: 0;
80
91
  z-index: 2;
81
92
  }
@@ -24,7 +24,7 @@ const View = ({ level, title, leading, trailing, trailingSecondary, controlBar,
24
24
  `muka-view--surface-${surfaceLevel}`,
25
25
  className,
26
26
  ].filter(Boolean).join(' ');
27
- return ((0, jsx_runtime_1.jsxs)("div", { className: viewClasses, "data-size": size, children: [(0, jsx_runtime_1.jsx)(TopBar_1.TopBar, { title: title, leading: leading, trailing: trailing, trailingSecondary: trailingSecondary, controlBar: controlBar, breadcrumb: breadcrumb, size: size }), (0, jsx_runtime_1.jsx)("main", { className: "muka-view__body", children: (0, jsx_runtime_1.jsx)("div", { className: "muka-view__body-inner", children: children }) }), footer && ((0, jsx_runtime_1.jsx)("div", { className: "muka-view__footer", children: footer }))] }));
27
+ return ((0, jsx_runtime_1.jsxs)("div", { className: viewClasses, "data-size": size, children: [(0, jsx_runtime_1.jsx)(TopBar_1.TopBar, { title: title, leading: leading, trailing: trailing, trailingSecondary: trailingSecondary, controlBar: controlBar, breadcrumb: breadcrumb, size: size }), (0, jsx_runtime_1.jsxs)("main", { className: "muka-view__body", children: [(0, jsx_runtime_1.jsx)("div", { className: "muka-view__body-inner", children: children }), footer && ((0, jsx_runtime_1.jsx)("div", { className: "muka-view__footer", children: footer }))] })] }));
28
28
  };
29
29
  exports.View = View;
30
30
  exports.default = exports.View;
@@ -1 +1 @@
1
- {"version":3,"file":"View.js","sourceRoot":"","sources":["../../../../components/View/View.tsx"],"names":[],"mappings":";;;;AACA,sCAAmC;AACnC,sBAAoB;AAiDpB;;;;;;;;;;;;GAYG;AACI,MAAM,IAAI,GAAwB,CAAC,EACxC,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,WAAW,GAAG;QAClB,WAAW;QACX,cAAc,KAAK,EAAE;QACrB,sBAAsB,YAAY,EAAE;QACpC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,iCAAK,SAAS,EAAE,WAAW,eAAa,IAAI,aAC1C,uBAAC,eAAM,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,EAEF,iCAAM,SAAS,EAAC,iBAAiB,YAC/B,gCAAK,SAAS,EAAC,uBAAuB,YACnC,QAAQ,GACL,GACD,EAEN,MAAM,IAAI,CACT,gCAAK,SAAS,EAAC,mBAAmB,YAC/B,MAAM,GACH,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AA9CW,QAAA,IAAI,QA8Cf;AAEF,kBAAe,YAAI,CAAC"}
1
+ {"version":3,"file":"View.js","sourceRoot":"","sources":["../../../../components/View/View.tsx"],"names":[],"mappings":";;;;AACA,sCAAmC;AACnC,sBAAoB;AAiDpB;;;;;;;;;;;;GAYG;AACI,MAAM,IAAI,GAAwB,CAAC,EACxC,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,WAAW,GAAG;QAClB,WAAW;QACX,cAAc,KAAK,EAAE;QACrB,sBAAsB,YAAY,EAAE;QACpC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,iCAAK,SAAS,EAAE,WAAW,eAAa,IAAI,aAC1C,uBAAC,eAAM,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,EAEF,kCAAM,SAAS,EAAC,iBAAiB,aAC/B,gCAAK,SAAS,EAAC,uBAAuB,YACnC,QAAQ,GACL,EAEL,MAAM,IAAI,CACT,gCAAK,SAAS,EAAC,mBAAmB,YAC/B,MAAM,GACH,CACP,IACI,IACH,CACP,CAAC;AACJ,CAAC,CAAC;AA9CW,QAAA,IAAI,QA8Cf;AAEF,kBAAe,YAAI,CAAC"}
@@ -121,6 +121,15 @@
121
121
  backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
122
  -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
123
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
+
125
+ /* The transparent frosted margin around the pill overlays scrolling content;
126
+ let scroll/taps fall through to that content, keeping only the pill itself
127
+ interactive (re-enabled on __content below). */
128
+ pointer-events: none;
129
+ }
130
+
131
+ .muka-bottombar--floating .muka-bottombar__content {
132
+ pointer-events: auto;
124
133
  }
125
134
 
126
135
  .muka-bottombar--floating .muka-bottombar__content {
@@ -28,6 +28,7 @@
28
28
  --tb-title-line-height: var(--text-heading-xs-lineHeight);
29
29
  --tb-title-letter-spacing: var(--text-heading-xs-letterSpacing);
30
30
  --tb-breadcrumb-display: none;
31
+ --tb-pad-y: 0;
31
32
  }
32
33
 
33
34
  /* ─── Medium tier ─── */
@@ -58,16 +59,17 @@
58
59
  .muka-topbar:not([data-size]) {
59
60
  --tb-height: var(--topbar-height-lg);
60
61
  --tb-pad: var(--topbar-padding-x-lg);
62
+ --tb-pad-y: var(--spacing-4);
61
63
  --tb-title-position: static;
62
64
  --tb-title-left: auto;
63
65
  --tb-title-transform: none;
64
66
  --tb-title-align: left;
65
67
  --tb-title-max-width: none;
66
- --tb-title-font-family: var(--text-heading-lg-fontFamily);
67
- --tb-title-font-weight: var(--text-heading-lg-fontWeight);
68
- --tb-title-font-size: var(--text-heading-lg-fontSize);
69
- --tb-title-line-height: var(--text-heading-lg-lineHeight);
70
- --tb-title-letter-spacing: var(--text-heading-lg-letterSpacing);
68
+ --tb-title-font-family: var(--text-heading-md-fontFamily);
69
+ --tb-title-font-weight: var(--text-heading-md-fontWeight);
70
+ --tb-title-font-size: var(--text-heading-md-fontSize);
71
+ --tb-title-line-height: var(--text-heading-md-lineHeight);
72
+ --tb-title-letter-spacing: var(--text-heading-md-letterSpacing);
71
73
  --tb-breadcrumb-display: flex;
72
74
  }
73
75
  }
@@ -75,16 +77,17 @@
75
77
  .muka-topbar[data-size='lg'] {
76
78
  --tb-height: var(--topbar-height-lg);
77
79
  --tb-pad: var(--topbar-padding-x-lg);
80
+ --tb-pad-y: var(--spacing-4);
78
81
  --tb-title-position: static;
79
82
  --tb-title-left: auto;
80
83
  --tb-title-transform: none;
81
84
  --tb-title-align: left;
82
85
  --tb-title-max-width: none;
83
- --tb-title-font-family: var(--text-heading-lg-fontFamily);
84
- --tb-title-font-weight: var(--text-heading-lg-fontWeight);
85
- --tb-title-font-size: var(--text-heading-lg-fontSize);
86
- --tb-title-line-height: var(--text-heading-lg-lineHeight);
87
- --tb-title-letter-spacing: var(--text-heading-lg-letterSpacing);
86
+ --tb-title-font-family: var(--text-heading-md-fontFamily);
87
+ --tb-title-font-weight: var(--text-heading-md-fontWeight);
88
+ --tb-title-font-size: var(--text-heading-md-fontSize);
89
+ --tb-title-line-height: var(--text-heading-md-lineHeight);
90
+ --tb-title-letter-spacing: var(--text-heading-md-letterSpacing);
88
91
  --tb-breadcrumb-display: flex;
89
92
  }
90
93
 
@@ -109,17 +112,11 @@
109
112
  border-radius: var(--topbar-drag-handle-radius);
110
113
  }
111
114
 
112
- /* ─── Breadcrumb row (large tier) ─────────────────────── */
115
+ /* ─── Breadcrumb (large tier, stacked above the title) ── */
113
116
 
114
117
  .muka-topbar__breadcrumb {
115
118
  display: var(--tb-breadcrumb-display);
116
119
  align-items: center;
117
- padding: var(--spacing-3) var(--tb-pad) 0;
118
- }
119
-
120
- .muka-topbar:not(.muka-topbar--no-safe-area) .muka-topbar__breadcrumb {
121
- padding-left: max(var(--tb-pad), env(safe-area-inset-left));
122
- padding-right: max(var(--tb-pad), env(safe-area-inset-right));
123
120
  }
124
121
 
125
122
  /* ─── Container (the bar itself) ──────────────────────── */
@@ -128,8 +125,8 @@
128
125
  position: relative;
129
126
  display: flex;
130
127
  align-items: center;
131
- height: var(--tb-height);
132
- padding: 0 var(--tb-pad);
128
+ min-height: var(--tb-height);
129
+ padding: var(--tb-pad-y) var(--tb-pad);
133
130
  }
134
131
 
135
132
  /* Inset content on iPhone landscape with notch / iPad with curved corners. */
@@ -156,6 +153,36 @@
156
153
  display: none;
157
154
  }
158
155
 
156
+ /* ─── Heading (breadcrumb + title) ────────────────────── */
157
+
158
+ /* Base/sm/md: transparent wrapper so the title keeps its absolute-centered
159
+ layout (containing block stays the positioned container) and the breadcrumb
160
+ stays hidden — identical to the pre-refinement mobile bar. */
161
+ .muka-topbar__heading {
162
+ display: contents;
163
+ }
164
+
165
+ /* Large tier: a tight column with the breadcrumb stacked above the title. */
166
+ @media (min-width: 1024px) {
167
+ .muka-topbar:not([data-size]) .muka-topbar__heading {
168
+ display: flex;
169
+ flex-direction: column;
170
+ justify-content: center;
171
+ gap: var(--spacing-1);
172
+ flex: 1 1 0%;
173
+ min-width: 0;
174
+ }
175
+ }
176
+
177
+ .muka-topbar[data-size='lg'] .muka-topbar__heading {
178
+ display: flex;
179
+ flex-direction: column;
180
+ justify-content: center;
181
+ gap: var(--spacing-1);
182
+ flex: 1 1 0%;
183
+ min-width: 0;
184
+ }
185
+
159
186
  /* ─── Title ───────────────────────────────────────────── */
160
187
 
161
188
  .muka-topbar__title {
@@ -26,7 +26,7 @@ export const TopBar = ({ title, leading, trailing, trailingSecondary, variant =
26
26
  disableSafeArea && 'muka-topbar--no-safe-area',
27
27
  className,
28
28
  ].filter(Boolean).join(' ');
29
- return (_jsxs("header", { className: topBarClasses, "data-size": size, children: [variant === 'draggable' && (_jsx("div", { className: "muka-topbar__drag-handle-container", children: _jsx("div", { className: "muka-topbar__drag-handle" }) })), breadcrumb && (_jsx("div", { className: "muka-topbar__breadcrumb", children: breadcrumb })), _jsxs("div", { className: "muka-topbar__container", children: [leading && (_jsx("div", { className: "muka-topbar__leading", children: leading })), title && (_jsx("p", { className: "muka-topbar__title", "aria-live": "polite", children: title })), _jsxs("div", { className: "muka-topbar__trailing", children: [trailingSecondary && (_jsx("div", { className: "muka-topbar__trailing-action", children: trailingSecondary })), trailing && (_jsx("div", { className: "muka-topbar__trailing-action", children: trailing }))] })] }), controlBar && (_jsx("div", { className: "muka-topbar__controlbar", children: controlBar }))] }));
29
+ return (_jsxs("header", { className: topBarClasses, "data-size": size, children: [variant === 'draggable' && (_jsx("div", { className: "muka-topbar__drag-handle-container", children: _jsx("div", { className: "muka-topbar__drag-handle" }) })), _jsxs("div", { className: "muka-topbar__container", children: [leading && (_jsx("div", { className: "muka-topbar__leading", children: leading })), _jsxs("div", { className: "muka-topbar__heading", children: [breadcrumb && (_jsx("div", { className: "muka-topbar__breadcrumb", children: breadcrumb })), title && (_jsx("p", { className: "muka-topbar__title", "aria-live": "polite", children: title }))] }), _jsxs("div", { className: "muka-topbar__trailing", children: [trailingSecondary && (_jsx("div", { className: "muka-topbar__trailing-action", children: trailingSecondary })), trailing && (_jsx("div", { className: "muka-topbar__trailing-action", children: trailing }))] })] }), controlBar && (_jsx("div", { className: "muka-topbar__controlbar", children: controlBar }))] }));
30
30
  };
31
31
  export default TopBar;
32
32
  //# sourceMappingURL=TopBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../../components/TopBar/TopBar.tsx"],"names":[],"mappings":";AACA,OAAO,cAAc,CAAC;AA8CtB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,aAAa,GAAG;QACpB,aAAa;QACb,OAAO,KAAK,WAAW,IAAI,wBAAwB;QACnD,eAAe,IAAI,2BAA2B;QAC9C,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,kBAAQ,SAAS,EAAE,aAAa,eAAa,IAAI,aAC9C,OAAO,KAAK,WAAW,IAAI,CAC1B,cAAK,SAAS,EAAC,oCAAoC,YACjD,cAAK,SAAS,EAAC,0BAA0B,GAAG,GACxC,CACP,EAEA,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,EAED,eAAK,SAAS,EAAC,wBAAwB,aACpC,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,GACJ,CACP,EAEA,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,oBAAoB,eAAW,QAAQ,YACjD,KAAK,GACJ,CACL,EAED,eAAK,SAAS,EAAC,uBAAuB,aACnC,iBAAiB,IAAI,CACpB,cAAK,SAAS,EAAC,8BAA8B,YAC1C,iBAAiB,GACd,CACP,EACA,QAAQ,IAAI,CACX,cAAK,SAAS,EAAC,8BAA8B,YAC1C,QAAQ,GACL,CACP,IACG,IACF,EAEL,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,IACM,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../../components/TopBar/TopBar.tsx"],"names":[],"mappings":";AACA,OAAO,cAAc,CAAC;AA8CtB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAC5C,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,OAAO,GAAG,SAAS,EACnB,IAAI,EACJ,UAAU,EACV,UAAU,EACV,eAAe,GAAG,KAAK,EACvB,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,aAAa,GAAG;QACpB,aAAa;QACb,OAAO,KAAK,WAAW,IAAI,wBAAwB;QACnD,eAAe,IAAI,2BAA2B;QAC9C,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,kBAAQ,SAAS,EAAE,aAAa,eAAa,IAAI,aAC9C,OAAO,KAAK,WAAW,IAAI,CAC1B,cAAK,SAAS,EAAC,oCAAoC,YACjD,cAAK,SAAS,EAAC,0BAA0B,GAAG,GACxC,CACP,EAED,eAAK,SAAS,EAAC,wBAAwB,aACpC,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,sBAAsB,YAClC,OAAO,GACJ,CACP,EAED,eAAK,SAAS,EAAC,sBAAsB,aAClC,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,EAEA,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,oBAAoB,eAAW,QAAQ,YACjD,KAAK,GACJ,CACL,IACG,EAEN,eAAK,SAAS,EAAC,uBAAuB,aACnC,iBAAiB,IAAI,CACpB,cAAK,SAAS,EAAC,8BAA8B,YAC1C,iBAAiB,GACd,CACP,EACA,QAAQ,IAAI,CACX,cAAK,SAAS,EAAC,8BAA8B,YAC1C,QAAQ,GACL,CACP,IACG,IACF,EAEL,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,yBAAyB,YACrC,UAAU,GACP,CACP,IACM,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -50,6 +50,12 @@
50
50
  overflow-y: auto;
51
51
  overflow-x: clip;
52
52
  z-index: 1;
53
+
54
+ /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
55
+ content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
56
+ reveal the content underneath. */
57
+ display: flex;
58
+ flex-direction: column;
53
59
  }
54
60
 
55
61
  /* Inner wrapper constrains content width at the large tier (enterprise desktop)
@@ -57,6 +63,9 @@
57
63
  width. Full-bleed below large. */
58
64
  .muka-view__body-inner {
59
65
  width: 100%;
66
+ /* Grow on short content so the sticky footer is pushed to the bottom rather
67
+ than floating mid-screen. */
68
+ flex: 1 0 auto;
60
69
  }
61
70
 
62
71
  @media (min-width: 1024px) {
@@ -76,6 +85,8 @@
76
85
  /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
77
86
 
78
87
  .muka-view__footer {
88
+ position: sticky;
89
+ bottom: 0;
79
90
  flex-shrink: 0;
80
91
  z-index: 2;
81
92
  }
@@ -21,7 +21,7 @@ export const View = ({ level, title, leading, trailing, trailingSecondary, contr
21
21
  `muka-view--surface-${surfaceLevel}`,
22
22
  className,
23
23
  ].filter(Boolean).join(' ');
24
- return (_jsxs("div", { className: viewClasses, "data-size": size, children: [_jsx(TopBar, { title: title, leading: leading, trailing: trailing, trailingSecondary: trailingSecondary, controlBar: controlBar, breadcrumb: breadcrumb, size: size }), _jsx("main", { className: "muka-view__body", children: _jsx("div", { className: "muka-view__body-inner", children: children }) }), footer && (_jsx("div", { className: "muka-view__footer", children: footer }))] }));
24
+ return (_jsxs("div", { className: viewClasses, "data-size": size, children: [_jsx(TopBar, { title: title, leading: leading, trailing: trailing, trailingSecondary: trailingSecondary, controlBar: controlBar, breadcrumb: breadcrumb, size: size }), _jsxs("main", { className: "muka-view__body", children: [_jsx("div", { className: "muka-view__body-inner", children: children }), footer && (_jsx("div", { className: "muka-view__footer", children: footer }))] })] }));
25
25
  };
26
26
  export default View;
27
27
  //# sourceMappingURL=View.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"View.js","sourceRoot":"","sources":["../../../../components/View/View.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,YAAY,CAAC;AAiDpB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,EACxC,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,WAAW,GAAG;QAClB,WAAW;QACX,cAAc,KAAK,EAAE;QACrB,sBAAsB,YAAY,EAAE;QACpC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,WAAW,eAAa,IAAI,aAC1C,KAAC,MAAM,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,EAEF,eAAM,SAAS,EAAC,iBAAiB,YAC/B,cAAK,SAAS,EAAC,uBAAuB,YACnC,QAAQ,GACL,GACD,EAEN,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,mBAAmB,YAC/B,MAAM,GACH,CACP,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"View.js","sourceRoot":"","sources":["../../../../components/View/View.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,YAAY,CAAC;AAiDpB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,IAAI,GAAwB,CAAC,EACxC,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,YAAY,GAAG,CAAC,EAChB,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,WAAW,GAAG;QAClB,WAAW;QACX,cAAc,KAAK,EAAE;QACrB,sBAAsB,YAAY,EAAE;QACpC,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,eAAK,SAAS,EAAE,WAAW,eAAa,IAAI,aAC1C,KAAC,MAAM,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,GACV,EAEF,gBAAM,SAAS,EAAC,iBAAiB,aAC/B,cAAK,SAAS,EAAC,uBAAuB,YACnC,QAAQ,GACL,EAEL,MAAM,IAAI,CACT,cAAK,SAAS,EAAC,mBAAmB,YAC/B,MAAM,GACH,CACP,IACI,IACH,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -121,6 +121,15 @@
121
121
  backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
122
  -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
123
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
+
125
+ /* The transparent frosted margin around the pill overlays scrolling content;
126
+ let scroll/taps fall through to that content, keeping only the pill itself
127
+ interactive (re-enabled on __content below). */
128
+ pointer-events: none;
129
+ }
130
+
131
+ .muka-bottombar--floating .muka-bottombar__content {
132
+ pointer-events: auto;
124
133
  }
125
134
 
126
135
  .muka-bottombar--floating .muka-bottombar__content {
@@ -50,6 +50,12 @@
50
50
  overflow-y: auto;
51
51
  overflow-x: clip;
52
52
  z-index: 1;
53
+
54
+ /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
55
+ content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
56
+ reveal the content underneath. */
57
+ display: flex;
58
+ flex-direction: column;
53
59
  }
54
60
 
55
61
  /* Inner wrapper constrains content width at the large tier (enterprise desktop)
@@ -57,6 +63,9 @@
57
63
  width. Full-bleed below large. */
58
64
  .muka-view__body-inner {
59
65
  width: 100%;
66
+ /* Grow on short content so the sticky footer is pushed to the bottom rather
67
+ than floating mid-screen. */
68
+ flex: 1 0 auto;
60
69
  }
61
70
 
62
71
  @media (min-width: 1024px) {
@@ -76,6 +85,8 @@
76
85
  /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
77
86
 
78
87
  .muka-view__footer {
88
+ position: sticky;
89
+ bottom: 0;
79
90
  flex-shrink: 0;
80
91
  z-index: 2;
81
92
  }