@mcp-b/react-components 0.49.0 → 0.50.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 (196) hide show
  1. package/dist/{AgentChatQueue-C_Jaw3Ia.d.ts → AgentChatQueue-MrHhV901.d.ts} +1 -1
  2. package/dist/AgentMessageParts-C7L-Mv9U.d.ts +46 -0
  3. package/dist/AppTopBar-CVkLRdk7.d.ts +99 -0
  4. package/dist/{CodeBlock-g8sADidM.js → CodeBlock-BMK6CW9D.js} +1 -1
  5. package/dist/Dialog-88GF7_Th.d.ts +107 -0
  6. package/dist/{FileTree-H8mMg4rV.js → FileTree-okaLnS5j.js} +20 -9
  7. package/dist/Form-CM7GNTwR.d.ts +91 -0
  8. package/dist/ManagerOffice-5pEFpoV3.js +1146 -0
  9. package/dist/McpConnectorForm--HB0MEGC.d.ts +39 -0
  10. package/dist/{Menu-yb6QXWA3.d.ts → Menu-CgfUZhZd.d.ts} +1 -1
  11. package/dist/Popover-CgHG5DtS.d.ts +220 -0
  12. package/dist/{PromptInput-C4Mofitz.d.ts → PromptInput-DGPrCTPl.d.ts} +3 -2
  13. package/dist/ResponsiveSidebarShell-CAmmtQTR.d.ts +128 -0
  14. package/dist/SessionCompaction-CmTJFpzj.d.ts +89 -0
  15. package/dist/SetupChecklist-O6qmgwz4.js +77 -0
  16. package/dist/ThinkChatActivity-DENkintt.d.ts +77 -0
  17. package/dist/ThinkChatContext-COIgzkYp.d.ts +28 -0
  18. package/dist/ThinkRoutine-Cb1DdaHa.d.ts +30 -0
  19. package/dist/ThinkThreadPicker-yetGX_s5.d.ts +91 -0
  20. package/dist/{WorkspaceFileView-DYPtRVpM.js → WorkspaceFileView-ncZuIWhC.js} +2 -2
  21. package/dist/WorkspaceMessageResponse-8lOSAbw_.d.ts +48 -0
  22. package/dist/codex-model-catalog-BBN_gWcc.d.ts +155 -0
  23. package/dist/components/agents-sdk/AgentActivity.js +1 -1
  24. package/dist/components/agents-sdk/AgentChat.d.ts +3 -3
  25. package/dist/components/agents-sdk/AgentChat.js +8 -8
  26. package/dist/components/agents-sdk/AgentChatQueue.d.ts +1 -1
  27. package/dist/components/agents-sdk/AgentEvent.js +2 -2
  28. package/dist/components/agents-sdk/BrowserLiveScreen.js +1 -1
  29. package/dist/components/agents-sdk/BrowserLiveView.js +1 -1
  30. package/dist/components/agents-sdk/BrowserReplay.js +1 -1
  31. package/dist/components/agents-sdk/BrowserRunPanel.js +1 -1
  32. package/dist/components/agents-sdk/DiscordConnectionDialog.d.ts +20 -0
  33. package/dist/components/agents-sdk/DiscordConnectionDialog.js +65 -0
  34. package/dist/components/agents-sdk/EmployeeApp.d.ts +49 -0
  35. package/dist/components/agents-sdk/EmployeeApp.js +57 -0
  36. package/dist/components/agents-sdk/EmployeeChat.d.ts +63 -0
  37. package/dist/components/agents-sdk/EmployeeChat.js +84 -0
  38. package/dist/components/agents-sdk/EmployeeChrome.d.ts +10 -2
  39. package/dist/components/agents-sdk/EmployeeChrome.js +26 -16
  40. package/dist/components/agents-sdk/EmployeeSchedules.d.ts +24 -0
  41. package/dist/components/agents-sdk/EmployeeSchedules.js +105 -0
  42. package/dist/components/agents-sdk/EmployeeStartScreen.d.ts +43 -0
  43. package/dist/components/agents-sdk/EmployeeStartScreen.js +133 -0
  44. package/dist/components/agents-sdk/ManagerAccountActions.d.ts +29 -0
  45. package/dist/components/agents-sdk/ManagerAccountActions.js +62 -0
  46. package/dist/components/agents-sdk/ManagerOffice.d.ts +1 -1
  47. package/dist/components/agents-sdk/ManagerOffice.js +1 -1145
  48. package/dist/components/agents-sdk/ManagerOfficeScreens.d.ts +49 -0
  49. package/dist/components/agents-sdk/ManagerOfficeScreens.js +198 -0
  50. package/dist/components/agents-sdk/McpConnectionRequest.d.ts +1 -1
  51. package/dist/components/agents-sdk/McpConnectionRequest.js +3 -3
  52. package/dist/components/agents-sdk/McpConnectorForm.d.ts +1 -38
  53. package/dist/components/agents-sdk/McpConnectorForm.js +1 -1
  54. package/dist/components/agents-sdk/McpPluginCatalog.d.ts +3 -3
  55. package/dist/components/agents-sdk/McpPluginCatalog.js +4 -4
  56. package/dist/components/agents-sdk/McpServerIcon.d.ts +1 -1
  57. package/dist/components/agents-sdk/McpServerPicker.d.ts +4 -4
  58. package/dist/components/agents-sdk/McpServerPicker.js +2 -2
  59. package/dist/components/agents-sdk/ModelEndpointDialog.d.ts +31 -0
  60. package/dist/components/agents-sdk/ModelEndpointDialog.js +118 -0
  61. package/dist/components/agents-sdk/ModelSelector.d.ts +1 -1
  62. package/dist/components/agents-sdk/ModelSelector.js +4 -4
  63. package/dist/components/agents-sdk/PromptInputApproval.js +1 -1
  64. package/dist/components/agents-sdk/PromptInputCommands.d.ts +1 -1
  65. package/dist/components/agents-sdk/PromptInputCommands.js +1 -1
  66. package/dist/components/agents-sdk/SessionCompaction.d.ts +1 -88
  67. package/dist/components/agents-sdk/SlackConnectionDialog.d.ts +18 -0
  68. package/dist/components/agents-sdk/SlackConnectionDialog.js +48 -0
  69. package/dist/components/agents-sdk/SubagentRunIndicator.js +1 -1
  70. package/dist/components/agents-sdk/SubagentRunPanel.js +1 -1
  71. package/dist/components/agents-sdk/SubagentRunSelector.js +1 -1
  72. package/dist/components/agents-sdk/ThinkChat.d.ts +6 -6
  73. package/dist/components/agents-sdk/ThinkChatActivity.d.ts +1 -76
  74. package/dist/components/agents-sdk/ThinkChatActivity.js +3 -3
  75. package/dist/components/agents-sdk/ThinkChatContext.d.ts +1 -27
  76. package/dist/components/agents-sdk/ThinkChatToolPanels.js +2 -2
  77. package/dist/components/agents-sdk/ThinkExecutionDetail.js +2 -2
  78. package/dist/components/agents-sdk/ThinkExecutionStatus.js +1 -1
  79. package/dist/components/agents-sdk/ThinkExecutionWorkbench.d.ts +1 -1
  80. package/dist/components/agents-sdk/ThinkExecutionWorkbench.js +3 -3
  81. package/dist/components/agents-sdk/ThinkRecoveryNotice.d.ts +1 -1
  82. package/dist/components/agents-sdk/ThinkRecoveryNotice.js +1 -1
  83. package/dist/components/agents-sdk/ThinkRoutine.d.ts +1 -29
  84. package/dist/components/agents-sdk/ThinkRoutineActions.d.ts +2 -2
  85. package/dist/components/agents-sdk/ThinkRoutineActions.js +1 -1
  86. package/dist/components/agents-sdk/ThinkRoutineBrowser.d.ts +1 -1
  87. package/dist/components/agents-sdk/ThinkRoutineBrowser.js +3 -3
  88. package/dist/components/agents-sdk/ThinkRoutineDetail.d.ts +1 -1
  89. package/dist/components/agents-sdk/ThinkRoutineForm.js +4 -4
  90. package/dist/components/agents-sdk/ThinkRoutineRuns.js +1 -1
  91. package/dist/components/agents-sdk/ThinkThreadPicker.d.ts +1 -90
  92. package/dist/components/agents-sdk/ThinkThreadPicker.js +3 -3
  93. package/dist/components/agents-sdk/WorkspaceBrowser.js +1 -1
  94. package/dist/components/agents-sdk/WorkspaceCorrespondence.js +6 -6
  95. package/dist/components/agents-sdk/WorkspaceExecution.js +7 -7
  96. package/dist/components/agents-sdk/WorkspaceExplorer.js +1 -1
  97. package/dist/components/agents-sdk/WorkspaceFileView.js +1 -1
  98. package/dist/components/agents-sdk/WorkspaceHeader.js +1 -1
  99. package/dist/components/agents-sdk/WorkspaceMessageResponse.d.ts +1 -47
  100. package/dist/components/agents-sdk/WorkspaceMountManager.js +2 -2
  101. package/dist/components/agents-sdk/WorkspaceProject.js +4 -4
  102. package/dist/components/agents-sdk/WorkspaceUserScript.js +4 -4
  103. package/dist/components/ai-sdk/Activity.js +1 -1
  104. package/dist/components/ai-sdk/AgentChatMessageEditor.js +5 -1
  105. package/dist/components/ai-sdk/AgentChatStartScreen.d.ts +1 -1
  106. package/dist/components/ai-sdk/AgentChatStartScreen.js +1 -1
  107. package/dist/components/ai-sdk/AgentMessageParts.d.ts +1 -45
  108. package/dist/components/ai-sdk/Approval.js +2 -2
  109. package/dist/components/ai-sdk/Artifact.js +1 -1
  110. package/dist/components/ai-sdk/ChainOfThought.js +1 -1
  111. package/dist/components/ai-sdk/Checkpoint.js +1 -1
  112. package/dist/components/ai-sdk/CodeBlock.js +1 -1
  113. package/dist/components/ai-sdk/ComposerLink.js +1 -1
  114. package/dist/components/ai-sdk/ConnectedAppCards.js +3 -3
  115. package/dist/components/ai-sdk/Context.d.ts +1 -1
  116. package/dist/components/ai-sdk/Context.js +1 -1
  117. package/dist/components/ai-sdk/Conversation.js +1 -1
  118. package/dist/components/ai-sdk/Goal.js +1 -1
  119. package/dist/components/ai-sdk/MediaPreviewCard.js +1 -1
  120. package/dist/components/ai-sdk/Message.js +2 -2
  121. package/dist/components/ai-sdk/MessageScroller.js +1 -1
  122. package/dist/components/ai-sdk/MessageScrollerVirtual.js +2 -1
  123. package/dist/components/ai-sdk/Plan.d.ts +1 -1
  124. package/dist/components/ai-sdk/Plan.js +1 -1
  125. package/dist/components/ai-sdk/PromptInput.d.ts +1 -1
  126. package/dist/components/ai-sdk/PromptInput.js +7 -7
  127. package/dist/components/ai-sdk/Queue.js +1 -1
  128. package/dist/components/ai-sdk/Reasoning.js +1 -1
  129. package/dist/components/ai-sdk/Sources.js +1 -1
  130. package/dist/components/ai-sdk/Task.js +1 -1
  131. package/dist/components/extension/ChatGptSignInScreen.js +1 -1
  132. package/dist/components/extension/CodexModelSelector.d.ts +2 -2
  133. package/dist/components/extension/CodexModelSelector.js +3 -3
  134. package/dist/components/extension/ConversationTabPicker.js +2 -2
  135. package/dist/components/foundations/Checkbox.js +1 -1
  136. package/dist/components/foundations/Collapsible.js +1 -1
  137. package/dist/components/foundations/ContextMenu.d.ts +10 -23
  138. package/dist/components/foundations/ContextMenu.js +3 -2
  139. package/dist/components/foundations/Dialog.d.ts +1 -106
  140. package/dist/components/foundations/Form.d.ts +1 -90
  141. package/dist/components/foundations/Menu.d.ts +1 -1
  142. package/dist/components/foundations/Menubar.d.ts +1 -1
  143. package/dist/components/foundations/Menubar.js +1 -1
  144. package/dist/components/foundations/Popover.d.ts +1 -219
  145. package/dist/components/foundations/PreviewCard.d.ts +1 -1
  146. package/dist/components/foundations/SearchField.js +1 -1
  147. package/dist/components/foundations/Select.js +1 -1
  148. package/dist/components/foundations/Stepper.js +1 -1
  149. package/dist/components/foundations/Toast.js +1 -1
  150. package/dist/components/foundations/ToggleGroup.d.ts +1 -1
  151. package/dist/components/foundations/ToggleGroup.js +1 -1
  152. package/dist/components/foundations/Tooltip.d.ts +1 -1
  153. package/dist/components/foundations/icons.js +1 -1
  154. package/dist/components/general-purpose/AccountSignInDialog.d.ts +26 -0
  155. package/dist/components/general-purpose/AccountSignInDialog.js +25 -0
  156. package/dist/components/general-purpose/AppTopBar.d.ts +1 -98
  157. package/dist/components/general-purpose/Commit.js +2 -2
  158. package/dist/components/general-purpose/EnvironmentVariables.js +2 -2
  159. package/dist/components/general-purpose/FileTree.js +1 -1
  160. package/dist/components/general-purpose/NotificationPrompt.d.ts +13 -0
  161. package/dist/components/general-purpose/NotificationPrompt.js +18 -0
  162. package/dist/components/general-purpose/PricingPlanCard.js +2 -2
  163. package/dist/components/general-purpose/PricingUsageCalculator.js +2 -2
  164. package/dist/components/general-purpose/ResponsiveSidebarShell.d.ts +1 -127
  165. package/dist/components/general-purpose/ResponsiveSidebarShell.js +124 -72
  166. package/dist/components/general-purpose/SettingsFormDialog.d.ts +2 -2
  167. package/dist/components/general-purpose/SettingsFormDialog.js +2 -2
  168. package/dist/components/general-purpose/SetupChecklist.js +1 -76
  169. package/dist/components/general-purpose/StatusScreen.d.ts +10 -0
  170. package/dist/components/general-purpose/StatusScreen.js +13 -0
  171. package/dist/components/general-purpose/Terminal.js +2 -2
  172. package/dist/components/general-purpose/TestResults.js +1 -1
  173. package/dist/components/general-purpose/ThemeModeControl.js +2 -2
  174. package/dist/components/general-purpose/WebPreview.js +2 -2
  175. package/dist/components/nanites/AgentConnection.js +2 -2
  176. package/dist/components/nanites/AgentToolDetail.d.ts +1 -1
  177. package/dist/components/nanites/AgentToolDetail.js +4 -4
  178. package/dist/{copy-button-CSDuDfdP.js → copy-button-Dk2vRe9j.js} +1 -1
  179. package/dist/mcp-server-catalog-D9p4gGeJ.d.ts +1112 -0
  180. package/dist/styles/accessibility.css +20 -0
  181. package/dist/styles/agent-chat.css +1 -1
  182. package/dist/styles/base.css +0 -8
  183. package/dist/styles/codex-model-selector.css +4 -0
  184. package/dist/styles/color-contrast.test.ts +212 -0
  185. package/dist/styles/employee-app.css +29 -0
  186. package/dist/styles/file-tree.css +5 -1
  187. package/dist/styles/index.css +2 -0
  188. package/dist/styles/manager-office.css +5 -5
  189. package/dist/styles/manager-work.css +93 -0
  190. package/dist/styles/responsive-sidebar-shell.css +1 -1
  191. package/dist/utils/codex-model-catalog.d.ts +1 -135
  192. package/dist/utils/codex-model-catalog.js +22 -5
  193. package/dist/utils/mcp-server-catalog.d.ts +1 -1111
  194. package/dist/{workspace-assets-Bg7XhPsk.js → workspace-assets-wW_lQLYK.js} +2 -2
  195. package/package.json +3 -3
  196. package/dist/{icons-cuEtsgj9.js → icons-CeGfXO21.js} +1 -1
@@ -11,4 +11,24 @@
11
11
  border-color: GrayText;
12
12
  color: GrayText;
13
13
  }
14
+
15
+ :where([data-slot="meter-track"], [data-slot="progress-track"], [data-slot="slider-track"]) {
16
+ background-color: Canvas;
17
+ outline: var(--sigvelo-border-width) solid CanvasText;
18
+ outline-offset: calc(-1 * var(--sigvelo-border-width));
19
+ }
20
+
21
+ :where(
22
+ [data-slot="meter-indicator"],
23
+ [data-slot="progress-indicator"],
24
+ [data-slot="slider-indicator"]
25
+ ) {
26
+ background-color: Highlight;
27
+ }
28
+
29
+ /* Base UI focuses the hidden range input inside the visible thumb. */
30
+ .slider__thumb:has(:focus-visible) {
31
+ outline: var(--sigvelo-focus-ring-forced);
32
+ outline-offset: var(--sigvelo-focus-offset);
33
+ }
14
34
  }
@@ -563,7 +563,7 @@
563
563
 
564
564
  .agent-chat-start-screen__composer-tray:has(> :nth-child(3):last-child) {
565
565
  display: grid;
566
- grid-template-columns: repeat(3, minmax(0, 1fr));
566
+ grid-template-columns: repeat(3, var(--sigvelo-layout-track-fill));
567
567
  }
568
568
 
569
569
  .agent-chat-start-screen__composer-tray:has(> :nth-child(3):last-child) > .button {
@@ -192,11 +192,3 @@ textarea {
192
192
  .tabular-nums {
193
193
  font-variant-numeric: tabular-nums;
194
194
  }
195
-
196
- @media (prefers-contrast: more) {
197
- :root {
198
- --sigvelo-color-neutral-border-muted: var(--sigvelo-color-neutral-600);
199
- --sigvelo-color-neutral-border-subtle: var(--sigvelo-color-neutral-500);
200
- --sigvelo-color-neutral-bg-subtle: var(--sigvelo-color-neutral-200);
201
- }
202
- }
@@ -164,6 +164,10 @@
164
164
  line-height: var(--sigvelo-leading-compact);
165
165
  }
166
166
 
167
+ .codex-model-selector__option[data-highlighted] .codex-model-selector__option-description {
168
+ color: inherit;
169
+ }
170
+
167
171
  .codex-model-selector__option-indicator {
168
172
  order: 2;
169
173
  margin-inline-start: auto;
@@ -0,0 +1,212 @@
1
+ import { expect, test } from "vitest";
2
+ import { cdp, page } from "vitest/browser";
3
+ import { act, createElement } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { FileTree, FileTreeFile, FileTreeFolder } from "../components/general-purpose/FileTree.js";
6
+ import presetsCss from "../../../design-tokens/src/color-presets.css?raw";
7
+ import "./index.css";
8
+
9
+ const presets = [
10
+ "",
11
+ ...new Set([...presetsCss.matchAll(/data-preset="([^"]+)"/g)].map((m) => m[1])),
12
+ ];
13
+ const colorPrefix = "--sigvelo-color-";
14
+
15
+ function luminance(channels: Uint8ClampedArray) {
16
+ return [0.2126, 0.7152, 0.0722].reduce((sum, weight, index) => {
17
+ const channel = channels[index] / 255;
18
+ return (
19
+ sum + weight * (channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4)
20
+ );
21
+ }, 0);
22
+ }
23
+
24
+ function contrastRatio(
25
+ context: CanvasRenderingContext2D,
26
+ foreground: string,
27
+ background: string,
28
+ surface: string,
29
+ ) {
30
+ context.fillStyle = surface;
31
+ context.fillRect(0, 0, 1, 1);
32
+ context.fillStyle = background;
33
+ context.fillRect(0, 0, 1, 1);
34
+ const backgroundLuminance = luminance(context.getImageData(0, 0, 1, 1).data);
35
+ context.fillStyle = foreground;
36
+ context.fillRect(0, 0, 1, 1);
37
+ const foregroundLuminance = luminance(context.getImageData(0, 0, 1, 1).data);
38
+ return (
39
+ (Math.max(backgroundLuminance, foregroundLuminance) + 0.05) /
40
+ (Math.min(backgroundLuminance, foregroundLuminance) + 0.05)
41
+ );
42
+ }
43
+
44
+ test.each(["light", "dark"])("semantic color pairs stay readable in %s mode", async (theme) => {
45
+ const root = document.documentElement;
46
+ const probe = document.createElement("div");
47
+ const canvas = document.createElement("canvas");
48
+ canvas.width = canvas.height = 1;
49
+ const context = canvas.getContext("2d");
50
+ if (!context) throw new Error("Contrast checks require a canvas context");
51
+ document.body.append(probe);
52
+ root.dataset.theme = theme;
53
+
54
+ try {
55
+ for (const preset of presets) {
56
+ if (preset) root.dataset.preset = preset;
57
+ else delete root.dataset.preset;
58
+
59
+ for (const family of ["primary", "neutral", "success", "warning", "danger"]) {
60
+ const pairs = [
61
+ [`${family}-bg`, `${family}-text-on-bg`],
62
+ [`${family}-bg-subtle`, `${family}-text-on-subtle`],
63
+ [`${family}-bg-strong`, `${family}-text-on-strong`],
64
+ ["surface", `${family}-text`],
65
+ ];
66
+ if (family === "primary" || family === "danger") {
67
+ pairs.push(
68
+ [`${family}-bg-hover`, `${family}-text-on-bg`],
69
+ [`${family}-bg-press`, `${family}-text-on-bg`],
70
+ );
71
+ }
72
+
73
+ for (const [background, foreground] of pairs) {
74
+ probe.style.cssText = `background: var(${colorPrefix}${background}); color: var(${colorPrefix}${foreground}); border-color: var(--sigvelo-color-surface)`;
75
+ const style = getComputedStyle(probe);
76
+ const ratio = contrastRatio(
77
+ context,
78
+ style.color,
79
+ style.backgroundColor,
80
+ style.borderColor,
81
+ );
82
+ expect(
83
+ ratio,
84
+ `${preset || "default"}: ${foreground} on ${background}`,
85
+ ).toBeGreaterThanOrEqual(4.5);
86
+ }
87
+ }
88
+ }
89
+
90
+ delete root.dataset.preset;
91
+ probe.style.backgroundColor = "var(--sigvelo-color-neutral-bg-subtle)";
92
+ await cdp().send("Emulation.setEmulatedMedia", {
93
+ features: [{ name: "prefers-contrast", value: "no-preference" }],
94
+ });
95
+ const background = getComputedStyle(probe).backgroundColor;
96
+ await cdp().send("Emulation.setEmulatedMedia", {
97
+ features: [{ name: "prefers-contrast", value: "more" }],
98
+ });
99
+ expect(getComputedStyle(probe).backgroundColor).toBe(background);
100
+ } finally {
101
+ probe.remove();
102
+ delete root.dataset.theme;
103
+ delete root.dataset.preset;
104
+ await cdp().send("Emulation.setEmulatedMedia", { features: [] });
105
+ }
106
+ });
107
+
108
+ test.each(["light", "dark"])("selected FileTree rows stay readable in %s mode", async (theme) => {
109
+ const root = document.documentElement;
110
+ const fixture = document.createElement("div");
111
+ const canvas = document.createElement("canvas");
112
+ canvas.width = canvas.height = 1;
113
+ const context = canvas.getContext("2d");
114
+ if (!context) throw new Error("Contrast checks require a canvas context");
115
+ document.body.append(fixture);
116
+ const reactRoot = createRoot(fixture);
117
+ act(() =>
118
+ reactRoot.render(
119
+ createElement(
120
+ "div",
121
+ null,
122
+ createElement(
123
+ FileTree,
124
+ { selectedPath: "src" },
125
+ createElement(FileTreeFolder, { path: "src", name: "Source" }),
126
+ ),
127
+ createElement(
128
+ FileTree,
129
+ { selectedPath: "index.ts" },
130
+ createElement(FileTreeFile, { path: "index.ts", name: "index.ts" }),
131
+ ),
132
+ ),
133
+ ),
134
+ );
135
+ root.dataset.theme = theme;
136
+
137
+ try {
138
+ const nodes = fixture.querySelectorAll<HTMLElement>(".file-tree__node[data-selected]");
139
+ expect(nodes).toHaveLength(2);
140
+ for (const node of nodes) {
141
+ for (const hovered of [false, true]) {
142
+ if (hovered) await page.elementLocator(node).hover();
143
+ else await page.elementLocator(node).unhover();
144
+ expect(node.matches(":hover")).toBe(hovered);
145
+ for (const preset of presets) {
146
+ if (preset) root.dataset.preset = preset;
147
+ else delete root.dataset.preset;
148
+ for (const animation of node.getAnimations()) animation.finish();
149
+ const style = getComputedStyle(node);
150
+ const surface = getComputedStyle(fixture.querySelector(".file-tree")!).backgroundColor;
151
+ expect(
152
+ contrastRatio(context, style.color, style.backgroundColor, surface),
153
+ `${preset || "default"}: ${node.textContent}, hover=${hovered}`,
154
+ ).toBeGreaterThanOrEqual(4.5);
155
+ for (const icon of node.querySelectorAll(".file-tree__icon, .file-tree__chevron")) {
156
+ expect(
157
+ contrastRatio(context, getComputedStyle(icon).color, style.backgroundColor, surface),
158
+ `${preset || "default"}: ${node.textContent} icon, hover=${hovered}`,
159
+ ).toBeGreaterThanOrEqual(3);
160
+ }
161
+ }
162
+ }
163
+ }
164
+ } finally {
165
+ act(() => reactRoot.unmount());
166
+ fixture.remove();
167
+ delete root.dataset.theme;
168
+ delete root.dataset.preset;
169
+ }
170
+ });
171
+
172
+ test("forced colors preserve scalar indicators and slider keyboard focus", async () => {
173
+ const fixture = document.createElement("div");
174
+ fixture.className = "progress--destructive";
175
+ document.body.append(fixture);
176
+ try {
177
+ await cdp().send("Emulation.setEmulatedMedia", {
178
+ features: [{ name: "forced-colors", value: "active" }],
179
+ });
180
+ const systemColor = document.createElement("div");
181
+ systemColor.style.backgroundColor = "Highlight";
182
+ fixture.append(systemColor);
183
+
184
+ for (const name of ["meter", "progress", "slider"]) {
185
+ const track = document.createElement("div");
186
+ const indicator = document.createElement("div");
187
+ track.className = `${name}__track`;
188
+ track.dataset.slot = `${name}-track`;
189
+ indicator.className = `${name}__indicator`;
190
+ indicator.dataset.slot = `${name}-indicator`;
191
+ track.append(indicator);
192
+ fixture.append(track);
193
+ expect(getComputedStyle(track).outlineStyle, name).toBe("solid");
194
+ expect(getComputedStyle(indicator).backgroundColor, name).toBe(
195
+ getComputedStyle(systemColor).backgroundColor,
196
+ );
197
+ }
198
+
199
+ const thumb = document.createElement("div");
200
+ thumb.className = "slider__thumb";
201
+ const range = document.createElement("input");
202
+ range.type = "range";
203
+ thumb.append(range);
204
+ fixture.append(thumb);
205
+ range.focus();
206
+ expect(range.matches(":focus-visible")).toBe(true);
207
+ expect(getComputedStyle(thumb).outlineStyle).toBe("solid");
208
+ } finally {
209
+ fixture.remove();
210
+ await cdp().send("Emulation.setEmulatedMedia", { features: [] });
211
+ }
212
+ });
@@ -0,0 +1,29 @@
1
+ .employee-app {
2
+ block-size: 100%;
3
+ min-block-size: 0;
4
+ min-inline-size: 0;
5
+ display: grid;
6
+ grid-template-rows: var(--sigvelo-layout-track-fill);
7
+ }
8
+
9
+ .status-screen {
10
+ box-sizing: border-box;
11
+ block-size: 100%;
12
+ min-block-size: 0;
13
+ display: grid;
14
+ align-content: center;
15
+ justify-items: center;
16
+ padding: var(--sigvelo-layout-gutter);
17
+ }
18
+
19
+ .account-sign-in-dialog__control {
20
+ display: grid;
21
+ justify-items: center;
22
+ gap: var(--sigvelo-spacing-2);
23
+ padding-block: var(--sigvelo-spacing-2);
24
+ }
25
+
26
+ /* The shared composer owns this clearance; office-only routes use the base inset. */
27
+ body:has(.employee-app .agent-chat__composer) .sigvelo-floating-prompt {
28
+ --sigvelo-floating-prompt-inset: calc(var(--sigvelo-spacing-16) + var(--sigvelo-spacing-2));
29
+ }
@@ -110,7 +110,7 @@
110
110
 
111
111
  .file-tree__node[data-selected] {
112
112
  background-color: var(--sigvelo-color-primary-bg-subtle);
113
- color: var(--sigvelo-color-primary-text);
113
+ color: var(--sigvelo-color-primary-text-on-subtle);
114
114
  font-weight: var(--sigvelo-font-weight-semibold);
115
115
  }
116
116
 
@@ -157,6 +157,10 @@
157
157
  color: var(--sigvelo-color-primary-text);
158
158
  }
159
159
 
160
+ .file-tree__node[data-selected] :is(.file-tree__icon, .file-tree__chevron) {
161
+ color: inherit;
162
+ }
163
+
160
164
  .file-tree__actions {
161
165
  display: inline-flex;
162
166
  align-items: center;
@@ -38,6 +38,8 @@
38
38
  @import "./context-menu.css" layer(components);
39
39
  @import "./dialog.css" layer(components);
40
40
  @import "./employee-chrome.css" layer(components);
41
+ @import "./employee-app.css" layer(components);
42
+ @import "./manager-work.css" layer(components);
41
43
  @import "./empty-state.css" layer(components);
42
44
  @import "./field.css" layer(components);
43
45
  @import "./fieldset.css" layer(components);
@@ -116,8 +116,8 @@
116
116
  --manager-office-face: 2.625rem;
117
117
 
118
118
  display: grid;
119
- grid-template-columns: minmax(0, 1fr) auto;
120
- grid-template-rows: auto minmax(0, 1fr);
119
+ grid-template-columns: var(--sigvelo-layout-track-fill) auto;
120
+ grid-template-rows: auto var(--sigvelo-layout-track-fill);
121
121
  }
122
122
 
123
123
  .manager-office__sidebar[data-layout="chat"] .manager-office__sidebar-heading {
@@ -211,7 +211,7 @@
211
211
  min-block-size: var(--sigvelo-density-compact-control-height);
212
212
  padding: var(--sigvelo-spacing-1-5) var(--sigvelo-spacing-2);
213
213
  display: grid;
214
- grid-template-columns: minmax(0, 1fr) auto;
214
+ grid-template-columns: var(--sigvelo-layout-track-fill) auto;
215
215
  align-items: center;
216
216
  gap: var(--sigvelo-spacing-2);
217
217
  border: var(--sigvelo-border-style) var(--sigvelo-border-width)
@@ -295,7 +295,7 @@
295
295
  padding-block: 0;
296
296
  padding-inline: var(--sigvelo-spacing-2);
297
297
  display: grid;
298
- grid-template-columns: var(--manager-office-face) minmax(0, 1fr);
298
+ grid-template-columns: var(--manager-office-face) var(--sigvelo-layout-track-fill);
299
299
  align-items: center;
300
300
  gap: var(--sigvelo-spacing-1-5);
301
301
  border-radius: var(--sigvelo-radius-md);
@@ -549,7 +549,7 @@
549
549
  .manager-office__employee-header {
550
550
  min-inline-size: 0;
551
551
  display: grid;
552
- grid-template-columns: auto minmax(0, 1fr);
552
+ grid-template-columns: auto var(--sigvelo-layout-track-fill);
553
553
  align-items: start;
554
554
  gap: var(--sigvelo-spacing-3);
555
555
  padding-block: var(--sigvelo-spacing-1);
@@ -0,0 +1,93 @@
1
+ .responsive-sidebar-shell__sidebar-content:has(> .manager-office__sidebar) {
2
+ block-size: 100%;
3
+ }
4
+
5
+ .manager-work__employee-chats {
6
+ min-block-size: 0;
7
+ block-size: 100%;
8
+ display: flex;
9
+ flex-direction: column;
10
+ overflow: hidden;
11
+ }
12
+
13
+ .manager-work__threads {
14
+ min-block-size: 0;
15
+ flex: 1;
16
+ display: flex;
17
+ flex-direction: column;
18
+ overflow: hidden;
19
+ }
20
+
21
+ .manager-work__threads-picker {
22
+ min-block-size: 0;
23
+ flex: 1;
24
+ }
25
+
26
+ .manager-work__section-label {
27
+ margin: 0;
28
+ padding: var(--sigvelo-spacing-3) var(--sigvelo-spacing-2) var(--sigvelo-spacing-2);
29
+ color: var(--sigvelo-color-text-muted);
30
+ font-size: var(--sigvelo-text-2xs);
31
+ font-weight: var(--sigvelo-font-weight-semibold);
32
+ line-height: var(--sigvelo-text-2xs-leading);
33
+ text-transform: uppercase;
34
+ letter-spacing: var(--sigvelo-tracking-wide);
35
+ }
36
+
37
+ .manager-work__section-header {
38
+ display: flex;
39
+ align-items: center;
40
+ gap: var(--sigvelo-spacing-1);
41
+ padding: var(--sigvelo-spacing-2) var(--sigvelo-spacing-3) var(--sigvelo-spacing-1);
42
+ }
43
+
44
+ .manager-work__section-header > .manager-work__section-label {
45
+ min-inline-size: 0;
46
+ flex: 1;
47
+ padding: 0;
48
+ }
49
+
50
+ .manager-work__section-count {
51
+ display: inline-flex;
52
+ align-items: center;
53
+ gap: var(--sigvelo-spacing-1);
54
+ color: var(--sigvelo-color-danger-text);
55
+ font-size: var(--sigvelo-text-2xs);
56
+ font-weight: var(--sigvelo-font-weight-semibold);
57
+ line-height: var(--sigvelo-text-2xs-leading);
58
+ }
59
+
60
+ .manager-work__section-count svg {
61
+ inline-size: var(--sigvelo-density-compact-control-icon-size);
62
+ block-size: var(--sigvelo-density-compact-control-icon-size);
63
+ }
64
+
65
+ .manager-work__alert-list {
66
+ display: grid;
67
+ gap: 0;
68
+ }
69
+
70
+ .manager-work__handoffs {
71
+ padding: 0 var(--sigvelo-spacing-3) var(--sigvelo-spacing-2);
72
+ }
73
+
74
+ .manager-work__handoffs > .manager-work__section-header {
75
+ padding: var(--sigvelo-spacing-3) 0 var(--sigvelo-spacing-2);
76
+ }
77
+
78
+ @container responsive-sidebar-shell (inline-size <= 56rem) {
79
+ .responsive-sidebar-shell__sidebar:has(.manager-office__sidebar) {
80
+ block-size: min(32rem, calc(100% - var(--sigvelo-spacing-3)));
81
+ transition: none;
82
+ }
83
+
84
+ .manager-work__employee-chats {
85
+ max-block-size: none;
86
+ overflow: visible;
87
+ }
88
+
89
+ .manager-work__threads-picker {
90
+ min-block-size: 0;
91
+ flex: none;
92
+ }
93
+ }
@@ -49,7 +49,7 @@
49
49
  .responsive-sidebar-shell[data-sidebar-toggle-placement="sidebar"]
50
50
  .responsive-sidebar-shell__sidebar {
51
51
  display: grid;
52
- grid-template-rows: auto minmax(0, 1fr);
52
+ grid-template-rows: auto var(--sigvelo-layout-track-fill);
53
53
  }
54
54
 
55
55
  .responsive-sidebar-shell__sidebar-leading {
@@ -1,136 +1,2 @@
1
- //#region src/utils/codex-model-catalog.d.ts
2
- /**
3
- * Codex app-server model catalog types.
4
- *
5
- * Upstream generates these types with ts-rs but does not publish them from
6
- * `@openai/codex-sdk`. Keep the field names and shapes aligned with:
7
- * https://github.com/openai/codex/tree/main/codex-rs/app-server-protocol/schema/typescript
8
- */
9
- /** Canonical user-input modality tags advertised by a Codex model. */
10
- type CodexInputModality = "text" | "image";
11
- /** Codex intentionally keeps this open so new effort levels do not break clients. */
12
- type CodexReasoningEffort = string;
13
- type CodexReasoningEffortOption = {
14
- reasoningEffort: CodexReasoningEffort;
15
- description: string;
16
- };
17
- type CodexModelServiceTier = {
18
- id: string;
19
- name: string;
20
- description: string;
21
- };
22
- type CodexModelUpgradeInfo = {
23
- model: string;
24
- upgradeCopy: string | null;
25
- modelLink: string | null;
26
- migrationMarkdown: string | null;
27
- };
28
- type CodexModelAvailabilityNux = {
29
- message: string;
30
- };
31
- /** Whole upstream `v2/Model` response shape from Codex app-server `model/list`. */
32
- type CodexModel = {
33
- id: string;
34
- model: string;
35
- upgrade: string | null;
36
- upgradeInfo: CodexModelUpgradeInfo | null;
37
- availabilityNux: CodexModelAvailabilityNux | null;
38
- displayName: string;
39
- description: string;
40
- hidden: boolean;
41
- supportedReasoningEfforts: CodexReasoningEffortOption[];
42
- defaultReasoningEffort: CodexReasoningEffort;
43
- inputModalities: CodexInputModality[];
44
- supportsPersonality: boolean; /** @deprecated Upstream Codex uses `serviceTiers` for structured tier metadata. */
45
- additionalSpeedTiers: string[];
46
- serviceTiers: CodexModelServiceTier[];
47
- defaultServiceTier: string | null;
48
- isDefault: boolean;
49
- };
50
- /** Whole upstream `v2/ModelListResponse` shape. */
51
- type CodexModelListResponse = {
52
- data: CodexModel[]; /** Opaque cursor for the next `model/list` request. */
53
- nextCursor: string | null;
54
- };
55
- /** Current visible model ids in upstream Codex's checked-in catalog. */
56
- declare const CODEX_MODEL_IDS: readonly ["gpt-5.6-sol", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-5.5", "gpt-5.4", "gpt-5.4-mini", "gpt-5.2"];
57
- type CodexModelId = (typeof CODEX_MODEL_IDS)[number];
58
- /** Preserves literal ids and capability values for checked-in Codex catalogs. */
59
- declare function defineCodexModels<const Models extends readonly CodexModel[]>(models: Models): Models;
60
- /**
61
- * Checked-in snapshot of upstream Codex's visible model catalog
62
- * (`codex-rs/models-manager/models.json`). Display data for hosts without a
63
- * live `model/list`; runtime account catalogs remain authoritative because
64
- * availability differs by account and rollout.
65
- */
66
- declare const CHECKED_IN_CODEX_MODELS: readonly [{
67
- readonly id: "gpt-5.6-sol";
68
- readonly model: "gpt-5.6-sol";
69
- readonly displayName: "GPT-5.6-Sol";
70
- readonly description: "Fast agentic coding model for responsive everyday work.";
71
- readonly supportedReasoningEfforts: [...CodexReasoningEffortOption[], CodexReasoningEffortOption];
72
- readonly defaultReasoningEffort: "low";
73
- readonly isDefault: false;
74
- readonly upgrade: null;
75
- readonly upgradeInfo: null;
76
- readonly availabilityNux: null;
77
- readonly hidden: boolean;
78
- readonly inputModalities: ("text" | "image")[];
79
- readonly supportsPersonality: boolean;
80
- readonly additionalSpeedTiers: never[];
81
- readonly serviceTiers: never[];
82
- readonly defaultServiceTier: null;
83
- }, {
84
- readonly id: "gpt-5.6-terra";
85
- readonly model: "gpt-5.6-terra";
86
- readonly displayName: "GPT-5.6-Terra";
87
- readonly description: "Balanced agentic coding model for everyday work.";
88
- readonly supportedReasoningEfforts: [...CodexReasoningEffortOption[], CodexReasoningEffortOption];
89
- readonly defaultReasoningEffort: "medium";
90
- readonly isDefault: true;
91
- readonly upgrade: null;
92
- readonly upgradeInfo: null;
93
- readonly availabilityNux: null;
94
- readonly hidden: boolean;
95
- readonly inputModalities: ("text" | "image")[];
96
- readonly supportsPersonality: boolean;
97
- readonly additionalSpeedTiers: never[];
98
- readonly serviceTiers: never[];
99
- readonly defaultServiceTier: null;
100
- }, {
101
- readonly id: "gpt-5.6-luna";
102
- readonly model: "gpt-5.6-luna";
103
- readonly displayName: "GPT-5.6-Luna";
104
- readonly description: "Agentic coding model tuned for deliberate work.";
105
- readonly supportedReasoningEfforts: [...CodexReasoningEffortOption[], CodexReasoningEffortOption];
106
- readonly defaultReasoningEffort: "medium";
107
- readonly isDefault: false;
108
- readonly upgrade: null;
109
- readonly upgradeInfo: null;
110
- readonly availabilityNux: null;
111
- readonly hidden: boolean;
112
- readonly inputModalities: ("text" | "image")[];
113
- readonly supportsPersonality: boolean;
114
- readonly additionalSpeedTiers: never[];
115
- readonly serviceTiers: never[];
116
- readonly defaultServiceTier: null;
117
- }, {
118
- readonly id: "gpt-5.5";
119
- readonly model: "gpt-5.5";
120
- readonly displayName: "GPT-5.5";
121
- readonly description: "Previous-generation agentic coding model.";
122
- readonly supportedReasoningEfforts: CodexReasoningEffortOption[];
123
- readonly defaultReasoningEffort: "medium";
124
- readonly isDefault: false;
125
- readonly upgrade: null;
126
- readonly upgradeInfo: null;
127
- readonly availabilityNux: null;
128
- readonly hidden: boolean;
129
- readonly inputModalities: ("text" | "image")[];
130
- readonly supportsPersonality: boolean;
131
- readonly additionalSpeedTiers: never[];
132
- readonly serviceTiers: never[];
133
- readonly defaultServiceTier: null;
134
- }];
135
- //#endregion
1
+ import { a as CodexModelAvailabilityNux, c as CodexModelServiceTier, d as CodexReasoningEffortOption, f as defineCodexModels, i as CodexModel, l as CodexModelUpgradeInfo, n as CODEX_MODEL_IDS, o as CodexModelId, r as CodexInputModality, s as CodexModelListResponse, t as CHECKED_IN_CODEX_MODELS, u as CodexReasoningEffort } from "../codex-model-catalog-BBN_gWcc.js";
136
2
  export { CHECKED_IN_CODEX_MODELS, CODEX_MODEL_IDS, CodexInputModality, CodexModel, CodexModelAvailabilityNux, CodexModelId, CodexModelListResponse, CodexModelServiceTier, CodexModelUpgradeInfo, CodexReasoningEffort, CodexReasoningEffortOption, defineCodexModels };
@@ -1,6 +1,7 @@
1
1
  //#region src/utils/codex-model-catalog.ts
2
- /** Current visible model ids in upstream Codex's checked-in catalog. */
2
+ /** Known visible model ids from upstream Codex and its desktop catalog. */
3
3
  const CODEX_MODEL_IDS = [
4
+ "gpt-6-astra",
4
5
  "gpt-5.6-sol",
5
6
  "gpt-5.6-terra",
6
7
  "gpt-5.6-luna",
@@ -47,12 +48,28 @@ const checkedInModelMetadata = {
47
48
  defaultServiceTier: null
48
49
  };
49
50
  /**
50
- * Checked-in snapshot of upstream Codex's visible model catalog
51
- * (`codex-rs/models-manager/models.json`). Display data for hosts without a
52
- * live `model/list`; runtime account catalogs remain authoritative because
53
- * availability differs by account and rollout.
51
+ * Checked-in snapshot of Codex's upstream and desktop model catalogs.
52
+ * Display data for hosts without a live `model/list`; runtime account catalogs
53
+ * remain authoritative because availability differs by account and rollout.
54
54
  */
55
55
  const CHECKED_IN_CODEX_MODELS = defineCodexModels([
56
+ {
57
+ ...checkedInModelMetadata,
58
+ id: "gpt-6-astra",
59
+ model: "gpt-6-astra",
60
+ displayName: "GPT-6 Astra",
61
+ description: "Our most capable model for complex, demanding work.",
62
+ supportedReasoningEfforts: [
63
+ ...standardReasoningEfforts,
64
+ maxReasoningEffort,
65
+ {
66
+ reasoningEffort: "ultra",
67
+ description: "Maximum reasoning with automatic task delegation"
68
+ }
69
+ ],
70
+ defaultReasoningEffort: "medium",
71
+ isDefault: false
72
+ },
56
73
  {
57
74
  ...checkedInModelMetadata,
58
75
  id: "gpt-5.6-sol",