@burdenoff/fe-libs 2026.1018.1 → 2026.1019.2

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 (65) hide show
  1. package/dist/chrome/AccountSwitcher.js +90 -89
  2. package/dist/chrome/Breadcrumbs.js +1 -1
  3. package/dist/chrome/CommandPalette.js +91 -90
  4. package/dist/chrome/Footer.js +31 -8
  5. package/dist/chrome/GlobalSearch.js +78 -77
  6. package/dist/chrome/HeaderBar.js +1 -1
  7. package/dist/chrome/HeaderThemeSwitcher.js +48 -47
  8. package/dist/chrome/LanguagePickerSheet.js +23 -22
  9. package/dist/chrome/NavCustomizeDialog.d.ts +0 -14
  10. package/dist/chrome/NavCustomizeDialog.js +114 -122
  11. package/dist/chrome/PanelTabs.js +45 -41
  12. package/dist/chrome/PersonaSurfaceControls.d.ts +0 -17
  13. package/dist/chrome/PersonaSurfaceControls.js +115 -118
  14. package/dist/chrome/PluginSettingsPage.js +29 -28
  15. package/dist/chrome/PluginWidgetGrid.js +19 -18
  16. package/dist/chrome/ProductPickerSheet.js +44 -47
  17. package/dist/chrome/ProductSwitcher.js +2 -6
  18. package/dist/chrome/ProfileSwitcher.js +6 -10
  19. package/dist/chrome/ShortcutHelpDialog.js +60 -65
  20. package/dist/chrome/SideNavigation.js +2 -2
  21. package/dist/chrome/Sidebar.js +44 -43
  22. package/dist/chrome/ThemePreferences.js +289 -267
  23. package/dist/chrome/contextSwitcher/EmptyState.js +31 -27
  24. package/dist/chrome/contextSwitcher/OrganizationList.js +40 -30
  25. package/dist/chrome/contextSwitcher/ProjectList.js +48 -44
  26. package/dist/chrome/contextSwitcher/SearchInput.js +44 -40
  27. package/dist/chrome/contextSwitcher/TriggerButton.js +2 -2
  28. package/dist/chrome/contextSwitcher/WorkspaceList.js +36 -32
  29. package/dist/chrome/globalSearch/AdvancedFiltersPanel.js +128 -126
  30. package/dist/chrome/globalSearch/ResultsList.js +25 -27
  31. package/dist/chrome/globalSearch/SearchInput.js +16 -14
  32. package/dist/chrome/notificationCenter/NotificationCardItem.js +58 -47
  33. package/dist/chrome/notificationCenter/NotificationFilters.js +76 -62
  34. package/dist/chrome/notificationCenter/NotificationFooter.js +21 -21
  35. package/dist/chrome/notificationCenter/NotificationHeader.js +67 -63
  36. package/dist/chrome/notificationCenter/NotificationList.js +75 -71
  37. package/dist/chrome/notificationCenter/NotificationPanel.js +37 -33
  38. package/dist/chrome/notificationCenter/PushOptInToggle.js +33 -32
  39. package/dist/chrome/notificationCenter/constants.d.ts +6 -1
  40. package/dist/chrome/notificationCenter/constants.js +12 -11
  41. package/dist/chrome/useThemeOptionLabels.d.ts +33 -0
  42. package/dist/chrome/useThemeOptionLabels.js +39 -0
  43. package/dist/shared/assistant/conversation.d.ts +8 -0
  44. package/dist/shared/assistant/history/historyMapping.js +1 -1
  45. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +6 -6
  46. package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +86 -85
  47. package/dist/shared/assistant/ui/AssistantMessageItem.js +101 -96
  48. package/dist/shared/assistant/ui/AssistantWriteProposalCard.d.ts +2 -0
  49. package/dist/shared/assistant/ui/AssistantWriteProposalCard.js +93 -89
  50. package/dist/shared/assistant/ui/WorkflowAssistantPanel.js +152 -140
  51. package/dist/shared/assistant/ui/useWriteProposals.js +122 -85
  52. package/dist/shared/assistant/writeProposalDiscovery.d.ts +3 -1
  53. package/dist/shared/assistant/writeProposalDiscovery.js +2 -2
  54. package/dist/shared/events/sinks/RybbitSink.js +2 -2
  55. package/dist/shared/providers/shell/interpolateShellLabel.d.ts +3 -0
  56. package/dist/shared/providers/shell/interpolateShellLabel.js +11 -0
  57. package/dist/shared/providers/shell/useAssistantShellLabels.d.ts +45 -0
  58. package/dist/shared/providers/shell/useAssistantShellLabels.js +54 -0
  59. package/dist/shared/tours/TourPlayer.js +33 -32
  60. package/dist/shared/tours/TourTooltip.js +108 -109
  61. package/dist/shared/tours/tourTrigger/MobileTourSheet.js +98 -85
  62. package/dist/shared/tours/tourTrigger/TourListItemDesktop.js +20 -18
  63. package/dist/shared/tours/tourTrigger/TourListItemMobile.js +23 -25
  64. package/dist/shared-assistant.js +188 -188
  65. package/package.json +2 -2
@@ -1,114 +1,115 @@
1
1
  import { useI18n as e } from "../../providers/shell/I18nProvider.js";
2
2
  import { useAuthToken as t } from "../../providers/shell/AuthTokenProvider.js";
3
3
  import "../../../shared-providers-shell.js";
4
- import { useAssistantStorageFolders as n } from "../product.js";
5
- import { useAssistantTr as r } from "../i18n.js";
6
- import { copyToClipboard as i } from "../clipboard.js";
7
- import { AssistantMarkdownRenderer as a } from "./AssistantMarkdownRenderer.js";
8
- import { downloadAssistantArtifact as o } from "../api.js";
9
- import { languageConfirmationCopy as s } from "../appControls/languageReply.js";
4
+ import { useAssistantChromeLabels as n } from "../../providers/shell/useAssistantShellLabels.js";
5
+ import { useAssistantStorageFolders as r } from "../product.js";
6
+ import { useAssistantTr as i } from "../i18n.js";
7
+ import { copyToClipboard as a } from "../clipboard.js";
8
+ import { AssistantMarkdownRenderer as o } from "./AssistantMarkdownRenderer.js";
9
+ import { downloadAssistantArtifact as s } from "../api.js";
10
+ import { languageConfirmationCopy as ee } from "../appControls/languageReply.js";
10
11
  import { getAssistantDisplayContent as c } from "../displayContent.js";
11
- import { AssistantToolActivity as ee, parseToolActivity as te } from "./AssistantToolActivity.js";
12
- import { usePrefersReducedMotion as l } from "./usePrefersReducedMotion.js";
13
- import { AssistantAvatar as u } from "./AssistantAvatar.js";
14
- import { useAssistantSpeech as d } from "./AssistantSpeechProvider.js";
15
- import { AssistantMessageAttachments as ne } from "./AssistantMessageAttachments.js";
16
- import { AssistantPendingWriteCard as re } from "./AssistantPendingWriteCard.js";
17
- import { AssistantSpeakButton as ie } from "./AssistantSpeakButton.js";
18
- import { SaveToFilesButton as ae } from "../../../storage/SaveToFilesButton.js";
12
+ import { AssistantToolActivity as l, parseToolActivity as u } from "./AssistantToolActivity.js";
13
+ import { usePrefersReducedMotion as d } from "./usePrefersReducedMotion.js";
14
+ import { AssistantAvatar as te } from "./AssistantAvatar.js";
15
+ import { useAssistantSpeech as ne } from "./AssistantSpeechProvider.js";
16
+ import { AssistantMessageAttachments as re } from "./AssistantMessageAttachments.js";
17
+ import { AssistantPendingWriteCard as f } from "./AssistantPendingWriteCard.js";
18
+ import { AssistantSpeakButton as p } from "./AssistantSpeakButton.js";
19
+ import { SaveToFilesButton as m } from "../../../storage/SaveToFilesButton.js";
19
20
  import "../../../storage/index.js";
20
- import { AssistantTurnActivity as f } from "./AssistantTurnActivity.js";
21
- import { useMemo as p, useRef as m, useState as h } from "react";
22
- import { Check as oe, Copy as g, RotateCcw as se } from "lucide-react";
23
- import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
21
+ import { AssistantTurnActivity as ie } from "./AssistantTurnActivity.js";
22
+ import { useMemo as h, useRef as ae, useState as g } from "react";
23
+ import { Check as oe, Copy as se, RotateCcw as _ } from "lucide-react";
24
+ import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
24
25
  //#region src/shared/assistant/ui/AssistantMessageItem.tsx
25
- function b(e) {
26
+ function x(e) {
26
27
  return e.role === "assistant" ? e.metadata : void 0;
27
28
  }
28
29
  function ce(e) {
29
30
  return e?.artifacts ?? [];
30
31
  }
31
- function x(e) {
32
+ function S(e) {
32
33
  return window.atob(e);
33
34
  }
34
- function S(e, t, n) {
35
- let r = x(e), i = new Uint8Array(r.length);
35
+ function C(e, t, n) {
36
+ let r = S(e), i = new Uint8Array(r.length);
36
37
  for (let e = 0; e < r.length; e += 1) i[e] = r.charCodeAt(e);
37
38
  let a = new Blob([i], { type: n }), o = URL.createObjectURL(a), s = document.createElement("a");
38
39
  s.href = o, s.download = t, document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(o);
39
40
  }
40
- var C = () => /* @__PURE__ */ v("span", {
41
+ var w = () => /* @__PURE__ */ y("span", {
41
42
  "aria-hidden": "true",
42
43
  "data-testid": "assistant-streaming-caret",
43
- className: "ml-0.5 inline-block h-4 w-1.5 rounded-sm bg-text-secondary align-middle" + (l() ? "" : " motion-safe:animate-pulse")
44
- }), w = ({ onApprovePendingWrite: l, approvingWriteRef: x = null, pendingWriteExpired: w = !1, pendingWriteApproved: le = !1, pendingWriteGoAheadSent: ue = !1, message: T, processing: E, isStreaming: D, isFailed: O, isLastAssistant: k, isNewestAssistant: A, onRetry: j, legacyWriteCardHidden: M = !1, writeProposals: N, uiOffers: P }) => {
45
- let F = r(), { locale: I } = e(), L = s(T, F), R = L ? L.translated ? I : "en" : T.metadata?.lang, z = L ? `${T.id}:language:${R}` : T.id, B = m(z), V = n(), { getAccessToken: H, getWorkspaceToken: de } = t(), U = d(), [fe, W] = h(null), [pe, G] = h(!1), K = T.role === "user", q = p(() => b(T), [T]), J = p(() => ce(q), [q]), Y = E === void 0 ? D ? {
44
+ className: "ml-0.5 inline-block h-4 w-1.5 rounded-sm bg-text-secondary align-middle" + (d() ? "" : " motion-safe:animate-pulse")
45
+ }), T = ({ onApprovePendingWrite: d, approvingWriteRef: S = null, pendingWriteExpired: T = !1, pendingWriteApproved: le = !1, pendingWriteGoAheadSent: ue = !1, message: E, processing: D, isStreaming: O, isFailed: k, isLastAssistant: A, isNewestAssistant: j, onRetry: M, legacyWriteCardHidden: N = !1, writeProposals: P, uiOffers: F }) => {
46
+ let I = n(), L = i(), { locale: R } = e(), z = ee(E, L), B = z ? z.translated ? R : "en" : E.metadata?.lang, V = z ? `${E.id}:language:${B}` : E.id, H = ae(V), de = r(), { getAccessToken: fe, getWorkspaceToken: pe } = t(), U = ne(), [me, W] = g(null), [he, G] = g(!1), K = E.role === "user", q = h(() => x(E), [E]), J = h(() => ce(q), [q]), Y = D === void 0 ? O ? {
46
47
  status: "streaming",
47
- messageId: T.id,
48
- updatedAt: T.timestamp
49
- } : null : E, X = c(T, Y, F), { steps: Z, text: Q } = p(() => K ? {
48
+ messageId: E.id,
49
+ updatedAt: E.timestamp
50
+ } : null : D, X = c(E, Y, L), { steps: Z, text: Q } = h(() => K ? {
50
51
  steps: [],
51
- text: T.content
52
- } : X.kind === "output" ? te(X.text) : {
52
+ text: E.content
53
+ } : X.kind === "output" ? u(X.text) : {
53
54
  steps: [],
54
55
  text: ""
55
56
  }, [
56
57
  K,
57
- T.content,
58
+ E.content,
58
59
  X.kind,
59
60
  X.text
60
- ]), me = () => {
61
- i(Q).then((e) => {
61
+ ]), ge = () => {
62
+ a(Q).then((e) => {
62
63
  e && (G(!0), setTimeout(() => G(!1), 2e3));
63
64
  });
64
- }, he = async (e) => {
65
+ }, _e = async (e) => {
65
66
  if (!q?.sandboxId || !q.sessionId) return;
66
67
  let t = new URLSearchParams(window.location.search).get("workspace") ?? "";
67
68
  if (t) {
68
69
  W(e.path);
69
70
  try {
70
- let n = await o(q.sandboxId, t, q.sessionId, e.path, q.mode, {
71
- accessToken: H(),
72
- workspaceToken: de()
71
+ let n = await s(q.sandboxId, t, q.sessionId, e.path, q.mode, {
72
+ accessToken: fe(),
73
+ workspaceToken: pe()
73
74
  });
74
- S(n.contentBase64, n.filename, n.mimeType);
75
+ C(n.contentBase64, n.filename, n.mimeType);
75
76
  } finally {
76
77
  W(null);
77
78
  }
78
79
  }
79
- }, $ = new Date(T.timestamp).toLocaleTimeString([], {
80
+ }, $ = new Date(E.timestamp).toLocaleTimeString([], {
80
81
  hour: "2-digit",
81
82
  minute: "2-digit"
82
83
  });
83
- if (T.role === "system") return /* @__PURE__ */ v("div", {
84
+ if (E.role === "system") return /* @__PURE__ */ y("div", {
84
85
  className: "flex justify-center px-2 py-1",
85
86
  "data-testid": "assistant-message-system",
86
- children: T.metadata?.localAction?.kind === "navigate" ? /* @__PURE__ */ v("div", {
87
+ children: E.metadata?.localAction?.kind === "navigate" ? /* @__PURE__ */ y("div", {
87
88
  className: "max-w-[90%] break-words rounded-lg border border-border-subtle bg-bg-sunken/60 px-3 py-2 text-center text-xs leading-relaxed text-text-muted",
88
89
  "data-testid": "assistant-message-system-navigation",
89
- children: /* @__PURE__ */ v(a, { content: T.content })
90
- }) : /* @__PURE__ */ v("p", {
90
+ children: /* @__PURE__ */ y(o, { content: E.content })
91
+ }) : /* @__PURE__ */ y("p", {
91
92
  className: "max-w-[90%] whitespace-pre-wrap break-words rounded-lg border border-border-subtle bg-bg-sunken/60 px-3 py-2 text-center text-xs leading-relaxed text-text-muted",
92
- children: T.content
93
+ children: E.content
93
94
  })
94
95
  });
95
96
  if (K) {
96
- let e = T.metadata?.attachments ?? [];
97
- return /* @__PURE__ */ v("div", {
97
+ let e = E.metadata?.attachments ?? [];
98
+ return /* @__PURE__ */ y("div", {
98
99
  className: "flex justify-end",
99
100
  "data-testid": "assistant-message-user",
100
- children: /* @__PURE__ */ y("div", {
101
+ children: /* @__PURE__ */ b("div", {
101
102
  className: "max-w-[85%]",
102
103
  children: [
103
- T.content && /* @__PURE__ */ v("div", {
104
+ E.content && /* @__PURE__ */ y("div", {
104
105
  className: "rounded-2xl rounded-br-md bg-action-primary-bg/12 px-3.5 py-2.5 text-[15px] leading-relaxed text-text-primary",
105
- children: /* @__PURE__ */ v("p", {
106
+ children: /* @__PURE__ */ y("p", {
106
107
  className: "whitespace-pre-wrap",
107
- children: T.content
108
+ children: E.content
108
109
  })
109
110
  }),
110
- /* @__PURE__ */ v(ne, { attachments: e }),
111
- /* @__PURE__ */ v("div", {
111
+ /* @__PURE__ */ y(re, { attachments: e }),
112
+ /* @__PURE__ */ y("div", {
112
113
  className: "mt-1 pr-1 text-right text-[10px] text-text-muted",
113
114
  children: $
114
115
  })
@@ -116,47 +117,47 @@ var C = () => /* @__PURE__ */ v("span", {
116
117
  })
117
118
  });
118
119
  }
119
- return /* @__PURE__ */ y("div", {
120
+ return /* @__PURE__ */ b("div", {
120
121
  className: "flex gap-2.5",
121
122
  "data-testid": "assistant-message-assistant",
122
- children: [/* @__PURE__ */ v(u, { active: D }), /* @__PURE__ */ y("div", {
123
+ children: [/* @__PURE__ */ y(te, { active: O }), /* @__PURE__ */ b("div", {
123
124
  className: "min-w-0 flex-1",
124
125
  children: [
125
- Z.length > 0 && /* @__PURE__ */ v(ee, { steps: Z }),
126
- q?.pendingWrite && !M ? /* @__PURE__ */ v(re, {
126
+ Z.length > 0 && /* @__PURE__ */ y(l, { steps: Z }),
127
+ q?.pendingWrite && !N ? /* @__PURE__ */ y(f, {
127
128
  pendingWrite: q.pendingWrite,
128
- onApprove: l,
129
- approving: x !== null && x === q.pendingWrite.reference,
130
- expired: w,
129
+ onApprove: d,
130
+ approving: S !== null && S === q.pendingWrite.reference,
131
+ expired: T,
131
132
  approved: le,
132
133
  goAheadSent: ue,
133
- awaitingTurn: !!D
134
+ awaitingTurn: !!O
134
135
  }) : null,
135
- N,
136
- Q && /* @__PURE__ */ v("div", {
136
+ P,
137
+ Q && /* @__PURE__ */ y("div", {
137
138
  className: "text-[15px] leading-relaxed text-text-primary",
138
- children: /* @__PURE__ */ v(a, { content: Q })
139
+ children: /* @__PURE__ */ y(o, { content: Q })
139
140
  }),
140
- X.kind === "working" && /* @__PURE__ */ v(f, { processing: Y }),
141
- X.kind === "stopped" && /* @__PURE__ */ v("p", {
141
+ X.kind === "working" && /* @__PURE__ */ y(ie, { processing: Y }),
142
+ X.kind === "stopped" && /* @__PURE__ */ y("p", {
142
143
  className: "text-[15px] leading-relaxed text-text-secondary",
143
144
  "data-testid": "assistant-turn-stopped",
144
145
  children: X.text
145
146
  }),
146
- D && /* @__PURE__ */ v(C, {}),
147
- P,
148
- J.length > 0 && q?.sandboxId && q.sessionId && /* @__PURE__ */ y("div", {
147
+ O && /* @__PURE__ */ y(w, {}),
148
+ F,
149
+ J.length > 0 && q?.sandboxId && q.sessionId && /* @__PURE__ */ b("div", {
149
150
  className: "mt-3 space-y-2 border-t border-border-subtle pt-2",
150
- children: [/* @__PURE__ */ v("p", {
151
+ children: [/* @__PURE__ */ y("p", {
151
152
  className: "text-[10px] font-medium uppercase tracking-wide text-text-muted",
152
- children: F("message.downloads", "Downloads")
153
- }), /* @__PURE__ */ v("div", {
153
+ children: L("message.downloads", "Downloads")
154
+ }), /* @__PURE__ */ y("div", {
154
155
  className: "flex flex-wrap gap-2",
155
156
  children: J.map((e) => {
156
157
  let t = `${e.name}${e.type === "directory" ? ".tar.gz" : ""}`;
157
- return /* @__PURE__ */ v(ae, {
158
+ return /* @__PURE__ */ y(m, {
158
159
  label: t,
159
- disabled: fe === e.path,
160
+ disabled: me === e.path,
160
161
  testId: `assistant-artifact-${e.name}`,
161
162
  source: {
162
163
  kind: "sandbox-artifact",
@@ -165,27 +166,27 @@ var C = () => /* @__PURE__ */ v("span", {
165
166
  path: e.path,
166
167
  filename: t
167
168
  },
168
- defaultFolderPath: V.artifacts,
169
- onDownload: () => he(e)
169
+ defaultFolderPath: de.artifacts,
170
+ onDownload: () => _e(e)
170
171
  }, e.path);
171
172
  })
172
173
  })]
173
174
  }),
174
- !D && (Q || O || k) && /* @__PURE__ */ y("div", {
175
+ !O && (Q || k || A) && /* @__PURE__ */ b("div", {
175
176
  className: "mt-1.5 flex items-center gap-1",
176
177
  children: [
177
- Q && /* @__PURE__ */ v("button", {
178
+ Q && /* @__PURE__ */ y("button", {
178
179
  type: "button",
179
- onClick: me,
180
+ onClick: ge,
180
181
  className: "flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-text-muted transition-colors hover:bg-bg-elevated hover:text-text-secondary",
181
- "aria-label": F("message.copy", "Copy message"),
182
+ "aria-label": L("message.copy", "Copy message"),
182
183
  "data-testid": "assistant-message-copy",
183
- children: pe ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(oe, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ v("span", { children: F("message.copied", "Copied") })] }) : /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(g, { className: "size-3" }), /* @__PURE__ */ v("span", { children: F("message.copyShort", "Copy") })] })
184
+ children: he ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(oe, { className: "size-3 text-status-success-text" }), /* @__PURE__ */ y("span", { children: L("message.copied", "Copied") })] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(se, { className: "size-3" }), /* @__PURE__ */ y("span", { children: L("message.copyShort", "Copy") })] })
184
185
  }),
185
186
  Q && U.isSupported && (() => {
186
- let e = U.blockedFor(z) ?? U.disabledReason, t = U.isSpeaking(T.id) || U.isSpeaking(B.current), n = !!e && !!A, r = n ? `speak-reason-${T.id}` : void 0, i = n ? null : U.deviceFallbackFor(z), a = i ? `speak-fallback-${T.id}` : void 0;
187
- return /* @__PURE__ */ y(_, { children: [
188
- /* @__PURE__ */ v(ie, {
187
+ let e = U.blockedFor(V) ?? U.disabledReason, t = U.isSpeaking(E.id) || U.isSpeaking(H.current), n = !!e && !!j, r = n ? `speak-reason-${E.id}` : void 0, i = n ? null : U.deviceFallbackFor(V), a = i ? `speak-fallback-${E.id}` : void 0;
188
+ return /* @__PURE__ */ b(v, { children: [
189
+ /* @__PURE__ */ y(p, {
189
190
  isSpeaking: t,
190
191
  disabled: e !== null,
191
192
  disabledReason: e,
@@ -195,16 +196,16 @@ var C = () => /* @__PURE__ */ v("span", {
195
196
  U.stop();
196
197
  return;
197
198
  }
198
- B.current = z, U.toggle(z, Q, R);
199
+ H.current = V, U.toggle(V, Q, B);
199
200
  }
200
201
  }),
201
- n && /* @__PURE__ */ v("span", {
202
+ n && /* @__PURE__ */ y("span", {
202
203
  id: r,
203
204
  className: "text-[11px] text-text-muted",
204
205
  "data-testid": "assistant-speak-reason",
205
206
  children: e
206
207
  }),
207
- i && /* @__PURE__ */ v("span", {
208
+ i && /* @__PURE__ */ y("span", {
208
209
  id: a,
209
210
  role: "status",
210
211
  className: "text-[11px] text-text-muted",
@@ -213,21 +214,25 @@ var C = () => /* @__PURE__ */ v("span", {
213
214
  })
214
215
  ] });
215
216
  })(),
216
- (O || k) && j && !T.metadata?.localAction && /* @__PURE__ */ y("button", {
217
+ (k || A) && M && !E.metadata?.localAction && /* @__PURE__ */ b("button", {
217
218
  type: "button",
218
- onClick: j,
219
- className: `flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-colors hover:bg-bg-elevated ${O ? "text-status-error-text" : "text-text-muted hover:text-text-secondary"}`,
220
- "aria-label": F("message.retry", "Retry"),
219
+ onClick: M,
220
+ className: `flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] transition-colors hover:bg-bg-elevated ${k ? "text-status-error-text" : "text-text-muted hover:text-text-secondary"}`,
221
+ "aria-label": L("message.retry", "Retry"),
221
222
  "data-testid": "assistant-message-retry",
222
- children: [/* @__PURE__ */ v(se, { className: "size-3" }), /* @__PURE__ */ v("span", { children: F("message.retry", "Retry") })]
223
+ children: [/* @__PURE__ */ y(_, { className: "size-3" }), /* @__PURE__ */ y("span", { children: L("message.retry", "Retry") })]
223
224
  })
224
225
  ]
225
226
  }),
226
- /* @__PURE__ */ y("div", {
227
+ /* @__PURE__ */ b("div", {
227
228
  className: "mt-1 text-[10px] text-text-muted",
228
- children: [$, T.tokens && /* @__PURE__ */ y("span", {
229
+ children: [$, E.tokens && /* @__PURE__ */ b("span", {
229
230
  className: "ml-2",
230
- children: [T.tokens.input + T.tokens.output, " tokens"]
231
+ children: [
232
+ E.tokens.input + E.tokens.output,
233
+ " ",
234
+ I.tokens
235
+ ]
231
236
  })]
232
237
  })
233
238
  ]
@@ -235,4 +240,4 @@ var C = () => /* @__PURE__ */ v("span", {
235
240
  });
236
241
  };
237
242
  //#endregion
238
- export { w as AssistantMessageItem, C as StreamingCaret };
243
+ export { T as AssistantMessageItem, w as StreamingCaret };
@@ -75,4 +75,6 @@ export interface AssistantWriteProposalCardProps {
75
75
  }
76
76
  /** How long the card must stay half visible before it counts as presented. */
77
77
  export declare const WRITE_PROPOSAL_PRESENTED_AFTER_MS = 500;
78
+ /** The chip's words: from the record's status, and its result only. */
79
+ export declare function statusText(view: WriteProposalView, tr: AssistantTr): string;
78
80
  export declare const AssistantWriteProposalCard: FC<AssistantWriteProposalCardProps>;