@mcp-b/react-components 0.40.0 → 0.42.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 (228) hide show
  1. package/dist/{AgentChat-CVO7xyLC.d.ts → AgentChat-DVr2giwD.d.ts} +1 -1
  2. package/dist/{AgentToolRunsContext-BCVqCtJ1.d.ts → AgentToolRunsContext-daY67hFM.d.ts} +12 -0
  3. package/dist/{CodeBlock-CWk1FVtm.js → CodeBlock-BjELA-_s.js} +1 -1
  4. package/dist/{FileTree-xqHYBw4g.js → FileTree-DMYRdT6R.js} +1 -1
  5. package/dist/McpConnectorForm-MRm1r59e.d.ts +39 -0
  6. package/dist/{Message-DBsHHhcM.d.ts → Message-D_vCVEGB.d.ts} +20 -1
  7. package/dist/{ThinkChatActivity-D6-_5Phw.d.ts → ThinkChatActivity-CsDql-ER.d.ts} +4 -1
  8. package/dist/{ThinkExecutionRun-lYYgyeE1.d.ts → ThinkExecutionRun-k8bpyXqt.d.ts} +3 -3
  9. package/dist/{WorkspaceFileView-Lab3om3F.js → WorkspaceFileView-DwdXiKku.js} +17 -22
  10. package/dist/{WorkspaceMessageResponse-Cy28WGSz.d.ts → WorkspaceMessageResponse-D66ty4FO.d.ts} +1 -1
  11. package/dist/components/agents-sdk/AgentActivity.js +4 -3
  12. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  13. package/dist/components/agents-sdk/AgentChat.js +42 -18
  14. package/dist/components/agents-sdk/AgentToolRunsContext.d.ts +1 -1
  15. package/dist/components/agents-sdk/AgentToolRunsContext.js +12 -0
  16. package/dist/components/agents-sdk/BrowserLiveScreen.d.ts +135 -0
  17. package/dist/components/agents-sdk/BrowserLiveScreen.js +637 -0
  18. package/dist/components/agents-sdk/BrowserLiveView.d.ts +2 -2
  19. package/dist/components/agents-sdk/BrowserLiveView.js +6 -9
  20. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  21. package/dist/components/agents-sdk/BrowserRunPanel.d.ts +1 -1
  22. package/dist/components/agents-sdk/BrowserRunPanel.js +8 -13
  23. package/dist/components/agents-sdk/ManagerOffice.d.ts +168 -0
  24. package/dist/components/agents-sdk/ManagerOffice.js +698 -0
  25. package/dist/components/agents-sdk/McpConnectionRequest.js +3 -3
  26. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -38
  27. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +8 -2
  28. package/dist/components/agents-sdk/McpPluginCatalog.js +82 -62
  29. package/dist/components/agents-sdk/McpServerPicker.d.ts +1 -1
  30. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  31. package/dist/components/agents-sdk/ModelSelector.js +1 -1
  32. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  33. package/dist/components/agents-sdk/SubagentRunDetails.d.ts +1 -9
  34. package/dist/components/agents-sdk/SubagentRunDetails.js +1 -9
  35. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  36. package/dist/components/agents-sdk/SubagentRunSelector.d.ts +4 -2
  37. package/dist/components/agents-sdk/SubagentRunSelector.js +7 -6
  38. package/dist/components/agents-sdk/ThinkChat.d.ts +4 -4
  39. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  40. package/dist/components/agents-sdk/ThinkChatActivity.js +18 -4
  41. package/dist/components/agents-sdk/ThinkChatToolPanels.js +7 -3
  42. package/dist/components/agents-sdk/ThinkExecutionDetail.d.ts +1 -1
  43. package/dist/components/agents-sdk/ThinkExecutionDetail.js +45 -43
  44. package/dist/components/agents-sdk/ThinkExecutionRun.d.ts +2 -2
  45. package/dist/components/agents-sdk/ThinkExecutionRun.js +5 -6
  46. package/dist/components/agents-sdk/ThinkExecutionStatus.d.ts +1 -1
  47. package/dist/components/agents-sdk/ThinkExecutionStatus.js +8 -12
  48. package/dist/components/agents-sdk/ThinkExecutionWorkbench.d.ts +8 -1
  49. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +43 -37
  50. package/dist/components/agents-sdk/ThinkFullApp.d.ts +42 -78
  51. package/dist/components/agents-sdk/ThinkFullApp.js +121 -202
  52. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.d.ts +1 -1
  53. package/dist/components/agents-sdk/ThinkRoutine.d.ts +1 -1
  54. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +1 -1
  55. package/dist/components/agents-sdk/ThinkRoutineDetail.js +4 -15
  56. package/dist/components/agents-sdk/ThinkRoutineForm.js +1 -1
  57. package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +7 -6
  58. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +112 -140
  59. package/dist/components/agents-sdk/ThinkRoutineRuns.d.ts +1 -1
  60. package/dist/components/agents-sdk/ThinkRoutineRuns.js +3 -10
  61. package/dist/components/agents-sdk/ThinkThreadPicker.js +2 -1
  62. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  63. package/dist/components/agents-sdk/WorkspaceExplorer.js +2 -1
  64. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  65. package/dist/components/agents-sdk/WorkspaceHeader.js +2 -1
  66. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +1 -1
  67. package/dist/components/agents-sdk/WorkspaceMountManager.js +11 -11
  68. package/dist/components/ai-sdk/Activity.js +1 -1
  69. package/dist/components/ai-sdk/AgentAttention.d.ts +1 -1
  70. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  71. package/dist/components/ai-sdk/Approval.js +1 -1
  72. package/dist/components/ai-sdk/Artifact.js +1 -1
  73. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  74. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  75. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  76. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  77. package/dist/components/ai-sdk/Conversation.js +1 -1
  78. package/dist/components/ai-sdk/Goal.js +1 -1
  79. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  80. package/dist/components/ai-sdk/Message.d.ts +2 -2
  81. package/dist/components/ai-sdk/Message.js +25 -3
  82. package/dist/components/ai-sdk/MessageScroller.js +3 -2
  83. package/dist/components/ai-sdk/MessageScrollerVirtual.js +2 -1
  84. package/dist/components/ai-sdk/Plan.js +1 -1
  85. package/dist/components/ai-sdk/PromptInput.js +21 -15
  86. package/dist/components/ai-sdk/Queue.d.ts +4 -4
  87. package/dist/components/ai-sdk/Queue.js +6 -15
  88. package/dist/components/ai-sdk/Reasoning.js +1 -1
  89. package/dist/components/ai-sdk/Sources.js +1 -1
  90. package/dist/components/ai-sdk/Task.d.ts +2 -2
  91. package/dist/components/ai-sdk/Task.js +2 -2
  92. package/dist/components/extension/ChatGptSignInScreen.js +2 -1
  93. package/dist/components/extension/CodexModelSelector.js +1 -1
  94. package/dist/components/extension/ConversationTabPicker.js +1 -1
  95. package/dist/components/foundations/Avatar.d.ts +1 -10
  96. package/dist/components/foundations/Avatar.js +1 -10
  97. package/dist/components/foundations/Checkbox.js +1 -1
  98. package/dist/components/foundations/CheckboxGroup.js +1 -0
  99. package/dist/components/foundations/ContextMenu.js +1 -1
  100. package/dist/components/foundations/LinkButton.d.ts +12 -10
  101. package/dist/components/foundations/LinkButton.js +15 -11
  102. package/dist/components/foundations/Menubar.js +1 -1
  103. package/dist/components/foundations/SearchField.js +1 -1
  104. package/dist/components/foundations/Select.js +1 -1
  105. package/dist/components/foundations/Stepper.js +1 -1
  106. package/dist/components/foundations/Toast.js +1 -1
  107. package/dist/components/foundations/ToggleGroup.d.ts +79 -1
  108. package/dist/components/foundations/icons.d.ts +2 -2
  109. package/dist/components/foundations/icons.js +2 -2
  110. package/dist/components/general-purpose/AppFrame.js +1 -0
  111. package/dist/components/general-purpose/AppTopBar.d.ts +6 -0
  112. package/dist/components/general-purpose/AppTopBar.js +2 -1
  113. package/dist/components/general-purpose/Commit.d.ts +2 -2
  114. package/dist/components/general-purpose/Commit.js +5 -13
  115. package/dist/components/general-purpose/EnvironmentVariables.d.ts +2 -2
  116. package/dist/components/general-purpose/EnvironmentVariables.js +4 -7
  117. package/dist/components/general-purpose/FileTree.js +1 -1
  118. package/dist/components/general-purpose/PricingBillingToggle.js +4 -9
  119. package/dist/components/general-purpose/PricingPlanCard.js +15 -14
  120. package/dist/components/general-purpose/ResizableSidePanel.d.ts +8 -0
  121. package/dist/components/general-purpose/ResizableSidePanel.js +3 -2
  122. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +105 -2
  123. package/dist/components/general-purpose/ResponsiveSidebarShell.js +112 -56
  124. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  125. package/dist/components/general-purpose/Terminal.d.ts +1 -1
  126. package/dist/components/general-purpose/Terminal.js +4 -12
  127. package/dist/components/general-purpose/TestResults.d.ts +1 -1
  128. package/dist/components/general-purpose/TestResults.js +8 -21
  129. package/dist/components/general-purpose/ThemeModeControl.js +1 -1
  130. package/dist/components/general-purpose/WebPreview.d.ts +4 -1
  131. package/dist/components/general-purpose/WebPreview.js +6 -14
  132. package/dist/components/nanites/AgentConnection.js +2 -2
  133. package/dist/components/nanites/AgentToolDetail.d.ts +1 -1
  134. package/dist/components/nanites/AgentToolDetail.js +6 -5
  135. package/dist/components/nanites/NaniteScene.js +11 -11
  136. package/dist/{copy-button-Bc7jsYv_.js → copy-button-lys9N_aI.js} +1 -1
  137. package/dist/{icons-DwgNir1Q.d.ts → icons-0corjfxR.d.ts} +1 -16
  138. package/dist/{icons-MmIXciMO.js → icons-CVFSeTJn.js} +2 -5
  139. package/dist/styles/accordion.css +1 -0
  140. package/dist/styles/action-guide.css +8 -7
  141. package/dist/styles/activity-header.css +13 -39
  142. package/dist/styles/activity.css +40 -55
  143. package/dist/styles/agent-attention.css +19 -19
  144. package/dist/styles/agent-chat.css +94 -42
  145. package/dist/styles/agent-connection.css +10 -4
  146. package/dist/styles/agent-tool-detail.css +5 -15
  147. package/dist/styles/alert-dialog.css +4 -4
  148. package/dist/styles/app-frame.css +1 -3
  149. package/dist/styles/app-icon.css +12 -18
  150. package/dist/styles/app-top-bar.css +31 -9
  151. package/dist/styles/approval.css +1 -0
  152. package/dist/styles/artifact.css +6 -6
  153. package/dist/styles/attachment-preview.css +5 -4
  154. package/dist/styles/avatar.css +6 -22
  155. package/dist/styles/base.css +2 -8
  156. package/dist/styles/browser-live-screen.css +38 -0
  157. package/dist/styles/browser-live-view.css +12 -4
  158. package/dist/styles/browser-replay.css +6 -6
  159. package/dist/styles/browser-run-panel.css +21 -18
  160. package/dist/styles/button.css +15 -6
  161. package/dist/styles/card.css +5 -5
  162. package/dist/styles/chatgpt-sign-in-screen.css +6 -6
  163. package/dist/styles/code-block.css +14 -13
  164. package/dist/styles/codex-model-selector.css +2 -0
  165. package/dist/styles/collapsible.css +1 -0
  166. package/dist/styles/commit.css +30 -7
  167. package/dist/styles/context.css +9 -9
  168. package/dist/styles/conversation-tab-picker.css +1 -1
  169. package/dist/styles/conversation.css +6 -8
  170. package/dist/styles/dialog.css +4 -4
  171. package/dist/styles/empty-state.css +3 -3
  172. package/dist/styles/environment-variables.css +12 -9
  173. package/dist/styles/field.css +2 -1
  174. package/dist/styles/fieldset.css +2 -2
  175. package/dist/styles/index.css +8 -7
  176. package/dist/styles/manager-office.css +480 -0
  177. package/dist/styles/mcp-plugin-catalog.css +44 -39
  178. package/dist/styles/mcp-server-picker.css +4 -4
  179. package/dist/styles/message-scroller.css +9 -11
  180. package/dist/styles/message.css +74 -28
  181. package/dist/styles/nanite-scene.css +9 -9
  182. package/dist/styles/navigation-menu.css +1 -0
  183. package/dist/styles/plan.css +13 -12
  184. package/dist/styles/pricing-page.css +37 -30
  185. package/dist/styles/prompt-input.css +26 -18
  186. package/dist/styles/queue.css +1 -0
  187. package/dist/styles/reasoning.css +1 -9
  188. package/dist/styles/recipes.css +29 -58
  189. package/dist/styles/responsive-sidebar-shell.css +107 -29
  190. package/dist/styles/separator.css +5 -5
  191. package/dist/styles/sources.css +4 -4
  192. package/dist/styles/stepper.css +1 -0
  193. package/dist/styles/streamdown.css +31 -21
  194. package/dist/styles/subagent-run.css +20 -3
  195. package/dist/styles/tabs.css +1 -0
  196. package/dist/styles/task.css +5 -17
  197. package/dist/styles/terminal.css +29 -10
  198. package/dist/styles/test-results.css +16 -7
  199. package/dist/styles/think-execution-status.css +10 -26
  200. package/dist/styles/think-execution-workbench.css +98 -108
  201. package/dist/styles/think-full-app.css +75 -225
  202. package/dist/styles/think-routine-library.css +26 -95
  203. package/dist/styles/think-thread-picker.css +17 -12
  204. package/dist/styles/transition-surface.css +7 -8
  205. package/dist/styles/utilities.css +75 -0
  206. package/dist/styles/web-preview.css +46 -22
  207. package/dist/styles/workspace-explorer.css +22 -44
  208. package/dist/styles/workspace-mount-manager.css +24 -2
  209. package/dist/utils/favicon.d.ts +6 -1
  210. package/dist/utils/favicon.js +18 -1
  211. package/package.json +37 -35
  212. package/dist/ResponsiveSidebarShell-DWjULskY.d.ts +0 -68
  213. package/dist/ToggleGroup-_pQMyHGM.d.ts +0 -80
  214. package/dist/components/agents-sdk/AgentActivityPreview.d.ts +0 -46
  215. package/dist/components/agents-sdk/AgentActivityPreview.js +0 -93
  216. package/dist/components/agents-sdk/ThinkThreadShell.d.ts +0 -38
  217. package/dist/components/agents-sdk/ThinkThreadShell.js +0 -27
  218. package/dist/components/foundations/Badge.d.ts +0 -62
  219. package/dist/components/foundations/Badge.js +0 -55
  220. package/dist/components/foundations/StatusPill.d.ts +0 -43
  221. package/dist/components/foundations/StatusPill.js +0 -35
  222. package/dist/components/general-purpose/Shell.d.ts +0 -149
  223. package/dist/components/general-purpose/Shell.js +0 -116
  224. package/dist/styles/agent-activity-preview-overlay.css +0 -169
  225. package/dist/styles/agent-activity-preview.css +0 -209
  226. package/dist/styles/badge.css +0 -120
  227. package/dist/styles/shell.css +0 -122
  228. package/dist/styles/status-pill.css +0 -39
@@ -3,10 +3,13 @@
3
3
  block-size: 100%;
4
4
  min-block-size: 0;
5
5
  display: grid;
6
- grid-template-rows: auto auto minmax(0, 1fr) auto;
6
+ grid-template-rows: auto auto var(--sigvelo-layout-track-fill) auto;
7
7
  overflow: hidden;
8
8
  border-inline-end: 0;
9
- background: var(--sigvelo-color-surface-under);
9
+ /* No material of its own: it fills whatever holds it — the shell's rail, the
10
+ compact drawer, a host's own panel — and painting a colour here would
11
+ cover the one that surface chose. */
12
+ background: transparent;
10
13
  color: var(--sigvelo-color-text);
11
14
  }
12
15
 
@@ -17,10 +20,8 @@
17
20
  align-items: center;
18
21
  gap: var(--sigvelo-density-compact-control-gap);
19
22
  padding-block: var(--sigvelo-spacing-1);
20
- padding-inline: calc(
21
- var(--sigvelo-density-compact-control-padding-inline) + env(safe-area-inset-left, 0px)
22
- )
23
- var(--sigvelo-density-compact-control-padding-inline);
23
+ padding-inline: calc(var(--sigvelo-layout-gutter) + env(safe-area-inset-left, 0px))
24
+ var(--sigvelo-layout-gutter);
24
25
  }
25
26
 
26
27
  .think-thread-picker__title {
@@ -69,7 +70,7 @@
69
70
  }
70
71
 
71
72
  .think-thread-status-indicators__item[data-status="attention"] {
72
- color: var(--sigvelo-color-warning-text);
73
+ color: var(--sigvelo-color-danger-text);
73
74
  }
74
75
 
75
76
  .think-thread-status-indicators__item[data-status="failed"] {
@@ -91,7 +92,7 @@
91
92
  }
92
93
 
93
94
  .think-thread-picker__viewport {
94
- padding: var(--sigvelo-spacing-1-5) var(--sigvelo-spacing-2) var(--sigvelo-spacing-3);
95
+ padding: var(--sigvelo-layout-cluster) var(--sigvelo-layout-gutter) var(--sigvelo-layout-gutter);
95
96
  overscroll-behavior: contain;
96
97
  scrollbar-gutter: stable;
97
98
  }
@@ -115,9 +116,9 @@
115
116
  min-inline-size: 0;
116
117
  min-block-size: var(--sigvelo-density-compact-control-height);
117
118
  display: grid;
118
- grid-template-columns: minmax(0, 1fr) auto;
119
+ grid-template-columns: var(--sigvelo-layout-track-fill) auto;
119
120
  padding-block: 0;
120
- padding-inline: var(--sigvelo-density-compact-control-padding-inline);
121
+ padding-inline: var(--sigvelo-layout-gutter);
121
122
  align-items: center;
122
123
  justify-content: flex-start;
123
124
  column-gap: var(--sigvelo-spacing-1);
@@ -129,7 +130,7 @@
129
130
 
130
131
  .think-thread-picker__item:has(.think-thread-picker__delete) .think-thread-picker__thread {
131
132
  grid-template-columns:
132
- minmax(0, 1fr)
133
+ var(--sigvelo-layout-track-fill)
133
134
  minmax(var(--sigvelo-density-compact-control-height), max-content);
134
135
  }
135
136
 
@@ -266,10 +267,12 @@
266
267
  color: var(--sigvelo-color-danger-text);
267
268
  }
268
269
 
270
+ /* Stopped, not wrong: aborted/interrupted/skipped stay in the muted
271
+ monotone — colour is reserved for success, failure, and needs-a-human. */
269
272
  .think-thread-picker__thread[data-thread-status="aborted"] .think-thread-picker__thread-status,
270
273
  .think-thread-picker__thread[data-thread-status="interrupted"] .think-thread-picker__thread-status,
271
274
  .think-thread-picker__thread[data-thread-status="skipped"] .think-thread-picker__thread-status {
272
- color: var(--sigvelo-color-warning-text);
275
+ color: var(--sigvelo-color-text-muted);
273
276
  }
274
277
 
275
278
  .think-thread-picker__empty {
@@ -296,6 +299,7 @@
296
299
  flex: 0 0 auto;
297
300
  }
298
301
 
302
+ /* 56rem matches --sigvelo-layout-break-compact. Container queries cannot read var(). */
299
303
  @container responsive-sidebar-shell (inline-size <= 56rem) {
300
304
  .think-thread-picker {
301
305
  block-size: auto;
@@ -326,6 +330,7 @@
326
330
  .think-thread-picker__scroll,
327
331
  .think-thread-picker__viewport {
328
332
  block-size: auto;
333
+ /* Compact drawer list cap. Not --sigvelo-layout-sidebar. */
329
334
  max-block-size: min(16rem, 42dvh);
330
335
  }
331
336
 
@@ -1,8 +1,7 @@
1
+ /* The exit transform is a hook: defaults live in the fallbacks at each use
2
+ site, and picking a `data-variant` declares a value on the element itself —
3
+ the component answering its own prop, which is meant to win. */
1
4
  .transition-surface {
2
- --transition-surface-inline: 0;
3
- --transition-surface-block: 0;
4
- --transition-surface-scale: 1;
5
-
6
5
  opacity: 1;
7
6
  translate: 0;
8
7
  scale: 1;
@@ -29,16 +28,16 @@
29
28
  .transition-surface[hidden] {
30
29
  display: none;
31
30
  opacity: 0;
32
- translate: var(--transition-surface-inline) var(--transition-surface-block);
33
- scale: var(--transition-surface-scale);
31
+ translate: var(--transition-surface-inline, 0) var(--transition-surface-block, 0);
32
+ scale: var(--transition-surface-scale, 1);
34
33
  transition-timing-function: var(--sigvelo-motion-ease-exit);
35
34
  }
36
35
 
37
36
  @starting-style {
38
37
  .transition-surface {
39
38
  opacity: 0;
40
- translate: var(--transition-surface-inline) var(--transition-surface-block);
41
- scale: var(--transition-surface-scale);
39
+ translate: var(--transition-surface-inline, 0) var(--transition-surface-block, 0);
40
+ scale: var(--transition-surface-scale, 1);
42
41
  }
43
42
  }
44
43
 
@@ -22,6 +22,39 @@
22
22
  list-style: none;
23
23
  }
24
24
 
25
+ /* 1D compositions hosts assemble themselves. Components that already own
26
+ anatomy use the matching data-recipe; these are for app markup. */
27
+ .sigvelo-stack {
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: var(--sigvelo-layout-stack);
31
+ min-inline-size: 0;
32
+ }
33
+
34
+ .sigvelo-cluster {
35
+ display: flex;
36
+ flex-wrap: wrap;
37
+ align-items: center;
38
+ gap: var(--sigvelo-layout-cluster);
39
+ min-inline-size: 0;
40
+ }
41
+
42
+ .sigvelo-fill {
43
+ min-inline-size: 0;
44
+ min-block-size: 0;
45
+ block-size: 100%;
46
+ }
47
+
48
+ .sigvelo-page {
49
+ box-sizing: border-box;
50
+ min-inline-size: 0;
51
+ inline-size: 100%;
52
+ max-inline-size: var(--sigvelo-layout-content);
53
+ margin-inline: auto;
54
+ padding-block: var(--sigvelo-layout-stack);
55
+ padding-inline: var(--sigvelo-layout-gutter);
56
+ }
57
+
25
58
  .sigvelo-truncate {
26
59
  overflow: hidden;
27
60
  text-overflow: ellipsis;
@@ -97,6 +130,48 @@
97
130
  max-inline-size: var(--sigvelo-measure-wide-block);
98
131
  }
99
132
 
133
+ /*
134
+ * The chevron on a disclosure trigger a consumer composed itself. Components
135
+ * that own their own trigger anatomy (Collapsible, MenuDisclosureGroup) style
136
+ * their marker directly; this is for app code putting an icon inside a
137
+ * `Collapsible.Trigger`, which otherwise re-derives the same two rules.
138
+ */
139
+ .sigvelo-disclosure-chevron {
140
+ transition: rotate var(--sigvelo-motion-duration-disclosure) var(--sigvelo-motion-ease-change);
141
+ }
142
+
143
+ :where([data-panel-open], [aria-expanded="true"]) .sigvelo-disclosure-chevron {
144
+ rotate: 180deg;
145
+ }
146
+
147
+ /*
148
+ * A prompt that has to outlive the reader's attention: a permission ask a
149
+ * browser will only grant from a gesture, an offer to reconnect. `Toast` is the
150
+ * wrong shape for these because it schedules its own dismissal, and these leave
151
+ * only when the reader acts. The layer is inert so the page underneath stays
152
+ * usable and only the control inside it takes the pointer back; the inset clears
153
+ * whatever the app already anchors to the bottom edge.
154
+ */
155
+ .sigvelo-floating-prompt {
156
+ --sigvelo-floating-prompt-inset: var(--sigvelo-spacing-4);
157
+
158
+ position: fixed;
159
+ inset-inline: 0;
160
+ inset-block-end: calc(env(safe-area-inset-bottom, 0px) + var(--sigvelo-floating-prompt-inset));
161
+ z-index: var(--sigvelo-z-toast);
162
+ display: flex;
163
+ justify-content: center;
164
+ pointer-events: none;
165
+ }
166
+
167
+ /* Floating reads as a pill, not as a form control, so the recipe radius goes
168
+ fully round here rather than at each consumer's call site. */
169
+ .sigvelo-floating-prompt > * {
170
+ --sigvelo-recipe-button-radius: var(--sigvelo-radius-full);
171
+
172
+ pointer-events: auto;
173
+ }
174
+
100
175
  /*
101
176
  * Reader-controlled text size for prose. Scales the message body only —
102
177
  * toolbars, labels, and controls keep resolving through the rem type ramp,
@@ -1,12 +1,17 @@
1
+ /* The card's chrome row (the Ploy bar): one bar height everywhere, muted
2
+ controls resting directly on whatever plane hosts the preview, separated
3
+ from the scrolling content by one hairline and a breath of shadow. */
1
4
  .web-preview__nav {
5
+ position: relative;
2
6
  display: flex;
3
7
  align-items: center;
4
- gap: var(--sigvelo-spacing-1-5);
5
- padding-block: var(--sigvelo-spacing-2);
6
- padding-inline: var(--sigvelo-spacing-2-5);
7
- background-color: var(--sigvelo-color-neutral-bg-subtle);
8
+ min-block-size: var(--sigvelo-layout-chrome);
9
+ gap: var(--sigvelo-layout-cluster);
10
+ padding-block: var(--sigvelo-spacing-1);
11
+ padding-inline: var(--sigvelo-layout-gutter);
8
12
  border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
9
13
  var(--sigvelo-color-neutral-border-subtle);
14
+ box-shadow: var(--sigvelo-elevation-bar);
10
15
  }
11
16
 
12
17
  .web-preview__nav-button {
@@ -15,21 +20,21 @@
15
20
 
16
21
  .web-preview__url-form {
17
22
  flex: 1;
18
- min-width: 0;
23
+ min-inline-size: 0;
19
24
  }
20
25
 
21
26
  .web-preview__url {
22
- width: 100%;
27
+ inline-size: 100%;
23
28
  font-family: var(--sigvelo-font-mono);
24
29
  font-size: var(--sigvelo-text-xs);
25
30
  }
26
31
 
27
32
  .web-preview__body {
28
33
  flex: 1;
29
- min-height: 16rem;
30
- width: 100%;
34
+ /* Preview canvas floor. Not --sigvelo-layout-sidebar. */
35
+ min-block-size: 16rem;
36
+ inline-size: 100%;
31
37
  border: none;
32
- background-color: var(--sigvelo-color-canvas);
33
38
  }
34
39
 
35
40
  .web-preview__body--readonly {
@@ -51,22 +56,21 @@
51
56
  flex-direction: column;
52
57
  border-block-start: var(--sigvelo-border-style) var(--sigvelo-border-width)
53
58
  var(--sigvelo-color-neutral-border-subtle);
54
- max-height: 12rem;
59
+ max-block-size: 12rem;
55
60
  }
56
61
 
57
62
  .web-preview__console-header {
58
63
  display: flex;
59
64
  align-items: center;
60
65
  justify-content: space-between;
61
- padding-block: var(--sigvelo-spacing-1-5);
62
- padding-inline: var(--sigvelo-spacing-3);
66
+ padding-block: var(--sigvelo-layout-cluster);
67
+ padding-inline: var(--sigvelo-layout-gutter);
63
68
  border: 0;
64
69
  font-size: var(--sigvelo-text-2xs);
65
70
  font-weight: var(--sigvelo-font-weight-bold);
66
71
  text-transform: uppercase;
67
72
  letter-spacing: 0.05em;
68
73
  color: var(--sigvelo-color-text-muted);
69
- background-color: var(--sigvelo-color-neutral-bg-subtle);
70
74
  cursor: pointer;
71
75
  }
72
76
 
@@ -90,18 +94,18 @@
90
94
 
91
95
  .web-preview__console-scroll {
92
96
  flex: 1;
93
- min-height: 0;
97
+ min-block-size: 0;
94
98
  }
95
99
 
96
100
  .web-preview__console-viewport {
97
- width: 100%;
98
- height: 100%;
101
+ inline-size: 100%;
102
+ block-size: 100%;
99
103
  overflow: auto;
100
104
  }
101
105
 
102
106
  .web-preview__console-empty {
103
- padding-block: var(--sigvelo-spacing-3);
104
- padding-inline: var(--sigvelo-spacing-3);
107
+ padding-block: var(--sigvelo-layout-gutter);
108
+ padding-inline: var(--sigvelo-layout-gutter);
105
109
  font-size: var(--sigvelo-text-xs);
106
110
  color: var(--sigvelo-color-text-muted);
107
111
  text-align: center;
@@ -109,11 +113,11 @@
109
113
 
110
114
  .web-preview__console-item {
111
115
  display: grid;
112
- grid-template-columns: auto 1fr auto;
113
- gap: var(--sigvelo-spacing-2);
116
+ grid-template-columns: auto var(--sigvelo-layout-track-fill) auto;
117
+ gap: var(--sigvelo-layout-cluster);
114
118
  align-items: baseline;
115
- padding-block: var(--sigvelo-spacing-1-5);
116
- padding-inline: var(--sigvelo-spacing-3);
119
+ padding-block: var(--sigvelo-layout-cluster);
120
+ padding-inline: var(--sigvelo-layout-gutter);
117
121
  font-family: var(--sigvelo-font-mono);
118
122
  font-size: var(--sigvelo-text-xs);
119
123
  border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
@@ -124,6 +128,26 @@
124
128
  border-block-end: none;
125
129
  }
126
130
 
131
+ .web-preview__console-level {
132
+ min-inline-size: 2.5rem;
133
+ color: var(--sigvelo-color-text-muted);
134
+ font-size: var(--sigvelo-text-2xs);
135
+ font-weight: var(--sigvelo-font-weight-semibold);
136
+ text-transform: uppercase;
137
+ }
138
+
139
+ .web-preview__console-item--info .web-preview__console-level {
140
+ color: var(--sigvelo-color-primary-text);
141
+ }
142
+
143
+ .web-preview__console-item--warn .web-preview__console-level {
144
+ color: var(--sigvelo-color-warning-text);
145
+ }
146
+
147
+ .web-preview__console-item--error .web-preview__console-level {
148
+ color: var(--sigvelo-color-danger-text);
149
+ }
150
+
127
151
  .web-preview__console-message {
128
152
  color: var(--sigvelo-color-text);
129
153
  word-break: break-word;
@@ -10,19 +10,12 @@
10
10
  overflow: hidden;
11
11
  font-family: inherit;
12
12
  color: var(--sigvelo-color-text);
13
- background-color: var(--sigvelo-color-surface-raised);
14
- border-radius: var(--sigvelo-radius-xl);
15
- box-shadow: var(--sigvelo-elevation-raised);
16
13
  container-type: inline-size;
17
14
  }
18
15
 
19
16
  .workspace-explorer:has(> .workspace-explorer__file[data-appearance="canvas"]) {
20
17
  block-size: auto;
21
18
  overflow: visible;
22
- background: transparent;
23
- border: 0;
24
- border-radius: 0;
25
- box-shadow: none;
26
19
  }
27
20
 
28
21
  .workspace-explorer__file[data-appearance="canvas"] {
@@ -81,15 +74,11 @@
81
74
  flex: 0 0 auto;
82
75
  min-block-size: var(--sigvelo-density-compact-control-height);
83
76
  padding-block: var(--sigvelo-spacing-0-5);
84
- padding-inline: var(--sigvelo-spacing-1-5);
77
+ padding-inline: var(--sigvelo-layout-gutter);
85
78
  border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
86
79
  var(--sigvelo-color-neutral-border-subtle);
87
80
  }
88
81
 
89
- .workspace-explorer__header .app-top-bar__button {
90
- padding: var(--sigvelo-spacing-1-5);
91
- }
92
-
93
82
  .workspace-explorer__heading {
94
83
  display: flex;
95
84
  align-items: baseline;
@@ -186,9 +175,9 @@
186
175
  flex: 1;
187
176
  align-items: center;
188
177
  justify-content: center;
189
- padding-block: var(--sigvelo-spacing-6);
190
- padding-inline: var(--sigvelo-spacing-3);
191
- font-size: var(--sigvelo-text-compact);
178
+ padding-block: var(--sigvelo-layout-stack);
179
+ padding-inline: var(--sigvelo-layout-gutter);
180
+ font-size: var(--sigvelo-text-prose);
192
181
  color: var(--sigvelo-color-text-muted);
193
182
  text-align: center;
194
183
  }
@@ -197,14 +186,13 @@
197
186
  flex: 1;
198
187
  min-block-size: 100%;
199
188
  border-radius: 0;
200
- background-color: var(--sigvelo-color-surface);
189
+ background-color: transparent;
201
190
  }
202
191
 
203
192
  .workspace-explorer__markdown-scroll {
204
193
  flex: 1;
205
194
  min-block-size: 0;
206
195
  overflow: auto;
207
- background-color: var(--sigvelo-color-surface);
208
196
  }
209
197
 
210
198
  .workspace-explorer__markdown {
@@ -213,8 +201,8 @@
213
201
  margin-inline: auto;
214
202
  padding-block: var(--sigvelo-spacing-8) var(--sigvelo-spacing-12);
215
203
  padding-inline: var(--sigvelo-spacing-6);
216
- font-size: var(--sigvelo-text-fluid-base);
217
- line-height: var(--sigvelo-leading-relaxed);
204
+ font-size: var(--sigvelo-text-prose);
205
+ line-height: var(--sigvelo-text-prose-leading);
218
206
  }
219
207
 
220
208
  .workspace-explorer__markdown-content > :first-child {
@@ -255,26 +243,20 @@
255
243
  [data-streamdown="code-block-actions"],
256
244
  [data-streamdown="mermaid-block-actions"]
257
245
  ) {
258
- background-color: var(--sigvelo-color-surface);
246
+ background-color: transparent;
259
247
  }
260
248
 
261
249
  .workspace-explorer__markdown-content [data-streamdown="heading-1"] {
262
250
  margin-block: var(--sigvelo-spacing-8) var(--sigvelo-spacing-3);
263
- font-size: var(--sigvelo-text-fluid-2xl);
264
- font-weight: var(--sigvelo-font-weight-bold);
265
- line-height: var(--sigvelo-leading-tight);
266
251
  }
267
252
 
268
253
  .workspace-explorer__markdown-content [data-streamdown="heading-2"] {
269
254
  margin-block: var(--sigvelo-spacing-8) var(--sigvelo-spacing-2);
270
- font-size: var(--sigvelo-text-fluid-lg);
271
- font-weight: var(--sigvelo-font-weight-bold);
272
255
  }
273
256
 
274
257
  .workspace-explorer__markdown-content
275
258
  :is([data-streamdown="heading-3"], [data-streamdown="heading-4"]) {
276
259
  margin-block: var(--sigvelo-spacing-6) var(--sigvelo-spacing-2);
277
- font-size: var(--sigvelo-text-lg);
278
260
  }
279
261
 
280
262
  .workspace-explorer__skill {
@@ -287,7 +269,7 @@
287
269
  .workspace-explorer__skill-kicker {
288
270
  margin-block-end: var(--sigvelo-spacing-2);
289
271
  color: var(--sigvelo-color-text-muted);
290
- font-size: var(--sigvelo-text-xs);
272
+ font-size: var(--sigvelo-text-meta);
291
273
  font-weight: var(--sigvelo-font-weight-semibold);
292
274
  letter-spacing: var(--sigvelo-tracking-wider);
293
275
  text-transform: uppercase;
@@ -307,10 +289,10 @@
307
289
 
308
290
  .workspace-explorer__skill-metadata {
309
291
  display: grid;
310
- grid-template-columns: max-content minmax(0, 1fr);
292
+ grid-template-columns: max-content var(--sigvelo-layout-track-fill);
311
293
  gap: var(--sigvelo-spacing-1) var(--sigvelo-spacing-3);
312
294
  margin-block: var(--sigvelo-spacing-4) 0;
313
- font-size: var(--sigvelo-text-sm);
295
+ font-size: var(--sigvelo-text-prose);
314
296
  }
315
297
 
316
298
  .workspace-explorer__skill-metadata dt {
@@ -331,19 +313,19 @@
331
313
  gap: var(--sigvelo-spacing-1-5);
332
314
  margin-block-start: var(--sigvelo-spacing-4);
333
315
  color: var(--sigvelo-color-success-text);
334
- font-size: var(--sigvelo-text-sm);
316
+ font-size: var(--sigvelo-text-prose);
335
317
  font-weight: var(--sigvelo-font-weight-semibold);
336
318
  }
337
319
 
338
320
  .workspace-explorer__skill-status[data-invalid] {
339
- color: var(--sigvelo-color-warning-text);
321
+ color: var(--sigvelo-color-danger-text);
340
322
  }
341
323
 
342
324
  .workspace-explorer__skill-errors {
343
325
  margin-block: var(--sigvelo-spacing-2) 0;
344
326
  padding-inline-start: var(--sigvelo-spacing-6);
345
- color: var(--sigvelo-color-warning-text);
346
- font-size: var(--sigvelo-text-sm);
327
+ color: var(--sigvelo-color-danger-text);
328
+ font-size: var(--sigvelo-text-prose);
347
329
  }
348
330
 
349
331
  .workspace-explorer__media-scroll {
@@ -352,7 +334,6 @@
352
334
  flex: 1;
353
335
  overflow: auto;
354
336
  color-scheme: inherit;
355
- background-color: var(--sigvelo-color-surface);
356
337
  }
357
338
 
358
339
  .workspace-explorer__media-scroll:focus-visible {
@@ -366,7 +347,6 @@
366
347
  inline-size: 100%;
367
348
  min-block-size: 100%;
368
349
  margin: 0;
369
- background-color: var(--sigvelo-color-surface);
370
350
  }
371
351
 
372
352
  .workspace-explorer__media-stage {
@@ -384,6 +364,7 @@
384
364
  display: flex;
385
365
  inline-size: 100%;
386
366
  block-size: 100%;
367
+ /* Image well floor. Not --sigvelo-layout-sidebar. */
387
368
  min-block-size: 16rem;
388
369
  align-items: center;
389
370
  justify-content: center;
@@ -448,7 +429,6 @@
448
429
  padding-inline: var(--sigvelo-spacing-4);
449
430
  border-block-start: var(--sigvelo-border-style) var(--sigvelo-border-width)
450
431
  var(--sigvelo-color-neutral-border-subtle);
451
- background-color: var(--sigvelo-color-surface);
452
432
  }
453
433
 
454
434
  .workspace-explorer__media-details {
@@ -457,7 +437,7 @@
457
437
  flex-wrap: wrap;
458
438
  gap: var(--sigvelo-spacing-2) var(--sigvelo-spacing-4);
459
439
  margin: 0;
460
- font-size: var(--sigvelo-text-xs);
440
+ font-size: var(--sigvelo-text-meta);
461
441
  }
462
442
 
463
443
  .workspace-explorer__media-details > div {
@@ -479,7 +459,7 @@
479
459
 
480
460
  .workspace-explorer__media-transcript {
481
461
  flex: 0 0 auto;
482
- font-size: var(--sigvelo-text-sm);
462
+ font-size: var(--sigvelo-text-prose);
483
463
  }
484
464
 
485
465
  .workspace-explorer__media-fallback,
@@ -487,7 +467,7 @@
487
467
  max-inline-size: 42rem;
488
468
  margin: 0;
489
469
  color: var(--sigvelo-color-text-muted);
490
- font-size: var(--sigvelo-text-compact);
470
+ font-size: var(--sigvelo-text-prose);
491
471
  text-align: center;
492
472
  }
493
473
 
@@ -541,6 +521,7 @@
541
521
  }
542
522
  }
543
523
 
524
+ /* Local wrap. Not --sigvelo-layout-break-compact. */
544
525
  @container (inline-size < 30rem) {
545
526
  .workspace-explorer__filter {
546
527
  margin-inline: var(--sigvelo-spacing-1-5);
@@ -560,13 +541,10 @@
560
541
  }
561
542
  }
562
543
 
544
+ /* Local wrap. Not --sigvelo-layout-break-compact. */
563
545
  @container (inline-size < 24rem) {
564
- .workspace-explorer__heading {
565
- max-inline-size: 34cqi;
566
- }
567
-
568
546
  .workspace-explorer__skill-metadata {
569
- grid-template-columns: 1fr;
547
+ grid-template-columns: var(--sigvelo-layout-track-fill);
570
548
  gap: 0;
571
549
  }
572
550
 
@@ -1,6 +1,6 @@
1
1
  .workspace-mount-manager__content {
2
2
  display: grid;
3
- gap: var(--sigvelo-spacing-3);
3
+ gap: var(--sigvelo-layout-gutter);
4
4
  }
5
5
 
6
6
  .workspace-mount-manager__error,
@@ -11,7 +11,7 @@
11
11
  }
12
12
 
13
13
  .workspace-mount-manager__list {
14
- gap: var(--sigvelo-spacing-2);
14
+ gap: var(--sigvelo-layout-cluster);
15
15
  }
16
16
 
17
17
  .workspace-mount-manager__error {
@@ -22,3 +22,25 @@
22
22
  .workspace-mount-manager__path code {
23
23
  overflow-wrap: anywhere;
24
24
  }
25
+
26
+ .workspace-mount-manager__permission {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ gap: var(--sigvelo-spacing-1);
30
+ color: var(--sigvelo-color-text-muted);
31
+ font-size: var(--sigvelo-text-xs);
32
+ line-height: var(--sigvelo-leading-snug);
33
+ }
34
+
35
+ .workspace-mount-manager__permission > svg {
36
+ inline-size: var(--sigvelo-control-icon-size-sm);
37
+ block-size: var(--sigvelo-control-icon-size-sm);
38
+ }
39
+
40
+ .workspace-mount-manager__permission[data-permission="granted"] {
41
+ color: var(--sigvelo-color-success-text);
42
+ }
43
+
44
+ .workspace-mount-manager__permission[data-permission="denied"] {
45
+ color: var(--sigvelo-color-danger-text);
46
+ }
@@ -6,5 +6,10 @@
6
6
  * `<link rel="icon">` should prefer that resolved URL because it may point elsewhere.
7
7
  */
8
8
  declare function inferFaviconUrl(url: string): string | undefined;
9
+ /**
10
+ * Browsers block public pages from fetching loopback URLs (private network
11
+ * access). Skip those favicons when the document is not itself on loopback.
12
+ */
13
+ declare function canRequestFavicon(src: string, documentOrigin?: string): boolean;
9
14
  //#endregion
10
- export { inferFaviconUrl };
15
+ export { canRequestFavicon, inferFaviconUrl };
@@ -14,5 +14,22 @@ function inferFaviconUrl(url) {
14
14
  return;
15
15
  }
16
16
  }
17
+ function isLoopbackHost(hostname) {
18
+ return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]";
19
+ }
20
+ /**
21
+ * Browsers block public pages from fetching loopback URLs (private network
22
+ * access). Skip those favicons when the document is not itself on loopback.
23
+ */
24
+ function canRequestFavicon(src, documentOrigin = globalThis.location?.origin) {
25
+ try {
26
+ const favicon = new URL(src);
27
+ if (!documentOrigin) return true;
28
+ const page = new URL(documentOrigin);
29
+ return !(isLoopbackHost(favicon.hostname) && !isLoopbackHost(page.hostname));
30
+ } catch {
31
+ return false;
32
+ }
33
+ }
17
34
  //#endregion
18
- export { inferFaviconUrl };
35
+ export { canRequestFavicon, inferFaviconUrl };