@burdenoff/fe-libs 2026.1007.5 → 2026.1008.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/assistant/api.d.ts +11 -0
- package/dist/shared/assistant/api.d.ts.map +1 -1
- package/dist/shared/assistant/api.js +6 -2
- package/dist/shared/assistant/attachmentCommit.d.ts +175 -0
- package/dist/shared/assistant/attachmentCommit.d.ts.map +1 -0
- package/dist/shared/assistant/attachmentCommit.js +638 -0
- package/dist/shared/assistant/attachments.d.ts +39 -19
- package/dist/shared/assistant/attachments.d.ts.map +1 -1
- package/dist/shared/assistant/conversation.d.ts +14 -0
- package/dist/shared/assistant/conversation.d.ts.map +1 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts +8 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.d.ts.map +1 -1
- package/dist/shared/assistant/createSandboxAssistantTransport.js +70 -51
- package/dist/shared/assistant/history/historyEngine.js +280 -280
- package/dist/shared/assistant/history/historyMapping.d.ts.map +1 -1
- package/dist/shared/assistant/history/historyMapping.js +19 -12
- package/dist/shared/assistant/i18nManifest.d.ts +23 -2
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +26 -3
- package/dist/shared/assistant/index.d.ts +9 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommandCopy.d.ts +23 -0
- package/dist/shared/assistant/localUiCommandCopy.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommandCopy.js +60 -23
- package/dist/shared/assistant/localUiCommands.d.ts +29 -0
- package/dist/shared/assistant/localUiCommands.d.ts.map +1 -1
- package/dist/shared/assistant/localUiCommands.js +18 -7
- package/dist/shared/assistant/types.d.ts +19 -8
- package/dist/shared/assistant/types.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +1624 -1266
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts +18 -3
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMarkdownRenderer.js +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts +5 -0
- package/dist/shared/assistant/ui/AssistantMessageItem.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageItem.js +89 -84
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts +5 -0
- package/dist/shared/assistant/ui/AssistantMessageList.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantMessageList.js +26 -25
- package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts +45 -0
- package/dist/shared/assistant/ui/AssistantUiOfferLink.d.ts.map +1 -0
- package/dist/shared/assistant/ui/AssistantUiOfferLink.js +56 -0
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts +9 -0
- package/dist/shared/assistant/ui/assistantOverlayState.d.ts.map +1 -1
- package/dist/shared/assistant/ui/assistantOverlayState.js +37 -28
- package/dist/shared/assistant/ui/composer/AssistantAttachmentChips.d.ts +8 -5
- package/dist/shared/assistant/ui/composer/AssistantAttachmentChips.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantAttachmentChips.js +26 -9
- package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts +3 -2
- package/dist/shared/assistant/ui/composer/AssistantComposer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantComposer.js +214 -125
- package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.d.ts.map +1 -1
- package/dist/shared/assistant/ui/composer/AssistantConnectSourceItem.js +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +15 -0
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +127 -118
- package/dist/shared/assistant/ui/voice/VoiceConversationView.d.ts +6 -1
- package/dist/shared/assistant/ui/voice/VoiceConversationView.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceConversationView.js +7 -7
- package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts +6 -1
- package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceTranscriptDrawer.js +15 -12
- package/dist/shared/assistant/uiActions/actOnResolve.d.ts +108 -0
- package/dist/shared/assistant/uiActions/actOnResolve.d.ts.map +1 -0
- package/dist/shared/assistant/uiActions/actOnResolve.js +51 -0
- package/dist/shared/assistant/uiActions/linkContext.d.ts +29 -0
- package/dist/shared/assistant/uiActions/linkContext.d.ts.map +1 -1
- package/dist/shared/assistant/uiActions/linkContext.js +37 -10
- package/dist/shared/assistant/uiActions/navIntent.d.ts +58 -0
- package/dist/shared/assistant/uiActions/navIntent.d.ts.map +1 -0
- package/dist/shared/assistant/uiActions/navIntent.js +79 -0
- package/dist/shared/assistant/uiActions/navigateAction.d.ts +6 -1
- package/dist/shared/assistant/uiActions/navigateAction.d.ts.map +1 -1
- package/dist/shared/assistant/uiActions/navigateAction.js +18 -14
- package/dist/shared/assistant/uiActions/navigationOutcome.d.ts +16 -2
- package/dist/shared/assistant/uiActions/navigationOutcome.d.ts.map +1 -1
- package/dist/shared/assistant/uiActions/navigationOutcome.js +6 -2
- package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts +39 -0
- package/dist/shared/assistant/uiActions/offerYesOnSurface.d.ts.map +1 -0
- package/dist/shared/assistant/uiActions/offerYesOnSurface.js +34 -0
- package/dist/shared/assistant/uiActions/uiCatalogue.d.ts +14 -0
- package/dist/shared/assistant/uiActions/uiCatalogue.d.ts.map +1 -1
- package/dist/shared/assistant/uiActions/uiCatalogue.js +23 -3
- package/dist/shared/assistant/uiActions/uiOffers.d.ts +249 -0
- package/dist/shared/assistant/uiActions/uiOffers.d.ts.map +1 -0
- package/dist/shared/assistant/uiActions/uiOffers.js +195 -0
- package/dist/shared/assistant/useAssistantAttachments.d.ts +20 -2
- package/dist/shared/assistant/useAssistantAttachments.d.ts.map +1 -1
- package/dist/shared/assistant/useAssistantAttachments.js +146 -202
- package/dist/shared/assistant/useAttachmentCommitter.d.ts +17 -0
- package/dist/shared/assistant/useAttachmentCommitter.d.ts.map +1 -0
- package/dist/shared/assistant/useAttachmentCommitter.js +41 -0
- package/dist/shared/assistant/voiceCommit.d.ts +36 -0
- package/dist/shared/assistant/voiceCommit.d.ts.map +1 -0
- package/dist/shared/assistant/voiceCommit.js +24 -0
- package/dist/shared/assistant/writeProposals.d.ts +6 -0
- package/dist/shared/assistant/writeProposals.d.ts.map +1 -1
- package/dist/shared/assistant/writeReplyBinder.d.ts +40 -0
- package/dist/shared/assistant/writeReplyBinder.d.ts.map +1 -1
- package/dist/shared/assistant/writeReplyBinder.js +100 -83
- package/dist/shared/assistant/writeReplySend.d.ts +14 -0
- package/dist/shared/assistant/writeReplySend.d.ts.map +1 -1
- package/dist/shared/assistant/writeReplySend.js +32 -29
- package/dist/shared/hooks/index.d.ts +2 -0
- package/dist/shared/hooks/index.d.ts.map +1 -1
- package/dist/shared/navigation/unsavedChanges.d.ts +83 -0
- package/dist/shared/navigation/unsavedChanges.d.ts.map +1 -0
- package/dist/shared/navigation/unsavedChanges.js +46 -0
- package/dist/shared-assistant.js +247 -238
- package/dist/shared-hooks.js +10 -9
- package/dist/shared.js +20 -19
- package/dist/storage/filesPort.d.ts +111 -0
- package/dist/storage/filesPort.d.ts.map +1 -0
- package/dist/storage/filesPort.js +262 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +9 -8
- package/package.json +1 -1
|
@@ -1,184 +1,273 @@
|
|
|
1
1
|
import { useI18n as e } from "../../../providers/shell/I18nProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
2
|
+
import { EscapeLayer as t } from "../../../components/EscapeLayer.js";
|
|
3
|
+
import { useVoiceInput as n } from "../../voice/useVoiceInput.js";
|
|
4
|
+
import { useAssistantTr as r } from "../../i18n.js";
|
|
5
|
+
import { useAssistantStore as i } from "../../store.js";
|
|
6
|
+
import { languageDisplayName as ee } from "../../voice/speechVoices.js";
|
|
7
|
+
import { resolveAssistantLanguage as te } from "../../voice/languages.js";
|
|
8
|
+
import { getSendableAttachments as a } from "../../attachments.js";
|
|
9
|
+
import { ATTACHMENT_COMMIT_CODES as o } from "../../attachmentCommit.js";
|
|
10
|
+
import { AssistantAttachmentButton as ne } from "./AssistantAttachmentButton.js";
|
|
11
|
+
import { AssistantAttachmentChips as re } from "./AssistantAttachmentChips.js";
|
|
12
|
+
import { AssistantModeSelector as ie } from "./AssistantModeSelector.js";
|
|
13
|
+
import { AssistantVoiceButton as ae, ListeningDot as oe } from "./AssistantVoiceButton.js";
|
|
14
|
+
import { AssistantVoiceSessionButton as se } from "../voice/AssistantVoiceSessionButton.js";
|
|
15
|
+
import { useAssistantAttachments as ce } from "../../useAssistantAttachments.js";
|
|
16
|
+
import { useCallback as s, useEffect as c, useLayoutEffect as le, useMemo as ue, useRef as l, useState as u } from "react";
|
|
17
|
+
import { ArrowUp as de, Loader2 as d } from "lucide-react";
|
|
18
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
17
19
|
//#region src/shared/assistant/ui/composer/AssistantComposer.tsx
|
|
18
|
-
var
|
|
19
|
-
let
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}, [
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
}, []),
|
|
26
|
-
onFinalize:
|
|
27
|
-
language:
|
|
28
|
-
}),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
20
|
+
var fe = 200, m = ({ writeAccessDenied: m = !1, onSend: h, disabled: g = !1, readOnly: pe = !1, placeholder: me, mode: he, availableModes: _, attachmentCharsPerFile: ge, onModeChange: _e, auto: ve, onStartVoiceSession: v, onDraftStart: y }) => {
|
|
21
|
+
let b = r(), { locale: x } = e(), S = g || pe, C = l(null), [w, T] = u(""), [E, D] = u(!1), [O, k] = u(!1), A = l(!1), [j, M] = u(null), N = l(0), { attachments: P, isBusy: ye, preparingCount: be, sendBlocker: F, rejection: I, addFiles: L, remove: xe, retry: Se, clear: R, clearRejection: Ce, canAddMore: we, commit: z, cancelCommit: B } = ce({ perFileChars: ge }), V = w.trim() !== "" || P.length > 0, H = l(!1);
|
|
22
|
+
c(() => {
|
|
23
|
+
V && !H.current ? (H.current = !0, y?.()) : V || (H.current = !1);
|
|
24
|
+
}, [V, y]);
|
|
25
|
+
let Te = s((e) => {
|
|
26
|
+
T((t) => t ? `${t.replace(/\s+$/, "")} ${e}` : e);
|
|
27
|
+
}, []), U = i((e) => e.assistantLanguage), W = n({
|
|
28
|
+
onFinalize: Te,
|
|
29
|
+
language: ue(() => te(U, x), [U, x]).tag
|
|
30
|
+
}), Ee = me ?? b("composer.placeholder", "Ask me anything…"), G = w.trim(), K = a(P), q = P.filter((e) => e.status === "error"), J = (G.length > 0 || K.length > 0) && !S && !O && F === null, Y = K.some((e) => !e.fileId && !e.inlineOnly), X = l(S);
|
|
31
|
+
X.current = S;
|
|
32
|
+
let Z = l(!0);
|
|
33
|
+
c(() => (Z.current = !0, () => {
|
|
34
|
+
Z.current = !1;
|
|
35
|
+
}), []), le(() => {
|
|
36
|
+
let e = C.current;
|
|
37
|
+
e && (e.style.height = "auto", e.style.height = `${Math.min(e.scrollHeight, fe)}px`);
|
|
38
|
+
}, [w]);
|
|
39
|
+
let Q = s(async () => {
|
|
40
|
+
if (!J || A.current) return;
|
|
41
|
+
W.isActive && W.stop();
|
|
42
|
+
let e = w.trim();
|
|
43
|
+
if (M(null), !Y) {
|
|
44
|
+
h(e, K), T(""), R();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let t = i.getState().activeConversationId;
|
|
48
|
+
A.current = !0, k(!0);
|
|
49
|
+
try {
|
|
50
|
+
let n = await z();
|
|
51
|
+
if (!Z.current) {
|
|
52
|
+
n.ok && await n.rollback();
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!n.ok) {
|
|
56
|
+
n.cancelled || M({
|
|
57
|
+
kind: "failed",
|
|
58
|
+
failures: n.failures
|
|
59
|
+
});
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (X.current) {
|
|
63
|
+
await n.rollback(), Z.current && M({
|
|
64
|
+
kind: "busy",
|
|
65
|
+
failures: []
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
let r = i.getState();
|
|
70
|
+
if (!(r.activeConversationId === t && (t === null || r.conversations.some((e) => e.id === t)))) {
|
|
71
|
+
await n.rollback(), Z.current && M({
|
|
72
|
+
kind: "moved",
|
|
73
|
+
failures: []
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
h(e, a(n.attachments)), n.handedOver(), T(""), R();
|
|
78
|
+
} finally {
|
|
79
|
+
A.current = !1, Z.current && k(!1);
|
|
80
|
+
}
|
|
35
81
|
}, [
|
|
36
|
-
|
|
37
|
-
v,
|
|
38
|
-
A,
|
|
82
|
+
J,
|
|
39
83
|
Y,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
84
|
+
z,
|
|
85
|
+
h,
|
|
86
|
+
w,
|
|
87
|
+
K,
|
|
88
|
+
R,
|
|
89
|
+
W
|
|
90
|
+
]), $ = s(() => {
|
|
91
|
+
B(), C.current?.focus();
|
|
92
|
+
}, [B]);
|
|
93
|
+
c(() => {
|
|
94
|
+
M(null);
|
|
95
|
+
}, [P.length]);
|
|
96
|
+
let De = (e) => {
|
|
97
|
+
if (e.kind === "busy") return b("attachments.saveBusy", "The assistant started another reply, so nothing was sent. Your message and files are still here.");
|
|
98
|
+
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.");
|
|
99
|
+
let { failures: t } = e;
|
|
100
|
+
if (t.some((e) => e.code === o.quotaExceeded || e.code === o.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.")}`;
|
|
101
|
+
let n = t[0], r = P.find((e) => e.id === n?.id)?.filename ?? "";
|
|
102
|
+
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.")}`;
|
|
103
|
+
}, Oe = s((e) => {
|
|
43
104
|
e.key === "Enter" && !e.shiftKey && (e.preventDefault(), Q());
|
|
44
|
-
}, [Q]),
|
|
105
|
+
}, [Q]), ke = s((e) => {
|
|
45
106
|
let t = Array.from(e.clipboardData?.files ?? []);
|
|
46
|
-
t.length !== 0 && (e.preventDefault(),
|
|
47
|
-
}, [
|
|
48
|
-
Array.from(e.dataTransfer?.types ?? []).includes("Files") && (
|
|
49
|
-
}, []),
|
|
50
|
-
|
|
51
|
-
}, []),
|
|
107
|
+
t.length !== 0 && (e.preventDefault(), L(t));
|
|
108
|
+
}, [L]), Ae = s((e) => {
|
|
109
|
+
Array.from(e.dataTransfer?.types ?? []).includes("Files") && (N.current += 1, D(!0));
|
|
110
|
+
}, []), je = s(() => {
|
|
111
|
+
N.current = Math.max(0, N.current - 1), N.current === 0 && D(!1);
|
|
112
|
+
}, []), Me = s((e) => {
|
|
52
113
|
Array.from(e.dataTransfer?.types ?? []).includes("Files") && e.preventDefault();
|
|
53
|
-
}, []),
|
|
54
|
-
e.preventDefault(),
|
|
55
|
-
}, [
|
|
114
|
+
}, []), Ne = s((e) => {
|
|
115
|
+
e.preventDefault(), N.current = 0, D(!1), L(e.dataTransfer?.files ?? null);
|
|
116
|
+
}, [L]), Pe = (e) => {
|
|
56
117
|
switch (e) {
|
|
57
|
-
case "too-many": return
|
|
58
|
-
case "too-large": return
|
|
59
|
-
case "empty": return
|
|
60
|
-
case "unreadable": return
|
|
61
|
-
case "unsupported-image": return
|
|
118
|
+
case "too-many": return b("attachments.tooMany", "You can attach up to {{max}} files per message.", { max: 5 });
|
|
119
|
+
case "too-large": return b("attachments.tooLarge", "That file is larger than 10 MB.");
|
|
120
|
+
case "empty": return b("attachments.empty", "That file is empty.");
|
|
121
|
+
case "unreadable": return b("attachments.unreadable", "That file could not be read.");
|
|
122
|
+
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.");
|
|
123
|
+
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.");
|
|
62
124
|
}
|
|
63
|
-
},
|
|
64
|
-
switch (
|
|
65
|
-
case "not-allowed": return
|
|
66
|
-
case "audio-capture": return
|
|
67
|
-
case "network": return
|
|
68
|
-
case "language-not-supported": return
|
|
69
|
-
case "unknown": return
|
|
125
|
+
}, Fe = (() => {
|
|
126
|
+
switch (W.error) {
|
|
127
|
+
case "not-allowed": return b("voice.denied", "Microphone access is blocked. Allow it in your browser settings to dictate.");
|
|
128
|
+
case "audio-capture": return b("voice.noMic", "No microphone was found.");
|
|
129
|
+
case "network": return b("voice.network", "Speech recognition is offline right now.");
|
|
130
|
+
case "language-not-supported": return b("voice.languageNotSupported", "This browser cannot recognise spoken {{language}}. Try a different browser, or type instead.", { language: ee(W.language, x) });
|
|
131
|
+
case "unknown": return b("voice.failed", "Dictation stopped unexpectedly.");
|
|
70
132
|
default: return null;
|
|
71
133
|
}
|
|
72
134
|
})();
|
|
73
|
-
return /* @__PURE__ */
|
|
135
|
+
return /* @__PURE__ */ p("div", {
|
|
74
136
|
className: "flex-shrink-0 px-3 pb-3 pt-1.5",
|
|
75
137
|
children: [
|
|
76
|
-
/* @__PURE__ */
|
|
77
|
-
onDragEnter:
|
|
78
|
-
onDragLeave:
|
|
79
|
-
onDragOver:
|
|
80
|
-
onDrop:
|
|
81
|
-
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 ${
|
|
138
|
+
/* @__PURE__ */ p("div", {
|
|
139
|
+
onDragEnter: Ae,
|
|
140
|
+
onDragLeave: je,
|
|
141
|
+
onDragOver: Me,
|
|
142
|
+
onDrop: Ne,
|
|
143
|
+
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 ${E ? "border-action-primary-bg border-dashed bg-action-primary-bg/5" : "border-border-default bg-bg-sunken"}`,
|
|
82
144
|
"data-testid": "assistant-composer",
|
|
83
145
|
children: [
|
|
84
|
-
/* @__PURE__ */
|
|
85
|
-
attachments:
|
|
86
|
-
onRemove:
|
|
87
|
-
onRetry:
|
|
88
|
-
disabled: O,
|
|
89
|
-
preparingCount:
|
|
146
|
+
/* @__PURE__ */ f(re, {
|
|
147
|
+
attachments: P,
|
|
148
|
+
onRemove: xe,
|
|
149
|
+
onRetry: Se,
|
|
150
|
+
disabled: S || O,
|
|
151
|
+
preparingCount: be
|
|
90
152
|
}),
|
|
91
|
-
/* @__PURE__ */
|
|
153
|
+
/* @__PURE__ */ p("div", {
|
|
92
154
|
className: "flex items-end gap-2",
|
|
93
155
|
children: [
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
onFiles:
|
|
96
|
-
canAddMore:
|
|
97
|
-
disabled: O,
|
|
156
|
+
/* @__PURE__ */ f(ne, {
|
|
157
|
+
onFiles: L,
|
|
158
|
+
canAddMore: we,
|
|
159
|
+
disabled: S || O,
|
|
98
160
|
showLabel: !0
|
|
99
161
|
}),
|
|
100
|
-
/* @__PURE__ */
|
|
101
|
-
ref:
|
|
102
|
-
value:
|
|
103
|
-
onChange: (e) =>
|
|
104
|
-
onKeyDown:
|
|
105
|
-
onPaste:
|
|
106
|
-
disabled:
|
|
107
|
-
|
|
162
|
+
/* @__PURE__ */ f("textarea", {
|
|
163
|
+
ref: C,
|
|
164
|
+
value: w,
|
|
165
|
+
onChange: (e) => T(e.target.value),
|
|
166
|
+
onKeyDown: Oe,
|
|
167
|
+
onPaste: ke,
|
|
168
|
+
disabled: S,
|
|
169
|
+
readOnly: O,
|
|
170
|
+
"aria-busy": O || void 0,
|
|
171
|
+
placeholder: E ? b("composer.dropHere", "Drop files to attach") : Ee,
|
|
108
172
|
rows: 1,
|
|
109
173
|
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",
|
|
110
|
-
"aria-label":
|
|
174
|
+
"aria-label": b("chatInput.ariaLabel", "Message input"),
|
|
111
175
|
"data-testid": "assistant-input"
|
|
112
176
|
}),
|
|
113
|
-
|
|
114
|
-
isListening:
|
|
115
|
-
isStarting:
|
|
116
|
-
onToggle:
|
|
117
|
-
disabled: O
|
|
177
|
+
W.isSupported && /* @__PURE__ */ f(ae, {
|
|
178
|
+
isListening: W.isListening,
|
|
179
|
+
isStarting: W.isStarting,
|
|
180
|
+
onToggle: W.toggle,
|
|
181
|
+
disabled: S || O
|
|
118
182
|
}),
|
|
119
|
-
|
|
120
|
-
onStart:
|
|
121
|
-
disabled: O
|
|
122
|
-
}) : /* @__PURE__ */
|
|
183
|
+
v && G.length === 0 && P.length === 0 && !W.isActive ? /* @__PURE__ */ f(se, {
|
|
184
|
+
onStart: v,
|
|
185
|
+
disabled: S || O
|
|
186
|
+
}) : /* @__PURE__ */ f("button", {
|
|
123
187
|
type: "button",
|
|
124
|
-
onClick: Q,
|
|
125
|
-
disabled: !
|
|
126
|
-
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 ${
|
|
127
|
-
"aria-label":
|
|
188
|
+
onClick: () => void Q(),
|
|
189
|
+
disabled: !J,
|
|
190
|
+
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 ${J ? "bg-action-primary-bg text-action-primary-text hover:scale-105 hover:bg-action-primary-bg-hover" : "bg-bg-elevated text-text-muted"}`,
|
|
191
|
+
"aria-label": b("chatInput.send", "Send message"),
|
|
128
192
|
"data-testid": "assistant-send",
|
|
129
|
-
children:
|
|
193
|
+
children: g || ye || O ? /* @__PURE__ */ f(d, { className: "size-4 motion-safe:animate-spin" }) : /* @__PURE__ */ f(de, { className: "size-4" })
|
|
130
194
|
})
|
|
131
195
|
]
|
|
132
196
|
}),
|
|
133
|
-
|
|
197
|
+
_.length > 1 && /* @__PURE__ */ f("div", {
|
|
134
198
|
className: "mt-2 px-0.5",
|
|
135
|
-
children: /* @__PURE__ */
|
|
136
|
-
mode:
|
|
137
|
-
availableModes:
|
|
138
|
-
onModeChange:
|
|
139
|
-
disabled: O,
|
|
140
|
-
auto:
|
|
199
|
+
children: /* @__PURE__ */ f(ie, {
|
|
200
|
+
mode: he,
|
|
201
|
+
availableModes: _,
|
|
202
|
+
onModeChange: _e,
|
|
203
|
+
disabled: S || O,
|
|
204
|
+
auto: ve
|
|
141
205
|
})
|
|
142
206
|
})
|
|
143
207
|
]
|
|
144
208
|
}),
|
|
145
|
-
|
|
209
|
+
m ? /* @__PURE__ */ f("p", {
|
|
146
210
|
className: "mt-1.5 px-1 text-center text-[11px] text-status-warning",
|
|
147
211
|
"data-testid": "assistant-write-access-warning",
|
|
148
|
-
children:
|
|
212
|
+
children: b("composer.writeAccessDenied", "Changes may not save — your role in this workspace does not currently allow edits. You can still plan and review an action.")
|
|
149
213
|
}) : null,
|
|
150
|
-
/* @__PURE__ */
|
|
214
|
+
/* @__PURE__ */ f("div", {
|
|
151
215
|
className: "mt-1.5 px-1 text-center text-[11px]",
|
|
152
216
|
"aria-live": "polite",
|
|
153
|
-
children:
|
|
217
|
+
children: O ? /* @__PURE__ */ f(t, {
|
|
218
|
+
onDismiss: $,
|
|
219
|
+
children: /* @__PURE__ */ p("p", {
|
|
220
|
+
className: "flex items-center justify-center gap-2 text-text-muted",
|
|
221
|
+
"data-testid": "assistant-commit-status",
|
|
222
|
+
children: [
|
|
223
|
+
/* @__PURE__ */ f(d, {
|
|
224
|
+
className: "size-3 motion-safe:animate-spin",
|
|
225
|
+
"aria-hidden": "true"
|
|
226
|
+
}),
|
|
227
|
+
/* @__PURE__ */ f("span", { children: b("attachments.saving", "Saving your attachments…") }),
|
|
228
|
+
/* @__PURE__ */ f("button", {
|
|
229
|
+
type: "button",
|
|
230
|
+
onClick: $,
|
|
231
|
+
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",
|
|
232
|
+
"data-testid": "assistant-commit-cancel",
|
|
233
|
+
children: b("attachments.cancelSaving", "Cancel")
|
|
234
|
+
})
|
|
235
|
+
]
|
|
236
|
+
})
|
|
237
|
+
}) : j ? /* @__PURE__ */ f("p", {
|
|
238
|
+
className: "text-status-error-text",
|
|
239
|
+
role: "alert",
|
|
240
|
+
"data-testid": "assistant-commit-failed",
|
|
241
|
+
children: De(j)
|
|
242
|
+
}) : W.isStarting && !W.isListening ? /* @__PURE__ */ f("p", {
|
|
154
243
|
className: "text-text-muted",
|
|
155
244
|
"data-testid": "assistant-voice-starting",
|
|
156
|
-
children:
|
|
157
|
-
}) :
|
|
245
|
+
children: b("voice.starting", "Starting the microphone…")
|
|
246
|
+
}) : W.isListening ? /* @__PURE__ */ p("p", {
|
|
158
247
|
className: "text-status-error-text",
|
|
159
248
|
"data-testid": "assistant-voice-status",
|
|
160
|
-
children: [/* @__PURE__ */
|
|
161
|
-
}) :
|
|
249
|
+
children: [/* @__PURE__ */ f(oe, {}), W.interim || b("voice.listening", "Listening… speak now, tap the square to stop")]
|
|
250
|
+
}) : Fe ? /* @__PURE__ */ f("p", {
|
|
162
251
|
className: "text-status-error-text",
|
|
163
252
|
"data-testid": "assistant-voice-error",
|
|
164
|
-
children:
|
|
165
|
-
}) :
|
|
253
|
+
children: Fe
|
|
254
|
+
}) : I ? /* @__PURE__ */ f("button", {
|
|
166
255
|
type: "button",
|
|
167
|
-
onClick:
|
|
256
|
+
onClick: Ce,
|
|
168
257
|
className: "text-status-error-text underline-offset-2 hover:underline",
|
|
169
258
|
"data-testid": "assistant-attachment-rejection",
|
|
170
|
-
children:
|
|
171
|
-
}) :
|
|
259
|
+
children: Pe(I)
|
|
260
|
+
}) : F === "failed" ? /* @__PURE__ */ f("p", {
|
|
172
261
|
className: "text-status-error-text",
|
|
173
262
|
"data-testid": "assistant-attachment-blocked",
|
|
174
|
-
children:
|
|
175
|
-
}) : /* @__PURE__ */
|
|
263
|
+
children: q.length === 1 ? b("attachments.blockedOne", "{{name}} didn't upload. Retry or remove it before sending.", { name: q[0].filename }) : b("attachments.blockedMany", "{{count}} attachments didn't upload. Retry or remove them before sending.", { count: q.length })
|
|
264
|
+
}) : /* @__PURE__ */ f("p", {
|
|
176
265
|
className: "text-text-muted",
|
|
177
|
-
children:
|
|
266
|
+
children: b("composer.hint", "Enter to send · Shift+Enter for newline · drag or paste files to attach")
|
|
178
267
|
})
|
|
179
268
|
})
|
|
180
269
|
]
|
|
181
270
|
});
|
|
182
271
|
};
|
|
183
272
|
//#endregion
|
|
184
|
-
export {
|
|
273
|
+
export { m as AssistantComposer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantConnectSourceItem.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantConnectSourceItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAe,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAC;AAc9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,IAAI,EAChB,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,IAAI,CAKZ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kCAAkC,GAAG,UAAU,GAAG,QAAQ,CAAC;AAoBvE,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kCAAkC,CAAC;CACnD;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,+BAA+B,
|
|
1
|
+
{"version":3,"file":"AssistantConnectSourceItem.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/composer/AssistantConnectSourceItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAe,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAC;AAc9D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,IAAI,EAChB,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,IAAI,CAKZ;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kCAAkC,GAAG,UAAU,GAAG,QAAQ,CAAC;AAoBvE,MAAM,WAAW,+BAA+B;IAC9C,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,kCAAkC,CAAC;CACnD;AAED,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,+BAA+B,CA8F1E,CAAC"}
|
|
@@ -16,7 +16,7 @@ var d = "flex w-full items-center gap-2.5 border-t border-border-subtle px-3 py-
|
|
|
16
16
|
action: "assistant-connect-source-action"
|
|
17
17
|
}, m = ({ onActivate: m, presentation: h = "menuitem" }) => {
|
|
18
18
|
let g = e(), { href: _, open: v } = a(), y = r(), b = n(_), x = b === "internal" ? t(_) : null, S = o((e) => {
|
|
19
|
-
e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || (m?.(), !(!y || !x) && (e.preventDefault(), y(x)));
|
|
19
|
+
e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey || (m?.(), !(!y || !x) && (e.preventDefault(), y(x, "person")));
|
|
20
20
|
}, [
|
|
21
21
|
y,
|
|
22
22
|
x,
|
|
@@ -41,6 +41,16 @@ interface Props {
|
|
|
41
41
|
canAttachMore?: boolean;
|
|
42
42
|
/** Files being read — placeholder chips, see AssistantAttachmentChips. */
|
|
43
43
|
preparingAttachments?: number;
|
|
44
|
+
/**
|
|
45
|
+
* The spoken turn's files are being SAVED (BOFF-8677). Attaching and the chips' actions are
|
|
46
|
+
* disabled meanwhile, so the draft cannot change under the save.
|
|
47
|
+
*/
|
|
48
|
+
attachmentsLocked?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Some files could not be saved and were not sent with the question that was still asked
|
|
51
|
+
* ("2 attachments couldn't be saved and weren't sent."). Announced politely; clears itself.
|
|
52
|
+
*/
|
|
53
|
+
attachmentNotice?: string | null;
|
|
44
54
|
/** Reveals the assistant caption in step with the audio. */
|
|
45
55
|
spokenChunks?: {
|
|
46
56
|
chunks: string[];
|
|
@@ -83,6 +93,11 @@ interface Props {
|
|
|
83
93
|
closeLabel: string;
|
|
84
94
|
onClose: () => void;
|
|
85
95
|
} | null;
|
|
96
|
+
/**
|
|
97
|
+
* ★ BOFF-8060 (N3): drawn under one assistant turn in the transcript drawer
|
|
98
|
+
* — the page the model offered in that voice turn.
|
|
99
|
+
*/
|
|
100
|
+
renderAfterTurn?: (turnId: string) => ReactNode;
|
|
86
101
|
}
|
|
87
102
|
/**
|
|
88
103
|
* Full-screen voice conversation (BOFF-7120).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,EAAE,EACP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAS7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAqBjG,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,UAAU,KAAK;IACb,OAAO,EAAE,oBAAoB,CAAC;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACrD,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;IACjD,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D,6EAA6E;IAC7E,YAAY,CAAC,EAAE;QACb,OAAO,EAAE,SAAS,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"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"}
|