@mcp-b/react-components 0.21.0 → 0.23.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 (168) hide show
  1. package/dist/{AgentChat-Dvkn8lce.d.ts → AgentChat-Bm1qYbOo.d.ts} +2 -2
  2. package/dist/{AgentChatStartScreen-CvXJBr4y.d.ts → AgentChatStartScreen-DDZ25aax.d.ts} +4 -1
  3. package/dist/{Button-yRInko9u.d.ts → Button-SBIz6Lqi.d.ts} +2 -1
  4. package/dist/{CodeBlock-ygtuzqJd.js → CodeBlock-Cp67Njo3.js} +1 -1
  5. package/dist/{CodeBlock-Bbls1CnA.d.ts → CodeBlock-yMpGqScn.d.ts} +1 -1
  6. package/dist/Dialog-BD8NBKaE.d.ts +122 -0
  7. package/dist/{FileTree-CdgfccsM.js → FileTree-DW60q1w7.js} +1 -1
  8. package/dist/IconButton-CFKhu6OR.d.ts +35 -0
  9. package/dist/{Message-DzuteocT.js → Message-_-bEYLAO.js} +9 -16
  10. package/dist/{ModelSelector-CEd8M9eK.js → ModelSelector-Brvj9Cab.js} +1 -1
  11. package/dist/{PromptInput-Cq-8RoXD.d.ts → PromptInput-BjoPWaaG.d.ts} +15 -2
  12. package/dist/{ThinkChatActivity-FY1VWXgh.d.ts → ThinkChatActivity-2BobmuvR.d.ts} +1 -1
  13. package/dist/{Workspace-CWtust-2.d.ts → Workspace-CIycQ4xE.d.ts} +1 -1
  14. package/dist/{WorkspaceExplorer-DGigwsgH.d.ts → WorkspaceExplorer-BCipn7Vd.d.ts} +1 -1
  15. package/dist/{WorkspaceFile-D8Un_xge.d.ts → WorkspaceFile-DMtRMwVv.d.ts} +1 -1
  16. package/dist/{WorkspaceFileView-Bxx4wEzJ.js → WorkspaceFileView-rUEN2iox.js} +4 -4
  17. package/dist/assets/think-browser-host.png +0 -0
  18. package/dist/components/ActionGuide.d.ts +85 -0
  19. package/dist/components/ActionGuide.js +94 -0
  20. package/dist/components/Activity.js +1 -1
  21. package/dist/components/AgentActivity.js +3 -11
  22. package/dist/components/AgentActivityPreview.js +15 -14
  23. package/dist/components/AgentAttention.d.ts +1 -1
  24. package/dist/components/AgentChat.d.ts +1 -1
  25. package/dist/components/AgentChat.js +33 -13
  26. package/dist/components/AgentChatStartScreen.d.ts +1 -1
  27. package/dist/components/AgentChatStartScreen.js +21 -15
  28. package/dist/components/AgentConnection.d.ts +1 -1
  29. package/dist/components/AgentConnection.js +2 -2
  30. package/dist/components/AgentMessageParts.js +1 -1
  31. package/dist/components/AgentToolDetail.js +1 -1
  32. package/dist/components/AlertDialog.d.ts +2 -1
  33. package/dist/components/AlertDialog.js +8 -2
  34. package/dist/components/AppIcon.d.ts +58 -0
  35. package/dist/components/AppIcon.js +51 -0
  36. package/dist/components/AppTopBar.js +9 -10
  37. package/dist/components/Approval.js +1 -1
  38. package/dist/components/Artifact.d.ts +3 -7
  39. package/dist/components/Artifact.js +12 -18
  40. package/dist/components/Avatar.d.ts +7 -2
  41. package/dist/components/Avatar.js +4 -2
  42. package/dist/components/BrowserLiveView.js +1 -1
  43. package/dist/components/BrowserReplay.js +4 -5
  44. package/dist/components/BrowserRunPanel.js +1 -1
  45. package/dist/components/Button.d.ts +1 -1
  46. package/dist/components/ChainOfThought.d.ts +1 -1
  47. package/dist/components/ChainOfThought.js +1 -1
  48. package/dist/components/ChatGptSignInScreen.js +2 -2
  49. package/dist/components/Checkbox.js +1 -1
  50. package/dist/components/Checkpoint.js +1 -1
  51. package/dist/components/CodeBlock.d.ts +1 -1
  52. package/dist/components/CodeBlock.js +1 -1
  53. package/dist/components/CodexModelSelector.js +1 -1
  54. package/dist/components/Commit.d.ts +1 -1
  55. package/dist/components/Commit.js +3 -3
  56. package/dist/components/ContextMenu.js +1 -1
  57. package/dist/components/Conversation.d.ts +2 -2
  58. package/dist/components/Conversation.js +4 -5
  59. package/dist/components/Dialog.d.ts +1 -117
  60. package/dist/components/Dialog.js +9 -1
  61. package/dist/components/EnvironmentVariables.d.ts +1 -1
  62. package/dist/components/EnvironmentVariables.js +2 -2
  63. package/dist/components/FileTree.js +1 -1
  64. package/dist/components/IconButton.d.ts +1 -31
  65. package/dist/components/IconButton.js +2 -1
  66. package/dist/components/McpConnectionRequest.d.ts +1 -1
  67. package/dist/components/McpConnectionRequest.js +1 -1
  68. package/dist/components/McpPluginCatalog.d.ts +86 -0
  69. package/dist/components/McpPluginCatalog.js +364 -0
  70. package/dist/components/McpServerPicker.d.ts +2 -2
  71. package/dist/components/McpServerPicker.js +7 -13
  72. package/dist/components/MediaPreviewCard.js +1 -1
  73. package/dist/components/Menubar.js +1 -1
  74. package/dist/components/Message.d.ts +4 -8
  75. package/dist/components/Message.js +1 -1
  76. package/dist/components/MessageScroller.d.ts +1 -1
  77. package/dist/components/MessageScroller.js +1 -1
  78. package/dist/components/ModelSelector.d.ts +2 -2
  79. package/dist/components/ModelSelector.js +1 -1
  80. package/dist/components/Plan.js +1 -1
  81. package/dist/components/PricingPlanCard.d.ts +1 -1
  82. package/dist/components/PricingPlanCard.js +10 -12
  83. package/dist/components/PromptInput.d.ts +2 -2
  84. package/dist/components/PromptInput.js +27 -10
  85. package/dist/components/Queue.d.ts +1 -1
  86. package/dist/components/Queue.js +2 -2
  87. package/dist/components/Reasoning.js +4 -9
  88. package/dist/components/ResponsiveSidebarShell.js +2 -1
  89. package/dist/components/ScrollArea.js +1 -0
  90. package/dist/components/SearchField.js +1 -1
  91. package/dist/components/Select.js +1 -1
  92. package/dist/components/Sources.js +1 -1
  93. package/dist/components/Stepper.js +1 -1
  94. package/dist/components/SubagentRunIndicator.js +1 -1
  95. package/dist/components/SubagentRunSelector.js +1 -1
  96. package/dist/components/Task.js +1 -1
  97. package/dist/components/Terminal.d.ts +3 -3
  98. package/dist/components/Terminal.js +7 -8
  99. package/dist/components/TestResults.js +1 -1
  100. package/dist/components/ThemeModeControl.js +1 -1
  101. package/dist/components/ThinkChat.d.ts +5 -5
  102. package/dist/components/ThinkChatActivity.d.ts +1 -1
  103. package/dist/components/ThinkChatActivity.js +1 -1
  104. package/dist/components/ThinkChatToolPanels.js +1 -1
  105. package/dist/components/ThinkExecutionDetail.js +1 -1
  106. package/dist/components/ThinkExecutionStatus.js +1 -1
  107. package/dist/components/ThinkExecutionWorkbench.js +14 -21
  108. package/dist/components/ThinkFullApp.d.ts +8 -4
  109. package/dist/components/ThinkFullApp.js +17 -2
  110. package/dist/components/ThinkRoutineBrowser.js +2 -2
  111. package/dist/components/ThinkRoutineForm.js +3 -3
  112. package/dist/components/ThinkRoutineLibrary.js +2 -2
  113. package/dist/components/ThinkRoutineRuns.js +1 -1
  114. package/dist/components/ThinkThreadPicker.js +2 -3
  115. package/dist/components/Toast.d.ts +12 -2
  116. package/dist/components/Toast.js +14 -4
  117. package/dist/components/Tooltip.d.ts +6 -4
  118. package/dist/components/Tooltip.js +11 -4
  119. package/dist/components/WebPreview.d.ts +13 -6
  120. package/dist/components/WebPreview.js +55 -50
  121. package/dist/components/Workspace.d.ts +1 -1
  122. package/dist/components/WorkspaceBrowser.d.ts +1 -1
  123. package/dist/components/WorkspaceBrowser.js +1 -1
  124. package/dist/components/WorkspaceExplorer.d.ts +3 -3
  125. package/dist/components/WorkspaceExplorer.js +1 -1
  126. package/dist/components/WorkspaceFile.d.ts +1 -1
  127. package/dist/components/WorkspaceFileView.d.ts +1 -1
  128. package/dist/components/WorkspaceFileView.js +1 -1
  129. package/dist/components/WorkspaceHeader.js +1 -1
  130. package/dist/components/icons.d.ts +2 -2
  131. package/dist/components/icons.js +2 -2
  132. package/dist/{copy-button-BrvQ7z4W.d.ts → copy-button-EBv_B9F6.d.ts} +2 -2
  133. package/dist/{copy-button-vo1paUSi.js → copy-button-TWq8nZhc.js} +8 -8
  134. package/dist/{icons-DyOM0EJs.js → icons-ua6f_GH3.js} +3 -2
  135. package/dist/{icons-DkRtZmvT.d.ts → icons-wP1yFUXF.d.ts} +6 -1
  136. package/dist/mcp-server-catalog-DycejaJ5.d.ts +1077 -0
  137. package/dist/styles/action-guide.css +128 -0
  138. package/dist/styles/agent-activity-preview-overlay.css +13 -1
  139. package/dist/styles/agent-activity-preview.css +3 -34
  140. package/dist/styles/agent-chat.css +110 -75
  141. package/dist/styles/alert-dialog.css +0 -18
  142. package/dist/styles/app-icon.css +122 -0
  143. package/dist/styles/app-top-bar.css +0 -1
  144. package/dist/styles/avatar.css +13 -0
  145. package/dist/styles/base.css +0 -1
  146. package/dist/styles/button.css +14 -0
  147. package/dist/styles/description-list.css +2 -2
  148. package/dist/styles/dialog.css +6 -6
  149. package/dist/styles/index.css +3 -0
  150. package/dist/styles/mcp-plugin-catalog.css +296 -0
  151. package/dist/styles/mcp-server-picker.css +0 -26
  152. package/dist/styles/message-scroller.css +5 -1
  153. package/dist/styles/message.css +7 -0
  154. package/dist/styles/prompt-input.css +26 -14
  155. package/dist/styles/recipes.css +27 -5
  156. package/dist/styles/responsive-sidebar-shell.css +14 -8
  157. package/dist/styles/search-field.css +9 -0
  158. package/dist/styles/think-full-app.css +22 -2
  159. package/dist/styles/think-thread-picker.css +1 -11
  160. package/dist/styles/toast.css +0 -21
  161. package/dist/styles/tokens.css +6 -0
  162. package/dist/styles/web-preview.css +5 -0
  163. package/dist/utils/favicon.d.ts +10 -0
  164. package/dist/utils/favicon.js +18 -0
  165. package/dist/utils/mcp-server-catalog.d.ts +2 -1078
  166. package/dist/utils/mcp-server-catalog.js +3 -11
  167. package/dist/utils/structured-code.d.ts +1 -1
  168. package/package.json +2 -2
@@ -0,0 +1,128 @@
1
+ .action-guide {
2
+ container: action-guide / inline-size;
3
+ display: grid;
4
+ gap: var(--sigvelo-spacing-8);
5
+ inline-size: 100%;
6
+ padding: var(--sigvelo-spacing-2) var(--sigvelo-spacing-2) var(--sigvelo-spacing-8);
7
+ color: var(--sigvelo-color-text);
8
+ }
9
+
10
+ .action-guide__header {
11
+ display: grid;
12
+ gap: var(--sigvelo-spacing-4);
13
+ }
14
+
15
+ .action-guide__title,
16
+ .action-guide__description,
17
+ .action-guide__section-title {
18
+ margin: 0;
19
+ font-size: var(--sigvelo-text-base);
20
+ }
21
+
22
+ .action-guide__title,
23
+ .action-guide__section-title {
24
+ font-weight: var(--sigvelo-font-weight-semibold);
25
+ line-height: var(--sigvelo-text-lg-leading);
26
+ }
27
+
28
+ .action-guide__description {
29
+ max-inline-size: var(--sigvelo-measure-prose);
30
+ line-height: var(--sigvelo-text-lg-leading);
31
+ }
32
+
33
+ .action-guide__section {
34
+ display: grid;
35
+ gap: var(--sigvelo-spacing-4);
36
+ }
37
+
38
+ .action-guide__list {
39
+ display: grid;
40
+ grid-template-columns: minmax(0, 1fr);
41
+ gap: var(--sigvelo-spacing-3);
42
+ margin: 0;
43
+ padding: 0;
44
+ list-style: none;
45
+ }
46
+
47
+ .action-guide__list[data-layout="compact"] {
48
+ display: flex;
49
+ flex-wrap: wrap;
50
+ }
51
+
52
+ .action-guide__list[data-layout="list"] {
53
+ gap: 0;
54
+ }
55
+
56
+ .action-guide__item,
57
+ .action-guide__action {
58
+ min-inline-size: 0;
59
+ }
60
+
61
+ .action-guide__action {
62
+ inline-size: 100%;
63
+ justify-content: flex-start;
64
+ color: var(--sigvelo-color-text);
65
+ font-size: var(--sigvelo-text-base);
66
+ font-weight: var(--sigvelo-font-weight-normal);
67
+ letter-spacing: var(--sigvelo-tracking-tight);
68
+ line-height: var(--sigvelo-text-base-leading);
69
+ white-space: normal;
70
+ text-align: start;
71
+ }
72
+
73
+ .action-guide__action-icon {
74
+ display: inline-flex;
75
+ flex: none;
76
+ color: var(--sigvelo-color-primary-text);
77
+ }
78
+
79
+ .action-guide__action-icon svg {
80
+ inline-size: var(--sigvelo-control-icon-size-md);
81
+ block-size: var(--sigvelo-control-icon-size-md);
82
+ }
83
+
84
+ .action-guide__action-label {
85
+ min-inline-size: 0;
86
+ overflow-wrap: anywhere;
87
+ }
88
+
89
+ .action-guide__list[data-layout="compact"] .action-guide__action {
90
+ inline-size: auto;
91
+ max-inline-size: 100%;
92
+ min-block-size: var(--sigvelo-spacing-12);
93
+ gap: var(--sigvelo-spacing-3);
94
+ padding-inline: var(--sigvelo-spacing-4);
95
+ border-radius: var(--sigvelo-radius-lg);
96
+ }
97
+
98
+ .action-guide__list[data-layout="cards"] .action-guide__action {
99
+ flex-direction: column;
100
+ align-items: flex-start;
101
+ min-block-size: calc(var(--sigvelo-spacing-24) + var(--sigvelo-spacing-2));
102
+ gap: var(--sigvelo-spacing-4);
103
+ padding: var(--sigvelo-spacing-4);
104
+ border-radius: var(--sigvelo-radius-lg);
105
+ }
106
+
107
+ .action-guide__list[data-layout="cards"] .action-guide__action-label {
108
+ margin-block-start: auto;
109
+ }
110
+
111
+ .action-guide__list[data-layout="list"] .action-guide__action {
112
+ min-block-size: calc(var(--sigvelo-control-height-xl) + var(--sigvelo-spacing-2));
113
+ gap: var(--sigvelo-spacing-3);
114
+ padding-inline: var(--sigvelo-spacing-2-5);
115
+ border-radius: var(--sigvelo-radius-lg);
116
+ }
117
+
118
+ @container action-guide (width > 30rem) {
119
+ .action-guide__list[data-layout="cards"] {
120
+ grid-template-columns: repeat(2, minmax(0, 1fr));
121
+ }
122
+ }
123
+
124
+ @media (forced-colors: active) {
125
+ .action-guide__action-icon {
126
+ color: ButtonText;
127
+ }
128
+ }
@@ -3,6 +3,7 @@
3
3
  * owns placement, top-layer behavior, containment, and pointer-event policy.
4
4
  */
5
5
  @import "./activity-header.css";
6
+ @import "./app-icon.css";
6
7
  @import "./agent-activity-preview.css";
7
8
 
8
9
  :host {
@@ -17,7 +18,7 @@
17
18
  * token the imported stylesheets read has to be restated here. A token that
18
19
  * is missing does not fall back to the page value — it resolves to nothing
19
20
  * and the declaration is dropped, which is silent. Keep this list in step
20
- * with what agent-activity-preview.css and activity-header.css actually use.
21
+ * with what the imported component stylesheets actually use.
21
22
  *
22
23
  * These are px, not rem, and that is the point. This bundle renders in an
23
24
  * active-tab content script, and `rem` resolves against the host page's root
@@ -30,14 +31,22 @@
30
31
  --sigvelo-spacing-1-5: 6px;
31
32
  --sigvelo-spacing-2: 8px;
32
33
  --sigvelo-spacing-3: 12px;
34
+ --sigvelo-spacing-4: 16px;
35
+ --sigvelo-spacing-5: 20px;
36
+ --sigvelo-spacing-6: 24px;
33
37
  --sigvelo-spacing-8: 32px;
38
+ --sigvelo-spacing-10: 40px;
39
+ --sigvelo-spacing-12: 48px;
40
+ --sigvelo-spacing-14: 56px;
34
41
  --sigvelo-radius-md: 8px;
35
42
  --sigvelo-radius-lg: 12px;
36
43
  --sigvelo-radius-xs: 3px;
37
44
  --sigvelo-radius-full: 9999px;
38
45
  --sigvelo-border-style: solid;
46
+ --sigvelo-border-width-hairline: 0.5px;
39
47
  --sigvelo-border-width: 1px;
40
48
  --sigvelo-text-compact: 13px;
49
+ --sigvelo-text-xs: 12px;
41
50
  --sigvelo-font-weight-normal: 400;
42
51
  --sigvelo-font-weight-semibold: 500;
43
52
  --sigvelo-control-height-sm: 32px;
@@ -51,9 +60,12 @@
51
60
  --sigvelo-ease-standard: cubic-bezier(0.2, 0, 0, 1);
52
61
  --sigvelo-color-surface: Canvas;
53
62
  --sigvelo-color-surface-raised: Canvas;
63
+ --sigvelo-color-shadow: black;
54
64
  --sigvelo-color-text: CanvasText;
55
65
  --sigvelo-color-text-muted: GrayText;
56
66
  --sigvelo-color-primary-text: LinkText;
67
+ --sigvelo-color-primary-bg: CanvasText;
68
+ --sigvelo-color-primary-text-on-bg: Canvas;
57
69
  --sigvelo-color-warning-text: #8a4b00;
58
70
  --sigvelo-color-neutral-bg-subtle: color-mix(in oklab, CanvasText 7%, Canvas);
59
71
  --sigvelo-elevation-raised:
@@ -33,17 +33,10 @@
33
33
  z-index: 1;
34
34
  inset-block-start: calc(-1 * var(--sigvelo-spacing-2));
35
35
  inset-inline-end: var(--sigvelo-spacing-1);
36
- display: grid;
37
- place-items: center;
38
- width: var(--sigvelo-control-height-sm);
39
- height: var(--sigvelo-control-height-sm);
40
- padding: 0;
41
- border: 0;
42
36
  border-radius: var(--sigvelo-radius-full);
43
37
  color: var(--sigvelo-color-text-muted);
44
38
  background: var(--sigvelo-color-surface-raised);
45
39
  box-shadow: var(--sigvelo-elevation-raised);
46
- cursor: pointer;
47
40
  opacity: 0;
48
41
  scale: 0.92;
49
42
  transition:
@@ -59,22 +52,17 @@
59
52
  scale: 1;
60
53
  }
61
54
 
62
- .agent-activity-preview__dismiss:hover {
55
+ .agent-activity-preview__dismiss:hover:not([data-disabled]) {
63
56
  color: var(--sigvelo-color-text);
57
+ background: var(--sigvelo-color-surface-raised);
64
58
  }
65
59
 
66
- .agent-activity-preview__dismiss:focus-visible,
67
60
  .agent-activity-preview__row:focus-visible,
68
61
  .agent-activity-preview__file-action:focus-visible {
69
62
  outline: none;
70
63
  box-shadow: var(--sigvelo-recipe-focus-shadow);
71
64
  }
72
65
 
73
- .agent-activity-preview__dismiss > svg {
74
- width: var(--sigvelo-control-icon-size-sm);
75
- height: var(--sigvelo-control-icon-size-sm);
76
- }
77
-
78
66
  .agent-activity-preview__list {
79
67
  display: grid;
80
68
  gap: var(--sigvelo-spacing-0-5);
@@ -163,24 +151,6 @@
163
151
  min-width: 1rem;
164
152
  }
165
153
 
166
- .agent-activity-preview__favicons {
167
- display: flex;
168
- align-items: center;
169
- padding-inline-start: var(--sigvelo-spacing-1);
170
- }
171
-
172
- .agent-activity-preview__favicons img {
173
- display: block;
174
- width: var(--sigvelo-control-icon-size-lg);
175
- height: var(--sigvelo-control-icon-size-lg);
176
- /* Overlap the run of favicons by a quarter of a step. */
177
- margin-inline-start: calc(-1 * var(--sigvelo-spacing-1));
178
- border: 2px solid var(--sigvelo-color-surface-raised);
179
- border-radius: var(--sigvelo-radius-full);
180
- background: var(--sigvelo-color-surface-raised);
181
- object-fit: contain;
182
- }
183
-
184
154
  .agent-activity-preview__trailing > svg {
185
155
  width: var(--sigvelo-control-icon-size-md);
186
156
  height: var(--sigvelo-control-icon-size-md);
@@ -233,8 +203,7 @@
233
203
 
234
204
  .agent-activity-preview__badge,
235
205
  .agent-activity-preview__dismiss,
236
- .agent-activity-preview__file-action,
237
- .agent-activity-preview__favicons img {
206
+ .agent-activity-preview__file-action {
238
207
  border: var(--sigvelo-border-style) var(--sigvelo-border-width) CanvasText;
239
208
  }
240
209
  }
@@ -26,7 +26,7 @@
26
26
  max-inline-size: 100%;
27
27
  inline-size: min(100%, var(--agent-chat-content-max-inline-size));
28
28
  margin-inline: auto;
29
- padding-block: var(--sigvelo-spacing-4)
29
+ padding-block: var(--sigvelo-spacing-8)
30
30
  calc(var(--agent-chat-composer-size, 5rem) + var(--sigvelo-spacing-2));
31
31
  padding-inline: var(--sigvelo-spacing-4);
32
32
  }
@@ -54,40 +54,60 @@
54
54
 
55
55
  .agent-chat-start-screen__content {
56
56
  display: grid;
57
- align-content: center;
58
- gap: var(--sigvelo-spacing-6);
57
+ grid-template-rows: minmax(0, 1fr) auto minmax(0, 1fr);
59
58
  inline-size: min(100%, var(--agent-chat-content-max-inline-size));
60
59
  min-block-size: 100%;
61
60
  margin-inline: auto;
62
61
  padding: clamp(var(--sigvelo-spacing-5), 8vb, var(--sigvelo-spacing-12)) var(--sigvelo-spacing-4);
63
62
  }
64
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
+
65
71
  .agent-chat-start-screen__heading {
66
72
  margin: 0;
67
73
  color: var(--sigvelo-color-text);
68
- font-size: clamp(var(--sigvelo-text-2xl), 4vw, var(--sigvelo-text-3xl));
69
- font-weight: var(--sigvelo-font-weight-semibold);
70
- letter-spacing: var(--sigvelo-tracking-tight);
71
- line-height: var(--sigvelo-leading-tight);
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);
72
78
  text-align: center;
73
79
  text-wrap: balance;
74
80
  }
75
81
 
76
- .agent-chat-start-screen__content > .agent-chat__composer {
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 {
77
88
  position: static;
78
89
  padding: 0;
79
90
  background: none;
91
+ backdrop-filter: none;
92
+ }
93
+
94
+ .agent-chat-start-screen__composer > .agent-chat__composer::after {
95
+ content: none;
80
96
  }
81
97
 
82
98
  /* The one moment the composer is the subject of the screen rather than
83
- chrome pinned under a transcript: rounder, and lifted further off the page. */
84
- .agent-chat-start-screen__content > .agent-chat__composer > .prompt-input {
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;
85
102
  inline-size: 100%;
86
- border-radius: var(--sigvelo-radius-3xl);
87
103
  }
88
104
 
89
105
  .agent-chat-start-screen__starters {
106
+ grid-row: 3;
107
+ align-self: start;
90
108
  min-inline-size: 0;
109
+ min-block-size: 0;
110
+ padding-block-start: var(--sigvelo-spacing-6);
91
111
  }
92
112
 
93
113
  .agent-chat-starter-list {
@@ -126,6 +146,7 @@
126
146
  color: var(--sigvelo-color-text-muted);
127
147
  font-size: var(--sigvelo-text-base);
128
148
  font-weight: var(--sigvelo-font-weight-normal);
149
+ line-height: var(--sigvelo-leading-relaxed);
129
150
  text-align: start;
130
151
  white-space: normal;
131
152
  transition: color var(--sigvelo-motion-duration-interaction) var(--sigvelo-motion-ease-change);
@@ -135,8 +156,9 @@
135
156
  background: transparent;
136
157
  }
137
158
 
138
- /* Resting text is quiet so the heading and composer lead; the row a pointer
139
- or keyboard is actually on resolves to full-strength text. */
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. */
140
162
  .agent-chat-starter:hover .agent-chat-starter__action,
141
163
  .agent-chat-starter:focus-within .agent-chat-starter__action {
142
164
  color: var(--sigvelo-color-text);
@@ -172,13 +194,13 @@
172
194
  /* First paint only. The start screen is replaced by the transcript after the
173
195
  first message, so this never re-runs mid-conversation. */
174
196
  @media (prefers-reduced-motion: no-preference) {
175
- .agent-chat-start-screen__content > *,
197
+ .agent-chat-start-screen__primary > *,
176
198
  .agent-chat-starter {
177
199
  animation: agent-chat-start-screen-enter var(--sigvelo-motion-duration-disclosure)
178
200
  var(--sigvelo-ease-snappy) backwards;
179
201
  }
180
202
 
181
- .agent-chat-start-screen__content > *:nth-child(2),
203
+ .agent-chat-start-screen__primary > *:nth-child(2),
182
204
  .agent-chat-starter:nth-child(2) {
183
205
  animation-delay: calc(var(--sigvelo-motion-stagger-step) * 1);
184
206
  }
@@ -204,26 +226,66 @@
204
226
  }
205
227
  }
206
228
 
207
- /* Floating over the transcript: solid behind the controls, fading out
208
- through the top padding so content slides under instead of hitting a bar. */
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. */
209
267
  .agent-chat__composer {
210
268
  isolation: isolate;
211
269
  position: absolute;
212
270
  inset-inline: 0;
213
271
  inset-block-end: 0;
214
- padding: var(--sigvelo-spacing-2);
215
- padding-block-start: var(--sigvelo-spacing-4);
216
- background: linear-gradient(
217
- to top,
218
- var(--sigvelo-color-surface) calc(100% - var(--sigvelo-spacing-4)),
219
- transparent
220
- );
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);
221
282
  }
222
283
 
223
284
  .agent-chat__composer > .prompt-input {
224
285
  z-index: 1;
225
286
  inline-size: min(100%, var(--agent-chat-content-max-inline-size));
226
287
  margin-inline: auto;
288
+ padding-block: var(--sigvelo-spacing-3);
227
289
  }
228
290
 
229
291
  /* Transient status pill between transcript and composer (recovery, errors). */
@@ -241,30 +303,21 @@
241
303
  }
242
304
 
243
305
  .agent-chat__queued {
244
- --agent-chat-queued-underlap: var(--sigvelo-spacing-3);
245
-
246
306
  position: relative;
247
307
  z-index: 0;
248
308
  inline-size: calc(
249
- min(100%, var(--agent-chat-content-max-inline-size)) - var(--sigvelo-spacing-8) -
250
- var(--sigvelo-spacing-2)
309
+ min(100%, var(--agent-chat-content-max-inline-size)) - var(--sigvelo-spacing-10)
251
310
  );
252
311
  margin-inline: auto;
253
- margin-block-end: calc(-1 * var(--agent-chat-queued-underlap));
254
- overflow: hidden;
255
- border: var(--sigvelo-border-width) var(--sigvelo-border-style)
256
- var(--sigvelo-color-neutral-border-subtle);
257
- border-radius: var(--sigvelo-radius-xl);
258
- background-color: var(--sigvelo-color-neutral-bg-subtle);
259
312
  }
260
313
 
261
314
  .agent-chat__queued-list {
315
+ flex: 1;
262
316
  display: grid;
263
317
  gap: var(--sigvelo-border-width);
318
+ min-inline-size: 0;
264
319
  margin: 0;
265
- padding-block-start: calc(var(--sigvelo-spacing-0-5) + var(--sigvelo-border-width));
266
- padding-block-end: calc(var(--sigvelo-spacing-0-5) + var(--agent-chat-queued-underlap));
267
- padding-inline: 0;
320
+ padding: 0;
268
321
  list-style: none;
269
322
  }
270
323
 
@@ -287,40 +340,14 @@
287
340
  color: var(--sigvelo-color-text-muted);
288
341
  }
289
342
 
290
- .agent-chat__queued-indicator svg,
291
- .agent-chat__queued-action svg {
343
+ .agent-chat__queued-indicator svg {
292
344
  inline-size: var(--sigvelo-text-sm);
293
345
  block-size: var(--sigvelo-text-sm);
294
346
  }
295
347
 
296
348
  .agent-chat__queued-action {
297
- display: inline-flex;
298
- align-items: center;
299
- justify-content: center;
300
- gap: var(--sigvelo-spacing-1-5);
301
- min-block-size: var(--sigvelo-spacing-6);
302
- padding-inline: var(--sigvelo-spacing-2);
303
- border: 0;
304
- border-radius: var(--sigvelo-radius-md);
305
- background: transparent;
306
- color: color-mix(in oklab, var(--sigvelo-color-text-muted), var(--sigvelo-color-text) 12%);
307
- font: inherit;
308
- cursor: pointer;
309
- }
310
-
311
- .agent-chat__queued-action:hover {
312
- color: var(--sigvelo-color-text);
313
- background-color: color-mix(in oklab, transparent, var(--sigvelo-color-text) 5%);
314
- }
315
-
316
- .agent-chat__queued-action:focus-visible {
317
- outline: none;
318
- box-shadow: var(--sigvelo-recipe-focus-shadow-subtle);
319
- }
320
-
321
- .agent-chat__queued-remove {
322
- min-inline-size: var(--sigvelo-spacing-6);
323
- padding-inline: 0;
349
+ flex: none;
350
+ font-weight: var(--sigvelo-font-weight-normal);
324
351
  }
325
352
 
326
353
  @media (any-pointer: coarse) {
@@ -328,14 +355,9 @@
328
355
  opacity: 1;
329
356
  }
330
357
 
331
- .agent-chat__queued-message,
332
- .agent-chat__queued-action {
358
+ .agent-chat__queued-message {
333
359
  min-block-size: var(--sigvelo-control-height-xl);
334
360
  }
335
-
336
- .agent-chat__queued-remove {
337
- min-inline-size: var(--sigvelo-control-height-xl);
338
- }
339
361
  }
340
362
 
341
363
  .agent-chat__notice[data-tone="danger"],
@@ -392,10 +414,15 @@
392
414
  /* Sized against the chat's own box, not the viewport: this component is as
393
415
  likely to be a 320px browser side panel as a full window, and the viewport
394
416
  says nothing about which. Height still comes from the viewport — a container
395
- cannot query its own block size without inline-size collapsing with it. */
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. */
396
424
  @container agent-chat (width <= 36rem) {
397
425
  .agent-chat-start-screen__content {
398
- align-content: start;
399
426
  padding-block: var(--sigvelo-spacing-5);
400
427
  }
401
428
 
@@ -410,7 +437,15 @@
410
437
 
411
438
  @media (max-height: 40rem) {
412
439
  .agent-chat-start-screen__content {
413
- align-content: start;
440
+ grid-template-rows: auto auto;
414
441
  padding-block: var(--sigvelo-spacing-5);
415
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
+ }
416
451
  }
@@ -1,21 +1,3 @@
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
-
19
1
  /* Matches .dialog__backdrop, including why one 8px radius is the affordable
20
2
  version of this effect. */
21
3
  .alert-dialog__backdrop {