@burdenoff/fe-libs 2026.906.1 → 2026.906.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.
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +54 -53
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts +14 -0
- package/dist/shared/assistant/ui/voice/VoiceMiniController.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/VoiceMiniController.js +29 -22
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,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,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,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"AssistantVoiceSession.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/AssistantVoiceSession.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAI1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAO7D,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,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,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,KAAK,CAuiB3C,CAAC"}
|
|
@@ -5,35 +5,35 @@ import { AssistantAttachmentButton as i } from "../composer/AssistantAttachmentB
|
|
|
5
5
|
import { AssistantAttachmentChips as ee } from "../composer/AssistantAttachmentChips.js";
|
|
6
6
|
import { AssistantVoiceOrb as a } from "./AssistantVoiceOrb.js";
|
|
7
7
|
import { VoiceMiniController as te } from "./VoiceMiniController.js";
|
|
8
|
-
import { VoiceStage as
|
|
9
|
-
import { VoiceTranscriptDrawer as
|
|
10
|
-
import { useCallback as
|
|
11
|
-
import { Maximize2 as
|
|
12
|
-
import { jsx as
|
|
8
|
+
import { VoiceStage as ne } from "./VoiceStage.js";
|
|
9
|
+
import { VoiceTranscriptDrawer as o } from "./VoiceTranscriptDrawer.js";
|
|
10
|
+
import { useCallback as re, useEffect as s, useRef as c, useState as l } from "react";
|
|
11
|
+
import { Maximize2 as u, Minimize2 as d, ScrollText as f, X as p } from "lucide-react";
|
|
12
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
13
13
|
//#region src/shared/assistant/ui/voice/AssistantVoiceSession.tsx
|
|
14
|
-
var
|
|
15
|
-
let F = r(), { muted: I, error: L } =
|
|
16
|
-
J.current =
|
|
17
|
-
let oe =
|
|
18
|
-
I || q.current || n(
|
|
19
|
-
}, [I,
|
|
20
|
-
|
|
14
|
+
var g = ({ session: g, turns: y = [], onSaveTranscript: b, onContinueInChat: x, notice: S = null, spoken: C, onInterrupt: w, onToggleMute: T, attachments: E = [], onAttachFiles: D, onRemoveAttachment: O, onRetryAttachment: k, canAttachMore: ie = !0, preparingAttachments: A = 0, spokenChunks: j = null, onEnd: M, capturing: ae = !0, interrupting: N = !1, awaitingEndpoint: P = !1 }) => {
|
|
15
|
+
let F = r(), { muted: I, error: L } = g, R = c(null), z = c(null), [B, V] = l("mini"), H = B === "full", U = B === "mini", W = B === "mini" ? "panel" : B === "panel" ? "full" : "mini", [G, K] = l(!1), q = c(!1), J = c(T);
|
|
16
|
+
J.current = T;
|
|
17
|
+
let oe = re(() => {
|
|
18
|
+
I || q.current || n(g) || (q.current = !0, J.current());
|
|
19
|
+
}, [I, g]);
|
|
20
|
+
s(() => {
|
|
21
21
|
let e = () => {
|
|
22
22
|
q.current && (q.current = !1, J.current());
|
|
23
23
|
};
|
|
24
24
|
return window.addEventListener("focus", e), () => {
|
|
25
25
|
window.removeEventListener("focus", e), q.current = !1;
|
|
26
26
|
};
|
|
27
|
-
}, []),
|
|
27
|
+
}, []), s(() => {
|
|
28
28
|
R.current?.focus();
|
|
29
|
-
}, []),
|
|
29
|
+
}, []), s(() => {
|
|
30
30
|
let e = (e) => {
|
|
31
31
|
if (e.key === "Escape") {
|
|
32
32
|
if (G) {
|
|
33
33
|
K(!1);
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
|
-
|
|
36
|
+
M();
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
39
|
if (e.key !== "Tab" || !H) return;
|
|
@@ -44,13 +44,13 @@ var _ = ({ session: _, turns: b = [], onSaveTranscript: x, onContinueInChat: S,
|
|
|
44
44
|
};
|
|
45
45
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
46
46
|
}, [
|
|
47
|
-
|
|
47
|
+
M,
|
|
48
48
|
H,
|
|
49
49
|
G
|
|
50
50
|
]);
|
|
51
|
-
let Y =
|
|
52
|
-
snapshot:
|
|
53
|
-
capturing:
|
|
51
|
+
let Y = S !== null && L === null, X = n(g), Z = t({
|
|
52
|
+
snapshot: g,
|
|
53
|
+
capturing: ae,
|
|
54
54
|
interrupting: N,
|
|
55
55
|
awaitingEndpoint: P
|
|
56
56
|
}), Q = (() => {
|
|
@@ -66,7 +66,7 @@ var _ = ({ session: _, turns: b = [], onSaveTranscript: x, onContinueInChat: S,
|
|
|
66
66
|
default: return Z;
|
|
67
67
|
}
|
|
68
68
|
})(), $ = I && Z !== "listening" && Q !== "" ? `${Q} · ${F("voiceSession.muted", "Microphone off")}` : Q;
|
|
69
|
-
return /* @__PURE__ */
|
|
69
|
+
return /* @__PURE__ */ h("div", {
|
|
70
70
|
ref: z,
|
|
71
71
|
className: `flex flex-col items-center justify-between bg-bg-sunken ${B === "full" ? "fixed inset-x-0 bottom-0 top-14 z-[60] px-6 py-8" : B === "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"}`,
|
|
72
72
|
role: "dialog",
|
|
@@ -74,102 +74,103 @@ var _ = ({ session: _, turns: b = [], onSaveTranscript: x, onContinueInChat: S,
|
|
|
74
74
|
"aria-label": F("voiceSession.title", "Voice conversation"),
|
|
75
75
|
"data-testid": "assistant-voice-session",
|
|
76
76
|
children: [
|
|
77
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ h("button", {
|
|
78
78
|
ref: R,
|
|
79
79
|
type: "button",
|
|
80
|
-
onClick:
|
|
80
|
+
onClick: M,
|
|
81
81
|
className: `absolute ${H ? "right-6 top-6 h-14 gap-2 px-5 text-base" : U ? "right-2 top-2 size-8" : "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`,
|
|
82
82
|
"aria-label": U ? F("voiceSession.end", "End the voice conversation") : void 0,
|
|
83
83
|
"data-testid": "assistant-voice-end",
|
|
84
|
-
children: [/* @__PURE__ */
|
|
84
|
+
children: [/* @__PURE__ */ m(p, {
|
|
85
85
|
className: H ? "size-6" : U ? "size-4" : "size-5",
|
|
86
86
|
"aria-hidden": "true"
|
|
87
|
-
}), U ? null : /* @__PURE__ */
|
|
87
|
+
}), U ? null : /* @__PURE__ */ m("span", {
|
|
88
88
|
className: "max-w-[7rem] truncate whitespace-nowrap font-medium",
|
|
89
89
|
children: F("voiceSession.endShort", "End")
|
|
90
90
|
})]
|
|
91
91
|
}),
|
|
92
|
-
/* @__PURE__ */
|
|
92
|
+
/* @__PURE__ */ m("div", {
|
|
93
93
|
className: `flex flex-col items-center ${U ? "px-3" : `min-h-[1.5rem] ${Y ? H ? "pt-14" : "pt-10" : ""}`}`,
|
|
94
|
-
children: Y ? /* @__PURE__ */
|
|
94
|
+
children: Y ? /* @__PURE__ */ m("p", {
|
|
95
95
|
className: "max-w-xs text-center text-xs text-status-warning",
|
|
96
96
|
"data-testid": "assistant-voice-notice",
|
|
97
|
-
children:
|
|
97
|
+
children: _(S, F)
|
|
98
98
|
}) : null
|
|
99
99
|
}),
|
|
100
100
|
(() => {
|
|
101
|
-
let t = /* @__PURE__ */
|
|
102
|
-
session:
|
|
101
|
+
let t = /* @__PURE__ */ m(a, {
|
|
102
|
+
session: g,
|
|
103
103
|
compact: U,
|
|
104
104
|
connecting: Z === "connecting",
|
|
105
|
-
onPress: e(Z) ?
|
|
105
|
+
onPress: e(Z) ? w : T,
|
|
106
106
|
label: e(Z) ? F("voiceSession.interrupt", "Stop the assistant and speak") : I ? F("voiceSession.unmute", "Turn the microphone on") : F("voiceSession.mute", "Turn the microphone off")
|
|
107
|
-
}), n = e(Z) ?
|
|
108
|
-
return U ? /* @__PURE__ */
|
|
107
|
+
}), n = e(Z) ? C : X || null, r = L === null ? null : v(L, F);
|
|
108
|
+
return U ? /* @__PURE__ */ m(te, {
|
|
109
|
+
spokenChunks: j,
|
|
109
110
|
state: Z,
|
|
110
111
|
caption: n,
|
|
111
112
|
statusText: $,
|
|
112
113
|
errorText: r,
|
|
113
114
|
control: t
|
|
114
|
-
}) : /* @__PURE__ */
|
|
115
|
+
}) : /* @__PURE__ */ m(ne, {
|
|
115
116
|
state: Z,
|
|
116
117
|
userCaption: X || null,
|
|
117
|
-
spokenChunks:
|
|
118
|
-
assistantCaption:
|
|
118
|
+
spokenChunks: j,
|
|
119
|
+
assistantCaption: C,
|
|
119
120
|
expanded: H,
|
|
120
121
|
statusText: $,
|
|
121
122
|
errorText: r,
|
|
122
123
|
control: t
|
|
123
124
|
});
|
|
124
125
|
})(),
|
|
125
|
-
G ? /* @__PURE__ */
|
|
126
|
-
turns:
|
|
126
|
+
G ? /* @__PURE__ */ m(o, {
|
|
127
|
+
turns: y,
|
|
127
128
|
onClose: () => K(!1),
|
|
128
|
-
onSave:
|
|
129
|
-
onContinueInChat:
|
|
129
|
+
onSave: b,
|
|
130
|
+
onContinueInChat: x
|
|
130
131
|
}) : null,
|
|
131
|
-
|
|
132
|
+
D ? /* @__PURE__ */ m("div", {
|
|
132
133
|
className: `absolute ${H ? "left-6 top-6" : U ? "left-11 top-2" : "left-3 top-3"}`,
|
|
133
|
-
children: /* @__PURE__ */
|
|
134
|
+
children: /* @__PURE__ */ m(i, {
|
|
134
135
|
onFiles: (e) => {
|
|
135
|
-
|
|
136
|
+
D(e), V((e) => e === "mini" ? "panel" : e);
|
|
136
137
|
},
|
|
137
138
|
onPickerOpen: oe,
|
|
138
139
|
direction: "down",
|
|
139
140
|
canAddMore: ie
|
|
140
141
|
})
|
|
141
142
|
}) : null,
|
|
142
|
-
(
|
|
143
|
+
(E.length > 0 || A > 0) && !U ? /* @__PURE__ */ m("div", {
|
|
143
144
|
className: `absolute ${H ? "bottom-24 left-24 right-24" : "bottom-16 left-16 right-16"}`,
|
|
144
145
|
"data-testid": "assistant-voice-attachments",
|
|
145
|
-
children: /* @__PURE__ */
|
|
146
|
-
attachments:
|
|
147
|
-
onRemove:
|
|
146
|
+
children: /* @__PURE__ */ m(ee, {
|
|
147
|
+
attachments: E,
|
|
148
|
+
onRemove: O ?? (() => void 0),
|
|
148
149
|
onRetry: k ?? (() => void 0),
|
|
149
150
|
preparingCount: A
|
|
150
151
|
})
|
|
151
152
|
}) : null,
|
|
152
|
-
/* @__PURE__ */
|
|
153
|
+
/* @__PURE__ */ m("button", {
|
|
153
154
|
type: "button",
|
|
154
155
|
onClick: () => K((e) => !e),
|
|
155
156
|
className: `absolute ${H ? "bottom-6 right-6 size-14" : U ? "right-11 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`,
|
|
156
157
|
"aria-pressed": G,
|
|
157
158
|
"aria-label": F("voiceSession.transcript", "Voice transcript"),
|
|
158
159
|
"data-testid": "assistant-voice-transcript-toggle",
|
|
159
|
-
children: /* @__PURE__ */
|
|
160
|
+
children: /* @__PURE__ */ m(f, { className: H ? "size-6" : U ? "size-4" : "size-5" })
|
|
160
161
|
}),
|
|
161
|
-
/* @__PURE__ */
|
|
162
|
+
/* @__PURE__ */ m("button", {
|
|
162
163
|
type: "button",
|
|
163
164
|
onClick: () => V(W),
|
|
164
165
|
className: `absolute ${H ? "bottom-6 left-6 size-14" : U ? "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`,
|
|
165
166
|
"aria-label": W === "panel" ? F("voiceSession.expandPanel", "Show the conversation in the panel") : W === "full" ? F("voiceSession.expand", "Expand the conversation to full screen") : F("voiceSession.collapse", "Shrink to the compact controller"),
|
|
166
167
|
"data-testid": "assistant-voice-expand",
|
|
167
|
-
children: H ? /* @__PURE__ */
|
|
168
|
+
children: H ? /* @__PURE__ */ m(d, { className: "size-5" }) : /* @__PURE__ */ m(u, { className: U ? "size-4" : "size-5" })
|
|
168
169
|
})
|
|
169
170
|
]
|
|
170
171
|
});
|
|
171
172
|
};
|
|
172
|
-
function
|
|
173
|
+
function _(e, t) {
|
|
173
174
|
switch (e) {
|
|
174
175
|
case "network": return t("voiceSession.noticeNetwork", "Speech recognition lost its connection. Check your network — it will retry.");
|
|
175
176
|
case "not-capturing": return t("voiceSession.noticeNotCapturing", "The microphone did not start. Check that this site is allowed to use it, then try again.");
|
|
@@ -178,7 +179,7 @@ function v(e, t) {
|
|
|
178
179
|
default: return e;
|
|
179
180
|
}
|
|
180
181
|
}
|
|
181
|
-
function
|
|
182
|
+
function v(e, t) {
|
|
182
183
|
switch (e) {
|
|
183
184
|
case "mic-denied": return t("voiceSession.micDenied", "Microphone access is blocked. Allow it in your browser settings to talk.");
|
|
184
185
|
case "no-speech-support": return t("voiceSession.noSpeechSupport", "This browser cannot listen. Try a different browser, or type instead.");
|
|
@@ -187,4 +188,4 @@ function y(e, t) {
|
|
|
187
188
|
}
|
|
188
189
|
}
|
|
189
190
|
//#endregion
|
|
190
|
-
export {
|
|
191
|
+
export { g as AssistantVoiceSession };
|
|
@@ -22,6 +22,20 @@ interface Props {
|
|
|
22
22
|
state: VoiceStageState;
|
|
23
23
|
/** Live user transcript, or the assistant's caption while speaking. */
|
|
24
24
|
caption: string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Per-sentence progress through the spoken reply, when the engine reports it.
|
|
27
|
+
*
|
|
28
|
+
* ★★ Without this the docked strip showed the whole reply as one static
|
|
29
|
+
* block: four acceptance criteria — caption/audio sync, current-sentence
|
|
30
|
+
* emphasis, previous-sentence dimming, and not showing text ahead of the
|
|
31
|
+
* audio — were implemented in `VoiceCaption` and simply unreachable here,
|
|
32
|
+
* because the stage that renders it is only mounted when NOT docked. Docked
|
|
33
|
+
* is the view every session opens in.
|
|
34
|
+
*/
|
|
35
|
+
spokenChunks?: {
|
|
36
|
+
chunks: string[];
|
|
37
|
+
index: number;
|
|
38
|
+
} | null;
|
|
25
39
|
statusText: string;
|
|
26
40
|
/** Mic / interrupt control — the same orb, in its compact size. */
|
|
27
41
|
control: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceMiniController.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceMiniController.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"VoiceMiniController.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/ui/voice/VoiceMiniController.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,KAAK;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,uEAAuE;IACvE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1D,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAgHzC,CAAC"}
|
|
@@ -1,47 +1,54 @@
|
|
|
1
1
|
import { showsAssistantCaption as e, waveformIsActive as t, waveformIsSettled as n } from "../../voice/voiceStageState.js";
|
|
2
2
|
import { VoiceWaveform as r } from "./VoiceWaveform.js";
|
|
3
|
-
import {
|
|
3
|
+
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
4
|
//#region src/shared/assistant/ui/voice/VoiceMiniController.tsx
|
|
5
|
-
var
|
|
6
|
-
let
|
|
7
|
-
return /* @__PURE__ */
|
|
5
|
+
var s = ({ state: s, caption: c, spokenChunks: l = null, statusText: u, control: d, errorText: f = null }) => {
|
|
6
|
+
let p = e(s), m = p && l && l.index >= 0 ? l : null;
|
|
7
|
+
return /* @__PURE__ */ o("div", {
|
|
8
8
|
className: "flex min-h-0 w-full flex-1 items-center gap-3 px-4",
|
|
9
9
|
"data-testid": "assistant-voice-mini",
|
|
10
|
-
"data-state":
|
|
11
|
-
children: [/* @__PURE__ */
|
|
10
|
+
"data-state": s,
|
|
11
|
+
children: [/* @__PURE__ */ o("div", {
|
|
12
12
|
className: "flex min-w-0 flex-1 flex-col gap-1.5",
|
|
13
|
-
children: [/* @__PURE__ */
|
|
13
|
+
children: [/* @__PURE__ */ o("div", {
|
|
14
14
|
className: "flex items-center gap-2",
|
|
15
|
-
children: [/* @__PURE__ */
|
|
16
|
-
active: t(
|
|
17
|
-
settled: n(
|
|
18
|
-
tone:
|
|
19
|
-
}), /* @__PURE__ */
|
|
15
|
+
children: [/* @__PURE__ */ a(r, {
|
|
16
|
+
active: t(s),
|
|
17
|
+
settled: n(s),
|
|
18
|
+
tone: s === "speaking" ? "speaking" : "listening"
|
|
19
|
+
}), /* @__PURE__ */ a("p", {
|
|
20
20
|
className: "truncate text-xs text-text-muted",
|
|
21
21
|
"aria-live": "polite",
|
|
22
22
|
"data-testid": "assistant-voice-status",
|
|
23
|
-
children:
|
|
23
|
+
children: u
|
|
24
24
|
})]
|
|
25
|
-
}),
|
|
25
|
+
}), s === "mic-error" ? /* @__PURE__ */ a("p", {
|
|
26
26
|
className: "line-clamp-2 text-xs text-status-warning",
|
|
27
27
|
role: "alert",
|
|
28
28
|
"data-testid": "assistant-voice-mini-error",
|
|
29
|
-
children:
|
|
30
|
-
}) :
|
|
31
|
-
className: ["line-clamp-3 break-words text-left text-sm leading-snug",
|
|
29
|
+
children: f
|
|
30
|
+
}) : c ? /* @__PURE__ */ a("p", {
|
|
31
|
+
className: ["line-clamp-3 break-words text-left text-sm leading-snug", p ? "font-semibold text-text-primary" : "font-medium text-text-secondary"].join(" "),
|
|
32
32
|
role: "status",
|
|
33
33
|
"aria-live": "polite",
|
|
34
34
|
"data-testid": "assistant-voice-caption",
|
|
35
|
-
children:
|
|
36
|
-
|
|
35
|
+
children: m ? /* @__PURE__ */ o(i, { children: [m.index > 0 ? /* @__PURE__ */ o("span", {
|
|
36
|
+
className: "text-text-muted transition-colors duration-300",
|
|
37
|
+
children: [m.chunks[m.index - 1], " "]
|
|
38
|
+
}) : null, /* @__PURE__ */ a("span", {
|
|
39
|
+
className: "text-text-primary",
|
|
40
|
+
"data-testid": "assistant-voice-caption-current",
|
|
41
|
+
children: m.chunks[m.index]
|
|
42
|
+
})] }) : c
|
|
43
|
+
}) : /* @__PURE__ */ a("div", {
|
|
37
44
|
className: "h-9",
|
|
38
45
|
"aria-hidden": "true"
|
|
39
46
|
})]
|
|
40
|
-
}), /* @__PURE__ */
|
|
47
|
+
}), /* @__PURE__ */ a("div", {
|
|
41
48
|
className: "shrink-0",
|
|
42
|
-
children:
|
|
49
|
+
children: d
|
|
43
50
|
})]
|
|
44
51
|
});
|
|
45
52
|
};
|
|
46
53
|
//#endregion
|
|
47
|
-
export {
|
|
54
|
+
export { s as VoiceMiniController };
|