@vuu-ui/vuu-shell 0.6.24-debug → 0.6.25-debug

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/esm/index.js CHANGED
@@ -1,11 +1,49 @@
1
+ // src/connection-status/ConnectionStatusIcon.tsx
2
+ import React, { useEffect, useState } from "react";
3
+ import cx from "classnames";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
+ var ConnectionStatusIcon = ({ connectionStatus, className, element = "span", ...props }) => {
6
+ const [classBase5, setClassBase] = useState("vuuConnectingStatus");
7
+ useEffect(() => {
8
+ switch (connectionStatus) {
9
+ case "connected":
10
+ case "reconnected":
11
+ setClassBase("vuuActiveStatus");
12
+ break;
13
+ case "connecting":
14
+ setClassBase("vuuConnectingStatus");
15
+ break;
16
+ case "disconnected":
17
+ setClassBase("vuuDisconnectedStatus");
18
+ break;
19
+ default:
20
+ break;
21
+ }
22
+ }, [connectionStatus]);
23
+ const statusIcon = React.createElement(
24
+ element,
25
+ {
26
+ ...props,
27
+ className: cx("vuuStatus vuuIcon", classBase5, className)
28
+ }
29
+ );
30
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "vuuStatus-container salt-theme", children: [
31
+ statusIcon,
32
+ /* @__PURE__ */ jsxs("div", { className: "vuuStatus-text", children: [
33
+ "Status: ",
34
+ connectionStatus.toUpperCase()
35
+ ] })
36
+ ] }) });
37
+ };
38
+
1
39
  // src/feature/Feature.tsx
2
- import React2, { Suspense } from "react";
40
+ import React3, { Suspense } from "react";
3
41
  import { registerComponent } from "@vuu-ui/vuu-layout";
4
42
 
5
43
  // src/feature/ErrorBoundary.jsx
6
- import React from "react";
7
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
- var ErrorBoundary = class extends React.Component {
44
+ import React2 from "react";
45
+ import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
46
+ var ErrorBoundary = class extends React2.Component {
9
47
  constructor(props) {
10
48
  super(props);
11
49
  this.state = { errorMessage: null };
@@ -18,9 +56,9 @@ var ErrorBoundary = class extends React.Component {
18
56
  }
19
57
  render() {
20
58
  if (this.state.errorMessage) {
21
- return /* @__PURE__ */ jsxs(Fragment, { children: [
22
- /* @__PURE__ */ jsx("h1", { children: "Something went wrong." }),
23
- /* @__PURE__ */ jsx("p", { children: this.state.errorMessage })
59
+ return /* @__PURE__ */ jsxs2(Fragment2, { children: [
60
+ /* @__PURE__ */ jsx2("h1", { children: "Something went wrong." }),
61
+ /* @__PURE__ */ jsx2("p", { children: this.state.errorMessage })
24
62
  ] });
25
63
  }
26
64
  return this.props.children;
@@ -28,8 +66,8 @@ var ErrorBoundary = class extends React.Component {
28
66
  };
29
67
 
30
68
  // src/feature/Loader.tsx
31
- import { jsx as jsx2 } from "react/jsx-runtime";
32
- var Loader = () => /* @__PURE__ */ jsx2("div", { className: "hwLoader", children: "loading" });
69
+ import { jsx as jsx3 } from "react/jsx-runtime";
70
+ var Loader = () => /* @__PURE__ */ jsx3("div", { className: "hwLoader", children: "loading" });
33
71
 
34
72
  // src/feature/css-module-loader.ts
35
73
  var importCSS = async (path) => {
@@ -38,7 +76,7 @@ var importCSS = async (path) => {
38
76
  };
39
77
 
40
78
  // src/feature/Feature.tsx
41
- import { jsx as jsx3 } from "react/jsx-runtime";
79
+ import { jsx as jsx4 } from "react/jsx-runtime";
42
80
  function RawFeature({
43
81
  url,
44
82
  css,
@@ -53,25 +91,25 @@ function RawFeature({
53
91
  ];
54
92
  });
55
93
  }
56
- const LazyFeature = React2.lazy(() => import(
94
+ const LazyFeature = React3.lazy(() => import(
57
95
  /* @vite-ignore */
58
96
  url
59
97
  ));
60
- return /* @__PURE__ */ jsx3(ErrorBoundary, { children: /* @__PURE__ */ jsx3(Suspense, { fallback: /* @__PURE__ */ jsx3(Loader, {}), children: /* @__PURE__ */ jsx3(LazyFeature, { ...props, ...params }) }) });
98
+ return /* @__PURE__ */ jsx4(ErrorBoundary, { children: /* @__PURE__ */ jsx4(Suspense, { fallback: /* @__PURE__ */ jsx4(Loader, {}), children: /* @__PURE__ */ jsx4(LazyFeature, { ...props, ...params }) }) });
61
99
  }
62
- var Feature = React2.memo(RawFeature);
100
+ var Feature = React3.memo(RawFeature);
63
101
  Feature.displayName = "Feature";
64
102
  registerComponent("Feature", Feature, "view");
65
103
 
66
104
  // src/login/LoginPanel.tsx
67
- import { useState } from "react";
105
+ import { useState as useState2 } from "react";
68
106
  import { Button } from "@salt-ds/core";
69
107
  import { FormField, Input } from "@heswell/salt-lab";
70
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
108
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
71
109
  var classBase = "vuuLoginPanel";
72
110
  var LoginPanel = ({ onSubmit }) => {
73
- const [username, setUserName] = useState("");
74
- const [password, setPassword] = useState("");
111
+ const [username, setUserName] = useState2("");
112
+ const [password, setPassword] = useState2("");
75
113
  const login = () => {
76
114
  onSubmit(username, password);
77
115
  };
@@ -82,9 +120,9 @@ var LoginPanel = ({ onSubmit }) => {
82
120
  setPassword(value);
83
121
  };
84
122
  const dataIsValid = username.trim() !== "" && password.trim() !== "";
85
- return /* @__PURE__ */ jsxs2("div", { className: classBase, children: [
86
- /* @__PURE__ */ jsx4(FormField, { label: "Username", style: { width: 200 }, children: /* @__PURE__ */ jsx4(Input, { value: username, id: "text-username", onChange: handleUsername }) }),
87
- /* @__PURE__ */ jsx4(FormField, { label: "Password", style: { width: 200 }, children: /* @__PURE__ */ jsx4(
123
+ return /* @__PURE__ */ jsxs3("div", { className: classBase, children: [
124
+ /* @__PURE__ */ jsx5(FormField, { label: "Username", style: { width: 200 }, children: /* @__PURE__ */ jsx5(Input, { value: username, id: "text-username", onChange: handleUsername }) }),
125
+ /* @__PURE__ */ jsx5(FormField, { label: "Password", style: { width: 200 }, children: /* @__PURE__ */ jsx5(
88
126
  Input,
89
127
  {
90
128
  type: "password",
@@ -93,7 +131,7 @@ var LoginPanel = ({ onSubmit }) => {
93
131
  onChange: handlePassword
94
132
  }
95
133
  ) }),
96
- /* @__PURE__ */ jsx4(
134
+ /* @__PURE__ */ jsx5(
97
135
  Button,
98
136
  {
99
137
  className: `${classBase}-login`,
@@ -125,16 +163,16 @@ var logout = (loginUrl) => {
125
163
  // src/shell.tsx
126
164
  import { connectToServer } from "@vuu-ui/vuu-data";
127
165
  import {
128
- useCallback as useCallback5,
129
- useEffect as useEffect3,
166
+ useCallback as useCallback6,
167
+ useEffect as useEffect4,
130
168
  useRef,
131
- useState as useState4
169
+ useState as useState5
132
170
  } from "react";
133
171
 
134
172
  // src/use-layout-config.js
135
- import { useCallback, useEffect, useState as useState2 } from "react";
173
+ import { useCallback, useEffect as useEffect2, useState as useState3 } from "react";
136
174
  var useLayoutConfig = (user, defaultLayout) => {
137
- const [layout, _setLayout] = useState2(defaultLayout);
175
+ const [layout, _setLayout] = useState3(defaultLayout);
138
176
  const setLayout = (layout2) => {
139
177
  _setLayout(layout2);
140
178
  };
@@ -148,7 +186,7 @@ var useLayoutConfig = (user, defaultLayout) => {
148
186
  },
149
187
  [defaultLayout, user.username]
150
188
  );
151
- useEffect(() => {
189
+ useEffect2(() => {
152
190
  load();
153
191
  }, [load]);
154
192
  const saveData = useCallback(
@@ -177,7 +215,7 @@ var use_layout_config_default = useLayoutConfig;
177
215
 
178
216
  // src/ShellContextProvider.tsx
179
217
  import { createContext, useContext } from "react";
180
- import { jsx as jsx5 } from "react/jsx-runtime";
218
+ import { jsx as jsx6 } from "react/jsx-runtime";
181
219
  var defaultConfig = {};
182
220
  var ShellContext = createContext(defaultConfig);
183
221
  var Provider = ({
@@ -189,20 +227,20 @@ var Provider = ({
189
227
  ...inheritedContext,
190
228
  ...context
191
229
  };
192
- return /* @__PURE__ */ jsx5(ShellContext.Provider, { value: mergedContext, children });
230
+ return /* @__PURE__ */ jsx6(ShellContext.Provider, { value: mergedContext, children });
193
231
  };
194
232
  var ShellContextProvider = ({
195
233
  children,
196
234
  value
197
235
  }) => {
198
- return /* @__PURE__ */ jsx5(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ jsx5(Provider, { context: value, inheritedContext: context, children }) });
236
+ return /* @__PURE__ */ jsx6(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ jsx6(Provider, { context: value, inheritedContext: context, children }) });
199
237
  };
200
238
  var useShellContext = () => {
201
239
  return useContext(ShellContext);
202
240
  };
203
241
 
204
242
  // src/shell.tsx
205
- import cx3 from "classnames";
243
+ import cx5 from "classnames";
206
244
  import {
207
245
  Chest,
208
246
  DraggableLayout,
@@ -213,7 +251,7 @@ import {
213
251
  } from "@vuu-ui/vuu-layout";
214
252
 
215
253
  // src/app-header/AppHeader.tsx
216
- import { useCallback as useCallback4 } from "react";
254
+ import { useCallback as useCallback5 } from "react";
217
255
 
218
256
  // src/user-profile/UserProfile.tsx
219
257
  import { Button as Button3 } from "@salt-ds/core";
@@ -228,8 +266,8 @@ import { ExportIcon } from "@salt-ds/icons";
228
266
  import {
229
267
  forwardRef,
230
268
  useCallback as useCallback2,
231
- useEffect as useEffect2,
232
- useState as useState3
269
+ useEffect as useEffect3,
270
+ useState as useState4
233
271
  } from "react";
234
272
 
235
273
  // src/get-layout-history.ts
@@ -243,16 +281,16 @@ var getLayoutHistory = async (user) => {
243
281
  };
244
282
 
245
283
  // src/user-profile/UserPanel.tsx
246
- import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
284
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
247
285
  var byLastUpdate = ({ lastUpdate: l1 }, { lastUpdate: l2 }) => {
248
286
  return l2 === l1 ? 0 : l2 < l1 ? -1 : 1;
249
287
  };
250
288
  var HistoryListItem = (props) => {
251
- return /* @__PURE__ */ jsx6(ListItem, { ...props });
289
+ return /* @__PURE__ */ jsx7(ListItem, { ...props });
252
290
  };
253
291
  var UserPanel = forwardRef(function UserPanel2({ loginUrl, onNavigate, user, layoutId = "latest" }, forwardedRef) {
254
- const [history, setHistory] = useState3([]);
255
- useEffect2(() => {
292
+ const [history, setHistory] = useState4([]);
293
+ useEffect3(() => {
256
294
  async function getHistory() {
257
295
  const history2 = await getLayoutHistory(user);
258
296
  const sortedHistory = history2.filter((item) => item.id !== "latest").sort(byLastUpdate).map(({ id, lastUpdate }) => ({
@@ -277,8 +315,8 @@ var UserPanel = forwardRef(function UserPanel2({ loginUrl, onNavigate, user, lay
277
315
  logout(loginUrl);
278
316
  }, [loginUrl]);
279
317
  const selected = history.length === 0 ? null : layoutId === "latest" ? history[0] : history.find((i) => i.id === layoutId);
280
- return /* @__PURE__ */ jsxs3("div", { className: "vuuUserPanel", ref: forwardedRef, children: [
281
- /* @__PURE__ */ jsx6(
318
+ return /* @__PURE__ */ jsxs4("div", { className: "vuuUserPanel", ref: forwardedRef, children: [
319
+ /* @__PURE__ */ jsx7(
282
320
  List,
283
321
  {
284
322
  ListItem: HistoryListItem,
@@ -288,15 +326,15 @@ var UserPanel = forwardRef(function UserPanel2({ loginUrl, onNavigate, user, lay
288
326
  source: history
289
327
  }
290
328
  ),
291
- /* @__PURE__ */ jsx6("div", { className: "vuuUserPanel-buttonBar", children: /* @__PURE__ */ jsxs3(Button2, { "aria-label": "logout", onClick: handleLogout, children: [
292
- /* @__PURE__ */ jsx6(ExportIcon, {}),
329
+ /* @__PURE__ */ jsx7("div", { className: "vuuUserPanel-buttonBar", children: /* @__PURE__ */ jsxs4(Button2, { "aria-label": "logout", onClick: handleLogout, children: [
330
+ /* @__PURE__ */ jsx7(ExportIcon, {}),
293
331
  " Logout"
294
332
  ] }) })
295
333
  ] });
296
334
  });
297
335
 
298
336
  // src/user-profile/UserProfile.tsx
299
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
337
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
300
338
  var UserProfile = ({
301
339
  layoutId,
302
340
  loginUrl,
@@ -306,9 +344,9 @@ var UserProfile = ({
306
344
  const handleNavigate = (id) => {
307
345
  onNavigate(id);
308
346
  };
309
- return /* @__PURE__ */ jsxs4(DropdownBase, { className: "vuuUserProfile", placement: "bottom-end", children: [
310
- /* @__PURE__ */ jsx7(Button3, { variant: "secondary", children: /* @__PURE__ */ jsx7(UserSolidIcon, {}) }),
311
- /* @__PURE__ */ jsx7(
347
+ return /* @__PURE__ */ jsxs5(DropdownBase, { className: "vuuUserProfile", placement: "bottom-end", children: [
348
+ /* @__PURE__ */ jsx8(Button3, { variant: "secondary", children: /* @__PURE__ */ jsx8(UserSolidIcon, {}) }),
349
+ /* @__PURE__ */ jsx8(
312
350
  UserPanel,
313
351
  {
314
352
  layoutId,
@@ -325,10 +363,10 @@ import {
325
363
  ToggleButton,
326
364
  ToggleButtonGroup
327
365
  } from "@heswell/salt-lab";
328
- import cx from "classnames";
366
+ import cx2 from "classnames";
329
367
  import { useControlled } from "@salt-ds/core";
330
368
  import { useCallback as useCallback3 } from "react";
331
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
369
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
332
370
  var classBase2 = "vuuThemeSwitch";
333
371
  var modes = ["light", "dark"];
334
372
  var ThemeSwitch = ({
@@ -353,8 +391,8 @@ var ThemeSwitch = ({
353
391
  },
354
392
  [onChange, setMode]
355
393
  );
356
- const className = cx(classBase2, classNameProp);
357
- return /* @__PURE__ */ jsxs5(
394
+ const className = cx2(classBase2, classNameProp);
395
+ return /* @__PURE__ */ jsxs6(
358
396
  ToggleButtonGroup,
359
397
  {
360
398
  className,
@@ -362,7 +400,7 @@ var ThemeSwitch = ({
362
400
  onChange: handleChangeSecondary,
363
401
  selectedIndex,
364
402
  children: [
365
- /* @__PURE__ */ jsx8(
403
+ /* @__PURE__ */ jsx9(
366
404
  ToggleButton,
367
405
  {
368
406
  "aria-label": "alert",
@@ -370,7 +408,7 @@ var ThemeSwitch = ({
370
408
  "data-icon": "light"
371
409
  }
372
410
  ),
373
- /* @__PURE__ */ jsx8(
411
+ /* @__PURE__ */ jsx9(
374
412
  ToggleButton,
375
413
  {
376
414
  "aria-label": "home",
@@ -384,9 +422,39 @@ var ThemeSwitch = ({
384
422
  };
385
423
 
386
424
  // src/app-header/AppHeader.tsx
387
- import cx2 from "classnames";
388
- import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
389
- var classBase3 = "vuuAppHeader";
425
+ import cx4 from "classnames";
426
+
427
+ // src/density-switch/DensitySwitch.tsx
428
+ import { Dropdown } from "@heswell/salt-lab";
429
+ import { DEFAULT_DENSITY } from "@salt-ds/core";
430
+ import { useCallback as useCallback4 } from "react";
431
+ import cx3 from "classnames";
432
+ import { jsx as jsx10 } from "react/jsx-runtime";
433
+ var classBase3 = "vuuDensitySwitch";
434
+ var densities = ["high", "medium", "low", "touch"];
435
+ var DensitySwitch = ({
436
+ className: classNameProp,
437
+ defaultDensity = DEFAULT_DENSITY,
438
+ onDensityChange
439
+ }) => {
440
+ const handleSelectionChange = useCallback4((_event, selectedItem) => {
441
+ onDensityChange(selectedItem);
442
+ }, [onDensityChange]);
443
+ const className = cx3(classBase3, classNameProp);
444
+ return /* @__PURE__ */ jsx10(
445
+ Dropdown,
446
+ {
447
+ className,
448
+ source: densities,
449
+ defaultSelected: defaultDensity,
450
+ onSelectionChange: handleSelectionChange
451
+ }
452
+ );
453
+ };
454
+
455
+ // src/app-header/AppHeader.tsx
456
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
457
+ var classBase4 = "vuuAppHeader";
390
458
  var AppHeader = ({
391
459
  className: classNameProp,
392
460
  layoutId,
@@ -394,17 +462,24 @@ var AppHeader = ({
394
462
  onNavigate,
395
463
  onSwitchTheme,
396
464
  themeMode = "light",
465
+ onDensitySwitch,
466
+ density = "medium",
397
467
  user,
398
468
  ...htmlAttributes
399
469
  }) => {
400
- const className = cx2(classBase3, classNameProp, "salt-density-medium");
401
- const handleSwitchTheme = useCallback4(
470
+ const className = cx4(classBase4, classNameProp, `salt-density-${density}`);
471
+ const handleSwitchTheme = useCallback5(
402
472
  (mode) => onSwitchTheme == null ? void 0 : onSwitchTheme(mode),
403
473
  [onSwitchTheme]
404
474
  );
405
- return /* @__PURE__ */ jsxs6("header", { className, ...htmlAttributes, children: [
406
- /* @__PURE__ */ jsx9(ThemeSwitch, { defaultMode: themeMode, onChange: handleSwitchTheme }),
407
- /* @__PURE__ */ jsx9(
475
+ const handleDensitySwitch = useCallback5(
476
+ (density2) => onDensitySwitch == null ? void 0 : onDensitySwitch(density2),
477
+ [onDensitySwitch]
478
+ );
479
+ return /* @__PURE__ */ jsxs7("header", { className, ...htmlAttributes, children: [
480
+ /* @__PURE__ */ jsx11(ThemeSwitch, { defaultMode: themeMode, onChange: handleSwitchTheme }),
481
+ /* @__PURE__ */ jsx11(DensitySwitch, { defaultDensity: density, onDensityChange: handleDensitySwitch }),
482
+ /* @__PURE__ */ jsx11(
408
483
  UserProfile,
409
484
  {
410
485
  layoutId,
@@ -417,7 +492,7 @@ var AppHeader = ({
417
492
  };
418
493
 
419
494
  // src/shell.tsx
420
- import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
495
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
421
496
  var warningLayout = {
422
497
  type: "View",
423
498
  props: {
@@ -443,25 +518,31 @@ var Shell = ({
443
518
  ...htmlAttributes
444
519
  }) => {
445
520
  const rootRef = useRef(null);
446
- const [density] = useState4("high");
521
+ const [density, setDensity] = useState5("medium");
447
522
  const paletteView = useRef(null);
448
- const [open, setOpen] = useState4(false);
523
+ const [open, setOpen] = useState5(false);
449
524
  const layoutId = useRef("latest");
450
525
  const [layout, setLayoutConfig, loadLayoutById] = use_layout_config_default(
451
526
  user,
452
527
  defaultLayout
453
528
  );
454
- const handleLayoutChange = useCallback5(
529
+ const handleLayoutChange = useCallback6(
455
530
  (layout2) => {
456
531
  setLayoutConfig(layout2);
457
532
  },
458
533
  [setLayoutConfig]
459
534
  );
460
- const handleSwitchTheme = useCallback5((mode) => {
535
+ const handleSwitchTheme = useCallback6((mode) => {
461
536
  if (rootRef.current) {
462
537
  rootRef.current.dataset.mode = mode;
463
538
  }
464
539
  }, []);
540
+ const handleDensitySwitch = useCallback6(
541
+ (density2) => {
542
+ setDensity(density2);
543
+ },
544
+ [setDensity]
545
+ );
465
546
  const handleDrawerClick = (e) => {
466
547
  var _a;
467
548
  const target = e.target;
@@ -469,14 +550,14 @@ var Shell = ({
469
550
  setOpen(!open);
470
551
  }
471
552
  };
472
- const handleNavigate = useCallback5(
553
+ const handleNavigate = useCallback6(
473
554
  (id) => {
474
555
  layoutId.current = id;
475
556
  loadLayoutById(id);
476
557
  },
477
558
  [loadLayoutById]
478
559
  );
479
- useEffect3(() => {
560
+ useEffect4(() => {
480
561
  if (serverUrl && user.token) {
481
562
  connectToServer(serverUrl, user.token);
482
563
  }
@@ -485,7 +566,7 @@ var Shell = ({
485
566
  const drawers = [];
486
567
  if (leftSidePanel) {
487
568
  drawers.push(
488
- /* @__PURE__ */ jsx10(
569
+ /* @__PURE__ */ jsx12(
489
570
  Drawer,
490
571
  {
491
572
  onClick: handleDrawerClick,
@@ -495,7 +576,7 @@ var Shell = ({
495
576
  peekaboo: true,
496
577
  sizeOpen: 200,
497
578
  toggleButton: "end",
498
- children: /* @__PURE__ */ jsx10(
579
+ children: /* @__PURE__ */ jsx12(
499
580
  View,
500
581
  {
501
582
  className: "vuuShell-palette",
@@ -513,7 +594,7 @@ var Shell = ({
513
594
  }
514
595
  return drawers;
515
596
  };
516
- const className = cx3(
597
+ const className = cx5(
517
598
  "vuuShell",
518
599
  classNameProp,
519
600
  "salt-theme",
@@ -521,32 +602,33 @@ var Shell = ({
521
602
  );
522
603
  return (
523
604
  // ShellContext TBD
524
- /* @__PURE__ */ jsxs7(ShellContextProvider, { value: void 0, children: [
525
- /* @__PURE__ */ jsx10(LayoutProvider, { layout, onLayoutChange: handleLayoutChange, children: /* @__PURE__ */ jsx10(
605
+ /* @__PURE__ */ jsxs8(ShellContextProvider, { value: void 0, children: [
606
+ /* @__PURE__ */ jsx12(LayoutProvider, { layout, onLayoutChange: handleLayoutChange, children: /* @__PURE__ */ jsx12(
526
607
  DraggableLayout,
527
608
  {
528
609
  className,
529
610
  "data-mode": "light",
530
611
  ref: rootRef,
531
612
  ...htmlAttributes,
532
- children: /* @__PURE__ */ jsxs7(
613
+ children: /* @__PURE__ */ jsxs8(
533
614
  Flexbox,
534
615
  {
535
616
  className: "App",
536
617
  style: { flexDirection: "column", height: "100%", width: "100%" },
537
618
  children: [
538
- /* @__PURE__ */ jsx10(
619
+ /* @__PURE__ */ jsx12(
539
620
  AppHeader,
540
621
  {
541
622
  layoutId: layoutId.current,
542
623
  loginUrl,
543
624
  user,
544
625
  onNavigate: handleNavigate,
545
- onSwitchTheme: handleSwitchTheme
626
+ onSwitchTheme: handleSwitchTheme,
627
+ onDensitySwitch: handleDensitySwitch
546
628
  }
547
629
  ),
548
- /* @__PURE__ */ jsx10(Chest, { style: { flex: 1 }, children: getDrawers().concat(
549
- /* @__PURE__ */ jsx10(
630
+ /* @__PURE__ */ jsx12(Chest, { style: { flex: 1 }, children: getDrawers().concat(
631
+ /* @__PURE__ */ jsx12(
550
632
  DraggableLayout,
551
633
  {
552
634
  dropTarget: true,
@@ -565,6 +647,7 @@ var Shell = ({
565
647
  );
566
648
  };
567
649
  export {
650
+ ConnectionStatusIcon,
568
651
  Feature,
569
652
  LoginPanel,
570
653
  Shell,