@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
|
@@ -17,242 +17,251 @@ import { useCallback as s, useEffect as c, useMemo as me, useRef as l, useState
|
|
|
17
17
|
import { Maximize2 as he, Minimize2 as ge, ScrollText as _e, X as d } from "lucide-react";
|
|
18
18
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
19
19
|
//#region src/shared/assistant/ui/voice/AssistantVoiceSession.tsx
|
|
20
|
-
var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: Se, notice: h = null, privacyNotice: g = null, spoken: _, onInterrupt: Ce, onToggleMute: v, attachments: y = [], onAttachFiles: b, onRemoveAttachment: we, onRetryAttachment: Te, canAttachMore: Ee = !0, preparingAttachments: x = 0,
|
|
21
|
-
let
|
|
22
|
-
t("assistant.transcript", me(() => ({ run: () =>
|
|
23
|
-
let
|
|
24
|
-
|
|
25
|
-
let
|
|
26
|
-
m.phase !== "listening" && m.phase !== "thinking" ||
|
|
27
|
-
}, [
|
|
28
|
-
|
|
29
|
-
}, []),
|
|
20
|
+
var m = ({ session: m, turns: be = [], onSaveTranscript: xe, onContinueInChat: Se, notice: h = null, privacyNotice: g = null, spoken: _, onInterrupt: Ce, onToggleMute: v, attachments: y = [], onAttachFiles: b, onRemoveAttachment: we, onRetryAttachment: Te, canAttachMore: Ee = !0, preparingAttachments: x = 0, attachmentsLocked: S = !1, attachmentNotice: C = null, spokenChunks: w = null, onEnd: T, capturing: De = !0, interrupting: Oe = !1, awaitingEndpoint: ke = !1, holding: E = !1, correcting: Ae = !1, onLetMeFinish: D, onImDone: O, proposalChip: k = null, proposalTray: A = null, renderAfterTurn: je }) => {
|
|
21
|
+
let j = n(), { muted: M, error: N } = m, P = l(null), F = l(null), [I, L] = u("mini"), R = I === "full", z = I === "mini", B = I === "mini" ? "panel" : I === "panel" ? "full" : "mini", [V, H] = u(!1);
|
|
22
|
+
t("assistant.transcript", me(() => ({ run: () => V ? { status: "already" } : (H(!0), { status: "done" }) }), [V]));
|
|
23
|
+
let U = A !== null && !z, W = l(!1), G = l(v);
|
|
24
|
+
G.current = v;
|
|
25
|
+
let K = s(() => {
|
|
26
|
+
m.phase !== "listening" && m.phase !== "thinking" || M || W.current || o(m) || (W.current = !0, G.current());
|
|
27
|
+
}, [M, m]), q = s(() => {
|
|
28
|
+
W.current && (W.current = !1, G.current());
|
|
29
|
+
}, []), Me = K;
|
|
30
30
|
c(() => {
|
|
31
31
|
let e = () => {
|
|
32
|
-
document.visibilityState === "hidden" ?
|
|
32
|
+
document.visibilityState === "hidden" ? K() : q();
|
|
33
33
|
};
|
|
34
34
|
return document.addEventListener("visibilitychange", e), () => document.removeEventListener("visibilitychange", e);
|
|
35
|
-
}, [
|
|
36
|
-
let e =
|
|
35
|
+
}, [K, q]), c(() => {
|
|
36
|
+
let e = q;
|
|
37
37
|
return window.addEventListener("focus", e), () => {
|
|
38
|
-
window.removeEventListener("focus", e),
|
|
38
|
+
window.removeEventListener("focus", e), W.current = !1;
|
|
39
39
|
};
|
|
40
40
|
}, []), c(() => {
|
|
41
|
-
document.activeElement?.closest("[data-hands-free-notice]") ||
|
|
42
|
-
}, []), e(
|
|
41
|
+
document.activeElement?.closest("[data-hands-free-notice]") || P.current?.focus();
|
|
42
|
+
}, []), e(F, { fallbackSelector: `[${ae}]` }), c(() => {
|
|
43
43
|
let e = (e) => {
|
|
44
44
|
if (e.key === "Escape") {
|
|
45
45
|
let t = fe({
|
|
46
46
|
defaultPrevented: e.defaultPrevented,
|
|
47
47
|
layerAbove: de({
|
|
48
48
|
target: e.target,
|
|
49
|
-
session:
|
|
49
|
+
session: F.current,
|
|
50
50
|
doc: document
|
|
51
51
|
}),
|
|
52
|
-
transcriptOpen:
|
|
52
|
+
transcriptOpen: V
|
|
53
53
|
});
|
|
54
54
|
if (t === "ignore") return;
|
|
55
|
-
e.preventDefault(), t === "close-transcript" ?
|
|
55
|
+
e.preventDefault(), t === "close-transcript" ? H(!1) : g ? g.decline() : U ? A?.onClose() : T();
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
if (e.key !== "Tab" || !
|
|
59
|
-
let t = (
|
|
58
|
+
if (e.key !== "Tab" || !R) return;
|
|
59
|
+
let t = (V ? F.current?.querySelector("[data-testid=\"assistant-voice-transcript\"]") : F.current)?.querySelectorAll("button:not([disabled])");
|
|
60
60
|
if (!t || t.length === 0) return;
|
|
61
61
|
let n = t[0], r = t[t.length - 1];
|
|
62
62
|
!n || !r || (e.shiftKey && document.activeElement === n ? (e.preventDefault(), r.focus()) : !e.shiftKey && document.activeElement === r && (e.preventDefault(), n.focus()));
|
|
63
63
|
};
|
|
64
64
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
65
65
|
}, [
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
z,
|
|
66
|
+
T,
|
|
67
|
+
R,
|
|
69
68
|
V,
|
|
70
|
-
|
|
69
|
+
U,
|
|
70
|
+
A,
|
|
71
71
|
g
|
|
72
72
|
]);
|
|
73
|
-
let
|
|
74
|
-
letMeFinish:
|
|
75
|
-
imDone:
|
|
76
|
-
} : null,
|
|
73
|
+
let J = h !== null && N === null, Y = o(m), X = D && O && m.phase === "listening" && !M && N === null ? {
|
|
74
|
+
letMeFinish: D,
|
|
75
|
+
imDone: O
|
|
76
|
+
} : null, Ne = X !== null;
|
|
77
77
|
c(() => {
|
|
78
|
-
if (
|
|
78
|
+
if (Ne) return;
|
|
79
79
|
let e = document.activeElement;
|
|
80
|
-
(!e || e === document.body) &&
|
|
81
|
-
}, [
|
|
82
|
-
let
|
|
80
|
+
(!e || e === document.body) && P.current?.focus();
|
|
81
|
+
}, [Ne]);
|
|
82
|
+
let Z = i({
|
|
83
83
|
snapshot: m,
|
|
84
84
|
capturing: De,
|
|
85
85
|
interrupting: Oe,
|
|
86
86
|
awaitingEndpoint: ke
|
|
87
|
-
}),
|
|
88
|
-
switch (
|
|
89
|
-
case "connecting": return
|
|
90
|
-
case "endpoint-grace": return
|
|
91
|
-
case "interrupting": return
|
|
92
|
-
case "thinking": return
|
|
93
|
-
case "speaking": return
|
|
87
|
+
}), Pe = (() => {
|
|
88
|
+
switch (Z) {
|
|
89
|
+
case "connecting": return j("voiceSession.connecting", "Starting the microphone…");
|
|
90
|
+
case "endpoint-grace": return j("voiceSession.endpointGrace", "Still listening — take your time");
|
|
91
|
+
case "interrupting": return j("voiceSession.interrupting", "Stopped — go ahead");
|
|
92
|
+
case "thinking": return j(a.key, a.fallback);
|
|
93
|
+
case "speaking": return j("voiceSession.speaking", "Speaking — tap to stop");
|
|
94
94
|
case "mic-error":
|
|
95
95
|
case "ended": return "";
|
|
96
|
-
case "listening": return
|
|
97
|
-
default: return
|
|
96
|
+
case "listening": return M ? j("voiceSession.muted", "Microphone off") : j("voiceSession.listening", "Listening…");
|
|
97
|
+
default: return Z;
|
|
98
98
|
}
|
|
99
|
-
})(),
|
|
100
|
-
tr:
|
|
101
|
-
stage:
|
|
102
|
-
muted:
|
|
103
|
-
label:
|
|
104
|
-
}),
|
|
99
|
+
})(), Fe = !M && (Z === "listening" || Z === "endpoint-grace"), Ie = Fe && E ? j("voiceSession.holding", "Take your time — tap “I’m done” when you finish") : Fe && Ae ? j("voiceSession.correcting", "Stopped that answer — listening to your correction") : Pe, Q = ne({
|
|
100
|
+
tr: j,
|
|
101
|
+
stage: Z,
|
|
102
|
+
muted: M,
|
|
103
|
+
label: Ie
|
|
104
|
+
}), Le = te(Ie, Q), $ = Z === "thinking";
|
|
105
105
|
return /* @__PURE__ */ p("div", {
|
|
106
|
-
ref:
|
|
107
|
-
className: `flex flex-col items-center justify-between bg-bg-sunken ${
|
|
106
|
+
ref: F,
|
|
107
|
+
className: `flex flex-col items-center justify-between bg-bg-sunken ${I === "full" ? "fixed inset-x-0 bottom-0 top-14 z-[60] px-6 py-8" : I === "panel" ? "absolute inset-0 z-20 px-4 py-6" : "absolute inset-x-0 bottom-0 z-20 h-[11.25rem] border-t border-border-subtle px-3 py-3 shadow-lg"}`,
|
|
108
108
|
role: "dialog",
|
|
109
|
-
"aria-modal":
|
|
110
|
-
"aria-label":
|
|
109
|
+
"aria-modal": R || void 0,
|
|
110
|
+
"aria-label": j("voiceSession.title", "Voice conversation"),
|
|
111
111
|
"data-testid": "assistant-voice-session",
|
|
112
112
|
[oe]: "",
|
|
113
113
|
children: [
|
|
114
114
|
/* @__PURE__ */ p("button", {
|
|
115
|
-
ref:
|
|
115
|
+
ref: P,
|
|
116
116
|
type: "button",
|
|
117
|
-
onClick:
|
|
118
|
-
className: `absolute ${
|
|
119
|
-
title:
|
|
117
|
+
onClick: T,
|
|
118
|
+
className: `absolute ${R ? "right-6 top-6 h-14 gap-2 px-5 text-base" : z ? "right-12 top-2 h-8 gap-1.5 px-2.5 text-xs" : "right-3 top-3 h-11 gap-2 px-4 text-sm"} flex items-center justify-center rounded-full border border-border-default bg-bg-elevated text-text-secondary hover:bg-bg-sunken transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong`,
|
|
119
|
+
title: j("voiceSession.end", "End the voice conversation"),
|
|
120
120
|
"data-testid": "assistant-voice-end",
|
|
121
121
|
children: [/* @__PURE__ */ f(d, {
|
|
122
|
-
className:
|
|
122
|
+
className: R ? "size-6" : z ? "size-4" : "size-5",
|
|
123
123
|
"aria-hidden": "true"
|
|
124
124
|
}), /* @__PURE__ */ f("span", {
|
|
125
|
-
className: `truncate whitespace-nowrap font-medium ${
|
|
126
|
-
children:
|
|
125
|
+
className: `truncate whitespace-nowrap font-medium ${z ? "max-w-[3.5rem] text-xs" : "max-w-[7rem]"}`,
|
|
126
|
+
children: j("voiceSession.endShort", "End")
|
|
127
127
|
})]
|
|
128
128
|
}),
|
|
129
|
-
/* @__PURE__ */
|
|
130
|
-
className: `flex flex-col items-center ${
|
|
131
|
-
children:
|
|
129
|
+
/* @__PURE__ */ p("div", {
|
|
130
|
+
className: `flex flex-col items-center ${z ? "px-3" : `min-h-[1.5rem] ${J || C ? R ? "pt-14" : "pt-10" : ""}`}`,
|
|
131
|
+
children: [J ? /* @__PURE__ */ f("p", {
|
|
132
132
|
className: "max-w-xs text-center text-xs text-status-warning",
|
|
133
133
|
"data-testid": "assistant-voice-notice",
|
|
134
|
-
children: ve(h,
|
|
135
|
-
}) : null
|
|
134
|
+
children: ve(h, j)
|
|
135
|
+
}) : null, C ? /* @__PURE__ */ f("p", {
|
|
136
|
+
className: "max-w-xs text-center text-xs text-status-warning",
|
|
137
|
+
role: "status",
|
|
138
|
+
"aria-live": "polite",
|
|
139
|
+
"data-testid": "assistant-voice-attachment-notice",
|
|
140
|
+
children: C
|
|
141
|
+
}) : null]
|
|
136
142
|
}),
|
|
137
143
|
(() => {
|
|
138
144
|
let e = /* @__PURE__ */ f(se, {
|
|
139
145
|
session: m,
|
|
140
|
-
compact:
|
|
141
|
-
connecting:
|
|
142
|
-
onPress: r(
|
|
143
|
-
label: r(
|
|
144
|
-
}), t =
|
|
146
|
+
compact: z,
|
|
147
|
+
connecting: Z === "connecting",
|
|
148
|
+
onPress: r(Z) ? Ce : v,
|
|
149
|
+
label: r(Z) ? j("voiceSession.interrupt", "Stop the assistant and speak") : M ? j("voiceSession.unmute", "Turn the microphone on") : j("voiceSession.mute", "Turn the microphone off")
|
|
150
|
+
}), t = X ? /* @__PURE__ */ f("button", {
|
|
145
151
|
type: "button",
|
|
146
|
-
onClick:
|
|
147
|
-
className: `flex items-center justify-center rounded-full border font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${
|
|
148
|
-
title:
|
|
152
|
+
onClick: E ? X.imDone : X.letMeFinish,
|
|
153
|
+
className: `flex items-center justify-center rounded-full border font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${z ? "h-7 px-3 text-xs" : R ? "h-11 px-6 text-base" : "h-9 px-4 text-sm"} ${E ? "border-transparent bg-action-primary-bg text-action-primary-text hover:opacity-90" : "border-border-default bg-bg-elevated text-text-secondary hover:bg-bg-sunken"}`,
|
|
154
|
+
title: E ? j("voiceSession.imDoneHint", "Send what you said now") : j("voiceSession.letMeFinishHint", "Pause sending until you tap “I’m done”"),
|
|
149
155
|
"data-testid": "assistant-voice-hold",
|
|
150
|
-
"data-holding":
|
|
151
|
-
children:
|
|
156
|
+
"data-holding": E ? "true" : "false",
|
|
157
|
+
children: E ? j("voiceSession.imDone", "I’m done") : j("voiceSession.letMeFinish", "Let me finish")
|
|
152
158
|
}) : null, n = t ? /* @__PURE__ */ p("div", {
|
|
153
159
|
className: "flex flex-col items-center gap-2",
|
|
154
160
|
children: [e, t]
|
|
155
|
-
}) : e, i = ee(
|
|
156
|
-
return
|
|
157
|
-
spokenChunks:
|
|
158
|
-
state:
|
|
161
|
+
}) : e, i = ee(Z) ? _ : Y || null, a = N === null ? null : ye(N, j);
|
|
162
|
+
return z ? /* @__PURE__ */ f(ce, {
|
|
163
|
+
spokenChunks: w,
|
|
164
|
+
state: Z,
|
|
159
165
|
caption: i,
|
|
160
|
-
statusText:
|
|
161
|
-
statusSuffix:
|
|
162
|
-
rotateStatus:
|
|
166
|
+
statusText: Le,
|
|
167
|
+
statusSuffix: Q,
|
|
168
|
+
rotateStatus: $,
|
|
163
169
|
errorText: a,
|
|
164
170
|
control: n
|
|
165
171
|
}) : /* @__PURE__ */ f(le, {
|
|
166
|
-
state:
|
|
167
|
-
userCaption:
|
|
168
|
-
spokenChunks:
|
|
172
|
+
state: Z,
|
|
173
|
+
userCaption: Y || null,
|
|
174
|
+
spokenChunks: w,
|
|
169
175
|
assistantCaption: _,
|
|
170
|
-
expanded:
|
|
171
|
-
statusText:
|
|
172
|
-
statusSuffix:
|
|
173
|
-
rotateStatus:
|
|
176
|
+
expanded: R,
|
|
177
|
+
statusText: Le,
|
|
178
|
+
statusSuffix: Q,
|
|
179
|
+
rotateStatus: $,
|
|
174
180
|
errorText: a,
|
|
175
181
|
control: n
|
|
176
182
|
});
|
|
177
183
|
})(),
|
|
178
|
-
|
|
179
|
-
className:
|
|
184
|
+
k && !U ? /* @__PURE__ */ f("div", {
|
|
185
|
+
className: z ? "absolute left-20 right-36 top-2 flex justify-center" : `flex w-full justify-center ${R ? "max-w-[calc(100%-12rem)]" : "max-w-[calc(100%-8rem)]"}`,
|
|
180
186
|
children: /* @__PURE__ */ f("button", {
|
|
181
187
|
type: "button",
|
|
182
188
|
onClick: () => {
|
|
183
|
-
|
|
189
|
+
L("panel"), k.onOpen();
|
|
184
190
|
},
|
|
185
|
-
className: `max-w-full truncate rounded-full border border-border-default bg-bg-elevated font-medium text-text-primary transition-colors hover:bg-bg-raised focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${
|
|
191
|
+
className: `max-w-full truncate rounded-full border border-border-default bg-bg-elevated font-medium text-text-primary transition-colors hover:bg-bg-raised focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong ${z ? "h-8 px-3 text-xs" : "h-10 px-4 text-sm"}`,
|
|
186
192
|
"data-testid": "assistant-voice-proposal-chip",
|
|
187
|
-
children:
|
|
193
|
+
children: k.label
|
|
188
194
|
})
|
|
189
195
|
}) : null,
|
|
190
|
-
|
|
191
|
-
className: `absolute z-10 flex flex-col gap-2 overflow-y-auto rounded-lg border border-border-subtle bg-bg-elevated shadow-lg ${
|
|
196
|
+
A && U ? /* @__PURE__ */ p("div", {
|
|
197
|
+
className: `absolute z-10 flex flex-col gap-2 overflow-y-auto rounded-lg border border-border-subtle bg-bg-elevated shadow-lg ${R ? "inset-x-6 bottom-24 top-24 mx-auto max-w-xl p-4" : "inset-x-3 bottom-16 top-16 p-3"}`,
|
|
192
198
|
"data-testid": "assistant-voice-proposal-tray",
|
|
193
199
|
children: [/* @__PURE__ */ f("div", {
|
|
194
200
|
className: "flex justify-end",
|
|
195
201
|
children: /* @__PURE__ */ f("button", {
|
|
196
202
|
type: "button",
|
|
197
|
-
onClick:
|
|
203
|
+
onClick: A.onClose,
|
|
198
204
|
className: "flex size-8 items-center justify-center rounded-full text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
|
|
199
|
-
"aria-label":
|
|
205
|
+
"aria-label": A.closeLabel,
|
|
200
206
|
"data-testid": "assistant-voice-proposal-tray-close",
|
|
201
207
|
children: /* @__PURE__ */ f(d, {
|
|
202
208
|
className: "size-4",
|
|
203
209
|
"aria-hidden": "true"
|
|
204
210
|
})
|
|
205
211
|
})
|
|
206
|
-
}),
|
|
212
|
+
}), A.content]
|
|
207
213
|
}) : null,
|
|
208
214
|
g ? /* @__PURE__ */ f(pe, {
|
|
209
|
-
view:
|
|
215
|
+
view: I,
|
|
210
216
|
onContinue: g.accept,
|
|
211
217
|
onNotNow: g.decline
|
|
212
218
|
}) : null,
|
|
213
|
-
|
|
219
|
+
V ? /* @__PURE__ */ f(ue, {
|
|
214
220
|
turns: be,
|
|
215
|
-
onClose: () =>
|
|
221
|
+
onClose: () => H(!1),
|
|
216
222
|
onSave: xe,
|
|
217
|
-
onContinueInChat: Se
|
|
223
|
+
onContinueInChat: Se,
|
|
224
|
+
renderAfterTurn: je
|
|
218
225
|
}) : null,
|
|
219
226
|
b ? /* @__PURE__ */ f("div", {
|
|
220
|
-
className: `absolute ${
|
|
227
|
+
className: `absolute ${R ? "left-6 top-6" : z ? "left-11 top-2" : "left-3 top-3"}`,
|
|
221
228
|
children: /* @__PURE__ */ f(re, {
|
|
222
229
|
onFiles: (e) => {
|
|
223
|
-
b(e),
|
|
230
|
+
b(e), L((e) => e === "mini" ? "panel" : e);
|
|
224
231
|
},
|
|
225
|
-
onPickerOpen:
|
|
232
|
+
onPickerOpen: Me,
|
|
226
233
|
direction: "down",
|
|
227
|
-
canAddMore: Ee
|
|
234
|
+
canAddMore: Ee,
|
|
235
|
+
disabled: S
|
|
228
236
|
})
|
|
229
237
|
}) : null,
|
|
230
|
-
(y.length > 0 || x > 0) && !
|
|
231
|
-
className: `absolute ${
|
|
238
|
+
(y.length > 0 || x > 0) && !z ? /* @__PURE__ */ f("div", {
|
|
239
|
+
className: `absolute ${R ? "bottom-24 left-24 right-24" : "bottom-16 left-16 right-16"}`,
|
|
232
240
|
"data-testid": "assistant-voice-attachments",
|
|
233
241
|
children: /* @__PURE__ */ f(ie, {
|
|
234
242
|
attachments: y,
|
|
235
243
|
onRemove: we ?? (() => void 0),
|
|
236
244
|
onRetry: Te ?? (() => void 0),
|
|
237
|
-
preparingCount: x
|
|
245
|
+
preparingCount: x,
|
|
246
|
+
disabled: S
|
|
238
247
|
})
|
|
239
248
|
}) : null,
|
|
240
249
|
/* @__PURE__ */ f("button", {
|
|
241
250
|
type: "button",
|
|
242
|
-
onClick: () =>
|
|
243
|
-
className: `absolute ${
|
|
244
|
-
"aria-pressed":
|
|
245
|
-
"aria-label":
|
|
251
|
+
onClick: () => H((e) => !e),
|
|
252
|
+
className: `absolute ${R ? "bottom-6 right-6 size-14" : z ? "right-2 top-2 size-8" : "bottom-3 right-3 size-11"} flex items-center justify-center rounded-full bg-bg-elevated text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong`,
|
|
253
|
+
"aria-pressed": V,
|
|
254
|
+
"aria-label": j("voiceSession.transcriptTitle", "Voice transcript"),
|
|
246
255
|
"data-testid": "assistant-voice-transcript-toggle",
|
|
247
|
-
children: /* @__PURE__ */ f(_e, { className:
|
|
256
|
+
children: /* @__PURE__ */ f(_e, { className: R ? "size-6" : z ? "size-4" : "size-5" })
|
|
248
257
|
}),
|
|
249
258
|
/* @__PURE__ */ f("button", {
|
|
250
259
|
type: "button",
|
|
251
|
-
onClick: () =>
|
|
252
|
-
className: `absolute ${
|
|
253
|
-
"aria-label":
|
|
260
|
+
onClick: () => L(B),
|
|
261
|
+
className: `absolute ${R ? "bottom-6 left-6 size-14" : z ? "left-2 top-2 size-8" : "bottom-3 left-3 size-11"} flex items-center justify-center rounded-full bg-bg-elevated text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong`,
|
|
262
|
+
"aria-label": B === "panel" ? j("voiceSession.expandPanel", "Show the conversation in the panel") : B === "full" ? j("voiceSession.expand", "Expand the conversation to full screen") : j("voiceSession.collapse", "Shrink to the compact controller"),
|
|
254
263
|
"data-testid": "assistant-voice-expand",
|
|
255
|
-
children:
|
|
264
|
+
children: R ? /* @__PURE__ */ f(ge, { className: "size-5" }) : /* @__PURE__ */ f(he, { className: z ? "size-4" : "size-5" })
|
|
256
265
|
})
|
|
257
266
|
]
|
|
258
267
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
2
|
import { VoiceTranscriptTurn } from '../../voice/turnVisibility';
|
|
3
3
|
/**
|
|
4
4
|
* The voice conversation, as a normal chat.
|
|
@@ -32,6 +32,11 @@ interface Props {
|
|
|
32
32
|
* leading group rather than being scattered one divider apart.
|
|
33
33
|
*/
|
|
34
34
|
turns: ReadonlyArray<VoiceTranscriptTurn>;
|
|
35
|
+
/**
|
|
36
|
+
* ★ BOFF-8060 (N3): drawn under one ASSISTANT turn's text — the page the
|
|
37
|
+
* model offered in that voice turn. Absent, or null for a turn, nothing is.
|
|
38
|
+
*/
|
|
39
|
+
renderAfterTurn?: (turnId: string) => ReactNode;
|
|
35
40
|
}
|
|
36
41
|
export declare const VoiceConversationView: FC<Props>;
|
|
37
42
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceConversationView.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceConversationView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VoiceConversationView.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceConversationView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,UAAU,KAAK;IACb;;;;;;OAMG;IACH,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CA4E3C,CAAC"}
|
|
@@ -4,18 +4,18 @@ import { groupConsecutiveBySession as n } from "../../voice/turnVisibility.js";
|
|
|
4
4
|
import { useMemo as r } from "react";
|
|
5
5
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
6
|
//#region src/shared/assistant/ui/voice/VoiceConversationView.tsx
|
|
7
|
-
var o = ({ turns: o }) => {
|
|
8
|
-
let
|
|
7
|
+
var o = ({ turns: o, renderAfterTurn: s }) => {
|
|
8
|
+
let c = e(), l = r(() => n(o, (e) => e.sessionId), [o]);
|
|
9
9
|
return o.length === 0 ? /* @__PURE__ */ i("div", {
|
|
10
10
|
className: "flex flex-1 items-center justify-center px-6",
|
|
11
11
|
children: /* @__PURE__ */ i("p", {
|
|
12
12
|
className: "text-center text-sm text-text-muted",
|
|
13
|
-
children:
|
|
13
|
+
children: c("voiceSession.transcriptEmpty", "Nothing spoken yet in this session.")
|
|
14
14
|
})
|
|
15
15
|
}) : /* @__PURE__ */ i("div", {
|
|
16
16
|
className: "scrollbar-slim flex-1 overflow-y-auto px-4 py-4",
|
|
17
17
|
"data-testid": "assistant-voice-conversation",
|
|
18
|
-
children:
|
|
18
|
+
children: l.map((e, n) => /* @__PURE__ */ a("section", {
|
|
19
19
|
className: "space-y-4 pb-4",
|
|
20
20
|
children: [n > 0 ? /* @__PURE__ */ a("div", {
|
|
21
21
|
className: "flex items-center gap-2 pt-2",
|
|
@@ -24,7 +24,7 @@ var o = ({ turns: o }) => {
|
|
|
24
24
|
/* @__PURE__ */ i("span", { className: "h-px flex-1 bg-border-subtle" }),
|
|
25
25
|
/* @__PURE__ */ i("span", {
|
|
26
26
|
className: "text-[11px] uppercase tracking-wide text-text-muted",
|
|
27
|
-
children:
|
|
27
|
+
children: c("voiceSession.newSession", "New voice session")
|
|
28
28
|
}),
|
|
29
29
|
/* @__PURE__ */ i("span", { className: "h-px flex-1 bg-border-subtle" })
|
|
30
30
|
]
|
|
@@ -34,9 +34,9 @@ var o = ({ turns: o }) => {
|
|
|
34
34
|
className: "max-w-[85%] whitespace-pre-wrap break-words rounded-2xl bg-bg-elevated px-3 py-2 text-sm leading-relaxed text-text-primary",
|
|
35
35
|
children: e.text
|
|
36
36
|
})
|
|
37
|
-
}, e.id) : /* @__PURE__ */
|
|
37
|
+
}, e.id) : /* @__PURE__ */ a("div", {
|
|
38
38
|
className: "text-sm leading-relaxed text-text-secondary",
|
|
39
|
-
children: /* @__PURE__ */ i(t, { content: e.text })
|
|
39
|
+
children: [/* @__PURE__ */ i(t, { content: e.text }), s?.(e.id)]
|
|
40
40
|
}, e.id))]
|
|
41
41
|
}, `${e.sessionId ?? "earlier"}-${n}`))
|
|
42
42
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
2
|
import { VoiceTranscriptTurn } from '../../voice/turnVisibility';
|
|
3
3
|
/**
|
|
4
4
|
* This session's spoken turns, on demand.
|
|
@@ -56,6 +56,11 @@ interface Props {
|
|
|
56
56
|
onShowEarlier?: () => void;
|
|
57
57
|
/** A page is being read: the control waits. */
|
|
58
58
|
showEarlierDisabled?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* ★ BOFF-8060 (N3): what goes under one assistant turn — the page the model
|
|
61
|
+
* offered in that VOICE turn. Never the chat thread's offers (rule 4).
|
|
62
|
+
*/
|
|
63
|
+
renderAfterTurn?: (turnId: string) => ReactNode;
|
|
59
64
|
}
|
|
60
65
|
export declare const VoiceTranscriptDrawer: FC<Props>;
|
|
61
66
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VoiceTranscriptDrawer.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAOnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE;;;;;;;;;;;;;;;;;;GAkBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,+CAA+C;IAC/C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CACjD;AAED,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAqJ3C,CAAC"}
|
|
@@ -7,21 +7,21 @@ import { useEffect as o, useRef as s } from "react";
|
|
|
7
7
|
import { ArrowRight as c, Download as l, X as u } from "lucide-react";
|
|
8
8
|
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
9
|
//#region src/shared/assistant/ui/voice/VoiceTranscriptDrawer.tsx
|
|
10
|
-
var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape: _ = !1, onShowEarlier: v, showEarlierDisabled: y = !1 }) => {
|
|
11
|
-
let
|
|
12
|
-
return e(
|
|
10
|
+
var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape: _ = !1, onShowEarlier: v, showEarlierDisabled: y = !1, renderAfterTurn: b }) => {
|
|
11
|
+
let x = t(), S = s(null);
|
|
12
|
+
return e(S, { fallbackSelector: `[${n}]` }), o(() => {
|
|
13
13
|
if (!_) return;
|
|
14
14
|
let e = (e) => {
|
|
15
15
|
if (e.key !== "Escape" || document.querySelector("[role=\"alertdialog\"]")) return;
|
|
16
|
-
let t =
|
|
16
|
+
let t = S.current?.closest(`[${n}]`), i = document.activeElement;
|
|
17
17
|
r(t ?? null, i) && (e.preventDefault(), e.stopPropagation(), m());
|
|
18
18
|
};
|
|
19
19
|
return document.addEventListener("keydown", e, !0), () => document.removeEventListener("keydown", e, !0);
|
|
20
20
|
}, [_, m]), /* @__PURE__ */ f("div", {
|
|
21
|
-
ref:
|
|
21
|
+
ref: S,
|
|
22
22
|
className: "absolute inset-0 z-30 flex flex-col bg-bg-sunken/95 backdrop-blur-sm",
|
|
23
23
|
role: "dialog",
|
|
24
|
-
"aria-label":
|
|
24
|
+
"aria-label": x("voiceSession.transcriptTitle", "Voice transcript"),
|
|
25
25
|
"data-testid": "assistant-voice-transcript",
|
|
26
26
|
children: [
|
|
27
27
|
/* @__PURE__ */ f("div", {
|
|
@@ -30,16 +30,16 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
|
|
|
30
30
|
className: "min-w-0",
|
|
31
31
|
children: [/* @__PURE__ */ d("h2", {
|
|
32
32
|
className: "text-sm font-semibold text-text-primary",
|
|
33
|
-
children:
|
|
33
|
+
children: x("voiceSession.transcript", "Voice conversation")
|
|
34
34
|
}), /* @__PURE__ */ d("p", {
|
|
35
35
|
className: "truncate text-xs text-text-muted",
|
|
36
|
-
children:
|
|
36
|
+
children: x("voiceSession.transcriptHint", "Spoken turns in this conversation — kept out of your typed chat.")
|
|
37
37
|
})]
|
|
38
38
|
}), /* @__PURE__ */ d("button", {
|
|
39
39
|
type: "button",
|
|
40
40
|
onClick: m,
|
|
41
41
|
className: "flex size-8 items-center justify-center rounded-full text-text-secondary transition-colors hover:bg-bg-raised hover:text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
|
|
42
|
-
"aria-label":
|
|
42
|
+
"aria-label": x("voiceSession.transcriptClose", "Close the transcript"),
|
|
43
43
|
"data-testid": "assistant-voice-transcript-close",
|
|
44
44
|
children: /* @__PURE__ */ d(u, { className: "size-4" })
|
|
45
45
|
})]
|
|
@@ -48,7 +48,10 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
|
|
|
48
48
|
onShowEarlier: v,
|
|
49
49
|
disabled: y
|
|
50
50
|
}) : null,
|
|
51
|
-
/* @__PURE__ */ d(i, {
|
|
51
|
+
/* @__PURE__ */ d(i, {
|
|
52
|
+
turns: p,
|
|
53
|
+
renderAfterTurn: b
|
|
54
|
+
}),
|
|
52
55
|
(h || g) && p.length > 0 ? /* @__PURE__ */ f("div", {
|
|
53
56
|
className: "flex items-center justify-end gap-2 border-t border-border-subtle px-4 py-3",
|
|
54
57
|
children: [h ? /* @__PURE__ */ f("button", {
|
|
@@ -59,13 +62,13 @@ var p = ({ turns: p, onClose: m, onSave: h, onContinueInChat: g, closeOnEscape:
|
|
|
59
62
|
children: [/* @__PURE__ */ d(l, {
|
|
60
63
|
className: "size-3.5",
|
|
61
64
|
"aria-hidden": "true"
|
|
62
|
-
}),
|
|
65
|
+
}), x("voiceSession.save", "Save transcript")]
|
|
63
66
|
}) : null, g ? /* @__PURE__ */ f("button", {
|
|
64
67
|
type: "button",
|
|
65
68
|
onClick: g,
|
|
66
69
|
className: "flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-1.5 text-xs font-medium text-action-primary-fg transition-opacity hover:opacity-90 focus:outline-none focus-visible:ring-2 focus-visible:ring-border-strong",
|
|
67
70
|
"data-testid": "assistant-voice-continue-in-chat",
|
|
68
|
-
children: [
|
|
71
|
+
children: [x("voiceSession.continueInChat", "Continue in chat"), /* @__PURE__ */ d(c, {
|
|
69
72
|
className: "size-3.5",
|
|
70
73
|
"aria-hidden": "true"
|
|
71
74
|
})]
|