@vuu-ui/vuu-shell 0.6.25-debug → 0.6.26-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/cjs/index.js CHANGED
@@ -31,10 +31,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
33
  ConnectionStatusIcon: () => ConnectionStatusIcon,
34
+ DEFAULT_DENSITY: () => DEFAULT_DENSITY2,
35
+ DEFAULT_THEME: () => DEFAULT_THEME,
36
+ DEFAULT_THEME_MODE: () => DEFAULT_THEME_MODE,
37
+ DensitySwitch: () => DensitySwitch,
34
38
  Feature: () => Feature,
35
39
  LoginPanel: () => LoginPanel,
36
40
  Shell: () => Shell,
37
41
  ShellContextProvider: () => ShellContextProvider,
42
+ ThemeContext: () => ThemeContext,
43
+ ThemeProvider: () => ThemeProvider,
38
44
  ThemeSwitch: () => ThemeSwitch,
39
45
  getAuthDetailsFromCookies: () => getAuthDetailsFromCookies,
40
46
  logout: () => logout,
@@ -81,14 +87,42 @@ var ConnectionStatusIcon = ({ connectionStatus, className, element = "span", ...
81
87
  ] }) });
82
88
  };
83
89
 
90
+ // src/density-switch/DensitySwitch.tsx
91
+ var import_salt_lab = require("@heswell/salt-lab");
92
+ var import_react2 = require("react");
93
+ var import_classnames2 = __toESM(require("classnames"));
94
+ var import_jsx_runtime2 = require("react/jsx-runtime");
95
+ var classBase = "vuuDensitySwitch";
96
+ var densities = ["high", "medium", "low", "touch"];
97
+ var DEFAULT_DENSITY = "high";
98
+ var DensitySwitch = ({
99
+ className: classNameProp,
100
+ defaultDensity = DEFAULT_DENSITY,
101
+ onDensityChange
102
+ }) => {
103
+ const handleSelectionChange = (0, import_react2.useCallback)((_event, selectedItem) => {
104
+ onDensityChange(selectedItem);
105
+ }, [onDensityChange]);
106
+ const className = (0, import_classnames2.default)(classBase, classNameProp);
107
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
108
+ import_salt_lab.Dropdown,
109
+ {
110
+ className,
111
+ source: densities,
112
+ defaultSelected: defaultDensity,
113
+ onSelectionChange: handleSelectionChange
114
+ }
115
+ );
116
+ };
117
+
84
118
  // src/feature/Feature.tsx
85
- var import_react3 = __toESM(require("react"));
119
+ var import_react4 = __toESM(require("react"));
86
120
  var import_vuu_layout = require("@vuu-ui/vuu-layout");
87
121
 
88
122
  // src/feature/ErrorBoundary.jsx
89
- var import_react2 = __toESM(require("react"));
90
- var import_jsx_runtime2 = require("react/jsx-runtime");
91
- var ErrorBoundary = class extends import_react2.default.Component {
123
+ var import_react3 = __toESM(require("react"));
124
+ var import_jsx_runtime3 = require("react/jsx-runtime");
125
+ var ErrorBoundary = class extends import_react3.default.Component {
92
126
  constructor(props) {
93
127
  super(props);
94
128
  this.state = { errorMessage: null };
@@ -101,9 +135,9 @@ var ErrorBoundary = class extends import_react2.default.Component {
101
135
  }
102
136
  render() {
103
137
  if (this.state.errorMessage) {
104
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
105
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h1", { children: "Something went wrong." }),
106
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: this.state.errorMessage })
138
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
139
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h1", { children: "Something went wrong." }),
140
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { children: this.state.errorMessage })
107
141
  ] });
108
142
  }
109
143
  return this.props.children;
@@ -111,17 +145,11 @@ var ErrorBoundary = class extends import_react2.default.Component {
111
145
  };
112
146
 
113
147
  // src/feature/Loader.tsx
114
- var import_jsx_runtime3 = require("react/jsx-runtime");
115
- var Loader = () => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "hwLoader", children: "loading" });
116
-
117
- // src/feature/css-module-loader.ts
118
- var importCSS = async (path) => {
119
- const container = new CSSStyleSheet();
120
- return fetch(path).then((x) => x.text()).then((x) => container.replace(x));
121
- };
148
+ var import_jsx_runtime4 = require("react/jsx-runtime");
149
+ var Loader = () => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "hwLoader", children: "loading" });
122
150
 
123
151
  // src/feature/Feature.tsx
124
- var import_jsx_runtime4 = require("react/jsx-runtime");
152
+ var import_jsx_runtime5 = require("react/jsx-runtime");
125
153
  function RawFeature({
126
154
  url,
127
155
  css,
@@ -129,32 +157,37 @@ function RawFeature({
129
157
  ...props
130
158
  }) {
131
159
  if (css) {
132
- importCSS(css).then((styleSheet) => {
133
- document.adoptedStyleSheets = [
134
- ...document.adoptedStyleSheets,
135
- styleSheet
136
- ];
137
- });
160
+ import(
161
+ /* @vite-ignore */
162
+ css
163
+ ).then(
164
+ (cssModule) => {
165
+ document.adoptedStyleSheets = [
166
+ ...document.adoptedStyleSheets,
167
+ cssModule.default
168
+ ];
169
+ }
170
+ );
138
171
  }
139
- const LazyFeature = import_react3.default.lazy(() => import(
172
+ const LazyFeature = import_react4.default.lazy(() => import(
140
173
  /* @vite-ignore */
141
174
  url
142
175
  ));
143
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react3.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Loader, {}), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LazyFeature, { ...props, ...params }) }) });
176
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react4.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Loader, {}), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(LazyFeature, { ...props, ...params }) }) });
144
177
  }
145
- var Feature = import_react3.default.memo(RawFeature);
178
+ var Feature = import_react4.default.memo(RawFeature);
146
179
  Feature.displayName = "Feature";
147
180
  (0, import_vuu_layout.registerComponent)("Feature", Feature, "view");
148
181
 
149
182
  // src/login/LoginPanel.tsx
150
- var import_react4 = require("react");
183
+ var import_react5 = require("react");
151
184
  var import_core = require("@salt-ds/core");
152
- var import_salt_lab = require("@heswell/salt-lab");
153
- var import_jsx_runtime5 = require("react/jsx-runtime");
154
- var classBase = "vuuLoginPanel";
185
+ var import_salt_lab2 = require("@heswell/salt-lab");
186
+ var import_jsx_runtime6 = require("react/jsx-runtime");
187
+ var classBase2 = "vuuLoginPanel";
155
188
  var LoginPanel = ({ onSubmit }) => {
156
- const [username, setUserName] = (0, import_react4.useState)("");
157
- const [password, setPassword] = (0, import_react4.useState)("");
189
+ const [username, setUserName] = (0, import_react5.useState)("");
190
+ const [password, setPassword] = (0, import_react5.useState)("");
158
191
  const login = () => {
159
192
  onSubmit(username, password);
160
193
  };
@@ -165,10 +198,10 @@ var LoginPanel = ({ onSubmit }) => {
165
198
  setPassword(value);
166
199
  };
167
200
  const dataIsValid = username.trim() !== "" && password.trim() !== "";
168
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: classBase, children: [
169
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_salt_lab.FormField, { label: "Username", style: { width: 200 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_salt_lab.Input, { value: username, id: "text-username", onChange: handleUsername }) }),
170
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_salt_lab.FormField, { label: "Password", style: { width: 200 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
171
- import_salt_lab.Input,
201
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: classBase2, children: [
202
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_salt_lab2.FormField, { label: "Username", style: { width: 200 }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_salt_lab2.Input, { value: username, id: "text-username", onChange: handleUsername }) }),
203
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_salt_lab2.FormField, { label: "Password", style: { width: 200 }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
204
+ import_salt_lab2.Input,
172
205
  {
173
206
  type: "password",
174
207
  value: password,
@@ -176,10 +209,10 @@ var LoginPanel = ({ onSubmit }) => {
176
209
  onChange: handlePassword
177
210
  }
178
211
  ) }),
179
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
212
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
180
213
  import_core.Button,
181
214
  {
182
- className: `${classBase}-login`,
215
+ className: `${classBase2}-login`,
183
216
  disabled: !dataIsValid,
184
217
  onClick: login,
185
218
  variant: "cta",
@@ -207,16 +240,43 @@ var logout = (loginUrl) => {
207
240
 
208
241
  // src/shell.tsx
209
242
  var import_vuu_data = require("@vuu-ui/vuu-data");
243
+ var import_classnames5 = __toESM(require("classnames"));
210
244
  var import_react11 = require("react");
211
245
 
246
+ // src/ShellContextProvider.tsx
247
+ var import_react6 = require("react");
248
+ var import_jsx_runtime7 = require("react/jsx-runtime");
249
+ var defaultConfig = {};
250
+ var ShellContext = (0, import_react6.createContext)(defaultConfig);
251
+ var Provider = ({
252
+ children,
253
+ context,
254
+ inheritedContext
255
+ }) => {
256
+ const mergedContext = {
257
+ ...inheritedContext,
258
+ ...context
259
+ };
260
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ShellContext.Provider, { value: mergedContext, children });
261
+ };
262
+ var ShellContextProvider = ({
263
+ children,
264
+ value
265
+ }) => {
266
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Provider, { context: value, inheritedContext: context, children }) });
267
+ };
268
+ var useShellContext = () => {
269
+ return (0, import_react6.useContext)(ShellContext);
270
+ };
271
+
212
272
  // src/use-layout-config.js
213
- var import_react5 = require("react");
273
+ var import_react7 = require("react");
214
274
  var useLayoutConfig = (user, defaultLayout) => {
215
- const [layout, _setLayout] = (0, import_react5.useState)(defaultLayout);
275
+ const [layout, _setLayout] = (0, import_react7.useState)(defaultLayout);
216
276
  const setLayout = (layout2) => {
217
277
  _setLayout(layout2);
218
278
  };
219
- const load = (0, import_react5.useCallback)(
279
+ const load = (0, import_react7.useCallback)(
220
280
  async (id = "latest") => {
221
281
  fetch(`api/vui/${user.username}/${id}`, {}).then((response) => {
222
282
  return response.ok ? response.json() : defaultLayout;
@@ -226,10 +286,10 @@ var useLayoutConfig = (user, defaultLayout) => {
226
286
  },
227
287
  [defaultLayout, user.username]
228
288
  );
229
- (0, import_react5.useEffect)(() => {
289
+ (0, import_react7.useEffect)(() => {
230
290
  load();
231
291
  }, [load]);
232
- const saveData = (0, import_react5.useCallback)(
292
+ const saveData = (0, import_react7.useCallback)(
233
293
  (data) => {
234
294
  fetch(`api/vui/${user.username}`, {
235
295
  method: "POST",
@@ -243,7 +303,7 @@ var useLayoutConfig = (user, defaultLayout) => {
243
303
  },
244
304
  [defaultLayout, user]
245
305
  );
246
- const loadLayoutById = (0, import_react5.useCallback)(
306
+ const loadLayoutById = (0, import_react7.useCallback)(
247
307
  (id) => {
248
308
  load(id);
249
309
  },
@@ -253,34 +313,7 @@ var useLayoutConfig = (user, defaultLayout) => {
253
313
  };
254
314
  var use_layout_config_default = useLayoutConfig;
255
315
 
256
- // src/ShellContextProvider.tsx
257
- var import_react6 = require("react");
258
- var import_jsx_runtime6 = require("react/jsx-runtime");
259
- var defaultConfig = {};
260
- var ShellContext = (0, import_react6.createContext)(defaultConfig);
261
- var Provider = ({
262
- children,
263
- context,
264
- inheritedContext
265
- }) => {
266
- const mergedContext = {
267
- ...inheritedContext,
268
- ...context
269
- };
270
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ShellContext.Provider, { value: mergedContext, children });
271
- };
272
- var ShellContextProvider = ({
273
- children,
274
- value
275
- }) => {
276
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ShellContext.Consumer, { children: (context) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Provider, { context: value, inheritedContext: context, children }) });
277
- };
278
- var useShellContext = () => {
279
- return (0, import_react6.useContext)(ShellContext);
280
- };
281
-
282
316
  // src/shell.tsx
283
- var import_classnames5 = __toESM(require("classnames"));
284
317
  var import_vuu_layout2 = require("@vuu-ui/vuu-layout");
285
318
 
286
319
  // src/app-header/AppHeader.tsx
@@ -288,15 +321,15 @@ var import_react10 = require("react");
288
321
 
289
322
  // src/user-profile/UserProfile.tsx
290
323
  var import_core3 = require("@salt-ds/core");
291
- var import_salt_lab3 = require("@heswell/salt-lab");
324
+ var import_salt_lab4 = require("@heswell/salt-lab");
292
325
  var import_icons2 = require("@salt-ds/icons");
293
326
 
294
327
  // src/user-profile/UserPanel.tsx
295
328
  var import_vuu_utils2 = require("@vuu-ui/vuu-utils");
296
- var import_salt_lab2 = require("@heswell/salt-lab");
329
+ var import_salt_lab3 = require("@heswell/salt-lab");
297
330
  var import_core2 = require("@salt-ds/core");
298
331
  var import_icons = require("@salt-ds/icons");
299
- var import_react7 = require("react");
332
+ var import_react8 = require("react");
300
333
 
301
334
  // src/get-layout-history.ts
302
335
  var getLayoutHistory = async (user) => {
@@ -309,16 +342,16 @@ var getLayoutHistory = async (user) => {
309
342
  };
310
343
 
311
344
  // src/user-profile/UserPanel.tsx
312
- var import_jsx_runtime7 = require("react/jsx-runtime");
345
+ var import_jsx_runtime8 = require("react/jsx-runtime");
313
346
  var byLastUpdate = ({ lastUpdate: l1 }, { lastUpdate: l2 }) => {
314
347
  return l2 === l1 ? 0 : l2 < l1 ? -1 : 1;
315
348
  };
316
349
  var HistoryListItem = (props) => {
317
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_salt_lab2.ListItem, { ...props });
350
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_salt_lab3.ListItem, { ...props });
318
351
  };
319
- var UserPanel = (0, import_react7.forwardRef)(function UserPanel2({ loginUrl, onNavigate, user, layoutId = "latest" }, forwardedRef) {
320
- const [history, setHistory] = (0, import_react7.useState)([]);
321
- (0, import_react7.useEffect)(() => {
352
+ var UserPanel = (0, import_react8.forwardRef)(function UserPanel2({ loginUrl, onNavigate, user, layoutId = "latest" }, forwardedRef) {
353
+ const [history, setHistory] = (0, import_react8.useState)([]);
354
+ (0, import_react8.useEffect)(() => {
322
355
  async function getHistory() {
323
356
  const history2 = await getLayoutHistory(user);
324
357
  const sortedHistory = history2.filter((item) => item.id !== "latest").sort(byLastUpdate).map(({ id, lastUpdate }) => ({
@@ -331,7 +364,7 @@ var UserPanel = (0, import_react7.forwardRef)(function UserPanel2({ loginUrl, on
331
364
  }
332
365
  getHistory();
333
366
  }, [user]);
334
- const handleHisorySelected = (0, import_react7.useCallback)(
367
+ const handleHisorySelected = (0, import_react8.useCallback)(
335
368
  (evt, selected2) => {
336
369
  if (selected2) {
337
370
  onNavigate(selected2.id);
@@ -339,13 +372,13 @@ var UserPanel = (0, import_react7.forwardRef)(function UserPanel2({ loginUrl, on
339
372
  },
340
373
  [onNavigate]
341
374
  );
342
- const handleLogout = (0, import_react7.useCallback)(() => {
375
+ const handleLogout = (0, import_react8.useCallback)(() => {
343
376
  logout(loginUrl);
344
377
  }, [loginUrl]);
345
378
  const selected = history.length === 0 ? null : layoutId === "latest" ? history[0] : history.find((i) => i.id === layoutId);
346
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "vuuUserPanel", ref: forwardedRef, children: [
347
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
348
- import_salt_lab2.List,
379
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "vuuUserPanel", ref: forwardedRef, children: [
380
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
381
+ import_salt_lab3.List,
349
382
  {
350
383
  ListItem: HistoryListItem,
351
384
  className: "vuuUserPanel-history",
@@ -354,15 +387,15 @@ var UserPanel = (0, import_react7.forwardRef)(function UserPanel2({ loginUrl, on
354
387
  source: history
355
388
  }
356
389
  ),
357
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "vuuUserPanel-buttonBar", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_core2.Button, { "aria-label": "logout", onClick: handleLogout, children: [
358
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons.ExportIcon, {}),
390
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "vuuUserPanel-buttonBar", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core2.Button, { "aria-label": "logout", onClick: handleLogout, children: [
391
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_icons.ExportIcon, {}),
359
392
  " Logout"
360
393
  ] }) })
361
394
  ] });
362
395
  });
363
396
 
364
397
  // src/user-profile/UserProfile.tsx
365
- var import_jsx_runtime8 = require("react/jsx-runtime");
398
+ var import_jsx_runtime9 = require("react/jsx-runtime");
366
399
  var UserProfile = ({
367
400
  layoutId,
368
401
  loginUrl,
@@ -372,9 +405,9 @@ var UserProfile = ({
372
405
  const handleNavigate = (id) => {
373
406
  onNavigate(id);
374
407
  };
375
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_salt_lab3.DropdownBase, { className: "vuuUserProfile", placement: "bottom-end", children: [
376
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core3.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_icons2.UserSolidIcon, {}) }),
377
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
408
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_salt_lab4.DropdownBase, { className: "vuuUserProfile", placement: "bottom-end", children: [
409
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core3.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_icons2.UserSolidIcon, {}) }),
410
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
378
411
  UserPanel,
379
412
  {
380
413
  layoutId,
@@ -387,12 +420,12 @@ var UserProfile = ({
387
420
  };
388
421
 
389
422
  // src/theme-switch/ThemeSwitch.tsx
390
- var import_salt_lab4 = require("@heswell/salt-lab");
391
- var import_classnames2 = __toESM(require("classnames"));
423
+ var import_salt_lab5 = require("@heswell/salt-lab");
424
+ var import_classnames3 = __toESM(require("classnames"));
392
425
  var import_core4 = require("@salt-ds/core");
393
- var import_react8 = require("react");
394
- var import_jsx_runtime9 = require("react/jsx-runtime");
395
- var classBase2 = "vuuThemeSwitch";
426
+ var import_react9 = require("react");
427
+ var import_jsx_runtime10 = require("react/jsx-runtime");
428
+ var classBase3 = "vuuThemeSwitch";
396
429
  var modes = ["light", "dark"];
397
430
  var ThemeSwitch = ({
398
431
  className: classNameProp,
@@ -408,7 +441,7 @@ var ThemeSwitch = ({
408
441
  state: "mode"
409
442
  });
410
443
  const selectedIndex = modes.indexOf(mode);
411
- const handleChangeSecondary = (0, import_react8.useCallback)(
444
+ const handleChangeSecondary = (0, import_react9.useCallback)(
412
445
  (_evt, index) => {
413
446
  const mode2 = modes[index];
414
447
  setMode(mode2);
@@ -416,25 +449,25 @@ var ThemeSwitch = ({
416
449
  },
417
450
  [onChange, setMode]
418
451
  );
419
- const className = (0, import_classnames2.default)(classBase2, classNameProp);
420
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
421
- import_salt_lab4.ToggleButtonGroup,
452
+ const className = (0, import_classnames3.default)(classBase3, classNameProp);
453
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
454
+ import_salt_lab5.ToggleButtonGroup,
422
455
  {
423
456
  className,
424
457
  ...htmlAttributes,
425
458
  onChange: handleChangeSecondary,
426
459
  selectedIndex,
427
460
  children: [
428
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
429
- import_salt_lab4.ToggleButton,
461
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
462
+ import_salt_lab5.ToggleButton,
430
463
  {
431
464
  "aria-label": "alert",
432
465
  tooltipText: "Light Theme",
433
466
  "data-icon": "light"
434
467
  }
435
468
  ),
436
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
437
- import_salt_lab4.ToggleButton,
469
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
470
+ import_salt_lab5.ToggleButton,
438
471
  {
439
472
  "aria-label": "home",
440
473
  tooltipText: "Dark Theme",
@@ -448,36 +481,6 @@ var ThemeSwitch = ({
448
481
 
449
482
  // src/app-header/AppHeader.tsx
450
483
  var import_classnames4 = __toESM(require("classnames"));
451
-
452
- // src/density-switch/DensitySwitch.tsx
453
- var import_salt_lab5 = require("@heswell/salt-lab");
454
- var import_core5 = require("@salt-ds/core");
455
- var import_react9 = require("react");
456
- var import_classnames3 = __toESM(require("classnames"));
457
- var import_jsx_runtime10 = require("react/jsx-runtime");
458
- var classBase3 = "vuuDensitySwitch";
459
- var densities = ["high", "medium", "low", "touch"];
460
- var DensitySwitch = ({
461
- className: classNameProp,
462
- defaultDensity = import_core5.DEFAULT_DENSITY,
463
- onDensityChange
464
- }) => {
465
- const handleSelectionChange = (0, import_react9.useCallback)((_event, selectedItem) => {
466
- onDensityChange(selectedItem);
467
- }, [onDensityChange]);
468
- const className = (0, import_classnames3.default)(classBase3, classNameProp);
469
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
470
- import_salt_lab5.Dropdown,
471
- {
472
- className,
473
- source: densities,
474
- defaultSelected: defaultDensity,
475
- onSelectionChange: handleSelectionChange
476
- }
477
- );
478
- };
479
-
480
- // src/app-header/AppHeader.tsx
481
484
  var import_jsx_runtime11 = require("react/jsx-runtime");
482
485
  var classBase4 = "vuuAppHeader";
483
486
  var AppHeader = ({
@@ -487,23 +490,16 @@ var AppHeader = ({
487
490
  onNavigate,
488
491
  onSwitchTheme,
489
492
  themeMode = "light",
490
- onDensitySwitch,
491
- density = "medium",
492
493
  user,
493
494
  ...htmlAttributes
494
495
  }) => {
495
- const className = (0, import_classnames4.default)(classBase4, classNameProp, `salt-density-${density}`);
496
+ const className = (0, import_classnames4.default)(classBase4, classNameProp);
496
497
  const handleSwitchTheme = (0, import_react10.useCallback)(
497
498
  (mode) => onSwitchTheme == null ? void 0 : onSwitchTheme(mode),
498
499
  [onSwitchTheme]
499
500
  );
500
- const handleDensitySwitch = (0, import_react10.useCallback)(
501
- (density2) => onDensitySwitch == null ? void 0 : onDensitySwitch(density2),
502
- [onDensitySwitch]
503
- );
504
501
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("header", { className, ...htmlAttributes, children: [
505
502
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ThemeSwitch, { defaultMode: themeMode, onChange: handleSwitchTheme }),
506
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DensitySwitch, { defaultDensity: density, onDensityChange: handleDensitySwitch }),
507
503
  /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
508
504
  UserProfile,
509
505
  {
@@ -543,7 +539,6 @@ var Shell = ({
543
539
  ...htmlAttributes
544
540
  }) => {
545
541
  const rootRef = (0, import_react11.useRef)(null);
546
- const [density, setDensity] = (0, import_react11.useState)("medium");
547
542
  const paletteView = (0, import_react11.useRef)(null);
548
543
  const [open, setOpen] = (0, import_react11.useState)(false);
549
544
  const layoutId = (0, import_react11.useRef)("latest");
@@ -562,12 +557,6 @@ var Shell = ({
562
557
  rootRef.current.dataset.mode = mode;
563
558
  }
564
559
  }, []);
565
- const handleDensitySwitch = (0, import_react11.useCallback)(
566
- (density2) => {
567
- setDensity(density2);
568
- },
569
- [setDensity]
570
- );
571
560
  const handleDrawerClick = (e) => {
572
561
  var _a;
573
562
  const target = e.target;
@@ -623,7 +612,7 @@ var Shell = ({
623
612
  "vuuShell",
624
613
  classNameProp,
625
614
  "salt-theme",
626
- `salt-density-${density}`
615
+ "salt-density-high"
627
616
  );
628
617
  return (
629
618
  // ShellContext TBD
@@ -648,11 +637,10 @@ var Shell = ({
648
637
  loginUrl,
649
638
  user,
650
639
  onNavigate: handleNavigate,
651
- onSwitchTheme: handleSwitchTheme,
652
- onDensitySwitch: handleDensitySwitch
640
+ onSwitchTheme: handleSwitchTheme
653
641
  }
654
642
  ),
655
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_vuu_layout2.Chest, { style: { flex: 1 }, children: getDrawers().concat(
643
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_vuu_layout2.DockLayout, { style: { flex: 1 }, children: getDrawers().concat(
656
644
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
657
645
  import_vuu_layout2.DraggableLayout,
658
646
  {
@@ -671,4 +659,64 @@ var Shell = ({
671
659
  ] })
672
660
  );
673
661
  };
662
+
663
+ // src/theme-provider/ThemeProvider.tsx
664
+ var import_react12 = require("react");
665
+ var import_classnames6 = __toESM(require("classnames"));
666
+ var import_jsx_runtime13 = require("react/jsx-runtime");
667
+ var DEFAULT_DENSITY2 = "medium";
668
+ var DEFAULT_THEME = "salt-theme";
669
+ var DEFAULT_THEME_MODE = "light";
670
+ var ThemeContext = (0, import_react12.createContext)({
671
+ density: "high",
672
+ theme: "salt-theme",
673
+ themeMode: "light"
674
+ });
675
+ var createThemedChildren = (children, theme, themeMode, density) => {
676
+ var _a;
677
+ if ((0, import_react12.isValidElement)(children)) {
678
+ return (0, import_react12.cloneElement)(children, {
679
+ className: (0, import_classnames6.default)(
680
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
681
+ (_a = children.props) == null ? void 0 : _a.className,
682
+ theme,
683
+ `salt-density-${density}`
684
+ ),
685
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
686
+ // @ts-expect-error
687
+ "data-mode": themeMode
688
+ });
689
+ } else {
690
+ console.warn(
691
+ `
692
+ ThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.
693
+ Wrap elements with a single container`
694
+ );
695
+ return children;
696
+ }
697
+ };
698
+ var ThemeProvider = ({
699
+ children,
700
+ theme: themeProp,
701
+ themeMode: themeModeProp,
702
+ density: densityProp
703
+ }) => {
704
+ var _a, _b, _c;
705
+ const {
706
+ density: inheritedDensity,
707
+ themeMode: inheritedThemeMode,
708
+ theme: inheritedTheme
709
+ } = (0, import_react12.useContext)(ThemeContext);
710
+ const density = (_a = densityProp != null ? densityProp : inheritedDensity) != null ? _a : DEFAULT_DENSITY2;
711
+ const themeMode = (_b = themeModeProp != null ? themeModeProp : inheritedThemeMode) != null ? _b : DEFAULT_THEME_MODE;
712
+ const theme = (_c = themeProp != null ? themeProp : inheritedTheme) != null ? _c : DEFAULT_THEME;
713
+ const themedChildren = createThemedChildren(
714
+ children,
715
+ theme,
716
+ themeMode,
717
+ density
718
+ );
719
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ThemeContext.Provider, { value: { themeMode, density, theme }, children: themedChildren });
720
+ };
721
+ ThemeProvider.displayName = "ThemeProvider";
674
722
  //# sourceMappingURL=index.js.map