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
@@ -1,8 +1,8 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
2
  import { render, fireEvent } from '@testing-library/svelte';
3
3
  import Select from './Select.svelte';
4
- vi.mock('../../shellRuntime.svelte', () => ({
5
- shell: { popup: { show: () => ({ close: () => { } }) } },
4
+ vi.mock('../../sh3Runtime.svelte', () => ({
5
+ sh3: { popup: { show: () => ({ close: () => { } }) } },
6
6
  }));
7
7
  describe('Select event contract', () => {
8
8
  const options = [
@@ -71,9 +71,9 @@
71
71
 
72
72
  .sh3-slider__track {
73
73
  position: absolute;
74
- background: var(--shell-track-bg);
75
- border: 1px solid var(--shell-track-border);
76
- border-radius: var(--shell-widget-radius-pill);
74
+ background: var(--sh3-track-bg);
75
+ border: 1px solid var(--sh3-track-border);
76
+ border-radius: var(--sh3-widget-radius-pill);
77
77
  pointer-events: none;
78
78
  }
79
79
  .sh3-slider--horizontal .sh3-slider__track {
@@ -89,7 +89,7 @@
89
89
 
90
90
  .sh3-slider__fill {
91
91
  position: absolute;
92
- background: var(--shell-track-fill);
92
+ background: var(--sh3-track-fill);
93
93
  border-radius: inherit;
94
94
  }
95
95
  .sh3-slider--horizontal .sh3-slider__fill {
@@ -103,7 +103,7 @@
103
103
 
104
104
  .sh3-slider__tick {
105
105
  position: absolute;
106
- background: var(--shell-tick-bg);
106
+ background: var(--sh3-tick-bg);
107
107
  }
108
108
  .sh3-slider--horizontal .sh3-slider__tick {
109
109
  width: 1px; height: 8px; top: 50%;
@@ -139,12 +139,12 @@
139
139
  cursor: not-allowed;
140
140
  opacity: 1;
141
141
  }
142
- .sh3-slider--invalid .sh3-slider__track { border-color: var(--shell-error); }
142
+ .sh3-slider--invalid .sh3-slider__track { border-color: var(--sh3-error); }
143
143
 
144
144
  /* Disabled state: shift the fill + thumb to muted/border tokens
145
145
  instead of using opacity, so the thumb stays opaque (no see-through). */
146
146
  .sh3-slider:has(.sh3-slider__native:disabled) .sh3-slider__fill {
147
- background: var(--shell-border-strong);
147
+ background: var(--sh3-border-strong);
148
148
  }
149
149
 
150
150
  .sh3-slider__native::-webkit-slider-thumb {
@@ -152,9 +152,9 @@
152
152
  width: var(--thumb-size);
153
153
  height: var(--thumb-size);
154
154
  border-radius: 50%;
155
- background: var(--shell-thumb-bg);
156
- border: 2px solid var(--shell-thumb-border);
157
- box-shadow: var(--shell-thumb-shadow);
155
+ background: var(--sh3-thumb-bg);
156
+ border: 2px solid var(--sh3-thumb-border);
157
+ box-shadow: var(--sh3-thumb-shadow);
158
158
  cursor: pointer;
159
159
  opacity: 1;
160
160
  }
@@ -162,21 +162,21 @@
162
162
  width: var(--thumb-size);
163
163
  height: var(--thumb-size);
164
164
  border-radius: 50%;
165
- background: var(--shell-thumb-bg);
166
- border: 2px solid var(--shell-thumb-border);
167
- box-shadow: var(--shell-thumb-shadow);
165
+ background: var(--sh3-thumb-bg);
166
+ border: 2px solid var(--sh3-thumb-border);
167
+ box-shadow: var(--sh3-thumb-shadow);
168
168
  cursor: pointer;
169
169
  opacity: 1;
170
170
  }
171
171
  .sh3-slider__native:disabled::-webkit-slider-thumb {
172
- background: var(--shell-fg-subtle);
173
- border-color: var(--shell-border-strong);
172
+ background: var(--sh3-fg-subtle);
173
+ border-color: var(--sh3-border-strong);
174
174
  cursor: not-allowed;
175
175
  opacity: 1;
176
176
  }
177
177
  .sh3-slider__native:disabled::-moz-range-thumb {
178
- background: var(--shell-fg-subtle);
179
- border-color: var(--shell-border-strong);
178
+ background: var(--sh3-fg-subtle);
179
+ border-color: var(--sh3-border-strong);
180
180
  cursor: not-allowed;
181
181
  opacity: 1;
182
182
  }
@@ -185,16 +185,16 @@
185
185
  background: transparent;
186
186
  }
187
187
  .sh3-slider__native:focus-visible::-webkit-slider-thumb {
188
- box-shadow: var(--shell-focus-ring), var(--shell-thumb-shadow);
188
+ box-shadow: var(--sh3-focus-ring), var(--sh3-thumb-shadow);
189
189
  }
190
190
  .sh3-slider__native:focus-visible::-moz-range-thumb {
191
- box-shadow: var(--shell-focus-ring), var(--shell-thumb-shadow);
191
+ box-shadow: var(--sh3-focus-ring), var(--sh3-thumb-shadow);
192
192
  }
193
193
 
194
194
  .sh3-slider__value {
195
195
  position: absolute;
196
196
  font-size: 0.75rem;
197
- color: var(--shell-fg-muted);
197
+ color: var(--sh3-fg-muted);
198
198
  pointer-events: none;
199
199
  transform: translate(-50%, 0);
200
200
  }
@@ -47,7 +47,7 @@
47
47
  </div>
48
48
 
49
49
  <style>
50
- .sh3-sg { display: inline-flex; gap: var(--shell-pad-md); }
50
+ .sh3-sg { display: inline-flex; gap: var(--sh3-pad-md); }
51
51
  .sh3-sg--vertical { flex-direction: row; align-items: end; }
52
52
  .sh3-sg--horizontal { flex-direction: column; }
53
53
  .sh3-sg__channel {
@@ -56,7 +56,7 @@
56
56
  .sh3-sg--vertical .sh3-sg__channel { flex-direction: column-reverse; align-items: center; }
57
57
  .sh3-sg__label {
58
58
  font-size: 0.75rem;
59
- color: var(--shell-fg-muted);
59
+ color: var(--sh3-fg-muted);
60
60
  min-width: 60px;
61
61
  }
62
62
  .sh3-sg--vertical .sh3-sg__label { min-width: 0; text-align: center; }
@@ -55,33 +55,33 @@
55
55
  display: inline-flex;
56
56
  flex-direction: column;
57
57
  gap: 4px;
58
- font-family: var(--shell-font-ui);
58
+ font-family: var(--sh3-font-ui);
59
59
  font-size: 0.8125rem;
60
60
  }
61
61
  .sh3-textarea__label {
62
- color: var(--shell-fg-muted);
62
+ color: var(--sh3-fg-muted);
63
63
  font-size: 0.75rem;
64
64
  }
65
65
  .sh3-textarea__input {
66
- background: var(--shell-input-bg);
67
- color: var(--shell-fg);
68
- border: 1px solid var(--shell-border);
69
- border-radius: var(--shell-widget-radius);
70
- padding: var(--shell-pad-sm) var(--shell-field-pad-x);
66
+ background: var(--sh3-input-bg);
67
+ color: var(--sh3-fg);
68
+ border: 1px solid var(--sh3-border);
69
+ border-radius: var(--sh3-widget-radius);
70
+ padding: var(--sh3-pad-sm) var(--sh3-field-pad-x);
71
71
  font: inherit;
72
72
  outline: none;
73
- transition: border-color var(--shell-motion-fast) var(--shell-ease-standard);
73
+ transition: border-color var(--sh3-motion-fast) var(--sh3-ease-standard);
74
74
  }
75
75
  .sh3-textarea__input:focus {
76
- border-color: var(--shell-input-border-focus);
77
- box-shadow: var(--shell-focus-ring);
76
+ border-color: var(--sh3-input-border-focus);
77
+ box-shadow: var(--sh3-focus-ring);
78
78
  }
79
79
  .sh3-textarea--invalid .sh3-textarea__input {
80
- border-color: var(--shell-error);
80
+ border-color: var(--sh3-error);
81
81
  }
82
82
  .sh3-textarea__helper {
83
- color: var(--shell-fg-muted);
83
+ color: var(--sh3-fg-muted);
84
84
  font-size: 0.75rem;
85
85
  }
86
- .sh3-textarea__helper--error { color: var(--shell-error); }
86
+ .sh3-textarea__helper--error { color: var(--sh3-error); }
87
87
  </style>
@@ -166,13 +166,13 @@
166
166
 
167
167
  <style>
168
168
  .sh3-listbox {
169
- background: var(--shell-bg-elevated);
170
- border: 1px solid var(--shell-border);
171
- border-radius: var(--shell-widget-radius);
172
- box-shadow: var(--shell-shadow-sm);
169
+ background: var(--sh3-bg-elevated);
170
+ border: 1px solid var(--sh3-border);
171
+ border-radius: var(--sh3-widget-radius);
172
+ box-shadow: var(--sh3-shadow-sm);
173
173
  min-width: 180px;
174
174
  max-width: 320px;
175
- color: var(--shell-fg);
175
+ color: var(--sh3-fg);
176
176
  font-size: 0.8125rem;
177
177
  overflow: hidden;
178
178
  }
@@ -180,10 +180,10 @@
180
180
  width: 100%;
181
181
  height: 26px;
182
182
  padding: 0 8px;
183
- background: var(--shell-input-bg);
183
+ background: var(--sh3-input-bg);
184
184
  border: none;
185
- border-bottom: 1px solid var(--shell-border);
186
- color: var(--shell-fg);
185
+ border-bottom: 1px solid var(--sh3-border);
186
+ color: var(--sh3-fg);
187
187
  font: inherit;
188
188
  outline: none;
189
189
  }
@@ -197,11 +197,11 @@
197
197
  padding: 4px 10px;
198
198
  cursor: pointer;
199
199
  }
200
- .sh3-listbox__opt--active { background: var(--shell-bg); }
201
- .sh3-listbox__opt--selected { color: var(--shell-accent); }
202
- .sh3-listbox__opt--active.sh3-listbox__opt--selected { background: var(--shell-accent); color: var(--shell-fg-on-accent); }
200
+ .sh3-listbox__opt--active { background: var(--sh3-bg); }
201
+ .sh3-listbox__opt--selected { color: var(--sh3-accent); }
202
+ .sh3-listbox__opt--active.sh3-listbox__opt--selected { background: var(--sh3-accent); color: var(--sh3-fg-on-accent); }
203
203
  .sh3-listbox__list > div[aria-disabled="true"] {
204
- color: var(--shell-fg-subtle);
204
+ color: var(--sh3-fg-subtle);
205
205
  cursor: not-allowed;
206
206
  }
207
207
  .sh3-listbox__check {
@@ -214,15 +214,15 @@
214
214
  display: block;
215
215
  width: 100%;
216
216
  height: 100%;
217
- background: var(--shell-accent);
217
+ background: var(--sh3-accent);
218
218
  clip-path: polygon(14% 44%, 0 60%, 40% 100%, 100% 20%, 85% 8%, 38% 70%);
219
219
  }
220
220
  .sh3-listbox__opt--active.sh3-listbox__opt--selected .sh3-listbox__check--on::before {
221
- background: var(--shell-fg-on-accent);
221
+ background: var(--sh3-fg-on-accent);
222
222
  }
223
223
  .sh3-listbox__empty {
224
224
  padding: 6px 10px;
225
- color: var(--shell-fg-muted);
225
+ color: var(--sh3-fg-muted);
226
226
  font-style: italic;
227
227
  }
228
228
  </style>
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * `null` means the user is in their personal scope. Otherwise it carries
5
5
  * the active project's id. Read at app launch by `launchApp` to bind
6
- * `ctx.scopeId`, and read by ShellHome / BrandSlot for UX rendering.
6
+ * `ctx.scopeId`, and read by Sh3Home / BrandSlot for UX rendering.
7
7
  *
8
8
  * Setting the slot through `setActiveProjectId` is the only supported
9
9
  * mutation path: it clears the breadcrumb pointer (so resuming an app
@@ -97,11 +97,11 @@
97
97
  .delete-project-dialog__title {
98
98
  font-size: 16px;
99
99
  font-weight: 600;
100
- color: var(--shell-fg);
100
+ color: var(--sh3-fg);
101
101
  }
102
102
  .delete-project-dialog__body {
103
103
  font-size: 13px;
104
- color: var(--shell-fg-muted, var(--shell-fg));
104
+ color: var(--sh3-fg-muted, var(--sh3-fg));
105
105
  line-height: 1.5;
106
106
  }
107
107
  .delete-project-dialog__opt {
@@ -109,18 +109,18 @@
109
109
  align-items: flex-start;
110
110
  gap: 8px;
111
111
  font-size: 13px;
112
- color: var(--shell-fg);
112
+ color: var(--sh3-fg);
113
113
  cursor: pointer;
114
114
  }
115
115
  .delete-project-dialog__opt input { margin-top: 3px; }
116
116
  .delete-project-dialog__path {
117
117
  display: block;
118
- font-family: var(--shell-font-mono, monospace);
118
+ font-family: var(--sh3-font-mono, monospace);
119
119
  font-size: 11px;
120
- color: var(--shell-fg-muted);
121
- background: var(--shell-bg-elevated);
120
+ color: var(--sh3-fg-muted);
121
+ background: var(--sh3-bg-elevated);
122
122
  padding: 2px 6px;
123
- border-radius: var(--shell-radius-sm, 3px);
123
+ border-radius: var(--sh3-radius-sm, 3px);
124
124
  margin-top: 2px;
125
125
  word-break: break-all;
126
126
  }
@@ -133,10 +133,10 @@
133
133
  .delete-project-dialog__btn {
134
134
  font-size: 13px;
135
135
  padding: 6px 14px;
136
- border-radius: var(--shell-radius-sm, 4px);
137
- border: 1px solid var(--shell-border-strong);
136
+ border-radius: var(--sh3-radius-sm, 4px);
137
+ border: 1px solid var(--sh3-border-strong);
138
138
  background: transparent;
139
- color: var(--shell-fg);
139
+ color: var(--sh3-fg);
140
140
  cursor: pointer;
141
141
  }
142
142
  .delete-project-dialog__btn:disabled {
@@ -144,7 +144,7 @@
144
144
  cursor: not-allowed;
145
145
  }
146
146
  .delete-project-dialog__btn--danger {
147
- color: var(--shell-error, #d32f2f);
148
- border-color: var(--shell-error, #d32f2f);
147
+ color: var(--sh3-error, #d32f2f);
148
+ border-color: var(--sh3-error, #d32f2f);
149
149
  }
150
150
  </style>
@@ -152,8 +152,8 @@
152
152
  display: flex;
153
153
  flex-direction: column;
154
154
  font: inherit;
155
- color: var(--shell-fg);
156
- background: var(--shell-bg);
155
+ color: var(--sh3-fg);
156
+ background: var(--sh3-bg);
157
157
  }
158
158
  .body {
159
159
  flex: 1;
@@ -161,8 +161,8 @@
161
161
  padding: 16px 16px 8px;
162
162
  }
163
163
  h2 { margin: 0 0 8px; font-size: 16px; }
164
- .project-id { font-size: 12px; color: var(--shell-fg-muted); margin: 0 0 16px; }
165
- .project-id code { font-family: var(--shell-font-mono, monospace); }
164
+ .project-id { font-size: 12px; color: var(--sh3-fg-muted); margin: 0 0 16px; }
165
+ .project-id code { font-family: var(--sh3-font-mono, monospace); }
166
166
  .field {
167
167
  display: flex;
168
168
  flex-direction: column;
@@ -170,50 +170,50 @@
170
170
  margin-bottom: 12px;
171
171
  font-size: 13px;
172
172
  }
173
- .field span { color: var(--shell-fg-muted); }
174
- .hint { font-size: 11px; color: var(--shell-fg-muted); }
173
+ .field span { color: var(--sh3-fg-muted); }
174
+ .hint { font-size: 11px; color: var(--sh3-fg-muted); }
175
175
  .hint code {
176
- font-family: var(--shell-font-mono, monospace);
177
- color: var(--shell-fg);
178
- background: var(--shell-bg-elevated);
176
+ font-family: var(--sh3-font-mono, monospace);
177
+ color: var(--sh3-fg);
178
+ background: var(--sh3-bg-elevated);
179
179
  padding: 0 4px;
180
- border-radius: var(--shell-radius-sm, 3px);
180
+ border-radius: var(--sh3-radius-sm, 3px);
181
181
  }
182
182
  .field input,
183
183
  .field textarea {
184
- background: var(--shell-bg-elevated);
185
- color: var(--shell-fg);
186
- border: 1px solid var(--shell-border);
187
- border-radius: var(--shell-radius-sm, 3px);
184
+ background: var(--sh3-bg-elevated);
185
+ color: var(--sh3-fg);
186
+ border: 1px solid var(--sh3-border);
187
+ border-radius: var(--sh3-radius-sm, 3px);
188
188
  padding: 6px 8px;
189
189
  font: inherit;
190
190
  font-size: 13px;
191
191
  }
192
192
  .field textarea { resize: vertical; min-height: 60px; }
193
- .error { color: var(--shell-error, #c33); font-size: 13px; margin: 0 0 8px; }
193
+ .error { color: var(--sh3-error, #c33); font-size: 13px; margin: 0 0 8px; }
194
194
  .actions {
195
195
  display: flex;
196
196
  gap: 8px;
197
197
  padding: 12px 16px;
198
- border-top: 1px solid var(--shell-border);
199
- background: var(--shell-bg);
198
+ border-top: 1px solid var(--sh3-border);
199
+ background: var(--sh3-bg);
200
200
  flex: 0 0 auto;
201
201
  }
202
202
  .actions button {
203
- background: var(--shell-bg-elevated);
204
- color: var(--shell-fg);
205
- border: 1px solid var(--shell-border);
206
- border-radius: var(--shell-radius-sm, 3px);
203
+ background: var(--sh3-bg-elevated);
204
+ color: var(--sh3-fg);
205
+ border: 1px solid var(--sh3-border);
206
+ border-radius: var(--sh3-radius-sm, 3px);
207
207
  padding: 6px 14px;
208
208
  font: inherit;
209
209
  cursor: pointer;
210
210
  }
211
- .actions button:hover { border-color: var(--shell-accent); }
211
+ .actions button:hover { border-color: var(--sh3-accent); }
212
212
  .actions button.primary {
213
- background: var(--shell-accent);
213
+ background: var(--sh3-accent);
214
214
  color: #fff;
215
- border-color: var(--shell-accent);
215
+ border-color: var(--sh3-accent);
216
216
  }
217
- .actions button.danger { margin-left: auto; color: var(--shell-error, #c33); }
217
+ .actions button.danger { margin-left: auto; color: var(--sh3-error, #c33); }
218
218
  .actions button:disabled { opacity: 0.5; cursor: not-allowed; }
219
219
  </style>
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  /*
3
- * Projects section for ShellHome.
3
+ * Projects section for Sh3Home.
4
4
  *
5
5
  * Renders the list of projects the current user is a member of as
6
6
  * selectable cards. Selecting a project sets sessionState.activeProjectId
@@ -69,7 +69,7 @@
69
69
  font-weight: 600;
70
70
  text-transform: uppercase;
71
71
  letter-spacing: 0.06em;
72
- color: var(--shell-fg-subtle);
72
+ color: var(--sh3-fg-subtle);
73
73
  margin: 0 0 12px;
74
74
  }
75
75
  .projects-grid {
@@ -84,9 +84,9 @@
84
84
  align-items: flex-start;
85
85
  gap: 4px;
86
86
  padding: 12px 14px;
87
- background: var(--shell-grad-bg-elevated, var(--shell-bg-elevated));
88
- border: 1px solid var(--shell-border);
89
- border-radius: var(--shell-radius-md);
87
+ background: var(--sh3-grad-bg-elevated, var(--sh3-bg-elevated));
88
+ border: 1px solid var(--sh3-border);
89
+ border-radius: var(--sh3-radius-md);
90
90
  cursor: pointer;
91
91
  text-align: left;
92
92
  color: inherit;
@@ -100,21 +100,21 @@
100
100
  right: 6px;
101
101
  background: transparent;
102
102
  border: 0;
103
- color: var(--shell-fg-muted);
103
+ color: var(--sh3-fg-muted);
104
104
  cursor: pointer;
105
105
  padding: 2px 6px;
106
106
  font-size: 14px;
107
- border-radius: var(--shell-radius-sm, 3px);
107
+ border-radius: var(--sh3-radius-sm, 3px);
108
108
  }
109
- .project-card-edit:hover { color: var(--shell-fg); background: var(--shell-bg-elevated); }
109
+ .project-card-edit:hover { color: var(--sh3-fg); background: var(--sh3-bg-elevated); }
110
110
  .project-card:hover {
111
- border-color: var(--shell-accent);
111
+ border-color: var(--sh3-accent);
112
112
  transform: translateY(-1px);
113
113
  }
114
114
  .project-card.active {
115
- border-color: var(--shell-accent);
116
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--shell-accent) 40%, transparent);
115
+ border-color: var(--sh3-accent);
116
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--sh3-accent) 40%, transparent);
117
117
  }
118
118
  .project-name { font-weight: 600; font-size: 13px; }
119
- .project-meta { font-size: 11px; color: var(--shell-fg-muted); }
119
+ .project-meta { font-size: 11px; color: var(--sh3-fg-muted); }
120
120
  </style>
@@ -53,7 +53,7 @@ export declare function listInstalledPackages(): Promise<InstalledPackage[]>;
53
53
  * Load all installed packages from IndexedDB and register them.
54
54
  *
55
55
  * Called once at boot by `bootstrap()`, before any glob-discovered shards
56
- * or the shell shard are registered. Individual package failures are logged
57
- * as warnings but do not prevent the shell from booting.
56
+ * or the sh3 shard are registered. Individual package failures are logged
57
+ * as warnings but do not prevent the sh3 from booting.
58
58
  */
59
59
  export declare function loadInstalledPackages(): Promise<void>;
@@ -163,8 +163,8 @@ export async function listInstalledPackages() {
163
163
  * Load all installed packages from IndexedDB and register them.
164
164
  *
165
165
  * Called once at boot by `bootstrap()`, before any glob-discovered shards
166
- * or the shell shard are registered. Individual package failures are logged
167
- * as warnings but do not prevent the shell from booting.
166
+ * or the sh3 shard are registered. Individual package failures are logged
167
+ * as warnings but do not prevent the sh3 from booting.
168
168
  */
169
169
  export async function loadInstalledPackages() {
170
170
  let packages;
@@ -60,7 +60,7 @@ const shimUrls = {
60
60
  // `svelte/internal/disclose-version` is a side-effect-only import (no exports).
61
61
  // Create an empty shim so the import doesn't fail.
62
62
  shimUrls['svelte/internal/disclose-version'] = URL.createObjectURL(new Blob([''], { type: 'application/javascript' }));
63
- // `sh3/tokens.css` — design tokens are already loaded by the host shell.
63
+ // `sh3/tokens.css` — design tokens are already loaded by the host sh3.
64
64
  // Bundles that import this path get a no-op so the import doesn't fail.
65
65
  shimUrls['sh3-core/tokens.css'] = URL.createObjectURL(new Blob([''], { type: 'application/javascript' }));
66
66
  // ---- bare specifier rewriting ----------------------------------------------
@@ -8,7 +8,7 @@
8
8
  */
9
9
  export const PERMISSION_DESCRIPTIONS = {
10
10
  'state:manage': {
11
- title: 'Manage shell state zones',
11
+ title: 'Manage sh3 state zones',
12
12
  description: 'Read and write state zones belonging to other shards.',
13
13
  },
14
14
  'documents:browse': {
@@ -37,7 +37,7 @@ export const PERMISSION_DESCRIPTIONS = {
37
37
  },
38
38
  'keys:mint': {
39
39
  title: 'Mint API keys',
40
- description: 'Issue long-lived access tokens for this shell.',
40
+ description: 'Issue long-lived access tokens for this sh3.',
41
41
  },
42
42
  };
43
43
  export function describePermission(id) {
@@ -3,7 +3,7 @@ import { describePermission, extractBundlePermissions, PERMISSION_DESCRIPTIONS,
3
3
  describe('describePermission', () => {
4
4
  it('returns the registered entry for a known permission id', () => {
5
5
  const result = describePermission('state:manage');
6
- expect(result.title).toBe('Manage shell state zones');
6
+ expect(result.title).toBe('Manage sh3 state zones');
7
7
  expect(result.description).toContain('state zones');
8
8
  });
9
9
  it('covers every permission advertised in the module registry', () => {
@@ -95,7 +95,7 @@ describe('shell-shard programmatic verbs (integration)', () => {
95
95
  throw new Error('unreachable');
96
96
  expect(entry.text).toMatch(/no active app/);
97
97
  });
98
- it('shards emits a rich entry containing the active shell shard', async () => {
98
+ it('shards emits a rich entry containing the active sh3 shard', async () => {
99
99
  const out = await runVerbProgrammatic('shell', 'shards', []);
100
100
  const entry = out.scrollback[0];
101
101
  expect(entry.kind).toBe('rich');
@@ -140,7 +140,7 @@ describe('shell-shard programmatic verbs (integration)', () => {
140
140
  expect(entry.level).toBe('warn');
141
141
  });
142
142
  it('zone with shardId+zoneName emits a rich entry exposing data.value', async () => {
143
- const out = await runVerbProgrammatic('shell', 'zone', ['shell', 'workspace']);
143
+ const out = await runVerbProgrammatic('shell', 'zone', ['sh3', 'workspace']);
144
144
  const entry = out.scrollback[0];
145
145
  expect(entry.kind).toBe('rich');
146
146
  if (entry.kind !== 'rich')
@@ -2,7 +2,7 @@
2
2
  * runVerbProgrammatic — programmatic verb dispatch with synthesized VerbContext.
3
3
  *
4
4
  * Used by `ctx.runVerb(...)` (see shards/activate.svelte.ts). Builds a
5
- * sink scrollback that captures entries into an array, a headless ShellApi
5
+ * sink scrollback that captures entries into an array, a headless Sh3Api
6
6
  * (no terminal-bound state), a stub SessionClient, and a real TenantFsClient.
7
7
  * Verbs that opt in via `programmatic: true` run against this synthesized
8
8
  * context; non-programmatic verbs are rejected.
@@ -13,11 +13,11 @@
13
13
  * fire-and-forget semantics).
14
14
  *
15
15
  * Resolution: prefixed names (`'sh3-store:install'`) look up directly;
16
- * unprefixed shell names (`'apps'`) resolve against shardId 'shell'.
16
+ * unprefixed sh3 names (`'apps'`) resolve against shardId 'sh3'.
17
17
  */
18
18
  import { activeShards } from '../shards/activate.svelte';
19
19
  import { getVerb, listVerbsWithShard } from '../shards/registry';
20
- import { makeShellApiHeadless } from '../shell-shard/shellApi';
20
+ import { makeSh3ApiHeadless } from '../sh3Api/headless';
21
21
  import { Scrollback } from '../shell-shard/scrollback.svelte';
22
22
  import { SessionClient } from '../shell-shard/session-client.svelte';
23
23
  import { TenantFsClient } from '../shell-shard/tenant-fs-client';
@@ -53,7 +53,7 @@ export async function runVerbProgrammatic(shardId, name, args, opts) {
53
53
  async function buildProgrammaticContext(b) {
54
54
  var _a, _b;
55
55
  const ctx = {
56
- shell: makeShellApiHeadless(),
56
+ sh3: makeSh3ApiHeadless(),
57
57
  scrollback: b.sinkScrollback,
58
58
  session: makeStubSession(),
59
59
  cwd: '/',
@@ -129,18 +129,18 @@ describe('runVerbProgrammatic', () => {
129
129
  await activateShard('tester');
130
130
  await expect(runVerbProgrammatic('tester', 'tester:boom', [])).rejects.toThrow('kaboom');
131
131
  });
132
- it('exposes vctx.shell.dispatchToTerminal that returns no-active-context', async () => {
132
+ it('exposes vctx.sh3.dispatchToTerminal that returns no-active-context', async () => {
133
133
  let observed = undefined;
134
134
  registerShard({
135
135
  manifest: { id: 'tester', label: 'T', version: '0.0.0', views: [] },
136
136
  activate(ctx) {
137
- ctx.registerVerb(makeVerb('peek-shell', true, async (vctx) => {
138
- observed = vctx.shell.dispatchToTerminal('foo');
137
+ ctx.registerVerb(makeVerb('peek-sh3', true, async (vctx) => {
138
+ observed = vctx.sh3.dispatchToTerminal('foo');
139
139
  }));
140
140
  },
141
141
  });
142
142
  await activateShard('tester');
143
- await runVerbProgrammatic('tester', 'tester:peek-shell', []);
143
+ await runVerbProgrammatic('tester', 'tester:peek-sh3', []);
144
144
  expect(observed).toMatchObject({
145
145
  ok: false,
146
146
  error: 'no-active-context',
@@ -54,7 +54,7 @@
54
54
  position: absolute;
55
55
  inset: 0;
56
56
  overflow: hidden;
57
- background: var(--shell-grad-bg, var(--shell-bg));
58
- color: var(--shell-fg);
57
+ background: var(--sh3-grad-bg, var(--sh3-bg));
58
+ color: var(--sh3-fg);
59
59
  }
60
60
  </style>
@@ -94,17 +94,17 @@
94
94
  </div>
95
95
 
96
96
  <style>
97
- .keys-peers { padding: 24px; font-family: system-ui, sans-serif; color: var(--shell-fg); }
97
+ .keys-peers { padding: 24px; font-family: system-ui, sans-serif; color: var(--sh3-fg); }
98
98
  .keys-peers-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
99
99
  .keys-peers-header h2 { margin: 0; font-size: 18px; }
100
100
  .keys-peers-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
101
- .keys-peers-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 16px; background: var(--shell-bg-elevated, #252540); border: 1px solid var(--shell-border, #3a3a5c); border-radius: var(--shell-radius, 6px); gap: 12px; }
101
+ .keys-peers-item { display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 16px; background: var(--sh3-bg-elevated, #252540); border: 1px solid var(--sh3-border, #3a3a5c); border-radius: var(--sh3-radius, 6px); gap: 12px; }
102
102
  .keys-peers-info { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
103
103
  .keys-peers-label { font-weight: 600; }
104
- .keys-peers-meta { font-size: 11px; color: var(--shell-fg-subtle); }
104
+ .keys-peers-meta { font-size: 11px; color: var(--sh3-fg-subtle); }
105
105
  .keys-peers-actions { display: flex; gap: 6px; flex-shrink: 0; align-items: flex-start; padding-top: 2px; }
106
- .keys-peers-btn-danger { background: transparent; color: var(--shell-error, #d32f2f); border: 1px solid var(--shell-error, #d32f2f); font-size: 12px; padding: 4px 10px; border-radius: var(--shell-radius, 6px); cursor: pointer; }
107
- .keys-peers-btn-secondary { background: transparent; color: var(--shell-fg-subtle); border: 1px solid var(--shell-border, #3a3a5c); font-size: 12px; padding: 4px 10px; border-radius: var(--shell-radius, 6px); cursor: pointer; }
108
- .keys-peers-muted { color: var(--shell-fg-muted); font-style: italic; }
109
- .keys-peers-error { color: var(--shell-error, #d32f2f); font-size: 13px; }
106
+ .keys-peers-btn-danger { background: transparent; color: var(--sh3-error, #d32f2f); border: 1px solid var(--sh3-error, #d32f2f); font-size: 12px; padding: 4px 10px; border-radius: var(--sh3-radius, 6px); cursor: pointer; }
107
+ .keys-peers-btn-secondary { background: transparent; color: var(--sh3-fg-subtle); border: 1px solid var(--sh3-border, #3a3a5c); font-size: 12px; padding: 4px 10px; border-radius: var(--sh3-radius, 6px); cursor: pointer; }
108
+ .keys-peers-muted { color: var(--sh3-fg-muted); font-style: italic; }
109
+ .keys-peers-error { color: var(--sh3-error, #d32f2f); font-size: 13px; }
110
110
  </style>