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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
/*
|
|
3
|
-
* Saved-layouts section for
|
|
3
|
+
* Saved-layouts section for Sh3Home. Renders one card per SavedLayout.
|
|
4
4
|
* Click → restoreToFloat. Right-click sets a typed selection so card
|
|
5
5
|
* actions (Customize, Delete) can recover the layoutId.
|
|
6
6
|
*/
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
import { restoreToFloat } from './layoutsApi';
|
|
10
10
|
import { listStandaloneViews } from '../shards/activate.svelte';
|
|
11
11
|
import { toastManager } from '../overlays/toast';
|
|
12
|
-
import {
|
|
12
|
+
import { sh3 } from '../sh3Runtime.svelte';
|
|
13
13
|
import { makeSelectionApi } from '../actions/selection.svelte';
|
|
14
14
|
import iconsUrl from '../assets/icons.svg';
|
|
15
15
|
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
function openCardContextMenu(event: MouseEvent, layoutId: string): void {
|
|
33
33
|
event.preventDefault();
|
|
34
34
|
selection.set({ type: 'saved-layout', ref: { layoutId } });
|
|
35
|
-
|
|
35
|
+
sh3.actions.openContextMenu({
|
|
36
36
|
x: event.clientX,
|
|
37
37
|
y: event.clientY,
|
|
38
38
|
scope: { element: 'saved-layout' },
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
font-weight: 600;
|
|
79
79
|
text-transform: uppercase;
|
|
80
80
|
letter-spacing: 0.06em;
|
|
81
|
-
color: var(--
|
|
81
|
+
color: var(--sh3-fg-subtle);
|
|
82
82
|
margin: 0 0 12px;
|
|
83
83
|
}
|
|
84
84
|
.saved-layouts-grid {
|
|
@@ -104,24 +104,24 @@
|
|
|
104
104
|
display: flex;
|
|
105
105
|
align-items: center;
|
|
106
106
|
justify-content: center;
|
|
107
|
-
background: var(--saved-layout-color, var(--
|
|
108
|
-
border: 1px dashed var(--
|
|
109
|
-
border-radius: var(--
|
|
107
|
+
background: var(--saved-layout-color, var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated)));
|
|
108
|
+
border: 1px dashed var(--sh3-border);
|
|
109
|
+
border-radius: var(--sh3-radius-md);
|
|
110
110
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.15);
|
|
111
111
|
transition: transform 120ms ease, border-color 120ms ease, box-shadow 120ms ease, background 120ms ease;
|
|
112
112
|
}
|
|
113
113
|
.saved-layout-card:hover .saved-layout-card-square {
|
|
114
|
-
border-color: var(--
|
|
114
|
+
border-color: var(--sh3-accent);
|
|
115
115
|
transform: translateY(-1px);
|
|
116
116
|
box-shadow:
|
|
117
117
|
0 6px 14px rgba(0, 0, 0, 0.3),
|
|
118
|
-
0 0 0 1px color-mix(in srgb, var(--
|
|
119
|
-
0 4px 12px color-mix(in srgb, var(--
|
|
118
|
+
0 0 0 1px color-mix(in srgb, var(--sh3-accent) 35%, transparent),
|
|
119
|
+
0 4px 12px color-mix(in srgb, var(--sh3-accent) 18%, transparent);
|
|
120
120
|
}
|
|
121
121
|
.saved-layout-card-icon {
|
|
122
122
|
width: 28px;
|
|
123
123
|
height: 28px;
|
|
124
|
-
color: var(--
|
|
124
|
+
color: var(--sh3-fg);
|
|
125
125
|
}
|
|
126
126
|
.saved-layout-card-label {
|
|
127
127
|
font-weight: 600;
|
|
@@ -20,7 +20,7 @@ describe('filterToStandalone', () => {
|
|
|
20
20
|
type: 'tabs',
|
|
21
21
|
activeTab: 0,
|
|
22
22
|
tabs: [
|
|
23
|
-
{ slotId: 'a', viewId: 'shell:terminal', label: '
|
|
23
|
+
{ slotId: 'a', viewId: 'shell:terminal', label: 'Sh3' },
|
|
24
24
|
{ slotId: 'b', viewId: 'app-only:view', label: 'App' },
|
|
25
25
|
{ slotId: 'c', viewId: 'graphlive:hierarchy', label: 'Graph' },
|
|
26
26
|
],
|
|
@@ -30,7 +30,7 @@ describe('filterToStandalone', () => {
|
|
|
30
30
|
type: 'tabs',
|
|
31
31
|
activeTab: 0,
|
|
32
32
|
tabs: [
|
|
33
|
-
{ slotId: 'a', viewId: 'shell:terminal', label: '
|
|
33
|
+
{ slotId: 'a', viewId: 'shell:terminal', label: 'Sh3' },
|
|
34
34
|
{ slotId: 'c', viewId: 'graphlive:hierarchy', label: 'Graph' },
|
|
35
35
|
],
|
|
36
36
|
});
|
|
@@ -40,7 +40,7 @@ describe('filterToStandalone', () => {
|
|
|
40
40
|
type: 'tabs',
|
|
41
41
|
activeTab: 1,
|
|
42
42
|
tabs: [
|
|
43
|
-
{ slotId: 'a', viewId: 'shell:terminal', label: '
|
|
43
|
+
{ slotId: 'a', viewId: 'shell:terminal', label: 'Sh3' },
|
|
44
44
|
{ slotId: 'b', viewId: 'app-only:view', label: 'App' },
|
|
45
45
|
],
|
|
46
46
|
};
|
|
@@ -20,7 +20,7 @@ describe('captureFromFloat', () => {
|
|
|
20
20
|
const content = {
|
|
21
21
|
type: 'tabs',
|
|
22
22
|
activeTab: 0,
|
|
23
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
23
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
24
24
|
};
|
|
25
25
|
const id = floatManager.openWithContent({ content, size: { w: 700, h: 500 } });
|
|
26
26
|
const out = captureFromFloat(id, isStandalone);
|
|
@@ -32,7 +32,7 @@ describe('captureFromFloat', () => {
|
|
|
32
32
|
out.content.tabs[0].label = 'MUTATED';
|
|
33
33
|
const live = floatManager.list().find((f) => f.id === id);
|
|
34
34
|
if (live.content.type === 'tabs') {
|
|
35
|
-
expect(live.content.tabs[0].label).toBe('
|
|
35
|
+
expect(live.content.tabs[0].label).toBe('Sh3');
|
|
36
36
|
}
|
|
37
37
|
});
|
|
38
38
|
});
|
|
@@ -60,7 +60,7 @@ describe('restoreToFloat', () => {
|
|
|
60
60
|
const layout = mk({
|
|
61
61
|
type: 'tabs',
|
|
62
62
|
activeTab: 0,
|
|
63
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
63
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
64
64
|
});
|
|
65
65
|
const id = restoreToFloat(layout, isStandalone, toast);
|
|
66
66
|
expect(id).not.toBe('');
|
|
@@ -13,7 +13,7 @@ const stubShard = {
|
|
|
13
13
|
id: 'stub',
|
|
14
14
|
label: 'Stub',
|
|
15
15
|
version: '0.0.0',
|
|
16
|
-
views: [{ id: 'shell:terminal', label: '
|
|
16
|
+
views: [{ id: 'shell:terminal', label: 'Sh3', standalone: true }],
|
|
17
17
|
},
|
|
18
18
|
activate(ctx) {
|
|
19
19
|
ctx.registerView('shell:terminal', {
|
|
@@ -45,7 +45,7 @@ describe('layoutsShard — sh3.layout.save', () => {
|
|
|
45
45
|
content: {
|
|
46
46
|
type: 'tabs',
|
|
47
47
|
activeTab: 0,
|
|
48
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
48
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
49
49
|
},
|
|
50
50
|
size: { w: 800, h: 600 },
|
|
51
51
|
});
|
|
@@ -86,7 +86,7 @@ describe('layoutsShard — sh3.layout.open palette submenu', () => {
|
|
|
86
86
|
content: {
|
|
87
87
|
type: 'tabs',
|
|
88
88
|
activeTab: 0,
|
|
89
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
89
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
90
90
|
},
|
|
91
91
|
size: { w: 600, h: 400 },
|
|
92
92
|
});
|
|
@@ -101,7 +101,7 @@ describe('layoutsShard — sh3.layout.open palette submenu', () => {
|
|
|
101
101
|
content: {
|
|
102
102
|
type: 'tabs',
|
|
103
103
|
activeTab: 0,
|
|
104
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
104
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
105
105
|
},
|
|
106
106
|
size: { w: 720, h: 480 },
|
|
107
107
|
});
|
|
@@ -140,7 +140,7 @@ describe('layoutsShard — sh3.layout.customize', () => {
|
|
|
140
140
|
content: {
|
|
141
141
|
type: 'tabs',
|
|
142
142
|
activeTab: 0,
|
|
143
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
143
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
144
144
|
},
|
|
145
145
|
size: { w: 600, h: 400 },
|
|
146
146
|
});
|
|
@@ -160,7 +160,7 @@ describe('layoutsShard — sh3.layout.customize', () => {
|
|
|
160
160
|
content: {
|
|
161
161
|
type: 'tabs',
|
|
162
162
|
activeTab: 0,
|
|
163
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
163
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
164
164
|
},
|
|
165
165
|
size: { w: 600, h: 400 },
|
|
166
166
|
});
|
|
@@ -196,7 +196,7 @@ describe('layoutsShard — sh3.layout.delete', () => {
|
|
|
196
196
|
content: {
|
|
197
197
|
type: 'tabs',
|
|
198
198
|
activeTab: 0,
|
|
199
|
-
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: '
|
|
199
|
+
tabs: [{ slotId: 's', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
200
200
|
},
|
|
201
201
|
size: { w: 600, h: 400 },
|
|
202
202
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* One-shot migration: rewrites persisted
|
|
2
|
+
* One-shot migration: rewrites persisted sh3-mode preferences from the
|
|
3
3
|
* pre-rename ids (`dev`, `user`) to the new ids (`bash`, `sh3`). Idempotent —
|
|
4
4
|
* gated by a localStorage flag, safe to call on every boot.
|
|
5
5
|
*
|
|
6
|
-
* Persistence shape: localStorage keys of the form `sh3.
|
|
6
|
+
* Persistence shape: localStorage keys of the form `sh3.sh3.lastMode.<userId>`
|
|
7
7
|
* (see packages/sh3-core/src/shell-shard/modes/prefs.ts).
|
|
8
8
|
*/
|
|
9
9
|
const FLAG_KEY = 'sh3:migrations:mode-id-rename:done';
|
|
@@ -101,11 +101,11 @@
|
|
|
101
101
|
.confirm-dialog-title {
|
|
102
102
|
font-size: 16px;
|
|
103
103
|
font-weight: 600;
|
|
104
|
-
color: var(--
|
|
104
|
+
color: var(--sh3-fg);
|
|
105
105
|
}
|
|
106
106
|
.confirm-dialog-body {
|
|
107
107
|
font-size: 13px;
|
|
108
|
-
color: var(--
|
|
108
|
+
color: var(--sh3-fg-muted, var(--sh3-fg));
|
|
109
109
|
line-height: 1.5;
|
|
110
110
|
}
|
|
111
111
|
.confirm-dialog-actions {
|
|
@@ -117,10 +117,10 @@
|
|
|
117
117
|
.confirm-dialog-btn {
|
|
118
118
|
font-size: 13px;
|
|
119
119
|
padding: 6px 14px;
|
|
120
|
-
border-radius: var(--
|
|
121
|
-
border: 1px solid var(--
|
|
120
|
+
border-radius: var(--sh3-radius-sm, 4px);
|
|
121
|
+
border: 1px solid var(--sh3-border-strong);
|
|
122
122
|
background: transparent;
|
|
123
|
-
color: var(--
|
|
123
|
+
color: var(--sh3-fg);
|
|
124
124
|
cursor: pointer;
|
|
125
125
|
}
|
|
126
126
|
.confirm-dialog-btn:disabled {
|
|
@@ -128,11 +128,11 @@
|
|
|
128
128
|
cursor: not-allowed;
|
|
129
129
|
}
|
|
130
130
|
.confirm-dialog-btn-default {
|
|
131
|
-
background: var(--
|
|
131
|
+
background: var(--sh3-bg-elevated);
|
|
132
132
|
}
|
|
133
133
|
.confirm-dialog-btn-danger {
|
|
134
134
|
background: transparent;
|
|
135
|
-
color: var(--
|
|
136
|
-
border-color: var(--
|
|
135
|
+
color: var(--sh3-error, #d32f2f);
|
|
136
|
+
border-color: var(--sh3-error, #d32f2f);
|
|
137
137
|
}
|
|
138
138
|
</style>
|
|
@@ -112,19 +112,19 @@
|
|
|
112
112
|
.app-appearance {
|
|
113
113
|
padding: 16px 20px;
|
|
114
114
|
max-width: 460px;
|
|
115
|
-
color: var(--
|
|
116
|
-
background: var(--
|
|
115
|
+
color: var(--sh3-fg);
|
|
116
|
+
background: var(--sh3-bg);
|
|
117
117
|
font: inherit;
|
|
118
118
|
}
|
|
119
119
|
h2 { margin: 0 0 12px; font-size: 16px; }
|
|
120
120
|
.row { display: flex; flex-direction: column; gap: 4px; margin-bottom: 12px; font-size: 13px; }
|
|
121
|
-
.row span { color: var(--
|
|
121
|
+
.row span { color: var(--sh3-fg-muted); }
|
|
122
122
|
.row span em { font-style: italic; opacity: 0.7; }
|
|
123
123
|
.name-input {
|
|
124
|
-
background: var(--
|
|
125
|
-
color: var(--
|
|
126
|
-
border: 1px solid var(--
|
|
127
|
-
border-radius: var(--
|
|
124
|
+
background: var(--sh3-bg-elevated);
|
|
125
|
+
color: var(--sh3-fg);
|
|
126
|
+
border: 1px solid var(--sh3-border);
|
|
127
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
128
128
|
padding: 6px 8px; font: inherit; font-size: 13px;
|
|
129
129
|
}
|
|
130
130
|
.link {
|
|
@@ -132,14 +132,14 @@
|
|
|
132
132
|
background: transparent;
|
|
133
133
|
border: none;
|
|
134
134
|
padding: 0;
|
|
135
|
-
color: var(--
|
|
135
|
+
color: var(--sh3-accent);
|
|
136
136
|
font: inherit;
|
|
137
137
|
font-size: 13px;
|
|
138
138
|
cursor: pointer;
|
|
139
139
|
text-decoration: underline;
|
|
140
140
|
}
|
|
141
141
|
.link--align-right { align-self: flex-end; margin-top: 4px; }
|
|
142
|
-
.link:hover { color: var(--
|
|
142
|
+
.link:hover { color: var(--sh3-fg); }
|
|
143
143
|
.preview { display: flex; justify-content: center; margin-bottom: 16px; }
|
|
144
144
|
.preview-card {
|
|
145
145
|
display: flex; flex-direction: column;
|
|
@@ -149,13 +149,13 @@
|
|
|
149
149
|
.preview-card-square {
|
|
150
150
|
width: 64px; height: 64px;
|
|
151
151
|
display: flex; align-items: center; justify-content: center;
|
|
152
|
-
background: var(--
|
|
153
|
-
border: 1px solid var(--
|
|
154
|
-
border-radius: var(--
|
|
152
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
153
|
+
border: 1px solid var(--sh3-border);
|
|
154
|
+
border-radius: var(--sh3-radius-md);
|
|
155
155
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.15);
|
|
156
156
|
}
|
|
157
157
|
.preview-card--tinted .preview-card-square { background: var(--card-color); }
|
|
158
|
-
.preview-card-icon { width: 28px; height: 28px; color: var(--
|
|
158
|
+
.preview-card-icon { width: 28px; height: 28px; color: var(--sh3-fg); }
|
|
159
159
|
.preview-card-label {
|
|
160
160
|
font-weight: 600; font-size: 11px; line-height: 1.2;
|
|
161
161
|
text-align: center; word-break: break-word;
|
|
@@ -167,13 +167,13 @@
|
|
|
167
167
|
}
|
|
168
168
|
.actions { display: flex; gap: 8px; margin-top: 16px; }
|
|
169
169
|
.actions button {
|
|
170
|
-
background: var(--
|
|
171
|
-
color: var(--
|
|
172
|
-
border: 1px solid var(--
|
|
173
|
-
border-radius: var(--
|
|
170
|
+
background: var(--sh3-bg-elevated);
|
|
171
|
+
color: var(--sh3-fg);
|
|
172
|
+
border: 1px solid var(--sh3-border);
|
|
173
|
+
border-radius: var(--sh3-radius-sm, 3px);
|
|
174
174
|
padding: 6px 14px; font: inherit; cursor: pointer;
|
|
175
175
|
}
|
|
176
|
-
.actions button.primary { background: var(--
|
|
177
|
-
.actions button:hover { border-color: var(--
|
|
176
|
+
.actions button.primary { background: var(--sh3-accent); color: #fff; border-color: var(--sh3-accent); }
|
|
177
|
+
.actions button:hover { border-color: var(--sh3-accent); }
|
|
178
178
|
.actions button:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
179
179
|
</style>
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
import { registerDismissableFrame, unregisterDismissableFrame } from './floatDismiss';
|
|
32
32
|
import { computeMinSize } from '../layout/floats';
|
|
33
33
|
import type { FloatEntry } from '../layout/types';
|
|
34
|
-
import {
|
|
34
|
+
import { sh3 } from '../sh3Runtime.svelte';
|
|
35
35
|
import { makeSelectionApi } from '../actions/selection.svelte';
|
|
36
|
-
import { spawnSatellite } from '../
|
|
36
|
+
import { spawnSatellite } from '../sh3Api/window';
|
|
37
37
|
import { walkShardsForContent } from '../satellite/walkShards';
|
|
38
38
|
|
|
39
39
|
const isTauri =
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
function openHeaderContextMenu(e: MouseEvent): void {
|
|
45
45
|
e.preventDefault();
|
|
46
46
|
floatHeaderSelection.set({ type: 'float-header', ref: { floatId: entry.id } });
|
|
47
|
-
|
|
47
|
+
sh3.actions.openContextMenu({
|
|
48
48
|
x: e.clientX,
|
|
49
49
|
y: e.clientY,
|
|
50
50
|
scope: { element: 'float-header' },
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
});
|
|
197
197
|
floatManager.close(entry.id);
|
|
198
198
|
} catch (err) {
|
|
199
|
-
|
|
199
|
+
sh3.toast.notify(
|
|
200
200
|
`Pop-out failed: ${(err as Error).message}`,
|
|
201
201
|
{ level: 'error', duration: 5000 },
|
|
202
202
|
);
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
209
209
|
<div
|
|
210
210
|
class="sh3-float-frame"
|
|
211
|
-
data-
|
|
211
|
+
data-sh3-overlay-host="float"
|
|
212
212
|
bind:this={frameEl}
|
|
213
213
|
style:left="{entry.position.x}px"
|
|
214
214
|
style:top="{entry.position.y}px"
|
|
@@ -272,10 +272,10 @@
|
|
|
272
272
|
position: absolute;
|
|
273
273
|
display: flex;
|
|
274
274
|
flex-direction: column;
|
|
275
|
-
background: var(--
|
|
276
|
-
color: var(--
|
|
277
|
-
border: 1px solid var(--
|
|
278
|
-
border-radius: var(--
|
|
275
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
276
|
+
color: var(--sh3-fg);
|
|
277
|
+
border: 1px solid var(--sh3-border-strong);
|
|
278
|
+
border-radius: var(--sh3-radius);
|
|
279
279
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
280
280
|
pointer-events: auto;
|
|
281
281
|
}
|
|
@@ -284,17 +284,17 @@
|
|
|
284
284
|
align-items: center;
|
|
285
285
|
justify-content: space-between;
|
|
286
286
|
padding: 4px 8px;
|
|
287
|
-
background: var(--
|
|
287
|
+
background: var(--sh3-grad-bg-sunken, var(--sh3-bg-sunken));
|
|
288
288
|
cursor: move;
|
|
289
289
|
user-select: none;
|
|
290
|
-
border-bottom: 1px solid var(--
|
|
291
|
-
border-top-left-radius: var(--
|
|
292
|
-
border-top-right-radius: var(--
|
|
290
|
+
border-bottom: 1px solid var(--sh3-border-strong);
|
|
291
|
+
border-top-left-radius: var(--sh3-radius);
|
|
292
|
+
border-top-right-radius: var(--sh3-radius);
|
|
293
293
|
flex-shrink: 0;
|
|
294
294
|
}
|
|
295
295
|
.sh3-float-title {
|
|
296
296
|
font-size: 12px;
|
|
297
|
-
color: var(--
|
|
297
|
+
color: var(--sh3-fg);
|
|
298
298
|
overflow: hidden;
|
|
299
299
|
text-overflow: ellipsis;
|
|
300
300
|
white-space: nowrap;
|
|
@@ -310,7 +310,7 @@
|
|
|
310
310
|
.sh3-float-close {
|
|
311
311
|
background: transparent;
|
|
312
312
|
border: none;
|
|
313
|
-
color: var(--
|
|
313
|
+
color: var(--sh3-fg);
|
|
314
314
|
line-height: 1;
|
|
315
315
|
cursor: pointer;
|
|
316
316
|
padding: 0 4px;
|
|
@@ -342,14 +342,14 @@
|
|
|
342
342
|
135deg,
|
|
343
343
|
transparent 0,
|
|
344
344
|
transparent 6px,
|
|
345
|
-
var(--
|
|
346
|
-
var(--
|
|
345
|
+
var(--sh3-border-strong) 6px,
|
|
346
|
+
var(--sh3-border-strong) 7px,
|
|
347
347
|
transparent 7px,
|
|
348
348
|
transparent 10px,
|
|
349
|
-
var(--
|
|
350
|
-
var(--
|
|
349
|
+
var(--sh3-border-strong) 10px,
|
|
350
|
+
var(--sh3-border-strong) 11px,
|
|
351
351
|
transparent 11px
|
|
352
352
|
);
|
|
353
|
-
border-bottom-right-radius: var(--
|
|
353
|
+
border-bottom-right-radius: var(--sh3-radius);
|
|
354
354
|
}
|
|
355
355
|
</style>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
Layer 1 overlay root — iterates the active LayoutTree's floats and
|
|
3
3
|
renders a FloatFrame for each. Mounted into the layer-1 DOM root by
|
|
4
|
-
|
|
4
|
+
Sh3.svelte. Reactivity flows from the workspace-zone proxy through
|
|
5
5
|
layoutStore.floats into this component, so mutations (open, close,
|
|
6
6
|
position changes, reorder) re-render automatically.
|
|
7
7
|
-->
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Responsibilities:
|
|
7
7
|
* - Span the full layer as a transparent centering container so every
|
|
8
|
-
* modal box renders in the middle of the
|
|
8
|
+
* modal box renders in the middle of the sh3.
|
|
9
9
|
* - Catch pointer events on the area around the box so clicks outside
|
|
10
10
|
* the top modal do not fall through to modals beneath or to the
|
|
11
11
|
* underlying layout.
|
|
@@ -81,10 +81,10 @@
|
|
|
81
81
|
pointer-events: auto;
|
|
82
82
|
}
|
|
83
83
|
.modal-box {
|
|
84
|
-
background: var(--
|
|
85
|
-
color: var(--
|
|
86
|
-
border: 1px solid var(--
|
|
87
|
-
border-radius: var(--
|
|
84
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
85
|
+
color: var(--sh3-fg);
|
|
86
|
+
border: 1px solid var(--sh3-border-strong);
|
|
87
|
+
border-radius: var(--sh3-radius);
|
|
88
88
|
min-width: 320px;
|
|
89
89
|
max-width: min(640px, 90vw);
|
|
90
90
|
max-height: 90vh;
|
|
@@ -73,10 +73,10 @@
|
|
|
73
73
|
<style>
|
|
74
74
|
.popup-frame {
|
|
75
75
|
position: absolute;
|
|
76
|
-
background: var(--
|
|
77
|
-
color: var(--
|
|
78
|
-
border: 1px solid var(--
|
|
79
|
-
border-radius: var(--
|
|
76
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
77
|
+
color: var(--sh3-fg);
|
|
78
|
+
border: 1px solid var(--sh3-border-strong);
|
|
79
|
+
border-radius: var(--sh3-radius-sm);
|
|
80
80
|
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
81
81
|
min-width: 120px;
|
|
82
82
|
outline: none;
|
|
@@ -42,13 +42,13 @@
|
|
|
42
42
|
pointer-events: auto;
|
|
43
43
|
display: flex;
|
|
44
44
|
align-items: center;
|
|
45
|
-
gap: var(--
|
|
46
|
-
padding: var(--
|
|
47
|
-
background: var(--
|
|
48
|
-
color: var(--
|
|
49
|
-
border: 1px solid var(--
|
|
45
|
+
gap: var(--sh3-pad-md);
|
|
46
|
+
padding: var(--sh3-pad-sm) var(--sh3-pad-md);
|
|
47
|
+
background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
|
|
48
|
+
color: var(--sh3-fg);
|
|
49
|
+
border: 1px solid var(--sh3-border-strong);
|
|
50
50
|
border-left-width: 3px;
|
|
51
|
-
border-radius: var(--
|
|
51
|
+
border-radius: var(--sh3-radius-sm);
|
|
52
52
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.4);
|
|
53
53
|
font-size: 12px;
|
|
54
54
|
min-width: 220px;
|
|
@@ -58,17 +58,17 @@
|
|
|
58
58
|
}
|
|
59
59
|
.toast-level {
|
|
60
60
|
text-transform: uppercase;
|
|
61
|
-
font-family: var(--
|
|
61
|
+
font-family: var(--sh3-font-mono);
|
|
62
62
|
font-size: 10px;
|
|
63
63
|
letter-spacing: 0.5px;
|
|
64
|
-
color: var(--
|
|
64
|
+
color: var(--sh3-fg-muted);
|
|
65
65
|
}
|
|
66
66
|
.toast-message { flex: 1; }
|
|
67
67
|
|
|
68
|
-
.toast-info { border-left-color: var(--
|
|
69
|
-
.toast-success { border-left-color: var(--
|
|
70
|
-
.toast-warn { border-left-color: var(--
|
|
71
|
-
.toast-error { border-left-color: var(--
|
|
68
|
+
.toast-info { border-left-color: var(--sh3-accent); }
|
|
69
|
+
.toast-success { border-left-color: var(--sh3-success); }
|
|
70
|
+
.toast-warn { border-left-color: var(--sh3-warning); }
|
|
71
|
+
.toast-error { border-left-color: var(--sh3-error); }
|
|
72
72
|
|
|
73
73
|
@keyframes toast-in {
|
|
74
74
|
from { opacity: 0; transform: translateY(8px); }
|
package/dist/overlays/float.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export interface FloatManager {
|
|
|
51
51
|
/**
|
|
52
52
|
* Snapshot the current rect, override with the float layer bounds, and
|
|
53
53
|
* raise. No-op if the float is already maximized or unknown. Bounds are
|
|
54
|
-
* frozen at maximize time —
|
|
54
|
+
* frozen at maximize time — sh3 resize while maximized does not refit.
|
|
55
55
|
*/
|
|
56
56
|
maximize(floatId: string): void;
|
|
57
57
|
/**
|
|
@@ -72,7 +72,7 @@ export interface FloatManager {
|
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Bind the manager to the active LayoutTree's `floats` array. Called
|
|
75
|
-
* from
|
|
75
|
+
* from Sh3.svelte during boot. `getBounds` returns the current
|
|
76
76
|
* tree-allocated area for cascade-position wraparound.
|
|
77
77
|
*/
|
|
78
78
|
export declare function bindFloatStore(floats: FloatEntry[], getBounds: () => {
|
package/dist/overlays/float.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Float manager — layer 1 of the overlay stack.
|
|
3
3
|
*
|
|
4
|
-
* Public API (
|
|
4
|
+
* Public API (sh3.float):
|
|
5
5
|
* open(viewId, options?) → floatId
|
|
6
6
|
* close(floatId)
|
|
7
7
|
* list() → FloatEntry[]
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* Binding:
|
|
24
24
|
* The manager is bound to a live FloatEntry[] (the active LayoutTree's
|
|
25
|
-
* floats) by `bindFloatStore()` during
|
|
25
|
+
* floats) by `bindFloatStore()` during Sh3 boot. Before binding, an
|
|
26
26
|
* in-memory fallback array is used — this is both the test environment
|
|
27
27
|
* and the pre-boot state.
|
|
28
28
|
*/
|
|
@@ -35,7 +35,7 @@ let boundFloats = null;
|
|
|
35
35
|
let getTreeBounds = () => ({ w: 1600, h: 900 });
|
|
36
36
|
/**
|
|
37
37
|
* Bind the manager to the active LayoutTree's `floats` array. Called
|
|
38
|
-
* from
|
|
38
|
+
* from Sh3.svelte during boot. `getBounds` returns the current
|
|
39
39
|
* tree-allocated area for cascade-position wraparound.
|
|
40
40
|
*/
|
|
41
41
|
export function bindFloatStore(floats, getBounds) {
|
|
@@ -89,7 +89,7 @@ describe('floatManager — anchor-aware parent host', () => {
|
|
|
89
89
|
});
|
|
90
90
|
function makeOverlayHost(kind) {
|
|
91
91
|
const host = document.createElement('div');
|
|
92
|
-
host.dataset.
|
|
92
|
+
host.dataset.sh3OverlayHost = kind;
|
|
93
93
|
const anchor = document.createElement('button');
|
|
94
94
|
host.appendChild(anchor);
|
|
95
95
|
document.body.appendChild(host);
|
|
@@ -366,7 +366,7 @@ describe('floats — F.7 anchor portals to enclosing overlay host', () => {
|
|
|
366
366
|
const { container } = renderWithShell(FloatLayer, {});
|
|
367
367
|
const fakeModalHost = document.createElement('div');
|
|
368
368
|
fakeModalHost.className = 'fake-modal-host';
|
|
369
|
-
fakeModalHost.dataset.
|
|
369
|
+
fakeModalHost.dataset.sh3OverlayHost = 'modal';
|
|
370
370
|
const anchor = document.createElement('button');
|
|
371
371
|
fakeModalHost.appendChild(anchor);
|
|
372
372
|
document.body.appendChild(fakeModalHost);
|
|
@@ -397,7 +397,7 @@ describe('floats — F.7 anchor portals to enclosing overlay host', () => {
|
|
|
397
397
|
const { container } = renderWithShell(FloatLayer, {});
|
|
398
398
|
const fakeModalHost = document.createElement('div');
|
|
399
399
|
fakeModalHost.className = 'fake-modal-host';
|
|
400
|
-
fakeModalHost.dataset.
|
|
400
|
+
fakeModalHost.dataset.sh3OverlayHost = 'modal';
|
|
401
401
|
const anchor = document.createElement('button');
|
|
402
402
|
fakeModalHost.appendChild(anchor);
|
|
403
403
|
document.body.appendChild(fakeModalHost);
|
|
@@ -423,13 +423,13 @@ describe('floats — F.8 overlay host marker', () => {
|
|
|
423
423
|
resetFramework();
|
|
424
424
|
bindManagerToStore();
|
|
425
425
|
});
|
|
426
|
-
it('marks each FloatFrame with data-
|
|
426
|
+
it('marks each FloatFrame with data-sh3-overlay-host="float"', async () => {
|
|
427
427
|
const { container } = renderWithShell(FloatLayer, {});
|
|
428
428
|
floatManager.open('test:view', { title: 'Marked' });
|
|
429
429
|
await tick();
|
|
430
430
|
const frame = container.querySelector('[role="dialog"][aria-label="Marked"]');
|
|
431
431
|
expect(frame).toBeTruthy();
|
|
432
|
-
expect(frame.dataset.
|
|
432
|
+
expect(frame.dataset.sh3OverlayHost).toBe('float');
|
|
433
433
|
});
|
|
434
434
|
});
|
|
435
435
|
// ---------------------------------------------------------------------------
|
|
@@ -842,7 +842,7 @@ describe('floatManager.openWithContent', () => {
|
|
|
842
842
|
const content = {
|
|
843
843
|
type: 'tabs',
|
|
844
844
|
activeTab: 0,
|
|
845
|
-
tabs: [{ slotId: 'restored:1', viewId: 'shell:terminal', label: '
|
|
845
|
+
tabs: [{ slotId: 'restored:1', viewId: 'shell:terminal', label: 'Sh3' }],
|
|
846
846
|
};
|
|
847
847
|
const id = floatManager.openWithContent({
|
|
848
848
|
content,
|
package/dist/overlays/modal.js
CHANGED
|
@@ -109,7 +109,7 @@ function openModal(Content, props, options) {
|
|
|
109
109
|
const root = getLayerRoot('modal');
|
|
110
110
|
const host = document.createElement('div');
|
|
111
111
|
host.className = 'sh3-modal-host';
|
|
112
|
-
host.dataset.
|
|
112
|
+
host.dataset.sh3OverlayHost = 'modal';
|
|
113
113
|
host.style.position = 'absolute';
|
|
114
114
|
host.style.inset = '0';
|
|
115
115
|
host.style.pointerEvents = 'auto';
|
|
@@ -97,11 +97,11 @@ describe('modal — overlay host marker', () => {
|
|
|
97
97
|
modalManager.closeAll();
|
|
98
98
|
teardownLayerRoot(layerRoot);
|
|
99
99
|
});
|
|
100
|
-
it('marks the modal host with data-
|
|
100
|
+
it('marks the modal host with data-sh3-overlay-host="modal"', async () => {
|
|
101
101
|
modalManager.open(DummyFrame, {});
|
|
102
102
|
await tick();
|
|
103
103
|
const host = layerRoot.querySelector('.sh3-modal-host');
|
|
104
104
|
expect(host).not.toBeNull();
|
|
105
|
-
expect(host.dataset.
|
|
105
|
+
expect(host.dataset.sh3OverlayHost).toBe('modal');
|
|
106
106
|
});
|
|
107
107
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Walks up from `anchor` looking for an element marked as an overlay host
|
|
3
|
-
* via `data-
|
|
3
|
+
* via `data-sh3-overlay-host`. Modal hosts, popup hosts, and float frames
|
|
4
4
|
* tag themselves so anchored overlays (popups, dismissable picker floats)
|
|
5
5
|
* can mount inside their opener's stacking context instead of at a global
|
|
6
6
|
* layer root — which is what the layer-z-index invariant gives us when a
|
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
* `Element.closest`, so a marker on the anchor itself counts.
|
|
12
12
|
*/
|
|
13
13
|
export function findEnclosingOverlayHost(anchor) {
|
|
14
|
-
return anchor.closest('[data-
|
|
14
|
+
return anchor.closest('[data-sh3-overlay-host]');
|
|
15
15
|
}
|