@burdenoff/fe-libs 2026.1007.2 → 2026.1007.4
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/i18nManifest.d.ts +3 -0
- package/dist/shared/assistant/i18nManifest.d.ts.map +1 -1
- package/dist/shared/assistant/i18nManifest.js +3 -0
- package/dist/shared/assistant/index.d.ts +2 -0
- package/dist/shared/assistant/index.d.ts.map +1 -1
- package/dist/shared/assistant/store.d.ts +10 -0
- package/dist/shared/assistant/store.d.ts.map +1 -1
- package/dist/shared/assistant/store.js +19 -8
- package/dist/shared/assistant/ui/AssistantChatArea.d.ts.map +1 -1
- package/dist/shared/assistant/ui/AssistantChatArea.js +1070 -1067
- package/dist/shared/assistant/ui/useVoiceSession.d.ts +14 -1
- package/dist/shared/assistant/ui/useVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/useVoiceSession.js +241 -233
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts +7 -0
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.d.ts.map +1 -1
- package/dist/shared/assistant/ui/voice/AssistantVoiceSession.js +137 -130
- package/dist/shared/assistant/ui/voice/HandsFreePrivacyNotice.d.ts +27 -0
- package/dist/shared/assistant/ui/voice/HandsFreePrivacyNotice.d.ts.map +1 -0
- package/dist/shared/assistant/ui/voice/HandsFreePrivacyNotice.js +52 -0
- package/dist/shared/assistant/voice/handsfree/backendStreamTransport.d.ts +29 -6
- package/dist/shared/assistant/voice/handsfree/backendStreamTransport.d.ts.map +1 -1
- package/dist/shared/assistant/voice/handsfree/backendStreamTransport.js +138 -63
- package/dist/shared/assistant/voice/handsfree/handsFreeController.d.ts +7 -1
- package/dist/shared/assistant/voice/handsfree/handsFreeController.d.ts.map +1 -1
- package/dist/shared/assistant/voice/handsfree/handsFreeRuntime.d.ts +18 -10
- package/dist/shared/assistant/voice/handsfree/handsFreeRuntime.d.ts.map +1 -1
- package/dist/shared/assistant/voice/handsfree/handsFreeRuntime.js +46 -57
- package/dist/shared/assistant/voice/handsfree/streamingConfig.d.ts +103 -0
- package/dist/shared/assistant/voice/handsfree/streamingConfig.d.ts.map +1 -0
- package/dist/shared/assistant/voice/handsfree/streamingConfig.js +71 -0
- package/dist/shared/assistant/voice/handsfree/sttTransport.d.ts +12 -7
- package/dist/shared/assistant/voice/handsfree/sttTransport.d.ts.map +1 -1
- package/dist/shared/assistant/voice/handsfree/sttTransport.js +1 -1
- package/dist/shared/assistant/voice/handsfree/useHandsFreeInterrupt.d.ts +23 -1
- package/dist/shared/assistant/voice/handsfree/useHandsFreeInterrupt.d.ts.map +1 -1
- package/dist/shared/assistant/voice/handsfree/useHandsFreeInterrupt.js +63 -50
- package/dist/shared-assistant.js +189 -187
- package/package.json +3 -3
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
*
|
|
8
8
|
* - `audio-track` desktop Chrome >= 135: `SpeechRecognition.start(track)`
|
|
9
9
|
* fed OUR echo-cancelled track (`audioTrackTransport`);
|
|
10
|
-
* - `backend-stream` our gateway WebSocket (`backendStreamTransport`),
|
|
11
|
-
*
|
|
10
|
+
* - `backend-stream` our gateway WebSocket (`backendStreamTransport`), only
|
|
11
|
+
* when an app has configured it
|
|
12
|
+
* (`configureHandsFreeStreaming`) and only for the
|
|
13
|
+
* languages it carries;
|
|
12
14
|
* - `web-speech` the current `webkitSpeechRecognition` path, owned by
|
|
13
15
|
* `useVoiceInput` (`webSpeechTransport`). This is the
|
|
14
16
|
* fallback and what ships today.
|
|
@@ -71,10 +73,12 @@ export interface TransportEnvironment {
|
|
|
71
73
|
userAgent: string;
|
|
72
74
|
hasSpeechRecognition: boolean;
|
|
73
75
|
hasAudioWorklet: boolean;
|
|
74
|
-
/**
|
|
76
|
+
/** The app switched the backend stream on (`configureHandsFreeStreaming`). */
|
|
75
77
|
backendStreamEnabled: boolean;
|
|
76
|
-
/**
|
|
78
|
+
/** The app gave a usable stream URL (the gateway route exists). */
|
|
77
79
|
backendStreamConfigured: boolean;
|
|
80
|
+
/** The backend stream carries the person's input language (`streamLanguagesFor`). */
|
|
81
|
+
backendStreamLanguage: boolean;
|
|
78
82
|
}
|
|
79
83
|
/** Chrome (not Edge/Opera/Android) major version, or null. */
|
|
80
84
|
export declare function desktopChromeMajor(userAgent: string): number | null;
|
|
@@ -86,9 +90,10 @@ export interface TransportChoice {
|
|
|
86
90
|
because: string;
|
|
87
91
|
}
|
|
88
92
|
/**
|
|
89
|
-
* Pure choice. Order: the backend stream (when
|
|
90
|
-
* only route that works on Chrome
|
|
91
|
-
* desktop Chrome >= 135; else the
|
|
93
|
+
* Pure choice. Order: the backend stream (when switched on, configured AND
|
|
94
|
+
* carrying the person's language) is the only route that works on Chrome
|
|
95
|
+
* Android; else the audio-track route on desktop Chrome >= 135; else the
|
|
96
|
+
* current Web Speech path.
|
|
92
97
|
*/
|
|
93
98
|
export declare function selectSttTransport(env: TransportEnvironment): TransportChoice;
|
|
94
99
|
//# sourceMappingURL=sttTransport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sttTransport.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/voice/handsfree/sttTransport.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sttTransport.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/voice/handsfree/sttTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,GACR,aAAa,CAAC;AAElB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,CAAC;IACnB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB,sFAAsF;IACtF,SAAS,EAAE,0BAA0B,CAAC;IACtC,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,WAAW,GAAG,cAAc,CAAC;IACxD,oFAAoF;IACpF,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,KAAK,CACH,KAAK,EAAE,aAAa,GAAG,IAAI,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,aAAa,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9C,sDAAsD;IACtD,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,iDAAiD;IACjD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,0EAA0E;IAC1E,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,IAAI,IAAI,IAAI,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mEAAmE;IACnE,uBAAuB,EAAE,OAAO,CAAC;IACjC,qFAAqF;IACrF,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,8DAA8D;AAC9D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE;AAED,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,CAAC;IACvB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,eAAe,CAmB7E"}
|
|
@@ -10,7 +10,7 @@ function n(t) {
|
|
|
10
10
|
kind: "web-speech",
|
|
11
11
|
because: "no-audio-worklet"
|
|
12
12
|
};
|
|
13
|
-
if (t.backendStreamEnabled && t.backendStreamConfigured) return {
|
|
13
|
+
if (t.backendStreamEnabled && t.backendStreamConfigured && t.backendStreamLanguage) return {
|
|
14
14
|
kind: "backend-stream",
|
|
15
15
|
because: "flagged-and-configured"
|
|
16
16
|
};
|
|
@@ -7,7 +7,13 @@ export type HandsFreeMode =
|
|
|
7
7
|
/** Setting off, or no live unmuted session: nothing is open. */
|
|
8
8
|
"off"
|
|
9
9
|
/** Hands-free cannot run on this device (no capture, or a phone with no stream transport). */
|
|
10
|
-
| "unavailable"
|
|
10
|
+
| "unavailable"
|
|
11
|
+
/**
|
|
12
|
+
* The backend stream is about to be used and the person has not accepted
|
|
13
|
+
* its privacy notice yet: the notice is on screen, and the microphone stays
|
|
14
|
+
* CLOSED (no capture, no recogniser) until they choose.
|
|
15
|
+
*/
|
|
16
|
+
| "notice" | "starting" | "active"
|
|
11
17
|
/** Gave up; the tap-first Web Speech path is in charge, and says why. */
|
|
12
18
|
| "fallback";
|
|
13
19
|
export interface UseHandsFreeInterruptOptions {
|
|
@@ -19,6 +25,20 @@ export interface UseHandsFreeInterruptOptions {
|
|
|
19
25
|
/** The user's voice started while the assistant was audible. */
|
|
20
26
|
onBargeIn: () => void;
|
|
21
27
|
onTranscript: (text: string, final: boolean, language: string | undefined) => void;
|
|
28
|
+
/**
|
|
29
|
+
* The backend stream's privacy-notice version this person accepted (it is
|
|
30
|
+
* remembered per profile in the assistant store), or null.
|
|
31
|
+
*/
|
|
32
|
+
streamNoticeAccepted?: string | null;
|
|
33
|
+
/** The person pressed Continue on the notice `version`: remember it. */
|
|
34
|
+
onAcceptStreamNotice?: (version: string) => void;
|
|
35
|
+
}
|
|
36
|
+
/** The two answers to the backend stream's privacy notice. */
|
|
37
|
+
export interface HandsFreePrivacyNoticeActions {
|
|
38
|
+
/** Continue: remember the answer, then open the microphone. */
|
|
39
|
+
accept: () => void;
|
|
40
|
+
/** Not now: hands-free stays off for this conversation; tap-to-talk works. */
|
|
41
|
+
decline: () => void;
|
|
22
42
|
}
|
|
23
43
|
export interface HandsFreeState {
|
|
24
44
|
mode: HandsFreeMode;
|
|
@@ -28,6 +48,8 @@ export interface HandsFreeState {
|
|
|
28
48
|
fallbackReason: FallbackReason | null;
|
|
29
49
|
/** A barge-in produced no words: show "Say that again, or tap to replay". */
|
|
30
50
|
nothingHeard: boolean;
|
|
51
|
+
/** Non-null exactly while `mode` is `notice`: what the notice's buttons do. */
|
|
52
|
+
privacyNotice: HandsFreePrivacyNoticeActions | null;
|
|
31
53
|
}
|
|
32
54
|
export declare function useHandsFreeInterrupt(options: UseHandsFreeInterruptOptions): HandsFreeState;
|
|
33
55
|
//# sourceMappingURL=useHandsFreeInterrupt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHandsFreeInterrupt.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/voice/handsfree/useHandsFreeInterrupt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHandsFreeInterrupt.d.ts","sourceRoot":"","sources":["../../../../../src/shared/assistant/voice/handsfree/useHandsFreeInterrupt.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAe/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,oFAAoF;AACpF,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,MAAM,MAAM,aAAa;AACvB,gEAAgE;AAC9D,KAAK;AACP,8FAA8F;GAC5F,aAAa;AACf;;;;GAIG;GACD,QAAQ,GACR,UAAU,GACV,QAAQ;AACV,yEAAyE;GACvE,UAAU,CAAC;AAEf,MAAM,WAAW,4BAA4B;IAC3C,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GAAG,SAAS,KACzB,IAAI,CAAC;IACV;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,wEAAwE;IACxE,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED,8DAA8D;AAC9D,MAAM,WAAW,6BAA6B;IAC5C,+DAA+D;IAC/D,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,wFAAwF;IACxF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,6EAA6E;IAC7E,YAAY,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;CACrD;AA2BD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,cAAc,CAkKhB"}
|
|
@@ -1,70 +1,83 @@
|
|
|
1
1
|
import { activePlaybackSource as e } from "./playbackReference.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { HANDS_FREE_STREAM_NOTICE_VERSION as t, readHandsFreeStreaming as n, subscribeHandsFreeStreaming as r } from "./streamingConfig.js";
|
|
3
|
+
import { looksLikeHeadset as i, startMicCapture as a } from "./micCapture.js";
|
|
4
|
+
import { createHandsFreeController as o } from "./handsFreeController.js";
|
|
5
|
+
import { chooseTransport as s, createRuntimeTransport as c, isMobileUserAgent as l, readTransportEnvironment as u } from "./handsFreeRuntime.js";
|
|
6
|
+
import { useCallback as d, useEffect as f, useMemo as p, useRef as m, useState as h, useSyncExternalStore as g } from "react";
|
|
6
7
|
//#region src/shared/assistant/voice/handsfree/useHandsFreeInterrupt.ts
|
|
7
|
-
var
|
|
8
|
-
function
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
var _ = 3e4;
|
|
9
|
+
function v(e, t) {
|
|
10
|
+
let n = u(e, t), r = s(n), i = r.kind === "web-speech" && l(n.userAgent);
|
|
11
|
+
return {
|
|
12
|
+
kind: r.kind,
|
|
13
|
+
supported: n.hasAudioWorklet && !i
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
var y = (e) => e === "listening" || e === "thinking" || e === "speaking";
|
|
17
|
+
function b(s) {
|
|
18
|
+
let { enabled: l, phase: u, muted: b, language: x, streamNoticeAccepted: S } = s, C = m(s);
|
|
19
|
+
C.current = s;
|
|
20
|
+
let [w, T] = h(null), [E, D] = h(!1), [O, k] = h(!1), [A, j] = h(!1), M = m(!1), [N, P] = h(!1), F = g(r, n, n), I = p(() => v(x, F), [x, F]), L = I.kind;
|
|
21
|
+
f(() => {
|
|
22
|
+
S !== "google-stt-eu-1" && P(!1);
|
|
23
|
+
}, [S]), f(() => {
|
|
24
|
+
(u === "idle" || u === "ended") && (T(null), D(!1));
|
|
25
|
+
}, [u]), f(() => {
|
|
26
|
+
if (!l || typeof document > "u") return;
|
|
22
27
|
let e = null, t = () => {
|
|
23
|
-
e !== null && clearTimeout(e), e = null, document.visibilityState === "hidden" ? e = setTimeout(() =>
|
|
28
|
+
e !== null && clearTimeout(e), e = null, document.visibilityState === "hidden" ? e = setTimeout(() => k(!0), _) : k(!1);
|
|
24
29
|
};
|
|
25
30
|
return document.addEventListener("visibilitychange", t), () => {
|
|
26
31
|
document.removeEventListener("visibilitychange", t), e !== null && clearTimeout(e);
|
|
27
32
|
};
|
|
28
|
-
}, [
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
}, [l]);
|
|
34
|
+
let R = l && I.supported && y(u) && !b && w === null && !O, z = L === "backend-stream" && !N && S !== "google-stt-eu-1", B = R && z, V = R && !z, H = d(() => {
|
|
35
|
+
P(!0), C.current.onAcceptStreamNotice?.(t);
|
|
36
|
+
}, []), U = d(() => {
|
|
37
|
+
T("notice-declined");
|
|
38
|
+
}, []), W = p(() => ({
|
|
39
|
+
accept: H,
|
|
40
|
+
decline: U
|
|
41
|
+
}), [H, U]);
|
|
42
|
+
f(() => {
|
|
43
|
+
if (!V) return;
|
|
44
|
+
let t = o({
|
|
45
|
+
startCapture: a,
|
|
46
|
+
transport: c(L),
|
|
35
47
|
getSession: () => ({
|
|
36
|
-
phase:
|
|
37
|
-
muted:
|
|
48
|
+
phase: C.current.phase,
|
|
49
|
+
muted: C.current.muted
|
|
38
50
|
}),
|
|
39
51
|
getPlaybackSource: e,
|
|
40
|
-
getHeadsetHint: () =>
|
|
41
|
-
language: () =>
|
|
52
|
+
getHeadsetHint: () => M.current,
|
|
53
|
+
language: () => C.current.language,
|
|
42
54
|
onBargeIn: () => {
|
|
43
|
-
|
|
55
|
+
D(!1), C.current.onBargeIn();
|
|
44
56
|
},
|
|
45
57
|
onTranscript: (e, t, n) => {
|
|
46
|
-
|
|
58
|
+
D(!1), C.current.onTranscript(e, t, n);
|
|
47
59
|
},
|
|
48
|
-
onFallback:
|
|
49
|
-
onNothingHeard: () =>
|
|
50
|
-
isEnabled: () =>
|
|
51
|
-
}),
|
|
52
|
-
return
|
|
53
|
-
|
|
60
|
+
onFallback: T,
|
|
61
|
+
onNothingHeard: () => D(!0),
|
|
62
|
+
isEnabled: () => C.current.enabled
|
|
63
|
+
}), n = !1;
|
|
64
|
+
return t.start().then(() => {
|
|
65
|
+
n || j(!0);
|
|
54
66
|
}), navigator.mediaDevices?.enumerateDevices().then((e) => {
|
|
55
|
-
|
|
67
|
+
M.current = i(e.filter((e) => e.kind === "audiooutput").map((e) => e.label));
|
|
56
68
|
}).catch(() => void 0), () => {
|
|
57
|
-
|
|
69
|
+
n = !0, t.stop(), j(!1);
|
|
58
70
|
};
|
|
59
|
-
}, [
|
|
60
|
-
let
|
|
61
|
-
return
|
|
62
|
-
mode:
|
|
63
|
-
transportKind:
|
|
64
|
-
suppressWebSpeech:
|
|
65
|
-
fallbackReason:
|
|
66
|
-
nothingHeard:
|
|
71
|
+
}, [V, L]);
|
|
72
|
+
let G = "off";
|
|
73
|
+
return l && !I.supported ? G = "unavailable" : w === null ? B ? G = "notice" : V && (G = A ? "active" : "starting") : G = "fallback", {
|
|
74
|
+
mode: G,
|
|
75
|
+
transportKind: I.supported ? L : null,
|
|
76
|
+
suppressWebSpeech: l && I.supported && L !== "web-speech" && w === null && y(u),
|
|
77
|
+
fallbackReason: w,
|
|
78
|
+
nothingHeard: E,
|
|
79
|
+
privacyNotice: G === "notice" ? W : null
|
|
67
80
|
};
|
|
68
81
|
}
|
|
69
82
|
//#endregion
|
|
70
|
-
export {
|
|
83
|
+
export { _ as HIDDEN_RELEASE_MS, b as useHandsFreeInterrupt };
|