@happyvertical/smrt-svelte 0.52.0 → 0.53.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.
Files changed (49) hide show
  1. package/README.md +47 -0
  2. package/agents/components.md +8 -1
  3. package/dist/Provider.svelte +19 -15
  4. package/dist/Provider.svelte.d.ts +2 -2
  5. package/dist/Provider.svelte.d.ts.map +1 -1
  6. package/dist/__tests__/provider-mode-harness.svelte +14 -0
  7. package/dist/__tests__/provider-mode-harness.svelte.d.ts +11 -0
  8. package/dist/__tests__/provider-mode-harness.svelte.d.ts.map +1 -0
  9. package/dist/__tests__/provider-mode-probe.svelte +13 -0
  10. package/dist/__tests__/provider-mode-probe.svelte.d.ts +8 -0
  11. package/dist/__tests__/provider-mode-probe.svelte.d.ts.map +1 -0
  12. package/dist/components/forms/FileUpload.svelte +120 -16
  13. package/dist/components/forms/FileUpload.svelte.d.ts +7 -1
  14. package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -1
  15. package/dist/components/forms/__tests__/FileUpload.native-form.test.js +249 -0
  16. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte +24 -0
  17. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts +10 -0
  18. package/dist/components/forms/__tests__/FileUploadReset.fixture.svelte.d.ts.map +1 -0
  19. package/dist/components/workspace/__tests__/AdminShell.responsive.test.js +12 -1
  20. package/dist/components/workspace/__tests__/AdminShell.test.js +172 -1
  21. package/dist/components/workspace/__tests__/TenantNav.test.js +66 -0
  22. package/dist/components/workspace/__tests__/WorkspaceAccountMenu.test.js +6 -0
  23. package/dist/components/workspace/__tests__/admin-shell-state.test.js +25 -0
  24. package/dist/components/workspace/admin-shell/AdminShell.svelte +108 -26
  25. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +2 -0
  26. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -1
  27. package/dist/components/workspace/admin-shell/TenantNav.svelte +70 -12
  28. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +8 -2
  29. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -1
  30. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte +16 -2
  31. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts +2 -0
  32. package/dist/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.d.ts.map +1 -1
  33. package/dist/components/workspace/admin-shell/state.svelte.d.ts +2 -0
  34. package/dist/components/workspace/admin-shell/state.svelte.d.ts.map +1 -1
  35. package/dist/components/workspace/admin-shell/state.svelte.js +7 -0
  36. package/dist/components/workspace/admin-shell/types.d.ts +18 -1
  37. package/dist/components/workspace/admin-shell/types.d.ts.map +1 -1
  38. package/dist/components/workspace/index.d.ts +1 -1
  39. package/dist/components/workspace/index.d.ts.map +1 -1
  40. package/dist/i18n/strings.forms.d.ts +3 -0
  41. package/dist/i18n/strings.forms.d.ts.map +1 -1
  42. package/dist/i18n/strings.forms.js +3 -0
  43. package/dist/i18n/strings.workspace.d.ts +4 -0
  44. package/dist/i18n/strings.workspace.d.ts.map +1 -1
  45. package/dist/i18n/strings.workspace.js +4 -0
  46. package/dist/provider-mode.test.js +86 -0
  47. package/dist/state/app-state.svelte.d.ts.map +1 -1
  48. package/dist/state/app-state.svelte.js +8 -8
  49. package/package.json +16 -16
@@ -43,7 +43,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
43
43
  import { swipeDismiss } from '@happyvertical/smrt-ui/feedback';
44
44
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
45
45
  import { Button } from '@happyvertical/smrt-ui/ui';
46
- import { onMount, untrack } from 'svelte';
46
+ import { onMount, tick, untrack } from 'svelte';
47
47
  import type { Snippet } from 'svelte';
48
48
  import { M } from '../../../i18n/strings.workspace.js';
49
49
  import ActivityBadge from './ActivityBadge.svelte';
@@ -75,6 +75,8 @@ function buildLayoutStyle(shell: ModuleShellState): string {
75
75
  state?: ShellState;
76
76
  /** Content for the top app bar. */
77
77
  appBar?: Snippet;
78
+ /** Account content kept in the app bar in every left-panel state. */
79
+ account?: Snippet;
78
80
  /** Content for the main app panel. */
79
81
  appPanel?: Snippet;
80
82
  /** Content for the left tenant rail. */
@@ -139,6 +141,11 @@ function buildLayoutStyle(shell: ModuleShellState): string {
139
141
 
140
142
  let {
141
143
  title = 'SMRT',
144
+ homeHref,
145
+ showTenantToggle = true,
146
+ logoSrc,
147
+ logoAlt = '',
148
+ brand,
142
149
  subtitle = '',
143
150
  config,
144
151
  settings,
@@ -146,6 +153,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
146
153
  storageKey = 'smrt-admin-shell',
147
154
  state: providedState,
148
155
  appBar,
156
+ account,
149
157
  appPanel,
150
158
  tenantRail,
151
159
  tenantPanel,
@@ -205,6 +213,24 @@ function buildLayoutStyle(shell: ModuleShellState): string {
205
213
 
206
214
  const viewport = $derived(shell.viewport);
207
215
  const isPhone = $derived(viewport === 'phone');
216
+ const narrow = $derived(shell.viewport === 'phone');
217
+ $effect(() => {
218
+ const panel = sideElements.left;
219
+ if (!narrow || !edgeExpanded('left') || !panel) return;
220
+ const opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;
221
+ let cancelled = false;
222
+ void tick().then(async () => {
223
+ // Inherited visibility also transitions on primitive buttons; wait for
224
+ // the drawer and its controls to be focusable before moving focus.
225
+ const animations = panel.getAnimations?.({ subtree: true }) ?? [];
226
+ await Promise.all(animations
227
+ .filter((animation) => animation.playState !== 'paused' && Number.isFinite(animation.effect?.getComputedTiming().endTime ?? 0))
228
+ .map((animation) => animation.finished.catch(() => {})));
229
+ if (cancelled || !narrow || !edgeExpanded('left') || !panel.isConnected) return;
230
+ panel.querySelector<HTMLElement>('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')?.focus();
231
+ });
232
+ return () => { cancelled = true; queueMicrotask(() => { if (opener?.isConnected) opener.focus(); }); };
233
+ });
208
234
  const showPhoneTop = $derived(isPhone && Boolean(phoneTopBar));
209
235
  const showHeader = $derived(Boolean(header) && !showPhoneTop);
210
236
  const bottomBar = $derived<BottomBarMode>(
@@ -517,6 +543,8 @@ function buildLayoutStyle(shell: ModuleShellState): string {
517
543
  handle.addEventListener('lostpointercapture', onEnd);
518
544
  }
519
545
 
546
+ const footerInHeader = $derived(!account && !!tenantFooter && (!shell.isEdgeShown('left') || !edgeExpanded('left')));
547
+
520
548
  const layoutStyle = $derived(buildLayoutStyle(shell));
521
549
 
522
550
  // Top/bottom edges reserve grid tracks for corner snippets. When a corner
@@ -620,12 +648,13 @@ function buildLayoutStyle(shell: ModuleShellState): string {
620
648
  variant="ghost"
621
649
  size="sm"
622
650
  class="smrt-admin-shell__edge-toggle"
651
+ aria-label={edge === 'left' ? t(M[edgeExpanded(edge) ? 'ui.admin_shell.collapse_panel' : 'ui.admin_shell.expand_panel'], { panel: labelFor(edge) }) : undefined}
623
652
  aria-expanded={edgeExpanded(edge)}
624
653
  aria-controls={`smrt-admin-shell-${edge}-panel`}
625
654
  onclick={() => shell.togglePanel(edge)}
626
655
  >
627
- <span>{labelFor(edge)}</span>
628
- {#if showsHotkeyFor(edge)}
656
+ {#if edge === 'left' && !edgeExpanded(edge)}<span aria-hidden="true">›</span>{:else}<span>{labelFor(edge)}</span>{/if}
657
+ {#if showsHotkeyFor(edge) && (edge !== 'left' || edgeExpanded(edge))}
629
658
  <kbd class="smrt-admin-shell__edge-toggle-kbd">{hotkeyFor(edge)}</kbd>
630
659
  {/if}
631
660
  <ActivityBadge {edge} />
@@ -671,6 +700,29 @@ function buildLayoutStyle(shell: ModuleShellState): string {
671
700
  {/if}
672
701
  {/snippet}
673
702
 
703
+ {#snippet brandContent(compact: boolean)}
704
+ {#if brand}
705
+ {@render brand({ compact })}
706
+ {:else}
707
+ {#if logoSrc}<img class="smrt-admin-shell__logo" src={logoSrc} alt={logoAlt} />{/if}
708
+ {#if compact}
709
+ {#if !logoSrc}<span aria-hidden="true">{title.charAt(0)}</span>{/if}
710
+ {:else}
711
+ <div class="smrt-admin-shell__brand-text"><strong>{title}</strong>{#if subtitle}<span>{subtitle}</span>{/if}</div>
712
+ {/if}
713
+ {/if}
714
+ {/snippet}
715
+
716
+ {#snippet shellBrand(compact = false)}
717
+ {#if homeHref}
718
+ <a class="smrt-admin-shell__brand smrt-admin-shell__brand-link" class:compact href={homeHref} aria-label={title || t(M['ui.admin_shell.home'])}>
719
+ {@render brandContent(compact)}
720
+ </a>
721
+ {:else}
722
+ <div class="smrt-admin-shell__brand" class:compact>{@render brandContent(compact)}</div>
723
+ {/if}
724
+ {/snippet}
725
+
674
726
  <div
675
727
  class="smrt-admin-shell"
676
728
  data-top-state={panelState('top')}
@@ -714,14 +766,19 @@ function buildLayoutStyle(shell: ModuleShellState): string {
714
766
  {#if appBar}
715
767
  {@render appBar()}
716
768
  {:else}
717
- <div class="smrt-admin-shell__brand">
718
- <strong>{title}</strong>
719
- {#if subtitle}
720
- <span>{subtitle}</span>
721
- {/if}
722
- </div>
769
+ {@render shellBrand()}
723
770
  {@render edgeToggle('top')}
724
771
  {/if}
772
+ {#if shell.config.panels.left.initial !== 'hidden' && (!isPhone || shell.phonePresentation('left') !== 'hidden')}
773
+ <div class="smrt-admin-shell__tenant-opener" class:restore-hidden={panelState('left') === 'hidden'}>
774
+ <Button variant="ghost" size="sm" aria-label={t(M['ui.admin_shell.menu'])} aria-expanded={edgeExpanded('left')} aria-controls="smrt-admin-shell-left-panel" onclick={() => shell.setPanelState('left', edgeExpanded('left') ? 'collapsed' : 'expanded')}>{t(M['ui.admin_shell.menu'])}</Button>
775
+ </div>
776
+ {/if}
777
+ {#if account || footerInHeader}
778
+ <div class="smrt-admin-shell__account">
779
+ {#if account}{@render account()}{:else if tenantFooter}{@render tenantFooter()}{/if}
780
+ </div>
781
+ {/if}
725
782
  </div>
726
783
  {#if topRightCorner}
727
784
  <div class="smrt-admin-shell__corner smrt-admin-shell__corner--top-right">
@@ -771,6 +828,8 @@ function buildLayoutStyle(shell: ModuleShellState): string {
771
828
  >
772
829
  {@render resizer('left')}
773
830
  <div class="smrt-admin-shell__rail">
831
+ {#if !edgeExpanded('left') && (homeHref || logoSrc || brand)}{@render shellBrand(true)}{/if}
832
+ {#if showTenantToggle}{@render edgeToggle('left')}{/if}
774
833
  {#if shownOpen('left') || (tenantPanel && keepsContent('left'))}
775
834
  <div
776
835
  class="smrt-admin-shell__tenant-stack"
@@ -781,23 +840,17 @@ function buildLayoutStyle(shell: ModuleShellState): string {
781
840
  {@render tenantPanel()}
782
841
  {:else if tenantRail}
783
842
  {@render tenantRail()}
784
- {:else}
785
- {@render edgeToggle('left')}
786
843
  {/if}
787
844
  </div>
788
- {#if tenantFooter}
845
+ {#if tenantFooter && !footerInHeader}
789
846
  <div class="smrt-admin-shell__tenant-footer">
790
847
  {@render tenantFooter()}
791
848
  </div>
792
849
  {/if}
793
850
  </div>
794
851
  {/if}
795
- {#if !shownOpen('left')}
796
- {#if tenantRail}
797
- {@render tenantRail()}
798
- {:else}
799
- {@render edgeToggle('left')}
800
- {/if}
852
+ {#if !shownOpen('left') && tenantRail}
853
+ {@render tenantRail()}
801
854
  {/if}
802
855
  </div>
803
856
  </aside>
@@ -954,11 +1007,8 @@ function buildLayoutStyle(shell: ModuleShellState): string {
954
1007
  class="smrt-admin-shell__band smrt-admin-shell__band--bottom"
955
1008
  style:--band-column={2}
956
1009
  >
957
- {#if systemBar}
958
- {@render systemBar()}
959
- {:else}
960
- {@render edgeToggle('bottom')}
961
- {/if}
1010
+ {#if systemBar}{@render systemBar()}{/if}
1011
+ {@render edgeToggle('bottom')}
962
1012
  </div>
963
1013
  {#if bottomRightCorner}
964
1014
  <div class="smrt-admin-shell__corner smrt-admin-shell__corner--bottom-right">
@@ -1208,9 +1258,17 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1208
1258
  }
1209
1259
 
1210
1260
  .smrt-admin-shell__brand {
1211
- display: grid;
1261
+ display: flex;
1262
+ align-items: center;
1263
+ gap: var(--smrt-spacing-2);
1212
1264
  min-width: 0;
1265
+ color: inherit;
1266
+ text-decoration: none;
1213
1267
  }
1268
+ .smrt-admin-shell__brand-text { display: grid; min-width: 0; }
1269
+ .smrt-admin-shell__brand.compact { justify-content: center; margin-block-end: var(--smrt-spacing-2); }
1270
+ .smrt-admin-shell__brand-link:focus-visible { outline: 2px solid var(--smrt-color-primary); outline-offset: 2px; }
1271
+ .smrt-admin-shell__logo { inline-size: 2rem; block-size: 2rem; object-fit: contain; flex-shrink: 0; }
1214
1272
 
1215
1273
  .smrt-admin-shell__brand strong,
1216
1274
  .smrt-admin-shell__brand span {
@@ -1290,6 +1348,27 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1290
1348
  overflow: hidden;
1291
1349
  }
1292
1350
 
1351
+ .smrt-admin-shell__account {
1352
+ min-inline-size: 0;
1353
+ max-inline-size: min(20rem, 45vw);
1354
+ flex: 1 1 12rem;
1355
+ }
1356
+ .smrt-admin-shell__account :global(.smrt-workspace-account-menu .dropdown__menu) {
1357
+ top: 100%; bottom: auto; right: 0; left: auto;
1358
+ inline-size: max-content;
1359
+ max-inline-size: calc(100vw - 2 * var(--smrt-spacing-4));
1360
+ }
1361
+
1362
+ .smrt-admin-shell__tenant-opener { display: none; flex-shrink: 0; }
1363
+ .smrt-admin-shell__tenant-opener.restore-hidden { display: block; }
1364
+ .smrt-admin-shell__edge--left[data-state='collapsed'] .smrt-admin-shell__rail { padding-inline: var(--smrt-spacing-2); }
1365
+
1366
+ .smrt-admin-shell__edge--left .smrt-admin-shell__rail {
1367
+ display: flex;
1368
+ flex-direction: column;
1369
+ gap: var(--smrt-spacing-2);
1370
+ }
1371
+
1293
1372
  /* A collapsed `keepMounted` edge keeps its panel in the DOM but hidden;
1294
1373
  the panel classes set `display`, which would otherwise win over the
1295
1374
  `hidden` attribute. */
@@ -1300,12 +1379,12 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1300
1379
  }
1301
1380
 
1302
1381
  .smrt-admin-shell__tenant-stack {
1382
+ flex: 1;
1303
1383
  display: grid;
1304
1384
  grid-template-rows: minmax(0, 1fr) auto;
1305
1385
  gap: var(--smrt-spacing-3);
1306
1386
  min-width: 0;
1307
1387
  min-height: 0;
1308
- block-size: 100%;
1309
1388
  }
1310
1389
 
1311
1390
  .smrt-admin-shell__tenant-content {
@@ -1382,7 +1461,7 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1382
1461
 
1383
1462
  @keyframes smrt-admin-shell-bottom-drawer-in {
1384
1463
  from {
1385
- transform: translateY(100%);
1464
+ clip-path: inset(100% 0 0);
1386
1465
  }
1387
1466
  }
1388
1467
 
@@ -1762,6 +1841,9 @@ function buildLayoutStyle(shell: ModuleShellState): string {
1762
1841
  display: none;
1763
1842
  }
1764
1843
 
1844
+ .smrt-admin-shell__tenant-opener { display: block; }
1845
+ .smrt-admin-shell__edge--left:not([data-state='expanded']),
1846
+ .smrt-admin-shell__edge--right:not([data-state='expanded']) { visibility: hidden; }
1765
1847
  .smrt-admin-shell__edge--left,
1766
1848
  .smrt-admin-shell__edge--right {
1767
1849
  position: absolute;
@@ -7,6 +7,8 @@ interface Props extends AdminShellProps {
7
7
  state?: ShellState;
8
8
  /** Content for the top app bar. */
9
9
  appBar?: Snippet;
10
+ /** Account content kept in the app bar in every left-panel state. */
11
+ account?: Snippet;
10
12
  /** Content for the main app panel. */
11
13
  appPanel?: Snippet;
12
14
  /** Content for the left tenant rail. */
@@ -1 +1 @@
1
- {"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AAStE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EAEf,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,UAAU,KAAM,SAAQ,eAAe;IACrC,sEAAsE;IACtE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IACxD,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAChD;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7C;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5E,uEAAuE;IACvE,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAgxBH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"AdminShell.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/AdminShell.svelte.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AAStE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EAEf,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,UAAU,KAAM,SAAQ,eAAe;IACrC,sEAAsE;IACtE,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mEAAmE;IACnE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC,CAAC;IACxD,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oCAAoC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAChD;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7C;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,QAAQ,EAAE,aAAa,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC,CAAC;IAC5E,uEAAuE;IACvE,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AA+zBH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -2,11 +2,17 @@
2
2
  import { useI18n } from '@happyvertical/smrt-ui/i18n';
3
3
  import type { Component } from 'svelte';
4
4
  import { M } from '../../../i18n/strings.workspace.js';
5
- import type { ShellNavItem } from './types.js';
5
+ import type { ShellNavGroup, ShellNavItem } from './types.js';
6
6
 
7
7
  interface Props {
8
8
  /** Navigation items with href, label, icon, and optional children. */
9
- items: ShellNavItem[];
9
+ items?: ShellNavItem[];
10
+ /** Labelled, collapsible navigation groups, rendered after flat items. */
11
+ groups?: ShellNavGroup[];
12
+ /** Accessible name for this navigation landmark. */
13
+ 'aria-label'?: string;
14
+ /** Target density; omit to inherit the theme density. */
15
+ density?: 'comfortable' | 'touch';
10
16
  /** Current URL to highlight the active navigation link. */
11
17
  currentHref?: string;
12
18
  /** Component used to render icon names as SVG or custom icons. */
@@ -18,7 +24,10 @@ interface Props {
18
24
  }
19
25
 
20
26
  let {
21
- items,
27
+ items = [],
28
+ groups = [],
29
+ 'aria-label': ariaLabel,
30
+ density,
22
31
  currentHref = '',
23
32
  iconComponent: IconComponent,
24
33
  collapsed = false,
@@ -60,12 +69,8 @@ function fallbackIcon(label: string): string {
60
69
  {/if}
61
70
  {/snippet}
62
71
 
63
- <nav
64
- class="smrt-tenant-nav"
65
- class:smrt-tenant-nav--collapsed={collapsed}
66
- aria-label={t(M['ui.tenant_nav.tenant_navigation'])}
67
- >
68
- {#each items as item (item.href)}
72
+ {#snippet navItems(entries: ShellNavItem[])}
73
+ {#each entries as item (item.href)}
69
74
  <div class="smrt-tenant-nav__section">
70
75
  <a
71
76
  href={item.href}
@@ -128,17 +133,70 @@ function fallbackIcon(label: string): string {
128
133
  {/if}
129
134
  </div>
130
135
  {/each}
136
+ {/snippet}
137
+
138
+ <nav
139
+ class="smrt-tenant-nav"
140
+ data-density={density}
141
+ class:smrt-tenant-nav--collapsed={collapsed}
142
+ aria-label={ariaLabel || t(M['ui.tenant_nav.tenant_navigation'])}
143
+ >
144
+
145
+ {@render navItems(items)}
146
+ {#each groups as group}
147
+ <details class="smrt-tenant-nav__group" aria-label={group.heading} open>
148
+ <summary class="smrt-tenant-nav__heading">
149
+ {#if collapsed}
150
+ <span aria-hidden="true">{fallbackIcon(group.heading)}</span>
151
+ <span class="smrt-tenant-nav__sr-only">{group.heading}</span>
152
+ {:else}
153
+ <span>{group.heading}</span>
154
+ {/if}
155
+ </summary>
156
+ <div class="smrt-tenant-nav__group-items">{@render navItems(group.items)}</div>
157
+ </details>
158
+ {/each}
131
159
  </nav>
132
160
 
133
161
  <style>
134
162
  .smrt-tenant-nav,
135
163
  .smrt-tenant-nav__section,
136
- .smrt-tenant-nav__children {
164
+ .smrt-tenant-nav__children,
165
+ .smrt-tenant-nav__group-items {
137
166
  display: grid;
138
167
  gap: var(--smrt-spacing-1);
139
168
  }
140
169
 
170
+ .smrt-tenant-nav__heading {
171
+ box-sizing: border-box;
172
+ min-block-size: var(--smrt-control-target-min, 0px);
173
+ padding: var(--smrt-spacing-2) var(--smrt-spacing-3);
174
+ color: var(--smrt-color-on-surface-variant);
175
+ font-size: var(--smrt-typography-label-large-size);
176
+ font-weight: var(--smrt-typography-weight-semibold);
177
+ border-radius: var(--smrt-radius-medium);
178
+ cursor: pointer;
179
+ }
180
+ .smrt-tenant-nav__heading:focus-visible {
181
+ outline: 2px solid var(--smrt-color-primary);
182
+ outline-offset: 2px;
183
+ }
184
+ .smrt-tenant-nav__group-items { margin-block-start: var(--smrt-spacing-1); }
185
+ .smrt-tenant-nav--collapsed .smrt-tenant-nav__heading {
186
+ display: grid;
187
+ place-items: center;
188
+ list-style: none;
189
+ inline-size: max(2.25rem, var(--smrt-control-target-min, 0px));
190
+ block-size: max(2.25rem, var(--smrt-control-target-min, 0px));
191
+ padding: 0;
192
+ }
193
+ .smrt-tenant-nav--collapsed .smrt-tenant-nav__heading::-webkit-details-marker { display: none; }
194
+
195
+ .smrt-tenant-nav[data-density='touch'] { --smrt-control-target-min: var(--smrt-touch-target-min, 48px); }
196
+ .smrt-tenant-nav[data-density='comfortable'] { --smrt-control-target-min: 0px; }
141
197
  .smrt-tenant-nav a {
198
+ box-sizing: border-box;
199
+ min-block-size: var(--smrt-control-target-min, 0px);
142
200
  display: grid;
143
201
  /* Icon, label, then one auto column per trailing mark (badge, dot). */
144
202
  grid-template-columns: auto minmax(0, 1fr);
@@ -161,8 +219,8 @@ function fallbackIcon(label: string): string {
161
219
  .smrt-tenant-nav--collapsed a {
162
220
  grid-template-columns: minmax(0, 1fr);
163
221
  place-items: center;
164
- inline-size: 2.25rem;
165
- block-size: 2.25rem;
222
+ inline-size: max(2.25rem, var(--smrt-control-target-min, 0px));
223
+ block-size: max(2.25rem, var(--smrt-control-target-min, 0px));
166
224
  padding: 0;
167
225
  }
168
226
 
@@ -1,8 +1,14 @@
1
1
  import type { Component } from 'svelte';
2
- import type { ShellNavItem } from './types.js';
2
+ import type { ShellNavGroup, ShellNavItem } from './types.js';
3
3
  interface Props {
4
4
  /** Navigation items with href, label, icon, and optional children. */
5
- items: ShellNavItem[];
5
+ items?: ShellNavItem[];
6
+ /** Labelled, collapsible navigation groups, rendered after flat items. */
7
+ groups?: ShellNavGroup[];
8
+ /** Accessible name for this navigation landmark. */
9
+ 'aria-label'?: string;
10
+ /** Target density; omit to inherit the theme density. */
11
+ density?: 'comfortable' | 'touch';
6
12
  /** Current URL to highlight the active navigation link. */
7
13
  currentHref?: string;
8
14
  /** Component used to render icon names as SVG or custom icons. */
@@ -1 +1 @@
1
- {"version":3,"file":"TenantNav.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/TenantNav.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,UAAU,KAAK;IACb,sEAAsE;IACtE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAwGD,QAAA,MAAM,SAAS,0BAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"TenantNav.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/TenantNav.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG9D,UAAU,KAAK;IACb,sEAAsE;IACtE,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,aAAa,CAAC,EAAE,SAAS,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AA6HD,QAAA,MAAM,SAAS,0BAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -11,6 +11,8 @@ const TENANT_PREFIX = 'workspace-account:tenant:';
11
11
  export interface Props {
12
12
  /** Username or identifier displayed in the account menu. */
13
13
  userName: string;
14
+ /** Target density; omit to inherit the theme density. */
15
+ density?: 'comfortable' | 'touch';
14
16
  /** Custom display name for the user, falls back to userName. */
15
17
  userLabel?: string;
16
18
  /** URL for the user's avatar image. */
@@ -35,6 +37,7 @@ export interface Props {
35
37
 
36
38
  let {
37
39
  userName,
40
+ density,
38
41
  userLabel = '',
39
42
  avatarUrl,
40
43
  tenantLabel = '',
@@ -100,7 +103,7 @@ function handleSelect(id: string): void {
100
103
  }
101
104
  </script>
102
105
 
103
- <div class="smrt-workspace-account-menu" title={summaryTitle}>
106
+ <div data-density={density} class="smrt-workspace-account-menu" title={summaryTitle}>
104
107
  <Dropdown
105
108
  {items}
106
109
  {placement}
@@ -129,6 +132,17 @@ function handleSelect(id: string): void {
129
132
  width: 100%;
130
133
  }
131
134
 
135
+ .smrt-workspace-account-menu[data-density='touch'] {
136
+ --smrt-control-target-min: var(--smrt-touch-target-min, 48px);
137
+ }
138
+ .smrt-workspace-account-menu[data-density='comfortable'] {
139
+ --smrt-control-target-min: 0px;
140
+ }
141
+ .smrt-workspace-account-menu :global(.dropdown__item) {
142
+ min-block-size: var(--smrt-control-target-min, 0px);
143
+ box-sizing: border-box;
144
+ }
145
+
132
146
  .smrt-workspace-account-menu :global(.dropdown) {
133
147
  display: flex;
134
148
  width: 100%;
@@ -141,7 +155,7 @@ function handleSelect(id: string): void {
141
155
  gap: var(--smrt-spacing-2);
142
156
  width: 100%;
143
157
  min-width: 0;
144
- min-height: 2.75rem;
158
+ min-height: max(2.75rem, var(--smrt-control-target-min, 0px));
145
159
  padding: var(--smrt-spacing-2);
146
160
  border-radius: var(--smrt-radius-large);
147
161
  text-align: start;
@@ -3,6 +3,8 @@ import type { WorkspaceAccountTenant } from './types.js';
3
3
  export interface Props {
4
4
  /** Username or identifier displayed in the account menu. */
5
5
  userName: string;
6
+ /** Target density; omit to inherit the theme density. */
7
+ density?: 'comfortable' | 'touch';
6
8
  /** Custom display name for the user, falls back to userName. */
7
9
  userLabel?: string;
8
10
  /** URL for the user's avatar image. */
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceAccountMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,wBAAwB,CAAC;AAI1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,WAAW,KAAK;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAqGD,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"WorkspaceAccountMenu.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/WorkspaceAccountMenu.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAY,MAAM,wBAAwB,CAAC;AAI1E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGzD,MAAM,WAAW,KAAK;IACpB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;IAClC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAsGD,QAAA,MAAM,oBAAoB,2CAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
@@ -79,6 +79,8 @@ export declare class ShellState {
79
79
  setHotkeysEnabled(enabled: boolean): void;
80
80
  setHotkey(edge: PanelEdge, code: string | null): void;
81
81
  setPanel(edge: PanelEdge, state: VisiblePanelState): void;
82
+ /** Set and persist a runtime panel preference, including hidden. */
83
+ setPanelState(edge: PanelEdge, state: PanelState): void;
82
84
  togglePanel(edge: PanelEdge): void;
83
85
  expandPanel(edge: PanelEdge): void;
84
86
  collapsePanel(edge: PanelEdge): void;
@@ -1 +1 @@
1
- {"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/state.svelte.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.svelte.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/state.svelte.ts"],"names":[],"mappings":"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"}
@@ -207,6 +207,13 @@ export class ShellState {
207
207
  });
208
208
  }
209
209
  setPanel(edge, state) {
210
+ this.setPanelState(edge, state);
211
+ }
212
+ /** Set and persist a runtime panel preference, including hidden. */
213
+ setPanelState(edge, state) {
214
+ if (!PANEL_EDGES.includes(edge) ||
215
+ !['hidden', 'collapsed', 'expanded'].includes(state))
216
+ return;
210
217
  untrack(() => {
211
218
  if (this.config.panels[edge].initial === 'hidden') {
212
219
  this.panels[edge] = 'hidden';
@@ -92,7 +92,7 @@ export type ShellPanelDefaults = Partial<Record<PanelEdge, Partial<ShellPanelCon
92
92
  export interface ShellSettingsDelta {
93
93
  hotkeysEnabled?: boolean;
94
94
  keymap?: Partial<Record<PanelEdge, ShellHotkeyBinding | null>>;
95
- panels?: Partial<Record<PanelEdge, VisiblePanelState>>;
95
+ panels?: Partial<Record<PanelEdge, PanelState>>;
96
96
  /** Resized expanded widths in px; `null` resets to the configured size. */
97
97
  sizes?: Partial<Record<PanelEdge, number | null>>;
98
98
  activeFocusToolId?: string | null;
@@ -109,6 +109,11 @@ export interface ShellFocusToolSubject {
109
109
  id: string;
110
110
  label?: string;
111
111
  }
112
+ /** Labelled, collapsible group of tenant navigation links. */
113
+ export interface ShellNavGroup {
114
+ heading: string;
115
+ items: ShellNavItem[];
116
+ }
112
117
  export interface ShellNavItem {
113
118
  href: string;
114
119
  label: string;
@@ -218,6 +223,18 @@ export interface AdminShellPhoneOptions {
218
223
  }
219
224
  export interface AdminShellProps {
220
225
  title?: string;
226
+ /** Optional destination for the default brand and compact rail mark. */
227
+ homeHref?: string;
228
+ /** Show the built-in tenant edge collapse/expand control. */
229
+ showTenantToggle?: boolean;
230
+ /** Optional brand logo URL. */
231
+ logoSrc?: string;
232
+ /** Alternative text for the logo (decorative by default). */
233
+ logoAlt?: string;
234
+ /** Custom brand content, receiving whether it is in the compact rail. */
235
+ brand?: Snippet<[{
236
+ compact: boolean;
237
+ }]>;
221
238
  subtitle?: string;
222
239
  config?: ShellPanelDefaults;
223
240
  settings?: ShellSettingsDelta;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/types.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ export { default as SystemStatusChips } from './admin-shell/SystemStatusChips.sv
31
31
  export { clampPanelSize, DEFAULT_SHELL_KEYMAP, DEFAULT_SHELL_PANEL_RESIZE, LocalStorageShellSettingsAdapter, mergeShellSettingsDelta, panelPersists, pruneShellSettingsDelta, resolveHotkey, resolveInitialPanelState, resolvePanelResize, resolveShellConfig, stripUnpersistedSettings, } from './admin-shell/settings.js';
32
32
  export { ADMIN_SHELL_DESKTOP_QUERY, ADMIN_SHELL_PHONE_QUERY, createShellState, detectShellViewport, ShellState, type ShellStateOptions, } from './admin-shell/state.svelte.js';
33
33
  export { default as TenantNav } from './admin-shell/TenantNav.svelte';
34
- export type { ActivityStatus, AdminShellPhoneOptions, AdminShellProps, PanelEdge, PanelPresentation, PanelState, PhonePanelPresentation, ResolvedShellConfig, ShellActivity, ShellActivityBadge, ShellActivityEvent, ShellActivityFilter, ShellFocusTool, ShellFocusToolSubject, ShellHotkeyBinding, ShellNavItem, ShellPanelConfig, ShellPanelDefaults, ShellPanelPersist, ShellPanelResize, ShellScope, ShellSettingsAdapter, ShellSettingsDelta, ShellStateSnapshot, ShellStatusChip, ShellStatusTone, ShellSystemItem, ShellSystemPanel, ShellViewport, VisiblePanelState, WorkspaceAccountTenant, } from './admin-shell/types.js';
34
+ export type { ActivityStatus, AdminShellPhoneOptions, AdminShellProps, PanelEdge, PanelPresentation, PanelState, PhonePanelPresentation, ResolvedShellConfig, ShellActivity, ShellActivityBadge, ShellActivityEvent, ShellActivityFilter, ShellFocusTool, ShellFocusToolSubject, ShellHotkeyBinding, ShellNavGroup, ShellNavItem, ShellPanelConfig, ShellPanelDefaults, ShellPanelPersist, ShellPanelResize, ShellScope, ShellSettingsAdapter, ShellSettingsDelta, ShellStateSnapshot, ShellStatusChip, ShellStatusTone, ShellSystemItem, ShellSystemPanel, ShellViewport, VisiblePanelState, WorkspaceAccountTenant, } from './admin-shell/types.js';
35
35
  export { ADMIN_SHELL_REGION_IDS, EDGE_SCOPES, PANEL_EDGES, SCOPE_EDGES, } from './admin-shell/types.js';
36
36
  export { default as WorkspaceAccountMenu } from './admin-shell/WorkspaceAccountMenu.svelte';
37
37
  export { type NavSection, type NavTreeFromManifestOptions, navTreeFromManifest as tenantNavFromManifest, pluralizeClassName, type SmrtManifestEntryLike, type SmrtManifestLike, } from './manifest-nav.js';