sh3-core 0.15.3 → 0.16.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.
- package/dist/BrandSlot.svelte +9 -9
- package/dist/{Shell.svelte → Sh3.svelte} +65 -65
- package/dist/Sh3.svelte.d.ts +5 -0
- package/dist/__test__/render.js +1 -1
- package/dist/actions/ActionPanel.svelte +3 -3
- package/dist/actions/CommandPalette.svelte +2 -2
- package/dist/actions/MenuBar.svelte +1 -1
- package/dist/actions/MenuBar.test.js +1 -1
- package/dist/actions/MenuButton.svelte +3 -3
- package/dist/actions/dispatcher.svelte.js +1 -1
- package/dist/actions/listActive.js +1 -1
- package/dist/actions/listeners.js +6 -6
- package/dist/actions/selection.svelte.d.ts +2 -2
- package/dist/actions/selection.svelte.js +4 -4
- package/dist/actions/selection.test.js +1 -1
- package/dist/actions/{shellActions.test.js → sh3Actions.test.js} +14 -14
- package/dist/actions/state.svelte.d.ts +3 -3
- package/dist/actions/state.svelte.js +3 -3
- package/dist/actions/syncMountedViewIds.test.js +1 -1
- package/dist/actions/types.d.ts +1 -1
- package/dist/api.d.ts +5 -5
- package/dist/api.js +7 -7
- package/dist/app/admin/ApiKeysView.svelte +9 -9
- package/dist/app/admin/AuthSettingsView.svelte +6 -6
- package/dist/app/admin/SystemView.svelte +12 -12
- package/dist/app/admin/UsersView.svelte +8 -8
- package/dist/app/store/AppUpdateAvailableModal.svelte +14 -14
- package/dist/app/store/PermissionConfirmModal.svelte +20 -20
- package/dist/app/store/StoreView.svelte +51 -51
- package/dist/app/store/UninstallAppDialog.svelte +14 -14
- package/dist/app/store/storeShard.svelte.js +1 -1
- package/dist/app/store/verbs.js +1 -1
- package/dist/apps/lifecycle.d.ts +1 -1
- package/dist/apps/lifecycle.js +4 -4
- package/dist/apps/lifecycle.test.js +5 -5
- package/dist/apps/registry.svelte.d.ts +2 -2
- package/dist/apps/registry.svelte.js +3 -3
- package/dist/apps/types.d.ts +1 -1
- package/dist/auth/GuestBanner.svelte +19 -19
- package/dist/auth/SignInWall.svelte +17 -17
- package/dist/auth/auth.svelte.d.ts +1 -1
- package/dist/auth/auth.svelte.js +1 -1
- package/dist/boot/satellitePayload.js +1 -1
- package/dist/color/api.d.ts +1 -1
- package/dist/color/api.js +1 -1
- package/dist/color/{shell-api.js → sh3-api.js} +3 -3
- package/dist/conflicts/ConflictModal.svelte +1 -1
- package/dist/conflicts/ConflictModal.svelte.d.ts +1 -1
- package/dist/conflicts/DetailView.svelte +19 -19
- package/dist/conflicts/PromptView.svelte +9 -9
- package/dist/conflicts/adapter-documents.js +1 -1
- package/dist/conflicts/api.d.ts +1 -1
- package/dist/conflicts/api.js +2 -2
- package/dist/conflicts/renderer-registry.js +1 -1
- package/dist/conflicts/renderers/MetaOnlyRenderer.svelte +8 -8
- package/dist/conflicts/renderers/TextDiffRenderer.svelte +15 -15
- package/dist/conflicts/renderers/index.js +1 -1
- package/dist/conflicts/resolve-primitive.js +1 -1
- package/dist/conflicts/{shell-api.js → sh3-api.js} +2 -2
- package/dist/contributions/registry.js +1 -1
- package/dist/createShell.d.ts +2 -2
- package/dist/createShell.js +6 -6
- package/dist/host-entry.d.ts +1 -1
- package/dist/host-entry.js +2 -2
- package/dist/host.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/keys/ConsentDialog.svelte +15 -15
- package/dist/keys/consent.svelte.d.ts +2 -2
- package/dist/keys/consent.svelte.js +3 -3
- package/dist/keys/revocation-bus.svelte.d.ts +3 -3
- package/dist/keys/revocation-bus.svelte.js +3 -3
- package/dist/layout/DragPreview.svelte +9 -9
- package/dist/layout/LayoutRenderer.browser.test.js +2 -2
- package/dist/layout/LayoutRenderer.svelte +4 -4
- package/dist/layout/SlotContainer.svelte +12 -12
- package/dist/layout/SlotDropZone.svelte +2 -2
- package/dist/layout/inspection.d.ts +1 -1
- package/dist/layout/inspection.js +1 -1
- package/dist/layout/store.svelte.js +3 -3
- package/dist/layout/types.d.ts +1 -1
- package/dist/layouts-shard/LayoutSaveModal.svelte +20 -20
- package/dist/layouts-shard/LayoutsSection.svelte +11 -11
- package/dist/layouts-shard/filter.test.js +3 -3
- package/dist/layouts-shard/layoutsApi.test.js +3 -3
- package/dist/layouts-shard/layoutsShard.svelte.test.js +7 -7
- package/dist/migrations/mode-id-rename.js +2 -2
- package/dist/overlays/ConfirmDialog.svelte +8 -8
- package/dist/overlays/EntityAppearanceModal.svelte +19 -19
- package/dist/overlays/FloatFrame.svelte +20 -20
- package/dist/overlays/FloatLayer.svelte +1 -1
- package/dist/overlays/ModalFrame.svelte +5 -5
- package/dist/overlays/PopupFrame.svelte +4 -4
- package/dist/overlays/ToastItem.svelte +12 -12
- package/dist/overlays/float.d.ts +2 -2
- package/dist/overlays/float.js +3 -3
- package/dist/overlays/float.test.js +6 -6
- package/dist/overlays/modal.js +1 -1
- package/dist/overlays/modal.test.js +2 -2
- package/dist/overlays/parentHost.js +2 -2
- package/dist/overlays/parentHost.test.js +5 -5
- package/dist/overlays/popup.js +2 -2
- package/dist/overlays/popup.test.js +2 -2
- package/dist/overlays/roots.js +4 -4
- package/dist/overlays/toast.js +1 -1
- package/dist/overlays/types.js +3 -3
- package/dist/primitives/Button.svelte +16 -16
- package/dist/primitives/Collapsible.svelte +11 -11
- package/dist/primitives/ResizableSplitter.svelte +10 -10
- package/dist/primitives/TabbedPanel.svelte +19 -19
- package/dist/primitives/base.css +57 -57
- package/dist/primitives/widgets/ColorSwatch.svelte +15 -15
- package/dist/primitives/widgets/ColorSwatch.svelte.test.js +4 -4
- package/dist/primitives/widgets/Field.svelte +20 -20
- package/dist/primitives/widgets/FilePicker.svelte +13 -13
- package/dist/primitives/widgets/IconPicker.svelte +14 -14
- package/dist/primitives/widgets/IconToggleGroup.svelte +14 -14
- package/dist/primitives/widgets/NumberInput.svelte +17 -17
- package/dist/primitives/widgets/PickerList.svelte +17 -17
- package/dist/primitives/widgets/RangeSlider.svelte +16 -16
- package/dist/primitives/widgets/Segmented.svelte +16 -16
- package/dist/primitives/widgets/Select.svelte +14 -14
- package/dist/primitives/widgets/Select.svelte.test.js +2 -2
- package/dist/primitives/widgets/Slider.svelte +20 -20
- package/dist/primitives/widgets/SliderGroup.svelte +2 -2
- package/dist/primitives/widgets/Textarea.svelte +13 -13
- package/dist/primitives/widgets/_select-listbox.svelte +15 -15
- package/dist/projects/session-state.svelte.js +1 -1
- package/dist/projects-shard/DeleteProjectDialog.svelte +12 -12
- package/dist/projects-shard/ProjectManage.svelte +25 -25
- package/dist/projects-shard/ProjectsSection.svelte +12 -12
- package/dist/registry/installer.d.ts +2 -2
- package/dist/registry/installer.js +2 -2
- package/dist/registry/loader.js +1 -1
- package/dist/registry/permission-descriptions.js +2 -2
- package/dist/registry/permission-descriptions.test.js +1 -1
- package/dist/runtime/runVerb-shell.test.js +2 -2
- package/dist/runtime/runVerb.js +4 -4
- package/dist/runtime/runVerb.test.js +4 -4
- package/dist/satellite/SatelliteShell.svelte +2 -2
- package/dist/{shell → sh3}/views/KeysAndPeers.svelte +7 -7
- package/dist/sh3Api/headless.d.ts +4 -0
- package/dist/{shell-shard/shellApi.js → sh3Api/headless.js} +5 -5
- package/dist/{shell-shard/shellApi.svelte.test.js → sh3Api/headless.svelte.test.js} +11 -11
- package/dist/{shellApi → sh3Api}/window.js +2 -2
- package/dist/{shellApi → sh3Api}/window.test.js +1 -1
- package/dist/{shellRuntime.svelte.d.ts → sh3Runtime.svelte.d.ts} +22 -10
- package/dist/{shellRuntime.svelte.js → sh3Runtime.svelte.js} +12 -10
- package/dist/sh3Runtime.svelte.test.d.ts +1 -0
- package/dist/sh3Runtime.svelte.test.js +46 -0
- package/dist/sh3core-shard/AppInfoView.svelte +19 -19
- package/dist/sh3core-shard/{ShellHome.svelte → Sh3Home.svelte} +82 -82
- package/dist/sh3core-shard/Sh3Home.svelte.d.ts +3 -0
- package/dist/sh3core-shard/{ShellTitle.svelte → Sh3Title.svelte} +11 -11
- package/dist/sh3core-shard/Sh3Title.svelte.d.ts +3 -0
- package/dist/sh3core-shard/appActions.js +3 -3
- package/dist/sh3core-shard/sh3coreShard.svelte.js +7 -7
- package/dist/shards/activate.svelte.d.ts +1 -1
- package/dist/shards/activate.svelte.js +6 -6
- package/dist/shards/types.d.ts +5 -5
- package/dist/shards/types.js +2 -2
- package/dist/shell-shard/CommandLine.svelte +7 -7
- package/dist/shell-shard/InputLine.svelte +3 -3
- package/dist/shell-shard/ScrollbackView.svelte +2 -2
- package/dist/shell-shard/Terminal.svelte +5 -5
- package/dist/shell-shard/Terminal.svelte.d.ts +2 -2
- package/dist/shell-shard/dispatch-custom.test.js +2 -2
- package/dist/shell-shard/dispatch-gating.test.js +2 -2
- package/dist/shell-shard/dispatch-invoke.test.js +2 -2
- package/dist/shell-shard/dispatch-to-terminal.js +1 -1
- package/dist/shell-shard/dispatch.d.ts +2 -2
- package/dist/shell-shard/dispatch.js +2 -2
- package/dist/shell-shard/entries/PromptEntry.svelte +4 -4
- package/dist/shell-shard/entries/StatusEntry.svelte +4 -4
- package/dist/shell-shard/entries/TextEntry.svelte +3 -3
- package/dist/shell-shard/locateSlot.test.js +9 -9
- package/dist/shell-shard/manifest.js +2 -2
- package/dist/shell-shard/registry.d.ts +2 -2
- package/dist/shell-shard/rich/AppCard.svelte +1 -1
- package/dist/shell-shard/rich/AppsTable.svelte +1 -1
- package/dist/shell-shard/rich/HelpTable.svelte +1 -1
- package/dist/shell-shard/rich/HistoryList.svelte +1 -1
- package/dist/shell-shard/rich/ViewsTable.svelte +1 -1
- package/dist/shell-shard/rich/ZoneTree.svelte +2 -2
- package/dist/shell-shard/shellShard.svelte.d.ts +1 -1
- package/dist/shell-shard/shellShard.svelte.js +8 -8
- package/dist/shell-shard/terminal-dispatch.test.js +2 -2
- package/dist/shell-shard/toolbar/Toolbar.svelte +4 -4
- package/dist/shell-shard/toolbar/Toolbar.svelte.d.ts +2 -2
- package/dist/shell-shard/toolbar/slots/BusySlot.svelte +2 -2
- package/dist/shell-shard/toolbar/slots/FocusLockSlot.svelte +2 -2
- package/dist/shell-shard/toolbar/slots/ModeSlot.svelte +1 -1
- package/dist/shell-shard/toolbar/slots/TargetShardSlot.svelte +1 -1
- package/dist/shell-shard/toolbar/slots.d.ts +3 -3
- package/dist/shell-shard/verbs/apps.js +3 -3
- package/dist/shell-shard/verbs/help.js +1 -1
- package/dist/shell-shard/verbs/help.svelte.test.js +1 -1
- package/dist/shell-shard/verbs/history.js +1 -1
- package/dist/shell-shard/verbs/mode.js +2 -2
- package/dist/shell-shard/verbs/mode.test.js +2 -2
- package/dist/shell-shard/verbs/shards.js +1 -1
- package/dist/shell-shard/verbs/views.js +8 -8
- package/dist/shell-shard/verbs/zones.js +2 -2
- package/dist/state/zones.svelte.d.ts +2 -2
- package/dist/state/zones.svelte.js +4 -4
- package/dist/theme.d.ts +3 -3
- package/dist/theme.js +5 -5
- package/dist/tokens.css +68 -68
- package/dist/verbs/types.d.ts +5 -5
- package/dist/verbs/types.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/dist/Shell.svelte.d.ts +0 -5
- package/dist/sh3core-shard/ShellHome.svelte.d.ts +0 -3
- package/dist/sh3core-shard/ShellTitle.svelte.d.ts +0 -3
- package/dist/shell-shard/shellApi.d.ts +0 -4
- /package/dist/actions/{shellActions.test.d.ts → sh3Actions.test.d.ts} +0 -0
- /package/dist/color/{shell-api.d.ts → sh3-api.d.ts} +0 -0
- /package/dist/conflicts/{shell-api.d.ts → sh3-api.d.ts} +0 -0
- /package/dist/{shell → sh3}/views/KeysAndPeers.svelte.d.ts +0 -0
- /package/dist/{shell-shard/shellApi.svelte.test.d.ts → sh3Api/headless.svelte.test.d.ts} +0 -0
- /package/dist/{shellApi → sh3Api}/window.d.ts +0 -0
- /package/dist/{shellApi → sh3Api}/window.test.d.ts +0 -0
|
@@ -54,33 +54,33 @@
|
|
|
54
54
|
.uninstall-dialog {
|
|
55
55
|
padding: 16px 20px;
|
|
56
56
|
max-width: 460px;
|
|
57
|
-
color: var(--
|
|
58
|
-
background: var(--
|
|
57
|
+
color: var(--sh3-fg);
|
|
58
|
+
background: var(--sh3-bg);
|
|
59
59
|
font: inherit;
|
|
60
60
|
}
|
|
61
61
|
h2 { margin: 0 0 8px; font-size: 16px; }
|
|
62
62
|
p { margin: 4px 0; font-size: 13px; }
|
|
63
|
-
.hint { color: var(--
|
|
64
|
-
.error { color: var(--
|
|
63
|
+
.hint { color: var(--sh3-fg-muted); font-size: 12px; }
|
|
64
|
+
.error { color: var(--sh3-error, #c33); }
|
|
65
65
|
code {
|
|
66
|
-
font-family: var(--
|
|
67
|
-
background: var(--
|
|
66
|
+
font-family: var(--sh3-font-mono, monospace);
|
|
67
|
+
background: var(--sh3-bg-elevated);
|
|
68
68
|
padding: 0 4px;
|
|
69
|
-
border-radius: var(--
|
|
69
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
70
70
|
}
|
|
71
71
|
.actions { display: flex; gap: 8px; margin-top: 16px; }
|
|
72
72
|
.actions button {
|
|
73
|
-
background: var(--
|
|
74
|
-
color: var(--
|
|
75
|
-
border: 1px solid var(--
|
|
76
|
-
border-radius: var(--
|
|
73
|
+
background: var(--sh3-bg-elevated);
|
|
74
|
+
color: var(--sh3-fg);
|
|
75
|
+
border: 1px solid var(--sh3-border);
|
|
76
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
77
77
|
padding: 6px 14px; font: inherit; cursor: pointer;
|
|
78
78
|
}
|
|
79
79
|
.actions button.danger {
|
|
80
|
-
background: var(--
|
|
80
|
+
background: var(--sh3-error, #c33);
|
|
81
81
|
color: #fff;
|
|
82
|
-
border-color: var(--
|
|
82
|
+
border-color: var(--sh3-error, #c33);
|
|
83
83
|
}
|
|
84
|
-
.actions button:hover { border-color: var(--
|
|
84
|
+
.actions button:hover { border-color: var(--sh3-accent); }
|
|
85
85
|
.actions button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
86
86
|
</style>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - `sh3-store:browse` — searchable/filterable catalog of available packages
|
|
7
7
|
*
|
|
8
8
|
* Uninstall and update flows for already-installed packages live on the
|
|
9
|
-
*
|
|
9
|
+
* sh3 home card's context menu (see `sh3core-shard/appActions.ts`); this
|
|
10
10
|
* shard exposes the underlying operations as verbs (`installVerb`,
|
|
11
11
|
* `uninstallVerb`, `updateVerb`, `appinfoVerb`) and via `storeContext`.
|
|
12
12
|
*
|
package/dist/app/store/verbs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Store verbs —
|
|
2
|
+
* Store verbs — sh3-accessible commands for the sh3-store shard.
|
|
3
3
|
*
|
|
4
4
|
* Registered during storeShard.activate() via ctx.registerVerb().
|
|
5
5
|
* Auto-prefixed to sh3-store:install, sh3-store:uninstall, sh3-store:appinfo.
|
package/dist/apps/lifecycle.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ export declare function unloadApp(id: string, skipSwitchToHome?: boolean): void;
|
|
|
63
63
|
*/
|
|
64
64
|
export declare function unregisterApp(id: string): void;
|
|
65
65
|
/**
|
|
66
|
-
* Return to the
|
|
66
|
+
* Return to the sh3 home view without unloading the active app. The
|
|
67
67
|
* app's shards stay running, its layout proxy stays attached with its
|
|
68
68
|
* refcount hold intact, and its view containers stay alive in the pool.
|
|
69
69
|
* Launching the same app again is a root swap only.
|
package/dist/apps/lifecycle.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* App lifecycle — launch, unload, return-to-home.
|
|
3
3
|
*
|
|
4
4
|
* All three functions operate on the shared apps registry and the layout
|
|
5
|
-
* manager. `launchApp` is public (
|
|
5
|
+
* manager. `launchApp` is public (sh3 home calls it); `unloadApp` is
|
|
6
6
|
* internal (called from launchApp when replacing a different app);
|
|
7
|
-
* `returnToHome` is public (
|
|
7
|
+
* `returnToHome` is public (sh3 UI calls it).
|
|
8
8
|
*
|
|
9
9
|
* "Last active app" is persisted in the user state zone under the
|
|
10
10
|
* reserved shardId `__sh3core__:last-app`. The value shape is simply
|
|
@@ -147,7 +147,7 @@ export async function launchApp(id, opts = {}) {
|
|
|
147
147
|
toastManager.notify(`Couldn't launch "${(_e = app.manifest.label) !== null && _e !== void 0 ? _e : id}": ${err instanceof Error ? err.message : String(err)}`, { level: 'error', duration: 6000 });
|
|
148
148
|
}
|
|
149
149
|
catch (_j) {
|
|
150
|
-
// Toast layer not mounted (e.g. early boot, tests without
|
|
150
|
+
// Toast layer not mounted (e.g. early boot, tests without Sh3).
|
|
151
151
|
// Best-effort UX — original error must still propagate.
|
|
152
152
|
}
|
|
153
153
|
throw err;
|
|
@@ -236,7 +236,7 @@ export function unregisterApp(id) {
|
|
|
236
236
|
}
|
|
237
237
|
// ---------- return to home -----------------------------------------------
|
|
238
238
|
/**
|
|
239
|
-
* Return to the
|
|
239
|
+
* Return to the sh3 home view without unloading the active app. The
|
|
240
240
|
* app's shards stay running, its layout proxy stays attached with its
|
|
241
241
|
* refcount hold intact, and its view containers stay alive in the pool.
|
|
242
242
|
* Launching the same app again is a root swap only.
|
|
@@ -446,8 +446,8 @@ describe('sh3coreShard — sh3.app.reset-layout registration', () => {
|
|
|
446
446
|
initialLayout: [{ name: 'main', tree: makeTree(makeSlotNode('x')) }],
|
|
447
447
|
}));
|
|
448
448
|
await launchApp('reset-action-1');
|
|
449
|
-
const {
|
|
450
|
-
const actions =
|
|
449
|
+
const { sh3 } = await import('../sh3Runtime.svelte');
|
|
450
|
+
const actions = sh3.actions.listActive();
|
|
451
451
|
const reset = actions.find((a) => a.id === 'sh3.app.reset-layout');
|
|
452
452
|
expect(reset).toBeDefined();
|
|
453
453
|
expect(reset === null || reset === void 0 ? void 0 : reset.label).toBe('Reset Current Layout');
|
|
@@ -467,10 +467,10 @@ describe('sh3coreShard — sh3.app.reset-layout registration', () => {
|
|
|
467
467
|
initialLayout: [{ name: 'main', tree: makeTree(makeSlotNode('x')) }],
|
|
468
468
|
}));
|
|
469
469
|
await launchApp('reset-action-2');
|
|
470
|
-
const {
|
|
471
|
-
expect(
|
|
470
|
+
const { sh3 } = await import('../sh3Runtime.svelte');
|
|
471
|
+
expect(sh3.actions.listActive().some((a) => a.id === 'sh3.app.reset-layout')).toBe(true);
|
|
472
472
|
await returnToHome();
|
|
473
|
-
expect(
|
|
473
|
+
expect(sh3.actions.listActive().some((a) => a.id === 'sh3.app.reset-layout')).toBe(false);
|
|
474
474
|
});
|
|
475
475
|
});
|
|
476
476
|
// ---------------------------------------------------------------------------
|
|
@@ -6,7 +6,7 @@ import type { App, AppManifest } from './types';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const registeredApps: Map<string, App>;
|
|
8
8
|
/**
|
|
9
|
-
* Reactive slot tracking the currently-active app id. Null when the
|
|
9
|
+
* Reactive slot tracking the currently-active app id. Null when the sh3 is
|
|
10
10
|
* showing the home screen or no app has been launched yet. Phase 8 allows at
|
|
11
11
|
* most one active app at a time.
|
|
12
12
|
*/
|
|
@@ -40,7 +40,7 @@ export declare function __resetBreadcrumbForTest(): void;
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function registerApp(app: App): void;
|
|
42
42
|
/**
|
|
43
|
-
* Reactive snapshot of all registered app manifests.
|
|
43
|
+
* Reactive snapshot of all registered app manifests. Sh3 home iterates
|
|
44
44
|
* this to populate its launcher list. Returns only manifests so callers
|
|
45
45
|
* don't reach into app bodies (initialLayout, activate hook) — those are
|
|
46
46
|
* launch-time concerns.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* single slot for the currently-active app.
|
|
4
4
|
*
|
|
5
5
|
* Registration is called from the host (main.ts glob loop or a future
|
|
6
|
-
* runtime loader). The
|
|
6
|
+
* runtime loader). The sh3 home view reads `listRegisteredApps()`
|
|
7
7
|
* reactively so newly-registered apps appear in the list without
|
|
8
8
|
* reboot. `activeApp` tracks which app (if any) is currently launched;
|
|
9
9
|
* phase 8 allows at most one.
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export const registeredApps = $state(new Map());
|
|
17
17
|
/**
|
|
18
|
-
* Reactive slot tracking the currently-active app id. Null when the
|
|
18
|
+
* Reactive slot tracking the currently-active app id. Null when the sh3 is
|
|
19
19
|
* showing the home screen or no app has been launched yet. Phase 8 allows at
|
|
20
20
|
* most one active app at a time.
|
|
21
21
|
*/
|
|
@@ -51,7 +51,7 @@ export function registerApp(app) {
|
|
|
51
51
|
registeredApps.set(app.manifest.id, app);
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
* Reactive snapshot of all registered app manifests.
|
|
54
|
+
* Reactive snapshot of all registered app manifests. Sh3 home iterates
|
|
55
55
|
* this to populate its launcher list. Returns only manifests so callers
|
|
56
56
|
* don't reach into app bodies (initialLayout, activate hook) — those are
|
|
57
57
|
* launch-time concerns.
|
package/dist/apps/types.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ export interface AppManifest {
|
|
|
53
53
|
*/
|
|
54
54
|
layoutVersion: number;
|
|
55
55
|
/**
|
|
56
|
-
* When true, the app is only visible on the
|
|
56
|
+
* When true, the app is only visible on the sh3 home screen in
|
|
57
57
|
* admin mode. Server-side routes may still enforce their own auth
|
|
58
58
|
* independently. Defaults to false (visible to everyone).
|
|
59
59
|
*/
|
|
@@ -65,15 +65,15 @@
|
|
|
65
65
|
align-items: center;
|
|
66
66
|
justify-content: center;
|
|
67
67
|
gap: 12px;
|
|
68
|
-
padding: 6px var(--
|
|
69
|
-
background: color-mix(in srgb, var(--
|
|
70
|
-
border-bottom: 1px solid var(--
|
|
68
|
+
padding: 6px var(--sh3-pad-md, 12px);
|
|
69
|
+
background: color-mix(in srgb, var(--sh3-accent, #7c7cf0) 15%, transparent);
|
|
70
|
+
border-bottom: 1px solid var(--sh3-border, #3a3a5c);
|
|
71
71
|
font-size: 12px;
|
|
72
|
-
color: var(--
|
|
72
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
73
73
|
}
|
|
74
74
|
.guest-banner-action {
|
|
75
75
|
padding: 3px 10px;
|
|
76
|
-
color: var(--
|
|
76
|
+
color: var(--sh3-bg, #1a1a2e);
|
|
77
77
|
font-size: 11px;
|
|
78
78
|
font-weight: 600;
|
|
79
79
|
}
|
|
@@ -91,9 +91,9 @@
|
|
|
91
91
|
flex-direction: column;
|
|
92
92
|
gap: 12px;
|
|
93
93
|
padding: 32px;
|
|
94
|
-
background: var(--
|
|
95
|
-
border: 1px solid var(--
|
|
96
|
-
border-radius: var(--
|
|
94
|
+
background: var(--sh3-bg-elevated, #252540);
|
|
95
|
+
border: 1px solid var(--sh3-border, #3a3a5c);
|
|
96
|
+
border-radius: var(--sh3-radius-lg, 12px);
|
|
97
97
|
min-width: 300px;
|
|
98
98
|
}
|
|
99
99
|
.guest-signin-form {
|
|
@@ -103,32 +103,32 @@
|
|
|
103
103
|
}
|
|
104
104
|
.guest-signin-input {
|
|
105
105
|
padding: 8px 12px;
|
|
106
|
-
background: var(--
|
|
107
|
-
color: var(--
|
|
108
|
-
border: 1px solid var(--
|
|
109
|
-
border-radius: var(--
|
|
106
|
+
background: var(--sh3-bg, #1a1a2e);
|
|
107
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
108
|
+
border: 1px solid var(--sh3-border, #3a3a5c);
|
|
109
|
+
border-radius: var(--sh3-radius, 6px);
|
|
110
110
|
font-size: 13px;
|
|
111
111
|
}
|
|
112
|
-
.guest-signin-input::placeholder { color: var(--
|
|
112
|
+
.guest-signin-input::placeholder { color: var(--sh3-fg-muted, #888); }
|
|
113
113
|
.guest-signin-actions { display: flex; gap: 8px; }
|
|
114
114
|
.guest-signin-btn {
|
|
115
115
|
flex: 1;
|
|
116
116
|
padding: 8px;
|
|
117
|
-
color: var(--
|
|
117
|
+
color: var(--sh3-bg, #1a1a2e);
|
|
118
118
|
font-weight: 600;
|
|
119
119
|
}
|
|
120
120
|
.guest-signin-btn:disabled { opacity: 0.6; cursor: not-allowed; }
|
|
121
121
|
.guest-signin-cancel {
|
|
122
122
|
padding: 8px 12px;
|
|
123
123
|
background: transparent;
|
|
124
|
-
color: var(--
|
|
125
|
-
border: 1px solid var(--
|
|
124
|
+
color: var(--sh3-fg-subtle, #aaa);
|
|
125
|
+
border: 1px solid var(--sh3-border, #3a3a5c);
|
|
126
126
|
}
|
|
127
127
|
.guest-signin-error {
|
|
128
128
|
padding: 6px 10px;
|
|
129
129
|
font-size: 12px;
|
|
130
|
-
color: var(--
|
|
131
|
-
background: color-mix(in srgb, var(--
|
|
132
|
-
border-radius: var(--
|
|
130
|
+
color: var(--sh3-error, #d32f2f);
|
|
131
|
+
background: color-mix(in srgb, var(--sh3-error, #d32f2f) 10%, transparent);
|
|
132
|
+
border-radius: var(--sh3-radius, 6px);
|
|
133
133
|
}
|
|
134
134
|
</style>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
/**
|
|
3
|
-
* SignInWall — standalone sign-in screen shown before
|
|
3
|
+
* SignInWall — standalone sign-in screen shown before sh3 boots.
|
|
4
4
|
* Mounted directly to the target element by createShell().
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -134,8 +134,8 @@
|
|
|
134
134
|
display: flex;
|
|
135
135
|
align-items: center;
|
|
136
136
|
justify-content: center;
|
|
137
|
-
background: var(--
|
|
138
|
-
color: var(--
|
|
137
|
+
background: var(--sh3-grad-bg, var(--sh3-bg, #1a1a2e));
|
|
138
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
139
139
|
font-family: system-ui, sans-serif;
|
|
140
140
|
}
|
|
141
141
|
.signin-card {
|
|
@@ -144,15 +144,15 @@
|
|
|
144
144
|
align-items: center;
|
|
145
145
|
gap: 16px;
|
|
146
146
|
padding: 48px 40px;
|
|
147
|
-
background: var(--
|
|
148
|
-
border: 1px solid var(--
|
|
149
|
-
border-radius: var(--
|
|
147
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated, #252540));
|
|
148
|
+
border: 1px solid var(--sh3-border, #3a3a5c);
|
|
149
|
+
border-radius: var(--sh3-radius-lg, 12px);
|
|
150
150
|
min-width: 320px;
|
|
151
151
|
}
|
|
152
152
|
.signin-brand {
|
|
153
153
|
margin: 0 0 8px;
|
|
154
154
|
font-size: 42px;
|
|
155
|
-
color: var(--
|
|
155
|
+
color: var(--sh3-accent, #7c7cf0);
|
|
156
156
|
letter-spacing: 2px;
|
|
157
157
|
}
|
|
158
158
|
.signin-form {
|
|
@@ -163,18 +163,18 @@
|
|
|
163
163
|
}
|
|
164
164
|
.signin-input {
|
|
165
165
|
padding: 10px 14px;
|
|
166
|
-
background: var(--
|
|
167
|
-
color: var(--
|
|
168
|
-
border: 1px solid var(--
|
|
169
|
-
border-radius: var(--
|
|
166
|
+
background: var(--sh3-bg, #1a1a2e);
|
|
167
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
168
|
+
border: 1px solid var(--sh3-border, #3a3a5c);
|
|
169
|
+
border-radius: var(--sh3-radius, 6px);
|
|
170
170
|
font-size: 14px;
|
|
171
171
|
}
|
|
172
172
|
.signin-input::placeholder {
|
|
173
|
-
color: var(--
|
|
173
|
+
color: var(--sh3-fg-muted, #888);
|
|
174
174
|
}
|
|
175
175
|
.signin-btn {
|
|
176
176
|
padding: 10px 16px;
|
|
177
|
-
color: var(--
|
|
177
|
+
color: var(--sh3-bg, #1a1a2e);
|
|
178
178
|
font-weight: 600;
|
|
179
179
|
font-size: 14px;
|
|
180
180
|
}
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
}
|
|
185
185
|
.signin-link {
|
|
186
186
|
background: none;
|
|
187
|
-
color: var(--
|
|
187
|
+
color: var(--sh3-accent, #7c7cf0);
|
|
188
188
|
font-size: 13px;
|
|
189
189
|
padding: 0;
|
|
190
190
|
}
|
|
@@ -194,9 +194,9 @@
|
|
|
194
194
|
.signin-error {
|
|
195
195
|
padding: 8px 12px;
|
|
196
196
|
font-size: 13px;
|
|
197
|
-
color: var(--
|
|
198
|
-
background: color-mix(in srgb, var(--
|
|
199
|
-
border-radius: var(--
|
|
197
|
+
color: var(--sh3-error, #d32f2f);
|
|
198
|
+
background: color-mix(in srgb, var(--sh3-error, #d32f2f) 10%, transparent);
|
|
199
|
+
border-radius: var(--sh3-radius, 6px);
|
|
200
200
|
width: 100%;
|
|
201
201
|
text-align: center;
|
|
202
202
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* The boot flow (createShell) calls initFromBoot() with the server's
|
|
5
5
|
* boot config. After that, login/logout call the server and update
|
|
6
6
|
* the reactive state. isAdmin/isGuest/isAuthenticated are reactive
|
|
7
|
-
* getters consumed by
|
|
7
|
+
* getters consumed by sh3 components.
|
|
8
8
|
*
|
|
9
9
|
* .svelte.ts because it uses $state for reactive auth status.
|
|
10
10
|
*/
|
package/dist/auth/auth.svelte.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* The boot flow (createShell) calls initFromBoot() with the server's
|
|
5
5
|
* boot config. After that, login/logout call the server and update
|
|
6
6
|
* the reactive state. isAdmin/isGuest/isAuthenticated are reactive
|
|
7
|
-
* getters consumed by
|
|
7
|
+
* getters consumed by sh3 components.
|
|
8
8
|
*
|
|
9
9
|
* .svelte.ts because it uses $state for reactive auth status.
|
|
10
10
|
*/
|
package/dist/color/api.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export interface ColorContribution {
|
|
|
22
22
|
priority?: number;
|
|
23
23
|
open(opts: ColorPickOptions): Promise<string | null>;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
25
|
+
/** Sh3-level color API, mounted at `sh3.color`. */
|
|
26
26
|
export interface ColorApi {
|
|
27
27
|
/**
|
|
28
28
|
* Open a color picker. Resolves with the chosen color as '#rrggbb'
|
package/dist/color/api.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Public types for the color-picker contribution point.
|
|
3
3
|
*
|
|
4
4
|
* A contribution registered at COLOR_PICKER_POINT is picked by the
|
|
5
|
-
* primitive in ./primitive.ts when `
|
|
5
|
+
* primitive in ./primitive.ts when `sh3.color.pick()` is called.
|
|
6
6
|
* The native <input type="color"> fallback is inlined there at priority 0;
|
|
7
7
|
* contributed pickers typically register at priority >= 10.
|
|
8
8
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
2
|
+
* sh3.color assembled API.
|
|
3
3
|
*
|
|
4
4
|
* The selector + inlined native fallback live in primitive.ts;
|
|
5
|
-
* this file just binds `pick` onto the object exposed on the
|
|
6
|
-
* singleton, mirroring conflicts/
|
|
5
|
+
* this file just binds `pick` onto the object exposed on the sh3
|
|
6
|
+
* singleton, mirroring conflicts/sh3-api.ts.
|
|
7
7
|
*/
|
|
8
8
|
import { pickColor } from './primitive';
|
|
9
9
|
export const colorApi = {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
skipped: string[],
|
|
17
17
|
) => void;
|
|
18
18
|
onCancel: () => void;
|
|
19
|
-
/** Provided by
|
|
19
|
+
/** Provided by sh3.modal.open wrapping; we must call to actually close. */
|
|
20
20
|
close: () => void;
|
|
21
21
|
}
|
|
22
22
|
const props: Props = $props();
|
|
@@ -11,7 +11,7 @@ interface Props {
|
|
|
11
11
|
meta?: Record<string, unknown>;
|
|
12
12
|
}>, skipped: string[]) => void;
|
|
13
13
|
onCancel: () => void;
|
|
14
|
-
/** Provided by
|
|
14
|
+
/** Provided by sh3.modal.open wrapping; we must call to actually close. */
|
|
15
15
|
close: () => void;
|
|
16
16
|
}
|
|
17
17
|
declare const ConflictModal: import("svelte").Component<Props, {}, "">;
|
|
@@ -134,21 +134,21 @@
|
|
|
134
134
|
.sh3-conflict-detail {
|
|
135
135
|
display: flex; flex-direction: column;
|
|
136
136
|
width: min(920px, 96vw); height: min(640px, 90vh);
|
|
137
|
-
background: var(--
|
|
138
|
-
color: var(--
|
|
139
|
-
border: 1px solid var(--
|
|
140
|
-
border-radius: var(--
|
|
137
|
+
background: var(--sh3-bg, #1e1e1e);
|
|
138
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
139
|
+
border: 1px solid var(--sh3-border, #444);
|
|
140
|
+
border-radius: var(--sh3-radius-md);
|
|
141
141
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
|
142
142
|
}
|
|
143
143
|
.sh3-conflict-detail-head {
|
|
144
|
-
padding: 12px 16px; border-bottom: 1px solid var(--
|
|
144
|
+
padding: 12px 16px; border-bottom: 1px solid var(--sh3-border, #444);
|
|
145
145
|
display: flex; justify-content: space-between; align-items: center;
|
|
146
146
|
}
|
|
147
147
|
.sh3-conflict-detail-head h3 { margin: 0; font-size: 1rem; font-weight: 600; }
|
|
148
|
-
.sh3-conflict-detail-counter { color: var(--
|
|
148
|
+
.sh3-conflict-detail-counter { color: var(--sh3-fg-muted, #888); font-size: 0.8125rem; }
|
|
149
149
|
.sh3-conflict-detail-body { display: flex; flex: 1; min-height: 0; }
|
|
150
150
|
.sh3-conflict-detail-rail {
|
|
151
|
-
width: 240px; border-right: 1px solid var(--
|
|
151
|
+
width: 240px; border-right: 1px solid var(--sh3-border, #444);
|
|
152
152
|
overflow-y: auto; display: flex; flex-direction: column;
|
|
153
153
|
}
|
|
154
154
|
.sh3-conflict-detail-rail-item {
|
|
@@ -157,42 +157,42 @@
|
|
|
157
157
|
background: transparent; border: none; color: inherit;
|
|
158
158
|
cursor: pointer; font: inherit; font-size: 0.8125rem;
|
|
159
159
|
}
|
|
160
|
-
.sh3-conflict-detail-rail-item:hover { background: var(--
|
|
161
|
-
.sh3-conflict-detail-rail-item.selected { background: var(--
|
|
160
|
+
.sh3-conflict-detail-rail-item:hover { background: var(--sh3-input-bg, #2a2a2a); }
|
|
161
|
+
.sh3-conflict-detail-rail-item.selected { background: var(--sh3-input-bg, #2a2a2a); font-weight: 600; }
|
|
162
162
|
.sh3-conflict-detail-rail-state { width: 1em; text-align: center; opacity: 0.7; }
|
|
163
|
-
.sh3-conflict-detail-rail-state.resolved { color: var(--
|
|
164
|
-
.sh3-conflict-detail-rail-state.skipped { color: var(--
|
|
163
|
+
.sh3-conflict-detail-rail-state.resolved { color: var(--sh3-success, #3a3); opacity: 1; }
|
|
164
|
+
.sh3-conflict-detail-rail-state.skipped { color: var(--sh3-fg-muted, #888); }
|
|
165
165
|
.sh3-conflict-detail-rail-label {
|
|
166
166
|
flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
167
167
|
}
|
|
168
168
|
.sh3-conflict-detail-main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
|
|
169
169
|
.sh3-conflict-detail-branches {
|
|
170
170
|
display: flex; gap: 12px; padding: 8px 16px;
|
|
171
|
-
border-bottom: 1px solid var(--
|
|
171
|
+
border-bottom: 1px solid var(--sh3-border, #444);
|
|
172
172
|
flex-wrap: wrap;
|
|
173
173
|
}
|
|
174
174
|
.sh3-conflict-detail-branch { display: flex; gap: 6px; align-items: center; font-size: 0.8125rem; }
|
|
175
175
|
.sh3-conflict-detail-renderer { flex: 1; min-height: 0; overflow: auto; }
|
|
176
176
|
.sh3-conflict-detail-foot {
|
|
177
|
-
padding: 10px 16px; border-top: 1px solid var(--
|
|
177
|
+
padding: 10px 16px; border-top: 1px solid var(--sh3-border, #444);
|
|
178
178
|
display: flex; justify-content: space-between; gap: 8px;
|
|
179
179
|
}
|
|
180
180
|
.sh3-conflict-detail-nav, .sh3-conflict-detail-actions { display: flex; gap: 8px; }
|
|
181
181
|
.sh3-conflict-detail-nav button, .sh3-conflict-detail-actions button {
|
|
182
182
|
padding: 6px 14px;
|
|
183
|
-
background: var(--
|
|
184
|
-
color: var(--
|
|
185
|
-
border: 1px solid var(--
|
|
186
|
-
border-radius: var(--
|
|
183
|
+
background: var(--sh3-input-bg, #2a2a2a);
|
|
184
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
185
|
+
border: 1px solid var(--sh3-border, #444);
|
|
186
|
+
border-radius: var(--sh3-radius);
|
|
187
187
|
font: inherit;
|
|
188
188
|
font-size: 0.8125rem;
|
|
189
189
|
cursor: pointer;
|
|
190
190
|
}
|
|
191
191
|
.sh3-conflict-detail-nav button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
192
192
|
.sh3-conflict-detail-done {
|
|
193
|
-
background: var(--
|
|
193
|
+
background: var(--sh3-accent, #007acc) !important;
|
|
194
194
|
color: #fff !important;
|
|
195
195
|
font-weight: 600;
|
|
196
|
-
border-color: var(--
|
|
196
|
+
border-color: var(--sh3-accent, #007acc) !important;
|
|
197
197
|
}
|
|
198
198
|
</style>
|
|
@@ -31,25 +31,25 @@
|
|
|
31
31
|
|
|
32
32
|
<style>
|
|
33
33
|
.sh3-conflict-prompt { padding: 20px; display: flex; flex-direction: column; gap: 14px; min-width: 360px; max-width: 480px; }
|
|
34
|
-
.sh3-conflict-prompt-title { margin: 0; font-size: 1.0625rem; font-weight: 600; color: var(--
|
|
35
|
-
.sh3-conflict-prompt-intro { margin: 0; color: var(--
|
|
34
|
+
.sh3-conflict-prompt-title { margin: 0; font-size: 1.0625rem; font-weight: 600; color: var(--sh3-fg, #e0e0e0); }
|
|
35
|
+
.sh3-conflict-prompt-intro { margin: 0; color: var(--sh3-fg-muted, #888); font-size: 0.875rem; }
|
|
36
36
|
.sh3-conflict-prompt-actions { display: flex; flex-direction: column; gap: 8px; }
|
|
37
37
|
.sh3-conflict-prompt-actions button {
|
|
38
38
|
padding: 10px 14px;
|
|
39
|
-
border-radius: var(--
|
|
40
|
-
border: 1px solid var(--
|
|
41
|
-
background: var(--
|
|
42
|
-
color: var(--
|
|
39
|
+
border-radius: var(--sh3-radius);
|
|
40
|
+
border: 1px solid var(--sh3-border, #444);
|
|
41
|
+
background: var(--sh3-input-bg, #2a2a2a);
|
|
42
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
43
43
|
font-size: 0.875rem;
|
|
44
44
|
font-family: inherit;
|
|
45
45
|
cursor: pointer;
|
|
46
46
|
text-align: left;
|
|
47
47
|
}
|
|
48
48
|
.sh3-conflict-prompt-primary {
|
|
49
|
-
background: var(--
|
|
50
|
-
border-color: var(--
|
|
49
|
+
background: var(--sh3-accent, #007acc) !important;
|
|
50
|
+
border-color: var(--sh3-accent, #007acc) !important;
|
|
51
51
|
color: #fff !important;
|
|
52
52
|
font-weight: 600;
|
|
53
53
|
}
|
|
54
|
-
.sh3-conflict-prompt-cancel { color: var(--
|
|
54
|
+
.sh3-conflict-prompt-cancel { color: var(--sh3-fg-muted, #888) !important; }
|
|
55
55
|
</style>
|
package/dist/conflicts/api.d.ts
CHANGED
|
@@ -101,7 +101,7 @@ export declare class ConflictPermissionError extends Error {
|
|
|
101
101
|
export declare class ConflictSessionOrphanedError extends Error {
|
|
102
102
|
constructor();
|
|
103
103
|
}
|
|
104
|
-
/** Runtime shape of `
|
|
104
|
+
/** Runtime shape of `sh3.conflicts`. */
|
|
105
105
|
export interface ConflictsApi {
|
|
106
106
|
resolve(items: ConflictItem[], opts?: ResolveOptions): Promise<ResolveOutcome>;
|
|
107
107
|
resolveDocuments(ctx: ShardContext, input: ResolveDocumentsInput, opts?: ResolveOptions): Promise<DocsResolveOutcome>;
|
package/dist/conflicts/api.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Public types for the conflict manager view.
|
|
3
3
|
*
|
|
4
|
-
* `
|
|
4
|
+
* `sh3.conflicts` exposes two entry points:
|
|
5
5
|
* - resolve(items, opts): generic primitive
|
|
6
6
|
* - resolveDocuments(ctx, input, opts): doc-zone adapter
|
|
7
7
|
*
|
|
8
8
|
* Shards construct ConflictItem arrays themselves (generic path) or pass
|
|
9
9
|
* { shardId, paths } to the adapter (doc path). The doc-zone adapter
|
|
10
|
-
* layers on top of the generic primitive — the
|
|
10
|
+
* layers on top of the generic primitive — the sh3 does not know about
|
|
11
11
|
* documents; the adapter does.
|
|
12
12
|
*/
|
|
13
13
|
/**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Two registration surfaces:
|
|
5
5
|
* - Built-in renderers (TextDiffRenderer, MetaOnlyRenderer) are
|
|
6
|
-
* registered from within sh3-core at first `
|
|
6
|
+
* registered from within sh3-core at first `sh3.conflicts` use via
|
|
7
7
|
* ensureBuiltInRenderersRegistered().
|
|
8
8
|
* - Contributed renderers arrive via the ctx.contributions runtime
|
|
9
9
|
* under CONFLICT_RENDERER_POINT. The conflict modal reads the
|
|
@@ -50,24 +50,24 @@
|
|
|
50
50
|
|
|
51
51
|
<style>
|
|
52
52
|
.sh3-conflict-meta { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
|
|
53
|
-
.sh3-conflict-meta-note { color: var(--
|
|
53
|
+
.sh3-conflict-meta-note { color: var(--sh3-fg-muted, #888); font-size: 0.875rem; font-style: italic; }
|
|
54
54
|
.sh3-conflict-meta-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 8px; }
|
|
55
55
|
.sh3-conflict-meta-li { margin: 0; }
|
|
56
56
|
.sh3-conflict-meta-row {
|
|
57
57
|
width: 100%;
|
|
58
58
|
text-align: left;
|
|
59
59
|
padding: 10px 12px;
|
|
60
|
-
background: var(--
|
|
61
|
-
color: var(--
|
|
62
|
-
border: 1px solid var(--
|
|
63
|
-
border-radius: var(--
|
|
60
|
+
background: var(--sh3-input-bg, #2a2a2a);
|
|
61
|
+
color: var(--sh3-fg, #e0e0e0);
|
|
62
|
+
border: 1px solid var(--sh3-border, #444);
|
|
63
|
+
border-radius: var(--sh3-radius-sm);
|
|
64
64
|
cursor: pointer;
|
|
65
65
|
font: inherit;
|
|
66
66
|
}
|
|
67
67
|
.sh3-conflict-meta-row.selected {
|
|
68
|
-
border-color: var(--
|
|
69
|
-
box-shadow: 0 0 0 2px var(--
|
|
68
|
+
border-color: var(--sh3-accent, #007acc);
|
|
69
|
+
box-shadow: 0 0 0 2px var(--sh3-focus-ring, rgba(0,122,204,0.3));
|
|
70
70
|
}
|
|
71
71
|
.sh3-conflict-meta-origin { font-weight: 600; font-size: 0.875rem; }
|
|
72
|
-
.sh3-conflict-meta-detail { color: var(--
|
|
72
|
+
.sh3-conflict-meta-detail { color: var(--sh3-fg-muted, #888); font-size: 0.75rem; margin-top: 2px; }
|
|
73
73
|
</style>
|