@floegence/floe-webapp-core 0.71.0 → 0.73.0

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.
@@ -1,119 +1,124 @@
1
- import { createComponent as a, Dynamic as L, insert as c, memo as O, effect as z, className as S, setAttribute as $, setStyleProperty as ae, template as k, use as le, delegateEvents as se } from "solid-js/web";
2
- import { createSignal as Q, batch as de, createEffect as I, createMemo as M, For as W, Show as y } from "solid-js";
3
- import { useLayout as ce } from "../../context/LayoutContext.js";
4
- import { useResolvedFloeConfig as be } from "../../context/FloeConfigContext.js";
5
- import { useMediaQuery as ue } from "../../hooks/useMediaQuery.js";
6
- import { useOverlayMask as me } from "../../hooks/useOverlayMask.js";
1
+ import { createComponent as a, Dynamic as L, insert as d, memo as x, effect as $, className as y, setAttribute as z, setStyleProperty as U, template as M, use as ce, delegateEvents as be } from "solid-js/web";
2
+ import { createSignal as F, onMount as ue, onCleanup as me, batch as fe, createEffect as w, createMemo as I, For as H, Show as g } from "solid-js";
3
+ import { observeViewport as ve } from "../../viewport.js";
4
+ import { useLayout as he } from "../../context/LayoutContext.js";
5
+ import { useResolvedFloeConfig as ge } from "../../context/FloeConfigContext.js";
6
+ import { useMediaQuery as Se } from "../../hooks/useMediaQuery.js";
7
+ import { useOverlayMask as ye } from "../../hooks/useOverlayMask.js";
7
8
  import { cn as C } from "../../utils/cn.js";
8
- import { deferAfterPaint as fe, deferNonBlocking as ve } from "../../utils/defer.js";
9
- import { useComponentRegistry as ge } from "../../context/ComponentRegistry.js";
10
- import { Sidebar as he } from "./Sidebar.js";
11
- import { TopBar as Se } from "./TopBar.js";
12
- import { TopBarIconButton as ye } from "./TopBarIconButton.js";
13
- import { BottomBar as Ce } from "./BottomBar.js";
14
- import { MobileTabBar as Ie } from "./MobileTabBar.js";
15
- import { ActivityBar as Me } from "./ActivityBar.js";
16
- import { ResizeHandle as K } from "./ResizeHandle.js";
17
- import { resolveMobileTabActiveId as we, resolveMobileTabSelect as Be } from "./mobileTabs.js";
18
- import { KeepAliveStack as Ae } from "./KeepAliveStack.js";
19
- import { resolveShellSidebarActiveTabChange as ke } from "./sidebarVisibilityMotion.js";
20
- import { createUIFirstSelection as xe } from "../../utils/uiFirstSelection.js";
21
- var U = /* @__PURE__ */ k('<div class="flex items-center gap-2">'), Te = /* @__PURE__ */ k("<div data-floe-shell-slot=mobile-sidebar-backdrop>"), pe = /* @__PURE__ */ k('<div data-floe-shell-slot=mobile-sidebar-drawer tabindex=-1 role=dialog aria-modal=true><div class="h-full overflow-auto overscroll-contain">'), Ne = /* @__PURE__ */ k("<div data-floe-shell-slot=terminal-panel style=border-top-color:var(--terminal-panel-border)>"), Le = /* @__PURE__ */ k('<div data-floe-shell><a></a><div data-floe-shell-slot=main-layout class="flex-1 min-h-0 flex overflow-hidden relative"><div data-floe-shell-slot=content-area><main data-floe-shell-slot=main tabindex=-1>');
22
- function Ye(r) {
23
- const i = ce(), H = be(), d = ue(H.config.layout.mobileQuery), [x, h] = Q(!1), [E, R] = Q(null);
24
- let F;
9
+ import { deferAfterPaint as Ce, deferNonBlocking as we } from "../../utils/defer.js";
10
+ import { useComponentRegistry as Ie } from "../../context/ComponentRegistry.js";
11
+ import { Sidebar as Me } from "./Sidebar.js";
12
+ import { TopBar as Ae } from "./TopBar.js";
13
+ import { TopBarIconButton as Be } from "./TopBarIconButton.js";
14
+ import { BottomBar as ke } from "./BottomBar.js";
15
+ import { MobileTabBar as xe } from "./MobileTabBar.js";
16
+ import { ActivityBar as Te } from "./ActivityBar.js";
17
+ import { ResizeHandle as j } from "./ResizeHandle.js";
18
+ import { resolveMobileTabActiveId as Oe, resolveMobileTabSelect as Ne } from "./mobileTabs.js";
19
+ import { KeepAliveStack as pe } from "./KeepAliveStack.js";
20
+ import { resolveShellSidebarActiveTabChange as Le } from "./sidebarVisibilityMotion.js";
21
+ import { createUIFirstSelection as $e } from "../../utils/uiFirstSelection.js";
22
+ var G = /* @__PURE__ */ M('<div class="flex items-center gap-2">'), ze = /* @__PURE__ */ M("<div data-floe-shell-slot=mobile-sidebar-backdrop>"), Pe = /* @__PURE__ */ M('<div data-floe-shell-slot=mobile-sidebar-drawer tabindex=-1 role=dialog aria-modal=true><div class="h-full overflow-auto overscroll-contain">'), Re = /* @__PURE__ */ M("<div data-floe-shell-slot=terminal-panel style=border-top-color:var(--terminal-panel-border)>"), We = /* @__PURE__ */ M('<div data-floe-shell-slot=mobile-accessory class="relative shrink-0">'), Fe = /* @__PURE__ */ M('<div data-floe-shell><a></a><div data-floe-shell-slot=main-layout class="flex-1 min-h-0 flex overflow-hidden relative"><div data-floe-shell-slot=content-area><main data-floe-shell-slot=main tabindex=-1>');
23
+ function at(r) {
24
+ const [J, X] = F(!1);
25
+ ue(() => {
26
+ me(ve(window, (e) => X(e.keyboardOpen)));
27
+ });
28
+ const i = he(), V = ge(), c = Se(V.config.layout.mobileQuery), [T, S] = F(!1), [E, P] = F(null);
29
+ let R;
25
30
  const b = () => r.sidebarMode === "hidden", s = (() => {
26
31
  try {
27
- return ge();
32
+ return Ie();
28
33
  } catch {
29
34
  return null;
30
35
  }
31
- })(), T = (e, o) => {
36
+ })(), O = (e, o) => {
32
37
  const l = s?.getComponent(e)?.sidebar?.fullScreen ?? !1, {
33
38
  openSidebar: n,
34
39
  visibilityMotion: u
35
- } = ke({
40
+ } = Le({
36
41
  currentActiveId: i.sidebarActiveTab(),
37
42
  nextActiveId: e,
38
43
  requestedOpenSidebar: o?.openSidebar,
39
44
  sidebarHidden: b(),
40
45
  nextActiveFullScreen: l,
41
- isMobile: d(),
46
+ isMobile: c(),
42
47
  resolveSidebarVisibilityMotion: r.resolveSidebarVisibilityMotion
43
48
  });
44
49
  i.setSidebarActiveTab(e, {
45
50
  openSidebar: n,
46
51
  visibilityMotion: u
47
52
  });
48
- }, p = xe({
53
+ }, N = $e({
49
54
  committed: i.sidebarActiveTab,
50
55
  commit: (e, o) => {
51
- de(() => {
52
- T(e, o?.opts), typeof o?.mobileSidebarOpen == "boolean" && h(o.mobileSidebarOpen);
56
+ fe(() => {
57
+ O(e, o?.opts), typeof o?.mobileSidebarOpen == "boolean" && S(o.mobileSidebarOpen);
53
58
  });
54
59
  },
55
60
  onEvent: (e) => r.onActivitySelectionEvent?.(e)
56
- }), N = () => r.activitySelectionMode === "ui-first" ? p.visual() : i.sidebarActiveTab(), j = (e, o) => {
61
+ }), p = () => r.activitySelectionMode === "ui-first" ? N.visual() : i.sidebarActiveTab(), Y = (e, o) => {
57
62
  if (r.activitySelectionMode === "ui-first") {
58
- p.request(e, {
63
+ N.request(e, {
59
64
  source: "activity-bar",
60
65
  opts: o
61
66
  });
62
67
  return;
63
68
  }
64
- T(e, o);
69
+ O(e, o);
65
70
  };
66
- I(() => {
67
- b() && h(!1);
68
- }), I(() => {
69
- const e = d();
71
+ w(() => {
72
+ b() && S(!1);
73
+ }), w(() => {
74
+ const e = c();
70
75
  i.isMobile() !== e && i.setIsMobile(e);
71
- }), I(() => {
72
- d() || h(!1);
73
- }), I(() => {
76
+ }), w(() => {
77
+ c() || S(!1);
78
+ }), w(() => {
74
79
  const e = i.sidebarVisibilityMotion(), o = i.sidebarVisibilityMotionRevision();
75
- e === "instant" && fe(() => i.clearSidebarVisibilityMotion(o));
80
+ e === "instant" && Ce(() => i.clearSidebarVisibilityMotion(o));
76
81
  });
77
- const w = M(() => r.activityItems ? r.activityItems : s ? s.sidebarItems().filter((e) => !!e.icon).filter((e) => !(d() && e.sidebar?.hiddenOnMobile)).map((e) => ({
82
+ const A = I(() => r.activityItems ? r.activityItems : s ? s.sidebarItems().filter((e) => !!e.icon).filter((e) => !(c() && e.sidebar?.hiddenOnMobile)).map((e) => ({
78
83
  id: e.id,
79
84
  icon: e.icon,
80
85
  label: e.name,
81
86
  badge: e.sidebar?.badge,
82
87
  collapseBehavior: e.sidebar?.collapseBehavior ?? (e.sidebar?.fullScreen ? "preserve" : "toggle")
83
- })) : []), G = M(() => b() ? [] : r.sidebarContent ? [] : s ? s.sidebarItems().filter((e) => !(d() && e.sidebar?.hiddenOnMobile)).filter((e) => e.sidebar?.fullScreen !== !0 && e.sidebar?.renderIn !== "main").map((e) => ({
88
+ })) : []), Z = I(() => b() ? [] : r.sidebarContent ? [] : s ? s.sidebarItems().filter((e) => !(c() && e.sidebar?.hiddenOnMobile)).filter((e) => e.sidebar?.fullScreen !== !0 && e.sidebar?.renderIn !== "main").map((e) => ({
84
89
  id: e.id,
85
90
  render: () => a(L, {
86
91
  get component() {
87
92
  return e.component;
88
93
  }
89
94
  })
90
- })) : []), V = (e) => {
95
+ })) : []), _ = (e) => {
91
96
  if (!b()) {
92
97
  if (r.sidebarContent) return r.sidebarContent(e);
93
98
  if (s)
94
- return a(Ae, {
99
+ return a(pe, {
95
100
  get views() {
96
- return G();
101
+ return Z();
97
102
  },
98
103
  activeId: e
99
104
  });
100
105
  }
101
- }, P = M(() => b() ? !0 : s ? s.getComponent(i.sidebarActiveTab())?.sidebar?.fullScreen ?? !1 : !1), J = M(() => {
106
+ }, W = I(() => b() ? !0 : s ? s.getComponent(i.sidebarActiveTab())?.sidebar?.fullScreen ?? !1 : !1), ee = I(() => {
102
107
  if (b()) return !0;
103
108
  if (!s) return !1;
104
109
  const e = s.getComponent(i.sidebarActiveTab());
105
110
  return e?.sidebar ? e.sidebar.fullScreen === !0 || e.sidebar.renderIn === "main" : !1;
106
111
  });
107
- I(() => {
108
- d() && P() && h(!1);
112
+ w(() => {
113
+ c() && W() && S(!1);
109
114
  });
110
- const X = M(() => {
115
+ const te = I(() => {
111
116
  if (r.bottomBarItems) return r.bottomBarItems;
112
117
  if (!s) return;
113
118
  const e = [...s.statusBarItems()].sort((n, u) => (n.order ?? 100) - (u.order ?? 100)), o = e.filter((n) => n.position === "left"), l = e.filter((n) => n.position === "right");
114
119
  return [(() => {
115
- var n = U();
116
- return c(n, a(W, {
120
+ var n = G();
121
+ return d(n, a(H, {
117
122
  each: o,
118
123
  children: (u) => a(L, {
119
124
  get component() {
@@ -122,8 +127,8 @@ function Ye(r) {
122
127
  })
123
128
  })), n;
124
129
  })(), (() => {
125
- var n = U();
126
- return c(n, a(W, {
130
+ var n = G();
131
+ return d(n, a(H, {
127
132
  each: l,
128
133
  children: (u) => a(L, {
129
134
  get component() {
@@ -133,53 +138,53 @@ function Ye(r) {
133
138
  })), n;
134
139
  })()];
135
140
  });
136
- I(() => {
137
- const e = w();
141
+ w(() => {
142
+ const e = A();
138
143
  if (!e.length) return;
139
144
  if (!i.sidebarActiveTab()) {
140
145
  const l = e.find((n) => !n.onClick);
141
146
  if (!l) return;
142
- T(l.id);
147
+ O(l.id);
143
148
  }
144
149
  });
145
- const _ = (e) => {
150
+ const q = (e) => {
146
151
  const o = b() ? !0 : s?.getComponent(e)?.sidebar?.fullScreen ?? !1, {
147
152
  nextActiveId: l,
148
153
  nextMobileSidebarOpen: n
149
- } = Be({
154
+ } = Ne({
150
155
  clickedId: e,
151
156
  activeId: i.sidebarActiveTab(),
152
- mobileSidebarOpen: x(),
157
+ mobileSidebarOpen: T(),
153
158
  clickedIsFullScreen: o
154
159
  });
155
160
  if (i.sidebarActiveTab() !== l) {
156
161
  if (r.activitySelectionMode === "ui-first") {
157
- p.request(l, {
162
+ N.request(l, {
158
163
  source: "mobile-tab-bar",
159
164
  mobileSidebarOpen: n
160
165
  });
161
166
  return;
162
167
  }
163
- T(l);
168
+ O(l);
164
169
  }
165
- h(n);
166
- }, Y = (e) => {
170
+ S(n);
171
+ }, re = (e) => {
167
172
  if (e.onClick) {
168
- ve(() => e.onClick());
173
+ we(() => e.onClick());
169
174
  return;
170
175
  }
171
- _(e.id);
172
- }, Z = M(() => {
176
+ q(e.id);
177
+ }, ie = I(() => {
173
178
  const e = r.topBarActions;
174
- if (!d() || (r.activityBottomItemsMobileMode ?? "hidden") !== "topBar") return e;
179
+ if (!c() || (r.activityBottomItemsMobileMode ?? "hidden") !== "topBar") return e;
175
180
  const l = r.activityBottomItems ?? [];
176
- return l.length ? [a(W, {
181
+ return l.length ? [a(H, {
177
182
  each: l,
178
- children: (n) => a(ye, {
183
+ children: (n) => a(Be, {
179
184
  get label() {
180
185
  return n.label;
181
186
  },
182
- onClick: () => Y(n),
187
+ onClick: () => re(n),
183
188
  get children() {
184
189
  return a(L, {
185
190
  get component() {
@@ -190,18 +195,18 @@ function Ye(r) {
190
195
  }
191
196
  })
192
197
  }), e] : e;
193
- }), ee = () => b() ? !0 : i.sidebarCollapsed(), te = () => E() ?? i.sidebarWidth(), v = () => H.config.accessibility, re = () => {
194
- R(i.sidebarWidth());
195
- }, ie = (e) => {
196
- R((o) => i.clampSidebarWidth((o ?? i.sidebarWidth()) + e));
197
- }, ne = () => {
198
+ }), ne = () => b() ? !0 : i.sidebarCollapsed(), oe = () => E() ?? i.sidebarWidth(), v = () => V.config.accessibility, ae = () => {
199
+ P(i.sidebarWidth());
200
+ }, le = (e) => {
201
+ P((o) => i.clampSidebarWidth((o ?? i.sidebarWidth()) + e));
202
+ }, se = () => {
198
203
  const e = E();
199
- e !== null && (i.setSidebarWidth(e), R(null));
204
+ e !== null && (i.setSidebarWidth(e), P(null));
200
205
  };
201
- me({
202
- open: () => d() && x() && !b(),
203
- root: () => F,
204
- onClose: () => h(!1),
206
+ ye({
207
+ open: () => c() && T() && !b(),
208
+ root: () => R,
209
+ onClose: () => S(!1),
205
210
  lockBodyScroll: !0,
206
211
  trapFocus: !0,
207
212
  closeOnEscape: !0,
@@ -211,7 +216,7 @@ function Ye(r) {
211
216
  autoFocus: !1,
212
217
  restoreFocus: !0
213
218
  });
214
- const oe = () => {
219
+ const de = () => {
215
220
  if (typeof document > "u") return;
216
221
  const e = document.getElementById(v().mainContentId);
217
222
  if (!(!e || !(e instanceof HTMLElement)))
@@ -221,13 +226,13 @@ function Ye(r) {
221
226
  }
222
227
  };
223
228
  return (() => {
224
- var e = Le(), o = e.firstChild, l = o.nextSibling, n = l.firstChild, u = n.firstChild;
225
- return o.$$click = () => oe(), c(o, () => v().skipLinkLabel), c(e, a(Se, {
229
+ var e = Fe(), o = e.firstChild, l = o.nextSibling, n = l.firstChild, u = n.firstChild;
230
+ return o.$$click = () => de(), d(o, () => v().skipLinkLabel), d(e, a(Ae, {
226
231
  get logo() {
227
232
  return r.logo;
228
233
  },
229
234
  get actions() {
230
- return Z();
235
+ return ie();
231
236
  },
232
237
  get ariaLabel() {
233
238
  return v().topBarLabel;
@@ -235,32 +240,32 @@ function Ye(r) {
235
240
  get class() {
236
241
  return r.slotClassNames?.topBar;
237
242
  }
238
- }), l), c(l, a(y, {
243
+ }), l), d(l, a(g, {
239
244
  get when() {
240
- return !d();
245
+ return !c();
241
246
  },
242
247
  get children() {
243
- return [a(y, {
248
+ return [a(g, {
244
249
  get when() {
245
- return w().length > 0;
250
+ return A().length > 0;
246
251
  },
247
252
  get children() {
248
- return a(Me, {
253
+ return a(Te, {
249
254
  get items() {
250
- return w();
255
+ return A();
251
256
  },
252
257
  get bottomItems() {
253
258
  return r.activityBottomItems;
254
259
  },
255
260
  get activeId() {
256
- return N();
261
+ return p();
257
262
  },
258
- onActiveChange: j,
263
+ onActiveChange: Y,
259
264
  get collapsed() {
260
- return ee();
265
+ return ne();
261
266
  },
262
267
  get onCollapsedChange() {
263
- return O(() => !!b())() ? void 0 : i.setSidebarCollapsed;
268
+ return x(() => !!b())() ? void 0 : i.setSidebarCollapsed;
264
269
  },
265
270
  get ariaLabel() {
266
271
  return v().primaryNavigationLabel;
@@ -270,17 +275,17 @@ function Ye(r) {
270
275
  }
271
276
  });
272
277
  }
273
- }), a(y, {
278
+ }), a(g, {
274
279
  get when() {
275
280
  return !b();
276
281
  },
277
282
  get children() {
278
- return a(he, {
283
+ return a(Me, {
279
284
  get width() {
280
- return te();
285
+ return oe();
281
286
  },
282
287
  get collapsed() {
283
- return i.sidebarCollapsed() || P();
288
+ return i.sidebarCollapsed() || W();
284
289
  },
285
290
  get visibilityMotion() {
286
291
  return i.sidebarVisibilityMotion();
@@ -289,65 +294,73 @@ function Ye(r) {
289
294
  return v().sidebarLabel;
290
295
  },
291
296
  get resizer() {
292
- return a(K, {
297
+ return a(j, {
293
298
  direction: "horizontal",
294
- onResize: ie,
295
- onResizeStart: re,
296
- onResizeEnd: ne
299
+ onResize: le,
300
+ onResizeStart: ae,
301
+ onResizeEnd: se
297
302
  });
298
303
  },
299
304
  get class() {
300
305
  return r.slotClassNames?.sidebar;
301
306
  },
302
307
  get children() {
303
- return V(i.sidebarActiveTab());
308
+ return _(i.sidebarActiveTab());
304
309
  }
305
310
  });
306
311
  }
307
312
  })];
308
313
  }
309
- }), n), c(l, a(y, {
314
+ }), n), d(l, a(g, {
310
315
  get when() {
311
- return O(() => !!(d() && x()))() && !b();
316
+ return x(() => !!(c() && T()))() && !b();
312
317
  },
313
318
  get children() {
314
319
  return [(() => {
315
- var t = Te();
316
- return t.$$click = () => h(!1), z(() => S(t, C("absolute inset-0 z-40 bg-black/30 cursor-pointer", r.slotClassNames?.mobileSidebarBackdrop))), t;
320
+ var t = ze();
321
+ return t.$$click = () => S(!1), $(() => y(t, C("absolute inset-0 z-40 bg-black/30 cursor-pointer", r.slotClassNames?.mobileSidebarBackdrop))), t;
317
322
  })(), (() => {
318
- var t = pe(), m = t.firstChild, g = F;
319
- return typeof g == "function" ? le(g, t) : F = t, c(m, () => V(i.sidebarActiveTab())), z((f) => {
320
- var B = C("absolute left-0 top-0 bottom-0 z-50", "w-72 max-w-[80vw]", "bg-sidebar border-r border-sidebar-border", "shadow-xl", "animate-in slide-in-from-left duration-200", r.slotClassNames?.mobileSidebarDrawer), A = v().sidebarLabel;
321
- return B !== f.e && S(t, f.e = B), A !== f.t && $(t, "aria-label", f.t = A), f;
323
+ var t = Pe(), m = t.firstChild, h = R;
324
+ return typeof h == "function" ? ce(h, t) : R = t, d(m, () => _(i.sidebarActiveTab())), $((f) => {
325
+ var B = C("absolute left-0 top-0 bottom-0 z-50", "w-72 max-w-[80vw]", "bg-sidebar border-r border-sidebar-border", "shadow-xl", "animate-in slide-in-from-left duration-200", r.slotClassNames?.mobileSidebarDrawer), k = v().sidebarLabel;
326
+ return B !== f.e && y(t, f.e = B), k !== f.t && z(t, "aria-label", f.t = k), f;
322
327
  }, {
323
328
  e: void 0,
324
329
  t: void 0
325
330
  }), t;
326
331
  })()];
327
332
  }
328
- }), n), c(u, () => r.children), c(n, a(y, {
333
+ }), n), d(u, () => r.children), d(n, a(g, {
329
334
  get when() {
330
- return O(() => !!(!d() && i.terminalOpened()))() && r.terminalPanel;
335
+ return x(() => !!(!c() && i.terminalOpened()))() && r.terminalPanel;
331
336
  },
332
337
  get children() {
333
- var t = Ne();
334
- return c(t, a(K, {
338
+ var t = Re();
339
+ return d(t, a(j, {
335
340
  direction: "vertical",
336
341
  onResize: (m) => i.setTerminalHeight(i.terminalHeight() - m)
337
- }), null), c(t, () => r.terminalPanel, null), z((m) => {
338
- var g = C("relative shrink-0 border-t border-border bg-terminal-background overflow-hidden", r.slotClassNames?.terminalPanel), f = `${i.terminalHeight()}px`;
339
- return g !== m.e && S(t, m.e = g), f !== m.t && ae(t, "height", m.t = f), m;
342
+ }), null), d(t, () => r.terminalPanel, null), $((m) => {
343
+ var h = C("relative shrink-0 border-t border-border bg-terminal-background overflow-hidden", r.slotClassNames?.terminalPanel), f = `${i.terminalHeight()}px`;
344
+ return h !== m.e && y(t, m.e = h), f !== m.t && U(t, "height", m.t = f), m;
340
345
  }, {
341
346
  e: void 0,
342
347
  t: void 0
343
348
  }), t;
344
349
  }
345
- }), null), c(e, a(y, {
350
+ }), null), d(e, a(g, {
351
+ get when() {
352
+ return x(() => !!c())() && r.mobileAccessory;
353
+ },
354
+ get children() {
355
+ var t = We();
356
+ return d(t, () => r.mobileAccessory), t;
357
+ }
358
+ }), null), d(e, a(g, {
346
359
  get when() {
347
- return !d();
360
+ return !c();
348
361
  },
349
362
  get children() {
350
- return a(Ce, {
363
+ return a(ke, {
351
364
  get class() {
352
365
  return r.slotClassNames?.bottomBar;
353
366
  },
@@ -355,31 +368,34 @@ function Ye(r) {
355
368
  return r.slotClassNames?.bottomBarHeight;
356
369
  },
357
370
  get children() {
358
- return X();
371
+ return te();
359
372
  }
360
373
  });
361
374
  }
362
- }), null), c(e, a(y, {
375
+ }), null), d(e, a(g, {
363
376
  get when() {
364
- return O(() => !!d())() && w().length > 0;
377
+ return x(() => !!c())() && A().length > 0;
365
378
  },
366
379
  get children() {
367
- return a(Ie, {
380
+ return a(xe, {
381
+ get hidden() {
382
+ return !!(r.hideMobileNavigationWhenKeyboardOpen && J());
383
+ },
368
384
  get items() {
369
- return w();
385
+ return A();
370
386
  },
371
387
  get activeId() {
372
- return we({
373
- activeId: N(),
374
- mobileSidebarOpen: p.pending() ? !0 : x(),
375
- activeIsFullScreen: s?.getComponent(N())?.sidebar?.fullScreen ?? P(),
388
+ return Oe({
389
+ activeId: p(),
390
+ mobileSidebarOpen: N.pending() ? !0 : T(),
391
+ activeIsFullScreen: s?.getComponent(p())?.sidebar?.fullScreen ?? W(),
376
392
  activeIsPage: (() => {
377
- const t = s?.getComponent(N())?.sidebar;
378
- return t ? t.fullScreen === !0 || t.renderIn === "main" : J();
393
+ const t = s?.getComponent(p())?.sidebar;
394
+ return t ? t.fullScreen === !0 || t.renderIn === "main" : ee();
379
395
  })()
380
396
  });
381
397
  },
382
- onSelect: _,
398
+ onSelect: q,
383
399
  get ariaLabel() {
384
400
  return v().mobileNavigationLabel;
385
401
  },
@@ -388,8 +404,8 @@ function Ye(r) {
388
404
  }
389
405
  });
390
406
  }
391
- }), null), z((t) => {
392
- var m = C(
407
+ }), null), $((t) => {
408
+ var m = r.fillParent ? "100%" : void 0, h = C(
393
409
  // Use dvh when supported to avoid mobile browser UI causing layout jumps.
394
410
  "h-screen h-[100dvh] w-full flex flex-col overflow-hidden",
395
411
  "bg-background text-foreground",
@@ -397,8 +413,8 @@ function Ye(r) {
397
413
  "overscroll-none",
398
414
  r.slotClassNames?.root,
399
415
  r.class
400
- ), g = `#${v().mainContentId}`, f = C("fixed left-3 top-3 z-[120] rounded-md bg-primary px-3 py-2 text-xs font-medium text-primary-foreground shadow-md", "transition-transform duration-150 motion-reduce:transition-none", "-translate-y-[200%] focus:translate-y-0"), B = C("flex-1 min-w-0 flex flex-col overflow-hidden", r.slotClassNames?.contentArea), A = C("flex-1 min-h-0 overflow-auto overscroll-contain", r.slotClassNames?.main), q = v().mainContentId, D = v().mainLabel;
401
- return m !== t.e && S(e, t.e = m), g !== t.t && $(o, "href", t.t = g), f !== t.a && S(o, t.a = f), B !== t.o && S(n, t.o = B), A !== t.i && S(u, t.i = A), q !== t.n && $(u, "id", t.n = q), D !== t.s && $(u, "aria-label", t.s = D), t;
416
+ ), f = `#${v().mainContentId}`, B = C("fixed left-3 top-3 z-[120] rounded-md bg-primary px-3 py-2 text-xs font-medium text-primary-foreground shadow-md", "transition-transform duration-150 motion-reduce:transition-none", "-translate-y-[200%] focus:translate-y-0"), k = C("flex-1 min-w-0 flex flex-col overflow-hidden", r.slotClassNames?.contentArea), D = C("flex-1 min-h-0 overflow-auto overscroll-contain", r.slotClassNames?.main), K = v().mainContentId, Q = v().mainLabel;
417
+ return m !== t.e && U(e, "height", t.e = m), h !== t.t && y(e, t.t = h), f !== t.a && z(o, "href", t.a = f), B !== t.o && y(o, t.o = B), k !== t.i && y(n, t.i = k), D !== t.n && y(u, t.n = D), K !== t.s && z(u, "id", t.s = K), Q !== t.h && z(u, "aria-label", t.h = Q), t;
402
418
  }, {
403
419
  e: void 0,
404
420
  t: void 0,
@@ -406,11 +422,12 @@ function Ye(r) {
406
422
  o: void 0,
407
423
  i: void 0,
408
424
  n: void 0,
409
- s: void 0
425
+ s: void 0,
426
+ h: void 0
410
427
  }), e;
411
428
  })();
412
429
  }
413
- se(["click"]);
430
+ be(["click"]);
414
431
  export {
415
- Ye as Shell
432
+ at as Shell
416
433
  };
@@ -13,3 +13,4 @@ export { Panel, PanelHeader, PanelContent, type PanelProps, type PanelHeaderProp
13
13
  export { KeepAliveStack, type KeepAliveStackProps, type KeepAliveView } from './KeepAliveStack';
14
14
  export { DisplayModeSwitcher, sanitizeDisplayMode, type DisplayMode, type DisplayModeSwitcherProps, } from './DisplayModeSwitcher';
15
15
  export { DisplayModePageShell, type DisplayModePageShellProps } from './DisplayModePageShell';
16
+ export { AppViewport, type AppViewportProps } from './AppViewport';
@@ -16,8 +16,8 @@ export interface DialogProps {
16
16
  children: JSX.Element;
17
17
  footer?: JSX.Element;
18
18
  class?: string;
19
- /** Bottom drawers retain the same modal and surface-placement contract. */
20
- presentation?: 'dialog' | 'bottom-drawer';
19
+ /** Drawers retain the same modal, visible-viewport and surface-placement contract. */
20
+ presentation?: 'dialog' | 'bottom-drawer' | 'side-drawer';
21
21
  /** Undefined uses the default header; null leaves only the accessible title. */
22
22
  header?: JSX.Element;
23
23
  contentClass?: string;