@mcp-b/react-components 0.44.1 → 0.46.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 (170) hide show
  1. package/dist/{AgentChat-Bibfj7u1.d.ts → AgentChat-BLmQghkt.d.ts} +2 -2
  2. package/dist/{AgentToolRunsContext-daY67hFM.d.ts → AgentToolRunsContext-jtmveaRE.d.ts} +8 -7
  3. package/dist/{CodeBlock-Dl7a3Wqo.js → CodeBlock-BpooTofO.js} +1 -1
  4. package/dist/{FileTree-Uu3ZnW1u.js → FileTree-CAXWXH63.js} +1 -1
  5. package/dist/{McpConnectorForm-MRm1r59e.d.ts → McpConnectorForm-BETdVBRk.d.ts} +1 -1
  6. package/dist/{McpPluginCatalog-mbGw8FTu.d.ts → McpPluginCatalog-C6ip9IvL.d.ts} +2 -2
  7. package/dist/{PromptInput-BRX7FhjH.d.ts → PromptInput-DtJHyp0S.d.ts} +27 -22
  8. package/dist/{ResponsiveSidebarShell-DOXd5T-d.d.ts → ResponsiveSidebarShell-BTVPxLJK.d.ts} +12 -0
  9. package/dist/{SetupChecklist-DOp-zqjh.js → SetupChecklist-DyPZWzK2.js} +2 -2
  10. package/dist/{ThinkChat-BES_3Mb-.js → ThinkChat-qztQ6Clo.js} +7 -22
  11. package/dist/{ThinkChatActivity-CgvmTXXB.d.ts → ThinkChatActivity-B3lGVS-6.d.ts} +1 -1
  12. package/dist/{WorkspaceFileView-BublZXky.js → WorkspaceFileView-BvDbKM2c.js} +3 -3
  13. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  14. package/dist/components/agents-sdk/AgentChat.d.ts +1 -1
  15. package/dist/components/agents-sdk/AgentChat.js +44 -40
  16. package/dist/components/agents-sdk/AgentEvent.d.ts +42 -0
  17. package/dist/components/agents-sdk/AgentEvent.js +96 -0
  18. package/dist/components/agents-sdk/AgentToolRunsContext.d.ts +1 -1
  19. package/dist/components/agents-sdk/AgentToolRunsContext.js +11 -7
  20. package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
  21. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  22. package/dist/components/agents-sdk/BrowserReplay.js +2 -2
  23. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  24. package/dist/components/agents-sdk/ManagerOffice.d.ts +106 -11
  25. package/dist/components/agents-sdk/ManagerOffice.js +1193 -151
  26. package/dist/components/agents-sdk/McpConnectionRequest.d.ts +1 -1
  27. package/dist/components/agents-sdk/McpConnectionRequest.js +11 -5
  28. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -1
  29. package/dist/components/agents-sdk/McpConnectorForm.js +1 -1
  30. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +1 -1
  31. package/dist/components/agents-sdk/McpPluginCatalog.js +11 -7
  32. package/dist/components/agents-sdk/McpServerPicker.d.ts +2 -2
  33. package/dist/components/agents-sdk/McpServerPicker.js +4 -4
  34. package/dist/components/agents-sdk/ModelSelector.js +5 -5
  35. package/dist/components/agents-sdk/PromptInputApproval.js +1 -1
  36. package/dist/components/agents-sdk/PromptInputCommands.d.ts +5 -2
  37. package/dist/components/agents-sdk/PromptInputCommands.js +81 -3
  38. package/dist/components/agents-sdk/SubagentRunDetails.js +1 -1
  39. package/dist/components/agents-sdk/SubagentRunIndicator.d.ts +21 -3
  40. package/dist/components/agents-sdk/SubagentRunIndicator.js +56 -6
  41. package/dist/components/agents-sdk/SubagentRunSelector.js +5 -12
  42. package/dist/components/agents-sdk/ThinkChat.d.ts +4 -5
  43. package/dist/components/agents-sdk/ThinkChat.js +1 -1
  44. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -1
  45. package/dist/components/agents-sdk/ThinkChatActivity.js +3 -3
  46. package/dist/components/agents-sdk/ThinkChatActivitySummary.js +1 -1
  47. package/dist/components/agents-sdk/ThinkChatToolPanels.js +2 -2
  48. package/dist/components/agents-sdk/ThinkExecutionDetail.js +3 -3
  49. package/dist/components/agents-sdk/ThinkExecutionRun.js +1 -1
  50. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  51. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +3 -3
  52. package/dist/components/agents-sdk/ThinkFullApp.d.ts +14 -4
  53. package/dist/components/agents-sdk/ThinkFullApp.js +51 -5
  54. package/dist/components/agents-sdk/ThinkFullAppViewSwitch.js +1 -1
  55. package/dist/components/agents-sdk/ThinkPendingApproval.js +1 -1
  56. package/dist/components/agents-sdk/ThinkRecoveryNotice.js +1 -1
  57. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +3 -3
  58. package/dist/components/agents-sdk/ThinkRoutineDetail.js +1 -1
  59. package/dist/components/agents-sdk/ThinkRoutineForm.js +4 -4
  60. package/dist/components/agents-sdk/ThinkRoutineLibrary.d.ts +1 -1
  61. package/dist/components/agents-sdk/ThinkRoutineLibrary.js +4 -4
  62. package/dist/components/agents-sdk/ThinkRoutineRuns.js +1 -1
  63. package/dist/components/agents-sdk/ThinkSidepanel.d.ts +22 -4
  64. package/dist/components/agents-sdk/ThinkSidepanel.js +87 -35
  65. package/dist/components/agents-sdk/ThinkThreadPicker.js +5 -5
  66. package/dist/components/agents-sdk/Workspace.js +1 -1
  67. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  68. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  69. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  70. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  71. package/dist/components/agents-sdk/WorkspaceMountManager.js +4 -21
  72. package/dist/components/ai-sdk/Activity.js +1 -1
  73. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  74. package/dist/components/ai-sdk/Approval.js +2 -2
  75. package/dist/components/ai-sdk/Artifact.js +1 -1
  76. package/dist/components/ai-sdk/ChainOfThought.d.ts +1 -1
  77. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  78. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  79. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  80. package/dist/components/ai-sdk/ComposerLink.d.ts +27 -0
  81. package/dist/components/ai-sdk/ComposerLink.js +111 -0
  82. package/dist/components/ai-sdk/ConnectedAppCards.js +3 -3
  83. package/dist/components/ai-sdk/Context.js +1 -1
  84. package/dist/components/ai-sdk/Conversation.js +1 -1
  85. package/dist/components/ai-sdk/Goal.js +2 -2
  86. package/dist/components/ai-sdk/InlineCitation.js +1 -1
  87. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  88. package/dist/components/ai-sdk/Message.js +19 -3
  89. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  90. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  91. package/dist/components/ai-sdk/Plan.js +2 -2
  92. package/dist/components/ai-sdk/PromptInput.d.ts +2 -2
  93. package/dist/components/ai-sdk/PromptInput.js +67 -61
  94. package/dist/components/ai-sdk/PromptInputComposerEditor.d.ts +31 -0
  95. package/dist/components/ai-sdk/PromptInputComposerEditor.js +198 -0
  96. package/dist/components/ai-sdk/Queue.js +2 -2
  97. package/dist/components/ai-sdk/Reasoning.js +2 -2
  98. package/dist/components/ai-sdk/Sources.js +1 -1
  99. package/dist/components/ai-sdk/Task.js +1 -1
  100. package/dist/components/ai-sdk/ToolInvocation.js +1 -1
  101. package/dist/components/extension/ChatGptSignInScreen.js +2 -2
  102. package/dist/components/extension/CodexModelSelector.js +2 -2
  103. package/dist/components/extension/ConversationTabPicker.js +2 -2
  104. package/dist/components/foundations/AppIcon.js +1 -1
  105. package/dist/components/foundations/Checkbox.js +1 -1
  106. package/dist/components/foundations/Collapsible.js +1 -1
  107. package/dist/components/foundations/ContextMenu.js +1 -1
  108. package/dist/components/foundations/Menubar.js +1 -1
  109. package/dist/components/foundations/SearchField.js +1 -1
  110. package/dist/components/foundations/Select.js +1 -1
  111. package/dist/components/foundations/Stepper.js +1 -1
  112. package/dist/components/foundations/Toast.js +1 -1
  113. package/dist/components/foundations/ToggleGroup.d.ts +1 -1
  114. package/dist/components/foundations/ToggleGroup.js +1 -1
  115. package/dist/components/foundations/icons.d.ts +1 -1
  116. package/dist/components/foundations/icons.js +1 -1
  117. package/dist/components/general-purpose/Commit.js +2 -2
  118. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  119. package/dist/components/general-purpose/FileTree.js +1 -1
  120. package/dist/components/general-purpose/PricingBillingToggle.js +1 -1
  121. package/dist/components/general-purpose/PricingPlanCard.js +2 -2
  122. package/dist/components/general-purpose/PricingUsageCalculator.js +2 -2
  123. package/dist/components/general-purpose/ResizableSidePanel.js +1 -1
  124. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +1 -1
  125. package/dist/components/general-purpose/ResponsiveSidebarShell.js +72 -22
  126. package/dist/components/general-purpose/SettingsFormDialog.js +2 -2
  127. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  128. package/dist/components/general-purpose/Terminal.js +2 -2
  129. package/dist/components/general-purpose/TestResults.js +1 -1
  130. package/dist/components/general-purpose/ThemeModeControl.js +2 -2
  131. package/dist/components/general-purpose/WebPreview.js +3 -3
  132. package/dist/components/nanites/AgentConnection.js +2 -2
  133. package/dist/components/nanites/AgentToolDetail.js +4 -4
  134. package/dist/{copy-button-DHhf-J1d.js → copy-button-D7ySsRRo.js} +1 -1
  135. package/dist/{format-DB2mX9DA.js → format-COCyV98Z.js} +23 -1
  136. package/dist/{icons-Dw-im7lg.js → icons-BNEY4gO5.js} +44 -4
  137. package/dist/{icons-6ZnyZJiR.d.ts → icons-D0Pd2P9v.d.ts} +9 -4
  138. package/dist/{mcp-server-SD_S-IpB.js → mcp-server-7NR24ASj.js} +31 -4
  139. package/dist/{mcp-server-catalog-CCj2ItkV.d.ts → mcp-server-catalog-Cbu483Zb.d.ts} +9 -9
  140. package/dist/{progress-ring-BEocM1e3.js → progress-ring-Cgii90dC.js} +1 -1
  141. package/dist/{provider-logos-zjZycgV6.js → provider-logos-DWYY8wNz.js} +31 -6
  142. package/dist/styles/action-guide.css +4 -0
  143. package/dist/styles/agent-attention.css +5 -1
  144. package/dist/styles/agent-chat.css +21 -18
  145. package/dist/styles/agent-event.css +14 -0
  146. package/dist/styles/app-icon.css +21 -0
  147. package/dist/styles/avatar.css +2 -1
  148. package/dist/styles/base.css +4 -0
  149. package/dist/styles/brand-marks.css +22 -0
  150. package/dist/styles/button.css +10 -0
  151. package/dist/styles/composer-link.css +99 -0
  152. package/dist/styles/connected-app-card.css +9 -0
  153. package/dist/styles/github-motion-mark.css +8 -1
  154. package/dist/styles/index.css +3 -0
  155. package/dist/styles/manager-office.css +1313 -73
  156. package/dist/styles/mcp-plugin-catalog.css +4 -0
  157. package/dist/styles/mcp-server-picker.css +2 -0
  158. package/dist/styles/message-scroller.css +5 -0
  159. package/dist/styles/prompt-input.css +14 -53
  160. package/dist/styles/responsive-sidebar-shell.css +47 -0
  161. package/dist/styles/subagent-run.css +29 -19
  162. package/dist/styles/think-full-app.css +139 -4
  163. package/dist/styles/think-sidepanel.css +9 -5
  164. package/dist/styles/think-thread-picker.css +13 -12
  165. package/dist/styles/workspace-mount-manager.css +0 -22
  166. package/dist/utils/composer-link.d.ts +59 -0
  167. package/dist/utils/composer-link.js +203 -0
  168. package/dist/utils/mcp-server-catalog.d.ts +1 -1
  169. package/dist/utils/mcp-server-catalog.js +9 -9
  170. package/package.json +8 -8
@@ -225,6 +225,10 @@
225
225
  gap: var(--sigvelo-spacing-3-5);
226
226
  }
227
227
 
228
+ .mcp-plugin-details__identity :is(img, .app-icon__image) {
229
+ color: unset;
230
+ }
231
+
228
232
  .mcp-plugin-details__identity > .separator {
229
233
  block-size: var(--sigvelo-spacing-8);
230
234
  background-color: color-mix(in oklab, currentcolor, transparent 30%);
@@ -55,6 +55,8 @@
55
55
  justify-content: center;
56
56
  inline-size: var(--sigvelo-control-icon-size-lg);
57
57
  block-size: var(--sigvelo-control-icon-size-lg);
58
+ /* Lucide and monochrome protocol marks tint from this. Hardcoded brand
59
+ fills ignore it; Discord sets its own color on the mark. */
58
60
  color: var(--sigvelo-color-text-muted);
59
61
  }
60
62
 
@@ -21,6 +21,11 @@
21
21
  contain: content;
22
22
  }
23
23
 
24
+ .message-scroller__viewport:focus-visible {
25
+ outline: none;
26
+ box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
27
+ }
28
+
24
29
  .message-scroller__viewport[data-scrollable~="end"] {
25
30
  --sigvelo-scroll-fade-end: var(--message-scroller-fade-size);
26
31
  }
@@ -212,14 +212,22 @@
212
212
  font-family: inherit;
213
213
  font-size: var(--sigvelo-density-compact-control-font-size);
214
214
  line-height: var(--sigvelo-leading-normal);
215
+ white-space: pre-wrap;
216
+ overflow-wrap: anywhere;
215
217
  resize: none;
216
218
  overflow-block: hidden;
217
219
  }
218
220
 
219
- .prompt-input__textarea::placeholder {
221
+ .prompt-input__textarea::placeholder,
222
+ .prompt-input__textarea[data-empty]::before {
220
223
  color: var(--sigvelo-control-placeholder-color);
221
224
  }
222
225
 
226
+ .prompt-input__textarea[data-empty]::before {
227
+ content: attr(data-placeholder);
228
+ pointer-events: none;
229
+ }
230
+
223
231
  .prompt-input__textarea:focus,
224
232
  .prompt-input__textarea:focus-visible {
225
233
  border: none;
@@ -553,11 +561,15 @@
553
561
  flex: 0 0 auto;
554
562
  }
555
563
 
556
- .prompt-input__command-icon > svg {
564
+ .prompt-input__command-icon > :is(svg, img, .app-icon) {
557
565
  inline-size: var(--sigvelo-density-compact-control-icon-size);
558
566
  block-size: var(--sigvelo-density-compact-control-icon-size);
559
567
  }
560
568
 
569
+ .prompt-input__command-icon :is(img, .app-icon__image) {
570
+ color: unset;
571
+ }
572
+
561
573
  .prompt-input__command-copy {
562
574
  display: grid;
563
575
  grid-template-columns: auto var(--sigvelo-layout-track-fill) auto;
@@ -584,51 +596,6 @@
584
596
  overflow-wrap: anywhere;
585
597
  }
586
598
 
587
- .prompt-input__references {
588
- display: flex;
589
- flex-wrap: wrap;
590
- gap: var(--sigvelo-spacing-1);
591
- }
592
-
593
- .prompt-input__reference {
594
- position: relative;
595
- gap: var(--sigvelo-spacing-1);
596
- padding-inline: var(--sigvelo-spacing-1);
597
- color: var(--sigvelo-color-primary-text);
598
- font-weight: inherit;
599
- font-size: var(--sigvelo-density-compact-control-font-size);
600
- }
601
-
602
- .prompt-input__reference-icon,
603
- .prompt-input__reference-remove {
604
- display: inline-flex;
605
- flex: 0 0 auto;
606
- }
607
-
608
- .prompt-input__reference-label {
609
- max-inline-size: 18rem;
610
- }
611
-
612
- .prompt-input__reference-remove {
613
- position: absolute;
614
- inset-inline-end: calc(-1 * var(--sigvelo-spacing-3));
615
- color: var(--sigvelo-color-text-muted);
616
- opacity: 0;
617
- pointer-events: none;
618
- }
619
-
620
- .prompt-input__reference:hover .prompt-input__reference-remove,
621
- .prompt-input__reference:focus-visible .prompt-input__reference-remove {
622
- opacity: 1;
623
- }
624
-
625
- /* Local wrap. Not --sigvelo-layout-break-compact. */
626
- @container prompt-input (inline-size < 28rem) {
627
- .prompt-input__reference-label {
628
- max-inline-size: 12rem;
629
- }
630
- }
631
-
632
599
  .prompt-input__command-description,
633
600
  .prompt-input__context-description {
634
601
  color: var(--sigvelo-color-text-muted);
@@ -674,7 +641,6 @@
674
641
  .prompt-input__button,
675
642
  .prompt-input__attachment-remove,
676
643
  .prompt-input__recording-button,
677
- .prompt-input__reference,
678
644
  .prompt-input__submit {
679
645
  --sigvelo-recipe-button-height: var(--sigvelo-control-height-xl);
680
646
  }
@@ -690,11 +656,6 @@
690
656
  min-block-size: var(--sigvelo-control-height-xl);
691
657
  }
692
658
 
693
- .prompt-input__reference-remove {
694
- position: static;
695
- opacity: 1;
696
- }
697
-
698
659
  .prompt-input__attachment[data-image] .prompt-input__attachment-remove {
699
660
  position: static;
700
661
  }
@@ -40,6 +40,26 @@
40
40
  overflow: hidden;
41
41
  }
42
42
 
43
+ .responsive-sidebar-shell__sidebar-content {
44
+ min-inline-size: 0;
45
+ min-block-size: 0;
46
+ overflow: hidden;
47
+ }
48
+
49
+ .responsive-sidebar-shell[data-sidebar-toggle-placement="sidebar"]
50
+ .responsive-sidebar-shell__sidebar {
51
+ display: grid;
52
+ grid-template-rows: auto minmax(0, 1fr);
53
+ }
54
+
55
+ .responsive-sidebar-shell__sidebar-leading {
56
+ min-block-size: var(--sigvelo-density-compact-control-height);
57
+ display: flex;
58
+ align-items: center;
59
+ padding-block: var(--sigvelo-spacing-1);
60
+ padding-inline: var(--sigvelo-spacing-2);
61
+ }
62
+
43
63
  .responsive-sidebar-shell__sidebar {
44
64
  grid-column: 1;
45
65
  grid-row: 1;
@@ -101,6 +121,15 @@
101
121
  display: none;
102
122
  }
103
123
 
124
+ .responsive-sidebar-shell__toggle--sidebar-fallback {
125
+ display: none;
126
+ }
127
+
128
+ .responsive-sidebar-shell[data-sidebar-toggle-placement="sidebar"][data-sidebar-open="false"]
129
+ .responsive-sidebar-shell__toggle--sidebar-fallback {
130
+ display: inline-flex;
131
+ }
132
+
104
133
  @media (forced-colors: active) {
105
134
  .responsive-sidebar-shell,
106
135
  .responsive-sidebar-shell__frame {
@@ -193,6 +222,20 @@
193
222
  display: none;
194
223
  }
195
224
 
225
+ /* The closed-sidebar fallback has a deliberately specific wide-layout
226
+ selector above. When the compact title owns drawer disclosure, beat that
227
+ selector explicitly so the bar never presents two controls for one action. */
228
+ .responsive-sidebar-shell[data-sidebar-toggle-placement="sidebar"][data-sidebar-open="false"]
229
+ [data-compact-leading]
230
+ .responsive-sidebar-shell__toggle--sidebar-fallback {
231
+ display: none;
232
+ }
233
+
234
+ .responsive-sidebar-shell[data-sidebar-toggle-placement="sidebar"]
235
+ .responsive-sidebar-shell__sidebar-leading {
236
+ display: none;
237
+ }
238
+
196
239
  .responsive-sidebar-shell__compact-leading {
197
240
  display: contents;
198
241
  }
@@ -211,6 +254,10 @@
211
254
  font-weight: var(--sigvelo-font-weight-semibold);
212
255
  }
213
256
 
257
+ .responsive-sidebar-shell__title-trigger:focus-visible {
258
+ box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
259
+ }
260
+
214
261
  .responsive-sidebar-shell__title-trigger span {
215
262
  min-inline-size: 0;
216
263
  overflow: hidden;
@@ -2,14 +2,39 @@
2
2
  --sigvelo-elevation-floating, not a border. Forced colors restores a real
3
3
  border at the end of this file. */
4
4
  .subagent-run__selector {
5
- max-inline-size: 14rem;
5
+ max-inline-size: 18rem;
6
+ /* Two text lines (name over live status) inside a pill: the control's fixed
7
+ small height would clip the second, so let the content size it. */
8
+ block-size: auto;
9
+ min-block-size: var(--sigvelo-density-compact-control-height);
10
+ padding-block: var(--sigvelo-spacing-1);
6
11
  justify-content: flex-start;
7
- border-radius: var(--sigvelo-radius-full);
12
+ border-radius: var(--sigvelo-radius-lg);
8
13
  background-color: var(--sigvelo-color-surface-raised);
9
14
  box-shadow: var(--sigvelo-elevation-floating);
10
15
  text-align: start;
11
16
  }
12
17
 
18
+ /* The run's name over its live status line. Shared by the selector chip and
19
+ the drill-in's top bar so one run reads the same in both. */
20
+ .subagent-run__text {
21
+ display: grid;
22
+ flex: 1 1 auto;
23
+ min-inline-size: 0;
24
+ }
25
+
26
+ .subagent-run__status {
27
+ color: var(--sigvelo-color-text-muted);
28
+ font-size: var(--sigvelo-text-xs);
29
+ font-weight: var(--sigvelo-font-weight-normal);
30
+ line-height: var(--sigvelo-leading-snug);
31
+ }
32
+
33
+ /* Scoped to the label, not the chip, so the drill-in bar tints the same. */
34
+ .subagent-run__text[data-status="error"] .subagent-run__status {
35
+ color: var(--sigvelo-color-danger-text);
36
+ }
37
+
13
38
  /* The ghost hover would swap the raised surface for a near-transparent tint;
14
39
  keep the surface and tint over it instead. */
15
40
  .subagent-run__selector:hover:not([data-disabled]) {
@@ -42,29 +67,14 @@
42
67
  margin-block-start: var(--sigvelo-spacing-2);
43
68
  }
44
69
 
45
- .subagent-run__tray {
46
- display: grid;
47
- gap: var(--sigvelo-spacing-1-5);
48
- min-inline-size: 0;
49
- }
50
-
51
- .subagent-run__tray-label {
52
- color: var(--sigvelo-color-text-muted);
53
- font-size: var(--sigvelo-text-xs);
54
- line-height: var(--sigvelo-leading-snug);
55
- }
56
-
70
+ /* Size comes from the surrounding control — the selector's button recipe, the
71
+ top bar's title — so one label keeps each surface's own type scale. */
57
72
  .subagent-run__title {
58
73
  min-inline-size: 0;
59
74
  color: var(--sigvelo-color-text);
60
- font-size: var(--sigvelo-text-sm);
61
75
  font-weight: var(--sigvelo-font-weight-semibold);
62
76
  }
63
77
 
64
- .subagent-run__selector .subagent-run__title {
65
- font-size: var(--sigvelo-text-compact);
66
- }
67
-
68
78
  .subagent-run__indicator {
69
79
  display: inline-flex;
70
80
  flex: 0 0 auto;
@@ -1,9 +1,68 @@
1
+ .think-full-app-shell {
2
+ --think-full-app-panel-outline: color-mix(in srgb, var(--sigvelo-color-text) 14%, transparent);
3
+ --sigvelo-color-surface: light-dark(
4
+ var(--sigvelo-color-surface-light),
5
+ var(--sigvelo-color-surface-under-dark)
6
+ );
7
+ --sigvelo-color-surface-raised: light-dark(
8
+ var(--sigvelo-color-surface-raised-light),
9
+ var(--sigvelo-color-surface-under-dark)
10
+ );
11
+ --sigvelo-color-neutral-bg-subtle: light-dark(
12
+ var(--sigvelo-color-neutral-bg-subtle-light),
13
+ rgb(255 255 255 / 4%)
14
+ );
15
+ --responsive-sidebar-shell-sidebar-surface: light-dark(
16
+ var(--sigvelo-color-surface-raised),
17
+ var(--sigvelo-color-surface-under)
18
+ );
19
+
20
+ background: var(--sigvelo-color-surface-under);
21
+ }
22
+
23
+ .think-full-app-shell > .responsive-sidebar-shell__frame > .responsive-sidebar-shell__sidebar {
24
+ border-inline-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
25
+ var(--sigvelo-color-neutral-border-subtle);
26
+ }
27
+
28
+ .think-full-app-shell .responsive-sidebar-shell__main {
29
+ background: var(--sigvelo-color-surface);
30
+ }
31
+
32
+ /* The thread rail owns its wide-layout toggle. Seat it in the picker's header
33
+ instead of reserving a second row above the sidebar content. */
34
+ .think-full-app-shell[data-sidebar-toggle-placement="sidebar"] .responsive-sidebar-shell__sidebar {
35
+ position: relative;
36
+ display: block;
37
+ }
38
+
39
+ .think-full-app-shell[data-sidebar-toggle-placement="sidebar"]
40
+ .responsive-sidebar-shell__sidebar-content {
41
+ block-size: 100%;
42
+ }
43
+
44
+ .think-full-app-shell[data-sidebar-toggle-placement="sidebar"]
45
+ .responsive-sidebar-shell__sidebar-leading {
46
+ position: absolute;
47
+ inset-block-start: var(--sigvelo-spacing-1);
48
+ inset-inline-end: var(--sigvelo-spacing-2);
49
+ z-index: var(--sigvelo-z-chrome);
50
+ min-block-size: var(--sigvelo-density-compact-control-height);
51
+ padding: 0;
52
+ }
53
+
54
+ .think-full-app-shell[data-sidebar-toggle-placement="sidebar"] .think-thread-picker__header {
55
+ padding-inline-end: calc(
56
+ var(--sigvelo-layout-gutter) + var(--sigvelo-density-compact-control-height)
57
+ );
58
+ }
59
+
1
60
  .think-full-app {
2
61
  position: relative;
3
62
  container: think-full-app / inline-size;
4
63
  display: grid;
5
64
  grid-template-rows: var(--sigvelo-layout-track-fill);
6
- background: var(--sigvelo-color-surface);
65
+ background: transparent;
7
66
  color: var(--sigvelo-color-text);
8
67
  font-family: inherit;
9
68
  }
@@ -18,6 +77,7 @@
18
77
  grid-template-columns: auto var(--sigvelo-layout-track-fill);
19
78
  grid-template-rows: var(--sigvelo-layout-track-fill);
20
79
  margin: var(--sigvelo-layout-gutter);
80
+ overflow: visible;
21
81
  }
22
82
 
23
83
  .think-full-app__view-switch {
@@ -26,6 +86,10 @@
26
86
  background: transparent;
27
87
  }
28
88
 
89
+ .think-full-app__compact-view-menu {
90
+ display: none;
91
+ }
92
+
29
93
  .think-full-app__chat-surface {
30
94
  grid-column: 1;
31
95
  grid-row: 1;
@@ -66,6 +130,21 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
66
130
  grid-template-rows: var(--sigvelo-layout-track-fill) auto;
67
131
  }
68
132
 
133
+ /* The raised workbench establishes the desktop bottom gutter. Keep the
134
+ floating composer on that same baseline and give it the same quiet edge. */
135
+ .think-full-app-shell .agent-chat__composer {
136
+ padding-block-end: max(var(--sigvelo-spacing-1), env(safe-area-inset-bottom, 0px));
137
+ }
138
+
139
+ .think-full-app-shell .agent-chat__composer > .prompt-input {
140
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
141
+ var(--think-full-app-panel-outline);
142
+ background: light-dark(
143
+ var(--sigvelo-color-surface-raised-light),
144
+ var(--sigvelo-color-surface-raised-dark)
145
+ );
146
+ }
147
+
69
148
  /* Transparent column: the aside positions the plane, it is not a material of
70
149
  its own. */
71
150
  .think-full-app__aside {
@@ -87,6 +166,16 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
87
166
  translate: calc(var(--sigvelo-layout-gap) * 1.5) 0;
88
167
  }
89
168
 
169
+ /* Keep the resize target generous without painting a full-height rule beside
170
+ the rounded panel. A short grip appears only on hover, focus, or drag. */
171
+ .think-full-app__resizer::before {
172
+ inset-block: 50% auto;
173
+ block-size: calc(var(--sigvelo-spacing-6) * 2);
174
+ inline-size: 2px;
175
+ border-radius: var(--sigvelo-radius-full);
176
+ translate: -50% -50%;
177
+ }
178
+
90
179
  .think-full-app__workbench-slot,
91
180
  .think-full-app__workbench,
92
181
  .think-full-app__workbench-panel {
@@ -100,9 +189,11 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
100
189
 
101
190
  /* The app's one raised plane. Panels fill it and never draw a second edge. */
102
191
  .think-full-app__workbench-slot {
103
- border-radius: var(--sigvelo-radius-lg);
104
- background: var(--sigvelo-color-surface-raised);
105
- box-shadow: var(--sigvelo-elevation-floating);
192
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
193
+ var(--think-full-app-panel-outline);
194
+ border-radius: var(--sigvelo-radius-xl);
195
+ background: light-dark(var(--sigvelo-color-surface-raised), var(--sigvelo-color-surface-under));
196
+ box-shadow: var(--sigvelo-elevation-bar);
106
197
  }
107
198
 
108
199
  /* The panel stands in for itself while its first read is in flight, so the
@@ -136,6 +227,7 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
136
227
  grid-template-columns: var(--sigvelo-layout-track-fill);
137
228
  margin: 0;
138
229
  overflow: hidden;
230
+ background: var(--sigvelo-color-surface);
139
231
  }
140
232
 
141
233
  .think-full-app__aside {
@@ -155,6 +247,7 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
155
247
  themselves raised are defined after this stylesheet. */
156
248
  .think-full-app__workbench-slot,
157
249
  .think-full-app .think-full-app__workbench {
250
+ border: 0;
158
251
  border-radius: 0;
159
252
  background: var(--sigvelo-color-surface);
160
253
  box-shadow: none;
@@ -197,6 +290,48 @@ body.is-resizing-side-panel .think-full-app__chat-surface {
197
290
  }
198
291
  }
199
292
 
293
+ @container responsive-sidebar-shell (inline-size <= 56rem) {
294
+ .think-full-app-shell[data-sidebar-toggle-placement="sidebar"]
295
+ .responsive-sidebar-shell__sidebar {
296
+ display: grid;
297
+ }
298
+
299
+ .think-full-app-shell > .responsive-sidebar-shell__frame > .responsive-sidebar-shell__sidebar {
300
+ border: var(--sigvelo-border-style) var(--sigvelo-border-width)
301
+ color-mix(in srgb, var(--sigvelo-color-text) 24%, transparent);
302
+ box-shadow:
303
+ 0 0 0 1px color-mix(in srgb, var(--sigvelo-color-surface) 36%, transparent),
304
+ var(--sigvelo-elevation-overlay);
305
+ }
306
+
307
+ .think-full-app__app-bar {
308
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
309
+ }
310
+
311
+ .think-full-app__app-bar .app-top-bar__title {
312
+ inline-size: auto;
313
+ max-inline-size: min(20rem, 60vw);
314
+ justify-self: center;
315
+ text-align: center;
316
+ }
317
+
318
+ .think-full-app__view-switch {
319
+ display: none;
320
+ }
321
+
322
+ .think-full-app__compact-view-menu {
323
+ display: flex;
324
+ }
325
+
326
+ .think-full-app-shell .agent-chat__composer {
327
+ padding-block-end: max(var(--sigvelo-spacing-3), env(safe-area-inset-bottom, 0px));
328
+ }
329
+
330
+ .think-full-app-shell :is(.think-full-app__chat, .think-full-app__chat-inner) {
331
+ --agent-chat-column-inset: var(--sigvelo-spacing-4);
332
+ }
333
+ }
334
+
200
335
  @media (forced-colors: active) {
201
336
  .think-full-app,
202
337
  .think-full-app__chat-surface,
@@ -44,11 +44,6 @@
44
44
  font: inherit;
45
45
  }
46
46
 
47
- .think-sidepanel__run-title > svg,
48
- .think-sidepanel__run-title > .nanite-mark {
49
- flex: none;
50
- }
51
-
52
47
  .think-sidepanel__menu-switch-item {
53
48
  justify-content: space-between;
54
49
  gap: var(--sigvelo-spacing-3);
@@ -65,6 +60,15 @@
65
60
  color: var(--sigvelo-color-text-muted);
66
61
  }
67
62
 
63
+ .think-sidepanel .app-icon-stack .app-icon :is(img, .app-icon__image) {
64
+ color: unset;
65
+ }
66
+
67
+ .think-sidepanel .button .app-icon-stack .app-icon :is(svg, img) {
68
+ inline-size: 100%;
69
+ block-size: 100%;
70
+ }
71
+
68
72
  @media (forced-colors: active) {
69
73
  .think-sidepanel,
70
74
  .think-sidepanel__gate {
@@ -1,4 +1,5 @@
1
1
  .think-thread-picker {
2
+ box-sizing: border-box;
2
3
  inline-size: 100%;
3
4
  block-size: 100%;
4
5
  min-block-size: 0;
@@ -6,6 +7,7 @@
6
7
  grid-template-rows: auto auto var(--sigvelo-layout-track-fill) auto;
7
8
  overflow: hidden;
8
9
  border-inline-end: 0;
10
+ padding: var(--sigvelo-spacing-1) var(--sigvelo-spacing-2) var(--sigvelo-spacing-2);
9
11
  /* No material of its own: it fills whatever holds it — the shell's rail, the
10
12
  compact drawer, a host's own panel — and painting a colour here would
11
13
  cover the one that surface chose. */
@@ -28,17 +30,17 @@
28
30
  min-inline-size: 0;
29
31
  margin: 0;
30
32
  flex: 1 1 auto;
31
- color: var(--sigvelo-color-text-muted);
32
- font-size: var(--sigvelo-density-compact-control-font-size);
33
+ color: var(--sigvelo-color-text);
34
+ font-size: var(--sigvelo-text-compact);
33
35
  font-weight: var(--sigvelo-font-weight-semibold);
34
- line-height: var(--sigvelo-leading-tight);
36
+ line-height: var(--sigvelo-text-compact-leading);
35
37
  }
36
38
 
37
39
  .think-thread-picker__search {
38
40
  --sigvelo-recipe-control-height: var(--sigvelo-density-compact-control-height);
39
41
  --sigvelo-recipe-control-radius: var(--sigvelo-radius-sm);
40
42
 
41
- padding: 0 var(--sigvelo-spacing-2) var(--sigvelo-spacing-2);
43
+ padding: 0 0 var(--sigvelo-spacing-2);
42
44
  }
43
45
 
44
46
  .think-thread-status-indicators {
@@ -92,7 +94,8 @@
92
94
  }
93
95
 
94
96
  .think-thread-picker__viewport {
95
- padding: var(--sigvelo-layout-cluster) var(--sigvelo-layout-gutter) var(--sigvelo-layout-gutter);
97
+ padding-block: var(--sigvelo-layout-cluster) var(--sigvelo-layout-gutter);
98
+ padding-inline: 0;
96
99
  overscroll-behavior: contain;
97
100
  scrollbar-gutter: stable;
98
101
  }
@@ -305,6 +308,7 @@
305
308
  block-size: auto;
306
309
  max-block-size: inherit;
307
310
  grid-template-rows: auto auto auto;
311
+ padding: var(--sigvelo-spacing-1) var(--sigvelo-spacing-2) var(--sigvelo-spacing-2);
308
312
  }
309
313
 
310
314
  .think-thread-picker__header {
@@ -316,14 +320,11 @@
316
320
  --sigvelo-recipe-control-font-size: var(--sigvelo-density-compact-control-font-size);
317
321
  --sigvelo-recipe-control-icon-size: var(--sigvelo-density-compact-control-icon-size);
318
322
 
319
- padding: 0 var(--sigvelo-spacing-1);
320
- border-block-end: var(--sigvelo-border-style) var(--sigvelo-border-width)
321
- var(--sigvelo-color-neutral-border-subtle);
323
+ padding: 0 0 var(--sigvelo-spacing-2);
322
324
  }
323
325
 
324
- .think-thread-picker__search .field__control {
325
- border-color: transparent;
326
- background: transparent;
326
+ .think-thread-picker__search .field__control:focus-visible {
327
+ box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
327
328
  }
328
329
 
329
330
  .think-thread-picker__nav,
@@ -335,7 +336,7 @@
335
336
  }
336
337
 
337
338
  .think-thread-picker__viewport {
338
- padding: var(--sigvelo-spacing-1);
339
+ padding: var(--sigvelo-spacing-1) 0;
339
340
  }
340
341
  }
341
342
 
@@ -22,25 +22,3 @@
22
22
  .workspace-mount-manager__path code {
23
23
  overflow-wrap: anywhere;
24
24
  }
25
-
26
- .workspace-mount-manager__permission {
27
- display: inline-flex;
28
- align-items: center;
29
- gap: var(--sigvelo-spacing-1);
30
- color: var(--sigvelo-color-text-muted);
31
- font-size: var(--sigvelo-text-xs);
32
- line-height: var(--sigvelo-leading-snug);
33
- }
34
-
35
- .workspace-mount-manager__permission > svg {
36
- inline-size: var(--sigvelo-control-icon-size-sm);
37
- block-size: var(--sigvelo-control-icon-size-sm);
38
- }
39
-
40
- .workspace-mount-manager__permission[data-permission="granted"] {
41
- color: var(--sigvelo-color-success-text);
42
- }
43
-
44
- .workspace-mount-manager__permission[data-permission="denied"] {
45
- color: var(--sigvelo-color-danger-text);
46
- }
@@ -0,0 +1,59 @@
1
+ //#region src/utils/composer-link.d.ts
2
+ declare const COMPOSER_LINK_ORIGIN = "https://composer.invalid";
3
+ declare const COMPOSER_LINK_KINDS: readonly ["command", "mcp", "skill", "tab", "file"];
4
+ type ComposerLinkKind = (typeof COMPOSER_LINK_KINDS)[number];
5
+ declare const COMPOSER_CHROME_ICONS: readonly ["box"];
6
+ type ComposerChromeIcon = (typeof COMPOSER_CHROME_ICONS)[number];
7
+ interface ComposerLinkParts {
8
+ kind: ComposerLinkKind;
9
+ value: string;
10
+ label?: string;
11
+ iconSrc?: string;
12
+ chromeIcon?: ComposerChromeIcon;
13
+ }
14
+ interface ParsedComposerLink extends ComposerLinkParts {
15
+ href: string;
16
+ label: string;
17
+ }
18
+ type ComposerDraftSegment = {
19
+ type: "text";
20
+ value: string;
21
+ } | {
22
+ type: "link";
23
+ href: string;
24
+ label: string;
25
+ parts: ParsedComposerLink;
26
+ };
27
+ declare function isComposerLinkKind(value: string): value is ComposerLinkKind;
28
+ declare function isComposerChromeIcon(value: string): value is ComposerChromeIcon;
29
+ declare function composerLinkHref(parts: ComposerLinkParts): string;
30
+ declare function parseComposerHref(href: string | undefined): ParsedComposerLink | undefined;
31
+ declare function escapeComposerLinkLabel(label: string): string;
32
+ /** Brand hex from a Simple Icons URL, skipped when it would vanish as text. */
33
+ declare function brandHexFromIconSrc(src: string | undefined): string | undefined;
34
+ /** Most chromatic opaque pixel, skipped when the mark is charcoal, white, or gray. */
35
+ declare function chromaticHexFromPixels(data: Uint8ClampedArray): string | undefined;
36
+ declare function sampleImageAccent(image: HTMLImageElement): string | undefined;
37
+ declare function serializeComposerLink(parts: ComposerLinkParts & {
38
+ label: string;
39
+ }): string;
40
+ declare function splitComposerDraft(text: string): ComposerDraftSegment[];
41
+ declare function parseComposerLinks(text: string): ParsedComposerLink[];
42
+ declare function composerTriggerMatch(text: string): {
43
+ trigger: "/" | "@";
44
+ query: string;
45
+ triggerIndex: number;
46
+ } | undefined;
47
+ declare function inferComposerLinkKind(command: {
48
+ id?: string;
49
+ }, trigger: "/" | "@"): ComposerLinkKind;
50
+ declare function replaceComposerTrigger(draft: string, command: {
51
+ id?: string;
52
+ value: string;
53
+ label: string;
54
+ href?: string;
55
+ iconSrc?: string;
56
+ }, trigger: "/" | "@"): string;
57
+ declare function composerDraftToPrompt(text: string): string;
58
+ //#endregion
59
+ export { COMPOSER_CHROME_ICONS, COMPOSER_LINK_KINDS, COMPOSER_LINK_ORIGIN, ComposerChromeIcon, ComposerDraftSegment, ComposerLinkKind, ComposerLinkParts, ParsedComposerLink, brandHexFromIconSrc, chromaticHexFromPixels, composerDraftToPrompt, composerLinkHref, composerTriggerMatch, escapeComposerLinkLabel, inferComposerLinkKind, isComposerChromeIcon, isComposerLinkKind, parseComposerHref, parseComposerLinks, replaceComposerTrigger, sampleImageAccent, serializeComposerLink, splitComposerDraft };