zidane-ui 9.1.4 → 9.1.6

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 (251) hide show
  1. package/dist/adapters/server-extensions-host.js +1 -1
  2. package/dist/adapters/server-host.js +2 -1
  3. package/dist/adapters/server-machines-host.js +1 -1
  4. package/dist/adapters/server-session-host.js +87 -13
  5. package/dist/adapters/server-settings-host.js +1 -1
  6. package/dist/appearance/AppearanceProvider.js +2 -2
  7. package/dist/appearance/headless/index.js +1 -1
  8. package/dist/approvals/headless/index.js +2 -2
  9. package/dist/chat/HostTranscript.d.ts +5 -1
  10. package/dist/chat/HostTranscript.js +16 -4
  11. package/dist/chat/RunEstimateChip.d.ts +5 -3
  12. package/dist/chat/RunEstimateChip.js +33 -3
  13. package/dist/chat/Transcript.js +1 -1
  14. package/dist/chat/composer/ConversationBadges.js +16 -10
  15. package/dist/chat/composer/composer-bus.d.ts +2 -2
  16. package/dist/chat/composer/composer-bus.js +2 -2
  17. package/dist/chat/composer/use-composer-stores.js +1 -1
  18. package/dist/chat/composer/use-run-meter.js +1 -1
  19. package/dist/chat/headless/composer/conversation-badges.d.ts +8 -3
  20. package/dist/chat/headless/composer/conversation-badges.js +26 -11
  21. package/dist/chat/headless/composer/index.js +2 -2
  22. package/dist/chat/headless/composer/labels-chrome.d.ts +3 -1
  23. package/dist/chat/headless/composer/labels-chrome.js +3 -1
  24. package/dist/chat/headless/index.d.ts +6 -3
  25. package/dist/chat/headless/index.js +16 -13
  26. package/dist/chat/headless/labels.d.ts +54 -1
  27. package/dist/chat/headless/labels.js +62 -2
  28. package/dist/chat/headless/secrets.d.ts +32 -0
  29. package/dist/chat/headless/secrets.js +43 -0
  30. package/dist/chat/headless/session-list.d.ts +45 -0
  31. package/dist/chat/headless/sidebar/estimates.js +13 -1
  32. package/dist/chat/headless/sidebar/history.d.ts +71 -0
  33. package/dist/chat/headless/sidebar/history.js +174 -0
  34. package/dist/chat/headless/sidebar/index.d.ts +3 -2
  35. package/dist/chat/headless/sidebar/index.js +2 -1
  36. package/dist/chat/headless/sidebar/labels.d.ts +50 -0
  37. package/dist/chat/headless/sidebar/labels.js +1 -0
  38. package/dist/chat/headless/sidebar/query.d.ts +2 -2
  39. package/dist/chat/headless/sidebar/query.js +6 -3
  40. package/dist/chat/headless/sidebar/types.d.ts +7 -1
  41. package/dist/chat/headless/sidebar/view.js +2 -0
  42. package/dist/chat/headless/transcript/auth-failure.d.ts +67 -0
  43. package/dist/chat/headless/transcript/auth-failure.js +87 -0
  44. package/dist/chat/headless/transcript/index.d.ts +2 -1
  45. package/dist/chat/headless/transcript/index.js +2 -1
  46. package/dist/chat/headless/transcript/nesting.d.ts +3 -3
  47. package/dist/chat/headless/transcript/nesting.js +12 -4
  48. package/dist/chat/index.d.ts +4 -2
  49. package/dist/chat/index.js +3 -1
  50. package/dist/chat/interactions/InboxPanel.d.ts +6 -2
  51. package/dist/chat/interactions/InboxPanel.js +82 -44
  52. package/dist/chat/interactions/PlanCard.d.ts +2 -2
  53. package/dist/chat/interactions/PlanCard.js +1 -1
  54. package/dist/chat/interactions/QuestionField.d.ts +8 -3
  55. package/dist/chat/interactions/QuestionField.js +89 -8
  56. package/dist/chat/interactions/QuestionForm.d.ts +3 -1
  57. package/dist/chat/interactions/QuestionForm.js +48 -10
  58. package/dist/chat/interactions/SecretInput.d.ts +32 -0
  59. package/dist/chat/interactions/SecretInput.js +72 -0
  60. package/dist/chat/interactions/card-ui.d.ts +5 -3
  61. package/dist/chat/interactions/card-ui.js +5 -3
  62. package/dist/chat/interactions/index.d.ts +2 -1
  63. package/dist/chat/interactions/index.js +2 -1
  64. package/dist/chat/sidebar/SessionSidebar.js +2 -0
  65. package/dist/chat/sidebar/SidebarFilterMenu.d.ts +7 -2
  66. package/dist/chat/sidebar/SidebarFilterMenu.js +26 -2
  67. package/dist/chat/sidebar/SidebarSessionRow.d.ts +3 -1
  68. package/dist/chat/sidebar/SidebarSessionRow.js +8 -3
  69. package/dist/chat/sidebar/sidebar-live.js +8 -4
  70. package/dist/chat/transcript/AuthFailureCard.d.ts +34 -0
  71. package/dist/chat/transcript/AuthFailureCard.js +358 -0
  72. package/dist/chat/transcript/InteractionToolBody.js +12 -2
  73. package/dist/chat/transcript/actions.d.ts +24 -1
  74. package/dist/chat/transcript/index.d.ts +3 -2
  75. package/dist/chat/transcript/index.js +2 -1
  76. package/dist/chat/transcript/notices.d.ts +2 -1
  77. package/dist/chat/transcript/notices.js +13 -1
  78. package/dist/chat/transcript/script-input.d.ts +1 -1
  79. package/dist/chat/transcript/shell-block.js +1 -1
  80. package/dist/components/HowItWorks.d.ts +8 -1
  81. package/dist/components/HowItWorks.js +2 -2
  82. package/dist/components/RowActionsMenu.d.ts +6 -1
  83. package/dist/components/RowActionsMenu.js +4 -0
  84. package/dist/core.css +24 -0
  85. package/dist/dist/{index-WlE93Q6d.d.ts → index-DqCio7Nd.d.ts} +36 -3
  86. package/dist/dist/index-f-XWIoYo.d.ts +1 -0
  87. package/dist/dist/index.d.ts +6 -0
  88. package/dist/dist/sandbox-B4OW6oNx.d.ts +2 -0
  89. package/dist/dist/timeout-B5pO5I5a.d.ts +30 -0
  90. package/dist/extensions/ExtensionSettingsPage.js +1 -1
  91. package/dist/extensions/ExtensionSettingsSidebar.js +1 -1
  92. package/dist/extensions/headless/fixture-host.js +1 -1
  93. package/dist/extensions/headless/index.js +4 -4
  94. package/dist/extensions/hooks.js +1 -1
  95. package/dist/files/DiffsTab.js +1 -1
  96. package/dist/files/EditorColumn.js +1 -1
  97. package/dist/files/MediaDiff.js +1 -1
  98. package/dist/files/SearchPanel.js +121 -53
  99. package/dist/files/headless/name-match.js +29 -14
  100. package/dist/files/useEntryActions.js +1 -1
  101. package/dist/files/useOpenFiles.js +1 -1
  102. package/dist/git/WherePicker.js +2 -2
  103. package/dist/git/headless/environment.d.ts +6 -1
  104. package/dist/git/headless/environment.js +5 -2
  105. package/dist/git/headless/labels.d.ts +2 -0
  106. package/dist/git/headless/labels.js +2 -0
  107. package/dist/git/index.d.ts +2 -1
  108. package/dist/git/index.js +2 -1
  109. package/dist/git/useStartFromPanel.d.ts +22 -0
  110. package/dist/git/useStartFromPanel.js +91 -0
  111. package/dist/keybindings/KeyCommands.js +1 -1
  112. package/dist/keybindings/KeybindingsProvider.js +1 -1
  113. package/dist/keybindings/headless/catalog.d.ts +1 -1
  114. package/dist/keybindings/headless/catalog.js +14 -2
  115. package/dist/keybindings/headless/index.js +2 -2
  116. package/dist/keybindings/headless/key-scope.d.ts +4 -2
  117. package/dist/keybindings/headless/key-scope.js +17 -2
  118. package/dist/keybindings/headless/overrides.js +1 -1
  119. package/dist/machines/HostSyncPanel.js +1 -1
  120. package/dist/machines/SyncOutcomeBadge.js +1 -1
  121. package/dist/machines/headless/index.js +1 -1
  122. package/dist/onboarding/demos/features.d.ts +9 -1
  123. package/dist/onboarding/demos/features.js +107 -2
  124. package/dist/onboarding/demos/how-it-works.d.ts +5 -1
  125. package/dist/onboarding/demos/how-it-works.js +120 -2
  126. package/dist/onboarding/demos/index.js +1 -1
  127. package/dist/onboarding/headless/labels.d.ts +17 -0
  128. package/dist/onboarding/headless/labels.js +17 -0
  129. package/dist/onboarding/index.js +4 -4
  130. package/dist/onboarding/marks.d.ts +1 -2
  131. package/dist/onboarding/marks.js +4 -12
  132. package/dist/onboarding/steps/ConnectorsStep.js +1 -1
  133. package/dist/onboarding/steps/ReadyStep.js +1 -1
  134. package/dist/onboarding/steps/SkillsStep.js +1 -1
  135. package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
  136. package/dist/onboarding/tutorials.d.ts +3 -1
  137. package/dist/onboarding/tutorials.js +2 -1
  138. package/dist/palette/app-sources.js +1 -1
  139. package/dist/palette/headless/app-sources.js +10 -0
  140. package/dist/palette/headless/labels.js +2 -0
  141. package/dist/session/ArtifactsPanel.js +1 -1
  142. package/dist/session/PanelAttention.d.ts +14 -6
  143. package/dist/session/PanelAttention.js +35 -24
  144. package/dist/session/PlanTracker.d.ts +54 -0
  145. package/dist/session/PlanTracker.js +413 -0
  146. package/dist/session/ProjectHome.d.ts +15 -2
  147. package/dist/session/ProjectHome.js +158 -85
  148. package/dist/session/RemindersPanel.d.ts +25 -0
  149. package/dist/session/RemindersPanel.js +526 -0
  150. package/dist/session/SecretsPanel.d.ts +19 -0
  151. package/dist/session/SecretsPanel.js +241 -0
  152. package/dist/session/SessionProvider.d.ts +26 -5
  153. package/dist/session/SessionProvider.js +51 -6
  154. package/dist/session/StepStatusIcon.d.ts +24 -0
  155. package/dist/session/StepStatusIcon.js +50 -0
  156. package/dist/session/TodoList.d.ts +4 -3
  157. package/dist/session/TodoList.js +6 -5
  158. package/dist/session/headless/fixture-host.d.ts +32 -22
  159. package/dist/session/headless/fixture-host.js +86 -51
  160. package/dist/session/headless/fixture-plans.d.ts +57 -0
  161. package/dist/session/headless/fixture-plans.js +141 -0
  162. package/dist/session/headless/fixture-schedules.d.ts +49 -0
  163. package/dist/session/headless/fixture-schedules.js +133 -0
  164. package/dist/session/headless/home-layout.d.ts +10 -2
  165. package/dist/session/headless/home-layout.js +7 -2
  166. package/dist/session/headless/host.d.ts +85 -13
  167. package/dist/session/headless/index.d.ts +5 -3
  168. package/dist/session/headless/index.js +5 -3
  169. package/dist/session/headless/labels.d.ts +95 -12
  170. package/dist/session/headless/labels.js +67 -18
  171. package/dist/session/headless/plans.d.ts +53 -0
  172. package/dist/session/headless/plans.js +78 -0
  173. package/dist/session/headless/reminder-labels.d.ts +63 -0
  174. package/dist/session/headless/reminder-labels.js +84 -0
  175. package/dist/session/headless/schedules.d.ts +93 -0
  176. package/dist/session/headless/schedules.js +190 -0
  177. package/dist/session/headless/secrets.d.ts +28 -0
  178. package/dist/session/headless/secrets.js +48 -0
  179. package/dist/session/index.d.ts +7 -5
  180. package/dist/session/index.js +6 -4
  181. package/dist/session/testing/contract.d.ts +18 -5
  182. package/dist/session/testing/contract.js +351 -43
  183. package/dist/session/testing/index.d.ts +4 -2
  184. package/dist/session/testing/index.js +4 -2
  185. package/dist/settings/headless/catalog.js +17 -1
  186. package/dist/settings/headless/index.d.ts +2 -2
  187. package/dist/settings/headless/index.js +3 -3
  188. package/dist/settings/headless/labels.d.ts +0 -2
  189. package/dist/settings/headless/labels.js +0 -2
  190. package/dist/settings/headless/layout.js +7 -1
  191. package/dist/settings/headless/providers.d.ts +17 -1
  192. package/dist/settings/headless/providers.js +19 -1
  193. package/dist/settings/headless/search.d.ts +1 -1
  194. package/dist/settings/rows.d.ts +1 -1
  195. package/dist/settings/rows.js +2 -2
  196. package/dist/settings/sections/appearance/AppearanceSection.js +2 -2
  197. package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
  198. package/dist/settings/sections/editor/EditorSection.js +1 -1
  199. package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
  200. package/dist/settings/sections/extensions/ChangeOriginDialog.js +1 -1
  201. package/dist/settings/sections/extensions/CreateExtensionDialog.js +1 -1
  202. package/dist/settings/sections/extensions/ExtensionsSection.js +1 -1
  203. package/dist/settings/sections/host-catalog/HostCatalogSection.js +1 -1
  204. package/dist/settings/sections/instructions/InstructionsSection.js +1 -1
  205. package/dist/settings/sections/keybindings/labels.d.ts +2 -0
  206. package/dist/settings/sections/keybindings/labels.js +2 -0
  207. package/dist/settings/sections/keybindings/rows.js +8 -0
  208. package/dist/settings/sections/mcp/McpSection.js +1 -1
  209. package/dist/settings/sections/mcp/McpServerRow.js +1 -1
  210. package/dist/settings/sections/models/ModelRows.js +2 -2
  211. package/dist/settings/sections/providers/ProvidersSection.js +209 -201
  212. package/dist/settings/sections/providers/ServerProvidersSection.js +1 -1
  213. package/dist/settings/sections/shared/catalog.js +1 -1
  214. package/dist/settings/sections/skills/SkillList.js +1 -1
  215. package/dist/settings/sections/skills/SkillsSection.js +2 -2
  216. package/dist/styles.css +59 -1
  217. package/dist/terminal/HostTerminalSurface.js +2 -2
  218. package/dist/workspace/PanelContentView.d.ts +22 -4
  219. package/dist/workspace/PanelContentView.js +112 -16
  220. package/dist/workspace/PanelGlyph.d.ts +21 -0
  221. package/dist/workspace/PanelGlyph.js +33 -0
  222. package/dist/workspace/PanelHome.js +5 -3
  223. package/dist/workspace/PanelStrip.js +11 -4
  224. package/dist/workspace/PanelToolbar.d.ts +32 -0
  225. package/dist/workspace/PanelToolbar.js +194 -0
  226. package/dist/workspace/WorkspaceProvider.d.ts +3 -1
  227. package/dist/workspace/WorkspaceProvider.js +6 -2
  228. package/dist/workspace/extension-tabs.js +5 -2
  229. package/dist/workspace/headless/host.d.ts +4 -0
  230. package/dist/workspace/headless/index.d.ts +3 -1
  231. package/dist/workspace/headless/index.js +4 -2
  232. package/dist/workspace/headless/labels.d.ts +10 -0
  233. package/dist/workspace/headless/labels.js +11 -1
  234. package/dist/workspace/headless/pages.d.ts +15 -0
  235. package/dist/workspace/headless/pages.js +49 -0
  236. package/dist/workspace/headless/tab-mark.d.ts +14 -0
  237. package/dist/workspace/headless/tab-mark.js +27 -0
  238. package/dist/workspace/headless/view.d.ts +7 -1
  239. package/dist/workspace/index.d.ts +3 -2
  240. package/dist/workspace/index.js +3 -2
  241. package/dist/workspace/testing/index.js +6 -0
  242. package/dist/workspace/workspace-key-commands.js +3 -3
  243. package/package.json +2 -2
  244. package/src/styles/motion.css +13 -0
  245. package/src/styles/onboarding.css +0 -1
  246. package/src/styles/primitives.css +10 -0
  247. package/src/styles/workspace.css +17 -0
  248. package/dist/session/TodosPanel.d.ts +0 -19
  249. package/dist/session/TodosPanel.js +0 -251
  250. package/dist/session/headless/todos.d.ts +0 -22
  251. package/dist/session/headless/todos.js +0 -38
@@ -3,17 +3,17 @@ import { BTN_DANGER, BTN_PRIMARY, BTN_SECONDARY } from "../../../components/butt
3
3
  import { MetaChip } from "../../../components/Form.js";
4
4
  import { BrowserSignIn } from "../../../components/BrowserSignIn.js";
5
5
  import { constant, useReadable } from "../../../chat/headless/store.js";
6
- import { useSettingsHost } from "../../SettingsProvider.js";
7
6
  import { toSettingsError } from "../../headless/host.js";
8
- import { SettingsPanel, SettingsPanelBody } from "../../section.js";
9
- import { useSectionLabels } from "../use-section-labels.js";
7
+ import { useSettingsHost } from "../../SettingsProvider.js";
10
8
  import { useSignIn } from "../../../onboarding/useSignIn.js";
11
- import { hasCredentialChoice } from "../../headless/providers.js";
9
+ import { SettingFocus, SettingFocusContext, SettingsPanel, SettingsPanelBody } from "../../section.js";
10
+ import { useSectionLabels } from "../use-section-labels.js";
11
+ import { accountsFocusId, accountsKeyFocusId, hasCredentialChoice } from "../../headless/providers.js";
12
12
  import { useSettingsResource } from "../shared/catalog.js";
13
13
  import { CredentialSources } from "./CredentialSources.js";
14
14
  import { DEFAULT_ACCOUNTS_SECTION_LABELS } from "./labels.js";
15
15
  import { jsx, jsxs } from "react/jsx-runtime";
16
- import { useMemo, useRef, useState } from "react";
16
+ import { useContext, useMemo, useRef, useState } from "react";
17
17
  import { providerBrand } from "zidane/chat/pure";
18
18
  //#region src/settings/sections/providers/ProvidersSection.tsx
19
19
  /**
@@ -74,9 +74,11 @@ function ProvidersSection({ cwd, intro, confirm = YES, className, style }) {
74
74
  });
75
75
  }
76
76
  function ProviderRow({ status, cwd, host, writable, labels: l, confirm }) {
77
- const [editing, setEditing] = useState(false);
77
+ const { focusKey } = useContext(SettingFocusContext);
78
+ const keyFocus = accountsKeyFocusId(status.key);
79
+ const [editing, setEditing] = useState(() => focusKey === keyFocus && writable && (status.customFields?.length ? host.configure !== void 0 : host.setApiKey !== void 0));
78
80
  const [value, setValue] = useState("");
79
- const [fieldValues, setFieldValues] = useState({});
81
+ const [fieldValues, setFieldValues] = useState(() => ({ ...status.configuredFields }));
80
82
  const [busy, setBusy] = useState(null);
81
83
  const [rowError, setRowError] = useState(null);
82
84
  const [namingAccount, setNamingAccount] = useState(false);
@@ -149,203 +151,209 @@ function ProviderRow({ status, cwd, host, writable, labels: l, confirm }) {
149
151
  setBusy(null);
150
152
  }
151
153
  };
152
- return /* @__PURE__ */ jsxs("li", {
154
+ return /* @__PURE__ */ jsx("li", {
153
155
  className: "zg-raised border rounded-zg-md p-3",
154
- children: [
155
- /* @__PURE__ */ jsxs("div", {
156
- className: "flex items-start gap-3",
157
- children: [
158
- /* @__PURE__ */ jsx(BrandMark, {
159
- brand: providerBrand(status.key),
160
- label: status.label,
161
- className: "shrink-0"
162
- }),
163
- /* @__PURE__ */ jsxs("div", {
164
- className: "flex-1 min-w-0",
165
- children: [/* @__PURE__ */ jsxs("div", {
166
- className: "flex items-center gap-1.5 flex-wrap",
167
- children: [
168
- /* @__PURE__ */ jsx("div", {
169
- className: "text-sm font-medium text-[var(--zg-text)] mr-0.5",
170
- children: status.label
171
- }),
172
- /* @__PURE__ */ jsx("span", {
173
- className: `inline-block w-2 h-2 rounded-full shrink-0 mr-0.5 ${available ? "bg-zg-success-dot" : "bg-[var(--zg-border-strong)]"}`,
174
- role: "img",
175
- "aria-label": available ? l.accountsAuthenticated : l.accountsNotAuthenticated,
176
- title: available ? l.accountsAuthenticated : l.accountsNotAuthenticated
177
- }),
178
- hasConfiguration && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsConfigured }),
179
- hasApiKey && !hasConfiguration && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsApiKeyChip }),
180
- hasOAuth && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsOAuthChip })
181
- ]
182
- }), description && /* @__PURE__ */ jsx("div", {
183
- className: "text-xs text-[var(--zg-text-muted)] mt-0.5",
184
- children: description
156
+ children: /* @__PURE__ */ jsxs(SettingFocus, {
157
+ id: accountsFocusId(status.key),
158
+ children: [
159
+ /* @__PURE__ */ jsxs("div", {
160
+ className: "flex items-start gap-3",
161
+ children: [
162
+ /* @__PURE__ */ jsx(BrandMark, {
163
+ brand: providerBrand(status.key),
164
+ label: status.label,
165
+ className: "shrink-0"
166
+ }),
167
+ /* @__PURE__ */ jsxs("div", {
168
+ className: "flex-1 min-w-0",
169
+ children: [/* @__PURE__ */ jsxs("div", {
170
+ className: "flex items-center gap-1.5 flex-wrap",
171
+ children: [
172
+ /* @__PURE__ */ jsx("div", {
173
+ className: "text-sm font-medium text-[var(--zg-text)] mr-0.5",
174
+ children: status.label
175
+ }),
176
+ /* @__PURE__ */ jsx("span", {
177
+ className: `inline-block w-2 h-2 rounded-full shrink-0 mr-0.5 ${available ? "bg-zg-success-dot" : "bg-[var(--zg-border-strong)]"}`,
178
+ role: "img",
179
+ "aria-label": available ? l.accountsAuthenticated : l.accountsNotAuthenticated,
180
+ title: available ? l.accountsAuthenticated : l.accountsNotAuthenticated
181
+ }),
182
+ hasConfiguration && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsConfigured }),
183
+ hasApiKey && !hasConfiguration && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsApiKeyChip }),
184
+ hasOAuth && /* @__PURE__ */ jsx(MetaChip, { children: l.accountsOAuthChip })
185
+ ]
186
+ }), description && /* @__PURE__ */ jsx("div", {
187
+ className: "text-xs text-[var(--zg-text-muted)] mt-0.5",
188
+ children: description
189
+ })]
190
+ }),
191
+ !editing && !namingAccount && canSignIn && !flow && /* @__PURE__ */ jsx("button", {
192
+ type: "button",
193
+ onClick: () => {
194
+ if (hasOAuth) {
195
+ setRowError(null);
196
+ setAccountName("");
197
+ setNamingAccount(true);
198
+ } else startSignIn();
199
+ },
200
+ className: BTN_PRIMARY,
201
+ children: hasOAuth ? l.accountsAddAccount : l.accountsSignInWith(signInWith)
202
+ }),
203
+ !editing && canEdit && /* @__PURE__ */ jsx("button", {
204
+ type: "button",
205
+ onClick: startEditing,
206
+ className: BTN_SECONDARY,
207
+ children: hasCustomFields ? available ? l.accountsEditConfig : l.accountsConfigure : hasApiKey ? l.accountsReplaceKey : l.accountsSetKey
208
+ }),
209
+ !editing && available && canClear && /* @__PURE__ */ jsx("button", {
210
+ type: "button",
211
+ onClick: clear,
212
+ disabled: busy === "clearing",
213
+ className: BTN_DANGER,
214
+ children: busy === "clearing" ? l.accountsClearing : l.accountsClear
215
+ })
216
+ ]
217
+ }),
218
+ flow && /* @__PURE__ */ jsx(BrowserSignIn, {
219
+ className: "mt-3",
220
+ state: flow,
221
+ service: signInWith,
222
+ onCancel: signIn.cancel,
223
+ onRetry: () => startSignIn(lastOptions.current),
224
+ ...signIn.submit ? { onSubmit: signIn.submit } : {}
225
+ }),
226
+ namingAccount && !flow && /* @__PURE__ */ jsxs("div", {
227
+ className: "mt-3 flex items-center gap-2",
228
+ children: [
229
+ /* @__PURE__ */ jsx("input", {
230
+ autoFocus: true,
231
+ type: "text",
232
+ placeholder: l.accountsAccountNamePlaceholder,
233
+ value: accountName,
234
+ onChange: (e) => setAccountName(e.target.value),
235
+ onKeyDown: (e) => {
236
+ if (e.key === "Enter") startNamedAccount();
237
+ if (e.key === "Escape") setNamingAccount(false);
238
+ },
239
+ "aria-label": l.accountsAccountName,
240
+ className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled flex-1 !w-auto`
241
+ }),
242
+ /* @__PURE__ */ jsx("button", {
243
+ type: "button",
244
+ disabled: !trimmedAccountName,
245
+ onClick: startNamedAccount,
246
+ className: BTN_PRIMARY,
247
+ children: l.accountsSignIn
248
+ }),
249
+ /* @__PURE__ */ jsx("button", {
250
+ type: "button",
251
+ onClick: () => setNamingAccount(false),
252
+ className: BTN_SECONDARY,
253
+ children: l.accountsCancel
254
+ })
255
+ ]
256
+ }),
257
+ editing && /* @__PURE__ */ jsx(SettingFocus, {
258
+ id: keyFocus,
259
+ children: hasCustomFields ? /* @__PURE__ */ jsxs("div", {
260
+ className: "mt-3 space-y-3",
261
+ children: [/* @__PURE__ */ jsx("div", {
262
+ className: "grid grid-cols-1 md:grid-cols-2 gap-2",
263
+ children: customFields.map((field, index) => {
264
+ const valueForField = fieldValues[field.key] ?? "";
265
+ const placeholder = field.secret && available ? l.accountsKeepSecret : field.placeholder || keyPlaceholder;
266
+ return /* @__PURE__ */ jsxs("label", {
267
+ className: "flex flex-col gap-1",
268
+ children: [
269
+ /* @__PURE__ */ jsxs("span", {
270
+ className: "text-xs text-[var(--zg-text-muted)]",
271
+ children: [field.label, field.required ? l.accountsRequired : ""]
272
+ }),
273
+ /* @__PURE__ */ jsx("input", {
274
+ autoFocus: index === 0,
275
+ type: field.secret ? "password" : "text",
276
+ placeholder,
277
+ value: valueForField,
278
+ onChange: (e) => setFieldValues((prev) => ({
279
+ ...prev,
280
+ [field.key]: e.target.value
281
+ })),
282
+ onKeyDown: (e) => {
283
+ if ((e.metaKey || e.ctrlKey) && e.key === "Enter") save();
284
+ if (e.key === "Escape") cancelEditing();
285
+ },
286
+ className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled font-mono`
287
+ }),
288
+ field.hint && /* @__PURE__ */ jsx("span", {
289
+ className: "text-zg-meta leading-snug text-[var(--zg-text-muted)]",
290
+ children: field.hint
291
+ })
292
+ ]
293
+ }, field.key);
294
+ })
295
+ }), /* @__PURE__ */ jsxs("div", {
296
+ className: "flex items-center gap-2",
297
+ children: [/* @__PURE__ */ jsx("button", {
298
+ type: "button",
299
+ disabled: !requiredCustomFieldsSatisfied || busy === "setting",
300
+ onClick: save,
301
+ className: BTN_PRIMARY,
302
+ children: busy === "setting" ? l.accountsSaving : l.accountsSaveConfig
303
+ }), /* @__PURE__ */ jsx("button", {
304
+ type: "button",
305
+ onClick: cancelEditing,
306
+ className: BTN_SECONDARY,
307
+ children: l.accountsCancel
308
+ })]
185
309
  })]
186
- }),
187
- !editing && !namingAccount && canSignIn && !flow && /* @__PURE__ */ jsx("button", {
188
- type: "button",
189
- onClick: () => {
190
- if (hasOAuth) {
191
- setRowError(null);
192
- setAccountName("");
193
- setNamingAccount(true);
194
- } else startSignIn();
195
- },
196
- className: BTN_PRIMARY,
197
- children: hasOAuth ? l.accountsAddAccount : l.accountsSignInWith(signInWith)
198
- }),
199
- !editing && canEdit && /* @__PURE__ */ jsx("button", {
200
- type: "button",
201
- onClick: startEditing,
202
- className: BTN_SECONDARY,
203
- children: hasCustomFields ? available ? l.accountsEditConfig : l.accountsConfigure : hasApiKey ? l.accountsReplaceKey : l.accountsSetKey
204
- }),
205
- !editing && available && canClear && /* @__PURE__ */ jsx("button", {
206
- type: "button",
207
- onClick: clear,
208
- disabled: busy === "clearing",
209
- className: BTN_DANGER,
210
- children: busy === "clearing" ? l.accountsClearing : l.accountsClear
211
- })
212
- ]
213
- }),
214
- flow && /* @__PURE__ */ jsx(BrowserSignIn, {
215
- className: "mt-3",
216
- state: flow,
217
- service: signInWith,
218
- onCancel: signIn.cancel,
219
- onRetry: () => startSignIn(lastOptions.current),
220
- ...signIn.submit ? { onSubmit: signIn.submit } : {}
221
- }),
222
- namingAccount && !flow && /* @__PURE__ */ jsxs("div", {
223
- className: "mt-3 flex items-center gap-2",
224
- children: [
225
- /* @__PURE__ */ jsx("input", {
226
- autoFocus: true,
227
- type: "text",
228
- placeholder: l.accountsAccountNamePlaceholder,
229
- value: accountName,
230
- onChange: (e) => setAccountName(e.target.value),
231
- onKeyDown: (e) => {
232
- if (e.key === "Enter") startNamedAccount();
233
- if (e.key === "Escape") setNamingAccount(false);
234
- },
235
- "aria-label": l.accountsAccountName,
236
- className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled flex-1 !w-auto`
237
- }),
238
- /* @__PURE__ */ jsx("button", {
239
- type: "button",
240
- disabled: !trimmedAccountName,
241
- onClick: startNamedAccount,
242
- className: BTN_PRIMARY,
243
- children: l.accountsSignIn
244
- }),
245
- /* @__PURE__ */ jsx("button", {
246
- type: "button",
247
- onClick: () => setNamingAccount(false),
248
- className: BTN_SECONDARY,
249
- children: l.accountsCancel
310
+ }) : /* @__PURE__ */ jsxs("div", {
311
+ className: "mt-3 flex items-center gap-2",
312
+ children: [
313
+ /* @__PURE__ */ jsx("input", {
314
+ autoFocus: true,
315
+ type: "password",
316
+ placeholder: keyPlaceholder,
317
+ value,
318
+ onChange: (e) => setValue(e.target.value),
319
+ onKeyDown: (e) => {
320
+ if (e.key === "Enter") save();
321
+ if (e.key === "Escape") cancelEditing();
322
+ },
323
+ "aria-label": l.accountsKeyField(status.label),
324
+ className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled flex-1 !w-auto font-mono`
325
+ }),
326
+ /* @__PURE__ */ jsx("button", {
327
+ type: "button",
328
+ disabled: !value.trim() || busy === "setting",
329
+ onClick: save,
330
+ className: BTN_PRIMARY,
331
+ children: busy === "setting" ? l.accountsSaving : l.accountsSave
332
+ }),
333
+ /* @__PURE__ */ jsx("button", {
334
+ type: "button",
335
+ onClick: cancelEditing,
336
+ className: BTN_SECONDARY,
337
+ children: l.accountsCancel
338
+ })
339
+ ]
250
340
  })
251
- ]
252
- }),
253
- editing && (hasCustomFields ? /* @__PURE__ */ jsxs("div", {
254
- className: "mt-3 space-y-3",
255
- children: [/* @__PURE__ */ jsx("div", {
256
- className: "grid grid-cols-1 md:grid-cols-2 gap-2",
257
- children: customFields.map((field, index) => {
258
- const valueForField = fieldValues[field.key] ?? "";
259
- const placeholder = field.secret && available ? l.accountsKeepSecret : field.placeholder || keyPlaceholder;
260
- return /* @__PURE__ */ jsxs("label", {
261
- className: "flex flex-col gap-1",
262
- children: [
263
- /* @__PURE__ */ jsxs("span", {
264
- className: "text-xs text-[var(--zg-text-muted)]",
265
- children: [field.label, field.required ? l.accountsRequired : ""]
266
- }),
267
- /* @__PURE__ */ jsx("input", {
268
- autoFocus: index === 0,
269
- type: field.secret ? "password" : "text",
270
- placeholder,
271
- value: valueForField,
272
- onChange: (e) => setFieldValues((prev) => ({
273
- ...prev,
274
- [field.key]: e.target.value
275
- })),
276
- onKeyDown: (e) => {
277
- if ((e.metaKey || e.ctrlKey) && e.key === "Enter") save();
278
- if (e.key === "Escape") cancelEditing();
279
- },
280
- className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled font-mono`
281
- }),
282
- field.hint && /* @__PURE__ */ jsx("span", {
283
- className: "text-zg-meta leading-snug text-[var(--zg-text-muted)]",
284
- children: field.hint
285
- })
286
- ]
287
- }, field.key);
288
- })
289
- }), /* @__PURE__ */ jsxs("div", {
290
- className: "flex items-center gap-2",
291
- children: [/* @__PURE__ */ jsx("button", {
292
- type: "button",
293
- disabled: !requiredCustomFieldsSatisfied || busy === "setting",
294
- onClick: save,
295
- className: BTN_PRIMARY,
296
- children: busy === "setting" ? l.accountsSaving : l.accountsSaveConfig
297
- }), /* @__PURE__ */ jsx("button", {
298
- type: "button",
299
- onClick: cancelEditing,
300
- className: BTN_SECONDARY,
301
- children: l.accountsCancel
302
- })]
303
- })]
304
- }) : /* @__PURE__ */ jsxs("div", {
305
- className: "mt-3 flex items-center gap-2",
306
- children: [
307
- /* @__PURE__ */ jsx("input", {
308
- autoFocus: true,
309
- type: "password",
310
- placeholder: keyPlaceholder,
311
- value,
312
- onChange: (e) => setValue(e.target.value),
313
- onKeyDown: (e) => {
314
- if (e.key === "Enter") save();
315
- if (e.key === "Escape") cancelEditing();
316
- },
317
- "aria-label": l.accountsKeyField(status.label),
318
- className: `zg-well w-full h-8 px-2.5 text-zg-ui placeholder:text-[var(--zg-text-subtle)] disabled:opacity-zg-disabled flex-1 !w-auto font-mono`
319
- }),
320
- /* @__PURE__ */ jsx("button", {
321
- type: "button",
322
- disabled: !value.trim() || busy === "setting",
323
- onClick: save,
324
- className: BTN_PRIMARY,
325
- children: busy === "setting" ? l.accountsSaving : l.accountsSave
326
- }),
327
- /* @__PURE__ */ jsx("button", {
328
- type: "button",
329
- onClick: cancelEditing,
330
- className: BTN_SECONDARY,
331
- children: l.accountsCancel
332
- })
333
- ]
334
- })),
335
- hasCredentialChoice(status) && /* @__PURE__ */ jsx(CredentialSources, {
336
- provider: status,
337
- cwd,
338
- host: writable ? host : { list: host.list },
339
- labels: l,
340
- confirm,
341
- onError: setRowError,
342
- onReauth: canSignIn && !flow ? startSignIn : void 0
343
- }),
344
- rowError && /* @__PURE__ */ jsx("div", {
345
- className: "mt-2 text-xs text-zg-danger",
346
- children: l.accountsError(rowError)
347
- })
348
- ]
341
+ }),
342
+ hasCredentialChoice(status) && /* @__PURE__ */ jsx(CredentialSources, {
343
+ provider: status,
344
+ cwd,
345
+ host: writable ? host : { list: host.list },
346
+ labels: l,
347
+ confirm,
348
+ onError: setRowError,
349
+ onReauth: canSignIn && !flow ? startSignIn : void 0
350
+ }),
351
+ rowError && /* @__PURE__ */ jsx("div", {
352
+ className: "mt-2 text-xs text-zg-danger",
353
+ children: l.accountsError(rowError)
354
+ })
355
+ ]
356
+ })
349
357
  });
350
358
  }
351
359
  //#endregion
@@ -1,8 +1,8 @@
1
1
  import { BTN_DANGER, BTN_PRIMARY, BTN_SECONDARY } from "../../../components/button.js";
2
2
  import { ErrorNote, FormCard, FormSection, MetaChip, OpLine, RowText } from "../../../components/Form.js";
3
3
  import { constant, useReadable } from "../../../chat/headless/store.js";
4
- import { useSettingsHost } from "../../SettingsProvider.js";
5
4
  import { toSettingsError } from "../../headless/host.js";
5
+ import { useSettingsHost } from "../../SettingsProvider.js";
6
6
  import { SettingsPanel, SettingsPanelBody } from "../../section.js";
7
7
  import { hasCredentialChoice } from "../../headless/providers.js";
8
8
  import { useSettingsResource } from "../shared/catalog.js";
@@ -2,8 +2,8 @@ import { IconButton } from "../../../components/IconButton.js";
2
2
  import { Segmented } from "../../../components/Segmented.js";
3
3
  import { EmptyState } from "../../../components/Surface.js";
4
4
  import { Checkbox } from "../../../components/Form.js";
5
- import { useSettingsDocument, useSettingsHost, useSettingsWritable } from "../../SettingsProvider.js";
6
5
  import { toSettingsError } from "../../headless/host.js";
6
+ import { useSettingsDocument, useSettingsHost, useSettingsWritable } from "../../SettingsProvider.js";
7
7
  import { useSectionLabels } from "../use-section-labels.js";
8
8
  import { enabledNames, toggleEnabled } from "../../headless/enabled.js";
9
9
  import { DEFAULT_CATALOG_SHARED_LABELS } from "./labels.js";
@@ -6,8 +6,8 @@ import { Checkbox, MetaChip } from "../../../components/Form.js";
6
6
  import { LoadError } from "../../../components/LoadError.js";
7
7
  import { useSettingsHost } from "../../SettingsProvider.js";
8
8
  import { useSectionLabels } from "../use-section-labels.js";
9
- import { useCodeDocument } from "../../../code/editor/useCodeDocument.js";
10
9
  import { OpenFileButton, RevealPathButton, useCatalogSharedLabels, useEnabledList, useSettingsResource } from "../shared/catalog.js";
10
+ import { useCodeDocument } from "../../../code/editor/useCodeDocument.js";
11
11
  import { formatTokens } from "../../../session/headless/usage-format.js";
12
12
  import { DEFAULT_SKILLS_SECTION_LABELS } from "./labels.js";
13
13
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1,11 +1,11 @@
1
1
  import { BTN_LG_SECONDARY, BTN_PRIMARY, BTN_SECONDARY } from "../../../components/button.js";
2
2
  import { OpLine } from "../../../components/Form.js";
3
- import { useSettingsHost } from "../../SettingsProvider.js";
4
3
  import { toSettingsError } from "../../headless/host.js";
4
+ import { useSettingsHost } from "../../SettingsProvider.js";
5
5
  import { SettingsPanel, SettingsPanelActions, SettingsPanelBody } from "../../section.js";
6
- import { SkillSourceBrowser } from "../../../onboarding/skills/SkillSourceBrowser.js";
7
6
  import { ScopePicker, useCatalogSharedLabels, useOpLine, useSettingsResource, useSettingsValues, useWriteSetting } from "../shared/catalog.js";
8
7
  import { SettingsTutorial } from "../../SettingsTutorial.js";
8
+ import { SkillSourceBrowser } from "../../../onboarding/skills/SkillSourceBrowser.js";
9
9
  import { SkillActions, SkillList, useSkillsSectionLabels } from "./SkillList.js";
10
10
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
11
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";