@mcp-b/react-components 0.20.5 → 0.22.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 (234) hide show
  1. package/dist/{AgentActivity-D2SHSGFX.d.ts → AgentActivity-D3OvrC02.d.ts} +14 -1
  2. package/dist/{AgentChat-C-ZyXbJz.d.ts → AgentChat-Bm1qYbOo.d.ts} +24 -1
  3. package/dist/AgentChatStartScreen-DDZ25aax.d.ts +60 -0
  4. package/dist/{Button-yRInko9u.d.ts → Button-SBIz6Lqi.d.ts} +2 -1
  5. package/dist/{CodeBlock-ygtuzqJd.js → CodeBlock-Cp67Njo3.js} +1 -1
  6. package/dist/{CodeBlock-Bbls1CnA.d.ts → CodeBlock-yMpGqScn.d.ts} +1 -1
  7. package/dist/Dialog-BD8NBKaE.d.ts +122 -0
  8. package/dist/{FileTree-CdgfccsM.js → FileTree-DW60q1w7.js} +1 -1
  9. package/dist/IconButton-CFKhu6OR.d.ts +35 -0
  10. package/dist/{Message-DzuteocT.js → Message-_-bEYLAO.js} +9 -16
  11. package/dist/{ModelSelector-pecWyOFI.js → ModelSelector-Brvj9Cab.js} +15 -8
  12. package/dist/{PromptInput-Cq-8RoXD.d.ts → PromptInput-BjoPWaaG.d.ts} +15 -2
  13. package/dist/{ThinkChatActivity-CdbL0aoA.d.ts → ThinkChatActivity-2BobmuvR.d.ts} +8 -7
  14. package/dist/{ThinkChatActivitySummary-D1xOrNrq.d.ts → ThinkChatActivitySummary-kr5fE0wg.d.ts} +14 -5
  15. package/dist/{ToggleGroup-DNd6cDJZ.d.ts → ToggleGroup-BW1jrhAF.d.ts} +10 -0
  16. package/dist/{Workspace-CWtust-2.d.ts → Workspace-CIycQ4xE.d.ts} +1 -1
  17. package/dist/{WorkspaceExplorer-DGigwsgH.d.ts → WorkspaceExplorer-BCipn7Vd.d.ts} +1 -1
  18. package/dist/{WorkspaceFile-D8Un_xge.d.ts → WorkspaceFile-DMtRMwVv.d.ts} +1 -1
  19. package/dist/{WorkspaceFileView-Bxx4wEzJ.js → WorkspaceFileView-rUEN2iox.js} +4 -4
  20. package/dist/assets/think-browser-host.png +0 -0
  21. package/dist/components/ActionGuide.d.ts +85 -0
  22. package/dist/components/ActionGuide.js +94 -0
  23. package/dist/components/Activity.d.ts +33 -17
  24. package/dist/components/Activity.js +40 -28
  25. package/dist/components/AgentActivity.d.ts +1 -1
  26. package/dist/components/AgentActivity.js +3 -11
  27. package/dist/components/AgentActivityPreview.d.ts +1 -1
  28. package/dist/components/AgentActivityPreview.js +17 -16
  29. package/dist/components/AgentAttention.d.ts +1 -1
  30. package/dist/components/AgentChat.d.ts +1 -1
  31. package/dist/components/AgentChat.js +169 -136
  32. package/dist/components/AgentChatStartScreen.d.ts +2 -0
  33. package/dist/components/AgentChatStartScreen.js +88 -0
  34. package/dist/components/AgentConnection.d.ts +1 -1
  35. package/dist/components/AgentConnection.js +2 -2
  36. package/dist/components/AgentMessageParts.js +1 -1
  37. package/dist/components/AgentToolDetail.js +1 -1
  38. package/dist/components/AlertDialog.d.ts +2 -1
  39. package/dist/components/AlertDialog.js +8 -2
  40. package/dist/components/AppIcon.d.ts +58 -0
  41. package/dist/components/AppIcon.js +51 -0
  42. package/dist/components/AppTopBar.js +9 -10
  43. package/dist/components/Approval.js +3 -5
  44. package/dist/components/Artifact.d.ts +3 -7
  45. package/dist/components/Artifact.js +12 -18
  46. package/dist/components/Avatar.d.ts +7 -2
  47. package/dist/components/Avatar.js +4 -2
  48. package/dist/components/BrowserLiveView.js +6 -8
  49. package/dist/components/BrowserReplay.js +9 -9
  50. package/dist/components/BrowserRunPanel.js +2 -2
  51. package/dist/components/Button.d.ts +1 -1
  52. package/dist/components/ChainOfThought.d.ts +1 -1
  53. package/dist/components/ChainOfThought.js +1 -1
  54. package/dist/components/ChatGptSignInScreen.js +2 -2
  55. package/dist/components/Checkbox.js +1 -1
  56. package/dist/components/Checkpoint.js +1 -1
  57. package/dist/components/CodeBlock.d.ts +1 -1
  58. package/dist/components/CodeBlock.js +1 -1
  59. package/dist/components/CodexModelSelector.js +1 -1
  60. package/dist/components/Commit.d.ts +1 -1
  61. package/dist/components/Commit.js +3 -3
  62. package/dist/components/ContextMenu.js +1 -1
  63. package/dist/components/Conversation.d.ts +3 -24
  64. package/dist/components/Conversation.js +6 -34
  65. package/dist/components/Dialog.d.ts +1 -117
  66. package/dist/components/Dialog.js +9 -1
  67. package/dist/components/EmptyState.d.ts +46 -0
  68. package/dist/components/EmptyState.js +50 -0
  69. package/dist/components/EnvironmentVariables.d.ts +1 -1
  70. package/dist/components/EnvironmentVariables.js +2 -2
  71. package/dist/components/FileTree.js +1 -1
  72. package/dist/components/IconButton.d.ts +1 -31
  73. package/dist/components/IconButton.js +2 -1
  74. package/dist/components/Kbd.d.ts +32 -0
  75. package/dist/components/Kbd.js +34 -0
  76. package/dist/components/McpConnectionRequest.d.ts +1 -1
  77. package/dist/components/McpConnectionRequest.js +1 -1
  78. package/dist/components/McpPluginCatalog.d.ts +86 -0
  79. package/dist/components/McpPluginCatalog.js +364 -0
  80. package/dist/components/McpServerPicker.d.ts +2 -2
  81. package/dist/components/McpServerPicker.js +7 -13
  82. package/dist/components/MediaPreviewCard.js +1 -1
  83. package/dist/components/Menubar.js +1 -1
  84. package/dist/components/Message.d.ts +4 -8
  85. package/dist/components/Message.js +1 -1
  86. package/dist/components/MessageScroller.d.ts +1 -1
  87. package/dist/components/MessageScroller.js +1 -1
  88. package/dist/components/ModelSelector.d.ts +12 -6
  89. package/dist/components/ModelSelector.js +2 -2
  90. package/dist/components/Plan.js +1 -1
  91. package/dist/components/PricingBillingToggle.js +1 -0
  92. package/dist/components/PricingPlanCard.d.ts +1 -1
  93. package/dist/components/PricingPlanCard.js +10 -12
  94. package/dist/components/PromptInput.d.ts +2 -2
  95. package/dist/components/PromptInput.js +30 -12
  96. package/dist/components/Queue.d.ts +1 -1
  97. package/dist/components/Queue.js +2 -2
  98. package/dist/components/Reasoning.js +5 -10
  99. package/dist/components/ResponsiveSidebarShell.js +2 -1
  100. package/dist/components/SearchField.js +1 -1
  101. package/dist/components/Select.js +1 -1
  102. package/dist/components/Sources.js +1 -1
  103. package/dist/components/StatusPill.d.ts +43 -0
  104. package/dist/components/StatusPill.js +35 -0
  105. package/dist/components/Stepper.js +1 -1
  106. package/dist/components/SubagentRunIndicator.js +1 -1
  107. package/dist/components/SubagentRunSelector.js +1 -1
  108. package/dist/components/Task.js +1 -1
  109. package/dist/components/Terminal.d.ts +3 -3
  110. package/dist/components/Terminal.js +7 -8
  111. package/dist/components/TestResults.js +1 -1
  112. package/dist/components/ThemeModeControl.js +1 -1
  113. package/dist/components/ThinkChat.d.ts +12 -6
  114. package/dist/components/ThinkChatActivity.d.ts +2 -2
  115. package/dist/components/ThinkChatActivity.js +28 -16
  116. package/dist/components/ThinkChatActivitySummary.d.ts +2 -2
  117. package/dist/components/ThinkChatActivitySummary.js +67 -64
  118. package/dist/components/ThinkChatToolPanels.js +1 -1
  119. package/dist/components/ThinkExecutionDetail.js +5 -5
  120. package/dist/components/ThinkExecutionStatus.js +1 -1
  121. package/dist/components/ThinkExecutionWorkbench.js +19 -25
  122. package/dist/components/ThinkFullApp.d.ts +8 -4
  123. package/dist/components/ThinkFullApp.js +17 -2
  124. package/dist/components/ThinkFullAppViewSwitch.d.ts +1 -1
  125. package/dist/components/ThinkRoutineBrowser.js +3 -2
  126. package/dist/components/ThinkRoutineForm.js +3 -3
  127. package/dist/components/ThinkRoutineLibrary.js +2 -2
  128. package/dist/components/ThinkRoutineRuns.js +4 -3
  129. package/dist/components/ThinkThreadPicker.js +5 -4
  130. package/dist/components/Toast.d.ts +12 -2
  131. package/dist/components/Toast.js +14 -4
  132. package/dist/components/ToggleGroup.d.ts +1 -1
  133. package/dist/components/ToggleGroup.js +54 -7
  134. package/dist/components/ToolInvocation.js +1 -1
  135. package/dist/components/Tooltip.d.ts +6 -4
  136. package/dist/components/Tooltip.js +11 -4
  137. package/dist/components/WebPreview.d.ts +13 -6
  138. package/dist/components/WebPreview.js +55 -50
  139. package/dist/components/Workspace.d.ts +1 -1
  140. package/dist/components/WorkspaceBrowser.d.ts +1 -1
  141. package/dist/components/WorkspaceBrowser.js +1 -1
  142. package/dist/components/WorkspaceExplorer.d.ts +3 -3
  143. package/dist/components/WorkspaceExplorer.js +1 -1
  144. package/dist/components/WorkspaceFile.d.ts +1 -1
  145. package/dist/components/WorkspaceFileView.d.ts +1 -1
  146. package/dist/components/WorkspaceFileView.js +1 -1
  147. package/dist/components/WorkspaceHeader.js +1 -1
  148. package/dist/components/icons.d.ts +2 -2
  149. package/dist/components/icons.js +2 -2
  150. package/dist/{copy-button-BrvQ7z4W.d.ts → copy-button-EBv_B9F6.d.ts} +2 -2
  151. package/dist/{copy-button-vo1paUSi.js → copy-button-TWq8nZhc.js} +8 -8
  152. package/dist/{icons-DyOM0EJs.js → icons-ua6f_GH3.js} +3 -2
  153. package/dist/{icons-DkRtZmvT.d.ts → icons-wP1yFUXF.d.ts} +6 -1
  154. package/dist/mcp-server-catalog-DycejaJ5.d.ts +1077 -0
  155. package/dist/styles/action-guide.css +128 -0
  156. package/dist/styles/activity-header.css +41 -10
  157. package/dist/styles/activity.css +26 -4
  158. package/dist/styles/agent-activity-preview-overlay.css +51 -12
  159. package/dist/styles/agent-activity-preview.css +23 -53
  160. package/dist/styles/agent-attention.css +2 -2
  161. package/dist/styles/agent-chat.css +291 -57
  162. package/dist/styles/agent-connection.css +8 -8
  163. package/dist/styles/alert-dialog.css +5 -20
  164. package/dist/styles/app-icon.css +122 -0
  165. package/dist/styles/app-top-bar.css +4 -5
  166. package/dist/styles/approval.css +1 -7
  167. package/dist/styles/artifact.css +4 -4
  168. package/dist/styles/avatar.css +13 -0
  169. package/dist/styles/base-ui-motion.css +1 -1
  170. package/dist/styles/base.css +94 -3
  171. package/dist/styles/browser-control-overlay.css +16 -7
  172. package/dist/styles/browser-live-view.css +5 -38
  173. package/dist/styles/browser-replay.css +2 -6
  174. package/dist/styles/browser-run-panel.css +4 -18
  175. package/dist/styles/button.css +17 -1
  176. package/dist/styles/card.css +4 -4
  177. package/dist/styles/chain-of-thought.css +0 -1
  178. package/dist/styles/chatgpt-sign-in-screen.css +7 -5
  179. package/dist/styles/checkbox-group.css +3 -3
  180. package/dist/styles/code-block.css +4 -4
  181. package/dist/styles/context-menu.css +1 -1
  182. package/dist/styles/conversation.css +7 -42
  183. package/dist/styles/description-list.css +4 -4
  184. package/dist/styles/dialog.css +22 -7
  185. package/dist/styles/empty-state.css +48 -0
  186. package/dist/styles/environment-variables.css +4 -4
  187. package/dist/styles/field.css +2 -2
  188. package/dist/styles/index.css +6 -0
  189. package/dist/styles/inline-citation.css +1 -1
  190. package/dist/styles/kbd.css +40 -0
  191. package/dist/styles/mcp-plugin-catalog.css +296 -0
  192. package/dist/styles/mcp-server-picker.css +0 -26
  193. package/dist/styles/media-preview-card.css +5 -3
  194. package/dist/styles/message-scroller.css +4 -4
  195. package/dist/styles/message.css +11 -6
  196. package/dist/styles/model-selector.css +5 -8
  197. package/dist/styles/popover.css +1 -1
  198. package/dist/styles/preview-card.css +1 -1
  199. package/dist/styles/prompt-input.css +44 -54
  200. package/dist/styles/queue.css +2 -2
  201. package/dist/styles/recipes.css +83 -9
  202. package/dist/styles/resizable-side-panel.css +1 -1
  203. package/dist/styles/responsive-sidebar-shell.css +19 -14
  204. package/dist/styles/scrollbars.css +32 -3
  205. package/dist/styles/search-field.css +9 -0
  206. package/dist/styles/sources.css +1 -1
  207. package/dist/styles/status-pill.css +39 -0
  208. package/dist/styles/stepper.css +2 -2
  209. package/dist/styles/streamdown.css +13 -12
  210. package/dist/styles/subagent-run.css +3 -3
  211. package/dist/styles/switch.css +1 -3
  212. package/dist/styles/tabs.css +1 -1
  213. package/dist/styles/task.css +1 -1
  214. package/dist/styles/terminal.css +2 -2
  215. package/dist/styles/test-results.css +1 -2
  216. package/dist/styles/textarea.css +1 -1
  217. package/dist/styles/theme-mode-control.css +1 -1
  218. package/dist/styles/think-execution-status.css +4 -23
  219. package/dist/styles/think-execution-workbench.css +2 -3
  220. package/dist/styles/think-full-app.css +24 -4
  221. package/dist/styles/think-routine-library.css +14 -16
  222. package/dist/styles/think-thread-picker.css +9 -26
  223. package/dist/styles/toast.css +2 -23
  224. package/dist/styles/toggle-group.css +76 -3
  225. package/dist/styles/tooltip.css +1 -2
  226. package/dist/styles/utilities.css +73 -0
  227. package/dist/styles/web-preview.css +5 -0
  228. package/dist/styles/workspace-explorer.css +4 -6
  229. package/dist/utils/favicon.d.ts +10 -0
  230. package/dist/utils/favicon.js +18 -0
  231. package/dist/utils/mcp-server-catalog.d.ts +2 -1078
  232. package/dist/utils/mcp-server-catalog.js +3 -11
  233. package/dist/utils/structured-code.d.ts +1 -1
  234. package/package.json +2 -2
@@ -112,7 +112,7 @@
112
112
 
113
113
  .model-selector__item:focus-visible {
114
114
  outline: none;
115
- box-shadow: inset 0 0 0 var(--sigvelo-focus-width) var(--sigvelo-color-focus);
115
+ box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
116
116
  }
117
117
 
118
118
  .model-selector__item[data-selected] {
@@ -126,11 +126,7 @@
126
126
  }
127
127
 
128
128
  .model-selector__empty {
129
- padding-block: var(--sigvelo-spacing-4);
130
- padding-inline: var(--sigvelo-spacing-3);
131
- text-align: center;
132
- font-size: var(--sigvelo-text-compact);
133
- color: var(--sigvelo-color-text-muted);
129
+ --sigvelo-recipe-empty-state-padding-block: var(--sigvelo-spacing-4);
134
130
  }
135
131
 
136
132
  @media (any-pointer: coarse) {
@@ -166,10 +162,11 @@
166
162
  gap: var(--sigvelo-spacing-1);
167
163
  }
168
164
 
169
- .model-selector__shortcut {
165
+ /* Prose, not a key. The mono face was a leftover from when this was a <kbd>,
166
+ and "Workers AI" reads worse in it. */
167
+ .model-selector__source {
170
168
  padding-block: var(--sigvelo-spacing-0-5);
171
169
  padding-inline: var(--sigvelo-spacing-1-5);
172
- font-family: var(--sigvelo-font-mono);
173
170
  font-size: var(--sigvelo-text-2xs);
174
171
  color: var(--sigvelo-color-text-muted);
175
172
  background-color: var(--sigvelo-color-neutral-bg-subtle);
@@ -1,5 +1,5 @@
1
1
  .popover__backdrop {
2
- z-index: 50;
2
+ z-index: var(--sigvelo-z-overlay);
3
3
  background-color: color-mix(in oklab, var(--sigvelo-color-text), transparent 50%);
4
4
  }
5
5
 
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  .preview-card__backdrop {
20
- z-index: 50;
20
+ z-index: var(--sigvelo-z-overlay);
21
21
  }
22
22
 
23
23
  .preview-card__popup {
@@ -8,17 +8,17 @@
8
8
  gap: var(--sigvelo-density-compact-control-gap);
9
9
  padding-block: var(--sigvelo-spacing-2);
10
10
  padding-inline: var(--sigvelo-density-compact-control-padding-inline);
11
- background-color: var(--sigvelo-color-surface);
12
- /* Fields keep their border; hairline + soft shadow for the floating-composer look */
13
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
14
- var(--sigvelo-color-neutral-border-subtle);
11
+ background-color: var(--sigvelo-color-surface-raised);
12
+ /* The composer's edge is the hairline ring inside --sigvelo-elevation-floating,
13
+ not a border: a 0.5px ring stays crisp at any zoom and does not add a pixel
14
+ of layout. Forced colors restores a real border at the end of this file. */
15
+ border: 0;
15
16
  border-radius: calc(var(--sigvelo-radius-xl) + var(--sigvelo-spacing-2));
16
- box-shadow: var(--sigvelo-shadow-sm);
17
+ box-shadow: var(--sigvelo-elevation-floating);
17
18
  font-family: inherit;
18
19
  color: var(--sigvelo-color-text);
19
- transition:
20
- border-color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
21
- box-shadow var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
20
+ transition: box-shadow var(--sigvelo-motion-duration-interaction)
21
+ var(--sigvelo-motion-ease-change);
22
22
  }
23
23
 
24
24
  .prompt-input__recording {
@@ -82,8 +82,7 @@
82
82
 
83
83
  /* Keep keyboard focus visible around the complete composer surface. */
84
84
  .prompt-input:focus-within {
85
- border-color: var(--sigvelo-color-focus);
86
- box-shadow: var(--sigvelo-recipe-focus-shadow-subtle);
85
+ box-shadow: var(--sigvelo-recipe-focus-shadow-subtle), var(--sigvelo-elevation-floating);
87
86
  }
88
87
 
89
88
  .prompt-input__header {
@@ -94,6 +93,30 @@
94
93
  min-block-size: var(--sigvelo-spacing-6);
95
94
  }
96
95
 
96
+ /* A supporting tray shares one material and overlap contract whether it sits
97
+ above the composer for queued work or below it for first-turn utilities. */
98
+ :where(.prompt-input__tray) {
99
+ display: flex;
100
+ align-items: center;
101
+ min-block-size: var(--sigvelo-control-height-xl);
102
+ min-inline-size: 0;
103
+ gap: var(--sigvelo-spacing-2);
104
+ margin-inline: var(--sigvelo-spacing-5);
105
+ padding: var(--sigvelo-spacing-1);
106
+ background-color: var(--sigvelo-color-neutral-bg-subtle);
107
+ color: var(--sigvelo-color-text-muted);
108
+ }
109
+
110
+ .prompt-input__tray[data-side="top"] {
111
+ margin-block-end: calc(-1 * var(--sigvelo-border-width));
112
+ border-radius: var(--sigvelo-radius-2xl) var(--sigvelo-radius-2xl) 0 0;
113
+ }
114
+
115
+ .prompt-input__tray[data-side="bottom"] {
116
+ margin-block-start: calc(-1 * var(--sigvelo-border-width));
117
+ border-radius: 0 0 var(--sigvelo-radius-2xl) var(--sigvelo-radius-2xl);
118
+ }
119
+
97
120
  .prompt-input__attachments {
98
121
  display: flex;
99
122
  flex-wrap: wrap;
@@ -123,8 +146,8 @@
123
146
 
124
147
  .prompt-input__attachment-zoom {
125
148
  display: block;
149
+ min-block-size: 0;
126
150
  padding: 0;
127
- border: none;
128
151
  background: none;
129
152
  cursor: zoom-in;
130
153
  }
@@ -141,18 +164,6 @@
141
164
  color: var(--sigvelo-color-text-muted);
142
165
  }
143
166
 
144
- .prompt-input__attachment-remove {
145
- display: inline-flex;
146
- align-items: center;
147
- justify-content: center;
148
- padding: var(--sigvelo-spacing-0-5);
149
- border: none;
150
- border-radius: var(--sigvelo-radius-sm);
151
- background: none;
152
- color: var(--sigvelo-color-text-muted);
153
- cursor: pointer;
154
- }
155
-
156
167
  .prompt-input__attachment[data-image] .prompt-input__attachment-remove {
157
168
  position: absolute;
158
169
  inset-block-start: var(--sigvelo-spacing-0-5);
@@ -160,14 +171,18 @@
160
171
  background-color: color-mix(in oklab, var(--sigvelo-color-surface), transparent 20%);
161
172
  }
162
173
 
163
- .prompt-input__attachment-remove:hover {
174
+ .prompt-input__attachment-remove:hover:not([data-disabled]) {
164
175
  color: var(--sigvelo-color-text);
165
176
  background-color: color-mix(in oklab, transparent, var(--sigvelo-color-text) 8%);
166
177
  }
167
178
 
179
+ /* Absorbs any height the composer is given beyond its content, so a tall
180
+ composer grows its typing area and keeps the footer controls on the floor
181
+ instead of stranding them mid-box. */
168
182
  .prompt-input__body {
169
183
  display: flex;
170
184
  align-items: stretch;
185
+ flex: 1 1 auto;
171
186
  flex-wrap: wrap;
172
187
  gap: var(--sigvelo-spacing-1);
173
188
  inline-size: 100%;
@@ -276,10 +291,6 @@
276
291
  content: "";
277
292
  }
278
293
 
279
- .prompt-input__dictation[data-starting] .prompt-input__dictation-icon {
280
- animation: sigvelo-icon-spin 900ms linear infinite;
281
- }
282
-
283
294
  @media (prefers-reduced-motion: reduce) {
284
295
  .prompt-input__dictation[data-listening] .prompt-input__dictation-icon::before {
285
296
  transition: none;
@@ -295,19 +306,10 @@
295
306
  display: inline-block;
296
307
  }
297
308
 
309
+ /* Spacing only. The chip itself is .kbd, which derives from currentColor and
310
+ so already reads correctly against the tooltip's inverted surface. */
298
311
  .prompt-input__tooltip-shortcut {
299
- display: inline-flex;
300
- align-items: center;
301
- justify-content: center;
302
312
  margin-inline-start: var(--sigvelo-spacing-2);
303
- padding-block: 0.0625rem;
304
- padding-inline: var(--sigvelo-spacing-1);
305
- border: var(--sigvelo-border-width) solid color-mix(in oklab, currentColor, transparent 75%);
306
- border-radius: var(--sigvelo-radius-sm);
307
- font-family: var(--sigvelo-font-mono);
308
- font-size: 0.75em;
309
- font-weight: var(--sigvelo-font-weight-semibold);
310
- opacity: 0.85;
311
313
  }
312
314
 
313
315
  .prompt-input__submit {
@@ -321,10 +323,6 @@
321
323
  color: var(--sigvelo-color-text);
322
324
  }
323
325
 
324
- .prompt-input__submit-spinner {
325
- animation: sigvelo-icon-spin 900ms linear infinite;
326
- }
327
-
328
326
  .prompt-input__action-menu {
329
327
  min-inline-size: 12rem;
330
328
  }
@@ -475,17 +473,15 @@
475
473
 
476
474
  .prompt-input__hover-card-content {
477
475
  position: absolute;
478
- z-index: 20;
476
+ z-index: var(--sigvelo-z-chrome);
479
477
  inset-block-start: calc(100% + var(--sigvelo-spacing-1-5));
480
478
  inset-inline-start: 0;
481
479
  min-inline-size: 14rem;
482
480
  padding: var(--sigvelo-spacing-3);
483
481
  color: var(--sigvelo-color-text);
484
- background-color: var(--sigvelo-color-surface);
485
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
486
- var(--sigvelo-color-neutral-border-subtle);
482
+ background-color: var(--sigvelo-color-surface-raised);
487
483
  border-radius: var(--sigvelo-radius-md);
488
- box-shadow: var(--sigvelo-shadow-md);
484
+ box-shadow: var(--sigvelo-elevation-overlay);
489
485
  }
490
486
 
491
487
  .prompt-input__tab-label {
@@ -651,12 +647,6 @@
651
647
  margin-inline-start: auto;
652
648
  }
653
649
 
654
- @media (prefers-reduced-motion: reduce) {
655
- .prompt-input__submit-spinner {
656
- animation: none;
657
- }
658
- }
659
-
660
650
  @media (forced-colors: active) {
661
651
  .prompt-input {
662
652
  border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
@@ -142,7 +142,7 @@
142
142
  gap: var(--sigvelo-spacing-1);
143
143
  font-size: var(--sigvelo-text-sm);
144
144
  color: var(--sigvelo-color-text);
145
- line-height: 1.4;
145
+ line-height: var(--sigvelo-leading-snug);
146
146
  transition:
147
147
  color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
148
148
  text-decoration-color var(--sigvelo-motion-duration-interaction)
@@ -153,7 +153,7 @@
153
153
  margin: 0;
154
154
  font-size: var(--sigvelo-text-xs);
155
155
  color: var(--sigvelo-color-text-muted);
156
- line-height: 1.4;
156
+ line-height: var(--sigvelo-leading-snug);
157
157
  transition:
158
158
  color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change),
159
159
  text-decoration-color var(--sigvelo-motion-duration-interaction)
@@ -8,6 +8,7 @@
8
8
  --sigvelo-recipe-control-padding-inline: var(--sigvelo-density-compact-control-padding-inline);
9
9
  --sigvelo-recipe-control-gap: var(--sigvelo-density-compact-control-gap);
10
10
  --sigvelo-recipe-control-font-size: var(--sigvelo-density-compact-control-font-size);
11
+ --sigvelo-recipe-control-line-height: var(--sigvelo-density-compact-control-line-height);
11
12
  --sigvelo-recipe-control-icon-size: var(--sigvelo-density-compact-control-icon-size);
12
13
  --sigvelo-recipe-control-radius: var(--sigvelo-radius-md);
13
14
  --sigvelo-recipe-field-background: var(--sigvelo-color-canvas);
@@ -20,11 +21,17 @@
20
21
  --sigvelo-recipe-invalid-focus-shadow:
21
22
  0 0 0 2px var(--sigvelo-color-canvas),
22
23
  0 0 0 4px color-mix(in oklab, var(--sigvelo-color-danger-bg), transparent 80%);
24
+ /* The same ring drawn inward, for elements that fill their container and
25
+ have no room outside to grow one: menu items, tab panels, listbox rows. */
26
+ --sigvelo-recipe-focus-shadow-inset: inset 0 0 0 var(--sigvelo-focus-width)
27
+ var(--sigvelo-color-focus);
23
28
  --sigvelo-recipe-disabled-opacity: 0.5;
24
- --sigvelo-recipe-surface-background: var(--sigvelo-color-surface);
25
- --sigvelo-recipe-surface-border: var(--sigvelo-color-neutral-border-muted);
26
- --sigvelo-recipe-surface-radius: var(--sigvelo-radius-md);
27
- --sigvelo-recipe-surface-shadow: var(--sigvelo-shadow-lg);
29
+ --sigvelo-recipe-surface-background: var(--sigvelo-color-surface-raised);
30
+ /* The overlay elevation carries its own hairline ring, so the border is a
31
+ forced-colors affordance rather than the visible edge. */
32
+ --sigvelo-recipe-surface-border: transparent;
33
+ --sigvelo-recipe-surface-radius: var(--sigvelo-radius-lg);
34
+ --sigvelo-recipe-surface-shadow: var(--sigvelo-elevation-overlay);
28
35
  --sigvelo-recipe-surface-padding: var(--sigvelo-spacing-1);
29
36
  --sigvelo-recipe-popup-min-inline-size: 10rem;
30
37
  --sigvelo-recipe-popup-arrow-size: var(--sigvelo-spacing-3);
@@ -33,7 +40,8 @@
33
40
  --sigvelo-recipe-row-padding-inline: var(--sigvelo-density-compact-control-padding-inline);
34
41
  --sigvelo-recipe-row-gap: var(--sigvelo-density-compact-control-gap);
35
42
  --sigvelo-recipe-row-font-size: var(--sigvelo-density-compact-control-font-size);
36
- --sigvelo-recipe-row-radius: var(--sigvelo-radius-sm);
43
+ --sigvelo-recipe-row-line-height: var(--sigvelo-density-compact-control-line-height);
44
+ --sigvelo-recipe-row-radius: var(--sigvelo-radius-md);
37
45
  --sigvelo-recipe-group-label-padding-block: var(--sigvelo-spacing-1-5);
38
46
  --sigvelo-recipe-group-label-padding-inline: var(--sigvelo-recipe-row-padding-inline);
39
47
  --sigvelo-recipe-group-label-color: var(--sigvelo-color-text-muted);
@@ -46,6 +54,7 @@
46
54
  --sigvelo-recipe-control-height: var(--sigvelo-control-height-sm);
47
55
  --sigvelo-recipe-control-padding-inline: var(--sigvelo-control-padding-inline-sm);
48
56
  --sigvelo-recipe-control-font-size: var(--sigvelo-control-text-sm);
57
+ --sigvelo-recipe-control-line-height: var(--sigvelo-control-line-height-sm);
49
58
  --sigvelo-recipe-control-icon-size: var(--sigvelo-control-icon-size-sm);
50
59
  }
51
60
 
@@ -53,6 +62,7 @@
53
62
  --sigvelo-recipe-control-height: var(--sigvelo-control-height-md);
54
63
  --sigvelo-recipe-control-padding-inline: var(--sigvelo-control-padding-inline-md);
55
64
  --sigvelo-recipe-control-font-size: var(--sigvelo-control-text-md);
65
+ --sigvelo-recipe-control-line-height: var(--sigvelo-control-line-height-md);
56
66
  --sigvelo-recipe-control-icon-size: var(--sigvelo-control-icon-size-md);
57
67
  }
58
68
 
@@ -60,6 +70,7 @@
60
70
  --sigvelo-recipe-control-height: var(--sigvelo-control-height-lg);
61
71
  --sigvelo-recipe-control-padding-inline: var(--sigvelo-control-padding-inline-lg);
62
72
  --sigvelo-recipe-control-font-size: var(--sigvelo-control-text-lg);
73
+ --sigvelo-recipe-control-line-height: var(--sigvelo-control-line-height-lg);
63
74
  --sigvelo-recipe-control-icon-size: var(--sigvelo-control-icon-size-lg);
64
75
  }
65
76
 
@@ -97,13 +108,14 @@
97
108
  */
98
109
  :where([data-recipe~="composer-command-surface"]) {
99
110
  --sigvelo-recipe-surface-radius: var(--sigvelo-radius-xl);
100
- --sigvelo-recipe-surface-shadow: var(--sigvelo-shadow-xl);
111
+ --sigvelo-recipe-surface-shadow: var(--sigvelo-elevation-overlay);
101
112
  --sigvelo-recipe-surface-padding: var(--sigvelo-spacing-1);
102
113
  --sigvelo-recipe-row-min-height: var(--sigvelo-density-compact-control-height);
103
114
  --sigvelo-recipe-row-padding-block: var(--sigvelo-spacing-1);
104
115
  --sigvelo-recipe-row-padding-inline: var(--sigvelo-density-compact-control-padding-inline);
105
116
  --sigvelo-recipe-row-gap: var(--sigvelo-density-compact-control-gap);
106
117
  --sigvelo-recipe-row-font-size: var(--sigvelo-density-compact-control-font-size);
118
+ --sigvelo-recipe-row-line-height: var(--sigvelo-density-compact-control-line-height);
107
119
  --sigvelo-recipe-row-radius: var(--sigvelo-radius-md);
108
120
  --sigvelo-recipe-group-label-padding-block: var(--sigvelo-spacing-2);
109
121
  --sigvelo-recipe-group-label-padding-inline: var(
@@ -138,6 +150,14 @@
138
150
  border-radius: var(--sigvelo-radius-md);
139
151
  }
140
152
 
153
+ :where([data-recipe~="application-plane"]) {
154
+ margin-inline: var(--sigvelo-spacing-2);
155
+ margin-block-end: var(--sigvelo-spacing-2);
156
+ border-radius: var(--sigvelo-radius-lg);
157
+ background: var(--sigvelo-color-surface);
158
+ box-shadow: var(--sigvelo-elevation-floating);
159
+ }
160
+
141
161
  :where([data-recipe~="disclosure-stack"]) {
142
162
  display: flex;
143
163
  flex-direction: column;
@@ -170,6 +190,47 @@
170
190
  mask-repeat: no-repeat;
171
191
  }
172
192
 
193
+ /* The inline-axis partner, for toolbars, tab strips, and chip rows that scroll
194
+ sideways. Gradients take physical directions only, so start/end are swapped
195
+ under [dir="rtl"] rather than expressed logically. */
196
+ :where([data-recipe~="scroll-fade-x"]) {
197
+ --sigvelo-scroll-fade-start: 0px;
198
+ --sigvelo-scroll-fade-end: 0px;
199
+ -webkit-mask-image: linear-gradient(
200
+ to right,
201
+ transparent 0,
202
+ #000 var(--sigvelo-scroll-fade-start),
203
+ #000 calc(100% - var(--sigvelo-scroll-fade-end)),
204
+ transparent 100%
205
+ );
206
+ mask-image: linear-gradient(
207
+ to right,
208
+ transparent 0,
209
+ #000 var(--sigvelo-scroll-fade-start),
210
+ #000 calc(100% - var(--sigvelo-scroll-fade-end)),
211
+ transparent 100%
212
+ );
213
+ -webkit-mask-repeat: no-repeat;
214
+ mask-repeat: no-repeat;
215
+ }
216
+
217
+ :where([dir="rtl"] [data-recipe~="scroll-fade-x"], [data-recipe~="scroll-fade-x"][dir="rtl"]) {
218
+ -webkit-mask-image: linear-gradient(
219
+ to left,
220
+ transparent 0,
221
+ #000 var(--sigvelo-scroll-fade-start),
222
+ #000 calc(100% - var(--sigvelo-scroll-fade-end)),
223
+ transparent 100%
224
+ );
225
+ mask-image: linear-gradient(
226
+ to left,
227
+ transparent 0,
228
+ #000 var(--sigvelo-scroll-fade-start),
229
+ #000 calc(100% - var(--sigvelo-scroll-fade-end)),
230
+ transparent 100%
231
+ );
232
+ }
233
+
173
234
  @media (any-pointer: coarse) {
174
235
  :where(:root, [data-theme="light"], [data-theme="dark"]) {
175
236
  --sigvelo-recipe-row-min-height: var(--sigvelo-control-height-xl);
@@ -208,7 +269,7 @@
208
269
  padding-inline: var(--sigvelo-recipe-control-padding-inline);
209
270
  font-family: inherit;
210
271
  font-size: var(--sigvelo-recipe-control-font-size);
211
- line-height: var(--sigvelo-leading-compact);
272
+ line-height: var(--sigvelo-recipe-control-line-height);
212
273
  color: var(--sigvelo-color-text);
213
274
  background-color: var(--sigvelo-recipe-field-background);
214
275
  border: var(--sigvelo-border-style) var(--sigvelo-border-width) var(--sigvelo-recipe-field-border);
@@ -355,7 +416,7 @@
355
416
  padding-inline: var(--sigvelo-recipe-row-padding-inline);
356
417
  font-family: inherit;
357
418
  font-size: var(--sigvelo-recipe-row-font-size);
358
- line-height: var(--sigvelo-leading-compact);
419
+ line-height: var(--sigvelo-recipe-row-line-height);
359
420
  color: var(--sigvelo-color-text);
360
421
  text-decoration: none;
361
422
  border-radius: var(--sigvelo-recipe-row-radius);
@@ -520,7 +581,7 @@
520
581
  font-family: inherit;
521
582
  font-size: var(--sigvelo-recipe-control-font-size);
522
583
  font-weight: var(--sigvelo-font-weight-semibold);
523
- line-height: var(--sigvelo-leading-compact);
584
+ line-height: var(--sigvelo-recipe-control-line-height);
524
585
  color: var(--sigvelo-color-text);
525
586
  background-color: var(--sigvelo-color-canvas);
526
587
  border: var(--sigvelo-border-style) var(--sigvelo-border-width)
@@ -755,6 +816,19 @@
755
816
  }
756
817
 
757
818
  @media (forced-colors: active) {
819
+ /* Forced colors drops box-shadow, taking the hairline ring that normally
820
+ draws an overlay's edge with it. Give the border back its color. */
821
+ :where(:root, [data-theme="light"], [data-theme="dark"]) {
822
+ --sigvelo-recipe-surface-border: CanvasText;
823
+ }
824
+
825
+ :where([data-recipe~="application-plane"]) {
826
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
827
+ background: Canvas;
828
+ color: CanvasText;
829
+ box-shadow: none;
830
+ }
831
+
758
832
  :where(
759
833
  [data-slot="input"],
760
834
  [data-slot="select-trigger"],
@@ -7,7 +7,7 @@
7
7
  .resizable-side-panel__handle {
8
8
  position: absolute;
9
9
  inset-block: 0;
10
- z-index: 25;
10
+ z-index: var(--sigvelo-z-panel);
11
11
  inline-size: var(--sigvelo-spacing-6);
12
12
  padding: 0;
13
13
  border: 0;
@@ -5,12 +5,15 @@
5
5
  min-block-size: 0;
6
6
  display: grid;
7
7
  grid-template-rows: auto minmax(0, 1fr);
8
+ background: var(--sigvelo-color-surface-under);
9
+ }
10
+
11
+ .responsive-sidebar-shell > .app-top-bar {
12
+ background: var(--sigvelo-color-surface-under);
8
13
  }
9
14
 
10
15
  .responsive-sidebar-shell__frame {
11
- --responsive-sidebar-mobile-w: min(80cqi, 22rem);
12
16
  --responsive-sidebar-closed-translate: -100%;
13
- --responsive-sidebar-main-translate: var(--responsive-sidebar-mobile-w);
14
17
 
15
18
  position: relative;
16
19
  isolation: isolate;
@@ -21,7 +24,7 @@
21
24
  grid-template-columns: var(--resizable-side-panel-size, 16rem) minmax(0, 1fr);
22
25
  grid-template-rows: minmax(0, 1fr);
23
26
  overflow: hidden;
24
- background: var(--sigvelo-color-canvas);
27
+ background: var(--sigvelo-color-surface-under);
25
28
  color: var(--sigvelo-color-text);
26
29
  font-family: inherit;
27
30
  transition: grid-template-columns var(--sigvelo-motion-duration-layout)
@@ -30,7 +33,6 @@
30
33
 
31
34
  .responsive-sidebar-shell__frame:dir(rtl) {
32
35
  --responsive-sidebar-closed-translate: 100%;
33
- --responsive-sidebar-main-translate: calc(var(--responsive-sidebar-mobile-w) * -1);
34
36
  }
35
37
 
36
38
  .responsive-sidebar-shell__sidebar,
@@ -56,8 +58,16 @@
56
58
  display: none;
57
59
  }
58
60
 
61
+ @media (forced-colors: active) {
62
+ .responsive-sidebar-shell,
63
+ .responsive-sidebar-shell__frame {
64
+ background: canvas;
65
+ color: canvastext;
66
+ }
67
+ }
68
+
59
69
  .responsive-sidebar-shell__resizer {
60
- z-index: 25;
70
+ z-index: var(--sigvelo-z-panel);
61
71
  }
62
72
 
63
73
  .responsive-sidebar-shell[data-sidebar-open="false"] > .responsive-sidebar-shell__frame {
@@ -94,7 +104,7 @@
94
104
 
95
105
  .responsive-sidebar-shell__sidebar {
96
106
  position: relative;
97
- z-index: 23;
107
+ z-index: calc(var(--sigvelo-z-chrome) + 3);
98
108
  inset-inline-start: 50%;
99
109
  inline-size: min(calc(100cqi - var(--sigvelo-spacing-3)), 34rem);
100
110
  max-inline-size: none;
@@ -103,10 +113,9 @@
103
113
  align-self: start;
104
114
  margin-block-start: var(--sigvelo-spacing-1);
105
115
  overflow: hidden;
106
- border: var(--sigvelo-border-style) var(--sigvelo-border-width)
107
- var(--sigvelo-color-neutral-border-subtle);
108
116
  border-radius: var(--sigvelo-radius-lg);
109
- box-shadow: var(--sigvelo-shadow-md);
117
+ background-color: var(--sigvelo-color-surface-raised);
118
+ box-shadow: var(--sigvelo-elevation-overlay);
110
119
  visibility: visible;
111
120
  opacity: 1;
112
121
  translate: -50% 0;
@@ -133,10 +142,6 @@
133
142
  transition-timing-function: var(--sigvelo-motion-ease-exit);
134
143
  }
135
144
 
136
- .responsive-sidebar-shell__main {
137
- transition: none;
138
- }
139
-
140
145
  .responsive-sidebar-shell[data-sidebar-open="true"]
141
146
  > .responsive-sidebar-shell__frame
142
147
  > .responsive-sidebar-shell__main {
@@ -149,7 +154,7 @@
149
154
  position: absolute;
150
155
  inset-block: 0;
151
156
  inset-inline: 0;
152
- z-index: 22;
157
+ z-index: calc(var(--sigvelo-z-chrome) + 2);
153
158
  display: block;
154
159
  min-inline-size: 100%;
155
160
  padding: 0;
@@ -1,12 +1,41 @@
1
- :where(.message__content pre, .observability-table-wrap) {
1
+ /*
2
+ * Thin scrollbars on every scroll container the system owns.
3
+ *
4
+ * A default platform scrollbar inside a 15px-radius popup is the single
5
+ * loudest thing on the screen, so menus, lists, panels, and code blocks all
6
+ * take the same quiet treatment: thin, colored from the neutral ramp, and
7
+ * gutter-stable where a scrollbar appearing would otherwise shift text.
8
+ *
9
+ * Only containers that actually scroll are listed. Adding one means adding it
10
+ * here, not restating scrollbar-color in the component file.
11
+ */
12
+ :where(
13
+ .message__content pre,
14
+ .observability-table-wrap,
15
+ [data-recipe~="wide-scroll-picker"],
16
+ [data-slot="autocomplete-list"],
17
+ [data-slot="combobox-list"],
18
+ [data-slot="context-menu-content"],
19
+ [data-slot="dialog-content"],
20
+ [data-slot="dropdown-menu-content"],
21
+ [data-slot="menubar-content"],
22
+ [data-slot="popover-content"],
23
+ [data-slot="select-content"]
24
+ ) {
2
25
  --scrollbar-thumb: var(--app-scrollbar-thumb, var(--sigvelo-color-neutral-border-muted));
3
- --scrollbar-track: var(--app-scrollbar-track, var(--sigvelo-color-neutral-bg-subtle));
26
+ --scrollbar-track: var(--app-scrollbar-track, transparent);
4
27
 
5
28
  scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
6
- scrollbar-gutter: stable;
7
29
  scrollbar-width: thin;
8
30
  }
9
31
 
32
+ /* Reserving the gutter only matters where text would otherwise reflow. */
33
+ :where(.message__content pre, .observability-table-wrap) {
34
+ --scrollbar-track: var(--app-scrollbar-track, var(--sigvelo-color-neutral-bg-subtle));
35
+
36
+ scrollbar-gutter: stable;
37
+ }
38
+
10
39
  :where(.message__content pre) {
11
40
  overflow-x: auto;
12
41
  overflow-y: clip;
@@ -1,3 +1,12 @@
1
+ .search-field {
2
+ --sigvelo-recipe-control-height: var(--sigvelo-control-height-md);
3
+ --sigvelo-recipe-control-padding-inline: var(--sigvelo-control-padding-inline-md);
4
+ --sigvelo-recipe-control-font-size: var(--sigvelo-control-text-md);
5
+ --sigvelo-recipe-control-line-height: var(--sigvelo-control-line-height-md);
6
+ --sigvelo-recipe-control-icon-size: var(--sigvelo-control-icon-size-md);
7
+ --sigvelo-recipe-control-radius: var(--sigvelo-radius-full);
8
+ }
9
+
1
10
  .search-field__control {
2
11
  position: relative;
3
12
  }
@@ -67,7 +67,7 @@
67
67
  .sources__link-description {
68
68
  font-size: var(--sigvelo-text-xs);
69
69
  color: var(--sigvelo-color-text-muted);
70
- line-height: 1.4;
70
+ line-height: var(--sigvelo-leading-snug);
71
71
  overflow: hidden;
72
72
  text-overflow: ellipsis;
73
73
  display: -webkit-box;
@@ -0,0 +1,39 @@
1
+ /*
2
+ * The chip itself is `.badge`. Only the indicator lives here.
3
+ */
4
+ .status-pill__dot {
5
+ inline-size: var(--sigvelo-spacing-1-5);
6
+ block-size: var(--sigvelo-spacing-1-5);
7
+ flex-shrink: 0;
8
+ border-radius: var(--sigvelo-radius-circle);
9
+ /* currentColor, so the dot follows whichever badge color it was given rather
10
+ than needing a matching set of its own. */
11
+ background-color: currentColor;
12
+ }
13
+
14
+ .status-pill[data-busy] .status-pill__dot {
15
+ animation: sigvelo-status-pulse var(--sigvelo-motion-duration-pulse) ease-in-out infinite;
16
+ }
17
+
18
+ @keyframes sigvelo-status-pulse {
19
+ 0%,
20
+ 100% {
21
+ opacity: 1;
22
+ }
23
+
24
+ 50% {
25
+ opacity: 0.4;
26
+ }
27
+ }
28
+
29
+ /* The dot stays; only its breathing stops. A still dot still reads as a state
30
+ indicator, which is the part carrying meaning. */
31
+ @media (prefers-reduced-motion: reduce) {
32
+ .status-pill[data-busy] .status-pill__dot {
33
+ animation: none;
34
+ }
35
+ }
36
+
37
+ :root[data-motion="reduce"] .status-pill[data-busy] .status-pill__dot {
38
+ animation: none;
39
+ }
@@ -119,7 +119,7 @@
119
119
  }
120
120
 
121
121
  .stepper__indicator[data-loading] .stepper__indicator-content {
122
- animation: sigvelo-icon-spin 800ms linear infinite;
122
+ animation: sigvelo-icon-spin var(--sigvelo-motion-duration-spin) linear infinite;
123
123
  }
124
124
 
125
125
  .stepper__separator {
@@ -170,7 +170,7 @@
170
170
  margin-block-start: calc(var(--sigvelo-spacing-1) - var(--sigvelo-border-width));
171
171
  color: var(--sigvelo-color-text-muted);
172
172
  font-size: var(--sigvelo-text-compact);
173
- line-height: 1.35;
173
+ line-height: var(--sigvelo-leading-snug);
174
174
  }
175
175
 
176
176
  .stepper__panel {