@corti/dictation-web 0.0.0-test.562 → 0.0.0-test.571
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/README.md +164 -112
- package/dist/bundle.js +1416 -546
- package/dist/components/audio-visualiser.d.ts +3 -2
- package/dist/components/audio-visualiser.js +15 -12
- package/dist/components/audio-visualiser.js.map +1 -1
- package/dist/components/corti-dictation.d.ts +26 -13
- package/dist/components/corti-dictation.js +70 -21
- package/dist/components/corti-dictation.js.map +1 -1
- package/dist/components/device-selector.d.ts +6 -16
- package/dist/components/device-selector.js +27 -58
- package/dist/components/device-selector.js.map +1 -1
- package/dist/components/keybinding-selector.d.ts +14 -0
- package/dist/components/keybinding-selector.js +81 -0
- package/dist/components/keybinding-selector.js.map +1 -0
- package/dist/components/language-selector.d.ts +8 -17
- package/dist/components/language-selector.js +26 -52
- package/dist/components/language-selector.js.map +1 -1
- package/dist/components/mode-selector.d.ts +14 -0
- package/dist/components/mode-selector.js +73 -0
- package/dist/components/mode-selector.js.map +1 -0
- package/dist/components/recording-button.d.ts +8 -14
- package/dist/components/recording-button.js +155 -96
- package/dist/components/recording-button.js.map +1 -1
- package/dist/components/settings-menu.d.ts +4 -2
- package/dist/components/settings-menu.js +34 -14
- package/dist/components/settings-menu.js.map +1 -1
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -1
- package/dist/contexts/dictation-context.d.ts +24 -14
- package/dist/contexts/dictation-context.js +128 -46
- package/dist/contexts/dictation-context.js.map +1 -1
- package/dist/controllers/devices-controller.d.ts +26 -0
- package/dist/controllers/devices-controller.js +99 -0
- package/dist/controllers/devices-controller.js.map +1 -0
- package/dist/controllers/dictation-controller.d.ts +29 -0
- package/dist/controllers/dictation-controller.js +179 -0
- package/dist/controllers/dictation-controller.js.map +1 -0
- package/dist/controllers/keybinding-controller.d.ts +17 -0
- package/dist/controllers/keybinding-controller.js +80 -0
- package/dist/controllers/keybinding-controller.js.map +1 -0
- package/dist/controllers/languages-controller.d.ts +26 -0
- package/dist/controllers/languages-controller.js +83 -0
- package/dist/controllers/languages-controller.js.map +1 -0
- package/dist/controllers/media-controller.d.ts +24 -0
- package/dist/controllers/media-controller.js +115 -0
- package/dist/controllers/media-controller.js.map +1 -0
- package/dist/index.d.ts +9 -7
- package/dist/index.js +30 -20
- package/dist/index.js.map +1 -1
- package/dist/src/components/audio-visualiser.d.ts +1 -0
- package/dist/src/components/audio-visualiser.js +6 -3
- package/dist/src/components/audio-visualiser.js.map +1 -1
- package/dist/src/components/corti-dictation.d.ts +21 -6
- package/dist/src/components/corti-dictation.js +25 -2
- package/dist/src/components/corti-dictation.js.map +1 -1
- package/dist/src/components/recording-button.d.ts +4 -0
- package/dist/src/components/recording-button.js +34 -10
- package/dist/src/components/recording-button.js.map +1 -1
- package/dist/src/components/settings-menu.js +1 -1
- package/dist/src/components/settings-menu.js.map +1 -1
- package/dist/src/constants.js +24 -6
- package/dist/src/constants.js.map +1 -1
- package/dist/src/contexts/dictation-context.d.ts +19 -5
- package/dist/src/contexts/dictation-context.js +32 -12
- package/dist/src/contexts/dictation-context.js.map +1 -1
- package/dist/src/controllers/DictationController.d.ts +5 -0
- package/dist/src/controllers/DictationController.js +27 -8
- package/dist/src/controllers/DictationController.js.map +1 -1
- package/dist/src/controllers/MediaController.d.ts +6 -0
- package/dist/src/controllers/MediaController.js +17 -1
- package/dist/src/controllers/MediaController.js.map +1 -1
- package/dist/src/styles/ComponentStyles.js +5 -5
- package/dist/src/styles/ComponentStyles.js.map +1 -1
- package/dist/src/styles/audio-visualiser.js +1 -1
- package/dist/src/styles/audio-visualiser.js.map +1 -1
- package/dist/src/styles/buttons.js +12 -12
- package/dist/src/styles/buttons.js.map +1 -1
- package/dist/src/styles/callout.js +7 -7
- package/dist/src/styles/callout.js.map +1 -1
- package/dist/src/styles/select.js +8 -8
- package/dist/src/styles/select.js.map +1 -1
- package/dist/src/styles/settings-menu.js +4 -4
- package/dist/src/styles/settings-menu.js.map +1 -1
- package/dist/src/types.d.ts +5 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/converters.js +4 -1
- package/dist/src/utils/converters.js.map +1 -1
- package/dist/src/utils/events.d.ts +11 -4
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/languages.js +2 -1
- package/dist/src/utils/languages.js.map +1 -1
- package/dist/src/utils/media.d.ts +1 -1
- package/dist/src/utils/media.js +13 -1
- package/dist/src/utils/media.js.map +1 -1
- package/dist/src/utils/token.d.ts +1 -1
- package/dist/src/utils/token.js +12 -11
- package/dist/src/utils/token.js.map +1 -1
- package/dist/styles/buttons.js +1 -2
- package/dist/styles/buttons.js.map +1 -1
- package/dist/styles/component-styles.d.ts +3 -0
- package/dist/styles/component-styles.js +32 -0
- package/dist/styles/component-styles.js.map +1 -0
- package/dist/styles/keybinding-selector.d.ts +2 -0
- package/dist/styles/keybinding-selector.js +72 -0
- package/dist/styles/keybinding-selector.js.map +1 -0
- package/dist/styles/mode-selector.d.ts +2 -0
- package/dist/styles/mode-selector.js +54 -0
- package/dist/styles/mode-selector.js.map +1 -0
- package/dist/styles/select.d.ts +1 -1
- package/dist/styles/select.js +6 -10
- package/dist/styles/select.js.map +1 -1
- package/dist/styles/settings-menu.js +9 -1
- package/dist/styles/settings-menu.js.map +1 -1
- package/dist/tsconfig.stories.tsbuildinfo +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/events.d.ts +12 -3
- package/dist/utils/events.js +14 -0
- package/dist/utils/events.js.map +1 -1
- package/dist/utils/keybinding.d.ts +49 -0
- package/dist/utils/keybinding.js +140 -0
- package/dist/utils/keybinding.js.map +1 -0
- package/dist/utils/languages.d.ts +4 -3
- package/dist/utils/languages.js.map +1 -1
- package/dist/utils/token.d.ts +1 -1
- package/dist/utils/token.js +12 -11
- package/dist/utils/token.js.map +1 -1
- package/package.json +9 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Corti } from "@corti/sdk";
|
|
2
2
|
import { type CSSResultGroup, LitElement } from "lit";
|
|
3
|
-
import type { ProxyOptions, RecordingState } from "../types.js";
|
|
3
|
+
import type { DictationMode, ProxyOptions, RecordingState } from "../types.js";
|
|
4
4
|
export declare const regionContext: {
|
|
5
5
|
__context__: string | undefined;
|
|
6
6
|
};
|
|
@@ -37,23 +37,36 @@ export declare const socketProxyContext: {
|
|
|
37
37
|
export declare const debugDisplayAudioContext: {
|
|
38
38
|
__context__: boolean | undefined;
|
|
39
39
|
};
|
|
40
|
-
export declare
|
|
40
|
+
export declare const modeContext: {
|
|
41
|
+
__context__: DictationMode;
|
|
42
|
+
};
|
|
43
|
+
export declare const keybindingContext: {
|
|
44
|
+
__context__: string | null | undefined;
|
|
45
|
+
};
|
|
46
|
+
export declare class DictationRoot extends LitElement {
|
|
47
|
+
#private;
|
|
41
48
|
region?: string;
|
|
42
49
|
tenantName?: string;
|
|
43
50
|
recordingState: RecordingState;
|
|
44
|
-
|
|
51
|
+
_accessToken?: string;
|
|
45
52
|
set accessToken(token: string | undefined);
|
|
46
53
|
get accessToken(): string | undefined;
|
|
47
|
-
|
|
54
|
+
_authConfig?: Corti.BearerOptions;
|
|
48
55
|
set authConfig(config: Corti.BearerOptions | undefined);
|
|
49
56
|
get authConfig(): Corti.BearerOptions | undefined;
|
|
50
57
|
socketUrl?: string;
|
|
51
58
|
socketProxy?: ProxyOptions;
|
|
52
59
|
dictationConfig?: Corti.TranscribeConfig;
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
_languages?: Corti.TranscribeSupportedLanguage[];
|
|
61
|
+
set languages(value: Corti.TranscribeSupportedLanguage[] | undefined);
|
|
62
|
+
get languages(): Corti.TranscribeSupportedLanguage[] | undefined;
|
|
63
|
+
_devices?: MediaDeviceInfo[];
|
|
64
|
+
set devices(value: MediaDeviceInfo[] | undefined);
|
|
65
|
+
get devices(): MediaDeviceInfo[] | undefined;
|
|
55
66
|
selectedDevice?: MediaDeviceInfo;
|
|
56
67
|
debug_displayAudio?: boolean;
|
|
68
|
+
mode: DictationMode;
|
|
69
|
+
keybinding?: string | null;
|
|
57
70
|
noWrapper: boolean;
|
|
58
71
|
static styles: CSSResultGroup;
|
|
59
72
|
constructor();
|
|
@@ -68,8 +81,8 @@ export declare class DictationContext extends LitElement {
|
|
|
68
81
|
tenant: undefined;
|
|
69
82
|
} | {
|
|
70
83
|
accessToken: string;
|
|
71
|
-
environment: string
|
|
72
|
-
tenant: string
|
|
84
|
+
environment: string;
|
|
85
|
+
tenant: string;
|
|
73
86
|
};
|
|
74
87
|
/**
|
|
75
88
|
* Sets the auth config and parses region/tenant from the initial token.
|
|
@@ -82,16 +95,13 @@ export declare class DictationContext extends LitElement {
|
|
|
82
95
|
tenant: undefined;
|
|
83
96
|
} | {
|
|
84
97
|
accessToken: string;
|
|
85
|
-
environment: string
|
|
86
|
-
tenant: string
|
|
98
|
+
environment: string;
|
|
99
|
+
tenant: string;
|
|
87
100
|
}>;
|
|
88
|
-
private _handleLanguageChanged;
|
|
89
|
-
private _handleDeviceChanged;
|
|
90
|
-
private _handleRecordingStateChanged;
|
|
91
101
|
render(): import("lit-html").TemplateResult<1>;
|
|
92
102
|
}
|
|
93
103
|
declare global {
|
|
94
104
|
interface HTMLElementTagNameMap {
|
|
95
|
-
"dictation-
|
|
105
|
+
"dictation-root": DictationRoot;
|
|
96
106
|
}
|
|
97
107
|
}
|
|
@@ -4,27 +4,38 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _DictationRoot_languagesController, _DictationRoot_devicesController, _DictationRoot_handleLanguageChanged, _DictationRoot_handleDeviceChanged, _DictationRoot_handleRecordingStateChanged, _DictationRoot_handleContextRequest, _DictationRoot_handleModeChanged, _DictationRoot_handleKeybindingChanged;
|
|
7
13
|
import { createContext, provide } from "@lit/context";
|
|
8
14
|
import { html, LitElement } from "lit";
|
|
9
15
|
import { customElement, property, state } from "lit/decorators.js";
|
|
10
|
-
import
|
|
16
|
+
import { DevicesController } from "../controllers/devices-controller.js";
|
|
17
|
+
import { LanguagesController } from "../controllers/languages-controller.js";
|
|
18
|
+
import ComponentStyles from "../styles/component-styles.js";
|
|
11
19
|
import { getInitialToken } from "../utils/auth.js";
|
|
12
20
|
import { commaSeparatedConverter } from "../utils/converters.js";
|
|
13
|
-
import { errorEvent } from "../utils/events.js";
|
|
21
|
+
import { errorEvent, keybindingChangedEvent, } from "../utils/events.js";
|
|
22
|
+
import { normalizeKeybinding } from "../utils/keybinding.js";
|
|
14
23
|
import { decodeToken } from "../utils/token.js";
|
|
15
|
-
export const regionContext = createContext("region");
|
|
16
|
-
export const tenantNameContext = createContext("tenantName");
|
|
17
|
-
export const languagesContext = createContext("languages");
|
|
18
|
-
export const devicesContext = createContext("devices");
|
|
19
|
-
export const selectedDeviceContext = createContext("selectedDevice");
|
|
20
|
-
export const recordingStateContext = createContext("recordingState");
|
|
21
|
-
export const accessTokenContext = createContext("accessToken");
|
|
22
|
-
export const dictationConfigContext = createContext("dictationConfig");
|
|
23
|
-
export const authConfigContext = createContext("authConfig");
|
|
24
|
-
export const socketUrlContext = createContext("socketUrl");
|
|
25
|
-
export const socketProxyContext = createContext("socketProxy");
|
|
26
|
-
export const debugDisplayAudioContext = createContext("debugDisplayAudio");
|
|
27
|
-
|
|
24
|
+
export const regionContext = createContext(Symbol("region"));
|
|
25
|
+
export const tenantNameContext = createContext(Symbol("tenantName"));
|
|
26
|
+
export const languagesContext = createContext(Symbol("languages"));
|
|
27
|
+
export const devicesContext = createContext(Symbol("devices"));
|
|
28
|
+
export const selectedDeviceContext = createContext(Symbol("selectedDevice"));
|
|
29
|
+
export const recordingStateContext = createContext(Symbol("recordingState"));
|
|
30
|
+
export const accessTokenContext = createContext(Symbol("accessToken"));
|
|
31
|
+
export const dictationConfigContext = createContext(Symbol("dictationConfig"));
|
|
32
|
+
export const authConfigContext = createContext(Symbol("authConfig"));
|
|
33
|
+
export const socketUrlContext = createContext(Symbol("socketUrl"));
|
|
34
|
+
export const socketProxyContext = createContext(Symbol("socketProxy"));
|
|
35
|
+
export const debugDisplayAudioContext = createContext(Symbol("debugDisplayAudio"));
|
|
36
|
+
export const modeContext = createContext(Symbol("mode"));
|
|
37
|
+
export const keybindingContext = createContext(Symbol("keybinding"));
|
|
38
|
+
let DictationRoot = class DictationRoot extends LitElement {
|
|
28
39
|
set accessToken(token) {
|
|
29
40
|
this.setAccessToken(token);
|
|
30
41
|
}
|
|
@@ -37,36 +48,85 @@ let DictationContext = class DictationContext extends LitElement {
|
|
|
37
48
|
get authConfig() {
|
|
38
49
|
return this._authConfig;
|
|
39
50
|
}
|
|
51
|
+
set languages(value) {
|
|
52
|
+
this._languages = value;
|
|
53
|
+
// Clear auto-loaded flag when languages are set via property
|
|
54
|
+
if (value !== undefined) {
|
|
55
|
+
__classPrivateFieldGet(this, _DictationRoot_languagesController, "f").clearAutoLoadedFlag();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
get languages() {
|
|
59
|
+
return this._languages;
|
|
60
|
+
}
|
|
61
|
+
set devices(value) {
|
|
62
|
+
this._devices = value;
|
|
63
|
+
// Clear auto-loaded flag when devices are set via property
|
|
64
|
+
if (value !== undefined) {
|
|
65
|
+
__classPrivateFieldGet(this, _DictationRoot_devicesController, "f").clearAutoLoadedFlag();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
get devices() {
|
|
69
|
+
return this._devices;
|
|
70
|
+
}
|
|
40
71
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
41
72
|
// Lifecycle
|
|
42
73
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
43
74
|
constructor() {
|
|
44
75
|
super();
|
|
45
76
|
this.recordingState = "stopped";
|
|
77
|
+
_DictationRoot_languagesController.set(this, new LanguagesController(this));
|
|
78
|
+
_DictationRoot_devicesController.set(this, new DevicesController(this));
|
|
79
|
+
this.mode = "toggle-to-talk";
|
|
46
80
|
this.noWrapper = false;
|
|
47
81
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
48
82
|
// Private event handlers
|
|
49
83
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
50
|
-
this
|
|
84
|
+
_DictationRoot_handleLanguageChanged.set(this, (e) => {
|
|
51
85
|
const event = e;
|
|
52
|
-
this.languages = event.detail.languages;
|
|
53
86
|
this.dictationConfig = {
|
|
54
87
|
...this.dictationConfig,
|
|
55
88
|
primaryLanguage: event.detail.selectedLanguage,
|
|
56
89
|
};
|
|
57
|
-
};
|
|
58
|
-
this
|
|
90
|
+
});
|
|
91
|
+
_DictationRoot_handleDeviceChanged.set(this, (e) => {
|
|
59
92
|
const event = e;
|
|
60
|
-
this.devices = event.detail.devices;
|
|
61
93
|
this.selectedDevice = event.detail.selectedDevice;
|
|
62
|
-
};
|
|
63
|
-
this
|
|
94
|
+
});
|
|
95
|
+
_DictationRoot_handleRecordingStateChanged.set(this, (e) => {
|
|
64
96
|
const event = e;
|
|
65
97
|
this.recordingState = event.detail.state;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
98
|
+
});
|
|
99
|
+
_DictationRoot_handleContextRequest.set(this, (e) => {
|
|
100
|
+
if (e.context === languagesContext) {
|
|
101
|
+
__classPrivateFieldGet(this, _DictationRoot_languagesController, "f").initialize();
|
|
102
|
+
}
|
|
103
|
+
else if (e.context === devicesContext) {
|
|
104
|
+
__classPrivateFieldGet(this, _DictationRoot_devicesController, "f").initialize();
|
|
105
|
+
}
|
|
106
|
+
else if (e.context === keybindingContext &&
|
|
107
|
+
e.contextTarget.tagName.toLowerCase() === "dictation-keybinding-selector") {
|
|
108
|
+
// Initialize keybinding to default "`" when setting first mounts
|
|
109
|
+
if (this.keybinding === undefined) {
|
|
110
|
+
this.keybinding = "`";
|
|
111
|
+
this.dispatchEvent(keybindingChangedEvent("`", "Backquote"));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
_DictationRoot_handleModeChanged.set(this, (e) => {
|
|
116
|
+
const event = e;
|
|
117
|
+
this.mode = event.detail.mode;
|
|
118
|
+
});
|
|
119
|
+
_DictationRoot_handleKeybindingChanged.set(this, (e) => {
|
|
120
|
+
const event = e;
|
|
121
|
+
const normalizedKeybinding = normalizeKeybinding(event.detail.key);
|
|
122
|
+
this.keybinding = normalizedKeybinding;
|
|
123
|
+
});
|
|
124
|
+
this.addEventListener("languages-changed", __classPrivateFieldGet(this, _DictationRoot_handleLanguageChanged, "f"));
|
|
125
|
+
this.addEventListener("recording-devices-changed", __classPrivateFieldGet(this, _DictationRoot_handleDeviceChanged, "f"));
|
|
126
|
+
this.addEventListener("recording-state-changed", __classPrivateFieldGet(this, _DictationRoot_handleRecordingStateChanged, "f"));
|
|
127
|
+
this.addEventListener("context-request", __classPrivateFieldGet(this, _DictationRoot_handleContextRequest, "f"));
|
|
128
|
+
this.addEventListener("mode-changed", __classPrivateFieldGet(this, _DictationRoot_handleModeChanged, "f"));
|
|
129
|
+
this.addEventListener("keybinding-changed", __classPrivateFieldGet(this, _DictationRoot_handleKeybindingChanged, "f"));
|
|
70
130
|
}
|
|
71
131
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
72
132
|
// Public methods
|
|
@@ -137,72 +197,94 @@ let DictationContext = class DictationContext extends LitElement {
|
|
|
137
197
|
</div>`;
|
|
138
198
|
}
|
|
139
199
|
};
|
|
200
|
+
_DictationRoot_languagesController = new WeakMap();
|
|
201
|
+
_DictationRoot_devicesController = new WeakMap();
|
|
202
|
+
_DictationRoot_handleLanguageChanged = new WeakMap();
|
|
203
|
+
_DictationRoot_handleDeviceChanged = new WeakMap();
|
|
204
|
+
_DictationRoot_handleRecordingStateChanged = new WeakMap();
|
|
205
|
+
_DictationRoot_handleContextRequest = new WeakMap();
|
|
206
|
+
_DictationRoot_handleModeChanged = new WeakMap();
|
|
207
|
+
_DictationRoot_handleKeybindingChanged = new WeakMap();
|
|
140
208
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
141
209
|
// Static
|
|
142
210
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
143
|
-
|
|
211
|
+
DictationRoot.styles = [ComponentStyles];
|
|
144
212
|
__decorate([
|
|
145
213
|
provide({ context: regionContext }),
|
|
146
214
|
state()
|
|
147
|
-
],
|
|
215
|
+
], DictationRoot.prototype, "region", void 0);
|
|
148
216
|
__decorate([
|
|
149
217
|
provide({ context: tenantNameContext }),
|
|
150
218
|
state()
|
|
151
|
-
],
|
|
219
|
+
], DictationRoot.prototype, "tenantName", void 0);
|
|
152
220
|
__decorate([
|
|
153
221
|
provide({ context: recordingStateContext }),
|
|
154
222
|
state()
|
|
155
|
-
],
|
|
223
|
+
], DictationRoot.prototype, "recordingState", void 0);
|
|
156
224
|
__decorate([
|
|
157
225
|
provide({ context: accessTokenContext }),
|
|
158
226
|
state()
|
|
159
|
-
],
|
|
227
|
+
], DictationRoot.prototype, "_accessToken", void 0);
|
|
160
228
|
__decorate([
|
|
161
229
|
property({ type: String })
|
|
162
|
-
],
|
|
230
|
+
], DictationRoot.prototype, "accessToken", null);
|
|
163
231
|
__decorate([
|
|
164
232
|
provide({ context: authConfigContext }),
|
|
165
233
|
state()
|
|
166
|
-
],
|
|
234
|
+
], DictationRoot.prototype, "_authConfig", void 0);
|
|
167
235
|
__decorate([
|
|
168
236
|
property({ attribute: false, type: Object })
|
|
169
|
-
],
|
|
237
|
+
], DictationRoot.prototype, "authConfig", null);
|
|
170
238
|
__decorate([
|
|
171
239
|
provide({ context: socketUrlContext }),
|
|
172
240
|
property({ type: String })
|
|
173
|
-
],
|
|
241
|
+
], DictationRoot.prototype, "socketUrl", void 0);
|
|
174
242
|
__decorate([
|
|
175
243
|
provide({ context: socketProxyContext }),
|
|
176
244
|
property({ attribute: false, type: Object })
|
|
177
|
-
],
|
|
245
|
+
], DictationRoot.prototype, "socketProxy", void 0);
|
|
178
246
|
__decorate([
|
|
179
247
|
provide({ context: dictationConfigContext }),
|
|
180
248
|
property({ attribute: false, type: Object })
|
|
181
|
-
],
|
|
249
|
+
], DictationRoot.prototype, "dictationConfig", void 0);
|
|
182
250
|
__decorate([
|
|
183
251
|
provide({ context: languagesContext }),
|
|
252
|
+
state()
|
|
253
|
+
], DictationRoot.prototype, "_languages", void 0);
|
|
254
|
+
__decorate([
|
|
184
255
|
property({
|
|
185
256
|
converter: commaSeparatedConverter,
|
|
186
257
|
type: Array,
|
|
187
258
|
})
|
|
188
|
-
],
|
|
259
|
+
], DictationRoot.prototype, "languages", null);
|
|
189
260
|
__decorate([
|
|
190
261
|
provide({ context: devicesContext }),
|
|
262
|
+
state()
|
|
263
|
+
], DictationRoot.prototype, "_devices", void 0);
|
|
264
|
+
__decorate([
|
|
191
265
|
property({ attribute: false, type: Array })
|
|
192
|
-
],
|
|
266
|
+
], DictationRoot.prototype, "devices", null);
|
|
193
267
|
__decorate([
|
|
194
268
|
provide({ context: selectedDeviceContext }),
|
|
195
269
|
property({ attribute: false, type: Object })
|
|
196
|
-
],
|
|
270
|
+
], DictationRoot.prototype, "selectedDevice", void 0);
|
|
197
271
|
__decorate([
|
|
198
272
|
provide({ context: debugDisplayAudioContext }),
|
|
199
273
|
property({ attribute: "debug-display-audio", type: Boolean })
|
|
200
|
-
],
|
|
274
|
+
], DictationRoot.prototype, "debug_displayAudio", void 0);
|
|
275
|
+
__decorate([
|
|
276
|
+
provide({ context: modeContext }),
|
|
277
|
+
property({ type: String })
|
|
278
|
+
], DictationRoot.prototype, "mode", void 0);
|
|
279
|
+
__decorate([
|
|
280
|
+
provide({ context: keybindingContext }),
|
|
281
|
+
property({ type: String })
|
|
282
|
+
], DictationRoot.prototype, "keybinding", void 0);
|
|
201
283
|
__decorate([
|
|
202
284
|
property({ type: Boolean })
|
|
203
|
-
],
|
|
204
|
-
|
|
205
|
-
customElement("dictation-
|
|
206
|
-
],
|
|
207
|
-
export {
|
|
285
|
+
], DictationRoot.prototype, "noWrapper", void 0);
|
|
286
|
+
DictationRoot = __decorate([
|
|
287
|
+
customElement("dictation-root")
|
|
288
|
+
], DictationRoot);
|
|
289
|
+
export { DictationRoot };
|
|
208
290
|
//# sourceMappingURL=dictation-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictation-context.js","sourceRoot":"","sources":["../../src/contexts/dictation-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport { type CSSResultGroup, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport ComponentStyles from \"../styles/ComponentStyles.js\";\nimport type { ProxyOptions, RecordingState } from \"../types.js\";\nimport { getInitialToken } from \"../utils/auth.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\nimport { errorEvent } from \"../utils/events.js\";\nimport { decodeToken } from \"../utils/token.js\";\n\nexport const regionContext = createContext<string | undefined>(\"region\");\nexport const tenantNameContext = createContext<string | undefined>(\n \"tenantName\",\n);\nexport const languagesContext = createContext<string[] | undefined>(\n \"languages\",\n);\nexport const devicesContext = createContext<MediaDeviceInfo[] | undefined>(\n \"devices\",\n);\nexport const selectedDeviceContext = createContext<MediaDeviceInfo | undefined>(\n \"selectedDevice\",\n);\nexport const recordingStateContext =\n createContext<RecordingState>(\"recordingState\");\nexport const accessTokenContext = createContext<string | undefined>(\n \"accessToken\",\n);\nexport const dictationConfigContext = createContext<\n Corti.TranscribeConfig | undefined\n>(\"dictationConfig\");\nexport const authConfigContext = createContext<Corti.BearerOptions | undefined>(\n \"authConfig\",\n);\nexport const socketUrlContext = createContext<string | undefined>(\"socketUrl\");\nexport const socketProxyContext = createContext<ProxyOptions | undefined>(\n \"socketProxy\",\n);\nexport const debugDisplayAudioContext = createContext<boolean | undefined>(\n \"debugDisplayAudio\",\n);\n\n@customElement(\"dictation-context-provider\")\nexport class DictationContext extends LitElement {\n // ─────────────────────────────────────────────────────────────────────────────\n // Context state\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: regionContext })\n @state()\n region?: string;\n\n @provide({ context: tenantNameContext })\n @state()\n tenantName?: string;\n\n @provide({ context: recordingStateContext })\n @state()\n recordingState: RecordingState = \"stopped\";\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: accessTokenContext })\n @state()\n private _accessToken?: string;\n\n @property({ type: String })\n set accessToken(token: string | undefined) {\n this.setAccessToken(token);\n }\n\n get accessToken(): string | undefined {\n return this._accessToken;\n }\n\n @provide({ context: authConfigContext })\n @state()\n private _authConfig?: Corti.BearerOptions;\n\n @property({ attribute: false, type: Object })\n set authConfig(config: Corti.BearerOptions | undefined) {\n this.setAuthConfig(config);\n }\n\n get authConfig(): Corti.BearerOptions | undefined {\n return this._authConfig;\n }\n\n @provide({ context: socketUrlContext })\n @property({ type: String })\n socketUrl?: string;\n\n @provide({ context: socketProxyContext })\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n @provide({ context: dictationConfigContext })\n @property({ attribute: false, type: Object })\n dictationConfig?: Corti.TranscribeConfig;\n\n @provide({ context: languagesContext })\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n languages?: string[];\n\n @provide({ context: devicesContext })\n @property({ attribute: false, type: Array })\n devices?: MediaDeviceInfo[];\n\n @provide({ context: selectedDeviceContext })\n @property({ attribute: false, type: Object })\n selectedDevice?: MediaDeviceInfo;\n\n @provide({ context: debugDisplayAudioContext })\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio?: boolean;\n\n @property({ type: Boolean })\n noWrapper: boolean = false;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Static\n // ─────────────────────────────────────────────────────────────────────────────\n\n static styles: CSSResultGroup = [ComponentStyles];\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────────────────────────\n\n constructor() {\n super();\n this.addEventListener(\"languages-changed\", this._handleLanguageChanged);\n this.addEventListener(\n \"recording-devices-changed\",\n this._handleDeviceChanged,\n );\n this.addEventListener(\n \"recording-state-changed\",\n this._handleRecordingStateChanged,\n );\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Sets the access token and parses region/tenant from it.\n * @returns ServerConfig with environment, tenant, and accessToken\n * @deprecated Use 'accessToken' property instead.\n */\n public setAccessToken(token: string | undefined) {\n this._accessToken = token;\n this.region = undefined;\n this.tenantName = undefined;\n\n if (!token) {\n return { accessToken: token, environment: undefined, tenant: undefined };\n }\n\n try {\n const decoded = decodeToken(token);\n\n this.region = decoded?.environment;\n this.tenantName = decoded?.tenant;\n\n return {\n accessToken: token,\n environment: decoded?.environment,\n tenant: decoded?.tenant,\n };\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return { accessToken: token, environment: undefined, tenant: undefined };\n }\n\n /**\n * Sets the auth config and parses region/tenant from the initial token.\n * @returns Promise with ServerConfig containing environment, tenant, and accessToken\n * @deprecated Use 'authConfig' property instead.\n */\n public async setAuthConfig(config?: Corti.BearerOptions) {\n this._authConfig = config;\n\n if (!config) {\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n try {\n const { accessToken } = await getInitialToken(config);\n\n return this.setAccessToken(accessToken);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Private event handlers\n // ─────────────────────────────────────────────────────────────────────────────\n\n private _handleLanguageChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.languages = event.detail.languages;\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: event.detail.selectedLanguage,\n };\n };\n\n private _handleDeviceChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.devices = event.detail.devices;\n this.selectedDevice = event.detail.selectedDevice;\n };\n\n private _handleRecordingStateChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.recordingState = event.detail.state;\n };\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n if (this.noWrapper) {\n return html`<slot></slot>`;\n }\n\n return html`<div class=\"wrapper\">\n <slot></slot>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-context-provider\": DictationContext;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dictation-context.js","sourceRoot":"","sources":["../../src/contexts/dictation-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport { type CSSResultGroup, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { DevicesController } from \"../controllers/devices-controller.js\";\nimport { LanguagesController } from \"../controllers/languages-controller.js\";\nimport ComponentStyles from \"../styles/component-styles.js\";\nimport type { DictationMode, ProxyOptions, RecordingState } from \"../types.js\";\nimport { getInitialToken } from \"../utils/auth.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\nimport {\n errorEvent,\n type KeybindingChangedEventDetail,\n keybindingChangedEvent,\n} from \"../utils/events.js\";\nimport { normalizeKeybinding } from \"../utils/keybinding.js\";\nimport { decodeToken } from \"../utils/token.js\";\n\nexport const regionContext = createContext<string | undefined>(\n Symbol(\"region\"),\n);\nexport const tenantNameContext = createContext<string | undefined>(\n Symbol(\"tenantName\"),\n);\nexport const languagesContext = createContext<\n Corti.TranscribeSupportedLanguage[] | undefined\n>(Symbol(\"languages\"));\nexport const devicesContext = createContext<MediaDeviceInfo[] | undefined>(\n Symbol(\"devices\"),\n);\nexport const selectedDeviceContext = createContext<MediaDeviceInfo | undefined>(\n Symbol(\"selectedDevice\"),\n);\nexport const recordingStateContext = createContext<RecordingState>(\n Symbol(\"recordingState\"),\n);\nexport const accessTokenContext = createContext<string | undefined>(\n Symbol(\"accessToken\"),\n);\nexport const dictationConfigContext = createContext<\n Corti.TranscribeConfig | undefined\n>(Symbol(\"dictationConfig\"));\nexport const authConfigContext = createContext<Corti.BearerOptions | undefined>(\n Symbol(\"authConfig\"),\n);\nexport const socketUrlContext = createContext<string | undefined>(\n Symbol(\"socketUrl\"),\n);\nexport const socketProxyContext = createContext<ProxyOptions | undefined>(\n Symbol(\"socketProxy\"),\n);\nexport const debugDisplayAudioContext = createContext<boolean | undefined>(\n Symbol(\"debugDisplayAudio\"),\n);\nexport const modeContext = createContext<DictationMode>(Symbol(\"mode\"));\nexport const keybindingContext = createContext<string | null | undefined>(\n Symbol(\"keybinding\"),\n);\n\n@customElement(\"dictation-root\")\nexport class DictationRoot extends LitElement {\n // ─────────────────────────────────────────────────────────────────────────────\n // Context state\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: regionContext })\n @state()\n region?: string;\n\n @provide({ context: tenantNameContext })\n @state()\n tenantName?: string;\n\n @provide({ context: recordingStateContext })\n @state()\n recordingState: RecordingState = \"stopped\";\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: accessTokenContext })\n @state()\n _accessToken?: string;\n\n @property({ type: String })\n set accessToken(token: string | undefined) {\n this.setAccessToken(token);\n }\n\n get accessToken(): string | undefined {\n return this._accessToken;\n }\n\n @provide({ context: authConfigContext })\n @state()\n _authConfig?: Corti.BearerOptions;\n\n @property({ attribute: false, type: Object })\n set authConfig(config: Corti.BearerOptions | undefined) {\n this.setAuthConfig(config);\n }\n\n get authConfig(): Corti.BearerOptions | undefined {\n return this._authConfig;\n }\n\n @provide({ context: socketUrlContext })\n @property({ type: String })\n socketUrl?: string;\n\n @provide({ context: socketProxyContext })\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n @provide({ context: dictationConfigContext })\n @property({ attribute: false, type: Object })\n dictationConfig?: Corti.TranscribeConfig;\n\n #languagesController = new LanguagesController(this);\n #devicesController = new DevicesController(this);\n\n @provide({ context: languagesContext })\n @state()\n _languages?: Corti.TranscribeSupportedLanguage[];\n\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languages(value: Corti.TranscribeSupportedLanguage[] | undefined) {\n this._languages = value;\n\n // Clear auto-loaded flag when languages are set via property\n if (value !== undefined) {\n this.#languagesController.clearAutoLoadedFlag();\n }\n }\n\n get languages(): Corti.TranscribeSupportedLanguage[] | undefined {\n return this._languages;\n }\n\n @provide({ context: devicesContext })\n @state()\n _devices?: MediaDeviceInfo[];\n\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n\n // Clear auto-loaded flag when devices are set via property\n if (value !== undefined) {\n this.#devicesController.clearAutoLoadedFlag();\n }\n }\n\n get devices(): MediaDeviceInfo[] | undefined {\n return this._devices;\n }\n\n @provide({ context: selectedDeviceContext })\n @property({ attribute: false, type: Object })\n selectedDevice?: MediaDeviceInfo;\n\n @provide({ context: debugDisplayAudioContext })\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio?: boolean;\n\n @provide({ context: modeContext })\n @property({ type: String })\n mode: DictationMode = \"toggle-to-talk\";\n\n @provide({ context: keybindingContext })\n @property({ type: String })\n keybinding?: string | null;\n\n @property({ type: Boolean })\n noWrapper: boolean = false;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Static\n // ─────────────────────────────────────────────────────────────────────────────\n\n static styles: CSSResultGroup = [ComponentStyles];\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────────────────────────\n\n constructor() {\n super();\n this.addEventListener(\"languages-changed\", this.#handleLanguageChanged);\n this.addEventListener(\n \"recording-devices-changed\",\n this.#handleDeviceChanged,\n );\n this.addEventListener(\n \"recording-state-changed\",\n this.#handleRecordingStateChanged,\n );\n this.addEventListener(\"context-request\", this.#handleContextRequest);\n this.addEventListener(\"mode-changed\", this.#handleModeChanged);\n this.addEventListener(\"keybinding-changed\", this.#handleKeybindingChanged);\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Sets the access token and parses region/tenant from it.\n * @returns ServerConfig with environment, tenant, and accessToken\n * @deprecated Use 'accessToken' property instead.\n */\n public setAccessToken(token: string | undefined) {\n this._accessToken = token;\n this.region = undefined;\n this.tenantName = undefined;\n\n if (!token) {\n return { accessToken: token, environment: undefined, tenant: undefined };\n }\n\n try {\n const decoded = decodeToken(token);\n\n this.region = decoded?.environment;\n this.tenantName = decoded?.tenant;\n\n return {\n accessToken: token,\n environment: decoded?.environment,\n tenant: decoded?.tenant,\n };\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return { accessToken: token, environment: undefined, tenant: undefined };\n }\n\n /**\n * Sets the auth config and parses region/tenant from the initial token.\n * @returns Promise with ServerConfig containing environment, tenant, and accessToken\n * @deprecated Use 'authConfig' property instead.\n */\n public async setAuthConfig(config?: Corti.BearerOptions) {\n this._authConfig = config;\n\n if (!config) {\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n try {\n const { accessToken } = await getInitialToken(config);\n\n return this.setAccessToken(accessToken);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Private event handlers\n // ─────────────────────────────────────────────────────────────────────────────\n\n #handleLanguageChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: event.detail.selectedLanguage,\n };\n };\n\n #handleDeviceChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.selectedDevice = event.detail.selectedDevice;\n };\n\n #handleRecordingStateChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.recordingState = event.detail.state;\n };\n\n #handleContextRequest = (e: ContextEvent<any>) => {\n if (e.context === languagesContext) {\n this.#languagesController.initialize();\n } else if (e.context === devicesContext) {\n this.#devicesController.initialize();\n } else if (\n e.context === keybindingContext &&\n e.contextTarget.tagName.toLowerCase() === \"dictation-keybinding-selector\"\n ) {\n // Initialize keybinding to default \"`\" when setting first mounts\n if (this.keybinding === undefined) {\n this.keybinding = \"`\";\n this.dispatchEvent(keybindingChangedEvent(\"`\", \"Backquote\"));\n }\n }\n };\n\n #handleModeChanged = (e: Event) => {\n const event = e as CustomEvent;\n\n this.mode = event.detail.mode;\n };\n\n #handleKeybindingChanged = (e: Event) => {\n const event = e as CustomEvent<KeybindingChangedEventDetail>;\n\n const normalizedKeybinding = normalizeKeybinding(event.detail.key);\n this.keybinding = normalizedKeybinding;\n };\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n if (this.noWrapper) {\n return html`<slot></slot>`;\n }\n\n return html`<div class=\"wrapper\">\n <slot></slot>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-root\": DictationRoot;\n }\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ReactiveController, ReactiveControllerHost } from "lit";
|
|
2
|
+
interface DevicesControllerHost extends ReactiveControllerHost {
|
|
3
|
+
devices?: MediaDeviceInfo[];
|
|
4
|
+
selectedDevice?: MediaDeviceInfo;
|
|
5
|
+
dispatchEvent(event: CustomEvent): boolean;
|
|
6
|
+
requestUpdate(): void;
|
|
7
|
+
_devices?: MediaDeviceInfo[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Controller that manages automatic device loading.
|
|
11
|
+
* Loads devices when they're not present and handles device changes.
|
|
12
|
+
* Reacts to updates and automatically loads devices when needed.
|
|
13
|
+
*/
|
|
14
|
+
export declare class DevicesController implements ReactiveController {
|
|
15
|
+
#private;
|
|
16
|
+
host: DevicesControllerHost;
|
|
17
|
+
constructor(host: DevicesControllerHost);
|
|
18
|
+
initialize(): void;
|
|
19
|
+
hostDisconnected(): void;
|
|
20
|
+
hostUpdate(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Clear the auto-loaded flag (when devices are set externally)
|
|
23
|
+
*/
|
|
24
|
+
clearAutoLoadedFlag(): void;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _DevicesController_instances, _DevicesController_autoLoadedDevices, _DevicesController_loadingDevices, _DevicesController_deviceChangeHandler, _DevicesController_initialized, _DevicesController_setupDeviceChangeListener, _DevicesController_removeDeviceChangeListener, _DevicesController_loadDevices;
|
|
13
|
+
import { getAudioDevices } from "../utils/devices.js";
|
|
14
|
+
import { errorEvent, readyEvent, recordingDevicesChangedEvent, } from "../utils/events.js";
|
|
15
|
+
/**
|
|
16
|
+
* Controller that manages automatic device loading.
|
|
17
|
+
* Loads devices when they're not present and handles device changes.
|
|
18
|
+
* Reacts to updates and automatically loads devices when needed.
|
|
19
|
+
*/
|
|
20
|
+
export class DevicesController {
|
|
21
|
+
constructor(host) {
|
|
22
|
+
_DevicesController_instances.add(this);
|
|
23
|
+
_DevicesController_autoLoadedDevices.set(this, false);
|
|
24
|
+
_DevicesController_loadingDevices.set(this, false);
|
|
25
|
+
_DevicesController_deviceChangeHandler.set(this, void 0);
|
|
26
|
+
_DevicesController_initialized.set(this, false);
|
|
27
|
+
this.host = host;
|
|
28
|
+
host.addController(this);
|
|
29
|
+
}
|
|
30
|
+
initialize() {
|
|
31
|
+
__classPrivateFieldSet(this, _DevicesController_initialized, true, "f");
|
|
32
|
+
if (this.host.devices === undefined) {
|
|
33
|
+
__classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this);
|
|
34
|
+
__classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_setupDeviceChangeListener).call(this);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
hostDisconnected() {
|
|
38
|
+
__classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_removeDeviceChangeListener).call(this);
|
|
39
|
+
}
|
|
40
|
+
hostUpdate() {
|
|
41
|
+
// Only react to updates after initialization
|
|
42
|
+
if (!__classPrivateFieldGet(this, _DevicesController_initialized, "f")) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// When devices are accessed but not present, load them
|
|
46
|
+
if (this.host.devices === undefined) {
|
|
47
|
+
__classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Clear the auto-loaded flag (when devices are set externally)
|
|
52
|
+
*/
|
|
53
|
+
clearAutoLoadedFlag() {
|
|
54
|
+
__classPrivateFieldSet(this, _DevicesController_autoLoadedDevices, false, "f");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_DevicesController_autoLoadedDevices = new WeakMap(), _DevicesController_loadingDevices = new WeakMap(), _DevicesController_deviceChangeHandler = new WeakMap(), _DevicesController_initialized = new WeakMap(), _DevicesController_instances = new WeakSet(), _DevicesController_setupDeviceChangeListener = function _DevicesController_setupDeviceChangeListener() {
|
|
58
|
+
if (__classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
__classPrivateFieldSet(this, _DevicesController_deviceChangeHandler, () => {
|
|
62
|
+
if (__classPrivateFieldGet(this, _DevicesController_autoLoadedDevices, "f")) {
|
|
63
|
+
__classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this);
|
|
64
|
+
}
|
|
65
|
+
}, "f");
|
|
66
|
+
navigator.mediaDevices.addEventListener("devicechange", __classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f"));
|
|
67
|
+
}, _DevicesController_removeDeviceChangeListener = function _DevicesController_removeDeviceChangeListener() {
|
|
68
|
+
if (!__classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
navigator.mediaDevices.removeEventListener("devicechange", __classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f"));
|
|
72
|
+
__classPrivateFieldSet(this, _DevicesController_deviceChangeHandler, undefined, "f");
|
|
73
|
+
}, _DevicesController_loadDevices = async function _DevicesController_loadDevices() {
|
|
74
|
+
if (__classPrivateFieldGet(this, _DevicesController_loadingDevices, "f")) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
__classPrivateFieldSet(this, _DevicesController_loadingDevices, true, "f");
|
|
78
|
+
try {
|
|
79
|
+
const { devices, defaultDevice } = await getAudioDevices();
|
|
80
|
+
__classPrivateFieldSet(this, _DevicesController_autoLoadedDevices, true, "f");
|
|
81
|
+
this.host._devices = devices;
|
|
82
|
+
// Use selected device if it still exists, otherwise fall back to default
|
|
83
|
+
const previousDevice = this.host.selectedDevice;
|
|
84
|
+
const selectedDevice = (previousDevice &&
|
|
85
|
+
devices.find((d) => d.deviceId === previousDevice.deviceId)) ??
|
|
86
|
+
defaultDevice;
|
|
87
|
+
this.host.selectedDevice = selectedDevice;
|
|
88
|
+
this.host.requestUpdate();
|
|
89
|
+
this.host.dispatchEvent(recordingDevicesChangedEvent(devices, selectedDevice));
|
|
90
|
+
this.host.dispatchEvent(readyEvent());
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
this.host.dispatchEvent(errorEvent(error));
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
__classPrivateFieldSet(this, _DevicesController_loadingDevices, false, "f");
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=devices-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices-controller.js","sourceRoot":"","sources":["../../src/controllers/devices-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { getAudioDevices } from \"../utils/devices.js\";\nimport {\n errorEvent,\n readyEvent,\n recordingDevicesChangedEvent,\n} from \"../utils/events.js\";\n\ninterface DevicesControllerHost extends ReactiveControllerHost {\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo;\n dispatchEvent(event: CustomEvent): boolean;\n requestUpdate(): void;\n _devices?: MediaDeviceInfo[];\n}\n\n/**\n * Controller that manages automatic device loading.\n * Loads devices when they're not present and handles device changes.\n * Reacts to updates and automatically loads devices when needed.\n */\nexport class DevicesController implements ReactiveController {\n host: DevicesControllerHost;\n #autoLoadedDevices: boolean = false;\n #loadingDevices: boolean = false;\n #deviceChangeHandler?: () => void;\n #initialized: boolean = false;\n\n constructor(host: DevicesControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n initialize(): void {\n this.#initialized = true;\n if (this.host.devices === undefined) {\n this.#loadDevices();\n this.#setupDeviceChangeListener();\n }\n }\n\n hostDisconnected(): void {\n this.#removeDeviceChangeListener();\n }\n\n hostUpdate(): void {\n // Only react to updates after initialization\n if (!this.#initialized) {\n return;\n }\n\n // When devices are accessed but not present, load them\n if (this.host.devices === undefined) {\n this.#loadDevices();\n }\n }\n\n #setupDeviceChangeListener(): void {\n if (this.#deviceChangeHandler) {\n return;\n }\n\n this.#deviceChangeHandler = () => {\n if (this.#autoLoadedDevices) {\n this.#loadDevices();\n }\n };\n\n navigator.mediaDevices.addEventListener(\n \"devicechange\",\n this.#deviceChangeHandler,\n );\n }\n\n #removeDeviceChangeListener(): void {\n if (!this.#deviceChangeHandler) {\n return;\n }\n\n navigator.mediaDevices.removeEventListener(\n \"devicechange\",\n this.#deviceChangeHandler,\n );\n this.#deviceChangeHandler = undefined;\n }\n\n async #loadDevices(): Promise<void> {\n if (this.#loadingDevices) {\n return;\n }\n\n this.#loadingDevices = true;\n\n try {\n const { devices, defaultDevice } = await getAudioDevices();\n\n this.#autoLoadedDevices = true;\n this.host._devices = devices;\n\n // Use selected device if it still exists, otherwise fall back to default\n const previousDevice = this.host.selectedDevice;\n const selectedDevice =\n (previousDevice &&\n devices.find((d) => d.deviceId === previousDevice.deviceId)) ??\n defaultDevice;\n\n this.host.selectedDevice = selectedDevice;\n\n this.host.requestUpdate();\n this.host.dispatchEvent(\n recordingDevicesChangedEvent(devices, selectedDevice),\n );\n this.host.dispatchEvent(readyEvent());\n } catch (error) {\n this.host.dispatchEvent(errorEvent(error));\n } finally {\n this.#loadingDevices = false;\n }\n }\n\n /**\n * Clear the auto-loaded flag (when devices are set externally)\n */\n clearAutoLoadedFlag(): void {\n this.#autoLoadedDevices = false;\n }\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type Corti } from "@corti/sdk";
|
|
2
|
+
import type { ReactiveController, ReactiveControllerHost } from "lit";
|
|
3
|
+
import type { ProxyOptions } from "../types.js";
|
|
4
|
+
interface DictationControllerHost extends ReactiveControllerHost {
|
|
5
|
+
_accessToken?: string;
|
|
6
|
+
_authConfig?: Corti.BearerOptions;
|
|
7
|
+
_region?: string;
|
|
8
|
+
_tenantName?: string;
|
|
9
|
+
_socketUrl?: string;
|
|
10
|
+
_socketProxy?: ProxyOptions;
|
|
11
|
+
_dictationConfig?: Corti.TranscribeConfig;
|
|
12
|
+
}
|
|
13
|
+
export type TranscribeMessage = Corti.TranscribeConfigStatusMessage | Corti.TranscribeUsageMessage | Corti.TranscribeEndedMessage | Corti.TranscribeErrorMessage | Corti.TranscribeTranscriptMessage | Corti.TranscribeCommandMessage | Corti.TranscribeFlushedMessage;
|
|
14
|
+
interface WebSocketCallbacks {
|
|
15
|
+
onMessage?: (message: TranscribeMessage) => void;
|
|
16
|
+
onError?: (error: Error) => void;
|
|
17
|
+
onClose?: (event: unknown) => void;
|
|
18
|
+
onNetworkActivity?: (direction: "sent" | "received", data: unknown) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare class DictationController implements ReactiveController {
|
|
21
|
+
#private;
|
|
22
|
+
host: DictationControllerHost;
|
|
23
|
+
constructor(host: DictationControllerHost);
|
|
24
|
+
hostDisconnected(): void;
|
|
25
|
+
connect(mediaRecorder: MediaRecorder | null, dictationConfig?: Corti.TranscribeConfig, callbacks?: WebSocketCallbacks): Promise<boolean>;
|
|
26
|
+
disconnect(onClose?: (event: unknown) => void): Promise<void>;
|
|
27
|
+
cleanup(): void;
|
|
28
|
+
}
|
|
29
|
+
export {};
|