sh3-core 0.15.4 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/dist/BrandSlot.svelte +9 -9
  2. package/dist/{Shell.svelte → Sh3.svelte} +65 -65
  3. package/dist/Sh3.svelte.d.ts +5 -0
  4. package/dist/__test__/render.js +1 -1
  5. package/dist/actions/ActionPanel.svelte +3 -3
  6. package/dist/actions/CommandPalette.svelte +2 -2
  7. package/dist/actions/MenuBar.svelte +1 -1
  8. package/dist/actions/MenuBar.test.js +1 -1
  9. package/dist/actions/MenuButton.svelte +3 -3
  10. package/dist/actions/dispatcher.svelte.js +1 -1
  11. package/dist/actions/listActive.js +1 -1
  12. package/dist/actions/listeners.js +6 -6
  13. package/dist/actions/selection.svelte.d.ts +2 -2
  14. package/dist/actions/selection.svelte.js +4 -4
  15. package/dist/actions/selection.test.js +1 -1
  16. package/dist/actions/{shellActions.test.js → sh3Actions.test.js} +14 -14
  17. package/dist/actions/state.svelte.d.ts +3 -3
  18. package/dist/actions/state.svelte.js +3 -3
  19. package/dist/actions/syncMountedViewIds.test.js +1 -1
  20. package/dist/actions/types.d.ts +1 -1
  21. package/dist/api.d.ts +5 -5
  22. package/dist/api.js +7 -7
  23. package/dist/app/admin/ApiKeysView.svelte +9 -9
  24. package/dist/app/admin/AuthSettingsView.svelte +6 -6
  25. package/dist/app/admin/SystemView.svelte +12 -12
  26. package/dist/app/admin/UsersView.svelte +8 -8
  27. package/dist/app/store/AppUpdateAvailableModal.svelte +14 -14
  28. package/dist/app/store/PermissionConfirmModal.svelte +20 -20
  29. package/dist/app/store/StoreView.svelte +51 -51
  30. package/dist/app/store/UninstallAppDialog.svelte +14 -14
  31. package/dist/app/store/storeShard.svelte.js +1 -1
  32. package/dist/app/store/verbs.js +1 -1
  33. package/dist/apps/lifecycle.d.ts +1 -1
  34. package/dist/apps/lifecycle.js +4 -4
  35. package/dist/apps/lifecycle.test.js +5 -5
  36. package/dist/apps/registry.svelte.d.ts +2 -2
  37. package/dist/apps/registry.svelte.js +3 -3
  38. package/dist/apps/types.d.ts +1 -1
  39. package/dist/auth/GuestBanner.svelte +19 -19
  40. package/dist/auth/SignInWall.svelte +17 -17
  41. package/dist/auth/auth.svelte.d.ts +1 -1
  42. package/dist/auth/auth.svelte.js +1 -1
  43. package/dist/boot/satellitePayload.js +1 -1
  44. package/dist/build.d.ts +27 -0
  45. package/dist/build.js +59 -1
  46. package/dist/build.test.js +31 -0
  47. package/dist/color/api.d.ts +1 -1
  48. package/dist/color/api.js +1 -1
  49. package/dist/color/{shell-api.js → sh3-api.js} +3 -3
  50. package/dist/conflicts/ConflictModal.svelte +1 -1
  51. package/dist/conflicts/ConflictModal.svelte.d.ts +1 -1
  52. package/dist/conflicts/DetailView.svelte +19 -19
  53. package/dist/conflicts/PromptView.svelte +9 -9
  54. package/dist/conflicts/adapter-documents.js +1 -1
  55. package/dist/conflicts/api.d.ts +1 -1
  56. package/dist/conflicts/api.js +2 -2
  57. package/dist/conflicts/renderer-registry.js +1 -1
  58. package/dist/conflicts/renderers/MetaOnlyRenderer.svelte +8 -8
  59. package/dist/conflicts/renderers/TextDiffRenderer.svelte +15 -15
  60. package/dist/conflicts/renderers/index.js +1 -1
  61. package/dist/conflicts/resolve-primitive.js +1 -1
  62. package/dist/conflicts/{shell-api.js → sh3-api.js} +2 -2
  63. package/dist/contributions/registry.js +1 -1
  64. package/dist/createShell.d.ts +2 -2
  65. package/dist/createShell.js +6 -6
  66. package/dist/host-entry.d.ts +1 -1
  67. package/dist/host-entry.js +2 -2
  68. package/dist/host.js +2 -2
  69. package/dist/index.d.ts +1 -1
  70. package/dist/index.js +2 -2
  71. package/dist/keys/ConsentDialog.svelte +15 -15
  72. package/dist/keys/consent.svelte.d.ts +2 -2
  73. package/dist/keys/consent.svelte.js +3 -3
  74. package/dist/keys/revocation-bus.svelte.d.ts +3 -3
  75. package/dist/keys/revocation-bus.svelte.js +3 -3
  76. package/dist/layout/DragPreview.svelte +9 -9
  77. package/dist/layout/LayoutRenderer.browser.test.js +2 -2
  78. package/dist/layout/LayoutRenderer.svelte +4 -4
  79. package/dist/layout/SlotContainer.svelte +12 -12
  80. package/dist/layout/SlotDropZone.svelte +2 -2
  81. package/dist/layout/inspection.d.ts +1 -1
  82. package/dist/layout/inspection.js +1 -1
  83. package/dist/layout/store.svelte.js +3 -3
  84. package/dist/layout/types.d.ts +1 -1
  85. package/dist/layouts-shard/LayoutSaveModal.svelte +20 -20
  86. package/dist/layouts-shard/LayoutsSection.svelte +11 -11
  87. package/dist/layouts-shard/filter.test.js +3 -3
  88. package/dist/layouts-shard/layoutsApi.test.js +3 -3
  89. package/dist/layouts-shard/layoutsShard.svelte.test.js +7 -7
  90. package/dist/migrations/mode-id-rename.js +2 -2
  91. package/dist/overlays/ConfirmDialog.svelte +8 -8
  92. package/dist/overlays/EntityAppearanceModal.svelte +19 -19
  93. package/dist/overlays/FloatFrame.svelte +20 -20
  94. package/dist/overlays/FloatLayer.svelte +1 -1
  95. package/dist/overlays/ModalFrame.svelte +5 -5
  96. package/dist/overlays/PopupFrame.svelte +4 -4
  97. package/dist/overlays/ToastItem.svelte +12 -12
  98. package/dist/overlays/float.d.ts +2 -2
  99. package/dist/overlays/float.js +3 -3
  100. package/dist/overlays/float.test.js +6 -6
  101. package/dist/overlays/modal.js +1 -1
  102. package/dist/overlays/modal.test.js +2 -2
  103. package/dist/overlays/parentHost.js +2 -2
  104. package/dist/overlays/parentHost.test.js +5 -5
  105. package/dist/overlays/popup.js +2 -2
  106. package/dist/overlays/popup.test.js +2 -2
  107. package/dist/overlays/roots.js +4 -4
  108. package/dist/overlays/toast.js +1 -1
  109. package/dist/overlays/types.js +3 -3
  110. package/dist/primitives/Button.svelte +16 -16
  111. package/dist/primitives/Collapsible.svelte +11 -11
  112. package/dist/primitives/ResizableSplitter.svelte +10 -10
  113. package/dist/primitives/TabbedPanel.svelte +19 -19
  114. package/dist/primitives/base.css +57 -57
  115. package/dist/primitives/widgets/ColorSwatch.svelte +15 -15
  116. package/dist/primitives/widgets/ColorSwatch.svelte.test.js +4 -4
  117. package/dist/primitives/widgets/Field.svelte +20 -20
  118. package/dist/primitives/widgets/FilePicker.svelte +13 -13
  119. package/dist/primitives/widgets/IconPicker.svelte +14 -14
  120. package/dist/primitives/widgets/IconToggleGroup.svelte +14 -14
  121. package/dist/primitives/widgets/NumberInput.svelte +17 -17
  122. package/dist/primitives/widgets/PickerList.svelte +17 -17
  123. package/dist/primitives/widgets/RangeSlider.svelte +16 -16
  124. package/dist/primitives/widgets/Segmented.svelte +16 -16
  125. package/dist/primitives/widgets/Select.svelte +14 -14
  126. package/dist/primitives/widgets/Select.svelte.test.js +2 -2
  127. package/dist/primitives/widgets/Slider.svelte +20 -20
  128. package/dist/primitives/widgets/SliderGroup.svelte +2 -2
  129. package/dist/primitives/widgets/Textarea.svelte +13 -13
  130. package/dist/primitives/widgets/_select-listbox.svelte +15 -15
  131. package/dist/projects/session-state.svelte.js +1 -1
  132. package/dist/projects-shard/DeleteProjectDialog.svelte +12 -12
  133. package/dist/projects-shard/ProjectManage.svelte +25 -25
  134. package/dist/projects-shard/ProjectsSection.svelte +12 -12
  135. package/dist/registry/installer.d.ts +2 -2
  136. package/dist/registry/installer.js +2 -2
  137. package/dist/registry/loader.js +1 -1
  138. package/dist/registry/permission-descriptions.js +2 -2
  139. package/dist/registry/permission-descriptions.test.js +1 -1
  140. package/dist/runtime/runVerb-shell.test.js +2 -2
  141. package/dist/runtime/runVerb.js +4 -4
  142. package/dist/runtime/runVerb.test.js +4 -4
  143. package/dist/satellite/SatelliteShell.svelte +2 -2
  144. package/dist/{shell → sh3}/views/KeysAndPeers.svelte +7 -7
  145. package/dist/sh3Api/headless.d.ts +4 -0
  146. package/dist/{shell-shard/shellApi.js → sh3Api/headless.js} +5 -5
  147. package/dist/{shell-shard/shellApi.svelte.test.js → sh3Api/headless.svelte.test.js} +11 -11
  148. package/dist/{shellApi → sh3Api}/window.js +2 -2
  149. package/dist/{shellApi → sh3Api}/window.test.js +1 -1
  150. package/dist/{shellRuntime.svelte.d.ts → sh3Runtime.svelte.d.ts} +11 -11
  151. package/dist/{shellRuntime.svelte.js → sh3Runtime.svelte.js} +10 -10
  152. package/dist/sh3Runtime.svelte.test.d.ts +1 -0
  153. package/dist/{shellRuntime.svelte.test.js → sh3Runtime.svelte.test.js} +10 -10
  154. package/dist/sh3core-shard/AppInfoView.svelte +19 -19
  155. package/dist/sh3core-shard/{ShellHome.svelte → Sh3Home.svelte} +82 -82
  156. package/dist/sh3core-shard/Sh3Home.svelte.d.ts +3 -0
  157. package/dist/sh3core-shard/{ShellTitle.svelte → Sh3Title.svelte} +11 -11
  158. package/dist/sh3core-shard/Sh3Title.svelte.d.ts +3 -0
  159. package/dist/sh3core-shard/appActions.js +3 -3
  160. package/dist/sh3core-shard/sh3coreShard.svelte.js +7 -7
  161. package/dist/shards/activate.svelte.d.ts +1 -1
  162. package/dist/shards/activate.svelte.js +6 -6
  163. package/dist/shards/types.d.ts +5 -5
  164. package/dist/shards/types.js +2 -2
  165. package/dist/shell-shard/CommandLine.svelte +7 -7
  166. package/dist/shell-shard/InputLine.svelte +3 -3
  167. package/dist/shell-shard/ScrollbackView.svelte +2 -2
  168. package/dist/shell-shard/Terminal.svelte +5 -5
  169. package/dist/shell-shard/Terminal.svelte.d.ts +2 -2
  170. package/dist/shell-shard/dispatch-custom.test.js +2 -2
  171. package/dist/shell-shard/dispatch-gating.test.js +2 -2
  172. package/dist/shell-shard/dispatch-invoke.test.js +2 -2
  173. package/dist/shell-shard/dispatch-to-terminal.js +1 -1
  174. package/dist/shell-shard/dispatch.d.ts +2 -2
  175. package/dist/shell-shard/dispatch.js +2 -2
  176. package/dist/shell-shard/entries/PromptEntry.svelte +4 -4
  177. package/dist/shell-shard/entries/StatusEntry.svelte +4 -4
  178. package/dist/shell-shard/entries/TextEntry.svelte +3 -3
  179. package/dist/shell-shard/locateSlot.test.js +9 -9
  180. package/dist/shell-shard/manifest.js +2 -2
  181. package/dist/shell-shard/registry.d.ts +2 -2
  182. package/dist/shell-shard/rich/AppCard.svelte +1 -1
  183. package/dist/shell-shard/rich/AppsTable.svelte +1 -1
  184. package/dist/shell-shard/rich/HelpTable.svelte +1 -1
  185. package/dist/shell-shard/rich/HistoryList.svelte +1 -1
  186. package/dist/shell-shard/rich/ViewsTable.svelte +1 -1
  187. package/dist/shell-shard/rich/ZoneTree.svelte +2 -2
  188. package/dist/shell-shard/shellShard.svelte.d.ts +1 -1
  189. package/dist/shell-shard/shellShard.svelte.js +8 -8
  190. package/dist/shell-shard/terminal-dispatch.test.js +2 -2
  191. package/dist/shell-shard/toolbar/Toolbar.svelte +4 -4
  192. package/dist/shell-shard/toolbar/Toolbar.svelte.d.ts +2 -2
  193. package/dist/shell-shard/toolbar/slots/BusySlot.svelte +2 -2
  194. package/dist/shell-shard/toolbar/slots/FocusLockSlot.svelte +2 -2
  195. package/dist/shell-shard/toolbar/slots/ModeSlot.svelte +1 -1
  196. package/dist/shell-shard/toolbar/slots/TargetShardSlot.svelte +1 -1
  197. package/dist/shell-shard/toolbar/slots.d.ts +3 -3
  198. package/dist/shell-shard/verbs/apps.js +3 -3
  199. package/dist/shell-shard/verbs/help.js +1 -1
  200. package/dist/shell-shard/verbs/help.svelte.test.js +1 -1
  201. package/dist/shell-shard/verbs/history.js +1 -1
  202. package/dist/shell-shard/verbs/mode.js +2 -2
  203. package/dist/shell-shard/verbs/mode.test.js +2 -2
  204. package/dist/shell-shard/verbs/shards.js +1 -1
  205. package/dist/shell-shard/verbs/views.js +8 -8
  206. package/dist/shell-shard/verbs/zones.js +2 -2
  207. package/dist/state/zones.svelte.d.ts +2 -2
  208. package/dist/state/zones.svelte.js +4 -4
  209. package/dist/theme.d.ts +3 -3
  210. package/dist/theme.js +5 -5
  211. package/dist/tokens.css +68 -68
  212. package/dist/verbs/types.d.ts +5 -5
  213. package/dist/verbs/types.js +1 -1
  214. package/dist/version.d.ts +1 -1
  215. package/dist/version.js +1 -1
  216. package/package.json +1 -1
  217. package/dist/Shell.svelte.d.ts +0 -5
  218. package/dist/sh3core-shard/ShellHome.svelte.d.ts +0 -3
  219. package/dist/sh3core-shard/ShellTitle.svelte.d.ts +0 -3
  220. package/dist/shell-shard/shellApi.d.ts +0 -4
  221. /package/dist/actions/{shellActions.test.d.ts → sh3Actions.test.d.ts} +0 -0
  222. /package/dist/{shell-shard/shellApi.svelte.test.d.ts → build.test.d.ts} +0 -0
  223. /package/dist/color/{shell-api.d.ts → sh3-api.d.ts} +0 -0
  224. /package/dist/conflicts/{shell-api.d.ts → sh3-api.d.ts} +0 -0
  225. /package/dist/{shell → sh3}/views/KeysAndPeers.svelte.d.ts +0 -0
  226. /package/dist/{shellApi/window.test.d.ts → sh3Api/headless.svelte.test.d.ts} +0 -0
  227. /package/dist/{shellApi → sh3Api}/window.d.ts +0 -0
  228. /package/dist/{shellRuntime.svelte.test.d.ts → sh3Api/window.test.d.ts} +0 -0
@@ -42,13 +42,13 @@
42
42
  pointer-events: auto;
43
43
  display: flex;
44
44
  align-items: center;
45
- gap: var(--shell-pad-md);
46
- padding: var(--shell-pad-sm) var(--shell-pad-md);
47
- background: var(--shell-grad-bg-elevated, var(--shell-bg-elevated));
48
- color: var(--shell-fg);
49
- border: 1px solid var(--shell-border-strong);
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(--shell-radius-sm);
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(--shell-font-mono);
61
+ font-family: var(--sh3-font-mono);
62
62
  font-size: 10px;
63
63
  letter-spacing: 0.5px;
64
- color: var(--shell-fg-muted);
64
+ color: var(--sh3-fg-muted);
65
65
  }
66
66
  .toast-message { flex: 1; }
67
67
 
68
- .toast-info { border-left-color: var(--shell-accent); }
69
- .toast-success { border-left-color: var(--shell-success); }
70
- .toast-warn { border-left-color: var(--shell-warning); }
71
- .toast-error { border-left-color: var(--shell-error); }
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); }
@@ -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 — shell resize while maximized does not refit.
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 Shell.svelte during boot. `getBounds` returns the current
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: () => {
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Float manager — layer 1 of the overlay stack.
3
3
  *
4
- * Public API (shell.float):
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 Shell boot. Before binding, an
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 Shell.svelte during boot. `getBounds` returns the current
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.shellOverlayHost = kind;
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.shellOverlayHost = 'modal';
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.shellOverlayHost = 'modal';
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-shell-overlay-host="float"', async () => {
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.shellOverlayHost).toBe('float');
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: 'Shell' }],
845
+ tabs: [{ slotId: 'restored:1', viewId: 'shell:terminal', label: 'Sh3' }],
846
846
  };
847
847
  const id = floatManager.openWithContent({
848
848
  content,
@@ -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.shellOverlayHost = 'modal';
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-shell-overlay-host="modal"', async () => {
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.shellOverlayHost).toBe('modal');
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-shell-overlay-host`. Modal hosts, popup hosts, and float frames
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-shell-overlay-host]');
14
+ return anchor.closest('[data-sh3-overlay-host]');
15
15
  }
@@ -4,9 +4,9 @@ afterEach(() => {
4
4
  document.body.innerHTML = '';
5
5
  });
6
6
  describe('findEnclosingOverlayHost', () => {
7
- it('returns the nearest ancestor with data-shell-overlay-host', () => {
7
+ it('returns the nearest ancestor with data-sh3-overlay-host', () => {
8
8
  const host = document.createElement('div');
9
- host.dataset.shellOverlayHost = 'modal';
9
+ host.dataset.sh3OverlayHost = 'modal';
10
10
  const inner = document.createElement('div');
11
11
  const anchor = document.createElement('button');
12
12
  inner.appendChild(anchor);
@@ -16,7 +16,7 @@ describe('findEnclosingOverlayHost', () => {
16
16
  });
17
17
  it('returns the anchor itself when it carries the marker', () => {
18
18
  const anchor = document.createElement('div');
19
- anchor.dataset.shellOverlayHost = 'float';
19
+ anchor.dataset.sh3OverlayHost = 'float';
20
20
  document.body.appendChild(anchor);
21
21
  expect(findEnclosingOverlayHost(anchor)).toBe(anchor);
22
22
  });
@@ -27,9 +27,9 @@ describe('findEnclosingOverlayHost', () => {
27
27
  });
28
28
  it('returns the innermost host when overlay hosts are nested', () => {
29
29
  const outer = document.createElement('div');
30
- outer.dataset.shellOverlayHost = 'modal';
30
+ outer.dataset.sh3OverlayHost = 'modal';
31
31
  const inner = document.createElement('div');
32
- inner.dataset.shellOverlayHost = 'float';
32
+ inner.dataset.sh3OverlayHost = 'float';
33
33
  const anchor = document.createElement('button');
34
34
  inner.appendChild(anchor);
35
35
  outer.appendChild(inner);
@@ -15,7 +15,7 @@
15
15
  * Implementation notes:
16
16
  * - The manager keeps at most one active entry. show() closes any
17
17
  * prior entry before opening a new one — so callers can wire a
18
- * menu button to `shell.popup.show(...)` without worrying about
18
+ * menu button to `sh3.popup.show(...)` without worrying about
19
19
  * toggling themselves.
20
20
  * - Dismissal listeners (pointerdown for outside-click, keydown for
21
21
  * Escape) are installed when the popup opens and removed on close.
@@ -83,7 +83,7 @@ function showPopup(Content, options, props) {
83
83
  const root = getLayerRoot('popup');
84
84
  const host = document.createElement('div');
85
85
  host.className = 'sh3-popup-host';
86
- host.dataset.shellOverlayHost = 'popup';
86
+ host.dataset.sh3OverlayHost = 'popup';
87
87
  host.style.position = 'absolute';
88
88
  host.style.inset = '0';
89
89
  host.style.pointerEvents = 'none'; // only the frame captures pointer events
@@ -138,10 +138,10 @@ describe('popup — overlay host marker', () => {
138
138
  teardownLayerRoot(layerRoot);
139
139
  vi.unstubAllGlobals();
140
140
  });
141
- it('marks the popup host with data-shell-overlay-host="popup"', () => {
141
+ it('marks the popup host with data-sh3-overlay-host="popup"', () => {
142
142
  popupManager.show(DummyFrame, { anchor: { x: 100, y: 100 } }, {});
143
143
  const host = layerRoot.querySelector('.sh3-popup-host');
144
144
  expect(host).not.toBeNull();
145
- expect(host.dataset.shellOverlayHost).toBe('popup');
145
+ expect(host.dataset.sh3OverlayHost).toBe('popup');
146
146
  });
147
147
  });
@@ -1,14 +1,14 @@
1
1
  /*
2
2
  * Layer root registry.
3
3
  *
4
- * Shell.svelte owns the six overlay root <div>s (one per layer). Overlay
4
+ * Sh3.svelte owns the six overlay root <div>s (one per layer). Overlay
5
5
  * managers — which are plain TypeScript modules, not Svelte components —
6
6
  * need DOM references to those roots so they can append transient content
7
7
  * (modals, popups, toasts) into the correct stacking context.
8
8
  *
9
- * Shell.svelte calls `registerLayerRoot(name, el)` on each root during its
9
+ * Sh3.svelte calls `registerLayerRoot(name, el)` on each root during its
10
10
  * own mount effect. Managers call `getLayerRoot(name)` lazily the first
11
- * time they need to open something, which is always *after* Shell has
11
+ * time they need to open something, which is always *after* Sh3 has
12
12
  * rendered because overlay triggers originate from views mounted into the
13
13
  * layout tree. No race; no DOM queries.
14
14
  *
@@ -25,7 +25,7 @@ export function getLayerRoot(layer) {
25
25
  const el = roots[layer];
26
26
  if (!el) {
27
27
  throw new Error(`Overlay layer "${layer}" root is not registered — ` +
28
- `Shell.svelte must mount before opening overlays on this layer.`);
28
+ `Sh3.svelte must mount before opening overlays on this layer.`);
29
29
  }
30
30
  return el;
31
31
  }
@@ -6,7 +6,7 @@
6
6
  * toastManager.clear()
7
7
  *
8
8
  * Semantics (from docs/design/layout.md):
9
- * - Toasts queue and stack vertically at the bottom-right of the shell.
9
+ * - Toasts queue and stack vertically at the bottom-right of the sh3.
10
10
  * - Each toast auto-dismisses after `duration` ms (default 3000).
11
11
  * `duration: Infinity` pins the toast until the caller calls close().
12
12
  * - Clicking a toast dismisses it immediately.
@@ -5,11 +5,11 @@
5
5
  * above the docked layout in an explicit numbered stack (0 = docked,
6
6
  * 1 = floating, 2 = drag preview, 3 = popup, 4 = modal, 5 = toast,
7
7
  * 6 = command palette). Phase 5 wires up layers 3/4/5; the rest are
8
- * stubbed as DOM roots in Shell.svelte but have no managers yet.
8
+ * stubbed as DOM roots in Sh3.svelte but have no managers yet.
9
9
  *
10
10
  * No component in the codebase writes a z-index directly — the only
11
- * z-index values live on the overlay root divs in Shell.svelte driven
12
- * by the --shell-z-layer-N tokens. Overlay content is appended into the
11
+ * z-index values live on the overlay root divs in Sh3.svelte driven
12
+ * by the --sh3-z-layer-N tokens. Overlay content is appended into the
13
13
  * corresponding layer root and inherits its stacking context.
14
14
  */
15
15
  export {};
@@ -112,21 +112,21 @@
112
112
  display: inline-flex;
113
113
  align-items: center;
114
114
  justify-content: center;
115
- gap: var(--shell-pad-sm);
115
+ gap: var(--sh3-pad-sm);
116
116
  padding: 6px 14px;
117
- background: var(--shell-accent);
118
- color: var(--shell-fg-on-accent);
117
+ background: var(--sh3-accent);
118
+ color: var(--sh3-fg-on-accent);
119
119
  border: none;
120
- border-radius: var(--shell-radius);
120
+ border-radius: var(--sh3-radius);
121
121
  cursor: pointer;
122
122
  font-family: inherit;
123
123
  font-size: 0.875rem;
124
- line-height: var(--shell-line);
124
+ line-height: var(--sh3-line);
125
125
  }
126
126
  .sh3-btn:hover:not(:disabled) { filter: brightness(1.12); }
127
127
  .sh3-btn:active:not(:disabled) { filter: brightness(0.92); }
128
128
  .sh3-btn:focus-visible {
129
- box-shadow: var(--shell-focus-ring);
129
+ box-shadow: var(--sh3-focus-ring);
130
130
  outline: none;
131
131
  }
132
132
  .sh3-btn:disabled {
@@ -135,33 +135,33 @@
135
135
  }
136
136
 
137
137
  .sh3-btn--alert {
138
- background: var(--shell-error);
139
- color: var(--shell-fg-on-error);
138
+ background: var(--sh3-error);
139
+ color: var(--sh3-fg-on-error);
140
140
  }
141
141
 
142
142
  .sh3-btn--ghost {
143
143
  background: transparent;
144
- color: var(--shell-fg);
145
- border: 1px solid var(--shell-border);
144
+ color: var(--sh3-fg);
145
+ border: 1px solid var(--sh3-border);
146
146
  }
147
147
  .sh3-btn--ghost:hover:not(:disabled) {
148
- background: var(--shell-bg-elevated);
148
+ background: var(--sh3-bg-elevated);
149
149
  filter: none;
150
150
  }
151
151
 
152
152
  .sh3-btn--icon {
153
153
  background: transparent;
154
- color: var(--shell-fg-muted);
155
- padding: var(--shell-pad-sm);
154
+ color: var(--sh3-fg-muted);
155
+ padding: var(--sh3-pad-sm);
156
156
  }
157
157
  .sh3-btn--icon:hover:not(:disabled) {
158
- background: var(--shell-bg-elevated);
159
- color: var(--shell-fg);
158
+ background: var(--sh3-bg-elevated);
159
+ color: var(--sh3-fg);
160
160
  filter: none;
161
161
  }
162
162
 
163
163
  .sh3-btn--icon-only {
164
- padding: var(--shell-pad-sm);
164
+ padding: var(--sh3-pad-sm);
165
165
  width: 26px;
166
166
  height: 26px;
167
167
  }
@@ -65,8 +65,8 @@
65
65
 
66
66
  <style>
67
67
  .sh3-collapsible {
68
- border: 1px solid var(--shell-border);
69
- border-radius: var(--shell-radius);
68
+ border: 1px solid var(--sh3-border);
69
+ border-radius: var(--sh3-radius);
70
70
  background: transparent;
71
71
  }
72
72
  .sh3-collapsible__head {
@@ -74,28 +74,28 @@
74
74
  width: 100%;
75
75
  display: inline-flex;
76
76
  align-items: center;
77
- gap: var(--shell-pad-sm);
78
- padding: var(--shell-pad-sm) 12px;
77
+ gap: var(--sh3-pad-sm);
78
+ padding: var(--sh3-pad-sm) 12px;
79
79
  background: transparent;
80
- color: var(--shell-fg);
80
+ color: var(--sh3-fg);
81
81
  border: none;
82
82
  border-radius: inherit;
83
83
  cursor: pointer;
84
84
  font-family: inherit;
85
85
  font-size: 0.875rem;
86
- line-height: var(--shell-line);
86
+ line-height: var(--sh3-line);
87
87
  text-align: left;
88
88
  }
89
- .sh3-collapsible__head:hover { background: var(--shell-bg-elevated); }
89
+ .sh3-collapsible__head:hover { background: var(--sh3-bg-elevated); }
90
90
  .sh3-collapsible__head:focus-visible {
91
- box-shadow: var(--shell-focus-ring);
91
+ box-shadow: var(--sh3-focus-ring);
92
92
  outline: none;
93
93
  }
94
94
  .sh3-collapsible__caret {
95
95
  width: 12px;
96
96
  height: 12px;
97
97
  flex-shrink: 0;
98
- color: var(--shell-fg-muted);
98
+ color: var(--sh3-fg-muted);
99
99
  }
100
100
  .sh3-collapsible--open .sh3-collapsible__caret {
101
101
  transform: rotate(90deg);
@@ -104,7 +104,7 @@
104
104
  flex: 1;
105
105
  }
106
106
  .sh3-collapsible__body {
107
- padding: var(--shell-pad-sm) 12px;
108
- border-top: 1px solid var(--shell-border);
107
+ padding: var(--sh3-pad-sm) 12px;
108
+ border-top: 1px solid var(--sh3-border);
109
109
  }
110
110
  </style>
@@ -295,16 +295,16 @@
295
295
  display: flex;
296
296
  align-items: center;
297
297
  justify-content: center;
298
- background: var(--shell-grad-bg-elevated, var(--shell-bg-elevated));
298
+ background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
299
299
  border: none;
300
- color: var(--shell-fg-muted);
300
+ color: var(--sh3-fg-muted);
301
301
  cursor: pointer;
302
302
  padding: 0;
303
303
  font-size: 10px;
304
304
  }
305
305
  .collapse-header:hover {
306
- color: var(--shell-fg);
307
- background: var(--shell-accent-muted);
306
+ color: var(--sh3-fg);
307
+ background: var(--sh3-accent-muted);
308
308
  }
309
309
  /* Suppress misleading hover feedback during drag-reorganize. */
310
310
  :global(body[data-dragging]) .collapse-header {
@@ -322,23 +322,23 @@
322
322
  .collapse-header.expanded.horizontal {
323
323
  width: 16px;
324
324
  height: 100%;
325
- border-right: 1px solid var(--shell-border);
325
+ border-right: 1px solid var(--sh3-border);
326
326
  }
327
327
  .collapse-header.expanded.vertical {
328
328
  width: 100%;
329
329
  height: 16px;
330
- border-bottom: 1px solid var(--shell-border);
330
+ border-bottom: 1px solid var(--sh3-border);
331
331
  }
332
332
 
333
333
  .splitter-handle {
334
334
  flex: 0 0 auto;
335
- background: var(--shell-border);
335
+ background: var(--sh3-border);
336
336
  transition: background-color 120ms ease;
337
337
  touch-action: none;
338
338
  }
339
339
  .splitter-handle:hover,
340
340
  .splitter-handle.dragging {
341
- background: var(--shell-accent);
341
+ background: var(--sh3-accent);
342
342
  }
343
343
  :global(body[data-dragging]) .splitter-handle {
344
344
  pointer-events: none;
@@ -350,11 +350,11 @@
350
350
  .splitter-handle.frozen {
351
351
  cursor: default;
352
352
  pointer-events: none;
353
- background: var(--shell-border);
353
+ background: var(--sh3-border);
354
354
  opacity: 0.5;
355
355
  }
356
356
  .splitter-handle.frozen:hover {
357
- background: var(--shell-border);
357
+ background: var(--sh3-border);
358
358
  }
359
359
 
360
360
  .horizontal > .splitter-handle {
@@ -210,7 +210,7 @@
210
210
  height: 100%;
211
211
  min-width: 0;
212
212
  min-height: 0;
213
- background: var(--shell-grad-bg, var(--shell-bg));
213
+ background: var(--sh3-grad-bg, var(--sh3-bg));
214
214
  }
215
215
 
216
216
  .tab-strip {
@@ -218,9 +218,9 @@
218
218
  flex: 0 0 auto;
219
219
  display: flex;
220
220
  gap: 1px;
221
- background: var(--shell-grad-bg-sunken, var(--shell-bg-sunken));
222
- border-bottom: 1px solid var(--shell-border);
223
- padding: 0 var(--shell-pad-sm);
221
+ background: var(--sh3-grad-bg-sunken, var(--sh3-bg-sunken));
222
+ border-bottom: 1px solid var(--sh3-border);
223
+ padding: 0 var(--sh3-pad-sm);
224
224
  user-select: none;
225
225
  }
226
226
 
@@ -228,14 +228,14 @@
228
228
  appearance: none;
229
229
  background: transparent;
230
230
  border: none;
231
- color: var(--shell-fg-muted);
231
+ color: var(--sh3-fg-muted);
232
232
  font: inherit;
233
233
  font-size: 12px;
234
- padding: var(--shell-pad-sm) var(--shell-pad-md);
234
+ padding: var(--sh3-pad-sm) var(--sh3-pad-md);
235
235
  margin-top: 2px;
236
236
  display: inline-flex;
237
237
  align-items: center;
238
- gap: var(--shell-pad-sm);
238
+ gap: var(--sh3-pad-sm);
239
239
  cursor: pointer;
240
240
  border-top: 2px solid transparent;
241
241
  border-radius: 2px 2px 0 0;
@@ -246,13 +246,13 @@
246
246
  touch-action: none;
247
247
  }
248
248
  .tab:hover {
249
- color: var(--shell-fg);
250
- background: var(--shell-grad-bg-elevated, var(--shell-bg-elevated));
249
+ color: var(--sh3-fg);
250
+ background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
251
251
  }
252
252
  .tab.active {
253
- color: var(--shell-fg);
254
- background: var(--shell-grad-bg, var(--shell-bg));
255
- border-top-color: var(--shell-accent);
253
+ color: var(--sh3-fg);
254
+ background: var(--sh3-grad-bg, var(--sh3-bg));
255
+ border-top-color: var(--sh3-accent);
256
256
  }
257
257
  .tab-icon { font-size: 11px; }
258
258
  .tab-label { white-space: nowrap; }
@@ -261,7 +261,7 @@
261
261
  width: 8px;
262
262
  height: 8px;
263
263
  border-radius: 50%;
264
- background: var(--shell-accent);
264
+ background: var(--sh3-accent);
265
265
  flex-shrink: 0;
266
266
  }
267
267
  .tab-close {
@@ -269,22 +269,22 @@
269
269
  font-size: 10px;
270
270
  line-height: 1;
271
271
  padding: 2px;
272
- border-radius: var(--shell-radius-sm);
273
- color: var(--shell-fg-muted);
272
+ border-radius: var(--sh3-radius-sm);
273
+ color: var(--sh3-fg-muted);
274
274
  cursor: pointer;
275
275
  flex-shrink: 0;
276
276
  margin-left: auto;
277
277
  }
278
278
  .tab-close:hover {
279
- color: var(--shell-fg);
280
- background: var(--shell-bg-sunken);
279
+ color: var(--sh3-fg);
280
+ background: var(--sh3-bg-sunken);
281
281
  }
282
282
 
283
283
  .drop-indicator {
284
284
  position: absolute;
285
285
  width: 2px;
286
- background: var(--shell-accent);
287
- box-shadow: 0 0 6px var(--shell-accent);
286
+ background: var(--sh3-accent);
287
+ box-shadow: 0 0 6px var(--sh3-accent);
288
288
  pointer-events: none;
289
289
  border-radius: 1px;
290
290
  }