@corti/dictation-web 0.3.0 → 0.4.0-rc
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 +9 -4
- package/dist/bundle.js +3098 -1630
- package/dist/components/audio-visualiser.d.ts +5 -3
- package/dist/components/audio-visualiser.js +38 -46
- package/dist/components/audio-visualiser.js.map +1 -1
- package/dist/components/corti-dictation.d.ts +122 -0
- package/dist/components/corti-dictation.js +234 -0
- package/dist/components/corti-dictation.js.map +1 -0
- package/dist/components/device-selector.d.ts +14 -0
- package/dist/components/device-selector.js +75 -0
- package/dist/components/device-selector.js.map +1 -0
- package/dist/components/language-selector.d.ts +15 -0
- package/dist/components/language-selector.js +74 -0
- package/dist/components/language-selector.js.map +1 -0
- package/dist/components/recording-button.d.ts +29 -0
- package/dist/components/recording-button.js +217 -0
- package/dist/components/recording-button.js.map +1 -0
- package/dist/components/settings-menu.d.ts +9 -15
- package/dist/components/settings-menu.js +48 -161
- package/dist/components/settings-menu.js.map +1 -1
- package/dist/constants.d.ts +8 -2
- package/dist/constants.js +38 -12
- package/dist/constants.js.map +1 -1
- package/dist/contexts/dictation-context.d.ts +99 -0
- package/dist/contexts/dictation-context.js +257 -0
- package/dist/contexts/dictation-context.js.map +1 -0
- package/dist/controllers/DictationController.d.ts +35 -0
- package/dist/controllers/DictationController.js +130 -0
- package/dist/controllers/DictationController.js.map +1 -0
- package/dist/controllers/MediaController.d.ts +31 -0
- package/dist/controllers/MediaController.js +99 -0
- package/dist/controllers/MediaController.js.map +1 -0
- 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 +28 -0
- package/dist/controllers/dictation-controller.js +141 -0
- package/dist/controllers/dictation-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 -1
- package/dist/index.js +29 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +14 -0
- package/dist/src/components/audio-visualiser.d.ts +14 -0
- package/dist/src/components/audio-visualiser.js +57 -0
- package/dist/src/components/audio-visualiser.js.map +1 -0
- package/dist/src/components/corti-dictation.d.ts +123 -0
- package/dist/src/components/corti-dictation.js +224 -0
- package/dist/src/components/corti-dictation.js.map +1 -0
- package/dist/src/components/device-selector.d.ts +24 -0
- package/dist/src/components/device-selector.js +106 -0
- package/dist/src/components/device-selector.js.map +1 -0
- package/dist/src/components/language-selector.d.ts +24 -0
- package/dist/src/components/language-selector.js +100 -0
- package/dist/src/components/language-selector.js.map +1 -0
- package/dist/src/components/recording-button.d.ts +37 -0
- package/dist/src/components/recording-button.js +203 -0
- package/dist/src/components/recording-button.js.map +1 -0
- package/dist/src/components/settings-menu.d.ts +16 -0
- package/dist/src/components/settings-menu.js +80 -0
- package/dist/src/components/settings-menu.js.map +1 -0
- package/dist/src/constants.d.ts +4 -0
- package/dist/src/constants.js +37 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/contexts/dictation-context.d.ts +97 -0
- package/dist/src/contexts/dictation-context.js +208 -0
- package/dist/src/contexts/dictation-context.js.map +1 -0
- package/dist/src/controllers/DictationController.d.ts +35 -0
- package/dist/src/controllers/DictationController.js +130 -0
- package/dist/src/controllers/DictationController.js.map +1 -0
- package/dist/src/controllers/MediaController.d.ts +31 -0
- package/dist/src/controllers/MediaController.js +99 -0
- package/dist/src/controllers/MediaController.js.map +1 -0
- package/dist/src/icons/icons.d.ts +17 -0
- package/dist/src/icons/icons.js +158 -0
- package/dist/src/icons/icons.js.map +1 -0
- package/dist/src/styles/ComponentStyles.d.ts +2 -0
- package/dist/src/styles/ComponentStyles.js +18 -0
- package/dist/src/styles/ComponentStyles.js.map +1 -0
- package/dist/src/styles/audio-visualiser.d.ts +2 -0
- package/dist/src/styles/audio-visualiser.js +33 -0
- package/dist/src/styles/audio-visualiser.js.map +1 -0
- package/dist/src/styles/buttons.d.ts +2 -0
- package/dist/src/styles/buttons.js +52 -0
- package/dist/src/styles/buttons.js.map +1 -0
- package/dist/src/styles/callout.d.ts +2 -0
- package/dist/src/styles/callout.js +23 -0
- package/dist/src/styles/callout.js.map +1 -0
- package/dist/src/styles/default-theme.d.ts +2 -0
- package/dist/src/styles/default-theme.js +50 -0
- package/dist/src/styles/default-theme.js.map +1 -0
- package/dist/src/styles/recording-button.d.ts +2 -0
- package/dist/src/styles/recording-button.js +8 -0
- package/dist/src/styles/recording-button.js.map +1 -0
- package/dist/src/styles/select.d.ts +2 -0
- package/dist/src/styles/select.js +36 -0
- package/dist/src/styles/select.js.map +1 -0
- package/dist/src/styles/settings-menu.d.ts +2 -0
- package/dist/src/styles/settings-menu.js +34 -0
- package/dist/src/styles/settings-menu.js.map +1 -0
- package/dist/src/types.d.ts +7 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/auth.d.ts +9 -0
- package/dist/src/utils/auth.js +21 -0
- package/dist/src/utils/auth.js.map +1 -0
- package/dist/src/utils/converters.d.ts +4 -0
- package/dist/src/utils/converters.js +8 -0
- package/dist/src/utils/converters.js.map +1 -0
- package/dist/src/utils/devices.d.ts +26 -0
- package/dist/src/utils/devices.js +53 -0
- package/dist/src/utils/devices.js.map +1 -0
- package/dist/src/utils/events.d.ts +44 -0
- package/dist/src/utils/events.js +88 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/languages.d.ts +7 -0
- package/dist/src/utils/languages.js +29 -0
- package/dist/src/utils/languages.js.map +1 -0
- package/dist/src/utils/media.d.ts +6 -0
- package/dist/src/utils/media.js +39 -0
- package/dist/src/utils/media.js.map +1 -0
- package/dist/src/utils/token.d.ts +13 -0
- package/dist/src/utils/token.js +60 -0
- package/dist/src/utils/token.js.map +1 -0
- package/dist/src/utils/validation.d.ts +1 -0
- package/dist/src/utils/validation.js +7 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/stories/audio-visualiser.stories.d.ts +39 -0
- package/dist/stories/audio-visualiser.stories.js +71 -0
- package/dist/stories/audio-visualiser.stories.js.map +1 -0
- package/dist/stories/corti-dictation.stories.d.ts +27 -0
- package/dist/stories/corti-dictation.stories.js +129 -0
- package/dist/stories/corti-dictation.stories.js.map +1 -0
- package/dist/stories/device-selector.stories.d.ts +18 -0
- package/dist/stories/device-selector.stories.js +84 -0
- package/dist/stories/device-selector.stories.js.map +1 -0
- package/dist/stories/language-selector.stories.d.ts +18 -0
- package/dist/stories/language-selector.stories.js +53 -0
- package/dist/stories/language-selector.stories.js.map +1 -0
- package/dist/stories/recording-button.stories.d.ts +27 -0
- package/dist/stories/recording-button.stories.js +90 -0
- package/dist/stories/recording-button.stories.js.map +1 -0
- package/dist/stories/settings-menu.stories.d.ts +23 -0
- package/dist/stories/settings-menu.stories.js +156 -0
- package/dist/stories/settings-menu.stories.js.map +1 -0
- package/dist/styles/ComponentStyles.js +5 -39
- package/dist/styles/ComponentStyles.js.map +1 -1
- package/dist/styles/audio-visualiser.d.ts +2 -0
- package/dist/styles/audio-visualiser.js +33 -0
- package/dist/styles/audio-visualiser.js.map +1 -0
- package/dist/styles/buttons.js +19 -26
- package/dist/styles/buttons.js.map +1 -1
- package/dist/styles/callout.js +7 -17
- package/dist/styles/callout.js.map +1 -1
- package/dist/styles/component-styles.d.ts +2 -0
- package/dist/styles/component-styles.js +22 -0
- package/dist/styles/component-styles.js.map +1 -0
- package/dist/styles/default-theme.d.ts +2 -0
- package/dist/styles/default-theme.js +14 -0
- package/dist/styles/default-theme.js.map +1 -0
- package/dist/styles/recording-button.d.ts +2 -0
- package/dist/styles/recording-button.js +8 -0
- package/dist/styles/recording-button.js.map +1 -0
- package/dist/styles/select.js +9 -9
- package/dist/styles/select.js.map +1 -1
- package/dist/styles/settings-menu.d.ts +2 -0
- package/dist/styles/settings-menu.js +34 -0
- package/dist/styles/settings-menu.js.map +1 -0
- package/dist/tsconfig.stories.tsbuildinfo +1 -0
- package/dist/types.d.ts +6 -8
- package/dist/types.js.map +1 -1
- package/dist/utils/auth.d.ts +9 -0
- package/dist/utils/auth.js +21 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/converters.d.ts +4 -0
- package/dist/utils/converters.js +8 -0
- package/dist/utils/converters.js.map +1 -0
- package/dist/utils/devices.d.ts +26 -0
- package/dist/utils/devices.js +53 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/events.d.ts +44 -0
- package/dist/utils/events.js +88 -0
- package/dist/utils/events.js.map +1 -0
- package/dist/utils/languages.d.ts +8 -0
- package/dist/utils/languages.js +29 -0
- package/dist/utils/languages.js.map +1 -0
- package/dist/utils/media.d.ts +6 -0
- package/dist/utils/media.js +39 -0
- package/dist/utils/media.js.map +1 -0
- package/dist/utils/token.d.ts +13 -0
- package/dist/utils/token.js +60 -0
- package/dist/utils/token.js.map +1 -0
- package/dist/utils/validation.d.ts +1 -0
- package/dist/utils/validation.js +7 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +29 -55
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { css, html, LitElement } from "lit";
|
|
8
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
9
|
+
import { classMap } from "lit/directives/class-map.js";
|
|
10
|
+
import { createRef, ref } from "lit/directives/ref.js";
|
|
11
|
+
import { DEFAULT_DICTATION_CONFIG } from "../constants.js";
|
|
12
|
+
import { commaSeparatedConverter } from "../utils/converters.js";
|
|
13
|
+
import "../contexts/dictation-context.js";
|
|
14
|
+
import "./recording-button.js";
|
|
15
|
+
import "./settings-menu.js";
|
|
16
|
+
let CortiDictation = class CortiDictation extends LitElement {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
// Private refs
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
this.recordingButtonRef = createRef();
|
|
23
|
+
this.contextProviderRef = createRef();
|
|
24
|
+
/**
|
|
25
|
+
* Which settings should be available in the UI.
|
|
26
|
+
* If an empty array is passed, the settings will be disabled entirely.
|
|
27
|
+
* Options are language and devices
|
|
28
|
+
*/
|
|
29
|
+
this.settingsEnabled = ["device", "language"];
|
|
30
|
+
/**
|
|
31
|
+
* When false (default), allows the start/stop button from taking focus when clicked,
|
|
32
|
+
* disabling textareas or other input elements to maintain focus.
|
|
33
|
+
* Set to "true" to allow the button to receive focus on click.
|
|
34
|
+
*/
|
|
35
|
+
this.allowButtonFocus = false;
|
|
36
|
+
/**
|
|
37
|
+
* Overrides any device selection and instead uses getDisplayMedia to stream system audio.
|
|
38
|
+
* Should only be used for debugging.
|
|
39
|
+
*/
|
|
40
|
+
this.debug_displayAudio = false;
|
|
41
|
+
this._dictationConfig = DEFAULT_DICTATION_CONFIG;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* List of all language codes available for use with the Web Component.
|
|
45
|
+
* Default list depends on the accessToken
|
|
46
|
+
*/
|
|
47
|
+
set languagesSupported(value) {
|
|
48
|
+
this._languagesSupported = value;
|
|
49
|
+
}
|
|
50
|
+
get languagesSupported() {
|
|
51
|
+
return (this.contextProviderRef.value?.languages || this._languagesSupported || []);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Configuration settings for dictation
|
|
55
|
+
*/
|
|
56
|
+
set dictationConfig(value) {
|
|
57
|
+
this._dictationConfig = value;
|
|
58
|
+
}
|
|
59
|
+
get dictationConfig() {
|
|
60
|
+
return (this.contextProviderRef.value?.dictationConfig || this._dictationConfig);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* List of available recording devices
|
|
64
|
+
*/
|
|
65
|
+
set devices(value) {
|
|
66
|
+
this._devices = value;
|
|
67
|
+
}
|
|
68
|
+
get devices() {
|
|
69
|
+
return this.contextProviderRef.value?.devices || this._devices || [];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The selected device used for recording (MediaDeviceInfo).
|
|
73
|
+
*/
|
|
74
|
+
set selectedDevice(value) {
|
|
75
|
+
this._selectedDevice = value;
|
|
76
|
+
}
|
|
77
|
+
get selectedDevice() {
|
|
78
|
+
return (this.contextProviderRef.value?.selectedDevice || this._selectedDevice);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Current state of recording (stopped, recording, initializing and stopping, ).
|
|
82
|
+
*/
|
|
83
|
+
get recordingState() {
|
|
84
|
+
return this.contextProviderRef.value?.recordingState || "stopped";
|
|
85
|
+
}
|
|
86
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
87
|
+
// Public methods
|
|
88
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Set the latest access token.
|
|
91
|
+
* @returns ServerConfig with environment, tenant, and accessToken
|
|
92
|
+
* @deprecated Use 'accessToken' property instead.
|
|
93
|
+
*/
|
|
94
|
+
setAccessToken(token) {
|
|
95
|
+
this.accessToken = token;
|
|
96
|
+
return (this.contextProviderRef.value?.setAccessToken(token) ?? {
|
|
97
|
+
accessToken: token,
|
|
98
|
+
environment: undefined,
|
|
99
|
+
tenant: undefined,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Set the auth configuration for OAuth flows.
|
|
104
|
+
* @returns Promise with ServerConfig containing environment, tenant, and accessToken
|
|
105
|
+
* @deprecated Use 'authConfig' property instead.
|
|
106
|
+
*/
|
|
107
|
+
async setAuthConfig(config) {
|
|
108
|
+
this.authConfig = config;
|
|
109
|
+
return (this.contextProviderRef.value?.setAuthConfig(config) ?? {
|
|
110
|
+
accessToken: undefined,
|
|
111
|
+
environment: undefined,
|
|
112
|
+
tenant: undefined,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Starts a recording.
|
|
117
|
+
*/
|
|
118
|
+
startRecording() {
|
|
119
|
+
this.recordingButtonRef.value?.startRecording();
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Stops a recording.
|
|
123
|
+
*/
|
|
124
|
+
stopRecording() {
|
|
125
|
+
this.recordingButtonRef.value?.stopRecording();
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Starts or stops recording. Convenience layer on top of the start/stop methods.
|
|
129
|
+
*/
|
|
130
|
+
toggleRecording() {
|
|
131
|
+
this.recordingButtonRef.value?.toggleRecording();
|
|
132
|
+
}
|
|
133
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
134
|
+
// Render
|
|
135
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
136
|
+
render() {
|
|
137
|
+
const isHidden = !this.accessToken &&
|
|
138
|
+
!this.authConfig &&
|
|
139
|
+
!this.socketUrl &&
|
|
140
|
+
!this.socketProxy;
|
|
141
|
+
return html `
|
|
142
|
+
<dictation-context-provider
|
|
143
|
+
${ref(this.contextProviderRef)}
|
|
144
|
+
class=${classMap({ hidden: isHidden })}
|
|
145
|
+
.accessToken=${this.accessToken}
|
|
146
|
+
.authConfig=${this.authConfig}
|
|
147
|
+
.socketUrl=${this.socketUrl}
|
|
148
|
+
.socketProxy=${this.socketProxy}
|
|
149
|
+
.dictationConfig=${this._dictationConfig}
|
|
150
|
+
.languages=${this._languagesSupported}
|
|
151
|
+
.devices=${this._devices}
|
|
152
|
+
.selectedDevice=${this._selectedDevice}
|
|
153
|
+
.debug_displayAudio=${this.debug_displayAudio}
|
|
154
|
+
>
|
|
155
|
+
<recording-button
|
|
156
|
+
${ref(this.recordingButtonRef)}
|
|
157
|
+
.preventFocus=${!this.allowButtonFocus}
|
|
158
|
+
></recording-button>
|
|
159
|
+
<settings-menu .settingsEnabled=${this.settingsEnabled}></settings-menu>
|
|
160
|
+
</dictation-context-provider>
|
|
161
|
+
`;
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
CortiDictation.styles = css `
|
|
165
|
+
.hidden {
|
|
166
|
+
display: none;
|
|
167
|
+
}
|
|
168
|
+
`;
|
|
169
|
+
__decorate([
|
|
170
|
+
property({ type: String })
|
|
171
|
+
], CortiDictation.prototype, "accessToken", void 0);
|
|
172
|
+
__decorate([
|
|
173
|
+
property({ attribute: false, type: Object })
|
|
174
|
+
], CortiDictation.prototype, "authConfig", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
property({ type: String })
|
|
177
|
+
], CortiDictation.prototype, "socketUrl", void 0);
|
|
178
|
+
__decorate([
|
|
179
|
+
property({ attribute: false, type: Object })
|
|
180
|
+
], CortiDictation.prototype, "socketProxy", void 0);
|
|
181
|
+
__decorate([
|
|
182
|
+
property({
|
|
183
|
+
converter: commaSeparatedConverter,
|
|
184
|
+
type: Array,
|
|
185
|
+
})
|
|
186
|
+
], CortiDictation.prototype, "languagesSupported", null);
|
|
187
|
+
__decorate([
|
|
188
|
+
state()
|
|
189
|
+
], CortiDictation.prototype, "_languagesSupported", void 0);
|
|
190
|
+
__decorate([
|
|
191
|
+
property({
|
|
192
|
+
converter: commaSeparatedConverter,
|
|
193
|
+
type: Array,
|
|
194
|
+
})
|
|
195
|
+
], CortiDictation.prototype, "settingsEnabled", void 0);
|
|
196
|
+
__decorate([
|
|
197
|
+
property({ type: Boolean })
|
|
198
|
+
], CortiDictation.prototype, "allowButtonFocus", void 0);
|
|
199
|
+
__decorate([
|
|
200
|
+
property({ attribute: "debug-display-audio", type: Boolean })
|
|
201
|
+
], CortiDictation.prototype, "debug_displayAudio", void 0);
|
|
202
|
+
__decorate([
|
|
203
|
+
property({ attribute: false, type: Object })
|
|
204
|
+
], CortiDictation.prototype, "dictationConfig", null);
|
|
205
|
+
__decorate([
|
|
206
|
+
state()
|
|
207
|
+
], CortiDictation.prototype, "_dictationConfig", void 0);
|
|
208
|
+
__decorate([
|
|
209
|
+
property({ attribute: false, type: Array })
|
|
210
|
+
], CortiDictation.prototype, "devices", null);
|
|
211
|
+
__decorate([
|
|
212
|
+
state()
|
|
213
|
+
], CortiDictation.prototype, "_devices", void 0);
|
|
214
|
+
__decorate([
|
|
215
|
+
property({ attribute: false, type: Object })
|
|
216
|
+
], CortiDictation.prototype, "selectedDevice", null);
|
|
217
|
+
__decorate([
|
|
218
|
+
state()
|
|
219
|
+
], CortiDictation.prototype, "_selectedDevice", void 0);
|
|
220
|
+
CortiDictation = __decorate([
|
|
221
|
+
customElement("corti-dictation")
|
|
222
|
+
], CortiDictation);
|
|
223
|
+
export { CortiDictation };
|
|
224
|
+
//# sourceMappingURL=corti-dictation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corti-dictation.js","sourceRoot":"","sources":["../../../src/components/corti-dictation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { css, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { createRef, type Ref, ref } from \"lit/directives/ref.js\";\nimport { DEFAULT_DICTATION_CONFIG } from \"../constants.js\";\nimport type { DictationContext } from \"../contexts/dictation-context.js\";\nimport type {\n ConfigurableSettings,\n ProxyOptions,\n RecordingState,\n} from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\nimport type { RecordingButton } from \"./recording-button.js\";\n\nimport \"../contexts/dictation-context.js\";\nimport \"./recording-button.js\";\nimport \"./settings-menu.js\";\n\n@customElement(\"corti-dictation\")\nexport class CortiDictation extends LitElement {\n static styles = css`\n .hidden {\n display: none;\n }\n `;\n // ─────────────────────────────────────────────────────────────────────────────\n // Private refs\n // ─────────────────────────────────────────────────────────────────────────────\n\n private recordingButtonRef: Ref<RecordingButton> = createRef();\n private contextProviderRef: Ref<DictationContext> = createRef();\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Latest access token\n */\n @property({ type: String })\n accessToken?: string;\n\n /**\n * Authentication configuration with optional refresh mechanism.\n */\n @property({ attribute: false, type: Object })\n authConfig?: Corti.BearerOptions;\n\n /**\n * WebSocket URL for proxy connection. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ type: String })\n socketUrl?: string;\n\n /**\n * Socket proxy configuration object. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n /**\n * List of all language codes available for use with the Web Component.\n * Default list depends on the accessToken\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languagesSupported(value: string[] | undefined) {\n this._languagesSupported = value;\n }\n\n get languagesSupported(): string[] {\n return (\n this.contextProviderRef.value?.languages || this._languagesSupported || []\n );\n }\n\n @state()\n private _languagesSupported?: string[];\n\n /**\n * Which settings should be available in the UI.\n * If an empty array is passed, the settings will be disabled entirely.\n * Options are language and devices\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n settingsEnabled: ConfigurableSettings[] = [\"device\", \"language\"];\n\n /**\n * When false (default), allows the start/stop button from taking focus when clicked,\n * disabling textareas or other input elements to maintain focus.\n * Set to \"true\" to allow the button to receive focus on click.\n */\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n /**\n * Overrides any device selection and instead uses getDisplayMedia to stream system audio.\n * Should only be used for debugging.\n */\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio: boolean = false;\n\n /**\n * Configuration settings for dictation\n */\n @property({ attribute: false, type: Object })\n set dictationConfig(value: Corti.TranscribeConfig) {\n this._dictationConfig = value;\n }\n\n get dictationConfig(): Corti.TranscribeConfig {\n return (\n this.contextProviderRef.value?.dictationConfig || this._dictationConfig\n );\n }\n\n @state()\n private _dictationConfig: Corti.TranscribeConfig = DEFAULT_DICTATION_CONFIG;\n\n /**\n * List of available recording devices\n */\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n }\n\n get devices(): MediaDeviceInfo[] {\n return this.contextProviderRef.value?.devices || this._devices || [];\n }\n\n @state()\n private _devices?: MediaDeviceInfo[];\n\n /**\n * The selected device used for recording (MediaDeviceInfo).\n */\n @property({ attribute: false, type: Object })\n set selectedDevice(value: MediaDeviceInfo | undefined) {\n this._selectedDevice = value;\n }\n\n get selectedDevice(): MediaDeviceInfo | undefined {\n return (\n this.contextProviderRef.value?.selectedDevice || this._selectedDevice\n );\n }\n\n @state()\n private _selectedDevice?: MediaDeviceInfo;\n\n /**\n * Current state of recording (stopped, recording, initializing and stopping, ).\n */\n get recordingState(): RecordingState {\n return this.contextProviderRef.value?.recordingState || \"stopped\";\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Set the latest access token.\n * @returns ServerConfig with environment, tenant, and accessToken\n * @deprecated Use 'accessToken' property instead.\n */\n public setAccessToken(token: string) {\n this.accessToken = token;\n\n return (\n this.contextProviderRef.value?.setAccessToken(token) ?? {\n accessToken: token,\n environment: undefined,\n tenant: undefined,\n }\n );\n }\n\n /**\n * Set the auth configuration for OAuth flows.\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 return (\n this.contextProviderRef.value?.setAuthConfig(config) ?? {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n }\n );\n }\n\n /**\n * Starts a recording.\n */\n public startRecording(): void {\n this.recordingButtonRef.value?.startRecording();\n }\n\n /**\n * Stops a recording.\n */\n public stopRecording(): void {\n this.recordingButtonRef.value?.stopRecording();\n }\n\n /**\n * Starts or stops recording. Convenience layer on top of the start/stop methods.\n */\n public toggleRecording(): void {\n this.recordingButtonRef.value?.toggleRecording();\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n const isHidden =\n !this.accessToken &&\n !this.authConfig &&\n !this.socketUrl &&\n !this.socketProxy;\n\n return html`\n <dictation-context-provider\n ${ref(this.contextProviderRef)}\n class=${classMap({ hidden: isHidden })}\n .accessToken=${this.accessToken}\n .authConfig=${this.authConfig}\n .socketUrl=${this.socketUrl}\n .socketProxy=${this.socketProxy}\n .dictationConfig=${this._dictationConfig}\n .languages=${this._languagesSupported}\n .devices=${this._devices}\n .selectedDevice=${this._selectedDevice}\n .debug_displayAudio=${this.debug_displayAudio}\n >\n <recording-button\n ${ref(this.recordingButtonRef)}\n .preventFocus=${!this.allowButtonFocus}\n ></recording-button>\n <settings-menu .settingsEnabled=${this.settingsEnabled}></settings-menu>\n </dictation-context-provider>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"corti-dictation\": CortiDictation;\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
export declare class DeviceSelector extends LitElement {
|
|
3
|
+
private _devices?;
|
|
4
|
+
private _selectedDevice?;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Internal cache of loaded devices to check if devices were auto-loaded or provided via property
|
|
8
|
+
* @private
|
|
9
|
+
*/
|
|
10
|
+
private _loadedDevices;
|
|
11
|
+
private _devicesAutoLoaded;
|
|
12
|
+
static styles: import("lit").CSSResult;
|
|
13
|
+
connectedCallback(): Promise<void>;
|
|
14
|
+
disconnectedCallback(): void;
|
|
15
|
+
private _loadDevices;
|
|
16
|
+
private _handleDeviceChange;
|
|
17
|
+
private _handleSelectDevice;
|
|
18
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
19
|
+
}
|
|
20
|
+
declare global {
|
|
21
|
+
interface HTMLElementTagNameMap {
|
|
22
|
+
"device-selector": DeviceSelector;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { consume } from "@lit/context";
|
|
8
|
+
import { html, LitElement } from "lit";
|
|
9
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
10
|
+
import { devicesContext, selectedDeviceContext, } from "../contexts/dictation-context.js";
|
|
11
|
+
import SelectStyles from "../styles/select.js";
|
|
12
|
+
import { getAudioDevices } from "../utils/devices.js";
|
|
13
|
+
import { errorEvent, readyEvent, recordingDevicesChangedEvent, } from "../utils/events.js";
|
|
14
|
+
let DeviceSelector = class DeviceSelector extends LitElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.disabled = false;
|
|
18
|
+
/**
|
|
19
|
+
* Internal cache of loaded devices to check if devices were auto-loaded or provided via property
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
this._loadedDevices = [];
|
|
23
|
+
this._handleDeviceChange = async () => {
|
|
24
|
+
if (this._devicesAutoLoaded()) {
|
|
25
|
+
await this._loadDevices();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
_devicesAutoLoaded() {
|
|
30
|
+
return this._loadedDevices === this._devices;
|
|
31
|
+
}
|
|
32
|
+
async connectedCallback() {
|
|
33
|
+
super.connectedCallback();
|
|
34
|
+
if (!this._devices) {
|
|
35
|
+
await this._loadDevices();
|
|
36
|
+
navigator.mediaDevices.addEventListener("devicechange", this._handleDeviceChange);
|
|
37
|
+
}
|
|
38
|
+
this.dispatchEvent(readyEvent());
|
|
39
|
+
}
|
|
40
|
+
disconnectedCallback() {
|
|
41
|
+
super.disconnectedCallback();
|
|
42
|
+
navigator.mediaDevices.removeEventListener("devicechange", this._handleDeviceChange);
|
|
43
|
+
}
|
|
44
|
+
async _loadDevices() {
|
|
45
|
+
try {
|
|
46
|
+
const { devices, defaultDevice } = await getAudioDevices();
|
|
47
|
+
this._loadedDevices = devices;
|
|
48
|
+
// Use selected device if it still exists, otherwise fall back to default
|
|
49
|
+
const selectedDevice = devices.find((d) => d.deviceId === this._selectedDevice?.deviceId) ??
|
|
50
|
+
defaultDevice;
|
|
51
|
+
this.dispatchEvent(recordingDevicesChangedEvent(devices, selectedDevice));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
this.dispatchEvent(errorEvent(error));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
_handleSelectDevice(e) {
|
|
58
|
+
const deviceId = e.target.value;
|
|
59
|
+
const device = this._devices?.find((d) => d.deviceId === deviceId);
|
|
60
|
+
if (!device) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.dispatchEvent(recordingDevicesChangedEvent(this._devices || [], device));
|
|
64
|
+
}
|
|
65
|
+
render() {
|
|
66
|
+
return html `
|
|
67
|
+
<div>
|
|
68
|
+
<label id="device-select-label" for="device-select">
|
|
69
|
+
Recording Device
|
|
70
|
+
</label>
|
|
71
|
+
<select
|
|
72
|
+
id="device-select"
|
|
73
|
+
aria-labelledby="device-select-label"
|
|
74
|
+
@change=${this._handleSelectDevice}
|
|
75
|
+
?disabled=${this.disabled || !this._devices || this._devices.length === 0}
|
|
76
|
+
>
|
|
77
|
+
${this._devices?.map((device) => html `
|
|
78
|
+
<option
|
|
79
|
+
value=${device.deviceId}
|
|
80
|
+
?selected=${this._selectedDevice?.deviceId === device.deviceId}
|
|
81
|
+
>
|
|
82
|
+
${device.label || "Unknown Device"}
|
|
83
|
+
</option>
|
|
84
|
+
`)}
|
|
85
|
+
</select>
|
|
86
|
+
</div>
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
DeviceSelector.styles = SelectStyles;
|
|
91
|
+
__decorate([
|
|
92
|
+
consume({ context: devicesContext, subscribe: true }),
|
|
93
|
+
state()
|
|
94
|
+
], DeviceSelector.prototype, "_devices", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
consume({ context: selectedDeviceContext, subscribe: true }),
|
|
97
|
+
state()
|
|
98
|
+
], DeviceSelector.prototype, "_selectedDevice", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
property({ type: Boolean })
|
|
101
|
+
], DeviceSelector.prototype, "disabled", void 0);
|
|
102
|
+
DeviceSelector = __decorate([
|
|
103
|
+
customElement("device-selector")
|
|
104
|
+
], DeviceSelector);
|
|
105
|
+
export { DeviceSelector };
|
|
106
|
+
//# sourceMappingURL=device-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-selector.js","sourceRoot":"","sources":["../../../src/components/device-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport {\n devicesContext,\n selectedDeviceContext,\n} from \"../contexts/dictation-context.js\";\nimport SelectStyles from \"../styles/select.js\";\nimport { getAudioDevices } from \"../utils/devices.js\";\nimport {\n errorEvent,\n readyEvent,\n recordingDevicesChangedEvent,\n} from \"../utils/events.js\";\n\n@customElement(\"device-selector\")\nexport class DeviceSelector extends LitElement {\n @consume({ context: devicesContext, subscribe: true })\n @state()\n private _devices?: MediaDeviceInfo[];\n\n @consume({ context: selectedDeviceContext, subscribe: true })\n @state()\n private _selectedDevice?: MediaDeviceInfo;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n /**\n * Internal cache of loaded devices to check if devices were auto-loaded or provided via property\n * @private\n */\n private _loadedDevices: MediaDeviceInfo[] = [];\n\n private _devicesAutoLoaded(): boolean {\n return this._loadedDevices === this._devices;\n }\n\n static styles = SelectStyles;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n\n if (!this._devices) {\n await this._loadDevices();\n\n navigator.mediaDevices.addEventListener(\n \"devicechange\",\n this._handleDeviceChange,\n );\n }\n\n this.dispatchEvent(readyEvent());\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n navigator.mediaDevices.removeEventListener(\n \"devicechange\",\n this._handleDeviceChange,\n );\n }\n\n private async _loadDevices(): Promise<void> {\n try {\n const { devices, defaultDevice } = await getAudioDevices();\n this._loadedDevices = devices;\n\n // Use selected device if it still exists, otherwise fall back to default\n const selectedDevice =\n devices.find((d) => d.deviceId === this._selectedDevice?.deviceId) ??\n defaultDevice;\n\n this.dispatchEvent(\n recordingDevicesChangedEvent(devices, selectedDevice),\n );\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n private _handleDeviceChange = async () => {\n if (this._devicesAutoLoaded()) {\n await this._loadDevices();\n }\n };\n\n private _handleSelectDevice(e: Event): void {\n const deviceId = (e.target as HTMLSelectElement).value;\n const device = this._devices?.find((d) => d.deviceId === deviceId);\n\n if (!device) {\n return;\n }\n\n this.dispatchEvent(\n recordingDevicesChangedEvent(this._devices || [], device),\n );\n }\n\n render() {\n return html`\n <div>\n <label id=\"device-select-label\" for=\"device-select\">\n Recording Device\n </label>\n <select\n id=\"device-select\"\n aria-labelledby=\"device-select-label\"\n @change=${this._handleSelectDevice}\n ?disabled=${this.disabled || !this._devices || this._devices.length === 0}\n >\n ${this._devices?.map(\n (device) => html`\n <option\n value=${device.deviceId}\n ?selected=${this._selectedDevice?.deviceId === device.deviceId}\n >\n ${device.label || \"Unknown Device\"}\n </option>\n `,\n )}\n </select>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"device-selector\": DeviceSelector;\n }\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LitElement, type PropertyValues } from "lit";
|
|
2
|
+
export declare class LanguageSelector extends LitElement {
|
|
3
|
+
private _languages?;
|
|
4
|
+
private _dictationConfig?;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
_region?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Internal cache of loaded languages to check if languages were auto-loaded or provided via property
|
|
9
|
+
* @private
|
|
10
|
+
*/
|
|
11
|
+
private _loadedLanguages;
|
|
12
|
+
private _languagesAutoLoaded;
|
|
13
|
+
static styles: import("lit").CSSResult;
|
|
14
|
+
connectedCallback(): Promise<void>;
|
|
15
|
+
updated(changedProperties: PropertyValues<this>): void;
|
|
16
|
+
private _loadLanguages;
|
|
17
|
+
private _handleSelectLanguage;
|
|
18
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
19
|
+
}
|
|
20
|
+
declare global {
|
|
21
|
+
interface HTMLElementTagNameMap {
|
|
22
|
+
"language-selector": LanguageSelector;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { consume } from "@lit/context";
|
|
8
|
+
import { html, LitElement } from "lit";
|
|
9
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
10
|
+
import { dictationConfigContext, languagesContext, regionContext, } from "../contexts/dictation-context.js";
|
|
11
|
+
import SelectStyles from "../styles/select.js";
|
|
12
|
+
import { languageChangedEvent, languagesChangedEvent, } from "../utils/events.js";
|
|
13
|
+
import { getLanguageName, getLanguagesByRegion } from "../utils/languages.js";
|
|
14
|
+
let LanguageSelector = class LanguageSelector extends LitElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.disabled = false;
|
|
18
|
+
/**
|
|
19
|
+
* Internal cache of loaded languages to check if languages were auto-loaded or provided via property
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
this._loadedLanguages = [];
|
|
23
|
+
}
|
|
24
|
+
_languagesAutoLoaded() {
|
|
25
|
+
return this._loadedLanguages === this._languages;
|
|
26
|
+
}
|
|
27
|
+
async connectedCallback() {
|
|
28
|
+
super.connectedCallback();
|
|
29
|
+
if (this._languages) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
await this._loadLanguages();
|
|
33
|
+
}
|
|
34
|
+
updated(changedProperties) {
|
|
35
|
+
if (changedProperties.has("_region") && this._languagesAutoLoaded()) {
|
|
36
|
+
this._loadLanguages();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async _loadLanguages() {
|
|
40
|
+
const { languages, defaultLanguage } = getLanguagesByRegion(this._region);
|
|
41
|
+
this._loadedLanguages = languages;
|
|
42
|
+
const selectedLanguage = this._dictationConfig?.primaryLanguage ?? defaultLanguage;
|
|
43
|
+
this.dispatchEvent(languagesChangedEvent(languages, selectedLanguage));
|
|
44
|
+
// Dispatch backward compatible event
|
|
45
|
+
if (selectedLanguage) {
|
|
46
|
+
this.dispatchEvent(languageChangedEvent(selectedLanguage));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
_handleSelectLanguage(e) {
|
|
50
|
+
const language = e.target.value;
|
|
51
|
+
this.dispatchEvent(languagesChangedEvent(this._languages || [], language));
|
|
52
|
+
// Dispatch backward compatible event
|
|
53
|
+
this.dispatchEvent(languageChangedEvent(language));
|
|
54
|
+
}
|
|
55
|
+
render() {
|
|
56
|
+
return html `
|
|
57
|
+
<div>
|
|
58
|
+
<label id="language-select-label" for="language-select">
|
|
59
|
+
Dictation Language
|
|
60
|
+
</label>
|
|
61
|
+
<select
|
|
62
|
+
id="language-select"
|
|
63
|
+
aria-labelledby="language-select-label"
|
|
64
|
+
@change=${this._handleSelectLanguage}
|
|
65
|
+
?disabled=${this.disabled || !this._languages || this._languages.length === 0}
|
|
66
|
+
>
|
|
67
|
+
${this._languages?.map((language) => html `
|
|
68
|
+
<option
|
|
69
|
+
value=${language}
|
|
70
|
+
?selected=${this._dictationConfig?.primaryLanguage === language}
|
|
71
|
+
>
|
|
72
|
+
${getLanguageName(language)}
|
|
73
|
+
</option>
|
|
74
|
+
`)}
|
|
75
|
+
</select>
|
|
76
|
+
</div>
|
|
77
|
+
`;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
LanguageSelector.styles = SelectStyles;
|
|
81
|
+
__decorate([
|
|
82
|
+
consume({ context: languagesContext, subscribe: true }),
|
|
83
|
+
state()
|
|
84
|
+
], LanguageSelector.prototype, "_languages", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
consume({ context: dictationConfigContext, subscribe: true }),
|
|
87
|
+
state()
|
|
88
|
+
], LanguageSelector.prototype, "_dictationConfig", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
property({ type: Boolean })
|
|
91
|
+
], LanguageSelector.prototype, "disabled", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
consume({ context: regionContext, subscribe: true }),
|
|
94
|
+
state()
|
|
95
|
+
], LanguageSelector.prototype, "_region", void 0);
|
|
96
|
+
LanguageSelector = __decorate([
|
|
97
|
+
customElement("language-selector")
|
|
98
|
+
], LanguageSelector);
|
|
99
|
+
export { LanguageSelector };
|
|
100
|
+
//# sourceMappingURL=language-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-selector.js","sourceRoot":"","sources":["../../../src/components/language-selector.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGvE,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QAUL,aAAQ,GAAY,KAAK,CAAC;QAM1B;;;WAGG;QACK,qBAAgB,GAAa,EAAE,CAAC;IA0E1C,CAAC;IAxES,oBAAoB;QAC1B,OAAO,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,UAAU,CAAC;IACnD,CAAC;IAID,KAAK,CAAC,iBAAiB;QACrB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,iBAAuC;QAC7C,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,MAAM,gBAAgB,GACpB,IAAI,CAAC,gBAAgB,EAAE,eAAe,IAAI,eAAe,CAAC;QAE5D,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAEvE,qCAAqC;QACrC,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,CAAQ;QACpC,MAAM,QAAQ,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;QAEvD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE3E,qCAAqC;QACrC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;oBAQK,IAAI,CAAC,qBAAqB;sBACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;;YAE3E,IAAI,CAAC,UAAU,EAAE,GAAG,CACpB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAEN,QAAQ;4BACJ,IAAI,CAAC,gBAAgB,EAAE,eAAe,KAAK,QAAQ;;kBAE7D,eAAe,CAAC,QAAQ,CAAC;;aAE9B,CACF;;;KAGN,CAAC;IACJ,CAAC;;AAnEM,uBAAM,GAAG,YAAY,AAAf,CAAgB;AAvBrB;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,KAAK,EAAE;oDACsB;AAItB;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7D,KAAK,EAAE;0DAC0C;AAGlD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;kDACF;AAI1B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpD,KAAK,EAAE;iDACS;AAdN,gBAAgB;IAD5B,aAAa,CAAC,mBAAmB,CAAC;GACtB,gBAAgB,CA8F5B","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport {\n dictationConfigContext,\n languagesContext,\n regionContext,\n} from \"../contexts/dictation-context.js\";\nimport SelectStyles from \"../styles/select.js\";\nimport {\n languageChangedEvent,\n languagesChangedEvent,\n} from \"../utils/events.js\";\nimport { getLanguageName, getLanguagesByRegion } from \"../utils/languages.js\";\n\n@customElement(\"language-selector\")\nexport class LanguageSelector extends LitElement {\n @consume({ context: languagesContext, subscribe: true })\n @state()\n private _languages?: string[];\n\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n private _dictationConfig?: Corti.TranscribeConfig;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @consume({ context: regionContext, subscribe: true })\n @state()\n _region?: string;\n\n /**\n * Internal cache of loaded languages to check if languages were auto-loaded or provided via property\n * @private\n */\n private _loadedLanguages: string[] = [];\n\n private _languagesAutoLoaded(): boolean {\n return this._loadedLanguages === this._languages;\n }\n\n static styles = SelectStyles;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n\n if (this._languages) {\n return;\n }\n\n await this._loadLanguages();\n }\n\n updated(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has(\"_region\") && this._languagesAutoLoaded()) {\n this._loadLanguages();\n }\n }\n\n private async _loadLanguages(): Promise<void> {\n const { languages, defaultLanguage } = getLanguagesByRegion(this._region);\n this._loadedLanguages = languages;\n\n const selectedLanguage =\n this._dictationConfig?.primaryLanguage ?? defaultLanguage;\n\n this.dispatchEvent(languagesChangedEvent(languages, selectedLanguage));\n\n // Dispatch backward compatible event\n if (selectedLanguage) {\n this.dispatchEvent(languageChangedEvent(selectedLanguage));\n }\n }\n\n private _handleSelectLanguage(e: Event): void {\n const language = (e.target as HTMLSelectElement).value;\n\n this.dispatchEvent(languagesChangedEvent(this._languages || [], language));\n\n // Dispatch backward compatible event\n this.dispatchEvent(languageChangedEvent(language));\n }\n\n render() {\n return html`\n <div>\n <label id=\"language-select-label\" for=\"language-select\">\n Dictation Language\n </label>\n <select\n id=\"language-select\"\n aria-labelledby=\"language-select-label\"\n @change=${this._handleSelectLanguage}\n ?disabled=${this.disabled || !this._languages || this._languages.length === 0}\n >\n ${this._languages?.map(\n (language) => html`\n <option\n value=${language}\n ?selected=${this._dictationConfig?.primaryLanguage === language}\n >\n ${getLanguageName(language)}\n </option>\n `,\n )}\n </select>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"language-selector\": LanguageSelector;\n }\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Corti } from "@corti/sdk";
|
|
2
|
+
import { type CSSResultGroup, LitElement } from "lit";
|
|
3
|
+
import type { ProxyOptions } from "../types.js";
|
|
4
|
+
import "./audio-visualiser.js";
|
|
5
|
+
import "../icons/icons.js";
|
|
6
|
+
export declare class RecordingButton extends LitElement {
|
|
7
|
+
private _recordingState;
|
|
8
|
+
_selectedDevice?: MediaDeviceInfo;
|
|
9
|
+
_accessToken?: string;
|
|
10
|
+
_authConfig?: Corti.BearerOptions;
|
|
11
|
+
_region?: string;
|
|
12
|
+
_tenantName?: string;
|
|
13
|
+
_dictationConfig?: Corti.TranscribeConfig;
|
|
14
|
+
_socketUrl?: string;
|
|
15
|
+
_socketProxy?: ProxyOptions;
|
|
16
|
+
_debug_displayAudio?: boolean;
|
|
17
|
+
preventFocus: boolean;
|
|
18
|
+
private _mediaController;
|
|
19
|
+
private _dictationController;
|
|
20
|
+
static styles: CSSResultGroup;
|
|
21
|
+
private _handleMouseDown;
|
|
22
|
+
private _handleWebSocketMessage;
|
|
23
|
+
private _handleWebSocketError;
|
|
24
|
+
private _handleWebSocketClose;
|
|
25
|
+
private _handleStart;
|
|
26
|
+
private _handleStop;
|
|
27
|
+
private _handleClick;
|
|
28
|
+
startRecording(): void;
|
|
29
|
+
stopRecording(): void;
|
|
30
|
+
toggleRecording(): void;
|
|
31
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
32
|
+
}
|
|
33
|
+
declare global {
|
|
34
|
+
interface HTMLElementTagNameMap {
|
|
35
|
+
"recording-button": RecordingButton;
|
|
36
|
+
}
|
|
37
|
+
}
|