@happyvertical/smrt-svelte 0.37.8 → 0.37.10

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 (90) hide show
  1. package/AGENTS.md +22 -86
  2. package/README.md +14 -10
  3. package/dist/components/workspace/MIGRATION.md +55 -0
  4. package/dist/components/workspace/README.md +22 -25
  5. package/dist/components/workspace/__tests__/AdminShell.test.js +55 -0
  6. package/dist/components/workspace/__tests__/admin-shell-hotkeys.test.js +34 -0
  7. package/dist/components/workspace/__tests__/admin-shell-settings.test.js +25 -0
  8. package/dist/components/workspace/__tests__/admin-shell-state.test.js +110 -0
  9. package/dist/components/workspace/__tests__/index.test.js +15 -24
  10. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +2 -1
  11. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +1 -1
  12. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +1 -1
  13. package/dist/components/workspace/admin-shell/ActivityBadge.svelte +25 -0
  14. package/dist/components/workspace/admin-shell/ActivityBadge.svelte.d.ts +9 -0
  15. package/dist/components/workspace/admin-shell/ActivityBadge.svelte.d.ts.map +1 -0
  16. package/dist/components/workspace/admin-shell/ActivityItem.svelte +85 -0
  17. package/dist/components/workspace/admin-shell/ActivityItem.svelte.d.ts +8 -0
  18. package/dist/components/workspace/admin-shell/ActivityItem.svelte.d.ts.map +1 -0
  19. package/dist/components/workspace/admin-shell/ActivityList.svelte +41 -0
  20. package/dist/components/workspace/admin-shell/ActivityList.svelte.d.ts +10 -0
  21. package/dist/components/workspace/admin-shell/ActivityList.svelte.d.ts.map +1 -0
  22. package/dist/components/workspace/admin-shell/ActivityToasts.svelte +140 -0
  23. package/dist/components/workspace/admin-shell/ActivityToasts.svelte.d.ts +16 -0
  24. package/dist/components/workspace/admin-shell/ActivityToasts.svelte.d.ts.map +1 -0
  25. package/dist/components/workspace/admin-shell/AdminShell.svelte +691 -0
  26. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts +24 -0
  27. package/dist/components/workspace/admin-shell/AdminShell.svelte.d.ts.map +1 -0
  28. package/dist/components/workspace/admin-shell/AppScopePanel.svelte +94 -0
  29. package/dist/components/workspace/admin-shell/AppScopePanel.svelte.d.ts +14 -0
  30. package/dist/components/workspace/admin-shell/AppScopePanel.svelte.d.ts.map +1 -0
  31. package/dist/components/workspace/admin-shell/HotkeyInput.svelte +74 -0
  32. package/dist/components/workspace/admin-shell/HotkeyInput.svelte.d.ts +11 -0
  33. package/dist/components/workspace/admin-shell/HotkeyInput.svelte.d.ts.map +1 -0
  34. package/dist/components/workspace/admin-shell/ShellCorner.svelte +25 -0
  35. package/dist/components/workspace/admin-shell/ShellCorner.svelte.d.ts +9 -0
  36. package/dist/components/workspace/admin-shell/ShellCorner.svelte.d.ts.map +1 -0
  37. package/dist/components/workspace/admin-shell/ShellDockTool.svelte +19 -0
  38. package/dist/components/workspace/admin-shell/ShellDockTool.svelte.d.ts +7 -0
  39. package/dist/components/workspace/admin-shell/ShellDockTool.svelte.d.ts.map +1 -0
  40. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte +146 -0
  41. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts +4 -0
  42. package/dist/components/workspace/admin-shell/ShellSettingsPanel.svelte.d.ts.map +1 -0
  43. package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte +81 -0
  44. package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte.d.ts +7 -0
  45. package/dist/components/workspace/admin-shell/ShortcutsOverlay.svelte.d.ts.map +1 -0
  46. package/dist/components/workspace/admin-shell/SystemScopePanel.svelte +118 -0
  47. package/dist/components/workspace/admin-shell/SystemScopePanel.svelte.d.ts +9 -0
  48. package/dist/components/workspace/admin-shell/SystemScopePanel.svelte.d.ts.map +1 -0
  49. package/dist/components/workspace/admin-shell/SystemStatusChips.svelte +71 -0
  50. package/dist/components/workspace/admin-shell/SystemStatusChips.svelte.d.ts +8 -0
  51. package/dist/components/workspace/admin-shell/SystemStatusChips.svelte.d.ts.map +1 -0
  52. package/dist/components/workspace/admin-shell/TenantNav.svelte +101 -0
  53. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts +10 -0
  54. package/dist/components/workspace/admin-shell/TenantNav.svelte.d.ts.map +1 -0
  55. package/dist/components/workspace/admin-shell/context.d.ts +6 -0
  56. package/dist/components/workspace/admin-shell/context.d.ts.map +1 -0
  57. package/dist/components/workspace/admin-shell/context.js +16 -0
  58. package/dist/components/workspace/admin-shell/hotkeys.d.ts +14 -0
  59. package/dist/components/workspace/admin-shell/hotkeys.d.ts.map +1 -0
  60. package/dist/components/workspace/admin-shell/hotkeys.js +62 -0
  61. package/dist/components/workspace/admin-shell/settings.d.ts +14 -0
  62. package/dist/components/workspace/admin-shell/settings.d.ts.map +1 -0
  63. package/dist/components/workspace/admin-shell/settings.js +139 -0
  64. package/dist/components/workspace/admin-shell/state.svelte.d.ts +47 -0
  65. package/dist/components/workspace/admin-shell/state.svelte.d.ts.map +1 -0
  66. package/dist/components/workspace/admin-shell/state.svelte.js +252 -0
  67. package/dist/components/workspace/admin-shell/types.d.ts +137 -0
  68. package/dist/components/workspace/admin-shell/types.d.ts.map +1 -0
  69. package/dist/components/workspace/admin-shell/types.js +13 -0
  70. package/dist/components/workspace/index.d.ts +25 -11
  71. package/dist/components/workspace/index.d.ts.map +1 -1
  72. package/dist/components/workspace/index.js +24 -10
  73. package/dist/i18n/strings.workspace.d.ts +30 -0
  74. package/dist/i18n/strings.workspace.d.ts.map +1 -1
  75. package/dist/i18n/strings.workspace.js +31 -0
  76. package/dist/internal/logger.d.ts +13 -6
  77. package/dist/internal/logger.d.ts.map +1 -1
  78. package/dist/internal/logger.js +33 -8
  79. package/dist/internal/logger.test.js +54 -0
  80. package/dist/web/__tests__/harness.svelte +25 -0
  81. package/dist/web/__tests__/harness.svelte.d.ts +15 -0
  82. package/dist/web/__tests__/harness.svelte.d.ts.map +1 -0
  83. package/dist/web/__tests__/live-collection.svelte.test.js +184 -0
  84. package/dist/web/index.d.ts +13 -0
  85. package/dist/web/index.d.ts.map +1 -0
  86. package/dist/web/index.js +12 -0
  87. package/dist/web/live-collection.svelte.d.ts +132 -0
  88. package/dist/web/live-collection.svelte.d.ts.map +1 -0
  89. package/dist/web/live-collection.svelte.js +173 -0
  90. package/package.json +13 -4
@@ -0,0 +1,252 @@
1
+ import { LocalStorageShellSettingsAdapter, mergeShellSettingsDelta, resolveInitialPanelState, resolveShellConfig, } from './settings.js';
2
+ import { PANEL_EDGES, SCOPE_EDGES } from './types.js';
3
+ export class ShellState {
4
+ config;
5
+ adapter;
6
+ settings = $state({});
7
+ panels = $state({
8
+ top: 'collapsed',
9
+ left: 'collapsed',
10
+ right: 'collapsed',
11
+ bottom: 'collapsed',
12
+ });
13
+ focusTools = $state([]);
14
+ activeFocusToolId = $state(null);
15
+ activities = $state([]);
16
+ activityListeners = new Set();
17
+ constructor(options = {}) {
18
+ this.config = resolveShellConfig(options.config);
19
+ this.adapter =
20
+ options.settingsAdapter ??
21
+ (options.storageKey
22
+ ? new LocalStorageShellSettingsAdapter(options.storageKey)
23
+ : null);
24
+ this.applySettings(options.settings ?? {}, { persist: false });
25
+ }
26
+ async hydrate() {
27
+ if (!this.adapter)
28
+ return;
29
+ const delta = await this.adapter.read();
30
+ if (delta)
31
+ this.applySettings(delta, { persist: false });
32
+ }
33
+ snapshot() {
34
+ return {
35
+ panels: { ...this.panels },
36
+ activeFocusToolId: this.activeFocusToolId,
37
+ settings: {
38
+ ...this.settings,
39
+ keymap: this.settings.keymap ? { ...this.settings.keymap } : undefined,
40
+ panels: this.settings.panels ? { ...this.settings.panels } : undefined,
41
+ },
42
+ };
43
+ }
44
+ applySettings(delta, options = {}) {
45
+ this.settings = mergeShellSettingsDelta(this.settings, delta);
46
+ for (const edge of PANEL_EDGES) {
47
+ this.panels[edge] = resolveInitialPanelState(edge, this.config.panels[edge], this.settings);
48
+ }
49
+ this.activeFocusToolId =
50
+ this.settings.activeFocusToolId ?? this.activeFocusToolId;
51
+ if (options.persist !== false)
52
+ void this.persistSettings();
53
+ }
54
+ setHotkeysEnabled(enabled) {
55
+ this.applySettings({ hotkeysEnabled: enabled });
56
+ }
57
+ setHotkey(edge, code) {
58
+ this.applySettings({
59
+ keymap: {
60
+ [edge]: code ? { code } : null,
61
+ },
62
+ });
63
+ }
64
+ setPanel(edge, state) {
65
+ if (this.config.panels[edge].initial === 'hidden') {
66
+ this.panels[edge] = 'hidden';
67
+ return;
68
+ }
69
+ if (state === 'expanded')
70
+ this.closeExclusivePeers(edge);
71
+ this.panels[edge] = state;
72
+ this.settings = mergeShellSettingsDelta(this.settings, {
73
+ panels: { [edge]: state },
74
+ });
75
+ void this.persistSettings();
76
+ }
77
+ togglePanel(edge) {
78
+ if (this.panels[edge] === 'hidden')
79
+ return;
80
+ this.setPanel(edge, this.panels[edge] === 'expanded' ? 'collapsed' : 'expanded');
81
+ }
82
+ expandPanel(edge) {
83
+ this.setPanel(edge, 'expanded');
84
+ }
85
+ collapsePanel(edge) {
86
+ this.setPanel(edge, 'collapsed');
87
+ }
88
+ closeTopmostExpanded() {
89
+ for (const edge of [...PANEL_EDGES].reverse()) {
90
+ if (this.panels[edge] === 'expanded') {
91
+ this.collapsePanel(edge);
92
+ return true;
93
+ }
94
+ }
95
+ return false;
96
+ }
97
+ registerFocusTool(tool) {
98
+ this.focusTools = [
99
+ ...this.focusTools.filter((existing) => existing.id !== tool.id),
100
+ tool,
101
+ ].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
102
+ if (!this.activeFocusToolId)
103
+ this.activeFocusToolId = tool.id;
104
+ return () => this.unregisterFocusTool(tool.id);
105
+ }
106
+ unregisterFocusTool(id) {
107
+ this.focusTools = this.focusTools.filter((tool) => tool.id !== id);
108
+ if (this.activeFocusToolId === id) {
109
+ this.activeFocusToolId = this.focusTools[0]?.id ?? null;
110
+ }
111
+ }
112
+ openFocusTool(id) {
113
+ if (!this.focusTools.some((tool) => tool.id === id))
114
+ return;
115
+ this.activeFocusToolId = id;
116
+ this.settings = mergeShellSettingsDelta(this.settings, {
117
+ activeFocusToolId: id,
118
+ });
119
+ this.expandPanel('right');
120
+ void this.persistSettings();
121
+ }
122
+ upsertActivity(activity) {
123
+ const now = new Date().toISOString();
124
+ const normalized = {
125
+ ...activity,
126
+ edge: activity.edge ?? this.homeEdgeForScope(activity.scope),
127
+ createdAt: activity.createdAt ?? now,
128
+ updatedAt: activity.updatedAt ?? now,
129
+ };
130
+ const previous = this.activities.find((item) => item.id === activity.id);
131
+ this.activities = [
132
+ ...this.activities.filter((item) => item.id !== activity.id),
133
+ normalized,
134
+ ];
135
+ this.emitActivity({
136
+ type: previous && previous.status !== normalized.status
137
+ ? 'transition'
138
+ : 'upsert',
139
+ activity: normalized,
140
+ previous,
141
+ });
142
+ }
143
+ updateActivity(id, patch) {
144
+ const current = this.activities.find((activity) => activity.id === id);
145
+ if (!current)
146
+ return;
147
+ this.upsertActivity({
148
+ ...current,
149
+ ...patch,
150
+ id,
151
+ updatedAt: new Date().toISOString(),
152
+ });
153
+ }
154
+ removeActivity(id) {
155
+ const current = this.activities.find((activity) => activity.id === id);
156
+ if (!current)
157
+ return;
158
+ this.activities = this.activities.filter((activity) => activity.id !== id);
159
+ this.emitActivity({ type: 'remove', activity: current });
160
+ }
161
+ watchActivities(listener) {
162
+ this.activityListeners.add(listener);
163
+ return () => this.activityListeners.delete(listener);
164
+ }
165
+ listActivities(filter = {}) {
166
+ return this.activities
167
+ .map((activity) => ({
168
+ ...activity,
169
+ edge: activity.edge ?? this.homeEdgeForScope(activity.scope),
170
+ }))
171
+ .filter((activity) => activityMatchesFilter(activity, filter));
172
+ }
173
+ activityBadge(edge) {
174
+ const activities = this.listActivities({ edge }).filter((activity) => isActiveStatus(activity.status));
175
+ const determinate = activities
176
+ .map((activity) => activity.progress)
177
+ .filter((progress) => typeof progress === 'number');
178
+ return {
179
+ count: activities.length,
180
+ running: activities.filter((activity) => activity.status === 'running')
181
+ .length,
182
+ hasFailed: this.listActivities({ edge }).some((activity) => activity.status === 'failed'),
183
+ progress: determinate.length === 0
184
+ ? null
185
+ : determinate.reduce((total, progress) => total + progress, 0) /
186
+ determinate.length,
187
+ };
188
+ }
189
+ homeEdgeForScope(scope) {
190
+ const preferred = SCOPE_EDGES[scope];
191
+ if (this.panels[preferred] !== 'hidden')
192
+ return preferred;
193
+ if (this.panels.bottom !== 'hidden')
194
+ return 'bottom';
195
+ // Both the scope's edge and System are hidden — fall back to any visible
196
+ // edge so the activity still surfaces somewhere rather than homing to a
197
+ // hidden edge where its badge never renders.
198
+ const visible = PANEL_EDGES.find((edge) => this.panels[edge] !== 'hidden');
199
+ return visible ?? preferred;
200
+ }
201
+ closeExclusivePeers(edge) {
202
+ const group = this.config.panels[edge].exclusiveGroup;
203
+ if (!group)
204
+ return;
205
+ for (const peer of PANEL_EDGES) {
206
+ if (peer !== edge &&
207
+ this.config.panels[peer].exclusiveGroup === group &&
208
+ this.panels[peer] === 'expanded') {
209
+ this.panels[peer] = 'collapsed';
210
+ // Persist the peer collapse too, otherwise its stale 'expanded' delta
211
+ // survives and both panels reopen on reload, defeating exclusivity.
212
+ this.settings = mergeShellSettingsDelta(this.settings, {
213
+ panels: { [peer]: 'collapsed' },
214
+ });
215
+ }
216
+ }
217
+ }
218
+ async persistSettings() {
219
+ await this.adapter?.write(this.settings);
220
+ }
221
+ emitActivity(event) {
222
+ for (const listener of this.activityListeners)
223
+ listener(event);
224
+ }
225
+ }
226
+ export function createShellState(options = {}) {
227
+ return new ShellState(options);
228
+ }
229
+ function activityMatchesFilter(activity, filter) {
230
+ if (filter.edge && activity.edge !== filter.edge)
231
+ return false;
232
+ if (filter.scope && activity.scope !== filter.scope)
233
+ return false;
234
+ if (filter.kind && !matchesOne(activity.kind, filter.kind))
235
+ return false;
236
+ if (filter.status && !matchesOne(activity.status, filter.status)) {
237
+ return false;
238
+ }
239
+ if (filter.subject) {
240
+ return (activity.subject?.type === filter.subject.type &&
241
+ activity.subject.id === filter.subject.id);
242
+ }
243
+ return true;
244
+ }
245
+ function matchesOne(value, expected) {
246
+ return Array.isArray(expected)
247
+ ? expected.includes(value)
248
+ : value === expected;
249
+ }
250
+ function isActiveStatus(status) {
251
+ return status === 'queued' || status === 'running';
252
+ }
@@ -0,0 +1,137 @@
1
+ import type { Component, Snippet } from 'svelte';
2
+ export type PanelEdge = 'top' | 'left' | 'right' | 'bottom';
3
+ export type ShellScope = 'app' | 'tenant' | 'focus' | 'system';
4
+ export type PanelState = 'hidden' | 'collapsed' | 'expanded';
5
+ export type VisiblePanelState = Exclude<PanelState, 'hidden'>;
6
+ export type PanelPresentation = 'push' | 'overlay';
7
+ export type ActivityStatus = 'queued' | 'running' | 'completed' | 'failed' | 'canceled';
8
+ export interface ShellHotkeyBinding {
9
+ code: string;
10
+ altKey?: boolean;
11
+ ctrlKey?: boolean;
12
+ metaKey?: boolean;
13
+ shiftKey?: boolean;
14
+ }
15
+ export interface ShellPanelConfig {
16
+ edge: PanelEdge;
17
+ scope: ShellScope;
18
+ label: string;
19
+ initial: PanelState;
20
+ presentation: PanelPresentation;
21
+ hotkey: ShellHotkeyBinding | null;
22
+ collapsedSize: string;
23
+ expandedSize: string;
24
+ exclusiveGroup?: string;
25
+ }
26
+ export type ShellPanelDefaults = Partial<Record<PanelEdge, Partial<ShellPanelConfig> | false>>;
27
+ export interface ShellSettingsDelta {
28
+ hotkeysEnabled?: boolean;
29
+ keymap?: Partial<Record<PanelEdge, ShellHotkeyBinding | null>>;
30
+ panels?: Partial<Record<PanelEdge, VisiblePanelState>>;
31
+ activeFocusToolId?: string | null;
32
+ }
33
+ export interface ShellSettingsAdapter {
34
+ read(): ShellSettingsDelta | null | Promise<ShellSettingsDelta | null>;
35
+ write(delta: ShellSettingsDelta): void | Promise<void>;
36
+ }
37
+ export interface ResolvedShellConfig {
38
+ panels: Record<PanelEdge, ShellPanelConfig>;
39
+ }
40
+ export interface ShellFocusToolSubject {
41
+ type: string;
42
+ id: string;
43
+ label?: string;
44
+ }
45
+ export interface ShellNavItem {
46
+ href: string;
47
+ label: string;
48
+ icon?: string;
49
+ description?: string;
50
+ badge?: number | string | null;
51
+ children?: ShellNavItem[];
52
+ }
53
+ export interface ShellFocusTool {
54
+ id: string;
55
+ label: string;
56
+ description?: string;
57
+ order?: number;
58
+ badge?: number | string | null;
59
+ component?: Component | null;
60
+ render?: Snippet<[{
61
+ tool: ShellFocusTool;
62
+ }]>;
63
+ scopeId?: string;
64
+ subject?: ShellFocusToolSubject;
65
+ activityKinds?: string[];
66
+ }
67
+ export interface ShellActivity {
68
+ id: string;
69
+ label: string;
70
+ kind: string;
71
+ scope: ShellScope;
72
+ status: ActivityStatus;
73
+ subject?: ShellFocusToolSubject;
74
+ edge?: PanelEdge;
75
+ progress?: number | null;
76
+ detailHref?: string;
77
+ message?: string;
78
+ createdAt?: string;
79
+ updatedAt?: string;
80
+ cancel?: () => void | Promise<void>;
81
+ }
82
+ export interface ShellActivityFilter {
83
+ edge?: PanelEdge;
84
+ scope?: ShellScope;
85
+ kind?: string | string[];
86
+ status?: ActivityStatus | ActivityStatus[];
87
+ subject?: ShellFocusToolSubject;
88
+ }
89
+ export interface ShellActivityBadge {
90
+ count: number;
91
+ running: number;
92
+ hasFailed: boolean;
93
+ progress: number | null;
94
+ }
95
+ export interface ShellActivityEvent {
96
+ type: 'upsert' | 'transition' | 'remove';
97
+ activity: ShellActivity;
98
+ previous?: ShellActivity;
99
+ }
100
+ export type ShellStatusTone = 'neutral' | 'success' | 'warning' | 'error' | 'info';
101
+ export interface ShellStatusChip {
102
+ id: string;
103
+ label: string;
104
+ value?: string | number;
105
+ tone?: ShellStatusTone;
106
+ href?: string;
107
+ }
108
+ export interface ShellSystemItem {
109
+ id: string;
110
+ label: string;
111
+ status: string;
112
+ detail?: string;
113
+ href?: string;
114
+ updatedAt?: string;
115
+ }
116
+ export interface ShellSystemPanel {
117
+ id: string;
118
+ label: string;
119
+ items: ShellSystemItem[];
120
+ }
121
+ export interface ShellStateSnapshot {
122
+ panels: Record<PanelEdge, PanelState>;
123
+ activeFocusToolId: string | null;
124
+ settings: ShellSettingsDelta;
125
+ }
126
+ export interface AdminShellProps {
127
+ title?: string;
128
+ subtitle?: string;
129
+ config?: ShellPanelDefaults;
130
+ settings?: ShellSettingsDelta;
131
+ settingsAdapter?: ShellSettingsAdapter;
132
+ storageKey?: string;
133
+ }
134
+ export declare const PANEL_EDGES: PanelEdge[];
135
+ export declare const EDGE_SCOPES: Record<PanelEdge, ShellScope>;
136
+ export declare const SCOPE_EDGES: Record<ShellScope, PanelEdge>;
137
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/admin-shell/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export const PANEL_EDGES = ['top', 'left', 'right', 'bottom'];
2
+ export const EDGE_SCOPES = {
3
+ top: 'app',
4
+ left: 'tenant',
5
+ right: 'focus',
6
+ bottom: 'system',
7
+ };
8
+ export const SCOPE_EDGES = {
9
+ app: 'top',
10
+ tenant: 'left',
11
+ focus: 'right',
12
+ system: 'bottom',
13
+ };
@@ -1,16 +1,30 @@
1
1
  /**
2
2
  * @happyvertical/smrt-svelte/workspace
3
3
  *
4
- * Workspace shell primitives for admin UIs. See packages/smrt-svelte/CLAUDE.md
5
- * for layering principles. Implementations land via #1227, #1228, #1229.
4
+ * Canonical AdminShell family for SMRT admin UIs. The first-generation
5
+ * WorkspaceShell / RoleShell / NavTree / ToolsDock source files remain in this
6
+ * package as migration references, but the public workspace surface now points
7
+ * at the four-edge AdminShell contract.
6
8
  */
7
- export { default as Breadcrumbs } from './Breadcrumbs.svelte';
8
- export { type NavSection, type NavTreeFromManifestOptions, navTreeFromManifest, pluralizeClassName, type SmrtManifestEntryLike, type SmrtManifestLike, } from './manifest-nav.js';
9
- export { default as NavTree } from './NavTree.svelte';
10
- export { default as RoleShell } from './RoleShell.svelte';
11
- export { type DefineToolsDockOptions, defineToolsDock, TOOLS_DOCK_KEY, type ToolsDockInstance, } from './tools-dock/define-tools-dock.svelte.js';
12
- export { default as ToolsDock } from './tools-dock/ToolsDock.svelte';
13
- export { tryUseToolsDock, useToolsDock } from './tools-dock/use-tools-dock.js';
14
- export type { AvailableTool, BreadcrumbItem, NavItem, RoleConfig, ToolDef, ToolsDockApi, ToolsDockContext, ToolsDockEvents, } from './types.js';
15
- export { default as WorkspaceShell } from './WorkspaceShell.svelte';
9
+ export { default as ActivityBadge } from './admin-shell/ActivityBadge.svelte';
10
+ export { default as ActivityItem } from './admin-shell/ActivityItem.svelte';
11
+ export { default as ActivityList } from './admin-shell/ActivityList.svelte';
12
+ export { default as ActivityToasts } from './admin-shell/ActivityToasts.svelte';
13
+ export { default as AdminShell } from './admin-shell/AdminShell.svelte';
14
+ export { default as AppScopePanel } from './admin-shell/AppScopePanel.svelte';
15
+ export { ADMIN_SHELL_CONTEXT, setAdminShell, tryUseAdminShell, useAdminShell, } from './admin-shell/context.js';
16
+ export { default as HotkeyInput } from './admin-shell/HotkeyInput.svelte';
17
+ export { formatHotkeyBinding, hotkeyMatchesEvent, isEditableTarget, isShortcutsEvent, type ShellHotkeyAction, shellActionFromKeyboardEvent, shouldIgnoreShellHotkey, } from './admin-shell/hotkeys.js';
18
+ export { default as ShellCorner } from './admin-shell/ShellCorner.svelte';
19
+ export { default as ShellDockTool } from './admin-shell/ShellDockTool.svelte';
20
+ export { default as ShellSettingsPanel } from './admin-shell/ShellSettingsPanel.svelte';
21
+ export { default as ShortcutsOverlay } from './admin-shell/ShortcutsOverlay.svelte';
22
+ export { default as SystemScopePanel } from './admin-shell/SystemScopePanel.svelte';
23
+ export { default as SystemStatusChips } from './admin-shell/SystemStatusChips.svelte';
24
+ export { DEFAULT_SHELL_KEYMAP, LocalStorageShellSettingsAdapter, mergeShellSettingsDelta, pruneShellSettingsDelta, resolveHotkey, resolveInitialPanelState, resolveShellConfig, } from './admin-shell/settings.js';
25
+ export { createShellState, ShellState } from './admin-shell/state.svelte.js';
26
+ export { default as TenantNav } from './admin-shell/TenantNav.svelte';
27
+ export type { ActivityStatus, AdminShellProps, PanelEdge, PanelPresentation, PanelState, ResolvedShellConfig, ShellActivity, ShellActivityBadge, ShellActivityEvent, ShellActivityFilter, ShellFocusTool, ShellFocusToolSubject, ShellHotkeyBinding, ShellNavItem, ShellPanelConfig, ShellPanelDefaults, ShellScope, ShellSettingsAdapter, ShellSettingsDelta, ShellStateSnapshot, ShellStatusChip, ShellStatusTone, ShellSystemItem, ShellSystemPanel, VisiblePanelState, } from './admin-shell/types.js';
28
+ export { EDGE_SCOPES, PANEL_EDGES, SCOPE_EDGES } from './admin-shell/types.js';
29
+ export { type NavSection, type NavTreeFromManifestOptions, navTreeFromManifest as tenantNavFromManifest, pluralizeClassName, type SmrtManifestEntryLike, type SmrtManifestLike, } from './manifest-nav.js';
16
30
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EACL,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,KAAK,sBAAsB,EAC3B,eAAe,EACf,cAAc,EACd,KAAK,iBAAiB,GACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,cAAc,EACd,OAAO,EACP,UAAU,EACV,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/workspace/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EACL,oBAAoB,EACpB,gCAAgC,EAChC,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE/E,OAAO,EACL,KAAK,UAAU,EACf,KAAK,0BAA0B,EAC/B,mBAAmB,IAAI,qBAAqB,EAC5C,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -1,14 +1,28 @@
1
1
  /**
2
2
  * @happyvertical/smrt-svelte/workspace
3
3
  *
4
- * Workspace shell primitives for admin UIs. See packages/smrt-svelte/CLAUDE.md
5
- * for layering principles. Implementations land via #1227, #1228, #1229.
4
+ * Canonical AdminShell family for SMRT admin UIs. The first-generation
5
+ * WorkspaceShell / RoleShell / NavTree / ToolsDock source files remain in this
6
+ * package as migration references, but the public workspace surface now points
7
+ * at the four-edge AdminShell contract.
6
8
  */
7
- export { default as Breadcrumbs } from './Breadcrumbs.svelte';
8
- export { navTreeFromManifest, pluralizeClassName, } from './manifest-nav.js';
9
- export { default as NavTree } from './NavTree.svelte';
10
- export { default as RoleShell } from './RoleShell.svelte';
11
- export { defineToolsDock, TOOLS_DOCK_KEY, } from './tools-dock/define-tools-dock.svelte.js';
12
- export { default as ToolsDock } from './tools-dock/ToolsDock.svelte';
13
- export { tryUseToolsDock, useToolsDock } from './tools-dock/use-tools-dock.js';
14
- export { default as WorkspaceShell } from './WorkspaceShell.svelte';
9
+ export { default as ActivityBadge } from './admin-shell/ActivityBadge.svelte';
10
+ export { default as ActivityItem } from './admin-shell/ActivityItem.svelte';
11
+ export { default as ActivityList } from './admin-shell/ActivityList.svelte';
12
+ export { default as ActivityToasts } from './admin-shell/ActivityToasts.svelte';
13
+ export { default as AdminShell } from './admin-shell/AdminShell.svelte';
14
+ export { default as AppScopePanel } from './admin-shell/AppScopePanel.svelte';
15
+ export { ADMIN_SHELL_CONTEXT, setAdminShell, tryUseAdminShell, useAdminShell, } from './admin-shell/context.js';
16
+ export { default as HotkeyInput } from './admin-shell/HotkeyInput.svelte';
17
+ export { formatHotkeyBinding, hotkeyMatchesEvent, isEditableTarget, isShortcutsEvent, shellActionFromKeyboardEvent, shouldIgnoreShellHotkey, } from './admin-shell/hotkeys.js';
18
+ export { default as ShellCorner } from './admin-shell/ShellCorner.svelte';
19
+ export { default as ShellDockTool } from './admin-shell/ShellDockTool.svelte';
20
+ export { default as ShellSettingsPanel } from './admin-shell/ShellSettingsPanel.svelte';
21
+ export { default as ShortcutsOverlay } from './admin-shell/ShortcutsOverlay.svelte';
22
+ export { default as SystemScopePanel } from './admin-shell/SystemScopePanel.svelte';
23
+ export { default as SystemStatusChips } from './admin-shell/SystemStatusChips.svelte';
24
+ export { DEFAULT_SHELL_KEYMAP, LocalStorageShellSettingsAdapter, mergeShellSettingsDelta, pruneShellSettingsDelta, resolveHotkey, resolveInitialPanelState, resolveShellConfig, } from './admin-shell/settings.js';
25
+ export { createShellState, ShellState } from './admin-shell/state.svelte.js';
26
+ export { default as TenantNav } from './admin-shell/TenantNav.svelte';
27
+ export { EDGE_SCOPES, PANEL_EDGES, SCOPE_EDGES } from './admin-shell/types.js';
28
+ export { navTreeFromManifest as tenantNavFromManifest, pluralizeClassName, } from './manifest-nav.js';
@@ -26,5 +26,35 @@ export declare const M: {
26
26
  readonly 'ui.tools_dock.no_tools_context': "ui.tools_dock.no_tools_context";
27
27
  readonly 'ui.tools_dock.select_tool': "ui.tools_dock.select_tool";
28
28
  readonly 'ui.tools_dock.workspace_tools': "ui.tools_dock.workspace_tools";
29
+ readonly 'ui.admin_shell.no_focus_tools': "ui.admin_shell.no_focus_tools";
30
+ readonly 'ui.admin_shell.no_app_panel': "ui.admin_shell.no_app_panel";
31
+ readonly 'ui.admin_shell.no_system_panel': "ui.admin_shell.no_system_panel";
32
+ readonly 'ui.admin_shell.shell_shortcuts': "ui.admin_shell.shell_shortcuts";
33
+ readonly 'ui.admin_shell.close_shortcuts': "ui.admin_shell.close_shortcuts";
34
+ readonly 'ui.admin_shell.shortcuts': "ui.admin_shell.shortcuts";
35
+ readonly 'ui.admin_shell.close': "ui.admin_shell.close";
36
+ readonly 'ui.activity_toasts.dismiss': "ui.activity_toasts.dismiss";
37
+ readonly 'ui.activity_toasts.dismiss_action': "ui.activity_toasts.dismiss_action";
38
+ readonly 'ui.activity_item.view': "ui.activity_item.view";
39
+ readonly 'ui.activity_item.cancel': "ui.activity_item.cancel";
40
+ readonly 'ui.activity_list.empty': "ui.activity_list.empty";
41
+ readonly 'ui.app_scope_panel.app_scope': "ui.app_scope_panel.app_scope";
42
+ readonly 'ui.hotkey_input.capture_title': "ui.hotkey_input.capture_title";
43
+ readonly 'ui.hotkey_input.conflicts_with': "ui.hotkey_input.conflicts_with";
44
+ readonly 'ui.shell_settings_panel.shell_settings': "ui.shell_settings_panel.shell_settings";
45
+ readonly 'ui.shell_settings_panel.description': "ui.shell_settings_panel.description";
46
+ readonly 'ui.shell_settings_panel.disable_hotkeys': "ui.shell_settings_panel.disable_hotkeys";
47
+ readonly 'ui.shell_settings_panel.enable_hotkeys': "ui.shell_settings_panel.enable_hotkeys";
48
+ readonly 'ui.shell_settings_panel.collapse': "ui.shell_settings_panel.collapse";
49
+ readonly 'ui.shell_settings_panel.expand': "ui.shell_settings_panel.expand";
50
+ readonly 'ui.shortcuts_overlay.open_shortcuts': "ui.shortcuts_overlay.open_shortcuts";
51
+ readonly 'ui.shortcuts_overlay.close_drawer': "ui.shortcuts_overlay.close_drawer";
52
+ readonly 'ui.shortcuts_overlay.close': "ui.shortcuts_overlay.close";
53
+ readonly 'ui.shortcuts_overlay.escape': "ui.shortcuts_overlay.escape";
54
+ readonly 'ui.system_scope_panel.system_scope': "ui.system_scope_panel.system_scope";
55
+ readonly 'ui.system_scope_panel.activities': "ui.system_scope_panel.activities";
56
+ readonly 'ui.system_scope_panel.no_running_work': "ui.system_scope_panel.no_running_work";
57
+ readonly 'ui.system_status_chips.system_status': "ui.system_status_chips.system_status";
58
+ readonly 'ui.tenant_nav.tenant_navigation': "ui.tenant_nav.tenant_navigation";
29
59
  };
30
60
  //# sourceMappingURL=strings.workspace.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strings.workspace.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;CAuBZ,CAAC"}
1
+ {"version":3,"file":"strings.workspace.d.ts","sourceRoot":"","sources":["../../src/i18n/strings.workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDZ,CAAC"}
@@ -30,4 +30,35 @@ export const M = defineMessages({
30
30
  'ui.tools_dock.no_tools_context': 'No tools are available for the current context.',
31
31
  'ui.tools_dock.select_tool': 'Select a tool to begin.',
32
32
  'ui.tools_dock.workspace_tools': 'Workspace tools',
33
+ // components/workspace/admin-shell/*
34
+ 'ui.admin_shell.no_focus_tools': 'No focus tools',
35
+ 'ui.admin_shell.no_app_panel': 'No app panel',
36
+ 'ui.admin_shell.no_system_panel': 'No system panel',
37
+ 'ui.admin_shell.shell_shortcuts': 'Shell shortcuts',
38
+ 'ui.admin_shell.close_shortcuts': 'Close shortcuts',
39
+ 'ui.admin_shell.shortcuts': 'Shortcuts',
40
+ 'ui.admin_shell.close': 'Close',
41
+ 'ui.activity_toasts.dismiss': 'Dismiss activity notification',
42
+ 'ui.activity_toasts.dismiss_action': 'Dismiss',
43
+ 'ui.activity_item.view': 'View',
44
+ 'ui.activity_item.cancel': 'Cancel',
45
+ 'ui.activity_list.empty': 'No activities',
46
+ 'ui.app_scope_panel.app_scope': 'App scope',
47
+ 'ui.hotkey_input.capture_title': 'Press a key to capture it',
48
+ 'ui.hotkey_input.conflicts_with': 'Conflicts with',
49
+ 'ui.shell_settings_panel.shell_settings': 'Shell settings',
50
+ 'ui.shell_settings_panel.description': 'Panel preferences and physical-key shortcuts.',
51
+ 'ui.shell_settings_panel.disable_hotkeys': 'Disable hotkeys',
52
+ 'ui.shell_settings_panel.enable_hotkeys': 'Enable hotkeys',
53
+ 'ui.shell_settings_panel.collapse': 'Collapse',
54
+ 'ui.shell_settings_panel.expand': 'Expand',
55
+ 'ui.shortcuts_overlay.open_shortcuts': 'Open shortcuts',
56
+ 'ui.shortcuts_overlay.close_drawer': 'Close drawer',
57
+ 'ui.shortcuts_overlay.close': 'Close',
58
+ 'ui.shortcuts_overlay.escape': 'Esc',
59
+ 'ui.system_scope_panel.system_scope': 'System scope',
60
+ 'ui.system_scope_panel.activities': 'Activities',
61
+ 'ui.system_scope_panel.no_running_work': 'No running work',
62
+ 'ui.system_status_chips.system_status': 'System status',
63
+ 'ui.tenant_nav.tenant_navigation': 'Tenant navigation',
33
64
  });
@@ -1,12 +1,19 @@
1
1
  /**
2
2
  * Shared package logger for `@happyvertical/smrt-svelte`.
3
3
  *
4
- * Browser-safe: the `@happyvertical/logger` console adapter pulls no Node
5
- * built-ins and its `@sentry/node` integration is an optional peer that is
6
- * never imported here. Centralising the instance keeps voice/AI error reporting
7
- * consistent across the form components (mic permission denials, STT init
8
- * failures) instead of swallowing them in empty `catch` blocks or scattering
9
- * raw `console.*` calls.
4
+ * This module is browser-reachable (Provider + the form components import it),
5
+ * so it must never touch Node globals at module scope. `createLogger()` reads
6
+ * `HAVE_LOGGER_LEVEL` from `process.env`, and `process` does not exist in
7
+ * browsers — calling it during module init threw
8
+ * `ReferenceError: process is not defined` under `vite dev` and killed
9
+ * client-side hydration for every consuming app. The logger is therefore
10
+ * created lazily on first use, and the env-config path is only consulted when
11
+ * a usable `process.env` actually exists; browsers get the plain console
12
+ * logger at the same level.
13
+ *
14
+ * Centralising the instance keeps voice/AI error reporting consistent across
15
+ * the form components (mic permission denials, STT init failures) instead of
16
+ * swallowing them in empty `catch` blocks or scattering raw `console.*` calls.
10
17
  */
11
18
  import { type Logger } from '@happyvertical/logger';
12
19
  export declare const logger: Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/internal/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAElE,eAAO,MAAM,MAAM,EAAE,MAAwC,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/internal/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,uBAAuB,CAAC;AAmB/B,eAAO,MAAM,MAAM,EAAE,MAKpB,CAAC"}