@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
@@ -1,6 +1,7 @@
1
1
  .agent-chat {
2
2
  --agent-chat-content-max-inline-size: 64rem;
3
3
 
4
+ container: agent-chat / inline-size;
4
5
  position: relative;
5
6
  inline-size: 100%;
6
7
  block-size: 100%;
@@ -25,7 +26,7 @@
25
26
  max-inline-size: 100%;
26
27
  inline-size: min(100%, var(--agent-chat-content-max-inline-size));
27
28
  margin-inline: auto;
28
- padding-block: var(--sigvelo-spacing-4)
29
+ padding-block: var(--sigvelo-spacing-8)
29
30
  calc(var(--agent-chat-composer-size, 5rem) + var(--sigvelo-spacing-2));
30
31
  padding-inline: var(--sigvelo-spacing-4);
31
32
  }
@@ -44,26 +45,247 @@
44
45
  --message-scroller-button-inset-block-end: var(--sigvelo-spacing-2);
45
46
  }
46
47
 
47
- /* Floating over the transcript: solid behind the controls, fading out
48
- through the top padding so content slides under instead of hitting a bar. */
48
+ .agent-chat-start-screen {
49
+ block-size: 100%;
50
+ min-block-size: 0;
51
+ overflow: auto;
52
+ scrollbar-gutter: stable;
53
+ }
54
+
55
+ .agent-chat-start-screen__content {
56
+ display: grid;
57
+ grid-template-rows: minmax(0, 1fr) auto minmax(0, 1fr);
58
+ inline-size: min(100%, var(--agent-chat-content-max-inline-size));
59
+ min-block-size: 100%;
60
+ margin-inline: auto;
61
+ padding: clamp(var(--sigvelo-spacing-5), 8vb, var(--sigvelo-spacing-12)) var(--sigvelo-spacing-4);
62
+ }
63
+
64
+ .agent-chat-start-screen__primary {
65
+ grid-row: 2;
66
+ display: grid;
67
+ gap: var(--sigvelo-spacing-6);
68
+ min-inline-size: 0;
69
+ }
70
+
71
+ .agent-chat-start-screen__heading {
72
+ margin: 0;
73
+ color: var(--sigvelo-color-text);
74
+ font-size: var(--sigvelo-text-2xl);
75
+ font-weight: var(--sigvelo-font-weight-normal);
76
+ letter-spacing: var(--sigvelo-tracking-normal);
77
+ line-height: var(--sigvelo-text-lg-leading);
78
+ text-align: center;
79
+ text-wrap: balance;
80
+ }
81
+
82
+ .agent-chat-start-screen__composer {
83
+ display: grid;
84
+ min-inline-size: 0;
85
+ }
86
+
87
+ .agent-chat-start-screen__composer > .agent-chat__composer {
88
+ position: static;
89
+ padding: 0;
90
+ background: none;
91
+ backdrop-filter: none;
92
+ }
93
+
94
+ .agent-chat-start-screen__composer > .agent-chat__composer::after {
95
+ content: none;
96
+ }
97
+
98
+ /* The one moment the composer is the subject of the screen rather than
99
+ chrome pinned under a transcript: lifted further off the page. */
100
+ .agent-chat-start-screen__composer > .agent-chat__composer > .prompt-input {
101
+ z-index: 1;
102
+ inline-size: 100%;
103
+ }
104
+
105
+ .agent-chat-start-screen__starters {
106
+ grid-row: 3;
107
+ align-self: start;
108
+ min-inline-size: 0;
109
+ min-block-size: 0;
110
+ padding-block-start: var(--sigvelo-spacing-6);
111
+ }
112
+
113
+ .agent-chat-starter-list {
114
+ display: grid;
115
+ gap: var(--sigvelo-spacing-0-5);
116
+ margin: 0;
117
+ padding: 0;
118
+ list-style: none;
119
+ }
120
+
121
+ .agent-chat-starter {
122
+ display: grid;
123
+ grid-template-columns: minmax(0, 1fr) auto;
124
+ align-items: center;
125
+ border-radius: var(--sigvelo-radius-xl);
126
+ transition: background-color var(--sigvelo-motion-duration-interaction)
127
+ var(--sigvelo-motion-ease-change);
128
+ }
129
+
130
+ /* A suggestion is not a card. It fills on approach and stays flat — the only
131
+ raised surface on this screen is the composer. */
132
+ .agent-chat-starter:hover,
133
+ .agent-chat-starter:focus-within {
134
+ background-color: var(--sigvelo-color-surface-sunken);
135
+ }
136
+
137
+ .agent-chat-starter .agent-chat-starter__action {
138
+ justify-content: flex-start;
139
+ inline-size: 100%;
140
+ min-block-size: var(--sigvelo-control-height-xl);
141
+ min-inline-size: 0;
142
+ gap: var(--sigvelo-spacing-3);
143
+ padding-block: var(--sigvelo-spacing-2);
144
+ padding-inline: var(--sigvelo-spacing-3);
145
+ background: transparent;
146
+ color: var(--sigvelo-color-text-muted);
147
+ font-size: var(--sigvelo-text-base);
148
+ font-weight: var(--sigvelo-font-weight-normal);
149
+ line-height: var(--sigvelo-leading-relaxed);
150
+ text-align: start;
151
+ white-space: normal;
152
+ transition: color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
153
+ }
154
+
155
+ .agent-chat-starter .agent-chat-starter__action:hover:not([data-disabled]) {
156
+ background: transparent;
157
+ }
158
+
159
+ /* Resting text is quiet so the heading and composer lead. Muted suggestions
160
+ take the next accessible rung down; the row a pointer or keyboard is
161
+ actually on resolves to full-strength text. */
162
+ .agent-chat-starter:hover .agent-chat-starter__action,
163
+ .agent-chat-starter:focus-within .agent-chat-starter__action {
164
+ color: var(--sigvelo-color-text);
165
+ }
166
+
167
+ .agent-chat-starter__action[data-muted] {
168
+ color: var(--sigvelo-color-text-subtle);
169
+ }
170
+
171
+ .agent-chat-starter__icon {
172
+ display: inline-flex;
173
+ flex: none;
174
+ color: var(--sigvelo-color-primary-text);
175
+ }
176
+
177
+ .agent-chat-starter__label {
178
+ flex: 1;
179
+ min-inline-size: 0;
180
+ overflow-wrap: anywhere;
181
+ }
182
+
183
+ .agent-chat-starter__dismiss {
184
+ margin-inline-end: var(--sigvelo-spacing-1);
185
+ color: var(--sigvelo-color-text-faint);
186
+ opacity: 0;
187
+ }
188
+
189
+ .agent-chat-starter:hover .agent-chat-starter__dismiss,
190
+ .agent-chat-starter:focus-within .agent-chat-starter__dismiss {
191
+ opacity: 1;
192
+ }
193
+
194
+ /* First paint only. The start screen is replaced by the transcript after the
195
+ first message, so this never re-runs mid-conversation. */
196
+ @media (prefers-reduced-motion: no-preference) {
197
+ .agent-chat-start-screen__primary > *,
198
+ .agent-chat-starter {
199
+ animation: agent-chat-start-screen-enter var(--sigvelo-motion-duration-disclosure)
200
+ var(--sigvelo-ease-snappy) backwards;
201
+ }
202
+
203
+ .agent-chat-start-screen__primary > *:nth-child(2),
204
+ .agent-chat-starter:nth-child(2) {
205
+ animation-delay: calc(var(--sigvelo-motion-stagger-step) * 1);
206
+ }
207
+
208
+ .agent-chat-start-screen__content > *:nth-child(3),
209
+ .agent-chat-starter:nth-child(3) {
210
+ animation-delay: calc(var(--sigvelo-motion-stagger-step) * 2);
211
+ }
212
+
213
+ .agent-chat-starter:nth-child(4) {
214
+ animation-delay: calc(var(--sigvelo-motion-stagger-step) * 3);
215
+ }
216
+
217
+ .agent-chat-starter:nth-child(n + 5) {
218
+ animation-delay: calc(var(--sigvelo-motion-stagger-step) * 4);
219
+ }
220
+ }
221
+
222
+ @keyframes agent-chat-start-screen-enter {
223
+ from {
224
+ opacity: 0;
225
+ translate: 0 var(--sigvelo-motion-distance-md);
226
+ }
227
+ }
228
+
229
+ /*
230
+ * Once there is something in the composer, the screen quiets around it instead
231
+ * of moving it: the heading slides down behind the composer and the starters
232
+ * fade, while the composer itself holds the position the caret is already in.
233
+ *
234
+ * Both keep their grid tracks. Collapsing either would re-centre the block and
235
+ * pull the textarea out from under the caret mid-sentence, which is the whole
236
+ * reason this is not a transition on the container.
237
+ *
238
+ * `:has()` reads the composer's own text, so nothing has to be lifted into
239
+ * React state — AgentChat never sees the input value, and this way it does not
240
+ * need to.
241
+ */
242
+ .agent-chat-start-screen__heading,
243
+ .agent-chat-start-screen__starters {
244
+ transition:
245
+ opacity var(--sigvelo-motion-duration-disclosure) var(--sigvelo-ease-snappy),
246
+ translate var(--sigvelo-motion-duration-disclosure) var(--sigvelo-ease-snappy),
247
+ visibility var(--sigvelo-motion-duration-disclosure);
248
+ }
249
+
250
+ .agent-chat-start-screen__content:has(textarea:not(:placeholder-shown))
251
+ .agent-chat-start-screen__heading {
252
+ opacity: 0;
253
+ translate: 0 var(--sigvelo-motion-distance-md);
254
+ }
255
+
256
+ /* Starters are buttons, so fading them is not enough — invisible controls that
257
+ still take a click or a Tab stop are worse than visible ones. */
258
+ .agent-chat-start-screen__content:has(textarea:not(:placeholder-shown))
259
+ .agent-chat-start-screen__starters {
260
+ visibility: hidden;
261
+ opacity: 0;
262
+ }
263
+
264
+ /* The composer floats above the transcript, but its dock remains part of the
265
+ transcript plane. Keep the underlay on the owning surface token so light
266
+ and dark themes meet without a visible horizontal seam. */
49
267
  .agent-chat__composer {
50
268
  isolation: isolate;
51
269
  position: absolute;
52
270
  inset-inline: 0;
53
271
  inset-block-end: 0;
54
- padding: var(--sigvelo-spacing-2);
55
- padding-block-start: var(--sigvelo-spacing-4);
56
- background: linear-gradient(
57
- to top,
58
- var(--sigvelo-color-surface) calc(100% - var(--sigvelo-spacing-4)),
59
- transparent
60
- );
272
+ padding: 0 var(--sigvelo-spacing-6) var(--sigvelo-spacing-6);
273
+ }
274
+
275
+ .agent-chat__composer::after {
276
+ position: absolute;
277
+ z-index: -1;
278
+ inset: 0;
279
+ content: "";
280
+ pointer-events: none;
281
+ background-color: var(--sigvelo-color-surface);
61
282
  }
62
283
 
63
284
  .agent-chat__composer > .prompt-input {
64
285
  z-index: 1;
65
286
  inline-size: min(100%, var(--agent-chat-content-max-inline-size));
66
287
  margin-inline: auto;
288
+ padding-block: var(--sigvelo-spacing-3);
67
289
  }
68
290
 
69
291
  /* Transient status pill between transcript and composer (recovery, errors). */
@@ -81,30 +303,21 @@
81
303
  }
82
304
 
83
305
  .agent-chat__queued {
84
- --agent-chat-queued-underlap: var(--sigvelo-spacing-3);
85
-
86
306
  position: relative;
87
307
  z-index: 0;
88
308
  inline-size: calc(
89
- min(100%, var(--agent-chat-content-max-inline-size)) - var(--sigvelo-spacing-8) -
90
- var(--sigvelo-spacing-2)
309
+ min(100%, var(--agent-chat-content-max-inline-size)) - var(--sigvelo-spacing-10)
91
310
  );
92
311
  margin-inline: auto;
93
- margin-block-end: calc(-1 * var(--agent-chat-queued-underlap));
94
- overflow: hidden;
95
- border: var(--sigvelo-border-width) var(--sigvelo-border-style)
96
- var(--sigvelo-color-neutral-border-subtle);
97
- border-radius: var(--sigvelo-radius-xl);
98
- background-color: var(--sigvelo-color-neutral-bg-subtle);
99
312
  }
100
313
 
101
314
  .agent-chat__queued-list {
315
+ flex: 1;
102
316
  display: grid;
103
317
  gap: var(--sigvelo-border-width);
318
+ min-inline-size: 0;
104
319
  margin: 0;
105
- padding-block-start: calc(var(--sigvelo-spacing-0-5) + var(--sigvelo-border-width));
106
- padding-block-end: calc(var(--sigvelo-spacing-0-5) + var(--agent-chat-queued-underlap));
107
- padding-inline: 0;
320
+ padding: 0;
108
321
  list-style: none;
109
322
  }
110
323
 
@@ -127,50 +340,23 @@
127
340
  color: var(--sigvelo-color-text-muted);
128
341
  }
129
342
 
130
- .agent-chat__queued-indicator svg,
131
- .agent-chat__queued-action svg {
343
+ .agent-chat__queued-indicator svg {
132
344
  inline-size: var(--sigvelo-text-sm);
133
345
  block-size: var(--sigvelo-text-sm);
134
346
  }
135
347
 
136
348
  .agent-chat__queued-action {
137
- display: inline-flex;
138
- align-items: center;
139
- justify-content: center;
140
- gap: var(--sigvelo-spacing-1-5);
141
- min-block-size: var(--sigvelo-spacing-6);
142
- padding-inline: var(--sigvelo-spacing-2);
143
- border: 0;
144
- border-radius: var(--sigvelo-radius-md);
145
- background: transparent;
146
- color: color-mix(in oklab, var(--sigvelo-color-text-muted), var(--sigvelo-color-text) 12%);
147
- font: inherit;
148
- cursor: pointer;
149
- }
150
-
151
- .agent-chat__queued-action:hover {
152
- color: var(--sigvelo-color-text);
153
- background-color: color-mix(in oklab, transparent, var(--sigvelo-color-text) 5%);
154
- }
155
-
156
- .agent-chat__queued-action:focus-visible {
157
- outline: none;
158
- box-shadow: var(--sigvelo-recipe-focus-shadow-subtle);
159
- }
160
-
161
- .agent-chat__queued-remove {
162
- min-inline-size: var(--sigvelo-spacing-6);
163
- padding-inline: 0;
349
+ flex: none;
350
+ font-weight: var(--sigvelo-font-weight-normal);
164
351
  }
165
352
 
166
353
  @media (any-pointer: coarse) {
167
- .agent-chat__queued-message,
168
- .agent-chat__queued-action {
169
- min-block-size: var(--sigvelo-control-height-xl);
354
+ .agent-chat-starter__dismiss {
355
+ opacity: 1;
170
356
  }
171
357
 
172
- .agent-chat__queued-remove {
173
- min-inline-size: var(--sigvelo-control-height-xl);
358
+ .agent-chat__queued-message {
359
+ min-block-size: var(--sigvelo-control-height-xl);
174
360
  }
175
361
  }
176
362
 
@@ -211,7 +397,55 @@
211
397
  }
212
398
 
213
399
  @media (forced-colors: active) {
400
+ .agent-chat-starter:hover,
401
+ .agent-chat-starter:focus-within {
402
+ outline: var(--sigvelo-border-width) solid CanvasText;
403
+ }
404
+
405
+ .agent-chat-starter__dismiss {
406
+ opacity: 1;
407
+ }
408
+
214
409
  .agent-chat__turn-error {
215
410
  border: var(--sigvelo-focus-width) solid CanvasText;
216
411
  }
217
412
  }
413
+
414
+ /* Sized against the chat's own box, not the viewport: this component is as
415
+ likely to be a 320px browser side panel as a full window, and the viewport
416
+ says nothing about which. Height still comes from the viewport — a container
417
+ cannot query its own block size without inline-size collapsing with it.
418
+
419
+ Narrowness is not a reason to abandon centring. A browser side panel is the
420
+ narrowest surface this renders in and one of the tallest, so keying
421
+ alignment off width top-aligned the start screen in a pane with hundreds of
422
+ spare pixels under it. Only the height query below drops the centring, and
423
+ only where there is genuinely no room for it. */
424
+ @container agent-chat (width <= 36rem) {
425
+ .agent-chat-start-screen__content {
426
+ padding-block: var(--sigvelo-spacing-5);
427
+ }
428
+
429
+ .agent-chat-start-screen__heading {
430
+ font-size: var(--sigvelo-text-2xl);
431
+ }
432
+
433
+ .agent-chat-starter__action {
434
+ font-size: var(--sigvelo-text-sm);
435
+ }
436
+ }
437
+
438
+ @media (max-height: 40rem) {
439
+ .agent-chat-start-screen__content {
440
+ grid-template-rows: auto auto;
441
+ padding-block: var(--sigvelo-spacing-5);
442
+ }
443
+
444
+ .agent-chat-start-screen__primary {
445
+ grid-row: 1;
446
+ }
447
+
448
+ .agent-chat-start-screen__starters {
449
+ grid-row: 2;
450
+ }
451
+ }
@@ -27,7 +27,7 @@
27
27
 
28
28
  .agent-connect__title-group {
29
29
  display: grid;
30
- gap: 0.2rem;
30
+ gap: var(--sigvelo-spacing-1);
31
31
  min-inline-size: 0;
32
32
  }
33
33
 
@@ -45,7 +45,7 @@
45
45
  margin: 0;
46
46
  color: var(--sigvelo-color-text-muted);
47
47
  font-size: var(--sigvelo-text-compact);
48
- line-height: 1.35;
48
+ line-height: var(--sigvelo-leading-snug);
49
49
  text-wrap: pretty;
50
50
  }
51
51
 
@@ -66,9 +66,9 @@
66
66
  display: inline-flex;
67
67
  align-items: center;
68
68
  justify-content: center;
69
- min-block-size: 1.75rem;
69
+ min-block-size: var(--sigvelo-spacing-7);
70
70
  min-inline-size: 0;
71
- padding: 0 0.45rem;
71
+ padding: 0 var(--sigvelo-spacing-2);
72
72
  border: 0;
73
73
  border-radius: var(--sigvelo-radius-sm);
74
74
  background: transparent;
@@ -77,7 +77,7 @@
77
77
  font: inherit;
78
78
  font-size: var(--sigvelo-text-xs);
79
79
  font-weight: var(--sigvelo-font-weight-semibold);
80
- line-height: 1.15;
80
+ line-height: var(--sigvelo-leading-tight);
81
81
  overflow-wrap: anywhere;
82
82
  text-align: center;
83
83
  }
@@ -93,7 +93,7 @@
93
93
 
94
94
  @media (pointer: coarse) {
95
95
  .agent-connect__target {
96
- min-block-size: 2.5rem;
96
+ min-block-size: var(--sigvelo-spacing-10);
97
97
  padding-inline: var(--sigvelo-spacing-3);
98
98
  }
99
99
  }
@@ -113,8 +113,8 @@
113
113
  background: var(--sigvelo-color-surface);
114
114
  color: var(--sigvelo-color-text);
115
115
  box-shadow:
116
- var(--sigvelo-shadow-xs),
117
- inset 0 0 0 1px var(--sigvelo-color-primary-border-subtle);
116
+ var(--sigvelo-elevation-raised),
117
+ inset 0 0 0 var(--sigvelo-border-width) var(--sigvelo-color-primary-border-subtle);
118
118
  }
119
119
 
120
120
  .agent-connect .code-block__container {
@@ -1,24 +1,9 @@
1
- .alert-dialog__trigger {
2
- display: inline-flex;
3
- align-items: center;
4
- justify-content: center;
5
- background: none;
6
- border: none;
7
- padding: 0;
8
- margin: 0;
9
- cursor: pointer;
10
- font: inherit;
11
- color: inherit;
12
- }
13
-
14
- .alert-dialog__trigger:focus-visible {
15
- outline: none;
16
- box-shadow: var(--sigvelo-recipe-focus-shadow);
17
- }
18
-
1
+ /* Matches .dialog__backdrop, including why one 8px radius is the affordable
2
+ version of this effect. */
19
3
  .alert-dialog__backdrop {
20
4
  background-color: var(--sigvelo-color-backdrop);
21
- z-index: 50;
5
+ backdrop-filter: var(--sigvelo-glass-filter);
6
+ z-index: var(--sigvelo-z-overlay);
22
7
  }
23
8
 
24
9
  .alert-dialog__popup {
@@ -28,7 +13,7 @@
28
13
  inset-block-start: 50%;
29
14
  inset-inline-start: 50%;
30
15
  translate: -50% -50%;
31
- z-index: 50;
16
+ z-index: var(--sigvelo-z-overlay);
32
17
  inline-size: calc(100% - var(--sigvelo-control-height-sm));
33
18
  max-inline-size: 28rem;
34
19
  max-block-size: calc(100dvb - var(--sigvelo-control-height-sm));
@@ -0,0 +1,122 @@
1
+ .avatar.app-icon {
2
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-8);
3
+ --sigvelo-recipe-app-icon-radius: 30%;
4
+
5
+ position: relative;
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ inline-size: var(--sigvelo-recipe-app-icon-size);
10
+ block-size: var(--sigvelo-recipe-app-icon-size);
11
+ flex: none;
12
+ overflow: hidden;
13
+ border-radius: var(--sigvelo-recipe-app-icon-radius);
14
+ background: var(--sigvelo-color-surface-raised);
15
+ box-shadow: 0 var(--sigvelo-spacing-1) var(--sigvelo-spacing-4)
16
+ color-mix(in oklab, transparent, var(--sigvelo-color-shadow) 5%);
17
+ corner-shape: round;
18
+ user-select: none;
19
+ }
20
+
21
+ .app-icon[data-app-icon-size="xs"] {
22
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-5);
23
+ }
24
+
25
+ .app-icon[data-app-icon-size="sm"] {
26
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-6);
27
+ --sigvelo-recipe-app-icon-radius: 37.5%;
28
+ }
29
+
30
+ .app-icon[data-app-icon-size="lg"] {
31
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-10);
32
+ }
33
+
34
+ .app-icon[data-app-icon-size="xl"] {
35
+ --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-12);
36
+ }
37
+
38
+ .app-icon[data-app-icon-variant="surface"],
39
+ .app-icon[data-app-icon-variant="contrast"] {
40
+ padding: var(--sigvelo-spacing-2);
41
+ }
42
+
43
+ .app-icon[data-app-icon-variant="surface"] {
44
+ background: var(--sigvelo-color-surface-raised);
45
+ }
46
+
47
+ .app-icon[data-app-icon-variant="contrast"] {
48
+ background: var(--sigvelo-color-primary-bg);
49
+ color: var(--sigvelo-color-primary-text-on-bg);
50
+ }
51
+
52
+ .app-icon::after {
53
+ position: absolute;
54
+ inset: 0;
55
+ border-radius: inherit;
56
+ box-shadow: inset 0 0 0 var(--sigvelo-border-width-hairline)
57
+ color-mix(in oklab, transparent, var(--sigvelo-color-shadow) 10%);
58
+ content: "";
59
+ pointer-events: none;
60
+ }
61
+
62
+ .app-icon__image,
63
+ .app-icon__fallback,
64
+ .app-icon > :where(svg, img) {
65
+ inline-size: 100%;
66
+ block-size: 100%;
67
+ }
68
+
69
+ .app-icon__image {
70
+ display: block;
71
+ object-fit: cover;
72
+ }
73
+
74
+ .app-icon__image[data-fit="contain"] {
75
+ object-fit: contain;
76
+ }
77
+
78
+ .app-icon__fallback {
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ border-radius: inherit;
83
+ background: var(--sigvelo-color-surface-raised);
84
+ color: var(--sigvelo-color-text-muted);
85
+ font-size: var(--sigvelo-text-xs);
86
+ font-weight: var(--sigvelo-font-weight-semibold);
87
+ }
88
+
89
+ .app-icon[data-app-icon-variant="contrast"] .app-icon__fallback {
90
+ background: inherit;
91
+ color: inherit;
92
+ }
93
+
94
+ .app-icon-stack {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ block-size: 0;
98
+ isolation: isolate;
99
+ }
100
+
101
+ .app-icon-stack > .app-icon {
102
+ position: relative;
103
+ z-index: 1;
104
+ }
105
+
106
+ .app-icon-stack > .app-icon:not(:first-child) {
107
+ margin-inline-start: calc(-1 * var(--sigvelo-spacing-2));
108
+ }
109
+
110
+ .app-icon-stack > .app-icon:first-child {
111
+ z-index: 3;
112
+ }
113
+
114
+ .app-icon-stack > .app-icon:nth-child(2) {
115
+ z-index: 2;
116
+ }
117
+
118
+ @media (forced-colors: active) {
119
+ .app-icon {
120
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
121
+ }
122
+ }
@@ -16,7 +16,6 @@
16
16
  padding-inline: calc(var(--sigvelo-spacing-2) + env(safe-area-inset-left, 0px))
17
17
  calc(var(--sigvelo-spacing-2) + env(safe-area-inset-right, 0px));
18
18
  border: 0;
19
- border-block-end: 0;
20
19
  border-radius: 0;
21
20
  background: var(--sigvelo-color-surface);
22
21
  }
@@ -81,10 +80,10 @@
81
80
 
82
81
  @media (any-pointer: coarse) {
83
82
  .app-top-bar__button {
84
- inline-size: 2.75rem;
85
- min-inline-size: 2.75rem;
86
- block-size: 2.75rem;
87
- min-block-size: 2.75rem;
83
+ inline-size: var(--sigvelo-spacing-11);
84
+ min-inline-size: var(--sigvelo-spacing-11);
85
+ block-size: var(--sigvelo-spacing-11);
86
+ min-block-size: var(--sigvelo-spacing-11);
88
87
  }
89
88
  }
90
89
 
@@ -12,7 +12,7 @@
12
12
  display: flex;
13
13
  align-items: baseline;
14
14
  gap: var(--sigvelo-spacing-2);
15
- line-height: 1.4;
15
+ line-height: var(--sigvelo-leading-snug);
16
16
  }
17
17
 
18
18
  .approval__question {
@@ -159,12 +159,6 @@
159
159
  gap: var(--sigvelo-spacing-1-5);
160
160
  }
161
161
 
162
- .approval__kbd {
163
- font-family: inherit;
164
- font-size: 0.75em;
165
- opacity: 0.75;
166
- }
167
-
168
162
  .approval__status:not(.sigvelo-visually-hidden) {
169
163
  color: var(--sigvelo-color-danger-text);
170
164
  font-size: var(--sigvelo-text-xs);
@@ -5,9 +5,9 @@
5
5
  font-family: inherit;
6
6
  color: var(--sigvelo-color-text);
7
7
  /* Shadow-led elevation: no perimeter border */
8
- background-color: var(--sigvelo-color-surface);
9
- border-radius: var(--sigvelo-radius-lg, var(--sigvelo-radius-md));
10
- box-shadow: var(--sigvelo-shadow-sm);
8
+ background-color: var(--sigvelo-color-surface-raised);
9
+ border-radius: var(--sigvelo-radius-lg);
10
+ box-shadow: var(--sigvelo-elevation-raised);
11
11
  overflow: hidden;
12
12
  }
13
13
 
@@ -41,7 +41,7 @@
41
41
  margin-block-start: var(--sigvelo-spacing-0-5);
42
42
  font-size: var(--sigvelo-text-compact);
43
43
  color: var(--sigvelo-color-text-muted);
44
- line-height: 1.4;
44
+ line-height: var(--sigvelo-leading-snug);
45
45
  overflow-wrap: anywhere;
46
46
  text-wrap: pretty;
47
47
  }