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.
Files changed (224) 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/color/api.d.ts +1 -1
  45. package/dist/color/api.js +1 -1
  46. package/dist/color/{shell-api.js → sh3-api.js} +3 -3
  47. package/dist/conflicts/ConflictModal.svelte +1 -1
  48. package/dist/conflicts/ConflictModal.svelte.d.ts +1 -1
  49. package/dist/conflicts/DetailView.svelte +19 -19
  50. package/dist/conflicts/PromptView.svelte +9 -9
  51. package/dist/conflicts/adapter-documents.js +1 -1
  52. package/dist/conflicts/api.d.ts +1 -1
  53. package/dist/conflicts/api.js +2 -2
  54. package/dist/conflicts/renderer-registry.js +1 -1
  55. package/dist/conflicts/renderers/MetaOnlyRenderer.svelte +8 -8
  56. package/dist/conflicts/renderers/TextDiffRenderer.svelte +15 -15
  57. package/dist/conflicts/renderers/index.js +1 -1
  58. package/dist/conflicts/resolve-primitive.js +1 -1
  59. package/dist/conflicts/{shell-api.js → sh3-api.js} +2 -2
  60. package/dist/contributions/registry.js +1 -1
  61. package/dist/createShell.d.ts +2 -2
  62. package/dist/createShell.js +6 -6
  63. package/dist/host-entry.d.ts +1 -1
  64. package/dist/host-entry.js +2 -2
  65. package/dist/host.js +2 -2
  66. package/dist/index.d.ts +1 -1
  67. package/dist/index.js +2 -2
  68. package/dist/keys/ConsentDialog.svelte +15 -15
  69. package/dist/keys/consent.svelte.d.ts +2 -2
  70. package/dist/keys/consent.svelte.js +3 -3
  71. package/dist/keys/revocation-bus.svelte.d.ts +3 -3
  72. package/dist/keys/revocation-bus.svelte.js +3 -3
  73. package/dist/layout/DragPreview.svelte +9 -9
  74. package/dist/layout/LayoutRenderer.browser.test.js +2 -2
  75. package/dist/layout/LayoutRenderer.svelte +4 -4
  76. package/dist/layout/SlotContainer.svelte +12 -12
  77. package/dist/layout/SlotDropZone.svelte +2 -2
  78. package/dist/layout/inspection.d.ts +1 -1
  79. package/dist/layout/inspection.js +1 -1
  80. package/dist/layout/store.svelte.js +3 -3
  81. package/dist/layout/types.d.ts +1 -1
  82. package/dist/layouts-shard/LayoutSaveModal.svelte +20 -20
  83. package/dist/layouts-shard/LayoutsSection.svelte +11 -11
  84. package/dist/layouts-shard/filter.test.js +3 -3
  85. package/dist/layouts-shard/layoutsApi.test.js +3 -3
  86. package/dist/layouts-shard/layoutsShard.svelte.test.js +7 -7
  87. package/dist/migrations/mode-id-rename.js +2 -2
  88. package/dist/overlays/ConfirmDialog.svelte +8 -8
  89. package/dist/overlays/EntityAppearanceModal.svelte +19 -19
  90. package/dist/overlays/FloatFrame.svelte +20 -20
  91. package/dist/overlays/FloatLayer.svelte +1 -1
  92. package/dist/overlays/ModalFrame.svelte +5 -5
  93. package/dist/overlays/PopupFrame.svelte +4 -4
  94. package/dist/overlays/ToastItem.svelte +12 -12
  95. package/dist/overlays/float.d.ts +2 -2
  96. package/dist/overlays/float.js +3 -3
  97. package/dist/overlays/float.test.js +6 -6
  98. package/dist/overlays/modal.js +1 -1
  99. package/dist/overlays/modal.test.js +2 -2
  100. package/dist/overlays/parentHost.js +2 -2
  101. package/dist/overlays/parentHost.test.js +5 -5
  102. package/dist/overlays/popup.js +2 -2
  103. package/dist/overlays/popup.test.js +2 -2
  104. package/dist/overlays/roots.js +4 -4
  105. package/dist/overlays/toast.js +1 -1
  106. package/dist/overlays/types.js +3 -3
  107. package/dist/primitives/Button.svelte +16 -16
  108. package/dist/primitives/Collapsible.svelte +11 -11
  109. package/dist/primitives/ResizableSplitter.svelte +10 -10
  110. package/dist/primitives/TabbedPanel.svelte +19 -19
  111. package/dist/primitives/base.css +57 -57
  112. package/dist/primitives/widgets/ColorSwatch.svelte +15 -15
  113. package/dist/primitives/widgets/ColorSwatch.svelte.test.js +4 -4
  114. package/dist/primitives/widgets/Field.svelte +20 -20
  115. package/dist/primitives/widgets/FilePicker.svelte +13 -13
  116. package/dist/primitives/widgets/IconPicker.svelte +14 -14
  117. package/dist/primitives/widgets/IconToggleGroup.svelte +14 -14
  118. package/dist/primitives/widgets/NumberInput.svelte +17 -17
  119. package/dist/primitives/widgets/PickerList.svelte +17 -17
  120. package/dist/primitives/widgets/RangeSlider.svelte +16 -16
  121. package/dist/primitives/widgets/Segmented.svelte +16 -16
  122. package/dist/primitives/widgets/Select.svelte +14 -14
  123. package/dist/primitives/widgets/Select.svelte.test.js +2 -2
  124. package/dist/primitives/widgets/Slider.svelte +20 -20
  125. package/dist/primitives/widgets/SliderGroup.svelte +2 -2
  126. package/dist/primitives/widgets/Textarea.svelte +13 -13
  127. package/dist/primitives/widgets/_select-listbox.svelte +15 -15
  128. package/dist/projects/session-state.svelte.js +1 -1
  129. package/dist/projects-shard/DeleteProjectDialog.svelte +12 -12
  130. package/dist/projects-shard/ProjectManage.svelte +25 -25
  131. package/dist/projects-shard/ProjectsSection.svelte +12 -12
  132. package/dist/registry/installer.d.ts +2 -2
  133. package/dist/registry/installer.js +2 -2
  134. package/dist/registry/loader.js +1 -1
  135. package/dist/registry/permission-descriptions.js +2 -2
  136. package/dist/registry/permission-descriptions.test.js +1 -1
  137. package/dist/runtime/runVerb-shell.test.js +2 -2
  138. package/dist/runtime/runVerb.js +4 -4
  139. package/dist/runtime/runVerb.test.js +4 -4
  140. package/dist/satellite/SatelliteShell.svelte +2 -2
  141. package/dist/{shell → sh3}/views/KeysAndPeers.svelte +7 -7
  142. package/dist/sh3Api/headless.d.ts +4 -0
  143. package/dist/{shell-shard/shellApi.js → sh3Api/headless.js} +5 -5
  144. package/dist/{shell-shard/shellApi.svelte.test.js → sh3Api/headless.svelte.test.js} +11 -11
  145. package/dist/{shellApi → sh3Api}/window.js +2 -2
  146. package/dist/{shellApi → sh3Api}/window.test.js +1 -1
  147. package/dist/{shellRuntime.svelte.d.ts → sh3Runtime.svelte.d.ts} +22 -10
  148. package/dist/{shellRuntime.svelte.js → sh3Runtime.svelte.js} +12 -10
  149. package/dist/sh3Runtime.svelte.test.d.ts +1 -0
  150. package/dist/sh3Runtime.svelte.test.js +46 -0
  151. package/dist/sh3core-shard/AppInfoView.svelte +19 -19
  152. package/dist/sh3core-shard/{ShellHome.svelte → Sh3Home.svelte} +82 -82
  153. package/dist/sh3core-shard/Sh3Home.svelte.d.ts +3 -0
  154. package/dist/sh3core-shard/{ShellTitle.svelte → Sh3Title.svelte} +11 -11
  155. package/dist/sh3core-shard/Sh3Title.svelte.d.ts +3 -0
  156. package/dist/sh3core-shard/appActions.js +3 -3
  157. package/dist/sh3core-shard/sh3coreShard.svelte.js +7 -7
  158. package/dist/shards/activate.svelte.d.ts +1 -1
  159. package/dist/shards/activate.svelte.js +6 -6
  160. package/dist/shards/types.d.ts +5 -5
  161. package/dist/shards/types.js +2 -2
  162. package/dist/shell-shard/CommandLine.svelte +7 -7
  163. package/dist/shell-shard/InputLine.svelte +3 -3
  164. package/dist/shell-shard/ScrollbackView.svelte +2 -2
  165. package/dist/shell-shard/Terminal.svelte +5 -5
  166. package/dist/shell-shard/Terminal.svelte.d.ts +2 -2
  167. package/dist/shell-shard/dispatch-custom.test.js +2 -2
  168. package/dist/shell-shard/dispatch-gating.test.js +2 -2
  169. package/dist/shell-shard/dispatch-invoke.test.js +2 -2
  170. package/dist/shell-shard/dispatch-to-terminal.js +1 -1
  171. package/dist/shell-shard/dispatch.d.ts +2 -2
  172. package/dist/shell-shard/dispatch.js +2 -2
  173. package/dist/shell-shard/entries/PromptEntry.svelte +4 -4
  174. package/dist/shell-shard/entries/StatusEntry.svelte +4 -4
  175. package/dist/shell-shard/entries/TextEntry.svelte +3 -3
  176. package/dist/shell-shard/locateSlot.test.js +9 -9
  177. package/dist/shell-shard/manifest.js +2 -2
  178. package/dist/shell-shard/registry.d.ts +2 -2
  179. package/dist/shell-shard/rich/AppCard.svelte +1 -1
  180. package/dist/shell-shard/rich/AppsTable.svelte +1 -1
  181. package/dist/shell-shard/rich/HelpTable.svelte +1 -1
  182. package/dist/shell-shard/rich/HistoryList.svelte +1 -1
  183. package/dist/shell-shard/rich/ViewsTable.svelte +1 -1
  184. package/dist/shell-shard/rich/ZoneTree.svelte +2 -2
  185. package/dist/shell-shard/shellShard.svelte.d.ts +1 -1
  186. package/dist/shell-shard/shellShard.svelte.js +8 -8
  187. package/dist/shell-shard/terminal-dispatch.test.js +2 -2
  188. package/dist/shell-shard/toolbar/Toolbar.svelte +4 -4
  189. package/dist/shell-shard/toolbar/Toolbar.svelte.d.ts +2 -2
  190. package/dist/shell-shard/toolbar/slots/BusySlot.svelte +2 -2
  191. package/dist/shell-shard/toolbar/slots/FocusLockSlot.svelte +2 -2
  192. package/dist/shell-shard/toolbar/slots/ModeSlot.svelte +1 -1
  193. package/dist/shell-shard/toolbar/slots/TargetShardSlot.svelte +1 -1
  194. package/dist/shell-shard/toolbar/slots.d.ts +3 -3
  195. package/dist/shell-shard/verbs/apps.js +3 -3
  196. package/dist/shell-shard/verbs/help.js +1 -1
  197. package/dist/shell-shard/verbs/help.svelte.test.js +1 -1
  198. package/dist/shell-shard/verbs/history.js +1 -1
  199. package/dist/shell-shard/verbs/mode.js +2 -2
  200. package/dist/shell-shard/verbs/mode.test.js +2 -2
  201. package/dist/shell-shard/verbs/shards.js +1 -1
  202. package/dist/shell-shard/verbs/views.js +8 -8
  203. package/dist/shell-shard/verbs/zones.js +2 -2
  204. package/dist/state/zones.svelte.d.ts +2 -2
  205. package/dist/state/zones.svelte.js +4 -4
  206. package/dist/theme.d.ts +3 -3
  207. package/dist/theme.js +5 -5
  208. package/dist/tokens.css +68 -68
  209. package/dist/verbs/types.d.ts +5 -5
  210. package/dist/verbs/types.js +1 -1
  211. package/dist/version.d.ts +1 -1
  212. package/dist/version.js +1 -1
  213. package/package.json +1 -1
  214. package/dist/Shell.svelte.d.ts +0 -5
  215. package/dist/sh3core-shard/ShellHome.svelte.d.ts +0 -3
  216. package/dist/sh3core-shard/ShellTitle.svelte.d.ts +0 -3
  217. package/dist/shell-shard/shellApi.d.ts +0 -4
  218. /package/dist/actions/{shellActions.test.d.ts → sh3Actions.test.d.ts} +0 -0
  219. /package/dist/color/{shell-api.d.ts → sh3-api.d.ts} +0 -0
  220. /package/dist/conflicts/{shell-api.d.ts → sh3-api.d.ts} +0 -0
  221. /package/dist/{shell → sh3}/views/KeysAndPeers.svelte.d.ts +0 -0
  222. /package/dist/{shell-shard/shellApi.svelte.test.d.ts → sh3Api/headless.svelte.test.d.ts} +0 -0
  223. /package/dist/{shellApi → sh3Api}/window.d.ts +0 -0
  224. /package/dist/{shellApi → sh3Api}/window.test.d.ts +0 -0
@@ -90,30 +90,30 @@
90
90
  }
91
91
  .sh3-brand {
92
92
  font-weight: 600;
93
- color: var(--shell-accent);
93
+ color: var(--sh3-accent);
94
94
  letter-spacing: 0.5px;
95
95
  }
96
96
  .sh3-brand-app {
97
- color: var(--shell-fg);
97
+ color: var(--sh3-fg);
98
98
  }
99
99
  .sh3-brand-project {
100
- color: var(--shell-fg);
100
+ color: var(--sh3-fg);
101
101
  }
102
102
  .sh3-brand-sep {
103
- color: var(--shell-fg-muted);
103
+ color: var(--sh3-fg-muted);
104
104
  margin: 0 4px;
105
105
  }
106
106
  .sh3-brand-crumb {
107
107
  background: transparent;
108
108
  border: 0;
109
- color: var(--shell-fg);
109
+ color: var(--sh3-fg);
110
110
  font: inherit;
111
111
  cursor: pointer;
112
112
  padding: 2px 6px;
113
- border-radius: var(--shell-radius-sm, 3px);
113
+ border-radius: var(--sh3-radius-sm, 3px);
114
114
  }
115
115
  .sh3-brand-crumb:hover {
116
- background: var(--shell-bg-elevated);
116
+ background: var(--sh3-bg-elevated);
117
117
  }
118
118
  .sh3-brand-clickable {
119
119
  background: transparent;
@@ -121,9 +121,9 @@
121
121
  font: inherit;
122
122
  cursor: pointer;
123
123
  padding: 2px 6px;
124
- border-radius: var(--shell-radius-sm, 3px);
124
+ border-radius: var(--sh3-radius-sm, 3px);
125
125
  }
126
126
  .sh3-brand-clickable:hover {
127
- background: var(--shell-bg-elevated);
127
+ background: var(--sh3-bg-elevated);
128
128
  }
129
129
  </style>
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  /*
3
- * <Shell> — top-level chrome component.
3
+ * <Sh3> — top-level chrome component.
4
4
  *
5
5
  * Owns the tab bar, status bar, docked content area (layer 0), and the
6
6
  * six overlay roots (layers 1-6). This is a stub implementation for
@@ -51,8 +51,8 @@
51
51
  ];
52
52
 
53
53
  // Populated by bind:this during render; registered with the overlay
54
- // module via $effect after mount so layer managers (shell.modal,
55
- // shell.popup, shell.toast) can find their target DOM roots.
54
+ // module via $effect after mount so layer managers (sh3.modal,
55
+ // sh3.popup, sh3.toast) can find their target DOM roots.
56
56
  const overlayRoots: Partial<Record<OverlayLayer, HTMLDivElement>> = $state({});
57
57
 
58
58
  $effect(() => {
@@ -86,7 +86,7 @@
86
86
  // Open the server-sent events stream for key revocations.
87
87
  // Forwards server-side revocations to the local revocation bus so that
88
88
  // onKeyRevoked fires on the owning shard even when the user revokes from
89
- // the Keys & Peers shell view (not via the shard's own ctx.keys.revoke).
89
+ // the Keys & Peers sh3 view (not via the shard's own ctx.keys.revoke).
90
90
  //
91
91
  // Gated on isAuthenticated() because /api/keys/events requires a tenant
92
92
  // (via tenantRequired middleware) — opening it as a guest produces a 401
@@ -99,33 +99,33 @@
99
99
  });
100
100
  </script>
101
101
 
102
- <div class="shell">
103
- <header class="shell-tabbar" data-shell-region="tabbar">
102
+ <div class="sh3">
103
+ <header class="sh3-tabbar" data-sh3-region="tabbar">
104
104
  <button
105
105
  type="button"
106
- class="shell-tabbar-home-button"
106
+ class="sh3-tabbar-home-button"
107
107
  onclick={() => returnToHome()}
108
108
  disabled={onHome}
109
109
  title="Home"
110
110
  >
111
- <svg class="shell-tabbar-home-icon" aria-hidden="true">
111
+ <svg class="sh3-tabbar-home-icon" aria-hidden="true">
112
112
  <use href="{iconsUrl}#house" />
113
113
  </svg>
114
114
  </button>
115
115
  <BrandSlot />
116
116
  <MenuBar />
117
117
  {#if authenticated && user}
118
- <div class="shell-tabbar-user">
119
- <span class="shell-tabbar-user-name">{user.displayName}</span>
120
- <span class="shell-tabbar-tag">{elevated ? 'admin' : 'user'}</span>
118
+ <div class="sh3-tabbar-user">
119
+ <span class="sh3-tabbar-user-name">{user.displayName}</span>
120
+ <span class="sh3-tabbar-tag">{elevated ? 'admin' : 'user'}</span>
121
121
  {#if !isLocalOwner()}
122
122
  <button
123
123
  type="button"
124
- class="shell-tabbar-signout"
124
+ class="sh3-tabbar-signout"
125
125
  onclick={() => logout()}
126
126
  title="Sign out"
127
127
  >
128
- <svg class="shell-tabbar-signout-icon" aria-hidden="true">
128
+ <svg class="sh3-tabbar-signout-icon" aria-hidden="true">
129
129
  <use href="{iconsUrl}#log-out" />
130
130
  </svg>
131
131
  </button>
@@ -136,26 +136,26 @@
136
136
 
137
137
  <GuestBanner />
138
138
 
139
- <main class="shell-content" data-shell-region="content" data-shell-layer="0">
139
+ <main class="sh3-content" data-sh3-region="content" data-sh3-layer="0">
140
140
  <LayoutRenderer />
141
141
  </main>
142
142
 
143
- <footer class="shell-statusbar" data-shell-region="statusbar">
144
- <!-- alpha tag moved to ShellHome title row -->
143
+ <footer class="sh3-statusbar" data-sh3-region="statusbar">
144
+ <!-- alpha tag moved to Sh3Home title row -->
145
145
  </footer>
146
146
 
147
147
  <!--
148
- Overlay roots. Each is absolutely positioned over the entire shell with
148
+ Overlay roots. Each is absolutely positioned over the entire sh3 with
149
149
  pointer-events: none by default; layer managers enable pointer events on
150
150
  the specific surfaces they portal in.
151
151
  -->
152
- <div class="shell-overlays" aria-hidden="true">
152
+ <div class="sh3-overlays" aria-hidden="true">
153
153
  {#each overlayLayers as { layer, name } (layer)}
154
154
  <div
155
- class="shell-overlay-root"
156
- data-shell-overlay={name}
157
- data-shell-layer={layer}
158
- style="z-index: var(--shell-z-layer-{layer});"
155
+ class="sh3-overlay-root"
156
+ data-sh3-overlay={name}
157
+ data-sh3-layer={layer}
158
+ style="z-index: var(--sh3-z-layer-{layer});"
159
159
  bind:this={overlayRoots[name]}
160
160
  >
161
161
  {#if name === 'floating'}
@@ -168,7 +168,7 @@
168
168
  </div>
169
169
 
170
170
  <!--
171
- Shell-owned consent dialog for ctx.keys.mint().
171
+ Sh3-owned consent dialog for ctx.keys.mint().
172
172
  Mounted unconditionally so the listener is always registered; it renders
173
173
  nothing until a shard calls ctx.keys.mint().
174
174
  z-index 9999 (inline in the component) keeps it above all overlay layers.
@@ -177,58 +177,58 @@
177
177
  </div>
178
178
 
179
179
  <style>
180
- .shell {
180
+ .sh3 {
181
181
  display: grid;
182
- grid-template-rows: var(--shell-tabbar-height) auto 1fr var(--shell-statusbar-height);
182
+ grid-template-rows: var(--sh3-tabbar-height) auto 1fr var(--sh3-statusbar-height);
183
183
  height: 100%;
184
184
  width: 100%;
185
185
  position: relative;
186
- background: var(--shell-grad-bg, var(--shell-bg));
187
- color: var(--shell-fg);
186
+ background: var(--sh3-grad-bg, var(--sh3-bg));
187
+ color: var(--sh3-fg);
188
188
  }
189
189
 
190
- .shell-tabbar {
190
+ .sh3-tabbar {
191
191
  display: grid;
192
192
  grid-template-columns: auto auto 1fr auto;
193
193
  align-items: center;
194
- gap: var(--shell-pad-md);
195
- padding: 0 var(--shell-pad-md);
196
- background: var(--shell-grad-bg-elevated, var(--shell-bg-elevated));
197
- border-bottom: 1px solid var(--shell-border);
194
+ gap: var(--sh3-pad-md);
195
+ padding: 0 var(--sh3-pad-md);
196
+ background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
197
+ border-bottom: 1px solid var(--sh3-border);
198
198
  user-select: none;
199
199
  }
200
200
 
201
- .shell-content {
201
+ .sh3-content {
202
202
  position: relative;
203
203
  overflow: hidden;
204
- background: var(--shell-grad-bg, var(--shell-bg));
204
+ background: var(--sh3-grad-bg, var(--sh3-bg));
205
205
  min-width: 0;
206
206
  min-height: 0;
207
207
  }
208
- .shell-statusbar {
208
+ .sh3-statusbar {
209
209
  display: flex;
210
210
  align-items: center;
211
211
  justify-content: space-between;
212
- padding: 0 var(--shell-pad-md);
213
- background: var(--shell-grad-bg-sunken, var(--shell-bg-sunken));
214
- border-top: 1px solid var(--shell-border);
215
- color: var(--shell-fg-muted);
212
+ padding: 0 var(--sh3-pad-md);
213
+ background: var(--sh3-grad-bg-sunken, var(--sh3-bg-sunken));
214
+ border-top: 1px solid var(--sh3-border);
215
+ color: var(--sh3-fg-muted);
216
216
  font-size: 11px;
217
217
  user-select: none;
218
218
  }
219
219
 
220
- .shell-overlays {
220
+ .sh3-overlays {
221
221
  position: absolute;
222
222
  inset: 0;
223
223
  pointer-events: none;
224
224
  }
225
- .shell-overlay-root {
225
+ .sh3-overlay-root {
226
226
  position: absolute;
227
227
  inset: 0;
228
228
  pointer-events: none;
229
229
  }
230
230
 
231
- .shell-tabbar-home-button {
231
+ .sh3-tabbar-home-button {
232
232
  display: flex;
233
233
  align-items: center;
234
234
  justify-content: center;
@@ -236,43 +236,43 @@
236
236
  height: 24px;
237
237
  padding: 0;
238
238
  background: transparent;
239
- color: var(--shell-fg-muted);
240
- border: 1px solid var(--shell-border);
239
+ color: var(--sh3-fg-muted);
240
+ border: 1px solid var(--sh3-border);
241
241
  }
242
- .shell-tabbar-home-button:hover:not(:disabled) {
243
- color: var(--shell-fg);
244
- border-color: var(--shell-fg-muted);
242
+ .sh3-tabbar-home-button:hover:not(:disabled) {
243
+ color: var(--sh3-fg);
244
+ border-color: var(--sh3-fg-muted);
245
245
  }
246
- .shell-tabbar-home-button:disabled {
247
- color: var(--shell-fg-subtle);
248
- border-color: var(--shell-border);
246
+ .sh3-tabbar-home-button:disabled {
247
+ color: var(--sh3-fg-subtle);
248
+ border-color: var(--sh3-border);
249
249
  cursor: default;
250
250
  }
251
- .shell-tabbar-home-icon {
251
+ .sh3-tabbar-home-icon {
252
252
  width: 14px;
253
253
  height: 14px;
254
254
  }
255
255
 
256
- .shell-tabbar-user {
256
+ .sh3-tabbar-user {
257
257
  display: flex;
258
258
  align-items: center;
259
259
  gap: 6px;
260
260
  }
261
- .shell-tabbar-user-name {
261
+ .sh3-tabbar-user-name {
262
262
  font-size: 12px;
263
- color: var(--shell-fg-subtle);
263
+ color: var(--sh3-fg-subtle);
264
264
  }
265
- .shell-tabbar-tag {
265
+ .sh3-tabbar-tag {
266
266
  font-size: 9px;
267
267
  font-weight: 700;
268
268
  text-transform: uppercase;
269
269
  letter-spacing: 0.08em;
270
- color: var(--shell-fg-on-accent);
271
- background: var(--shell-accent);
270
+ color: var(--sh3-fg-on-accent);
271
+ background: var(--sh3-accent);
272
272
  padding: 1px 6px;
273
- border-radius: var(--shell-radius-md);
273
+ border-radius: var(--sh3-radius-md);
274
274
  }
275
- .shell-tabbar-signout {
275
+ .sh3-tabbar-signout {
276
276
  display: flex;
277
277
  align-items: center;
278
278
  justify-content: center;
@@ -280,14 +280,14 @@
280
280
  height: 24px;
281
281
  padding: 0;
282
282
  background: transparent;
283
- color: var(--shell-fg-muted);
284
- border: 1px solid var(--shell-border);
283
+ color: var(--sh3-fg-muted);
284
+ border: 1px solid var(--sh3-border);
285
285
  }
286
- .shell-tabbar-signout:hover {
287
- color: var(--shell-fg);
288
- border-color: var(--shell-fg-muted);
286
+ .sh3-tabbar-signout:hover {
287
+ color: var(--sh3-fg);
288
+ border-color: var(--sh3-fg-muted);
289
289
  }
290
- .shell-tabbar-signout-icon {
290
+ .sh3-tabbar-signout-icon {
291
291
  width: 14px;
292
292
  height: 14px;
293
293
  }
@@ -0,0 +1,5 @@
1
+ import './tokens.css';
2
+ import './primitives/base.css';
3
+ declare const Sh3: import("svelte").Component<Record<string, never>, {}, "">;
4
+ type Sh3 = ReturnType<typeof Sh3>;
5
+ export default Sh3;
@@ -2,7 +2,7 @@
2
2
  import { render } from '@testing-library/svelte';
3
3
  export function renderWithShell(ComponentToRender, props = {}) {
4
4
  const host = document.createElement('div');
5
- host.classList.add('sh3-shell-host');
5
+ host.classList.add('sh3-sh3-host');
6
6
  host.style.position = 'relative';
7
7
  host.style.width = '1024px';
8
8
  host.style.height = '768px';
@@ -112,8 +112,8 @@
112
112
  <style>
113
113
  .sh3-context-menu {
114
114
  min-width: 220px;
115
- background: var(--shell-bg-elevated, #222);
116
- color: var(--shell-fg, #eee);
115
+ background: var(--sh3-bg-elevated, #222);
116
+ color: var(--sh3-fg, #eee);
117
117
  border-radius: 4px;
118
118
  padding: 4px 0;
119
119
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.35);
@@ -132,7 +132,7 @@
132
132
  cursor: default;
133
133
  font: inherit;
134
134
  }
135
- .sh3-ctx-active { background: var(--shell-accent, #6ea8fe); color: var(--shell-fg,#e4e6eb); }
135
+ .sh3-ctx-active { background: var(--sh3-accent, #6ea8fe); color: var(--sh3-fg,#e4e6eb); }
136
136
  .sh3-ctx-disabled { opacity: 0.45; }
137
137
  .sh3-ctx-disabled.sh3-ctx-active { background: transparent; }
138
138
  .sh3-ctx-check { display: inline-block; width: 12px; text-align: center; opacity: 0.85; }
@@ -57,11 +57,11 @@
57
57
  </div>
58
58
 
59
59
  <style>
60
- .sh3-palette { min-width: 480px; max-width: 640px; background: var(--shell-bg-elevated, #22232a); color: var(--shell-fg, #e4e6eb); border-radius: var(--shell-radius-md, 6px); box-shadow: 0 8px 24px rgba(0,0,0,.4); }
60
+ .sh3-palette { min-width: 480px; max-width: 640px; background: var(--sh3-bg-elevated, #22232a); color: var(--sh3-fg, #e4e6eb); border-radius: var(--sh3-radius-md, 6px); box-shadow: 0 8px 24px rgba(0,0,0,.4); }
61
61
  .sh3-palette-input { width: 100%; padding: 10px; background: none; border: 0; border-bottom: 1px solid rgba(255,255,255,.1); color: inherit; font: inherit; outline: none; }
62
62
  .sh3-palette-list { max-height: 320px; overflow-y: auto; padding: 4px 0; }
63
63
  .sh3-palette-item { display: flex; align-items: center; gap: 12px; width: 100%; padding: 6px 12px; background: none; border: 0; color: inherit; text-align: left; font: inherit; cursor: default; }
64
- .sh3-palette-active { background: var(--shell-accent, #4a5); border-radius: 0; color: #fff; }
64
+ .sh3-palette-active { background: var(--sh3-accent, #4a5); border-radius: 0; color: #fff; }
65
65
  .sh3-palette-label { flex: 1; }
66
66
  .sh3-palette-badge { opacity: .5; font-size: .85em; }
67
67
  .sh3-palette-shortcut { opacity: .6; font-size: .9em; }
@@ -39,7 +39,7 @@
39
39
 
40
40
  <!--
41
41
  Always render the wrapper so it reliably occupies its 1fr grid cell
42
- in the shell tabbar (and pushes user chrome to the rightmost column).
42
+ in the sh3 tabbar (and pushes user chrome to the rightmost column).
43
43
  Empty when no app is active or no container has visible items.
44
44
  -->
45
45
  <div class="sh3-menubar" role="menubar">
@@ -49,7 +49,7 @@ describe('MenuBar', () => {
49
49
  it('renders an empty menubar when no app is active', async () => {
50
50
  cmp = mount(MenuBar, { target: host, props: {} });
51
51
  await tick();
52
- // The wrapper always renders (it occupies a grid cell in the shell
52
+ // The wrapper always renders (it occupies a grid cell in the sh3
53
53
  // tabbar so user chrome stays anchored right). When no app is active
54
54
  // it's just empty.
55
55
  const bar = host.querySelector('.sh3-menubar');
@@ -133,16 +133,16 @@
133
133
  display: inline-flex;
134
134
  align-items: center;
135
135
  gap: 6px;
136
- padding: 0 var(--shell-pad-md);
136
+ padding: 0 var(--sh3-pad-md);
137
137
  height: 100%;
138
138
  background: transparent;
139
- color: var(--shell-fg);
139
+ color: var(--sh3-fg);
140
140
  border: 0;
141
141
  font: inherit;
142
142
  cursor: default;
143
143
  }
144
144
  .sh3-menubar-button:hover {
145
- background: var(--shell-bg-elevated);
145
+ background: var(--sh3-bg-elevated);
146
146
  }
147
147
  .sh3-menubar-icon {
148
148
  width: 14px;
@@ -81,7 +81,7 @@ function isTextInput(target) {
81
81
  * to the global dispatcher. Plain typing (letters, Shift+letters, Tab,
82
82
  * Escape, Enter, etc.) still goes to the input. Marked via
83
83
  * `data-sh3-passthrough-modifiers` on the input or any ancestor; used by
84
- * command-style inputs (e.g. the shell terminal) so the user can hit
84
+ * command-style inputs (e.g. the sh3 terminal) so the user can hit
85
85
  * Ctrl+K mid-line and still get the palette.
86
86
  */
87
87
  function isModifierPassthroughTarget(target) {
@@ -5,7 +5,7 @@
5
5
  * with an `active` flag indicating whether dispatching it right now would
6
6
  * actually run. `listActiveFromEntries` is a filter on top of it: the active
7
7
  * subset, in tier-innermost-first order, structurally compatible with the
8
- * `ActiveActionDescriptor[]` shape consumed by `shell.actions.listActive()`.
8
+ * `ActiveActionDescriptor[]` shape consumed by `sh3.actions.listActive()`.
9
9
  */
10
10
  import { TIER_ORDER, } from './dispatcher.svelte';
11
11
  import { effectiveShortcutWithSource } from './bindings';
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  * Document-level listener wiring for actions. Single keydown and single
3
- * contextmenu listener, attached at shell boot (Task 18) and removed on
4
- * shell teardown.
3
+ * contextmenu listener, attached at sh3 boot (Task 18) and removed on
4
+ * sh3 teardown.
5
5
  */
6
6
  import { mount } from 'svelte';
7
7
  import { listActions } from './registry';
@@ -17,7 +17,7 @@ import CommandPalette from './CommandPalette.svelte';
17
17
  import { buildPaletteCandidates } from './paletteModel';
18
18
  import { parseScopeString } from './scope-helpers';
19
19
  import { isScopeActive } from './dispatcher.svelte';
20
- import { shell } from '../shellRuntime.svelte';
20
+ import { sh3 } from '../sh3Runtime.svelte';
21
21
  let attached = false;
22
22
  function viewIdOfEl(el) {
23
23
  var _a;
@@ -192,7 +192,7 @@ function onContextMenu(ev) {
192
192
  if (model.tiers.length === 0)
193
193
  return;
194
194
  ev.preventDefault();
195
- const handle = shell.popup.show(ContextMenu, { anchor: { x: ev.clientX, y: ev.clientY } }, {
195
+ const handle = sh3.popup.show(ContextMenu, { anchor: { x: ev.clientX, y: ev.clientY } }, {
196
196
  model,
197
197
  onInvoke: (id) => {
198
198
  var _a, _b;
@@ -264,7 +264,7 @@ export function openContextMenu(opts) {
264
264
  const model = buildContextMenuModel(entries, state, anchor);
265
265
  if (model.tiers.length === 0)
266
266
  return;
267
- const handle = shell.popup.show(ContextMenu, { anchor: { x: opts.x, y: opts.y } }, {
267
+ const handle = sh3.popup.show(ContextMenu, { anchor: { x: opts.x, y: opts.y } }, {
268
268
  model,
269
269
  onInvoke: (id) => {
270
270
  var _a, _b;
@@ -310,7 +310,7 @@ export function openPalette(opts) {
310
310
  const previousFocus = typeof document !== 'undefined' && document.activeElement instanceof HTMLElement
311
311
  ? document.activeElement
312
312
  : null;
313
- const handle = shell.modal.open(CommandPalette, {
313
+ const handle = sh3.modal.open(CommandPalette, {
314
314
  candidates,
315
315
  recency,
316
316
  prefill: (_a = opts === null || opts === void 0 ? void 0 : opts.prefill) !== null && _a !== void 0 ? _a : '',
@@ -1,8 +1,8 @@
1
1
  import type { Selection, SelectionApi } from './types';
2
2
  export declare function getSelection(): Selection | null;
3
3
  export declare function makeSelectionApi(shardId: string): SelectionApi;
4
- /** Called by the shell on shard deactivate and app switch. */
4
+ /** Called by the sh3 on shard deactivate and app switch. */
5
5
  export declare function clearSelectionForShard(shardId: string): void;
6
- /** Called by the shell on app switch (unconditional). */
6
+ /** Called by the sh3 on app switch (unconditional). */
7
7
  export declare function clearSelectionUnconditional(): void;
8
8
  export declare function __resetSelectionForTest(): void;
@@ -1,7 +1,7 @@
1
1
  /*
2
- * Shell-level single-selection state. One selection at a time, reactive.
2
+ * Sh3-level single-selection state. One selection at a time, reactive.
3
3
  * Shards obtain a per-shard SelectionApi via makeSelectionApi(shardId)
4
- * that stamps ownerShardId on set and checks owner on clear. Shell-level
4
+ * that stamps ownerShardId on set and checks owner on clear. Sh3-level
5
5
  * clearSelectionForShard is used when a shard deactivates or an app
6
6
  * switches — it only clears if the owner matches, so two-shard
7
7
  * interleavings don't accidentally wipe each other.
@@ -29,13 +29,13 @@ export function makeSelectionApi(shardId) {
29
29
  },
30
30
  };
31
31
  }
32
- /** Called by the shell on shard deactivate and app switch. */
32
+ /** Called by the sh3 on shard deactivate and app switch. */
33
33
  export function clearSelectionForShard(shardId) {
34
34
  if (current && current.ownerShardId === shardId) {
35
35
  current = null;
36
36
  }
37
37
  }
38
- /** Called by the shell on app switch (unconditional). */
38
+ /** Called by the sh3 on app switch (unconditional). */
39
39
  export function clearSelectionUnconditional() {
40
40
  current = null;
41
41
  }
@@ -29,7 +29,7 @@ describe('selection', () => {
29
29
  expect(warn).toHaveBeenCalled();
30
30
  warn.mockRestore();
31
31
  });
32
- it('shell-level clearSelectionForShard always works', () => {
32
+ it('sh3-level clearSelectionForShard always works', () => {
33
33
  const api = makeSelectionApi('shard.a');
34
34
  api.set({ type: 'orb', ref: 42 });
35
35
  clearSelectionForShard('shard.a');
@@ -1,27 +1,27 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest';
2
- import { shell } from '../shellRuntime.svelte';
2
+ import { sh3 } from '../sh3Runtime.svelte';
3
3
  import { __setBindingsZone } from './bindings-store';
4
4
  import { __resetDispatcherStateForTest, setActiveApp } from './state.svelte';
5
5
  import { registerAction, __resetActionsRegistryForTest } from './registry';
6
- describe('shell.actions facade', () => {
6
+ describe('sh3.actions facade', () => {
7
7
  beforeEach(() => {
8
8
  __setBindingsZone({ bindings: {} });
9
9
  __resetDispatcherStateForTest();
10
10
  setActiveApp('app.a', new Set(['shard.x']));
11
11
  });
12
12
  it('rebind persists and updates live state', async () => {
13
- await shell.actions.rebind('app.a', 'shard.x.save', 'Ctrl+Alt+S');
14
- const now = await shell.actions.bindingsFor('app.a');
13
+ await sh3.actions.rebind('app.a', 'shard.x.save', 'Ctrl+Alt+S');
14
+ const now = await sh3.actions.bindingsFor('app.a');
15
15
  expect(now['shard.x.save']).toBe('Ctrl+Alt+S');
16
16
  });
17
17
  it('resetBinding removes the override', async () => {
18
- await shell.actions.rebind('app.a', 'shard.x.save', 'Ctrl+Alt+S');
19
- await shell.actions.resetBinding('app.a', 'shard.x.save');
20
- const now = await shell.actions.bindingsFor('app.a');
18
+ await sh3.actions.rebind('app.a', 'shard.x.save', 'Ctrl+Alt+S');
19
+ await sh3.actions.resetBinding('app.a', 'shard.x.save');
20
+ const now = await sh3.actions.bindingsFor('app.a');
21
21
  expect(now['shard.x.save']).toBeUndefined();
22
22
  });
23
23
  });
24
- describe('shell.actions.listActive', () => {
24
+ describe('sh3.actions.listActive', () => {
25
25
  beforeEach(() => {
26
26
  __resetActionsRegistryForTest();
27
27
  __resetDispatcherStateForTest();
@@ -31,7 +31,7 @@ describe('shell.actions.listActive', () => {
31
31
  id: 'home.hello', label: 'Hello', scope: 'home',
32
32
  defaultShortcut: 'Mod+H', run: () => { },
33
33
  }, 'shard.test');
34
- const snap = shell.actions.listActive();
34
+ const snap = sh3.actions.listActive();
35
35
  expect(snap.map((d) => d.id)).toContain('home.hello');
36
36
  dispose();
37
37
  });
@@ -39,27 +39,27 @@ describe('shell.actions.listActive', () => {
39
39
  registerAction({
40
40
  id: 'home.a', label: 'A', scope: 'home', run: () => { },
41
41
  }, 'shard.test');
42
- const a = shell.actions.listActive();
43
- const b = shell.actions.listActive();
42
+ const a = sh3.actions.listActive();
43
+ const b = sh3.actions.listActive();
44
44
  expect(a).not.toBe(b);
45
45
  expect(a.map((d) => d.id)).toEqual(b.map((d) => d.id));
46
46
  });
47
47
  });
48
- describe('shell.actions.onActiveChange', () => {
48
+ describe('sh3.actions.onActiveChange', () => {
49
49
  beforeEach(() => {
50
50
  __resetActionsRegistryForTest();
51
51
  __resetDispatcherStateForTest();
52
52
  });
53
53
  it('fires on dispatcher state change', () => {
54
54
  let n = 0;
55
- const off = shell.actions.onActiveChange(() => { n++; });
55
+ const off = sh3.actions.onActiveChange(() => { n++; });
56
56
  setActiveApp('a', new Set());
57
57
  expect(n).toBe(1);
58
58
  off();
59
59
  });
60
60
  it('fires when an action is registered or unregistered', () => {
61
61
  let n = 0;
62
- const off = shell.actions.onActiveChange(() => { n++; });
62
+ const off = sh3.actions.onActiveChange(() => { n++; });
63
63
  const dispose = registerAction({
64
64
  id: 't', label: 'T', scope: 'home', run: () => { },
65
65
  }, 'shard.test');
@@ -2,12 +2,12 @@ import type { DispatcherState } from './dispatcher.svelte';
2
2
  /**
3
3
  * Subscribe to any change that could affect the set of currently-active
4
4
  * actions or their resolved shortcuts (app/view/focus/selection/bindings
5
- * transitions). Call sites outside this module (e.g., the shell
5
+ * transitions). Call sites outside this module (e.g., the sh3
6
6
  * assembling registry-change notifications) dispatch via
7
7
  * {@link __notifyActiveChange}.
8
8
  */
9
9
  export declare function onActiveChange(cb: () => void): () => void;
10
- /** Internal — fired by the shell runtime when the action registry mutates. */
10
+ /** Internal — fired by the sh3 runtime when the action registry mutates. */
11
11
  export declare function __notifyActiveChange(): void;
12
12
  /** Test-only alias for the internal notifier. */
13
13
  export declare const __notifyActiveChangeForTest: typeof __notifyActiveChange;
@@ -18,7 +18,7 @@ export declare function setMountedViewIds(ids: Set<string>): void;
18
18
  * One-shot snapshot: walk the active layout tree and update
19
19
  * `mountedViewIds` to match. Non-reactive — call from an `$effect` that
20
20
  * reads `layoutStore.tree` to keep the set in sync as the tree mutates.
21
- * Shell.svelte owns that effect during boot.
21
+ * Sh3.svelte owns that effect during boot.
22
22
  */
23
23
  export declare function syncMountedViewIdsFromLayout(): void;
24
24
  export declare function setFocusedViewId(id: string | null): void;