@burdenoff/fe-libs 2026.1029.11 → 2026.1030.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 (62) hide show
  1. package/dist/connections/ConnectionDetailsTab.d.ts +4 -1
  2. package/dist/connections/ConnectionDetailsTab.js +18 -15
  3. package/dist/connections/ConnectionDialog.d.ts +8 -2
  4. package/dist/connections/ConnectionDialog.js +18 -17
  5. package/dist/connections/ConnectionDialogPanel.d.ts +3 -1
  6. package/dist/connections/ConnectionDialogPanel.js +141 -135
  7. package/dist/connections/ShareConnectionDialog.d.ts +23 -0
  8. package/dist/connections/ShareConnectionDialog.js +146 -0
  9. package/dist/connections/SharePanels.d.ts +32 -0
  10. package/dist/connections/SharePanels.js +158 -0
  11. package/dist/connections/VisibilityChoice.d.ts +12 -0
  12. package/dist/connections/VisibilityChoice.js +60 -0
  13. package/dist/connections/api.d.ts +12 -1
  14. package/dist/connections/api.js +1 -1
  15. package/dist/connections/connectionFlow.d.ts +6 -1
  16. package/dist/connections/connectionFlow.js +1 -1
  17. package/dist/connections/index.d.ts +4 -1
  18. package/dist/connections/sharingApi.d.ts +28 -0
  19. package/dist/connections/sharingApi.js +215 -0
  20. package/dist/connections/types.d.ts +31 -0
  21. package/dist/connections/useConnectionSharingDraft.d.ts +40 -0
  22. package/dist/connections/useConnectionSharingDraft.js +93 -0
  23. package/dist/connections.js +12 -9
  24. package/dist/shared/assistant/i18nManifest.d.ts +18 -0
  25. package/dist/shared/assistant/i18nManifest.js +18 -0
  26. package/dist/shared/assistant/index.d.ts +4 -0
  27. package/dist/shared/assistant/ui/AIAssistantPanel.d.ts +9 -1
  28. package/dist/shared/assistant/ui/AIAssistantPanel.js +194 -174
  29. package/dist/shared/assistant/ui/AssistantChatArea.d.ts +33 -0
  30. package/dist/shared/assistant/ui/AssistantChatArea.js +1463 -1397
  31. package/dist/shared/assistant/ui/AssistantLanguageMenu.d.ts +9 -1
  32. package/dist/shared/assistant/ui/AssistantLanguageMenu.js +22 -22
  33. package/dist/shared/assistant/ui/AssistantOverlay.d.ts +16 -2
  34. package/dist/shared/assistant/ui/AssistantOverlay.js +219 -200
  35. package/dist/shared/assistant/ui/assistantOverlayState.d.ts +16 -2
  36. package/dist/shared/assistant/ui/assistantOverlayState.js +57 -40
  37. package/dist/shared/assistant/ui/compact/AssistantConversationMenu.js +53 -52
  38. package/dist/shared/assistant/ui/compact/AssistantDiscardDraftDialog.js +3 -4
  39. package/dist/shared/assistant/ui/compact/AssistantLanguagePill.d.ts +29 -0
  40. package/dist/shared/assistant/ui/compact/AssistantLanguagePill.js +98 -0
  41. package/dist/shared/assistant/ui/compact/AssistantVoiceReady.d.ts +31 -0
  42. package/dist/shared/assistant/ui/compact/AssistantVoiceReady.js +41 -0
  43. package/dist/shared/assistant/ui/compact/AssistantWaitingChangeRow.d.ts +6 -0
  44. package/dist/shared/assistant/ui/compact/AssistantWaitingChangeRow.js +5 -5
  45. package/dist/shared/assistant/ui/compact/AssistantWindowHeader.d.ts +22 -5
  46. package/dist/shared/assistant/ui/compact/AssistantWindowHeader.js +45 -31
  47. package/dist/shared/assistant/ui/compact/windowView.d.ts +50 -0
  48. package/dist/shared/assistant/ui/compact/windowView.js +31 -0
  49. package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +6 -0
  50. package/dist/shared/assistant/ui/composer/AssistantComposer.js +90 -89
  51. package/dist/shared/assistant/ui/composer/AssistantModeMenu.d.ts +6 -0
  52. package/dist/shared/assistant/ui/composer/AssistantModeMenu.js +83 -83
  53. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +31 -0
  54. package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +270 -166
  55. package/dist/shared/assistant/ui/voice/VoiceStage.d.ts +8 -0
  56. package/dist/shared/assistant/ui/voice/VoiceStage.js +10 -10
  57. package/dist/shared/assistant/voice/voiceStartedCue.d.ts +11 -0
  58. package/dist/shared/assistant/voice/voiceStartedCue.js +7 -0
  59. package/dist/shared-assistant.js +266 -262
  60. package/dist/ui/modal-shell.d.ts +6 -1
  61. package/dist/ui/modal-shell.js +7 -6
  62. package/package.json +1 -1
@@ -26,12 +26,12 @@ function ve(e) {
26
26
  let t = e.ownerDocument.activeElement;
27
27
  return !t || t === e.ownerDocument.body ? !1 : e.contains(t) ? !0 : e.closest("[data-assistant-panel]")?.contains(t) ?? !1;
28
28
  }
29
- var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be = !1, placeholder: xe, mode: Se, availableModes: g, attachmentCharsPerFile: Ce, onModeChange: we, auto: Te, onStartVoiceSession: _, onDraftStart: Ee, onDraftChange: De, suspendDictation: Oe = !1, onVoiceStateChange: ke, presentation: Ae = "classic", turnInFlight: v = !1, onStop: je, turnId: Me, modeDisabledReason: Ne = null, inputRef: y, aboveCard: Pe }) => {
30
- let b = r(), { locale: x } = e(), S = h || be, C = Ae === "compact", w = l(null), Fe = o((e) => {
29
+ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be = !1, placeholder: xe, mode: Se, availableModes: g, attachmentCharsPerFile: Ce, onModeChange: we, auto: Te, onStartVoiceSession: _, onDraftStart: Ee, onDraftChange: De, suspendDictation: Oe = !1, onVoiceStateChange: ke, presentation: Ae = "classic", turnInFlight: v = !1, onStop: je, turnId: Me, modeDisabledReason: Ne = null, inputRef: y, aboveCard: Pe, modeReadOnly: Fe = !1 }) => {
30
+ let b = r(), { locale: x } = e(), S = h || be, C = Ae === "compact", w = l(null), Ie = o((e) => {
31
31
  w.current = e, typeof y == "function" ? y(e) : y && (y.current = e);
32
- }, [y]), [T, E] = u(""), [D, Ie] = u(!1), [O, Le] = u(!1), k = l(!1), [Re, A] = u(null), [ze, j] = u(null), [M, N] = u(null), [Be, Ve] = u(v);
33
- Be === v ? M !== null && v && Me != null && Me !== M && N(null) : (Ve(v), v ? (j(null), N(null)) : M !== null && (j(M), N(null)));
34
- let He = l(!1), P = l(null), Ue = l(!1), We = l(!1), Ge = l(null), F = l(!1), I = l(0), { attachments: L, isBusy: Ke, preparingCount: qe, sendBlocker: Je, rejection: Ye, addFiles: R, remove: Xe, retry: Ze, clear: z, clearRejection: Qe, canAddMore: $e, commit: et, cancelCommit: tt } = pe({ perFileChars: Ce }), B = T.trim() !== "" || L.length > 0, V = l(!1), H = l(!1);
32
+ }, [y]), [T, E] = u(""), [D, Le] = u(!1), [O, Re] = u(!1), k = l(!1), [ze, A] = u(null), [Be, j] = u(null), [M, N] = u(null), [Ve, He] = u(v);
33
+ Ve === v ? M !== null && v && Me != null && Me !== M && N(null) : (He(v), v ? (j(null), N(null)) : M !== null && (j(M), N(null)));
34
+ let Ue = l(!1), P = l(null), We = l(!1), Ge = l(!1), Ke = l(null), F = l(!1), I = l(0), { attachments: L, isBusy: qe, preparingCount: Je, sendBlocker: Ye, rejection: Xe, addFiles: R, remove: Ze, retry: Qe, clear: z, clearRejection: $e, canAddMore: et, commit: tt, cancelCommit: nt } = pe({ perFileChars: Ce }), B = T.trim() !== "" || L.length > 0, V = l(!1), H = l(!1);
35
35
  s(() => {
36
36
  B && !V.current ? (V.current = !0, Ee?.()) : B || (V.current = !1);
37
37
  }, [B, Ee]), s(() => {
@@ -48,17 +48,17 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
48
48
  ]);
49
49
  let U = o((e) => {
50
50
  H.current = !0, E((t) => t ? `${t.replace(/\s+$/, "")} ${e}` : e);
51
- }, []), nt = ee((e) => e.assistantLanguage), W = n({
51
+ }, []), rt = ee((e) => e.assistantLanguage), W = n({
52
52
  onFinalize: U,
53
- language: me(() => te(nt, x), [nt, x]).tag
54
- }), G = W.isActive, K = W.interim, rt = W.stop;
53
+ language: me(() => te(rt, x), [rt, x]).tag
54
+ }), G = W.isActive, K = W.interim, it = W.stop;
55
55
  s(() => {
56
- !Oe || !G || (K.trim() !== "" && U(K.trim()), rt());
56
+ !Oe || !G || (K.trim() !== "" && U(K.trim()), it());
57
57
  }, [
58
58
  Oe,
59
59
  G,
60
60
  K,
61
- rt,
61
+ it,
62
62
  U
63
63
  ]), s(() => {
64
64
  ke?.({
@@ -70,8 +70,8 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
70
70
  O,
71
71
  G
72
72
  ]);
73
- let it = xe ?? b("composer.placeholder", "Ask me anything…"), q = T.trim(), J = re(L), at = L.filter((e) => e.status === "error"), Y = (q.length > 0 || J.length > 0) && !S && !O && Je === null, ot = J.some((e) => !(e.fileId && e.downloadUrl) && !e.inlineOnly), st = l(S);
74
- st.current = S;
73
+ let at = xe ?? b("composer.placeholder", "Ask me anything…"), q = T.trim(), J = re(L), ot = L.filter((e) => e.status === "error"), Y = (q.length > 0 || J.length > 0) && !S && !O && Ye === null, st = J.some((e) => !(e.fileId && e.downloadUrl) && !e.inlineOnly), ct = l(S);
74
+ ct.current = S;
75
75
  let X = l(!0);
76
76
  s(() => (X.current = !0, () => {
77
77
  X.current = !1;
@@ -84,15 +84,15 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
84
84
  W.isActive && W.stop();
85
85
  let e = T.trim();
86
86
  A(null);
87
- let t = C && ve(Ge.current);
88
- if (!ot) {
87
+ let t = C && ve(Ke.current);
88
+ if (!st) {
89
89
  F.current = t, ye(e, J), E(""), z();
90
90
  return;
91
91
  }
92
92
  let n = ee.getState().activeConversationId;
93
- k.current = !0, Le(!0);
93
+ k.current = !0, Re(!0);
94
94
  try {
95
- let r = await et();
95
+ let r = await tt();
96
96
  if (!X.current) {
97
97
  r.ok && await r.rollback();
98
98
  return;
@@ -104,7 +104,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
104
104
  });
105
105
  return;
106
106
  }
107
- if (st.current) {
107
+ if (ct.current) {
108
108
  await r.rollback(), X.current && A({
109
109
  kind: "busy",
110
110
  failures: []
@@ -121,42 +121,42 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
121
121
  }
122
122
  F.current = t, ye(e, re(r.attachments)), r.handedOver(), E(""), z();
123
123
  } finally {
124
- k.current = !1, X.current && Le(!1);
124
+ k.current = !1, X.current && Re(!1);
125
125
  }
126
126
  }, [
127
127
  Y,
128
- ot,
129
- et,
128
+ st,
129
+ tt,
130
130
  ye,
131
131
  T,
132
132
  J,
133
133
  z,
134
134
  W,
135
135
  C
136
- ]), ct = o(() => {
137
- tt(), w.current?.focus();
138
- }, [tt]), Q = o(() => {
139
- st.current ? He.current = !0 : w.current?.focus();
140
- }, []), lt = o(() => {
141
- if (We.current) return;
136
+ ]), lt = o(() => {
137
+ nt(), w.current?.focus();
138
+ }, [nt]), Q = o(() => {
139
+ ct.current ? Ue.current = !0 : w.current?.focus();
140
+ }, []), ut = o(() => {
141
+ if (Ge.current) return;
142
142
  let e = je?.() ?? null;
143
- e !== null && (We.current = !0, N(e)), Q();
143
+ e !== null && (Ge.current = !0, N(e)), Q();
144
144
  }, [je, Q]);
145
145
  s(() => {
146
- S || !He.current || (He.current = !1, w.current?.focus());
146
+ S || !Ue.current || (Ue.current = !1, w.current?.focus());
147
147
  }, [S]);
148
- let ut = o((e) => {
148
+ let dt = o((e) => {
149
149
  if (e !== null) {
150
150
  P.current = e;
151
151
  return;
152
152
  }
153
153
  let t = P.current;
154
- P.current = null, t !== null && t.ownerDocument.activeElement === t && (Ue.current = !0);
154
+ P.current = null, t !== null && t.ownerDocument.activeElement === t && (We.current = !0);
155
155
  }, []), $ = C && v && je !== void 0;
156
156
  c(() => {
157
- $ || !Ue.current || (Ue.current = !1, Q());
157
+ $ || !We.current || (We.current = !1, Q());
158
158
  }, [$, Q]), s(() => {
159
- M === null && (We.current = !1);
159
+ M === null && (Ge.current = !1);
160
160
  }, [M]), c(() => {
161
161
  if (!$) return;
162
162
  let e = F.current;
@@ -166,13 +166,13 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
166
166
  let n = t.ownerDocument, r = n.activeElement;
167
167
  (r === null || r === n.body || r === w.current) && t.focus({ preventScroll: !0 });
168
168
  }, [$]);
169
- let dt = o((e) => {
169
+ let ft = o((e) => {
170
170
  E(e), j(null);
171
171
  }, []);
172
172
  s(() => {
173
173
  A(null);
174
174
  }, [L.length]);
175
- let ft = (e) => {
175
+ let pt = (e) => {
176
176
  if (e.kind === "busy") return b("attachments.saveBusy", "The assistant started another reply, so nothing was sent. Your message and files are still here.");
177
177
  if (e.kind === "moved") return b("attachments.saveMoved", "You switched conversations while the files were being saved, so nothing was sent. Your message and files are still here.");
178
178
  let { failures: t } = e;
@@ -180,26 +180,26 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
180
180
  if (t.some((e) => e.code === a.quotaExceeded || e.code === a.quotaNotProvisioned)) return `${b("attachments.quotaFull", "File storage is full or not set up for this workspace, so the attachments couldn't be saved. Nothing was sent.")} ${b("attachments.retrySend", "Press Send to try again, or remove the file.")}`;
181
181
  let n = t[0], r = L.find((e) => e.id === n?.id)?.filename ?? "";
182
182
  return `${t.length <= 1 ? b("attachments.saveFailedOne", "{{name}} couldn't be saved, so nothing was sent.", { name: r }) : b("attachments.saveFailedMany", "{{count}} attachments couldn't be saved, so nothing was sent.", { count: t.length })} ${b("attachments.retrySend", "Press Send to try again, or remove the file.")}`;
183
- }, pt = o((e) => {
183
+ }, mt = o((e) => {
184
184
  e.key === "Enter" && !e.shiftKey && (e.preventDefault(), Z());
185
- }, [Z]), mt = o((e) => {
185
+ }, [Z]), ht = o((e) => {
186
186
  if (e.key === "Escape") {
187
187
  le(e) && e.stopPropagation();
188
188
  return;
189
189
  }
190
190
  ce(e) && (e.preventDefault(), j(null), Z());
191
- }, [Z]), ht = o((e) => {
191
+ }, [Z]), gt = o((e) => {
192
192
  let t = Array.from(e.clipboardData?.files ?? []);
193
193
  t.length !== 0 && (e.preventDefault(), R(t));
194
- }, [R]), gt = o((e) => {
195
- Array.from(e.dataTransfer?.types ?? []).includes("Files") && (I.current += 1, Ie(!0));
196
- }, []), _t = o(() => {
197
- I.current = Math.max(0, I.current - 1), I.current === 0 && Ie(!1);
198
- }, []), vt = o((e) => {
199
- Array.from(e.dataTransfer?.types ?? []).includes("Files") && e.preventDefault();
194
+ }, [R]), _t = o((e) => {
195
+ Array.from(e.dataTransfer?.types ?? []).includes("Files") && (I.current += 1, Le(!0));
196
+ }, []), vt = o(() => {
197
+ I.current = Math.max(0, I.current - 1), I.current === 0 && Le(!1);
200
198
  }, []), yt = o((e) => {
201
- e.preventDefault(), I.current = 0, Ie(!1), R(e.dataTransfer?.files ?? null);
202
- }, [R]), bt = (e) => {
199
+ Array.from(e.dataTransfer?.types ?? []).includes("Files") && e.preventDefault();
200
+ }, []), bt = o((e) => {
201
+ e.preventDefault(), I.current = 0, Le(!1), R(e.dataTransfer?.files ?? null);
202
+ }, [R]), xt = (e) => {
203
203
  switch (e) {
204
204
  case "too-many": return b("attachments.tooMany", "You can attach up to {{max}} files per message.", { max: 5 });
205
205
  case "too-large": return b("attachments.tooLarge", "That file is larger than 10 MB.");
@@ -208,7 +208,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
208
208
  case "unsupported-image": return b("attachments.unsupportedImage", "This device can't read that image format, so it can't be resized to send. Save it as JPEG and try again.");
209
209
  case "too-large-to-save": return b("attachments.tooLargeToSave", "That file is over 5 MB, so it can't be saved to Files, and no text could be read from it.");
210
210
  }
211
- }, xt = (() => {
211
+ }, St = (() => {
212
212
  switch (W.error) {
213
213
  case "not-allowed": return b("voice.denied", "Microphone access is blocked. Allow it in your browser settings to dictate.");
214
214
  case "audio-capture": return b("voice.noMic", "No microphone was found.");
@@ -217,8 +217,8 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
217
217
  case "unknown": return b("voice.failed", "Dictation stopped unexpectedly.");
218
218
  default: return null;
219
219
  }
220
- })(), St = (e, n) => O ? /* @__PURE__ */ f(t, {
221
- onDismiss: ct,
220
+ })(), Ct = (e, n) => O ? /* @__PURE__ */ f(t, {
221
+ onDismiss: lt,
222
222
  children: /* @__PURE__ */ p("p", {
223
223
  className: "flex items-center justify-center gap-2 text-text-muted",
224
224
  "data-testid": "assistant-commit-status",
@@ -230,18 +230,18 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
230
230
  /* @__PURE__ */ f("span", { children: b("attachments.saving", "Saving your attachments…") }),
231
231
  /* @__PURE__ */ f("button", {
232
232
  type: "button",
233
- onClick: ct,
233
+ onClick: lt,
234
234
  className: "rounded text-text-primary underline underline-offset-2 hover:text-action-primary-bg focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
235
235
  "data-testid": "assistant-commit-cancel",
236
236
  children: b("attachments.cancelSaving", "Cancel")
237
237
  })
238
238
  ]
239
239
  })
240
- }) : Re ? /* @__PURE__ */ f("p", {
240
+ }) : ze ? /* @__PURE__ */ f("p", {
241
241
  className: "text-status-error-text",
242
242
  role: "alert",
243
243
  "data-testid": "assistant-commit-failed",
244
- children: ft(Re)
244
+ children: pt(ze)
245
245
  }) : W.isStarting && !W.isListening ? /* @__PURE__ */ f("p", {
246
246
  className: "text-text-muted",
247
247
  "data-testid": "assistant-voice-starting",
@@ -250,20 +250,20 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
250
250
  className: "text-status-error-text",
251
251
  "data-testid": "assistant-voice-status",
252
252
  children: [/* @__PURE__ */ f(de, {}), W.interim || b("voice.listening", "Listening… speak now, tap the square to stop")]
253
- }) : xt ? /* @__PURE__ */ f("p", {
253
+ }) : St ? /* @__PURE__ */ f("p", {
254
254
  className: "text-status-error-text",
255
255
  "data-testid": "assistant-voice-error",
256
- children: xt
257
- }) : Ye ? /* @__PURE__ */ f("button", {
256
+ children: St
257
+ }) : Xe ? /* @__PURE__ */ f("button", {
258
258
  type: "button",
259
- onClick: Qe,
259
+ onClick: $e,
260
260
  className: "text-status-error-text underline-offset-2 hover:underline",
261
261
  "data-testid": "assistant-attachment-rejection",
262
- children: bt(Ye)
263
- }) : Je === "failed" ? /* @__PURE__ */ f("p", {
262
+ children: xt(Xe)
263
+ }) : Ye === "failed" ? /* @__PURE__ */ f("p", {
264
264
  className: "text-status-error-text",
265
265
  "data-testid": "assistant-attachment-blocked",
266
- children: at.length === 1 ? b("attachments.blockedOne", "{{name}} didn't upload. Retry or remove it before sending.", { name: at[0].filename }) : b("attachments.blockedMany", "{{count}} attachments didn't upload. Retry or remove them before sending.", { count: at.length })
266
+ children: ot.length === 1 ? b("attachments.blockedOne", "{{name}} didn't upload. Retry or remove it before sending.", { name: ot[0].filename }) : b("attachments.blockedMany", "{{count}} attachments didn't upload. Retry or remove them before sending.", { count: ot.length })
267
267
  }) : n ? /* @__PURE__ */ f("p", {
268
268
  className: "text-text-muted",
269
269
  "data-testid": "assistant-stopping-status",
@@ -279,15 +279,15 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
279
279
  if (C) {
280
280
  let e = _ !== void 0 && q.length === 0 && L.length === 0 && !W.isActive, t = "focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--color-bg-elevated)]";
281
281
  return /* @__PURE__ */ p("div", {
282
- ref: Ge,
282
+ ref: Ke,
283
283
  className: "flex-shrink-0 px-3 pb-3 pt-1.5",
284
284
  children: [
285
285
  Pe,
286
286
  /* @__PURE__ */ p("div", {
287
- onDragEnter: gt,
288
- onDragLeave: _t,
289
- onDragOver: vt,
290
- onDrop: yt,
287
+ onDragEnter: _t,
288
+ onDragLeave: vt,
289
+ onDragOver: yt,
290
+ onDrop: bt,
291
291
  className: `flex flex-col rounded-3xl border bg-bg-elevated shadow-[var(--shadow-elevation-2)] transition-colors focus-within:border-[var(--color-focus-ring)] focus-within:ring-1 focus-within:ring-[var(--color-focus-ring)] ${D ? "border-dashed border-[var(--color-focus-ring)]" : "border-[var(--color-text-muted)]"}`,
292
292
  "data-testid": "assistant-composer",
293
293
  "data-presentation": "compact",
@@ -296,22 +296,22 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
296
296
  className: "px-3 pt-3 empty:hidden",
297
297
  children: /* @__PURE__ */ f(ae, {
298
298
  attachments: L,
299
- onRemove: Xe,
300
- onRetry: Ze,
299
+ onRemove: Ze,
300
+ onRetry: Qe,
301
301
  disabled: S || O,
302
- preparingCount: qe
302
+ preparingCount: Je
303
303
  })
304
304
  }),
305
305
  /* @__PURE__ */ f("textarea", {
306
- ref: Fe,
306
+ ref: Ie,
307
307
  value: T,
308
- onChange: (e) => dt(e.target.value),
309
- onKeyDown: mt,
310
- onPaste: ht,
308
+ onChange: (e) => ft(e.target.value),
309
+ onKeyDown: ht,
310
+ onPaste: gt,
311
311
  disabled: S,
312
312
  readOnly: O,
313
313
  "aria-busy": O || void 0,
314
- placeholder: D ? b("composer.dropHere", "Drop files to attach") : it,
314
+ placeholder: D ? b("composer.dropHere", "Drop files to attach") : at,
315
315
  rows: 1,
316
316
  className: "min-h-14 w-full resize-none bg-transparent px-5 pb-2 pt-4 text-base leading-6 text-text-primary placeholder:text-text-muted focus:outline-none disabled:opacity-50",
317
317
  "aria-label": b("chatInput.ariaLabel", "Message input"),
@@ -322,12 +322,13 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
322
322
  children: [
323
323
  /* @__PURE__ */ f(ie, {
324
324
  onFiles: R,
325
- canAddMore: $e,
325
+ canAddMore: et,
326
326
  disabled: S || O,
327
327
  showLabel: !0,
328
328
  capMenuHeight: !0
329
329
  }),
330
330
  /* @__PURE__ */ f(se, {
331
+ readOnly: Fe,
331
332
  mode: Se,
332
333
  availableModes: g,
333
334
  onModeChange: we,
@@ -343,9 +344,9 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
343
344
  disabled: S || O
344
345
  }),
345
346
  $ ? /* @__PURE__ */ f("button", {
346
- ref: ut,
347
+ ref: dt,
347
348
  type: "button",
348
- onClick: lt,
349
+ onClick: ut,
349
350
  className: `flex size-10 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg text-action-primary-text transition-colors hover:bg-action-primary-bg-hover ${t} ${M === null ? "" : "cursor-default opacity-60"}`,
350
351
  "aria-label": M === null ? b("composer.stop", "Stop the reply") : b("composer.stopping", "Stopping the reply…"),
351
352
  title: M === null ? b("composer.stop", "Stop the reply") : b("composer.stopping", "Stopping the reply…"),
@@ -371,7 +372,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
371
372
  className: `flex size-10 flex-shrink-0 items-center justify-center rounded-full transition-colors ${t} ${Y ? "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg-hover" : "bg-[var(--color-bg-disabled)] text-[var(--color-text-disabled)]"}`,
372
373
  "aria-label": b("chatInput.send", "Send message"),
373
374
  "data-testid": "assistant-send",
374
- children: h || Ke || O ? /* @__PURE__ */ f(d, {
375
+ children: h || qe || O ? /* @__PURE__ */ f(d, {
375
376
  className: "size-5 motion-safe:animate-spin",
376
377
  "aria-hidden": "true"
377
378
  }) : /* @__PURE__ */ f(he, {
@@ -391,7 +392,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
391
392
  /* @__PURE__ */ f("div", {
392
393
  className: "mt-1.5 px-1 text-center text-xs",
393
394
  "aria-live": "polite",
394
- children: St(ze !== null, M !== null)
395
+ children: Ct(Be !== null, M !== null)
395
396
  })
396
397
  ]
397
398
  });
@@ -400,26 +401,26 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
400
401
  className: "flex-shrink-0 px-3 pb-3 pt-1.5",
401
402
  children: [
402
403
  /* @__PURE__ */ p("div", {
403
- onDragEnter: gt,
404
- onDragLeave: _t,
405
- onDragOver: vt,
406
- onDrop: yt,
404
+ onDragEnter: _t,
405
+ onDragLeave: vt,
406
+ onDragOver: yt,
407
+ onDrop: bt,
407
408
  className: `rounded-2xl border p-2 shadow-sm transition-colors focus-within:border-action-primary-bg focus-within:ring-2 focus-within:ring-action-primary-bg/15 ${D ? "border-action-primary-bg border-dashed bg-action-primary-bg/5" : "border-border-default bg-bg-sunken"}`,
408
409
  "data-testid": "assistant-composer",
409
410
  children: [
410
411
  /* @__PURE__ */ f(ae, {
411
412
  attachments: L,
412
- onRemove: Xe,
413
- onRetry: Ze,
413
+ onRemove: Ze,
414
+ onRetry: Qe,
414
415
  disabled: S || O,
415
- preparingCount: qe
416
+ preparingCount: Je
416
417
  }),
417
418
  /* @__PURE__ */ p("div", {
418
419
  className: "flex items-end gap-2",
419
420
  children: [
420
421
  /* @__PURE__ */ f(ie, {
421
422
  onFiles: R,
422
- canAddMore: $e,
423
+ canAddMore: et,
423
424
  disabled: S || O,
424
425
  showLabel: !0
425
426
  }),
@@ -427,12 +428,12 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
427
428
  ref: w,
428
429
  value: T,
429
430
  onChange: (e) => E(e.target.value),
430
- onKeyDown: pt,
431
- onPaste: ht,
431
+ onKeyDown: mt,
432
+ onPaste: gt,
432
433
  disabled: S,
433
434
  readOnly: O,
434
435
  "aria-busy": O || void 0,
435
- placeholder: D ? b("composer.dropHere", "Drop files to attach") : it,
436
+ placeholder: D ? b("composer.dropHere", "Drop files to attach") : at,
436
437
  rows: 1,
437
438
  className: "min-h-[36px] flex-1 resize-none self-center bg-transparent px-1 py-2 text-[15px] leading-relaxed text-text-primary placeholder:text-text-muted focus:outline-none disabled:opacity-50",
438
439
  "aria-label": b("chatInput.ariaLabel", "Message input"),
@@ -454,7 +455,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
454
455
  className: `flex size-9 flex-shrink-0 items-center justify-center rounded-full shadow-sm transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${Y ? "bg-action-primary-bg text-action-primary-text hover:scale-105 hover:bg-action-primary-bg-hover" : "bg-bg-elevated text-text-muted"}`,
455
456
  "aria-label": b("chatInput.send", "Send message"),
456
457
  "data-testid": "assistant-send",
457
- children: h || Ke || O ? /* @__PURE__ */ f(d, { className: "size-4 motion-safe:animate-spin" }) : /* @__PURE__ */ f(he, { className: "size-4" })
458
+ children: h || qe || O ? /* @__PURE__ */ f(d, { className: "size-4 motion-safe:animate-spin" }) : /* @__PURE__ */ f(he, { className: "size-4" })
458
459
  })
459
460
  ]
460
461
  }),
@@ -478,7 +479,7 @@ var m = ({ writeAccessDenied: m = !1, onSend: ye, disabled: h = !1, readOnly: be
478
479
  /* @__PURE__ */ f("div", {
479
480
  className: "mt-1.5 px-1 text-center text-[11px]",
480
481
  "aria-live": "polite",
481
- children: St(!1, !1)
482
+ children: Ct(!1, !1)
482
483
  })
483
484
  ]
484
485
  });
@@ -15,6 +15,12 @@ export interface AssistantModeMenuProps {
15
15
  disabled?: boolean;
16
16
  /** Why it is disabled. Ignored while enabled. Absent while disabled: `busy`. */
17
17
  disabledReason?: AssistantModeDisabledReason | null;
18
+ /**
19
+ * BOFF-10180: show the mode as the static label, whatever is on offer: nothing
20
+ * to choose here (the Quick assistant window). Absent: the menu, or the static
21
+ * label when there is exactly one mode and no Auto.
22
+ */
23
+ readOnly?: boolean;
18
24
  }
19
25
  /** A mode's name, exactly as its classic pill names it: the translated product label. */
20
26
  export declare function assistantModeOptionName(tr: AssistantTr, modeConfig: Pick<AssistantModeConfig, 'id'> & Partial<Pick<AssistantModeConfig, 'label' | 'producesArtifacts'>>): string;