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
@@ -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
  }
@@ -2,7 +2,7 @@
2
2
  * SH3 base component styles.
3
3
  *
4
4
  * Shared affordances that sit between tokens (raw values) and components
5
- * (full UI). These apply to native elements and the .shell-base-* utility
5
+ * (full UI). These apply to native elements and the .sh3-base-* utility
6
6
  * classes so shards and apps get a consistent look without duplicating
7
7
  * button/input recipes in every component.
8
8
  */
@@ -13,23 +13,23 @@ button,
13
13
  input[type="button"],
14
14
  input[type="submit"],
15
15
  input[type="reset"],
16
- .shell-base-button {
16
+ .sh3-base-button {
17
17
  padding: 6px 14px;
18
- background: var(--shell-accent);
19
- color: var(--shell-fg-on-accent);
18
+ background: var(--sh3-accent);
19
+ color: var(--sh3-fg-on-accent);
20
20
  border: none;
21
- border-radius: var(--shell-radius);
21
+ border-radius: var(--sh3-radius);
22
22
  cursor: pointer;
23
23
  font-family: inherit;
24
24
  font-size: 0.875rem;
25
- line-height: var(--shell-line);
25
+ line-height: var(--sh3-line);
26
26
  }
27
27
 
28
28
  button:hover,
29
29
  input[type="button"]:hover,
30
30
  input[type="submit"]:hover,
31
31
  input[type="reset"]:hover,
32
- .shell-base-button:hover {
32
+ .sh3-base-button:hover {
33
33
  filter: brightness(1.12);
34
34
  }
35
35
 
@@ -37,7 +37,7 @@ button:active,
37
37
  input[type="button"]:active,
38
38
  input[type="submit"]:active,
39
39
  input[type="reset"]:active,
40
- .shell-base-button:active {
40
+ .sh3-base-button:active {
41
41
  filter: brightness(0.92);
42
42
  }
43
43
 
@@ -51,107 +51,107 @@ input[type="url"],
51
51
  input[type="tel"],
52
52
  input[type="number"],
53
53
  textarea,
54
- .shell-base-input {
55
- padding: 0 var(--shell-field-pad-x);
56
- height: var(--shell-field-height-md);
57
- background: var(--shell-input-bg);
58
- color: var(--shell-fg);
59
- border: 1px solid var(--shell-border);
60
- border-radius: var(--shell-radius);
54
+ .sh3-base-input {
55
+ padding: 0 var(--sh3-field-pad-x);
56
+ height: var(--sh3-field-height-md);
57
+ background: var(--sh3-input-bg);
58
+ color: var(--sh3-fg);
59
+ border: 1px solid var(--sh3-border);
60
+ border-radius: var(--sh3-radius);
61
61
  font-family: inherit;
62
62
  font-size: 0.8125rem;
63
- line-height: var(--shell-line);
63
+ line-height: var(--sh3-line);
64
64
  }
65
65
 
66
- ::placeholder { color: var(--shell-fg-muted); }
66
+ ::placeholder { color: var(--sh3-fg-muted); }
67
67
 
68
68
  input:focus-visible,
69
69
  textarea:focus-visible,
70
- .shell-base-input:focus-visible {
71
- border-color: var(--shell-input-border-focus);
72
- box-shadow: var(--shell-focus-ring);
70
+ .sh3-base-input:focus-visible {
71
+ border-color: var(--sh3-input-border-focus);
72
+ box-shadow: var(--sh3-focus-ring);
73
73
  outline: none;
74
74
  }
75
75
 
76
76
  input:disabled,
77
77
  textarea:disabled,
78
- .shell-base-input[aria-disabled="true"] {
78
+ .sh3-base-input[aria-disabled="true"] {
79
79
  opacity: 0.55;
80
80
  cursor: not-allowed;
81
81
  }
82
82
 
83
83
  textarea {
84
84
  resize: vertical;
85
- min-height: calc(var(--shell-line) * 3em);
85
+ min-height: calc(var(--sh3-line) * 3em);
86
86
  height: auto;
87
- padding: var(--shell-pad-sm) var(--shell-field-pad-x);
87
+ padding: var(--sh3-pad-sm) var(--sh3-field-pad-x);
88
88
  }
89
89
 
90
90
  /* ── Checkbox & radio ────────────────────────────────────────────────── */
91
91
 
92
- input[type="checkbox"].shell-base-check,
93
- input[type="radio"].shell-base-radio {
92
+ input[type="checkbox"].sh3-base-check,
93
+ input[type="radio"].sh3-base-radio {
94
94
  appearance: none;
95
95
  width: 14px;
96
96
  height: 14px;
97
97
  margin: 0;
98
- background: var(--shell-input-bg);
99
- border: 1px solid var(--shell-border);
98
+ background: var(--sh3-input-bg);
99
+ border: 1px solid var(--sh3-border);
100
100
  cursor: pointer;
101
101
  display: inline-grid;
102
102
  place-content: center;
103
103
  flex-shrink: 0;
104
104
  }
105
105
 
106
- .shell-base-check { border-radius: var(--shell-radius-sm); }
107
- .shell-base-radio { border-radius: 50%; }
106
+ .sh3-base-check { border-radius: var(--sh3-radius-sm); }
107
+ .sh3-base-radio { border-radius: 50%; }
108
108
 
109
109
  /* Need the input[type] prefix to outweigh the base
110
- `input[type="checkbox"].shell-base-check` rule's specificity. */
111
- input[type="checkbox"].shell-base-check:checked,
112
- input[type="radio"].shell-base-radio:checked {
113
- background: var(--shell-accent);
114
- border-color: var(--shell-accent);
110
+ `input[type="checkbox"].sh3-base-check` rule's specificity. */
111
+ input[type="checkbox"].sh3-base-check:checked,
112
+ input[type="radio"].sh3-base-radio:checked {
113
+ background: var(--sh3-accent);
114
+ border-color: var(--sh3-accent);
115
115
  }
116
116
 
117
- .shell-base-check:checked::before {
117
+ .sh3-base-check:checked::before {
118
118
  content: "";
119
119
  width: 8px;
120
120
  height: 8px;
121
- background: var(--shell-fg-on-accent);
121
+ background: var(--sh3-fg-on-accent);
122
122
  clip-path: polygon(14% 44%, 0 60%, 40% 100%, 100% 20%, 85% 8%, 38% 70%);
123
123
  }
124
124
 
125
- .shell-base-radio:checked::before {
125
+ .sh3-base-radio:checked::before {
126
126
  content: "";
127
127
  width: 6px;
128
128
  height: 6px;
129
129
  border-radius: 50%;
130
- background: var(--shell-fg-on-accent);
130
+ background: var(--sh3-fg-on-accent);
131
131
  }
132
132
 
133
- .shell-base-check:focus-visible,
134
- .shell-base-radio:focus-visible {
135
- box-shadow: var(--shell-focus-ring);
133
+ .sh3-base-check:focus-visible,
134
+ .sh3-base-radio:focus-visible {
135
+ box-shadow: var(--sh3-focus-ring);
136
136
  outline: none;
137
137
  }
138
138
 
139
- .shell-base-check:disabled,
140
- .shell-base-radio:disabled {
139
+ .sh3-base-check:disabled,
140
+ .sh3-base-radio:disabled {
141
141
  opacity: 0.55;
142
142
  cursor: not-allowed;
143
143
  }
144
144
 
145
145
  /* ── Switch ──────────────────────────────────────────────────────────── */
146
146
 
147
- input[type="checkbox"].shell-base-switch {
147
+ input[type="checkbox"].sh3-base-switch {
148
148
  appearance: none;
149
149
  position: relative;
150
150
  width: 28px;
151
151
  height: 16px;
152
152
  margin: 0;
153
- background: var(--shell-bg-sunken);
154
- border: 1px solid var(--shell-border-strong);
153
+ background: var(--sh3-bg-sunken);
154
+ border: 1px solid var(--sh3-border-strong);
155
155
  border-radius: 999px;
156
156
  cursor: pointer;
157
157
  transition: background 120ms ease, border-color 120ms ease, box-shadow 120ms ease;
@@ -159,34 +159,34 @@ input[type="checkbox"].shell-base-switch {
159
159
  box-sizing: border-box;
160
160
  }
161
161
 
162
- .shell-base-switch::before {
162
+ .sh3-base-switch::before {
163
163
  content: "";
164
164
  position: absolute;
165
165
  top: 2px;
166
166
  left: 2px;
167
167
  width: 12px;
168
168
  height: 12px;
169
- background: var(--shell-fg);
169
+ background: var(--sh3-fg);
170
170
  border-radius: 50%;
171
171
  transition: transform 120ms ease;
172
172
  }
173
173
 
174
- input[type="checkbox"].shell-base-switch:checked {
175
- background: var(--shell-accent);
176
- border-color: var(--shell-accent);
177
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--shell-accent) 25%, transparent);
174
+ input[type="checkbox"].sh3-base-switch:checked {
175
+ background: var(--sh3-accent);
176
+ border-color: var(--sh3-accent);
177
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--sh3-accent) 25%, transparent);
178
178
  }
179
- .shell-base-switch:checked::before {
179
+ .sh3-base-switch:checked::before {
180
180
  transform: translateX(12px);
181
- background: var(--shell-fg-on-accent);
181
+ background: var(--sh3-fg-on-accent);
182
182
  }
183
183
 
184
- .shell-base-switch:focus-visible {
185
- box-shadow: var(--shell-focus-ring);
184
+ .sh3-base-switch:focus-visible {
185
+ box-shadow: var(--sh3-focus-ring);
186
186
  outline: none;
187
187
  }
188
188
 
189
- .shell-base-switch:disabled {
189
+ .sh3-base-switch:disabled {
190
190
  opacity: 0.55;
191
191
  cursor: not-allowed;
192
192
  }