sh3-core 0.10.4 → 0.11.2
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/dist/Shell.svelte +12 -31
- package/dist/__test__/fixtures.js +1 -0
- package/dist/__test__/reset.js +6 -0
- package/dist/actions/CommandPalette.svelte +68 -0
- package/dist/actions/CommandPalette.svelte.d.ts +11 -0
- package/dist/actions/ContextMenu.svelte +97 -0
- package/dist/actions/ContextMenu.svelte.d.ts +9 -0
- package/dist/actions/bindings-store.d.ts +8 -0
- package/dist/actions/bindings-store.js +27 -0
- package/dist/actions/bindings-store.test.d.ts +1 -0
- package/dist/actions/bindings-store.test.js +25 -0
- package/dist/actions/bindings.d.ts +4 -0
- package/dist/actions/bindings.js +17 -0
- package/dist/actions/bindings.test.d.ts +1 -0
- package/dist/actions/bindings.test.js +30 -0
- package/dist/actions/contextMenuModel.d.ts +16 -0
- package/dist/actions/contextMenuModel.js +71 -0
- package/dist/actions/contextMenuModel.test.d.ts +1 -0
- package/dist/actions/contextMenuModel.test.js +44 -0
- package/dist/actions/dispatcher.svelte.d.ts +34 -0
- package/dist/actions/dispatcher.svelte.js +117 -0
- package/dist/actions/dispatcher.test.d.ts +1 -0
- package/dist/actions/dispatcher.test.js +155 -0
- package/dist/actions/listeners.d.ts +11 -0
- package/dist/actions/listeners.js +180 -0
- package/dist/actions/listeners.test.d.ts +1 -0
- package/dist/actions/listeners.test.js +149 -0
- package/dist/actions/palette-scorer.d.ts +11 -0
- package/dist/actions/palette-scorer.js +49 -0
- package/dist/actions/palette-scorer.test.d.ts +1 -0
- package/dist/actions/palette-scorer.test.js +40 -0
- package/dist/actions/paletteModel.d.ts +4 -0
- package/dist/actions/paletteModel.js +40 -0
- package/dist/actions/paletteModel.test.d.ts +1 -0
- package/dist/actions/paletteModel.test.js +33 -0
- package/dist/actions/registry.d.ts +10 -0
- package/dist/actions/registry.js +36 -0
- package/dist/actions/registry.test.d.ts +1 -0
- package/dist/actions/registry.test.js +49 -0
- package/dist/actions/selection.svelte.d.ts +8 -0
- package/dist/actions/selection.svelte.js +44 -0
- package/dist/actions/selection.test.d.ts +1 -0
- package/dist/actions/selection.test.js +51 -0
- package/dist/actions/shardContext.test.d.ts +1 -0
- package/dist/actions/shardContext.test.js +41 -0
- package/dist/actions/shellActions.test.d.ts +1 -0
- package/dist/actions/shellActions.test.js +22 -0
- package/dist/actions/shortcuts.d.ts +5 -0
- package/dist/actions/shortcuts.js +87 -0
- package/dist/actions/shortcuts.test.d.ts +1 -0
- package/dist/actions/shortcuts.test.js +49 -0
- package/dist/actions/state.svelte.d.ts +16 -0
- package/dist/actions/state.svelte.js +76 -0
- package/dist/actions/state.test.d.ts +1 -0
- package/dist/actions/state.test.js +40 -0
- package/dist/actions/syncMountedViewIds.test.d.ts +1 -0
- package/dist/actions/syncMountedViewIds.test.js +97 -0
- package/dist/actions/types.d.ts +56 -0
- package/dist/actions/types.js +7 -0
- package/dist/api.d.ts +2 -2
- package/dist/api.js +1 -1
- package/dist/apps/lifecycle.js +13 -3
- package/dist/createShell.js +4 -1
- package/dist/host.js +6 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/layout/LayoutRenderer.browser.test.js +78 -0
- package/dist/layout/LayoutRenderer.svelte +1 -0
- package/dist/layout/__screenshots__/LayoutRenderer.browser.test.ts/LayoutRenderer-browser---E-6-fixed-slots-freezes-the-handle-adjacent-to-a-fixed-pane--dblclick-does-not-collapse-1.png +0 -0
- package/dist/layout/__screenshots__/LayoutRenderer.browser.test.ts/LayoutRenderer-browser---E-6-fixed-slots-hides-the-collapse-widget-on-a-fixed-pane-1.png +0 -0
- package/dist/layout/inspection.d.ts +11 -1
- package/dist/layout/inspection.js +13 -1
- package/dist/layout/ops-locate.test.d.ts +1 -0
- package/dist/layout/ops-locate.test.js +103 -0
- package/dist/layout/ops.d.ts +8 -0
- package/dist/layout/ops.js +27 -0
- package/dist/layout/slotHostPool.svelte.js +24 -0
- package/dist/layout/slotHostPool.test.js +14 -0
- package/dist/layout/types.d.ts +15 -0
- package/dist/overlays/FloatFrame.svelte +23 -11
- package/dist/overlays/ModalFrame.svelte +9 -1
- package/dist/overlays/ModalFrame.svelte.d.ts +1 -0
- package/dist/overlays/__test__/DummyFrame.svelte +6 -0
- package/dist/overlays/__test__/DummyFrame.svelte.d.ts +6 -0
- package/dist/overlays/float.d.ts +6 -0
- package/dist/overlays/float.js +24 -9
- package/dist/overlays/float.test.js +175 -0
- package/dist/overlays/floatDismiss.d.ts +8 -0
- package/dist/overlays/floatDismiss.js +68 -0
- package/dist/overlays/modal.js +5 -1
- package/dist/overlays/modal.test.d.ts +1 -0
- package/dist/overlays/modal.test.js +55 -0
- package/dist/overlays/popup.d.ts +2 -0
- package/dist/overlays/popup.js +24 -4
- package/dist/overlays/popup.test.d.ts +1 -0
- package/dist/overlays/popup.test.js +95 -0
- package/dist/overlays/types.d.ts +17 -1
- package/dist/primitives/Button.svelte +144 -0
- package/dist/primitives/Button.svelte.d.ts +18 -0
- package/dist/primitives/ResizableSplitter.svelte +38 -3
- package/dist/primitives/ResizableSplitter.svelte.d.ts +7 -0
- package/dist/primitives/icon-context.d.ts +15 -0
- package/dist/primitives/icon-context.js +29 -0
- package/dist/sh3core-shard/sh3coreShard.svelte.js +50 -0
- package/dist/shards/activate.svelte.js +14 -0
- package/dist/shards/types.d.ts +19 -0
- package/dist/shards/types.js +5 -4
- package/dist/shell-shard/locateSlot.test.d.ts +1 -0
- package/dist/shell-shard/locateSlot.test.js +101 -0
- package/dist/shell-shard/shellShard.svelte.d.ts +7 -0
- package/dist/shell-shard/shellShard.svelte.js +34 -1
- package/dist/shellRuntime.svelte.d.ts +19 -0
- package/dist/shellRuntime.svelte.js +30 -0
- package/dist/tokens.css +11 -1
- package/dist/verbs/types.d.ts +9 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/apps/terminal/manifest.d.ts +0 -8
- package/dist/apps/terminal/manifest.js +0 -14
- package/dist/apps/terminal/terminal-app.d.ts +0 -7
- package/dist/apps/terminal/terminal-app.js +0 -14
package/dist/shards/types.js
CHANGED
|
@@ -12,9 +12,10 @@
|
|
|
12
12
|
* - A ViewFactory knows how to mount a view into a raw HTMLElement and
|
|
13
13
|
* return a handle the framework uses to unmount / notify of resizes.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
15
|
+
* Action contributions (commands, hotkeys, context menus) shipped in v0.11.0
|
|
16
|
+
* via `ctx.actions` (see `../actions/types.ts`). Still deferred to later
|
|
17
|
+
* phases: bus scoping, toolbar registration, modal provider contributions,
|
|
18
|
+
* background services, lazy activation events. They'll slot into `ShardContext`
|
|
19
|
+
* as new `register*` methods without disturbing the phase-4 shape.
|
|
19
20
|
*/
|
|
20
21
|
export { PERMISSION_KEYS_MINT, ScopeEscalationError, ConsentDeniedError } from '../keys/types';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { resetFramework } from '../__test__/reset';
|
|
3
|
+
import { makeApp, makeAppManifest, makeTabEntry, makeTabsNode, makeTree } from '../__test__/fixtures';
|
|
4
|
+
import { registerApp } from '../apps/registry.svelte';
|
|
5
|
+
import { launchApp } from '../apps/lifecycle';
|
|
6
|
+
import { floatManager, bindFloatStore } from '../overlays/float';
|
|
7
|
+
import { layoutStore } from '../layout/store.svelte';
|
|
8
|
+
import { makeShellApiForTest } from './shellShard.svelte';
|
|
9
|
+
describe('ShellApi.locateSlot', () => {
|
|
10
|
+
beforeEach(resetFramework);
|
|
11
|
+
it('returns docked for a slot in the docked tree', async () => {
|
|
12
|
+
registerApp(makeApp({
|
|
13
|
+
manifest: makeAppManifest({ id: 'test-app-docked' }),
|
|
14
|
+
initialLayout: [
|
|
15
|
+
{
|
|
16
|
+
name: 'default',
|
|
17
|
+
tree: makeTree(makeTabsNode([makeTabEntry({ slotId: 'dock-x' })])),
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
}));
|
|
21
|
+
await launchApp('test-app-docked');
|
|
22
|
+
const shell = makeShellApiForTest();
|
|
23
|
+
expect(shell.locateSlot('dock-x')).toEqual({ kind: 'docked' });
|
|
24
|
+
});
|
|
25
|
+
it('returns float for a slot in a float', async () => {
|
|
26
|
+
var _a;
|
|
27
|
+
registerApp(makeApp({
|
|
28
|
+
manifest: makeAppManifest({ id: 'test-app-float' }),
|
|
29
|
+
initialLayout: [
|
|
30
|
+
{
|
|
31
|
+
name: 'default',
|
|
32
|
+
tree: makeTree(makeTabsNode([makeTabEntry({ slotId: 'stay-docked' })])),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
}));
|
|
36
|
+
await launchApp('test-app-float');
|
|
37
|
+
// Shell.svelte normally binds the float manager to the active tree's
|
|
38
|
+
// floats array during boot. In tests we bind it manually so
|
|
39
|
+
// floatManager.open() writes into the tree that locateSlot walks.
|
|
40
|
+
bindFloatStore(layoutStore.floats, () => ({ w: 1024, h: 768 }));
|
|
41
|
+
const floatId = floatManager.open('v', { title: 'Float X' });
|
|
42
|
+
const openedFloat = layoutStore.floats.find((f) => f.id === floatId);
|
|
43
|
+
expect(openedFloat).toBeDefined();
|
|
44
|
+
const tabs = openedFloat.content.type === 'tabs' ? openedFloat.content : null;
|
|
45
|
+
const floatSlotId = (_a = tabs === null || tabs === void 0 ? void 0 : tabs.tabs[0]) === null || _a === void 0 ? void 0 : _a.slotId;
|
|
46
|
+
expect(floatSlotId).toBeTruthy();
|
|
47
|
+
const shell = makeShellApiForTest();
|
|
48
|
+
expect(shell.locateSlot(floatSlotId)).toEqual({ kind: 'float', floatId });
|
|
49
|
+
});
|
|
50
|
+
it('returns null for an absent slot', async () => {
|
|
51
|
+
registerApp(makeApp({
|
|
52
|
+
manifest: makeAppManifest({ id: 'test-app-absent' }),
|
|
53
|
+
initialLayout: [
|
|
54
|
+
{
|
|
55
|
+
name: 'default',
|
|
56
|
+
tree: makeTree(makeTabsNode([makeTabEntry({ slotId: 'existing' })])),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
}));
|
|
60
|
+
await launchApp('test-app-absent');
|
|
61
|
+
const shell = makeShellApiForTest();
|
|
62
|
+
expect(shell.locateSlot('nonexistent-slot')).toBeNull();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
import { popoutView, inspectActiveLayout } from '../layout/inspection';
|
|
66
|
+
describe('ShellApi.locateSlot — round-trip', () => {
|
|
67
|
+
beforeEach(resetFramework);
|
|
68
|
+
it('tracks the docked → popout → float transition', async () => {
|
|
69
|
+
registerApp(makeApp({
|
|
70
|
+
manifest: makeAppManifest({ id: 'test-app-rt' }),
|
|
71
|
+
initialLayout: [
|
|
72
|
+
{
|
|
73
|
+
name: 'default',
|
|
74
|
+
tree: makeTree(makeTabsNode([
|
|
75
|
+
makeTabEntry({ slotId: 'rt-1', viewId: 'rt:one' }),
|
|
76
|
+
makeTabEntry({ slotId: 'rt-anchor', viewId: 'rt:anchor' }),
|
|
77
|
+
])),
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
}));
|
|
81
|
+
await launchApp('test-app-rt');
|
|
82
|
+
// Shell.svelte would bind this at boot; in tests we do it ourselves.
|
|
83
|
+
bindFloatStore(layoutStore.floats, () => ({ w: 1024, h: 768 }));
|
|
84
|
+
const shell = makeShellApiForTest();
|
|
85
|
+
// Starts docked.
|
|
86
|
+
expect(shell.locateSlot('rt-1')).toEqual({ kind: 'docked' });
|
|
87
|
+
// Popout removes the original docked tab and opens a float with a
|
|
88
|
+
// fresh slotId wrapped around the same view.
|
|
89
|
+
const floatId = popoutView('rt-1');
|
|
90
|
+
expect(floatId).not.toBeNull();
|
|
91
|
+
expect(shell.locateSlot('rt-1')).toBeNull();
|
|
92
|
+
// The float-era slotId resolves to the new float.
|
|
93
|
+
const { root } = inspectActiveLayout();
|
|
94
|
+
const fl = root.floats.find((f) => f.id === floatId);
|
|
95
|
+
const floatSlot = fl.content.type === 'tabs' ? fl.content.tabs[0].slotId : '';
|
|
96
|
+
expect(floatSlot).toBeTruthy();
|
|
97
|
+
expect(shell.locateSlot(floatSlot)).toEqual({ kind: 'float', floatId });
|
|
98
|
+
// Anchor tab is untouched and still docked.
|
|
99
|
+
expect(shell.locateSlot('rt-anchor')).toEqual({ kind: 'docked' });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
import type { Shard } from '../api';
|
|
2
|
+
import type { ShellApi } from './registry';
|
|
3
|
+
/**
|
|
4
|
+
* Test-only ShellApi constructor. Bypasses the admin gate and uses a
|
|
5
|
+
* stub ShardContext. Only methods that do not consult `ctx` are
|
|
6
|
+
* guaranteed to work — `locateSlot`, `listFloats`, `listApps`, etc.
|
|
7
|
+
*/
|
|
8
|
+
export declare function makeShellApiForTest(): ShellApi;
|
|
2
9
|
export declare const shellShard: Shard;
|
|
@@ -19,7 +19,7 @@ import { registerV1Verbs } from './verbs';
|
|
|
19
19
|
import { listRegisteredApps, getActiveApp } from '../apps/registry.svelte';
|
|
20
20
|
import { launchApp } from '../apps/lifecycle';
|
|
21
21
|
import { registeredShards } from '../shards/activate.svelte';
|
|
22
|
-
import { inspectActiveLayout, focusView, closeTab, popoutView, dockFloat, dockIntoActiveLayout } from '../layout/inspection';
|
|
22
|
+
import { inspectActiveLayout, focusView, closeTab, popoutView, dockFloat, dockIntoActiveLayout, locateSlot as locateSlotInActiveLayout } from '../layout/inspection';
|
|
23
23
|
import { floatManager } from '../overlays/float';
|
|
24
24
|
import { listStandaloneViews } from '../shards/activate.svelte';
|
|
25
25
|
import { getUser, isAdmin } from '../auth/index';
|
|
@@ -121,6 +121,15 @@ function makeShellApi(_ctx) {
|
|
|
121
121
|
return { ok: false, error: err instanceof Error ? err.message : String(err) };
|
|
122
122
|
}
|
|
123
123
|
},
|
|
124
|
+
// → layout/inspection: locateSlot(slotId) returns TreeRootRef | null
|
|
125
|
+
locateSlot(slotId) {
|
|
126
|
+
try {
|
|
127
|
+
return locateSlotInActiveLayout(slotId);
|
|
128
|
+
}
|
|
129
|
+
catch (_a) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
124
133
|
// → overlays/float: floatManager.list() returns FloatEntry[]
|
|
125
134
|
listFloats() {
|
|
126
135
|
return floatManager.list().map((f) => {
|
|
@@ -156,6 +165,14 @@ function makeShellApi(_ctx) {
|
|
|
156
165
|
},
|
|
157
166
|
};
|
|
158
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Test-only ShellApi constructor. Bypasses the admin gate and uses a
|
|
170
|
+
* stub ShardContext. Only methods that do not consult `ctx` are
|
|
171
|
+
* guaranteed to work — `locateSlot`, `listFloats`, `listApps`, etc.
|
|
172
|
+
*/
|
|
173
|
+
export function makeShellApiForTest() {
|
|
174
|
+
return makeShellApi({});
|
|
175
|
+
}
|
|
159
176
|
export const shellShard = {
|
|
160
177
|
manifest,
|
|
161
178
|
activate(ctx) {
|
|
@@ -165,6 +182,22 @@ export const shellShard = {
|
|
|
165
182
|
}
|
|
166
183
|
registerV1Verbs(ctx);
|
|
167
184
|
const shell = makeShellApi(ctx);
|
|
185
|
+
// The AZERTY `²` key (top-left on FR keyboards, below Escape) opens the
|
|
186
|
+
// terminal view — focusing it if already mounted, floating it otherwise.
|
|
187
|
+
// Migrated from Shell.svelte's inline keydown handler as proof-of-concept
|
|
188
|
+
// for the Actions framework (Task 23 / DF1). Registered here because this
|
|
189
|
+
// shard owns the terminal view and is already admin-gated.
|
|
190
|
+
ctx.actions.register({
|
|
191
|
+
id: 'shell.terminal.toggle',
|
|
192
|
+
label: 'Open Terminal',
|
|
193
|
+
scope: ['home', 'app'],
|
|
194
|
+
defaultShortcut: '²',
|
|
195
|
+
allowInInputs: false,
|
|
196
|
+
run() {
|
|
197
|
+
if (!focusView('shell:terminal'))
|
|
198
|
+
floatManager.open('shell:terminal', { title: 'Shell' });
|
|
199
|
+
},
|
|
200
|
+
});
|
|
168
201
|
const factory = {
|
|
169
202
|
mount(container, _context) {
|
|
170
203
|
var _a;
|
|
@@ -6,6 +6,7 @@ import { type ToastManager } from './overlays/toast';
|
|
|
6
6
|
import { type FloatManager } from './overlays/float';
|
|
7
7
|
import { type PresetManager } from './overlays/presets';
|
|
8
8
|
import type { ConflictsApi } from './conflicts/api';
|
|
9
|
+
import { type OpenContextMenuOpts, type OpenPaletteOpts } from './actions/listeners';
|
|
9
10
|
/**
|
|
10
11
|
* The process-wide shell singleton exposed to shards and the shell's own
|
|
11
12
|
* internal code. Provides state zone creation and overlay managers.
|
|
@@ -31,6 +32,24 @@ export interface Shell {
|
|
|
31
32
|
presets: PresetManager;
|
|
32
33
|
/** Conflict manager view. Shell-owned modal for conflict arbitration. */
|
|
33
34
|
conflicts: ConflictsApi;
|
|
35
|
+
/** Actions facade — rebind keys, query bindings, open menus/palette. */
|
|
36
|
+
actions: ShellActionsApi;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* API for managing action bindings and triggering menus/palette
|
|
40
|
+
* programmatically (e.g. from a future settings UI shard).
|
|
41
|
+
*/
|
|
42
|
+
export interface ShellActionsApi {
|
|
43
|
+
/** Persist a custom shortcut for an action and refresh live state if the app is active. */
|
|
44
|
+
rebind(appId: string, actionId: string, shortcut: string | null): Promise<void>;
|
|
45
|
+
/** Remove a custom shortcut override and refresh live state if the app is active. */
|
|
46
|
+
resetBinding(appId: string, actionId: string): Promise<void>;
|
|
47
|
+
/** Return all non-null user bindings for an app as a plain string map. */
|
|
48
|
+
bindingsFor(appId: string): Promise<Record<string, string>>;
|
|
49
|
+
/** Open the context menu at the given screen coordinates. */
|
|
50
|
+
openContextMenu(opts: OpenContextMenuOpts): void;
|
|
51
|
+
/** Open the command palette, optionally pre-filled. */
|
|
52
|
+
openPalette(opts?: OpenPaletteOpts): void;
|
|
34
53
|
}
|
|
35
54
|
/** The process-wide shell instance. Framework-internal code uses this directly; shards receive a scoped view via `ShardContext`. */
|
|
36
55
|
export declare const shell: Shell;
|
|
@@ -21,6 +21,35 @@ import { toastManager } from './overlays/toast';
|
|
|
21
21
|
import { floatManager } from './overlays/float';
|
|
22
22
|
import { presetManager } from './overlays/presets';
|
|
23
23
|
import { conflictsApi } from './conflicts/shell-api';
|
|
24
|
+
import { loadUserBindings, saveUserBinding } from './actions/bindings-store';
|
|
25
|
+
import { openContextMenu as listenersOpenContextMenu, openPalette as listenersOpenPalette, } from './actions/listeners';
|
|
26
|
+
import { setUserBindings, getLiveDispatcherState } from './actions/state.svelte';
|
|
27
|
+
const shellActions = {
|
|
28
|
+
async rebind(appId, actionId, shortcut) {
|
|
29
|
+
await saveUserBinding(appId, actionId, shortcut);
|
|
30
|
+
const current = getLiveDispatcherState();
|
|
31
|
+
if (current.activeAppId === appId) {
|
|
32
|
+
setUserBindings(await loadUserBindings(appId));
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
async resetBinding(appId, actionId) {
|
|
36
|
+
await saveUserBinding(appId, actionId, undefined);
|
|
37
|
+
const current = getLiveDispatcherState();
|
|
38
|
+
if (current.activeAppId === appId) {
|
|
39
|
+
setUserBindings(await loadUserBindings(appId));
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
async bindingsFor(appId) {
|
|
43
|
+
const raw = await loadUserBindings(appId);
|
|
44
|
+
const out = {};
|
|
45
|
+
for (const [id, v] of Object.entries(raw))
|
|
46
|
+
if (v !== null)
|
|
47
|
+
out[id] = v;
|
|
48
|
+
return out;
|
|
49
|
+
},
|
|
50
|
+
openContextMenu: listenersOpenContextMenu,
|
|
51
|
+
openPalette: listenersOpenPalette,
|
|
52
|
+
};
|
|
24
53
|
/** The process-wide shell instance. Framework-internal code uses this directly; shards receive a scoped view via `ShardContext`. */
|
|
25
54
|
export const shell = {
|
|
26
55
|
state: createStateZones,
|
|
@@ -30,4 +59,5 @@ export const shell = {
|
|
|
30
59
|
float: floatManager,
|
|
31
60
|
presets: presetManager,
|
|
32
61
|
conflicts: conflictsApi,
|
|
62
|
+
actions: shellActions,
|
|
33
63
|
};
|
package/dist/tokens.css
CHANGED
|
@@ -42,6 +42,16 @@
|
|
|
42
42
|
--shell-warning: #fbbf24;
|
|
43
43
|
--shell-success: #34d399;
|
|
44
44
|
|
|
45
|
+
/* Foreground pairings — the contrasting text/icon color for each
|
|
46
|
+
semantic surface. Used instead of --shell-fg when the background
|
|
47
|
+
is a saturated semantic color rather than --shell-bg. Theme
|
|
48
|
+
overrides that change the surface hue should also update its
|
|
49
|
+
paired foreground. */
|
|
50
|
+
--shell-fg-on-accent: #ffffff;
|
|
51
|
+
--shell-fg-on-error: #1a1b1e;
|
|
52
|
+
--shell-fg-on-warning: #1a1b1e;
|
|
53
|
+
--shell-fg-on-success: #1a1b1e;
|
|
54
|
+
|
|
45
55
|
/* Typography */
|
|
46
56
|
--shell-font-ui: system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
47
57
|
--shell-font-mono: ui-monospace, "Cascadia Code", "Consolas", monospace;
|
|
@@ -90,7 +100,7 @@ body {
|
|
|
90
100
|
margin: 0;
|
|
91
101
|
padding: 0;
|
|
92
102
|
height: 100%;
|
|
93
|
-
overflow: hidden;
|
|
103
|
+
overflow: hidden;
|
|
94
104
|
background: var(--shell-grad-bg, var(--shell-bg));
|
|
95
105
|
color: var(--shell-fg);
|
|
96
106
|
font-family: var(--shell-font-ui);
|
package/dist/verbs/types.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Scrollback } from '../shell-shard/scrollback.svelte';
|
|
2
2
|
import type { SessionClient } from '../shell-shard/session-client.svelte';
|
|
3
3
|
import type { TenantFsClient } from '../shell-shard/tenant-fs-client';
|
|
4
|
+
import type { TreeRootRef } from '../layout/types';
|
|
4
5
|
export interface ShellApi {
|
|
5
6
|
listApps(): Array<{
|
|
6
7
|
id: string;
|
|
@@ -48,6 +49,14 @@ export interface ShellApi {
|
|
|
48
49
|
viewId: string | null;
|
|
49
50
|
label: string;
|
|
50
51
|
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Where is this slot currently mounted? Returns `{ kind: 'docked' }`
|
|
54
|
+
* when the slot is anywhere in the active docked tree, or
|
|
55
|
+
* `{ kind: 'float', floatId }` when it lives inside a float's subtree.
|
|
56
|
+
* Returns `null` when the slot is not present in the active layout
|
|
57
|
+
* (stale id, post-unmount, or held-but-not-active app tree).
|
|
58
|
+
*/
|
|
59
|
+
locateSlot(slotId: string): TreeRootRef | null;
|
|
51
60
|
listZones(shardId?: string): Array<{
|
|
52
61
|
shardId: string;
|
|
53
62
|
zones: string[];
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Auto-generated from package.json — do not edit manually. */
|
|
2
|
-
export declare const VERSION = "0.
|
|
2
|
+
export declare const VERSION = "0.11.2";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Auto-generated from package.json — do not edit manually. */
|
|
2
|
-
export const VERSION = '0.
|
|
2
|
+
export const VERSION = '0.11.2';
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal app manifest.
|
|
3
|
-
*
|
|
4
|
-
* Framework-shipped: registered in host.ts during bootstrap.
|
|
5
|
-
* Requires the `shell` shard which provides the `shell:terminal` view.
|
|
6
|
-
*/
|
|
7
|
-
import type { AppManifest } from '../../apps/types';
|
|
8
|
-
export declare const manifest: AppManifest;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal app manifest.
|
|
3
|
-
*
|
|
4
|
-
* Framework-shipped: registered in host.ts during bootstrap.
|
|
5
|
-
* Requires the `shell` shard which provides the `shell:terminal` view.
|
|
6
|
-
*/
|
|
7
|
-
import { VERSION } from '../../version';
|
|
8
|
-
export const manifest = {
|
|
9
|
-
id: 'terminal',
|
|
10
|
-
label: 'Terminal',
|
|
11
|
-
version: VERSION,
|
|
12
|
-
requiredShards: ['shell'],
|
|
13
|
-
layoutVersion: 1,
|
|
14
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Built-in Terminal app — mounts the `shell:terminal` view in a single slot.
|
|
3
|
-
*
|
|
4
|
-
* Framework-shipped: registered in host.ts during bootstrap.
|
|
5
|
-
*/
|
|
6
|
-
import { manifest } from './manifest';
|
|
7
|
-
export const terminalApp = {
|
|
8
|
-
manifest,
|
|
9
|
-
initialLayout: {
|
|
10
|
-
type: 'slot',
|
|
11
|
-
slotId: 'terminal.main',
|
|
12
|
-
viewId: 'shell:terminal',
|
|
13
|
-
},
|
|
14
|
-
};
|