@mcp-b/react-components 0.56.0 → 0.56.1

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 (127) hide show
  1. package/dist/{CodeBlock-Dw1z6jc8.js → CodeBlock-Bl-q7wMc.js} +1 -1
  2. package/dist/{FileTree-okaLnS5j.js → FileTree-DruTQ-oa.js} +1 -1
  3. package/dist/{ManagerOffice-D4L_xO4i.js → ManagerOffice-CMJ7laGe.js} +5 -5
  4. package/dist/{SetupChecklist-DWyifWWg.js → SetupChecklist-BiWQkKEq.js} +2 -2
  5. package/dist/{WorkspaceFileView-DQDWUpAH.js → WorkspaceFileView-DXgTljKV.js} +2 -2
  6. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  7. package/dist/components/agents-sdk/AgentChat.js +16 -20
  8. package/dist/components/agents-sdk/AgentEvent.js +2 -2
  9. package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
  10. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  11. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  12. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  13. package/dist/components/agents-sdk/EmployeeApp.js +2 -2
  14. package/dist/components/agents-sdk/EmployeeChat.js +5 -5
  15. package/dist/components/agents-sdk/EmployeeChrome.js +12 -12
  16. package/dist/components/agents-sdk/EmployeeSchedules.js +3 -3
  17. package/dist/components/agents-sdk/EmployeeStartScreen.js +4 -4
  18. package/dist/components/agents-sdk/ManagerAccountActions.js +3 -3
  19. package/dist/components/agents-sdk/ManagerOffice.js +1 -1
  20. package/dist/components/agents-sdk/ManagerOfficeScreens.js +2 -2
  21. package/dist/components/agents-sdk/McpConnectionRequest.js +2 -2
  22. package/dist/components/agents-sdk/McpConnectorForm.js +1 -1
  23. package/dist/components/agents-sdk/McpPluginCatalog.js +3 -3
  24. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  25. package/dist/components/agents-sdk/ModelEndpointDialog.js +1 -1
  26. package/dist/components/agents-sdk/ModelSelector.js +4 -4
  27. package/dist/components/agents-sdk/PromptInputApproval.js +1 -1
  28. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  29. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  30. package/dist/components/agents-sdk/SubagentRunPanel.js +1 -1
  31. package/dist/components/agents-sdk/SubagentRunSelector.js +1 -1
  32. package/dist/components/agents-sdk/ThinkChatActivity.js +3 -3
  33. package/dist/components/agents-sdk/ThinkChatToolPanels.js +2 -2
  34. package/dist/components/agents-sdk/ThinkExecutionDetail.js +2 -2
  35. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  36. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +3 -3
  37. package/dist/components/agents-sdk/ThinkFullApp.d.ts +1 -1
  38. package/dist/components/agents-sdk/ThinkFullApp.js +1 -4
  39. package/dist/components/agents-sdk/ThinkRecoveryNotice.js +1 -1
  40. package/dist/components/agents-sdk/ThinkRoutineActions.js +2 -2
  41. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +2 -2
  42. package/dist/components/agents-sdk/ThinkRoutineDetail.js +1 -1
  43. package/dist/components/agents-sdk/ThinkRoutineForm.js +4 -4
  44. package/dist/components/agents-sdk/ThinkRoutineRuns.js +1 -1
  45. package/dist/components/agents-sdk/ThinkThreadPicker.js +12 -9
  46. package/dist/components/agents-sdk/WorkbenchBack.js +1 -1
  47. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  48. package/dist/components/agents-sdk/WorkspaceCorrespondence.js +6 -6
  49. package/dist/components/agents-sdk/WorkspaceExecution.js +7 -7
  50. package/dist/components/agents-sdk/WorkspaceExplorer.js +3 -3
  51. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  52. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  53. package/dist/components/agents-sdk/WorkspaceMountManager.js +1 -1
  54. package/dist/components/agents-sdk/WorkspaceProject.js +4 -4
  55. package/dist/components/agents-sdk/WorkspaceUserScript.js +4 -4
  56. package/dist/components/ai-sdk/Activity.js +1 -1
  57. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  58. package/dist/components/ai-sdk/Approval.js +2 -2
  59. package/dist/components/ai-sdk/Artifact.js +1 -1
  60. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  61. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  62. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  63. package/dist/components/ai-sdk/ComposerLink.js +1 -1
  64. package/dist/components/ai-sdk/ConnectedAppCards.js +3 -3
  65. package/dist/components/ai-sdk/Context.js +1 -1
  66. package/dist/components/ai-sdk/Conversation.js +1 -1
  67. package/dist/components/ai-sdk/Goal.js +1 -1
  68. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  69. package/dist/components/ai-sdk/Message.js +2 -2
  70. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  71. package/dist/components/ai-sdk/MessageScrollerVirtual.js +1 -1
  72. package/dist/components/ai-sdk/Plan.js +1 -1
  73. package/dist/components/ai-sdk/PromptInput.js +6 -6
  74. package/dist/components/ai-sdk/Queue.js +1 -1
  75. package/dist/components/ai-sdk/Reasoning.js +1 -1
  76. package/dist/components/ai-sdk/Sources.js +1 -1
  77. package/dist/components/ai-sdk/Task.js +1 -1
  78. package/dist/components/extension/ChatGptSignInScreen.js +1 -1
  79. package/dist/components/extension/CodexModelSelector.js +2 -2
  80. package/dist/components/extension/ConversationTabPicker.js +2 -2
  81. package/dist/components/foundations/Checkbox.js +1 -1
  82. package/dist/components/foundations/Collapsible.js +1 -1
  83. package/dist/components/foundations/ContextMenu.js +1 -1
  84. package/dist/components/foundations/Menubar.js +1 -1
  85. package/dist/components/foundations/SearchField.js +1 -1
  86. package/dist/components/foundations/Select.js +1 -1
  87. package/dist/components/foundations/Stepper.js +1 -1
  88. package/dist/components/foundations/Toast.js +1 -1
  89. package/dist/components/foundations/ToggleGroup.d.ts +1 -1
  90. package/dist/components/foundations/ToggleGroup.js +1 -1
  91. package/dist/components/foundations/icons.js +1 -1
  92. package/dist/components/general-purpose/AccountSignInDialog.js +1 -1
  93. package/dist/components/general-purpose/Commit.js +2 -2
  94. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  95. package/dist/components/general-purpose/FileTree.js +1 -1
  96. package/dist/components/general-purpose/PricingBillingToggle.js +1 -1
  97. package/dist/components/general-purpose/PricingPlanCard.js +2 -2
  98. package/dist/components/general-purpose/PricingUsageCalculator.js +2 -2
  99. package/dist/components/general-purpose/ResponsiveSidebarShell.js +1 -1
  100. package/dist/components/general-purpose/SettingsFormDialog.js +2 -2
  101. package/dist/components/general-purpose/SetupChecklist.js +1 -1
  102. package/dist/components/general-purpose/Terminal.js +2 -2
  103. package/dist/components/general-purpose/TestResults.js +1 -1
  104. package/dist/components/general-purpose/ThemeModeControl.js +2 -2
  105. package/dist/components/general-purpose/WebPreview.js +2 -2
  106. package/dist/components/nanites/AgentConnection.js +2 -2
  107. package/dist/components/nanites/AgentToolDetail.js +5 -5
  108. package/dist/{copy-button-Dk2vRe9j.js → copy-button-CSDuDfdP.js} +1 -1
  109. package/dist/styles/agent-chat.css +30 -35
  110. package/dist/styles/app-icon.css +1 -2
  111. package/dist/styles/base.css +19 -10
  112. package/dist/styles/brand-loading.css +14 -0
  113. package/dist/styles/brand.test.ts +21 -0
  114. package/dist/styles/browser-replay.css +2 -2
  115. package/dist/styles/button.css +0 -2
  116. package/dist/styles/checkbox.css +1 -1
  117. package/dist/styles/composition-motion.css +13 -3
  118. package/dist/styles/github-motion-mark.css +2 -2
  119. package/dist/styles/responsive-sidebar-shell.css +11 -1
  120. package/dist/styles/search-field.css +1 -1
  121. package/dist/styles/tabs.css +1 -1
  122. package/dist/styles/think-routine.css +0 -2
  123. package/dist/styles/think-thread-picker.css +18 -5
  124. package/dist/styles/toggle-group.css +2 -2
  125. package/dist/{workspace-assets-wW_lQLYK.js → workspace-assets-Bg7XhPsk.js} +2 -2
  126. package/package.json +6 -6
  127. package/dist/{icons-CeGfXO21.js → icons-cuEtsgj9.js} +1 -1
@@ -1,5 +1,5 @@
1
- import { Field } from "../foundations/Field.js";
2
1
  import { Dialog } from "../foundations/Dialog.js";
2
+ import { Field } from "../foundations/Field.js";
3
3
  import * as React from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/general-purpose/AccountSignInDialog.tsx
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
+ import { S as FileIcon, p as ChevronRightIcon } from "../../icons-cuEtsgj9.js";
2
3
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { S as FileIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
4
- import { t as CopyButton } from "../../copy-button-Dk2vRe9j.js";
4
+ import { t as CopyButton } from "../../copy-button-CSDuDfdP.js";
5
5
  import { Avatar } from "../foundations/Avatar.js";
6
6
  import "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { b as EyeIcon, x as EyeOffIcon } from "../../icons-CeGfXO21.js";
3
- import { t as CopyButton } from "../../copy-button-Dk2vRe9j.js";
2
+ import { b as EyeIcon, x as EyeOffIcon } from "../../icons-cuEtsgj9.js";
3
+ import { t as CopyButton } from "../../copy-button-CSDuDfdP.js";
4
4
  import { Switch } from "../foundations/Switch.js";
5
5
  import * as React from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,2 +1,2 @@
1
- import { a as FileTreeIcon, i as FileTreeFolder, n as FileTreeActions, o as FileTreeName, r as FileTreeFile, t as FileTree } from "../../FileTree-okaLnS5j.js";
1
+ import { a as FileTreeIcon, i as FileTreeFolder, n as FileTreeActions, o as FileTreeName, r as FileTreeFile, t as FileTree } from "../../FileTree-DruTQ-oa.js";
2
2
  export { FileTree, FileTreeActions, FileTreeFile, FileTreeFolder, FileTreeIcon, FileTreeName };
@@ -1,6 +1,6 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { Switch } from "../foundations/Switch.js";
3
2
  import { ToggleGroup } from "../foundations/ToggleGroup.js";
3
+ import { Switch } from "../foundations/Switch.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/general-purpose/PricingBillingToggle.tsx
6
6
  /** Controlled billing-period selector composed from the shared Switch or ToggleGroup. */
@@ -1,9 +1,9 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { N as MinusIcon, T as InfoIcon, d as CheckIcon } from "../../icons-CeGfXO21.js";
2
+ import { N as MinusIcon, T as InfoIcon, d as CheckIcon } from "../../icons-cuEtsgj9.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
- import { Card } from "../foundations/Card.js";
6
5
  import { Separator } from "../foundations/Separator.js";
6
+ import { Card } from "../foundations/Card.js";
7
7
  import { getPlanPrice, getPlanYearlySavings } from "./Pricing.js";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  //#region src/components/general-purpose/PricingPlanCard.tsx
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { Card } from "../foundations/Card.js";
2
+ import { Slider } from "../foundations/Slider.js";
3
3
  import { Separator } from "../foundations/Separator.js";
4
+ import { Card } from "../foundations/Card.js";
4
5
  import { Progress } from "../foundations/Progress.js";
5
- import { Slider } from "../foundations/Slider.js";
6
6
  import { formatPricingUsage, getUsagePrice } from "./Pricing.js";
7
7
  import * as React from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { W as SidebarIcon, et as WarningIcon, f as ChevronDownIcon, r as ArrowLeftIcon } from "../../icons-CeGfXO21.js";
2
+ import { W as SidebarIcon, et as WarningIcon, f as ChevronDownIcon, r as ArrowLeftIcon } from "../../icons-cuEtsgj9.js";
3
3
  import { Button } from "../foundations/Button.js";
4
4
  import { t as capitalize } from "../../format-COCyV98Z.js";
5
5
  import { n as mergeRefs } from "../../merge-refs-DF_7w2x_.js";
@@ -1,8 +1,8 @@
1
1
  import { Button } from "../foundations/Button.js";
2
- import { Field } from "../foundations/Field.js";
3
- import { Form } from "../foundations/Form.js";
4
2
  import { Dialog } from "../foundations/Dialog.js";
5
3
  import { a as formatErrorMessage } from "../../format-COCyV98Z.js";
4
+ import { Field } from "../foundations/Field.js";
5
+ import { Form } from "../foundations/Form.js";
6
6
  import * as React from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region src/components/general-purpose/SettingsFormDialog.tsx
@@ -1,2 +1,2 @@
1
- import { n as SetupChecklistGroup, t as SetupChecklistAction } from "../../SetupChecklist-DWyifWWg.js";
1
+ import { n as SetupChecklistGroup, t as SetupChecklistAction } from "../../SetupChecklist-BiWQkKEq.js";
2
2
  export { SetupChecklistAction, SetupChecklistGroup };
@@ -1,7 +1,7 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { Z as TerminalIcon, nt as XIcon } from "../../icons-CeGfXO21.js";
2
+ import { Z as TerminalIcon, nt as XIcon } from "../../icons-cuEtsgj9.js";
3
3
  import { IconButton } from "../foundations/IconButton.js";
4
- import { t as CopyButton } from "../../copy-button-Dk2vRe9j.js";
4
+ import { t as CopyButton } from "../../copy-button-CSDuDfdP.js";
5
5
  import { ScrollArea } from "../foundations/ScrollArea.js";
6
6
  import * as React from "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
1
  import { n as mergeBaseClassName, t as cx } from "../../class-names-BiMDVpUo.js";
2
+ import { K as SpinnerIcon, d as CheckIcon, nt as XIcon, p as ChevronRightIcon } from "../../icons-cuEtsgj9.js";
2
3
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { K as SpinnerIcon, d as CheckIcon, nt as XIcon, p as ChevronRightIcon } from "../../icons-CeGfXO21.js";
4
4
  import { Progress } from "../foundations/Progress.js";
5
5
  import * as React from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,6 +1,6 @@
1
- import { F as MoonIcon, P as MonitorIcon, Y as SunIcon } from "../../icons-CeGfXO21.js";
2
- import { Radio, RadioGroup } from "../foundations/RadioGroup.js";
1
+ import { F as MoonIcon, P as MonitorIcon, Y as SunIcon } from "../../icons-cuEtsgj9.js";
3
2
  import { useTheme } from "../foundations/ThemeProvider.js";
3
+ import { Radio, RadioGroup } from "../foundations/RadioGroup.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/components/general-purpose/ThemeModeControl.tsx
6
6
  const modes = [
@@ -1,9 +1,9 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
+ import { H as RefreshIcon, f as ChevronDownIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-cuEtsgj9.js";
2
3
  import { Collapsible } from "../foundations/Collapsible.js";
3
- import { H as RefreshIcon, f as ChevronDownIcon, i as ArrowRightIcon, r as ArrowLeftIcon } from "../../icons-CeGfXO21.js";
4
4
  import { IconButton } from "../foundations/IconButton.js";
5
- import { Input } from "../foundations/Input.js";
6
5
  import { ScrollArea } from "../foundations/ScrollArea.js";
6
+ import { Input } from "../foundations/Input.js";
7
7
  import * as React from "react";
8
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
9
  import { useRender } from "@base-ui/react/use-render";
@@ -1,8 +1,8 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { D as LinkIcon } from "../../icons-CeGfXO21.js";
2
+ import { D as LinkIcon } from "../../icons-cuEtsgj9.js";
3
3
  import { Button } from "../foundations/Button.js";
4
- import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../../CodeBlock-Dw1z6jc8.js";
5
4
  import { Popover } from "../foundations/Popover.js";
5
+ import { a as CodeBlockCopyButton, i as CodeBlockContent, n as CodeBlockActions, p as CodeBlockTitle, r as CodeBlockContainer, s as CodeBlockHeader, t as CodeBlock } from "../../CodeBlock-Bl-q7wMc.js";
6
6
  import { ToggleGroup } from "../foundations/ToggleGroup.js";
7
7
  import * as React from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,13 +1,13 @@
1
1
  import { t as cx } from "../../class-names-BiMDVpUo.js";
2
- import { r as ArrowLeftIcon } from "../../icons-CeGfXO21.js";
2
+ import { r as ArrowLeftIcon } from "../../icons-cuEtsgj9.js";
3
3
  import { MessageActions } from "../ai-sdk/Message.js";
4
- import { TransitionSurface } from "../foundations/TransitionSurface.js";
5
- import { AppTopBar } from "../general-purpose/AppTopBar.js";
6
- import { NaniteMark } from "./NaniteScene.js";
7
4
  import { SubagentRunIndicator, getSubagentRunName } from "../agents-sdk/SubagentRunIndicator.js";
8
- import { SubagentRunMetadata } from "../agents-sdk/SubagentRunDetails.js";
5
+ import { NaniteMark } from "./NaniteScene.js";
9
6
  import { AgentChat } from "../agents-sdk/AgentChat.js";
7
+ import { TransitionSurface } from "../foundations/TransitionSurface.js";
8
+ import { AppTopBar } from "../general-purpose/AppTopBar.js";
10
9
  import { ThinkChat } from "../agents-sdk/ThinkChat.js";
10
+ import { SubagentRunMetadata } from "../agents-sdk/SubagentRunDetails.js";
11
11
  import * as React from "react";
12
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
13
  import { useAgentChat } from "@cloudflare/think/react";
@@ -1,4 +1,4 @@
1
- import { d as CheckIcon, h as CopyIcon } from "./icons-CeGfXO21.js";
1
+ import { d as CheckIcon, h as CopyIcon } from "./icons-cuEtsgj9.js";
2
2
  import { IconButton } from "./components/foundations/IconButton.js";
3
3
  import * as React from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -21,6 +21,16 @@
21
21
  min-block-size: 0;
22
22
  }
23
23
 
24
+ /* One gutter contract for the transcript and floating composer, including
25
+ safe areas. The prompt's internal text padding is independent. */
26
+ .agent-chat__transcript-content,
27
+ .agent-chat__dock {
28
+ --agent-chat-used-column-inset: var(--agent-chat-column-inset, var(--sigvelo-spacing-4));
29
+
30
+ padding-inline: max(var(--agent-chat-used-column-inset), env(safe-area-inset-left, 0px))
31
+ max(var(--agent-chat-used-column-inset), env(safe-area-inset-right, 0px));
32
+ }
33
+
24
34
  /* Room for the last message to scroll clear of the floating composer.
25
35
  --agent-chat-dock-size is set from a ResizeObserver in AgentChat. */
26
36
  .agent-chat__transcript-content {
@@ -31,21 +41,14 @@
31
41
  --message-scroller-virtual-block-start: var(--sigvelo-spacing-8);
32
42
 
33
43
  min-inline-size: 0;
34
- max-inline-size: 100%;
35
- /* Codex thread column: `mx-auto w-full max-w-(--thread-content-max-width)
36
- px-toolbar`. Subtract the inset from the measure so content-box padding
37
- cannot overflow the scroller or eat the composer clearance. */
38
- --agent-chat-used-column-inset: var(--agent-chat-column-inset, var(--sigvelo-spacing-4));
39
- inline-size: min(
40
- calc(100% - 2 * var(--agent-chat-used-column-inset)),
41
- var(--agent-chat-content-max-inline-size, var(--sigvelo-measure-wide-block))
42
- );
44
+ /* Auto width subtracts the gutters from the content box; cap the reading
45
+ width at the same measure as the composer. */
46
+ max-inline-size: var(--agent-chat-content-max-inline-size, var(--sigvelo-measure-wide-block));
43
47
  margin-inline: auto;
44
48
  /* Clearance = composer + its scrim band, so a transcript resting at the
45
49
  bottom never sits inside the fade. */
46
50
  padding-block: var(--message-scroller-virtual-block-start)
47
51
  calc(var(--agent-chat-dock-size, 5rem) + var(--agent-chat-dock-scrim-fade, 2.5rem));
48
- padding-inline: var(--agent-chat-used-column-inset);
49
52
  }
50
53
 
51
54
  .agent-chat:not(:has(.agent-chat__dock-content > :not(.agent-chat__notice:empty)))
@@ -69,11 +72,15 @@
69
72
  lower edge, so the state sits slightly high rather than under it. The
70
73
  shared brand loading state brings its own type and colour. */
71
74
  .agent-chat__transcript-loading {
75
+ overflow: hidden;
76
+ scrollbar-gutter: stable;
72
77
  padding-block-end: var(--agent-chat-dock-size, 5rem);
73
78
  }
74
79
 
75
80
  .agent-chat:not(:has(.agent-chat__dock-content > :not(.agent-chat__notice:empty)))
76
81
  .agent-chat__transcript-loading {
82
+ overflow: hidden;
83
+ scrollbar-gutter: stable;
77
84
  padding-block-end: 0;
78
85
  }
79
86
 
@@ -145,6 +152,8 @@
145
152
  }
146
153
 
147
154
  .agent-chat-start-screen__composer > .agent-chat__dock > .agent-chat__dock-content {
155
+ /* The start screen already reserves its own scrollbar gutter. */
156
+ scrollbar-gutter: auto;
148
157
  --agent-chat-dock-ink-room: 0px;
149
158
 
150
159
  overflow: visible;
@@ -301,14 +310,7 @@
301
310
  position: absolute;
302
311
  inset-inline: 0;
303
312
  inset-block-end: 0;
304
- padding-block: 0 max(var(--sigvelo-spacing-6), env(safe-area-inset-bottom, 0px));
305
- /* Same column as the transcript (Codex px-toolbar). The pill's own
306
- padding lives on .prompt-input. */
307
- padding-inline: max(
308
- var(--agent-chat-column-inset, var(--sigvelo-spacing-4)),
309
- env(safe-area-inset-left, 0px)
310
- )
311
- max(var(--agent-chat-column-inset, var(--sigvelo-spacing-4)), env(safe-area-inset-right, 0px));
313
+ padding-block: 0 max(var(--sigvelo-spacing-2), env(safe-area-inset-bottom, 0px));
312
314
  }
313
315
 
314
316
  /* Solid behind the composer itself, dissolving upward so passing transcript
@@ -446,6 +448,12 @@
446
448
  only where there is genuinely no room for it. */
447
449
  /* Local wrap. Not --sigvelo-layout-break-compact. */
448
450
  @container agent-chat (inline-size <= 36rem) {
451
+ .agent-chat__transcript-content,
452
+ .agent-chat__dock {
453
+ /* Codex Chrome extension: [--padding-toolbar:calc(var(--spacing)*2)] = 8px. */
454
+ --agent-chat-used-column-inset: var(--agent-chat-column-inset, var(--sigvelo-spacing-2));
455
+ }
456
+
449
457
  .agent-chat__transcript-content {
450
458
  /* A notch pushes the first row down only as far as it must: the desktop
451
459
  inset already clears shallow insets, so only deeper ones add height. */
@@ -453,23 +461,6 @@
453
461
  var(--sigvelo-spacing-8),
454
462
  calc(var(--sigvelo-spacing-5) + env(safe-area-inset-top, 0px))
455
463
  );
456
-
457
- --agent-chat-used-column-inset: var(--agent-chat-column-inset, var(--sigvelo-spacing-2));
458
- inline-size: min(
459
- calc(100% - 2 * var(--agent-chat-used-column-inset)),
460
- var(--agent-chat-content-max-inline-size, var(--sigvelo-measure-wide-block))
461
- );
462
- /* Codex Chrome extension: [--padding-toolbar:calc(var(--spacing)*2)] = 8px. */
463
- padding-inline: var(--agent-chat-used-column-inset);
464
- }
465
-
466
- .agent-chat__dock {
467
- padding-block-end: max(var(--sigvelo-layout-stack), env(safe-area-inset-bottom, 0px));
468
- padding-inline: max(
469
- var(--agent-chat-column-inset, var(--sigvelo-spacing-2)),
470
- env(safe-area-inset-left, 0px)
471
- )
472
- max(var(--agent-chat-column-inset, var(--sigvelo-spacing-2)), env(safe-area-inset-right, 0px));
473
464
  }
474
465
 
475
466
  .agent-chat-start-screen__content {
@@ -516,6 +507,10 @@
516
507
  .agent-chat__dock-content {
517
508
  --agent-chat-dock-ink-room: var(--sigvelo-spacing-5);
518
509
 
510
+ /* Match the transcript viewport on platforms with classic scrollbars,
511
+ even while this dock is short enough not to scroll. */
512
+ scrollbar-gutter: stable;
513
+
519
514
  min-block-size: 0;
520
515
  overflow: auto;
521
516
  margin: calc(-1 * var(--agent-chat-dock-ink-room));
@@ -3,7 +3,7 @@
3
3
  silhouette, so a transparent favicon casts its shape, not an invisible box. */
4
4
  .avatar.app-icon {
5
5
  --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-8);
6
- --sigvelo-recipe-app-icon-radius: 30%;
6
+ --sigvelo-recipe-app-icon-radius: var(--sigvelo-radius-md);
7
7
 
8
8
  position: relative;
9
9
  display: inline-flex;
@@ -28,7 +28,6 @@
28
28
 
29
29
  .app-icon[data-app-icon-size="sm"] {
30
30
  --sigvelo-recipe-app-icon-size: var(--sigvelo-spacing-6);
31
- --sigvelo-recipe-app-icon-radius: 37.5%;
32
31
  }
33
32
 
34
33
  .app-icon[data-app-icon-size="lg"] {
@@ -27,33 +27,32 @@
27
27
  * `round` in the block below. audit:css-recipes fails if that list falls out of
28
28
  * sync with the stylesheets.
29
29
  */
30
- :where(*) {
30
+ :where(*),
31
+ :where(*)::before,
32
+ :where(*)::after {
31
33
  corner-shape: var(--sigvelo-corner-shape);
32
34
  }
33
35
 
36
+ /* Pseudo-elements follow :where(), since they are invalid inside its selector list. */
34
37
  /* sigvelo-pill-shapes:start */
35
38
  :where(
36
39
  .approval__key,
37
40
  .avatar[data-shape="circle"],
38
41
  .avatar-group__count,
39
42
  .browser-run-panel__tab-glyph,
43
+ .browser-replay .replayer-mouse.touch-device,
40
44
  .chain-of-thought__search-result,
41
45
  .chain-of-thought__step-indicator,
42
46
  .codex-model-selector__trigger,
43
- .codex-model-selector__trigger::before,
44
47
  .empty-state__icon,
45
48
  .inline-citation__trigger,
46
49
  .media-preview-card__play,
47
50
  .manager-office__unread-dot,
48
- .manager-office__employee-nav::-webkit-scrollbar-thumb,
49
- :where([data-layout="chat"]) .manager-office__employee-link[aria-current="page"]::after,
50
- .menu__radio-indicator::before,
51
51
  .message-scroller__button,
52
52
  .plan-summary__trigger,
53
53
  .plan__step-indicator,
54
54
  .prompt-input__button[data-responsive-label],
55
55
  .prompt-input__context-trigger,
56
- .prompt-input__dictation[data-listening] .prompt-input__dictation-icon::before,
57
56
  .prompt-input__permissions-trigger,
58
57
  .prompt-input__recording-button,
59
58
  .prompt-input__stop,
@@ -62,24 +61,34 @@
62
61
  .radio,
63
62
  .radio__indicator,
64
63
  .scroll-area__thumb,
64
+ .sigvelo-floating-prompt > *,
65
65
  .slider__indicator,
66
66
  .slider__thumb,
67
67
  .slider__track,
68
68
  .stepper__indicator,
69
69
  .stepper__separator,
70
70
  .stepper__trigger,
71
- .subagent-run__milestone::before,
72
71
  .switch,
73
72
  .switch__thumb,
74
- .task__item::before,
75
73
  .test-results__test-status,
76
- .think-full-app__resizer::before,
77
74
  .think-routine__routine-status,
75
+ .think-thread-status-dot,
78
76
  [data-slot="meter-indicator"],
79
77
  [data-slot="meter-track"],
80
78
  [data-slot="progress-indicator"],
81
79
  [data-slot="progress-track"]
82
- ) {
80
+ ),
81
+ :where(.browser-replay .replayer-mouse)::after,
82
+ :where(.codex-model-selector__trigger)::before,
83
+ :where(.github-motion-mark)::before,
84
+ :where(.github-motion-mark)::after,
85
+ :where(.manager-office__employee-nav)::-webkit-scrollbar-thumb,
86
+ :where(:where([data-layout="chat"]) .manager-office__employee-link[aria-current="page"])::after,
87
+ :where(.menu__radio-indicator)::before,
88
+ :where(.prompt-input__dictation[data-listening] .prompt-input__dictation-icon)::before,
89
+ :where(.subagent-run__milestone)::before,
90
+ :where(.task__item)::before,
91
+ :where(.think-full-app__resizer)::before {
83
92
  --sigvelo-corner-shape: round;
84
93
  }
85
94
  /* sigvelo-pill-shapes:end */
@@ -47,6 +47,20 @@
47
47
  text-align: center;
48
48
  }
49
49
 
50
+ /* A brief pending mount should not flash a full-strength logo. Keep the
51
+ region and its announcement present; only the artwork and copy fade in. */
52
+ .brand-loading__mark,
53
+ .brand-loading__label {
54
+ transition: opacity var(--sigvelo-motion-duration-disclosure) var(--sigvelo-motion-ease-enter);
55
+ }
56
+
57
+ @starting-style {
58
+ .brand-loading__mark,
59
+ .brand-loading__label {
60
+ opacity: 0;
61
+ }
62
+ }
63
+
50
64
  @media (prefers-reduced-motion: reduce), (forced-colors: active) {
51
65
  .brand-loading__mark::after {
52
66
  display: none;
@@ -156,3 +156,24 @@ test("OS-following mode uses the same Sigvelo palette", () => {
156
156
  matchMedia("(prefers-color-scheme: dark)").matches ? "rgb(23, 23, 22)" : "rgb(247, 247, 244)",
157
157
  );
158
158
  });
159
+
160
+ test("shared Squircle corners preserve true circular pseudo-elements and button variant shape", () => {
161
+ root.removeAttribute("data-preset");
162
+ root.removeAttribute("data-style");
163
+ const primary = document.createElement("button");
164
+ primary.className = "button button--normal button--primary";
165
+ const destructive = document.createElement("button");
166
+ destructive.className = "button button--normal button--destructive";
167
+ const mark = document.createElement("span");
168
+ mark.className = "github-motion-mark";
169
+ document.body.append(primary, destructive, mark);
170
+ expect(getComputedStyle(destructive).borderRadius).toBe(getComputedStyle(primary).borderRadius);
171
+ if (CSS.supports("corner-shape", "superellipse(1.5)")) {
172
+ expect(getComputedStyle(primary).getPropertyValue("corner-shape")).toBe("superellipse(1.5)");
173
+ expect(getComputedStyle(primary, "::after").getPropertyValue("corner-shape")).toBe(
174
+ "superellipse(1.5)",
175
+ );
176
+ expect(getComputedStyle(mark, "::before").getPropertyValue("corner-shape")).toBe("round");
177
+ expect(getComputedStyle(mark, "::after").getPropertyValue("corner-shape")).toBe("round");
178
+ }
179
+ });
@@ -96,7 +96,7 @@
96
96
  width: 20px;
97
97
  height: 20px;
98
98
  background: var(--sigvelo-color-focus);
99
- border-radius: 100%;
99
+ border-radius: var(--sigvelo-radius-circle);
100
100
  transform: translate(-50%, -50%);
101
101
  opacity: 0.3;
102
102
  }
@@ -114,7 +114,7 @@
114
114
  border-color: transparent;
115
115
  border-style: solid;
116
116
  border-width: 4px;
117
- border-radius: 100%;
117
+ border-radius: var(--sigvelo-radius-circle);
118
118
  transition:
119
119
  left 0s linear,
120
120
  top 0s linear,
@@ -83,8 +83,6 @@
83
83
  }
84
84
 
85
85
  .button--normal.button--destructive {
86
- --sigvelo-recipe-button-radius: var(--sigvelo-radius-full);
87
-
88
86
  background-color: var(--sigvelo-color-danger-bg);
89
87
  color: var(--sigvelo-color-danger-text-on-bg);
90
88
  }
@@ -9,7 +9,7 @@
9
9
  flex-shrink: 0;
10
10
  border: var(--sigvelo-border-style) var(--sigvelo-border-width)
11
11
  var(--sigvelo-color-neutral-border-muted);
12
- border-radius: calc(var(--sigvelo-radius-md) - 4px);
12
+ border-radius: calc(var(--sigvelo-radius-md) - var(--sigvelo-spacing-1));
13
13
  background-color: var(--sigvelo-color-canvas);
14
14
  outline: none;
15
15
  cursor: pointer;
@@ -50,7 +50,7 @@
50
50
  }
51
51
  }
52
52
 
53
- /* React owns native snapshots; the class comes from <ViewTransition>. */
53
+ /* Snapshot ownership stays with the caller: Router for routes, React for local Suspense demos. */
54
54
  ::view-transition {
55
55
  pointer-events: none;
56
56
  }
@@ -60,12 +60,22 @@
60
60
  animation-timing-function: var(--sigvelo-motion-ease-change);
61
61
  }
62
62
 
63
+ /* A single Router-owned crossfade. Streaming and refetches never start this type. */
64
+ :root:active-view-transition-type(sigvelo-navigation)::view-transition-group(root) {
65
+ animation-duration: var(--sigvelo-motion-duration-disclosure);
66
+ animation-timing-function: var(--sigvelo-motion-ease-change);
67
+ }
68
+
63
69
  @media (prefers-reduced-motion: reduce) {
64
- ::view-transition-group(.sigvelo-layout-transition) {
70
+ ::view-transition-group(*),
71
+ ::view-transition-old(*),
72
+ ::view-transition-new(*) {
65
73
  animation: none !important;
66
74
  }
67
75
  }
68
76
 
69
- :root[data-motion="reduce"]::view-transition-group(.sigvelo-layout-transition) {
77
+ :root[data-motion="reduce"]::view-transition-group(*),
78
+ :root[data-motion="reduce"]::view-transition-old(*),
79
+ :root[data-motion="reduce"]::view-transition-new(*) {
70
80
  animation: none !important;
71
81
  }
@@ -26,7 +26,7 @@
26
26
  .github-motion-mark::before {
27
27
  inset: -0.22em;
28
28
  border: var(--sigvelo-border-style) var(--sigvelo-border-width) currentColor;
29
- border-radius: 999px;
29
+ border-radius: var(--sigvelo-radius-circle);
30
30
  opacity: 0.24;
31
31
  transform-origin: 50% 50%;
32
32
  animation: github-motion-mark-ring 2.6s ease-out infinite;
@@ -35,7 +35,7 @@
35
35
  .github-motion-mark::after {
36
36
  inline-size: 0.24em;
37
37
  block-size: 0.24em;
38
- border-radius: 999px;
38
+ border-radius: var(--sigvelo-radius-circle);
39
39
  background: currentColor;
40
40
  opacity: 0.55;
41
41
  transform: translate(0.48em, -0.46em);
@@ -272,6 +272,16 @@
272
272
  display: contents;
273
273
  }
274
274
 
275
+ /* Rich title triggers need the space left by the actual controls, rather
276
+ than the plain title's 45vw cap, to keep activity counts and a readable name. */
277
+ .app-top-bar[data-compact-leading="trigger"] {
278
+ grid-template-columns: auto var(--sigvelo-layout-track-fill) auto;
279
+ }
280
+
281
+ .app-top-bar[data-compact-leading="trigger"] .app-top-bar__title {
282
+ max-inline-size: 100%;
283
+ }
284
+
275
285
  .responsive-sidebar-shell__title-trigger {
276
286
  inline-size: auto;
277
287
  max-inline-size: 100%;
@@ -290,7 +300,7 @@
290
300
  box-shadow: var(--sigvelo-recipe-focus-shadow-inset);
291
301
  }
292
302
 
293
- .responsive-sidebar-shell__title-trigger span {
303
+ .responsive-sidebar-shell__title-trigger > span {
294
304
  min-inline-size: 0;
295
305
  overflow: hidden;
296
306
  text-overflow: ellipsis;
@@ -4,7 +4,7 @@
4
4
  --sigvelo-recipe-control-font-size: var(--sigvelo-density-compact-control-font-size);
5
5
  --sigvelo-recipe-control-line-height: var(--sigvelo-density-compact-control-line-height);
6
6
  --sigvelo-recipe-control-icon-size: var(--sigvelo-density-compact-control-icon-size);
7
- --sigvelo-recipe-control-radius: var(--sigvelo-radius-sm);
7
+ --sigvelo-recipe-control-radius: var(--sigvelo-radius-xl);
8
8
  --sigvelo-recipe-focus-shadow: var(--sigvelo-recipe-focus-shadow-inset);
9
9
  --sigvelo-focus-offset: -2px;
10
10
  }
@@ -148,7 +148,7 @@
148
148
 
149
149
  .tabs--bordered .tabs__tab {
150
150
  border-block-end: none;
151
- border-radius: calc(var(--sigvelo-radius-md) - 2px);
151
+ border-radius: calc(var(--sigvelo-radius-md) - var(--sigvelo-spacing-0-5));
152
152
  margin-block-end: 0;
153
153
  }
154
154
 
@@ -79,8 +79,6 @@
79
79
  }
80
80
 
81
81
  .think-routine__search {
82
- --sigvelo-recipe-control-radius: var(--sigvelo-radius-full);
83
-
84
82
  display: grid;
85
83
  gap: var(--sigvelo-spacing-1-5);
86
84
  margin-block-end: var(--sigvelo-spacing-2);
@@ -43,6 +43,7 @@
43
43
  }
44
44
 
45
45
  .think-thread-status-indicators {
46
+ flex: 0 0 auto;
46
47
  min-inline-size: 0;
47
48
  display: inline-flex;
48
49
  align-items: center;
@@ -66,6 +67,18 @@
66
67
  block-size: var(--sigvelo-density-compact-control-icon-size);
67
68
  }
68
69
 
70
+ .think-thread-status-dot {
71
+ flex: none;
72
+ inline-size: var(--sigvelo-spacing-1-5);
73
+ block-size: var(--sigvelo-spacing-1-5);
74
+ border-radius: var(--sigvelo-radius-full);
75
+ background: currentColor;
76
+ }
77
+
78
+ .think-thread-status-indicators__item .think-thread-status-dot {
79
+ margin-inline: var(--sigvelo-spacing-1);
80
+ }
81
+
69
82
  .think-thread-status-indicators__item[data-status="running"] {
70
83
  color: var(--sigvelo-color-primary-text);
71
84
  }
@@ -260,11 +273,6 @@
260
273
  color: var(--sigvelo-color-primary-text);
261
274
  }
262
275
 
263
- /* The six statuses this rule used to list were `isThreadBusy` written out a
264
- second time, and those are exactly the ones that render SpinnerIcon, which
265
- spins itself. A DotIcon never needed the rule and would have started turning
266
- the moment the two lists disagreed. */
267
-
268
276
  .think-thread-picker__thread[data-thread-status="error"] .think-thread-picker__thread-status {
269
277
  color: var(--sigvelo-color-danger-text);
270
278
  }
@@ -343,6 +351,11 @@
343
351
  }
344
352
 
345
353
  @media (forced-colors: active) {
354
+ .think-thread-status-dot {
355
+ forced-color-adjust: none;
356
+ background: CanvasText;
357
+ }
358
+
346
359
  .think-thread-picker {
347
360
  border-inline-end: var(--sigvelo-border-style) var(--sigvelo-border-width) canvastext;
348
361
  background: canvas;