@corti/dictation-web 0.7.0-ambient.9 → 0.7.0
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/LICENSE +21 -0
- package/README.md +110 -0
- package/dist/.tsbuildinfo +1 -0
- package/{bundle.js → dist/bundle.js} +4459 -4823
- package/{components → dist/components}/corti-dictation.d.ts +3 -3
- package/{components → dist/components}/corti-dictation.js +5 -4
- package/dist/components/corti-dictation.js.map +1 -0
- package/dist/components/dictation-device-selector.d.ts +8 -0
- package/dist/components/dictation-device-selector.js +15 -0
- package/dist/components/dictation-device-selector.js.map +1 -0
- package/dist/components/dictation-keybinding-selector.d.ts +8 -0
- package/dist/components/dictation-keybinding-selector.js +15 -0
- package/dist/components/dictation-keybinding-selector.js.map +1 -0
- package/dist/components/dictation-language-selector.d.ts +8 -0
- package/dist/components/dictation-language-selector.js +15 -0
- package/dist/components/dictation-language-selector.js.map +1 -0
- package/{components → dist/components}/dictation-recording-button.d.ts +2 -1
- package/{components → dist/components}/dictation-recording-button.js +9 -4
- package/dist/components/dictation-recording-button.js.map +1 -0
- package/dist/components/dictation-settings-menu.d.ts +15 -0
- package/dist/components/dictation-settings-menu.js +34 -0
- package/dist/components/dictation-settings-menu.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/{contexts → dist/contexts}/dictation-context.d.ts +1 -1
- package/{contexts → dist/contexts}/dictation-context.js +4 -3
- package/dist/contexts/dictation-context.js.map +1 -0
- package/{controllers → dist/controllers}/dictation-controller.d.ts +4 -4
- package/{controllers → dist/controllers}/dictation-controller.js +1 -1
- package/dist/controllers/dictation-controller.js.map +1 -0
- package/dist/core/.tsbuildinfo +1 -0
- package/{components → dist/core/components}/corti-root.d.ts +1 -1
- package/dist/core/components/corti-root.js.map +1 -0
- package/dist/core/components/device-selector-base.d.ts +9 -0
- package/{components/device-selector.js → dist/core/components/device-selector-base.js} +11 -17
- package/dist/core/components/device-selector-base.js.map +1 -0
- package/dist/core/components/keybinding-selector-base.d.ts +10 -0
- package/{components/keybinding-selector.js → dist/core/components/keybinding-selector-base.js} +21 -21
- package/dist/core/components/keybinding-selector-base.js.map +1 -0
- package/dist/core/components/language-selector-base.d.ts +10 -0
- package/{components/language-selector.js → dist/core/components/language-selector-base.js} +11 -18
- package/dist/core/components/language-selector-base.js.map +1 -0
- package/{components → dist/core/components}/recording-button-base.d.ts +10 -7
- package/{components → dist/core/components}/recording-button-base.js +17 -15
- package/dist/core/components/recording-button-base.js.map +1 -0
- package/dist/core/components/settings-menu-base.d.ts +13 -0
- package/{components/settings-menu.js → dist/core/components/settings-menu-base.js} +14 -36
- package/dist/core/components/settings-menu-base.js.map +1 -0
- package/{components/audio-visualiser.d.ts → dist/core/components/speech-audio-visualiser.d.ts} +3 -4
- package/{components/audio-visualiser.js → dist/core/components/speech-audio-visualiser.js} +11 -12
- package/dist/core/components/speech-audio-visualiser.js.map +1 -0
- package/{components/keybinding-input.d.ts → dist/core/components/speech-keybinding-input.d.ts} +3 -4
- package/{components/keybinding-input.js → dist/core/components/speech-keybinding-input.js} +22 -22
- package/dist/core/components/speech-keybinding-input.js.map +1 -0
- package/{constants.d.ts → dist/core/constants.d.ts} +0 -2
- package/{constants.js → dist/core/constants.js} +0 -14
- package/dist/core/constants.js.map +1 -0
- package/dist/core/contexts/mixins/auth-context.js.map +1 -0
- package/dist/core/contexts/mixins/devices-context.js.map +1 -0
- package/{contexts → dist/core/contexts}/mixins/keybindings-context.js +3 -2
- package/dist/core/contexts/mixins/keybindings-context.js.map +1 -0
- package/dist/core/contexts/mixins/languages-context.js.map +1 -0
- package/dist/core/contexts/mixins/proxy-context.js.map +1 -0
- package/dist/core/contexts/mixins/recording-state-context.js.map +1 -0
- package/dist/core/contexts/mixins/types.js.map +1 -0
- package/{contexts → dist/core/contexts}/root-context.d.ts +1 -1
- package/dist/core/contexts/root-context.js.map +1 -0
- package/dist/core/controllers/devices-controller.js.map +1 -0
- package/dist/core/controllers/keybinding-controller.js.map +1 -0
- package/dist/core/controllers/languages-controller.js.map +1 -0
- package/dist/core/controllers/media-controller.js.map +1 -0
- package/dist/core/controllers/socket-controller.js.map +1 -0
- package/{icons → dist/core/icons}/icons.d.ts +6 -6
- package/{icons → dist/core/icons}/icons.js +7 -7
- package/dist/core/icons/icons.js.map +1 -0
- package/dist/core/icons/index.js.map +1 -0
- package/dist/core/socket-messages.d.ts +4 -0
- package/dist/core/socket-messages.js +2 -0
- package/dist/core/socket-messages.js.map +1 -0
- package/dist/core/styles/audio-visualiser.js.map +1 -0
- package/dist/core/styles/buttons.js.map +1 -0
- package/dist/core/styles/callout.js.map +1 -0
- package/dist/core/styles/component-styles.js.map +1 -0
- package/dist/core/styles/keybinding-selector.js.map +1 -0
- package/dist/core/styles/recording-button.js.map +1 -0
- package/dist/core/styles/select.js.map +1 -0
- package/dist/core/styles/settings-menu.js.map +1 -0
- package/{types.d.ts → dist/core/types.d.ts} +0 -3
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils/auth.js.map +1 -0
- package/dist/core/utils/converters.js.map +1 -0
- package/dist/core/utils/custom-elements.d.ts +6 -0
- package/dist/core/utils/custom-elements.js +23 -0
- package/dist/core/utils/custom-elements.js.map +1 -0
- package/dist/core/utils/devices.js.map +1 -0
- package/dist/core/utils/events.js.map +1 -0
- package/dist/core/utils/keybinding.js.map +1 -0
- package/dist/core/utils/languages.js.map +1 -0
- package/dist/core/utils/media.js.map +1 -0
- package/dist/core/utils/token.js.map +1 -0
- package/dist/core/utils/validation.js.map +1 -0
- package/{index.d.ts → dist/index.d.ts} +6 -6
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/package.json +19 -13
- package/.tsbuildinfo +0 -1
- package/components/ambient-recording-button.d.ts +0 -16
- package/components/ambient-recording-button.js +0 -68
- package/components/ambient-recording-button.js.map +0 -1
- package/components/ambient-virtual-mode-selector.d.ts +0 -14
- package/components/ambient-virtual-mode-selector.js +0 -69
- package/components/ambient-virtual-mode-selector.js.map +0 -1
- package/components/audio-visualiser.js.map +0 -1
- package/components/corti-ambient.d.ts +0 -35
- package/components/corti-ambient.js +0 -126
- package/components/corti-ambient.js.map +0 -1
- package/components/corti-dictation.js.map +0 -1
- package/components/corti-root.js.map +0 -1
- package/components/device-selector.d.ts +0 -15
- package/components/device-selector.js.map +0 -1
- package/components/dictation-recording-button.js.map +0 -1
- package/components/keybinding-input.js.map +0 -1
- package/components/keybinding-selector.d.ts +0 -15
- package/components/keybinding-selector.js.map +0 -1
- package/components/language-selector.d.ts +0 -16
- package/components/language-selector.js.map +0 -1
- package/components/recording-button-base.js.map +0 -1
- package/components/settings-menu.d.ts +0 -19
- package/components/settings-menu.js.map +0 -1
- package/constants.js.map +0 -1
- package/contexts/ambient-context.d.ts +0 -24
- package/contexts/ambient-context.js +0 -93
- package/contexts/ambient-context.js.map +0 -1
- package/contexts/dictation-context.js.map +0 -1
- package/contexts/mixins/auth-context.js.map +0 -1
- package/contexts/mixins/devices-context.js.map +0 -1
- package/contexts/mixins/keybindings-context.js.map +0 -1
- package/contexts/mixins/languages-context.js.map +0 -1
- package/contexts/mixins/proxy-context.js.map +0 -1
- package/contexts/mixins/recording-state-context.js.map +0 -1
- package/contexts/mixins/types.js.map +0 -1
- package/contexts/root-context.js.map +0 -1
- package/controllers/ambient-controller.d.ts +0 -16
- package/controllers/ambient-controller.js +0 -24
- package/controllers/ambient-controller.js.map +0 -1
- package/controllers/devices-controller.js.map +0 -1
- package/controllers/dictation-controller.js.map +0 -1
- package/controllers/keybinding-controller.js.map +0 -1
- package/controllers/languages-controller.js.map +0 -1
- package/controllers/media-controller.js.map +0 -1
- package/controllers/socket-controller.js.map +0 -1
- package/icons/icons.js.map +0 -1
- package/icons/index.js.map +0 -1
- package/index.js +0 -8
- package/index.js.map +0 -1
- package/styles/ambient-virtual-mode-selector.d.ts +0 -2
- package/styles/ambient-virtual-mode-selector.js +0 -101
- package/styles/ambient-virtual-mode-selector.js.map +0 -1
- package/styles/audio-visualiser.js.map +0 -1
- package/styles/buttons.js.map +0 -1
- package/styles/callout.js.map +0 -1
- package/styles/component-styles.js.map +0 -1
- package/styles/keybinding-selector.js.map +0 -1
- package/styles/recording-button.js.map +0 -1
- package/styles/select.js.map +0 -1
- package/styles/settings-menu.js.map +0 -1
- package/types.js.map +0 -1
- package/utils/auth.js.map +0 -1
- package/utils/converters.js.map +0 -1
- package/utils/custom-elements.d.ts +0 -6
- package/utils/custom-elements.js +0 -11
- package/utils/custom-elements.js.map +0 -1
- package/utils/devices.js.map +0 -1
- package/utils/events.js.map +0 -1
- package/utils/keybinding.js.map +0 -1
- package/utils/languages.js.map +0 -1
- package/utils/media.js.map +0 -1
- package/utils/token.js.map +0 -1
- package/utils/validation.js.map +0 -1
- /package/{components → dist/core/components}/corti-root.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/auth-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/auth-context.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/devices-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/devices-context.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/keybindings-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/languages-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/languages-context.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/proxy-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/proxy-context.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/recording-state-context.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/recording-state-context.js +0 -0
- /package/{contexts → dist/core/contexts}/mixins/types.d.ts +0 -0
- /package/{contexts → dist/core/contexts}/mixins/types.js +0 -0
- /package/{contexts → dist/core/contexts}/root-context.js +0 -0
- /package/{controllers → dist/core/controllers}/devices-controller.d.ts +0 -0
- /package/{controllers → dist/core/controllers}/devices-controller.js +0 -0
- /package/{controllers → dist/core/controllers}/keybinding-controller.d.ts +0 -0
- /package/{controllers → dist/core/controllers}/keybinding-controller.js +0 -0
- /package/{controllers → dist/core/controllers}/languages-controller.d.ts +0 -0
- /package/{controllers → dist/core/controllers}/languages-controller.js +0 -0
- /package/{controllers → dist/core/controllers}/media-controller.d.ts +0 -0
- /package/{controllers → dist/core/controllers}/media-controller.js +0 -0
- /package/{controllers → dist/core/controllers}/socket-controller.d.ts +0 -0
- /package/{controllers → dist/core/controllers}/socket-controller.js +0 -0
- /package/{icons → dist/core/icons}/index.d.ts +0 -0
- /package/{icons → dist/core/icons}/index.js +0 -0
- /package/{styles → dist/core/styles}/audio-visualiser.d.ts +0 -0
- /package/{styles → dist/core/styles}/audio-visualiser.js +0 -0
- /package/{styles → dist/core/styles}/buttons.d.ts +0 -0
- /package/{styles → dist/core/styles}/buttons.js +0 -0
- /package/{styles → dist/core/styles}/callout.d.ts +0 -0
- /package/{styles → dist/core/styles}/callout.js +0 -0
- /package/{styles → dist/core/styles}/component-styles.d.ts +0 -0
- /package/{styles → dist/core/styles}/component-styles.js +0 -0
- /package/{styles → dist/core/styles}/keybinding-selector.d.ts +0 -0
- /package/{styles → dist/core/styles}/keybinding-selector.js +0 -0
- /package/{styles → dist/core/styles}/recording-button.d.ts +0 -0
- /package/{styles → dist/core/styles}/recording-button.js +0 -0
- /package/{styles → dist/core/styles}/select.d.ts +0 -0
- /package/{styles → dist/core/styles}/select.js +0 -0
- /package/{styles → dist/core/styles}/settings-menu.d.ts +0 -0
- /package/{styles → dist/core/styles}/settings-menu.js +0 -0
- /package/{types.js → dist/core/types.js} +0 -0
- /package/{utils → dist/core/utils}/auth.d.ts +0 -0
- /package/{utils → dist/core/utils}/auth.js +0 -0
- /package/{utils → dist/core/utils}/converters.d.ts +0 -0
- /package/{utils → dist/core/utils}/converters.js +0 -0
- /package/{utils → dist/core/utils}/devices.d.ts +0 -0
- /package/{utils → dist/core/utils}/devices.js +0 -0
- /package/{utils → dist/core/utils}/events.d.ts +0 -0
- /package/{utils → dist/core/utils}/events.js +0 -0
- /package/{utils → dist/core/utils}/keybinding.d.ts +0 -0
- /package/{utils → dist/core/utils}/keybinding.js +0 -0
- /package/{utils → dist/core/utils}/languages.d.ts +0 -0
- /package/{utils → dist/core/utils}/languages.js +0 -0
- /package/{utils → dist/core/utils}/media.d.ts +0 -0
- /package/{utils → dist/core/utils}/media.js +0 -0
- /package/{utils → dist/core/utils}/token.d.ts +0 -0
- /package/{utils → dist/core/utils}/token.js +0 -0
- /package/{utils → dist/core/utils}/validation.d.ts +0 -0
- /package/{utils → dist/core/utils}/validation.js +0 -0
|
@@ -10,9 +10,9 @@ import { classMap } from "lit/directives/class-map.js";
|
|
|
10
10
|
import { map } from "lit/directives/map.js";
|
|
11
11
|
import { range } from "lit/directives/range.js";
|
|
12
12
|
import AudioVisualiserStyles from "../styles/audio-visualiser.js";
|
|
13
|
-
import {
|
|
13
|
+
import { safeCustomElement } from "../utils/custom-elements.js";
|
|
14
14
|
import { normalizeToRange } from "../utils/validation.js";
|
|
15
|
-
let
|
|
15
|
+
let SpeechAudioVisualiser = class SpeechAudioVisualiser extends LitElement {
|
|
16
16
|
constructor() {
|
|
17
17
|
super(...arguments);
|
|
18
18
|
this.level = 0;
|
|
@@ -25,7 +25,6 @@ let DictationAudioVisualiser = class DictationAudioVisualiser extends LitElement
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
render() {
|
|
28
|
-
// Each segment represents 20%. Using Math.round to fill segments.
|
|
29
28
|
const activeSegments = Math.round(this.level * this.segmentCount);
|
|
30
29
|
const segments = map(range(this.segmentCount), (i) => html `<div class=${classMap({
|
|
31
30
|
active: i < activeSegments,
|
|
@@ -41,18 +40,18 @@ let DictationAudioVisualiser = class DictationAudioVisualiser extends LitElement
|
|
|
41
40
|
`;
|
|
42
41
|
}
|
|
43
42
|
};
|
|
44
|
-
|
|
43
|
+
SpeechAudioVisualiser.styles = AudioVisualiserStyles;
|
|
45
44
|
__decorate([
|
|
46
45
|
property({ type: Number })
|
|
47
|
-
],
|
|
46
|
+
], SpeechAudioVisualiser.prototype, "level", void 0);
|
|
48
47
|
__decorate([
|
|
49
48
|
property({ type: Boolean })
|
|
50
|
-
],
|
|
49
|
+
], SpeechAudioVisualiser.prototype, "active", void 0);
|
|
51
50
|
__decorate([
|
|
52
51
|
property({ type: Number })
|
|
53
|
-
],
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
],
|
|
57
|
-
export {
|
|
58
|
-
//# sourceMappingURL=audio-visualiser.js.map
|
|
52
|
+
], SpeechAudioVisualiser.prototype, "segmentCount", void 0);
|
|
53
|
+
SpeechAudioVisualiser = __decorate([
|
|
54
|
+
safeCustomElement("speech-audio-visualiser")
|
|
55
|
+
], SpeechAudioVisualiser);
|
|
56
|
+
export { SpeechAudioVisualiser };
|
|
57
|
+
//# sourceMappingURL=speech-audio-visualiser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-audio-visualiser.js","sourceRoot":"","sources":["../../src/components/speech-audio-visualiser.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;QAEL,UAAK,GAAW,CAAC,CAAC;QAGlB,WAAM,GAAY,KAAK,CAAC;QAGxB,iBAAY,GAAW,CAAC,CAAC;IA8B3B,CAAC;IA1BC,UAAU,CAAC,iBAAuC;QAChD,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,GAAG,CAClB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EACxB,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAA,cAAc,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,GAAG,cAAc;YAC1B,OAAO,EAAE,IAAI;SACd,CAAC,KAAK,CACV,CAAC;QAEF,OAAO,IAAI,CAAA;mBACI,QAAQ,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI;SAChB,CAAC;UACE,QAAQ;;KAEb,CAAC;IACJ,CAAC;;AA3BM,4BAAM,GAAG,qBAAqB,AAAxB,CAAyB;AARtC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDACT;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;qDACJ;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2DACF;AARd,qBAAqB;IADjC,iBAAiB,CAAC,yBAAyB,CAAC;GAChC,qBAAqB,CAsCjC","sourcesContent":["import { html, LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { range } from \"lit/directives/range.js\";\nimport AudioVisualiserStyles from \"../styles/audio-visualiser.js\";\nimport { safeCustomElement } from \"../utils/custom-elements.js\";\nimport { normalizeToRange } from \"../utils/validation.js\";\n\n@safeCustomElement(\"speech-audio-visualiser\")\nexport class SpeechAudioVisualiser extends LitElement {\n @property({ type: Number })\n level: number = 0;\n\n @property({ type: Boolean })\n active: boolean = false;\n\n @property({ type: Number })\n segmentCount: number = 5;\n\n static styles = AudioVisualiserStyles;\n\n willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has(\"level\")) {\n this.level = normalizeToRange(this.level);\n }\n }\n\n render() {\n const activeSegments = Math.round(this.level * this.segmentCount);\n const segments = map(\n range(this.segmentCount),\n (i) =>\n html`<div class=${classMap({\n active: i < activeSegments,\n segment: true,\n })} />`,\n );\n\n return html`\n <div class=${classMap({\n active: this.active,\n container: true,\n })}>\n ${segments}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"speech-audio-visualiser\": SpeechAudioVisualiser;\n }\n}\n"]}
|
package/{components/keybinding-input.d.ts → dist/core/components/speech-keybinding-input.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class SpeechKeybindingInput extends LitElement {
|
|
3
3
|
#private;
|
|
4
4
|
keybindingType: "push-to-talk" | "toggle-to-talk";
|
|
5
5
|
_pushToTalkKeybinding?: string | null;
|
|
@@ -7,11 +7,10 @@ export declare class DictationKeybindingInput extends LitElement {
|
|
|
7
7
|
disabled: boolean;
|
|
8
8
|
_isCapturingKeybinding: boolean;
|
|
9
9
|
static styles: import("lit").CSSResult[];
|
|
10
|
-
render(): import("lit
|
|
10
|
+
render(): import("lit").TemplateResult<1>;
|
|
11
11
|
}
|
|
12
12
|
declare global {
|
|
13
13
|
interface HTMLElementTagNameMap {
|
|
14
|
-
"
|
|
15
|
-
"dictation-keybinding-input": DictationKeybindingInput;
|
|
14
|
+
"speech-keybinding-input": SpeechKeybindingInput;
|
|
16
15
|
}
|
|
17
16
|
}
|
|
@@ -9,19 +9,19 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
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
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var
|
|
12
|
+
var _SpeechKeybindingInput_instances, _SpeechKeybindingInput_handleKeybindingInputFocus, _SpeechKeybindingInput_handleKeybindingInputBlur, _SpeechKeybindingInput_handleKeybindingKeyDown;
|
|
13
13
|
import { consume } from "@lit/context";
|
|
14
14
|
import { html, LitElement } from "lit";
|
|
15
15
|
import { property, state } from "lit/decorators.js";
|
|
16
16
|
import { pushToTalkKeybindingContext, toggleToTalkKeybindingContext, } from "../contexts/mixins/keybindings-context.js";
|
|
17
17
|
import KeybindingSelectorStyles from "../styles/keybinding-selector.js";
|
|
18
|
-
import {
|
|
18
|
+
import { safeCustomElement } from "../utils/custom-elements.js";
|
|
19
19
|
import { keybindingChangedEvent } from "../utils/events.js";
|
|
20
20
|
import { normalizeKeybinding } from "../utils/keybinding.js";
|
|
21
|
-
let
|
|
21
|
+
let SpeechKeybindingInput = class SpeechKeybindingInput extends LitElement {
|
|
22
22
|
constructor() {
|
|
23
23
|
super(...arguments);
|
|
24
|
-
|
|
24
|
+
_SpeechKeybindingInput_instances.add(this);
|
|
25
25
|
this.keybindingType = "toggle-to-talk";
|
|
26
26
|
this.disabled = false;
|
|
27
27
|
this._isCapturingKeybinding = false;
|
|
@@ -44,9 +44,9 @@ let DictationKeybindingInput = class DictationKeybindingInput extends LitElement
|
|
|
44
44
|
.value=""
|
|
45
45
|
placeholder="Click and press a key..."
|
|
46
46
|
readonly
|
|
47
|
-
@focusin=${__classPrivateFieldGet(this,
|
|
48
|
-
@focusout=${__classPrivateFieldGet(this,
|
|
49
|
-
@keydown=${__classPrivateFieldGet(this,
|
|
47
|
+
@focusin=${__classPrivateFieldGet(this, _SpeechKeybindingInput_instances, "m", _SpeechKeybindingInput_handleKeybindingInputFocus)}
|
|
48
|
+
@focusout=${__classPrivateFieldGet(this, _SpeechKeybindingInput_instances, "m", _SpeechKeybindingInput_handleKeybindingInputBlur)}
|
|
49
|
+
@keydown=${__classPrivateFieldGet(this, _SpeechKeybindingInput_instances, "m", _SpeechKeybindingInput_handleKeybindingKeyDown)}
|
|
50
50
|
?disabled=${this.disabled}
|
|
51
51
|
/>
|
|
52
52
|
</div>
|
|
@@ -54,14 +54,14 @@ let DictationKeybindingInput = class DictationKeybindingInput extends LitElement
|
|
|
54
54
|
`;
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
_SpeechKeybindingInput_instances = new WeakSet();
|
|
58
|
+
_SpeechKeybindingInput_handleKeybindingInputFocus = function _SpeechKeybindingInput_handleKeybindingInputFocus() {
|
|
59
59
|
this._isCapturingKeybinding = true;
|
|
60
60
|
};
|
|
61
|
-
|
|
61
|
+
_SpeechKeybindingInput_handleKeybindingInputBlur = function _SpeechKeybindingInput_handleKeybindingInputBlur() {
|
|
62
62
|
this._isCapturingKeybinding = false;
|
|
63
63
|
};
|
|
64
|
-
|
|
64
|
+
_SpeechKeybindingInput_handleKeybindingKeyDown = function _SpeechKeybindingInput_handleKeybindingKeyDown(event) {
|
|
65
65
|
if (!this._isCapturingKeybinding) {
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
@@ -70,26 +70,26 @@ _DictationKeybindingInput_handleKeybindingKeyDown = function _DictationKeybindin
|
|
|
70
70
|
const keybinding = normalizeKeybinding(event.key);
|
|
71
71
|
this.dispatchEvent(keybindingChangedEvent(event.key, event.code, keybinding, this.keybindingType));
|
|
72
72
|
};
|
|
73
|
-
|
|
73
|
+
SpeechKeybindingInput.styles = KeybindingSelectorStyles;
|
|
74
74
|
__decorate([
|
|
75
75
|
property({ type: String })
|
|
76
|
-
],
|
|
76
|
+
], SpeechKeybindingInput.prototype, "keybindingType", void 0);
|
|
77
77
|
__decorate([
|
|
78
78
|
consume({ context: pushToTalkKeybindingContext, subscribe: true }),
|
|
79
79
|
state()
|
|
80
|
-
],
|
|
80
|
+
], SpeechKeybindingInput.prototype, "_pushToTalkKeybinding", void 0);
|
|
81
81
|
__decorate([
|
|
82
82
|
consume({ context: toggleToTalkKeybindingContext, subscribe: true }),
|
|
83
83
|
state()
|
|
84
|
-
],
|
|
84
|
+
], SpeechKeybindingInput.prototype, "_toggleToTalkKeybinding", void 0);
|
|
85
85
|
__decorate([
|
|
86
86
|
property({ type: Boolean })
|
|
87
|
-
],
|
|
87
|
+
], SpeechKeybindingInput.prototype, "disabled", void 0);
|
|
88
88
|
__decorate([
|
|
89
89
|
state()
|
|
90
|
-
],
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
],
|
|
94
|
-
export {
|
|
95
|
-
//# sourceMappingURL=keybinding-input.js.map
|
|
90
|
+
], SpeechKeybindingInput.prototype, "_isCapturingKeybinding", void 0);
|
|
91
|
+
SpeechKeybindingInput = __decorate([
|
|
92
|
+
safeCustomElement("speech-keybinding-input")
|
|
93
|
+
], SpeechKeybindingInput);
|
|
94
|
+
export { SpeechKeybindingInput };
|
|
95
|
+
//# sourceMappingURL=speech-keybinding-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-keybinding-input.js","sourceRoot":"","sources":["../../src/components/speech-keybinding-input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGtD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;;QAEL,mBAAc,GAAsC,gBAAgB,CAAC;QAWrE,aAAQ,GAAY,KAAK,CAAC;QAG1B,2BAAsB,GAAY,KAAK,CAAC;IA8D1C,CAAC;IA9BC,MAAM;QACJ,MAAM,UAAU,GACd,IAAI,CAAC,cAAc,KAAK,cAAc;YACpC,CAAC,CAAC,IAAI,CAAC,qBAAqB;YAC5B,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACnC,MAAM,KAAK,GACT,IAAI,CAAC,cAAc,KAAK,cAAc;YACpC,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,2BAA2B,CAAC;QAElC,OAAO,IAAI,CAAA;;iBAEE,KAAK;;YAEV,UAAU,IAAI,IAAI,CAAA,+BAA+B,UAAU,QAAQ;;;;;;;uBAOxD,uBAAA,IAAI,2FAA4B;wBAC/B,uBAAA,IAAI,0FAA2B;uBAChC,uBAAA,IAAI,wFAAyB;wBAC5B,IAAI,CAAC,QAAQ;;;;KAIhC,CAAC;IACJ,CAAC;;;;IAxDC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACrC,CAAC;;IAGC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACtC,CAAC;yGAEwB,KAAoB;IAC3C,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;IAExB,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,aAAa,CAChB,sBAAsB,CACpB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,UAAU,EACV,IAAI,CAAC,cAAc,CACpB,CACF,CAAC;AACJ,CAAC;AA5BM,4BAAM,GAAG,wBAAwB,AAA3B,CAA4B;AAhBzC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6DAC0C;AAIrE;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClE,KAAK,EAAE;oEAC8B;AAItC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpE,KAAK,EAAE;sEACgC;AAGxC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;uDACF;AAG1B;IADC,KAAK,EAAE;qEACgC;AAhB7B,qBAAqB;IADjC,iBAAiB,CAAC,yBAAyB,CAAC;GAChC,qBAAqB,CA8EjC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport {\n pushToTalkKeybindingContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/mixins/keybindings-context.js\";\nimport KeybindingSelectorStyles from \"../styles/keybinding-selector.js\";\nimport { safeCustomElement } from \"../utils/custom-elements.js\";\nimport { keybindingChangedEvent } from \"../utils/events.js\";\nimport { normalizeKeybinding } from \"../utils/keybinding.js\";\n\n@safeCustomElement(\"speech-keybinding-input\")\nexport class SpeechKeybindingInput extends LitElement {\n @property({ type: String })\n keybindingType: \"push-to-talk\" | \"toggle-to-talk\" = \"toggle-to-talk\";\n\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @state()\n _isCapturingKeybinding: boolean = false;\n\n static styles = KeybindingSelectorStyles;\n\n #handleKeybindingInputFocus(): void {\n this._isCapturingKeybinding = true;\n }\n\n #handleKeybindingInputBlur(): void {\n this._isCapturingKeybinding = false;\n }\n\n #handleKeybindingKeyDown(event: KeyboardEvent): void {\n if (!this._isCapturingKeybinding) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const keybinding = normalizeKeybinding(event.key);\n\n this.dispatchEvent(\n keybindingChangedEvent(\n event.key,\n event.code,\n keybinding,\n this.keybindingType,\n ),\n );\n }\n\n render() {\n const keybinding =\n this.keybindingType === \"push-to-talk\"\n ? this._pushToTalkKeybinding\n : this._toggleToTalkKeybinding;\n const label =\n this.keybindingType === \"push-to-talk\"\n ? \"Push-to-Talk keybinding\"\n : \"Toggle-to-Talk keybinding\";\n\n return html`\n <div>\n <label>${label}</label>\n <div class=\"keybinding-selector-wrapper\">\n ${keybinding && html`<div class=\"keybinding-key\">${keybinding}</div>`}\n <input\n type=\"text\"\n class=\"keybinding-selector-input\"\n .value=\"\"\n placeholder=\"Click and press a key...\"\n readonly\n @focusin=${this.#handleKeybindingInputFocus}\n @focusout=${this.#handleKeybindingInputBlur}\n @keydown=${this.#handleKeybindingKeyDown}\n ?disabled=${this.disabled}\n />\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"speech-keybinding-input\": SpeechKeybindingInput;\n }\n}\n"]}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Corti } from "@corti/sdk";
|
|
2
2
|
export declare const LANGUAGES_SUPPORTED_EU: Corti.TranscribeSupportedLanguage[];
|
|
3
3
|
export declare const LANGUAGES_SUPPORTED_US: Corti.TranscribeSupportedLanguage[];
|
|
4
|
-
export declare const DEFAULT_DICTATION_CONFIG: Corti.TranscribeConfig;
|
|
5
|
-
export declare const DEFAULT_STREAM_CONFIG: Corti.StreamConfig;
|
|
6
4
|
/**
|
|
7
5
|
* Interval in milliseconds at which MediaRecorder fires dataavailable events.
|
|
8
6
|
* This controls how often audio chunks are sent to the WebSocket.
|
|
@@ -29,20 +29,6 @@ export const LANGUAGES_SUPPORTED_US = [
|
|
|
29
29
|
"pt",
|
|
30
30
|
"sv",
|
|
31
31
|
].sort();
|
|
32
|
-
export const DEFAULT_DICTATION_CONFIG = {
|
|
33
|
-
automaticPunctuation: false,
|
|
34
|
-
primaryLanguage: "en",
|
|
35
|
-
spokenPunctuation: true,
|
|
36
|
-
};
|
|
37
|
-
export const DEFAULT_STREAM_CONFIG = {
|
|
38
|
-
mode: { outputLocale: "en", type: "facts" },
|
|
39
|
-
transcription: {
|
|
40
|
-
isDiarization: true,
|
|
41
|
-
isMultichannel: false,
|
|
42
|
-
participants: [],
|
|
43
|
-
primaryLanguage: "en",
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
32
|
/**
|
|
47
33
|
* Interval in milliseconds at which MediaRecorder fires dataavailable events.
|
|
48
34
|
* This controls how often audio chunks are sent to the WebSocket.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAwC;IACzE,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;CACT,CAAC,IAAI,EAAE,CAAC;AACT,MAAM,CAAC,MAAM,sBAAsB,GAAwC;IACzE,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,IAAI,EAAE,CAAC;AAET;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\n\nexport const LANGUAGES_SUPPORTED_EU: Corti.TranscribeSupportedLanguage[] = [\n \"da\",\n \"de\",\n \"de-CH\",\n \"en\",\n \"en-GB\",\n \"es\",\n \"fr\",\n \"hu\",\n \"it\",\n \"nl\",\n \"no\",\n \"pt\",\n \"sv\",\n \"gsw-CH\",\n].sort();\nexport const LANGUAGES_SUPPORTED_US: Corti.TranscribeSupportedLanguage[] = [\n \"da\",\n \"de\",\n \"de-CH\",\n \"en\",\n \"en-GB\",\n \"es\",\n \"fr\",\n \"hu\",\n \"it\",\n \"nl\",\n \"no\",\n \"pt\",\n \"sv\",\n].sort();\n\n/**\n * Interval in milliseconds at which MediaRecorder fires dataavailable events.\n * This controls how often audio chunks are sent to the WebSocket.\n */\nexport const AUDIO_CHUNK_INTERVAL_MS = 250;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/auth-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CortiAuth } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { getInitialToken } from \"../../utils/auth.js\";\nimport { errorEvent } from \"../../utils/events.js\";\nimport { decodeToken } from \"../../utils/token.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const regionContext = createContext<string | undefined>(\n Symbol(\"region\"),\n);\nexport const tenantNameContext = createContext<string | undefined>(\n Symbol(\"tenantName\"),\n);\nexport const accessTokenContext = createContext<string | undefined>(\n Symbol(\"accessToken\"),\n);\nexport const authConfigContext = createContext<\n CortiAuth.AuthTokenDerivable | undefined\n>(Symbol(\"authConfig\"));\n\nexport declare class AuthContextInterface {\n region?: string;\n tenantName?: string;\n accessToken?: string;\n authConfig?: CortiAuth.AuthTokenDerivable | undefined;\n setAccessToken(token: string | undefined): {\n accessToken: string | undefined;\n environment: string | undefined;\n tenant: string | undefined;\n };\n setAuthConfig(config?: CortiAuth.AuthTokenDerivable): Promise<{\n accessToken: string | undefined;\n environment: string | undefined;\n tenant: string | undefined;\n }>;\n}\n\nexport function AuthContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<AuthContextInterface> & T {\n class AuthContextMixinClass extends superclass {\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 // ─────────────────────────────────────────────────────────────────────────────\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?: CortiAuth.AuthTokenDerivable;\n\n @property({ attribute: false, type: Object })\n set authConfig(config: CortiAuth.AuthTokenDerivable | undefined) {\n this.setAuthConfig(config);\n }\n\n get authConfig(): CortiAuth.AuthTokenDerivable | undefined {\n return this._authConfig;\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 {\n accessToken: token,\n environment: undefined,\n tenant: undefined,\n };\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?: CortiAuth.AuthTokenDerivable) {\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 return AuthContextMixinClass as Constructor<AuthContextInterface> & T;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devices-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/devices-context.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAG5E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CACzC,MAAM,CAAC,SAAS,CAAC,CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAChD,MAAM,CAAC,gBAAgB,CAAC,CACzB,CAAC;AAQF,MAAM,UAAU,mBAAmB,CACjC,UAAa;;IAEb,MAAM,wBAAyB,SAAQ,UAAU;QAQ/C,IAAI,OAAO,CAAC,KAAoC;YAC9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YAEtB,2DAA2D;YAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,uBAAA,IAAI,mDAAmB,CAAC,mBAAmB,EAAE,CAAC;YAChD,CAAC;QACH,CAAC;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAMD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAzBjB,sDAAqB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAC;YA2B/C,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC9D,MAAM,KAAK,GAAG,CAAgB,CAAC;gBAE/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,EAAqB,EAAE,EAAE;gBACjE,IAAI,EAAE,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;oBAClC,uBAAA,IAAI,mDAAmB,CAAC,UAAU,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF;;IAlCC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACpC,KAAK,EAAE;8DACqB;IAG7B;QADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;2DAQ3C;IAQD;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAC3C,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oEACZ;IAkBnC,OAAO,wBAAoE,CAAC;AAC9E,CAAC","sourcesContent":["import { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DevicesController } from \"../../controllers/devices-controller.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const devicesContext = createContext<MediaDeviceInfo[] | undefined>(\n Symbol(\"devices\"),\n);\n\nexport const selectedDeviceContext = createContext<MediaDeviceInfo | undefined>(\n Symbol(\"selectedDevice\"),\n);\n\nexport declare class DevicesContextInterface {\n _devices?: MediaDeviceInfo[];\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo;\n}\n\nexport function DevicesContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<DevicesContextInterface> & T {\n class DevicesContextMixinClass extends superclass {\n #devicesController = new DevicesController(this);\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 constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"recording-devices-changed\", (e: Event) => {\n const event = e as CustomEvent;\n\n this.selectedDevice = event.detail.selectedDevice;\n });\n this.addEventListener(\"context-request\", (ev: ContextEvent<any>) => {\n if (ev.context === devicesContext) {\n this.#devicesController.initialize();\n }\n });\n }\n }\n\n return DevicesContextMixinClass as Constructor<DevicesContextInterface> & T;\n}\n"]}
|
|
@@ -20,8 +20,9 @@ export function KeybindingsContextMixin(superclass) {
|
|
|
20
20
|
constructor(...args) {
|
|
21
21
|
super(...args);
|
|
22
22
|
_KeybindingsContextMixinClass_handleContextRequest.set(this, (e) => {
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const contextTargetTag = e.contextTarget.tagName.toLowerCase();
|
|
24
|
+
if (contextTargetTag === "dictation-keybinding-selector" ||
|
|
25
|
+
contextTargetTag === "ambient-keybinding-selector") {
|
|
25
26
|
if (e.context === pushToTalkKeybindingContext &&
|
|
26
27
|
this.pushToTalkKeybinding === undefined) {
|
|
27
28
|
this.pushToTalkKeybinding = "Space";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keybindings-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/keybindings-context.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAEL,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAEtD,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,6BAA6B,GAAG,aAAa,CAExD,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAOpC,MAAM,UAAU,uBAAuB,CACrC,UAAa;;IAEb,MAAM,4BAA6B,SAAQ,UAAU;QASnD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YASjB,6DAAwB,CAAC,CAAoB,EAAE,EAAE;gBAC/C,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC/D,IACE,gBAAgB,KAAK,+BAA+B;oBACpD,gBAAgB,KAAK,6BAA6B,EAClD,CAAC;oBACD,IACE,CAAC,CAAC,OAAO,KAAK,2BAA2B;wBACzC,IAAI,CAAC,oBAAoB,KAAK,SAAS,EACvC,CAAC;wBACD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;wBACpC,IAAI,CAAC,aAAa,CAChB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAC9D,CAAC;oBACJ,CAAC;oBAED,IACE,CAAC,CAAC,OAAO,KAAK,6BAA6B;wBAC3C,IAAI,CAAC,sBAAsB,KAAK,SAAS,EACzC,CAAC;wBACD,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;wBACtC,IAAI,CAAC,aAAa,CAChB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CACpE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,EAAC;YAEF,gEAA2B,CAAC,CAAQ,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,CAA8C,CAAC;gBAE7D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;gBAE3C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACzC,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC;gBACzC,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBAClD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;gBAC3C,CAAC;YACH,CAAC,EAAC;YA7CA,IAAI,CAAC,gBAAgB,CACnB,oBAAoB,EACpB,uBAAA,IAAI,6DAAyB,CAC9B,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,uBAAA,IAAI,0DAAsB,CAAC,CAAC;QACvE,CAAC;KAyCF;;IAvDC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;QACjD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8EACU;IAIrC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;QACnD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gFACY;IAqDzC,OAAO,4BACJ,CAAC;AACN,CAAC","sourcesContent":["import { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport {\n type KeybindingChangedEventDetail,\n keybindingChangedEvent,\n} from \"../../utils/events.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const pushToTalkKeybindingContext = createContext<\n string | null | undefined\n>(Symbol(\"pushToTalkKeybinding\"));\n\nexport const toggleToTalkKeybindingContext = createContext<\n string | null | undefined\n>(Symbol(\"toggleToTalkKeybinding\"));\n\nexport declare class KeybindingsContextInterface {\n pushToTalkKeybinding?: string | null;\n toggleToTalkKeybinding?: string | null;\n}\n\nexport function KeybindingsContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<KeybindingsContextInterface> & T {\n class KeybindingsContextMixinClass extends superclass {\n @provide({ context: pushToTalkKeybindingContext })\n @property({ type: String })\n pushToTalkKeybinding?: string | null;\n\n @provide({ context: toggleToTalkKeybindingContext })\n @property({ type: String })\n toggleToTalkKeybinding?: string | null;\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\n \"keybinding-changed\",\n this.#handleKeybindingChanged,\n );\n this.addEventListener(\"context-request\", this.#handleContextRequest);\n }\n\n #handleContextRequest = (e: ContextEvent<any>) => {\n const contextTargetTag = e.contextTarget.tagName.toLowerCase();\n if (\n contextTargetTag === \"dictation-keybinding-selector\" ||\n contextTargetTag === \"ambient-keybinding-selector\"\n ) {\n if (\n e.context === pushToTalkKeybindingContext &&\n this.pushToTalkKeybinding === undefined\n ) {\n this.pushToTalkKeybinding = \"Space\";\n this.dispatchEvent(\n keybindingChangedEvent(\" \", \"Space\", \"Space\", \"push-to-talk\"),\n );\n }\n\n if (\n e.context === toggleToTalkKeybindingContext &&\n this.toggleToTalkKeybinding === undefined\n ) {\n this.toggleToTalkKeybinding = \"Enter\";\n this.dispatchEvent(\n keybindingChangedEvent(\"Enter\", \"Enter\", \"Enter\", \"toggle-to-talk\"),\n );\n }\n }\n };\n\n #handleKeybindingChanged = (e: Event) => {\n const event = e as CustomEvent<KeybindingChangedEventDetail>;\n\n const keybinding = event.detail.keybinding;\n\n if (event.detail.type === \"push-to-talk\") {\n this.pushToTalkKeybinding = keybinding;\n } else if (event.detail.type === \"toggle-to-talk\") {\n this.toggleToTalkKeybinding = keybinding;\n }\n };\n }\n\n return KeybindingsContextMixinClass as Constructor<KeybindingsContextInterface> &\n T;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/languages-context.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAE3C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACvB,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAElD,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAQ9B,MAAM,UAAU,qBAAqB,CACnC,UAAa;;IAEb,MAAM,0BAA2B,SAAQ,UAAU;QAejD,IAAI,SAAS,CAAC,KAAsD;YAClE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,6DAA6D;YAC7D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,uBAAA,IAAI,uDAAqB,CAAC,mBAAmB,EAAE,CAAC;YAClD,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IACE,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBACpC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACvC,CAAC;gBACD,IAAI,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QAED,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YA5CjB,0DAAuB,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAC;YA8CnD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACpD,MAAM,EAAE,GAAG,CAA0C,CAAC;gBAEtD,IAAI,EAAE,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;oBACpC,uBAAA,IAAI,uDAAqB,CAAC,UAAU,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACtD,MAAM,KAAK,GAAG,CAA6C,CAAC;gBAC5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAEzB,CAAC;gBAEd,IAAI,CAAC,iBAAiB;oBACpB,gBAAgB;wBAChB,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC;KACF;;IA7DC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACtC,KAAK,EAAE;kEACyC;IAIjD;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;QAC7C,KAAK,EAAE;yEAC8C;IAMtD;QAJC,QAAQ,CAAC;YACR,SAAS,EAAE,uBAAuB;YAClC,IAAI,EAAE,KAAK;SACZ,CAAC;+DAwBD;IA8BH,OAAO,0BACJ,CAAC;AACN,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { LanguagesController } from \"../../controllers/languages-controller.js\";\nimport { commaSeparatedConverter } from \"../../utils/converters.js\";\nimport type { LanguagesChangedEventDetail } from \"../../utils/events.js\";\nimport { getPreferredDefaultLanguage } from \"../../utils/languages.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const languagesContext = createContext<\n Corti.TranscribeSupportedLanguage[] | undefined\n>(Symbol(\"languages\"));\nexport const selectedLanguageContext = createContext<\n Corti.TranscribeSupportedLanguage | undefined\n>(Symbol(\"selectedLanguage\"));\n\nexport declare class LanguagesContextInterface {\n _languages?: Corti.TranscribeSupportedLanguage[];\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n languages?: Corti.TranscribeSupportedLanguage[];\n}\n\nexport function LanguagesContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<LanguagesContextInterface> & T {\n class LanguagesContextMixinClass extends superclass {\n #languagesController = new LanguagesController(this);\n\n @provide({ context: languagesContext })\n @state()\n _languages?: Corti.TranscribeSupportedLanguage[];\n\n @provide({ context: selectedLanguageContext })\n @state()\n _selectedLanguage?: 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 if (value === undefined) {\n return;\n }\n\n if (value.length === 0) {\n this._selectedLanguage = undefined;\n return;\n }\n\n if (\n this._selectedLanguage === undefined ||\n !value.includes(this._selectedLanguage)\n ) {\n this._selectedLanguage = getPreferredDefaultLanguage(value);\n }\n }\n\n get languages(): Corti.TranscribeSupportedLanguage[] | undefined {\n return this._languages;\n }\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"context-request\", (e: Event) => {\n const ev = e as ContextEvent<typeof languagesContext>;\n\n if (ev.context === languagesContext) {\n this.#languagesController.initialize();\n }\n });\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent<LanguagesChangedEventDetail>;\n const selectedLanguage = event.detail.selectedLanguage as\n | Corti.TranscribeSupportedLanguage\n | undefined;\n\n this._selectedLanguage =\n selectedLanguage ??\n getPreferredDefaultLanguage(event.detail.languages);\n });\n }\n }\n\n return LanguagesContextMixinClass as Constructor<LanguagesContextInterface> &\n T;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/proxy-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAC3C,MAAM,CAAC,WAAW,CAAC,CACpB,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAC7C,MAAM,CAAC,aAAa,CAAC,CACtB,CAAC;AAOF,MAAM,UAAU,iBAAiB,CAC/B,UAAa;IAEb,MAAM,sBAAuB,SAAQ,UAAU;KAY9C;IALC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACtC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6DACR;IAInB;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;QACxC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+DAClB;IAG7B,OAAO,sBAAgE,CAAC;AAC1E,CAAC","sourcesContent":["import { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport type { ProxyOptions } from \"../../types.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const socketUrlContext = createContext<string | undefined>(\n Symbol(\"socketUrl\"),\n);\nexport const socketProxyContext = createContext<ProxyOptions | undefined>(\n Symbol(\"socketProxy\"),\n);\n\nexport declare class ProxyContextInterface {\n socketUrl?: string;\n socketProxy?: ProxyOptions;\n}\n\nexport function ProxyContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<ProxyContextInterface> & T {\n class ProxyContextMixinClass extends superclass {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\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\n return ProxyContextMixinClass as Constructor<ProxyContextInterface> & T;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording-state-context.js","sourceRoot":"","sources":["../../../src/contexts/mixins/recording-state-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C;;GAEG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAChD,MAAM,CAAC,gBAAgB,CAAC,CACzB,CAAC;AAMF,MAAM,UAAU,0BAA0B,CACxC,UAAa;IAEb,MAAM,+BAAgC,SAAQ,UAAU;QAKtD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAHjB,mBAAc,GAAmB,SAAS,CAAC;YAKzC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC5D,MAAM,KAAK,GAAG,CAA2C,CAAC;gBAE1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;KACF;IAXC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAC3C,KAAK,EAAE;2EACmC;IAa7C,OAAO,+BACJ,CAAC;AACN,CAAC","sourcesContent":["import { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport type { RecordingState } from \"../../types.js\";\nimport type { Constructor } from \"./types.js\";\n\n/**\n * Lit context and mixin for recording UI state (`stopped`, `recording`, …).\n */\n\nexport const recordingStateContext = createContext<RecordingState>(\n Symbol(\"recordingState\"),\n);\n\nexport declare class RecordingStateContextInterface {\n recordingState: RecordingState;\n}\n\nexport function RecordingStateContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<RecordingStateContextInterface> & T {\n class RecordingStateContextMixinClass extends superclass {\n @provide({ context: recordingStateContext })\n @state()\n recordingState: RecordingState = \"stopped\";\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"recording-state-changed\", (e: Event) => {\n const event = e as CustomEvent<{ state: RecordingState }>;\n\n this.recordingState = event.detail.state;\n });\n }\n }\n\n return RecordingStateContextMixinClass as Constructor<RecordingStateContextInterface> &\n T;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/contexts/mixins/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Constructor signature for Lit class mixins\n * (https://lit.dev/docs/composition/mixins/).\n */\nexport type Constructor<T extends object = object> = new (...args: any[]) => T;\n"]}
|
|
@@ -3,6 +3,6 @@ declare const RootContext_base: import("./mixins/types.js").Constructor<import("
|
|
|
3
3
|
export declare class RootContext extends RootContext_base {
|
|
4
4
|
noWrapper: boolean;
|
|
5
5
|
static styles: CSSResultGroup;
|
|
6
|
-
render(): import("lit
|
|
6
|
+
render(): import("lit").TemplateResult<1>;
|
|
7
7
|
}
|
|
8
8
|
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"root-context.js","sourceRoot":"","sources":["../../src/contexts/root-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAuB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF,MAAM,OAAO,WAAY,SAAQ,mBAAmB,CAClD,0BAA0B,CACxB,uBAAuB,CACrB,qBAAqB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CACvE,CACF,CACF;IAND;;QAQE,cAAS,GAAY,KAAK,CAAC;IAa7B,CAAC;IATC,MAAM;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA,eAAe,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAA;;WAEJ,CAAC;IACV,CAAC;;AAVM,kBAAM,GAAmB,CAAC,eAAe,CAAC,AAApC,CAAqC;AAFlD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CACD","sourcesContent":["import { type CSSResultGroup, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport ComponentStyles from \"../styles/component-styles.js\";\nimport { AuthContextMixin } from \"./mixins/auth-context.js\";\nimport { DevicesContextMixin } from \"./mixins/devices-context.js\";\nimport { KeybindingsContextMixin } from \"./mixins/keybindings-context.js\";\nimport { LanguagesContextMixin } from \"./mixins/languages-context.js\";\nimport { ProxyContextMixin } from \"./mixins/proxy-context.js\";\nimport { RecordingStateContextMixin } from \"./mixins/recording-state-context.js\";\n\nexport class RootContext extends DevicesContextMixin(\n RecordingStateContextMixin(\n KeybindingsContextMixin(\n LanguagesContextMixin(AuthContextMixin(ProxyContextMixin(LitElement))),\n ),\n ),\n) {\n @property({ type: Boolean })\n noWrapper: boolean = false;\n\n static styles: CSSResultGroup = [ComponentStyles];\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"]}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"keybinding-controller.js","sourceRoot":"","sources":["../../src/controllers/keybinding-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { keybindingActivatedEvent } from \"../utils/events.js\";\nimport {\n matchesKeybinding,\n shouldIgnoreKeybinding,\n} from \"../utils/keybinding.js\";\n\ninterface KeybindingControllerHost extends ReactiveControllerHost {\n _pushToTalkKeybinding?: string | null;\n _toggleToTalkKeybinding?: string | null;\n startRecording(): void;\n stopRecording(): void;\n toggleRecording(): void;\n dispatchEvent(event: Event): boolean;\n}\n\nexport class KeybindingController implements ReactiveController {\n host: KeybindingControllerHost;\n\n #keydownHandler?: (event: KeyboardEvent) => void;\n #keyupHandler?: (event: KeyboardEvent) => void;\n #blurHandler?: () => void;\n #isPushToTalkKeyPressed: boolean = false;\n\n constructor(host: KeybindingControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#setupListeners();\n }\n\n hostDisconnected(): void {\n this.#removeListeners();\n }\n\n #setupListeners(): void {\n this.#removeListeners();\n\n this.#keydownHandler = (event: KeyboardEvent) => {\n if (shouldIgnoreKeybinding(document.activeElement)) {\n return;\n }\n\n if (\n this.host._toggleToTalkKeybinding &&\n matchesKeybinding(event, this.host._toggleToTalkKeybinding) &&\n !this.#isPushToTalkKeyPressed\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n\n this.host.toggleRecording();\n return;\n }\n\n if (\n this.host._pushToTalkKeybinding &&\n matchesKeybinding(event, this.host._pushToTalkKeybinding)\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n\n this.#isPushToTalkKeyPressed = true;\n this.host.startRecording();\n }\n };\n\n this.#keyupHandler = (event: KeyboardEvent) => {\n if (\n this.host._pushToTalkKeybinding &&\n matchesKeybinding(event, this.host._pushToTalkKeybinding)\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n this.#isPushToTalkKeyPressed = false;\n this.host.stopRecording();\n }\n };\n\n this.#blurHandler = () => {\n if (this.#isPushToTalkKeyPressed) {\n this.#isPushToTalkKeyPressed = false;\n this.host.stopRecording();\n }\n };\n\n window.addEventListener(\"keydown\", this.#keydownHandler);\n window.addEventListener(\"keyup\", this.#keyupHandler);\n window.addEventListener(\"blur\", this.#blurHandler);\n }\n\n #removeListeners(): void {\n if (this.#keydownHandler) {\n window.removeEventListener(\"keydown\", this.#keydownHandler);\n this.#keydownHandler = undefined;\n }\n\n if (this.#keyupHandler) {\n window.removeEventListener(\"keyup\", this.#keyupHandler);\n this.#keyupHandler = undefined;\n }\n\n if (this.#blurHandler) {\n window.removeEventListener(\"blur\", this.#blurHandler);\n this.#blurHandler = undefined;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages-controller.js","sourceRoot":"","sources":["../../src/controllers/languages-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAU7D;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAO9B,YAAY,IAA6B;;QALzC,mDAAgC,KAAK,EAAC;QACtC,gDAA6B,KAAK,EAAC;QACnC,sDAAyB;QACzB,2CAAwB,KAAK,EAAC;QAG5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,uBAAA,IAAI,oCAAgB,IAAI,MAAA,CAAC;QAEzB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,uBAAA,IAAI,0EAAe,MAAnB,IAAI,CAAiB,CAAC;QACxB,CAAC;IACH,CAAC;IAED,UAAU;QACR,6CAA6C;QAC7C,IAAI,CAAC,uBAAA,IAAI,wCAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,IACE,CAAC,uBAAA,IAAI,2CAAgB,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YACxC,uBAAA,IAAI,gDAAqB,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAClC,CAAC;YACD,uBAAA,IAAI,0EAAe,MAAnB,IAAI,CAAiB,CAAC;QACxB,CAAC;QAED,uBAAA,IAAI,uCAAmB,IAAI,CAAC,IAAI,CAAC,MAAM,MAAA,CAAC;IAC1C,CAAC;IAmCD;;OAEG;IACH,mBAAmB;QACjB,uBAAA,IAAI,4CAAwB,KAAK,MAAA,CAAC;IACpC,CAAC;CACF;6SAvCC,KAAK;IACH,IAAI,uBAAA,IAAI,6CAAkB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,uBAAA,IAAI,yCAAqB,IAAI,MAAA,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CACzD,IAAI,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC;QAEF,uBAAA,IAAI,4CAAwB,IAAI,MAAA,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAEjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrD,MAAM,gBAAgB,GACpB,gBAAgB,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACtD,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,eAAe,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CACnD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,uBAAA,IAAI,yCAAqB,KAAK,MAAA,CAAC;IACjC,CAAC;AACH,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { errorEvent, languagesChangedEvent } from \"../utils/events.js\";\nimport { getLanguagesByRegion } from \"../utils/languages.js\";\n\ninterface LanguagesControllerHost extends ReactiveControllerHost {\n region?: string;\n dispatchEvent(event: CustomEvent): boolean;\n requestUpdate(): void;\n _languages?: Corti.TranscribeSupportedLanguage[];\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n}\n\n/**\n * Controller that manages automatic language loading based on region.\n * Loads languages when they're not present and handles region changes.\n * Reacts to updates and automatically loads languages when needed.\n */\nexport class LanguagesController implements ReactiveController {\n host: LanguagesControllerHost;\n #autoLoadedLanguages: boolean = false;\n #loadingLanguages: boolean = false;\n #previousRegion?: string;\n #initialized: boolean = false;\n\n constructor(host: LanguagesControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n initialize(): void {\n this.#initialized = true;\n\n if (this.host._languages === undefined) {\n this.#loadLanguages();\n }\n }\n\n hostUpdate(): void {\n // Only react to updates after initialization\n if (!this.#initialized) {\n return;\n }\n\n // When region changes, reload languages if they were auto-loaded\n if (\n (this.#previousRegion !== this.host.region &&\n this.#autoLoadedLanguages) ||\n this.host._languages === undefined\n ) {\n this.#loadLanguages();\n }\n\n this.#previousRegion = this.host.region;\n }\n\n async #loadLanguages(): Promise<void> {\n if (this.#loadingLanguages) {\n return;\n }\n\n this.#loadingLanguages = true;\n\n try {\n const { languages, defaultLanguage } = getLanguagesByRegion(\n this.host.region,\n );\n\n this.#autoLoadedLanguages = true;\n this.host._languages = languages;\n\n const previousLanguage = this.host._selectedLanguage;\n const selectedLanguage =\n previousLanguage && languages.includes(previousLanguage)\n ? previousLanguage\n : defaultLanguage;\n\n this.host._selectedLanguage = selectedLanguage;\n this.host.requestUpdate();\n this.host.dispatchEvent(\n languagesChangedEvent(languages, selectedLanguage),\n );\n } catch (error) {\n this.host.dispatchEvent(errorEvent(error));\n } finally {\n this.#loadingLanguages = false;\n }\n }\n\n /**\n * Clear the auto-loaded flag (when languages are set externally)\n */\n clearAutoLoadedFlag(): void {\n this.#autoLoadedLanguages = false;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-controller.js","sourceRoot":"","sources":["../../src/controllers/media-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAS3B,MAAM,OAAO,eAAe;IAe1B,YAAY,IAAyB;QAZrC,uCAAmC,IAAI,EAAC;QACxC,yCAAgC,EAAE,EAAC;QACnC,sCAAmC,IAAI,EAAC;QACxC,wCAAqC,IAAI,EAAC;QAC1C,oCAAiC,IAAI,EAAC;QACtC,yCAAuC,IAAI,EAAC;QAC5C,sDAA6B;QAC7B,sCAAsB,CAAC,EAAC;QACxB,gDAA2B;QAC3B,sDAA8C;QAC9C,+CAAoC;QAGlC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,YAAyB,EACzB,WAAkC;QAElC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,uBAAA,IAAI,iCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,gCAAgB,WAAW,MAAA,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EACnC,IAAI,CAAC,IAAI,CAAC,YAAY,EACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAC9B,CAAC;QAEF,uBAAA,IAAI,gCAAgB,OAAO,CAAC,MAAM,MAAA,CAAC;QACnC,uBAAA,IAAI,kCAAkB,OAAO,CAAC,aAAa,MAAA,CAAC;QAC5C,uBAAA,IAAI,+BAAe,OAAO,CAAC,cAAc,IAAI,IAAI,MAAA,CAAC;QAElD,uBAAA,IAAI,sCAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAuB,EAAE,EAAE;gBACrD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACnC,IAAI,uBAAA,IAAI,qCAAc,EAAE,CAAC;wBACvB,uBAAA,IAAI,qCAAc,MAAlB,IAAI,CAAgB,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,uBAAA,IAAI,oCAAa,CAAC,CAAC;QAE1E,uBAAA,IAAI,iCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,6BAAa,QAAQ,MAAA,CAAC;QAE1B,uBAAA,IAAI,kCAAkB,IAAI,aAAa,CAAC,uBAAA,IAAI,oCAAa,CAAC,MAAA,CAAC;QAC3D,uBAAA,IAAI,sCAAe,CAAC,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE;YAC9C,IAAI,uBAAA,IAAI,oCAAa,EAAE,CAAC;gBACtB,uBAAA,IAAI,oCAAa,MAAjB,IAAI,EAAc,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,uBAAA,IAAI,iCAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,uBAAA,IAAI,iCAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,yBAAyB,CACvB,kBAA4C;QAE5C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,uBAAA,IAAI,uCAAuB,kBAAkB,MAAA,CAAC;QAE9C,uBAAA,IAAI,uCAAuB,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YACjD,uBAAA,IAAI,+BAAe,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,MAAA,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAE1B,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;gBAC7B,uBAAA,IAAI,2CAAoB,MAAxB,IAAI,EAAqB,uBAAA,IAAI,mCAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,MAAA,CAAC;IACV,CAAC;IAED,wBAAwB;QACtB,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;YAC7B,aAAa,CAAC,uBAAA,IAAI,2CAAoB,CAAC,CAAC;YACxC,uBAAA,IAAI,uCAAuB,SAAS,MAAA,CAAC;QACvC,CAAC;QAED,uBAAA,IAAI,+BAAe,CAAC,MAAA,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1B,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;YAC7B,uBAAA,IAAI,2CAAoB,MAAxB,IAAI,EAAqB,uBAAA,IAAI,mCAAY,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,uBAAA,IAAI,sCAAe,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/C,uBAAA,IAAI,sCAAe,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,uBAAA,IAAI,sCAAe,EAAE,CAAC;YACxB,uBAAA,IAAI,sCAAe,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7C,CAAC;QAED,IAAI,uBAAA,IAAI,oCAAa,EAAE,CAAC;YACtB,uBAAA,IAAI,oCAAa,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,uBAAA,IAAI,gCAAgB,IAAI,MAAA,CAAC;QAC3B,CAAC;QAED,uBAAA,IAAI,sCAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnC,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,uBAAA,IAAI,kCAAkB,EAAE,MAAA,CAAC;QAEzB,IAAI,uBAAA,IAAI,mCAAY,IAAI,uBAAA,IAAI,mCAAY,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,uBAAA,IAAI,mCAAY,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QAED,uBAAA,IAAI,+BAAe,IAAI,MAAA,CAAC;QAExB,IAAI,uBAAA,IAAI,qCAAc,IAAI,uBAAA,IAAI,qCAAc,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,uBAAA,IAAI,qCAAc,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,uBAAA,IAAI,iCAAiB,IAAI,MAAA,CAAC;QAE1B,uBAAA,IAAI,6BAAa,IAAI,MAAA,CAAC;QACtB,uBAAA,IAAI,kCAAkB,IAAI,MAAA,CAAC;QAC3B,uBAAA,IAAI,iCAAiB,SAAS,MAAA,CAAC;QAC/B,uBAAA,IAAI,uCAAuB,SAAS,MAAA,CAAC;QACrC,uBAAA,IAAI,gCAAgB,SAAS,MAAA,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,uBAAA,IAAI,sCAAe,IAAI,uBAAA,IAAI,sCAAe,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACtE,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,uBAAA,IAAI,sCAAe,CAAC,MAAM,GAAG,GAAG,EAAE;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,uBAAA,IAAI,sCAAe,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa;QACf,OAAO,uBAAA,IAAI,sCAAe,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC;IAC1B,CAAC;CACF","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport {\n calculateAudioLevel,\n createAudioAnalyzer,\n getMediaStream,\n} from \"../utils/media.js\";\n\ninterface MediaControllerHost extends ReactiveControllerHost {\n _selectedDevice?: MediaDeviceInfo;\n _virtualMode?: boolean;\n _debug_displayAudio?: boolean;\n dispatchEvent(event: Event): boolean;\n}\n\nexport class MediaController implements ReactiveController {\n host: MediaControllerHost;\n\n #mediaStream: MediaStream | null = null;\n #sourceStreams: MediaStream[] = [];\n #mixContext: AudioContext | null = null;\n #audioContext: AudioContext | null = null;\n #analyser: AnalyserNode | null = null;\n #mediaRecorder: MediaRecorder | null = null;\n #visualiserInterval?: number;\n #audioLevel: number = 0;\n #onTrackEnded?: () => void;\n #onAudioLevelChange?: (level: number) => void;\n #dataHandler?: (data: Blob) => void;\n\n constructor(host: MediaControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostDisconnected(): void {\n this.cleanup();\n }\n\n async initialize(\n onTrackEnded?: () => void,\n dataHandler?: (data: Blob) => void,\n ): Promise<void> {\n await this.cleanup();\n\n this.#onTrackEnded = onTrackEnded;\n this.#dataHandler = dataHandler;\n\n const capture = await getMediaStream(\n this.host._selectedDevice?.deviceId,\n this.host._virtualMode,\n this.host._debug_displayAudio,\n );\n\n this.#mediaStream = capture.stream;\n this.#sourceStreams = capture.sourceStreams;\n this.#mixContext = capture.cleanupContext ?? null;\n\n this.#sourceStreams.forEach((stream) => {\n stream.getTracks().forEach((track: MediaStreamTrack) => {\n track.addEventListener(\"ended\", () => {\n if (this.#onTrackEnded) {\n this.#onTrackEnded();\n }\n });\n });\n });\n\n const { audioContext, analyser } = createAudioAnalyzer(this.#mediaStream);\n\n this.#audioContext = audioContext;\n this.#analyser = analyser;\n\n this.#mediaRecorder = new MediaRecorder(this.#mediaStream);\n this.#mediaRecorder.ondataavailable = (event) => {\n if (this.#dataHandler) {\n this.#dataHandler(event.data);\n }\n };\n }\n\n getAudioLevel(): number {\n return this.#analyser ? calculateAudioLevel(this.#analyser) : 0;\n }\n\n startAudioLevelMonitoring(\n onAudioLevelChange?: (level: number) => void,\n ): void {\n this.stopAudioLevelMonitoring();\n\n this.#onAudioLevelChange = onAudioLevelChange;\n\n this.#visualiserInterval = window.setInterval(() => {\n this.#audioLevel = this.getAudioLevel() * 3;\n this.host.requestUpdate();\n\n if (this.#onAudioLevelChange) {\n this.#onAudioLevelChange(this.#audioLevel);\n }\n }, 150);\n }\n\n stopAudioLevelMonitoring(): void {\n if (this.#visualiserInterval) {\n clearInterval(this.#visualiserInterval);\n this.#visualiserInterval = undefined;\n }\n\n this.#audioLevel = 0;\n this.host.requestUpdate();\n\n if (this.#onAudioLevelChange) {\n this.#onAudioLevelChange(this.#audioLevel);\n }\n }\n\n async cleanup(): Promise<void> {\n this.stopAudioLevelMonitoring();\n\n if (this.#mediaRecorder?.state === \"recording\") {\n this.#mediaRecorder.stop();\n }\n\n if (this.#mediaRecorder) {\n this.#mediaRecorder.ondataavailable = null;\n }\n\n if (this.#mediaStream) {\n this.#mediaStream.getTracks().forEach((track) => {\n track.stop();\n });\n this.#mediaStream = null;\n }\n\n this.#sourceStreams.forEach((stream) => {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n });\n this.#sourceStreams = [];\n\n if (this.#mixContext && this.#mixContext.state !== \"closed\") {\n await this.#mixContext.close();\n }\n\n this.#mixContext = null;\n\n if (this.#audioContext && this.#audioContext.state !== \"closed\") {\n await this.#audioContext.close();\n }\n\n this.#audioContext = null;\n\n this.#analyser = null;\n this.#mediaRecorder = null;\n this.#onTrackEnded = undefined;\n this.#onAudioLevelChange = undefined;\n this.#dataHandler = undefined;\n }\n\n /**\n * Stops the media recorder and waits for all buffered data to be flushed.\n * This ensures the final ondataavailable event fires before resolving.\n */\n async stopRecording(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (!this.#mediaRecorder || this.#mediaRecorder.state !== \"recording\") {\n resolve();\n return;\n }\n\n this.#mediaRecorder.onstop = () => {\n resolve();\n };\n\n this.#mediaRecorder.stop();\n });\n }\n\n get mediaRecorder(): MediaRecorder | null {\n return this.#mediaRecorder;\n }\n\n get audioLevel(): number {\n return this.#audioLevel;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-controller.js","sourceRoot":"","sources":["../../src/controllers/socket-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { type CortiAuth, CortiClient } from \"@corti/sdk\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { ProxyOptions } from \"../types.js\";\nimport { errorEvent } from \"../utils/events.js\";\n\nexport interface SocketControllerHost extends ReactiveControllerHost {\n dispatchEvent: (event: Event) => void;\n _accessToken?: string;\n _authConfig?: CortiAuth.AuthTokenDerivable;\n _region?: string;\n _tenantName?: string;\n _socketUrl?: string;\n _socketProxy?: ProxyOptions;\n}\n\nexport type SocketControllerWebSocket = {\n readyState: number;\n close(): void;\n on(event: \"message\", handler: (message: { type: string }) => void): void;\n on(event: \"error\", handler: (error: Error) => void): void;\n on(event: \"close\", handler: (event: unknown) => void): void;\n send(data: Blob | ArrayBufferLike | string): void;\n sendEnd(message: { type: \"end\" }): void;\n};\n\nexport type SocketControllerCallbacks<TMessage = unknown> = {\n onMessage?: (message: TMessage) => void;\n onError?: (error: Error) => void;\n onClose?: (event: unknown) => void;\n onNetworkActivity?: (direction: \"sent\" | \"received\", data: unknown) => void;\n};\n\nexport type SocketControllerOutboundItem = Blob | { type: string };\n\nexport abstract class SocketController<\n TOutbound extends SocketControllerOutboundItem,\n TMessage = unknown,\n TConfig = unknown,\n TSocket extends SocketControllerWebSocket = SocketControllerWebSocket,\n> implements ReactiveController\n{\n readonly host: SocketControllerHost;\n\n #webSocket: TSocket | null = null;\n #cortiClient: CortiClient | null = null;\n #connectionGeneration = 0;\n #socketReady = false;\n #closeTimeout?: number;\n #outboundQueue: TOutbound[] = [];\n #callbacks?: SocketControllerCallbacks<TMessage>;\n #lastConfig: TConfig | null = null;\n #lastSocketUrl?: string;\n #lastSocketProxy?: ProxyOptions;\n #connectingPromise: Promise<boolean | \"superseded\"> | null = null;\n #isConnecting = false;\n\n protected abstract _connectThroughProxy(\n config: TConfig,\n proxy: ProxyOptions,\n ): Promise<TSocket>;\n protected abstract _connectThroughAuth(\n client: CortiClient,\n config: TConfig,\n ): Promise<TSocket>;\n\n constructor(host: SocketControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n async #openViaProxy(config: TConfig): Promise<TSocket> {\n const proxyOptions = this.host._socketProxy || {\n url: this.host._socketUrl || \"\",\n };\n\n if (!proxyOptions.url) {\n throw new Error(\"Proxy URL is required when using proxy client\");\n }\n\n return this._connectThroughProxy(config, proxyOptions);\n }\n\n async #openViaAuth(config: TConfig): Promise<TSocket> {\n if (!this.host._authConfig && !this.host._accessToken) {\n throw new Error(\n \"Auth configuration or access token is required to connect\",\n );\n }\n\n const auth: CortiAuth.AuthTokenDerivable = this.host._authConfig || {\n accessToken: this.host._accessToken || \"\",\n refreshAccessToken: () => ({\n accessToken: this.host._accessToken || \"\",\n }),\n };\n\n this.#cortiClient = new CortiClient({\n auth,\n environment: this.host._region,\n tenantName: this.host._tenantName,\n });\n\n return this._connectThroughAuth(this.#cortiClient, config);\n }\n\n async connect(\n config: TConfig,\n callbacks: SocketControllerCallbacks<TMessage>,\n ): Promise<boolean | \"superseded\"> {\n // If a connection attempt is already in progress with the same config, reuse it\n // to avoid opening multiple sockets when connect() is called concurrently.\n if (this.#connectingPromise && !this.#configHasChanged(config)) {\n return this.#connectingPromise;\n }\n\n // #isConnecting must be set synchronously before #doConnect runs, because\n // #doConnect calls cleanup() which closes the old socket, firing its \"close\"\n // event synchronously. Handlers that check isConnecting() need to see true\n // at that point — before #connectingPromise is even assigned.\n this.#isConnecting = true;\n this.#connectingPromise = this.#doConnect(config, callbacks).finally(() => {\n this.#isConnecting = false;\n this.#connectingPromise = null;\n });\n\n return this.#connectingPromise;\n }\n\n async #doConnect(\n config: TConfig,\n callbacks: SocketControllerCallbacks<TMessage>,\n ): Promise<boolean | \"superseded\"> {\n const newConnection =\n this.#configHasChanged(config) || !this.isConnectionOpen();\n\n if (newConnection) {\n this.cleanup();\n\n this.#lastConfig = config;\n this.#lastSocketUrl = this.host._socketUrl;\n this.#lastSocketProxy = this.host._socketProxy;\n\n const generation = this.#connectionGeneration;\n\n const socket =\n this.host._socketUrl || this.host._socketProxy\n ? await this.#openViaProxy(config)\n : await this.#openViaAuth(config);\n\n // If cleanup() was called while we were awaiting (e.g. config changed),\n // the generation counter will have advanced — discard this stale socket.\n if (this.#connectionGeneration !== generation) {\n socket.close();\n return \"superseded\";\n }\n\n this.#webSocket = socket;\n\n callbacks?.onNetworkActivity?.(\"sent\", {\n configuration: config,\n type: \"config\",\n });\n }\n\n this.#callbacks = callbacks;\n this.#setupWebSocketHandlers(callbacks);\n\n if (!newConnection && this.isConnectionOpen()) {\n this.#socketReady = true;\n this.#drain();\n }\n\n return newConnection;\n }\n\n hostDisconnected(): void {\n this.cleanup();\n }\n\n isConnectionOpen(): boolean {\n return (\n this.#webSocket !== null &&\n (this.#webSocket.readyState === WebSocket.OPEN ||\n this.#webSocket.readyState === WebSocket.CONNECTING)\n );\n }\n\n isConnecting(): boolean {\n return this.#isConnecting;\n }\n\n async waitForConnection(): Promise<void> {\n await this.#connectingPromise;\n }\n\n #isSocketOpen(): boolean {\n return (\n this.#webSocket !== null && this.#webSocket.readyState === WebSocket.OPEN\n );\n }\n\n #configHasChanged(nextConfig: TConfig): boolean {\n return (\n JSON.stringify(nextConfig) !== JSON.stringify(this.#lastConfig) ||\n this.host._socketUrl !== this.#lastSocketUrl ||\n JSON.stringify(this.host._socketProxy) !==\n JSON.stringify(this.#lastSocketProxy)\n );\n }\n\n #drain(): void {\n if (\n !this.#socketReady ||\n !this.#isSocketOpen() ||\n this.#outboundQueue.length === 0\n ) {\n return;\n }\n\n while (this.#outboundQueue.length > 0 && this.#isSocketOpen()) {\n const item = this.#outboundQueue.shift();\n\n if (item === undefined) {\n break;\n }\n\n if (item instanceof Blob) {\n this.#webSocket!.send(item);\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n size: item.size,\n type: \"audio\",\n });\n continue;\n }\n\n this.#webSocket!.send(JSON.stringify(item));\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n type: item.type,\n });\n }\n }\n\n mediaRecorderHandler = (data: Blob): void => {\n if (this.#socketReady && this.#isSocketOpen()) {\n this.#webSocket?.send(data);\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n size: data.size,\n type: \"audio\",\n });\n return;\n }\n\n this.#outboundQueue.push(data as TOutbound);\n };\n\n async pause(): Promise<void> {\n if (this.#socketReady && this.#isSocketOpen()) {\n this.#webSocket?.send(JSON.stringify({ type: \"flush\" }));\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"flush\" });\n return;\n }\n\n this.#outboundQueue.push({ type: \"flush\" } as TOutbound);\n }\n\n async stopRecording(): Promise<void> {\n await this.pause();\n }\n\n async closeConnection(onClose?: (event: unknown) => void): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const oldSocket = this.#webSocket;\n this.#webSocket = null;\n\n if (\n !oldSocket ||\n (oldSocket.readyState !== WebSocket.OPEN &&\n oldSocket.readyState !== WebSocket.CONNECTING)\n ) {\n this.#socketReady = false;\n resolve();\n return;\n }\n\n oldSocket.on(\"close\", (event) => {\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n if (onClose) {\n onClose(event);\n } else if (this.#callbacks?.onClose) {\n this.#callbacks.onClose(event);\n }\n\n resolve();\n });\n\n const wasReady = this.#socketReady;\n this.#socketReady = false;\n\n oldSocket.on(\"message\", (message) => {\n this.#callbacks?.onNetworkActivity?.(\"received\", message);\n\n if (this.#callbacks?.onMessage) {\n this.#callbacks.onMessage(message as TMessage);\n }\n\n // closeConnection() may be called before CONFIG_ACCEPTED arrives (e.g.\n // openConnection() followed immediately by closeConnection()). We can't\n // use the outbound queue here because #webSocket is already null, so we\n // send \"end\" directly on oldSocket as soon as config is accepted.\n if (!wasReady && message.type === \"CONFIG_ACCEPTED\") {\n oldSocket.sendEnd({ type: \"end\" });\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"end\" });\n return;\n }\n\n if (message.type === \"ended\" || message.type === \"ENDED\") {\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n resolve();\n return;\n }\n });\n\n if (wasReady) {\n oldSocket.sendEnd({ type: \"end\" });\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"end\" });\n }\n\n this.#closeTimeout = window.setTimeout(() => {\n reject(new Error(\"Connection close timeout\"));\n\n if (oldSocket?.readyState === WebSocket.OPEN) {\n oldSocket.close();\n }\n }, 10000);\n });\n }\n\n cleanup(): void {\n this.#connectionGeneration++;\n this.#socketReady = false;\n\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n if (this.isConnectionOpen()) {\n this.#webSocket?.close();\n }\n\n this.#webSocket = null;\n this.#cortiClient = null;\n this.#lastConfig = null;\n this.#lastSocketUrl = undefined;\n this.#lastSocketProxy = undefined;\n\n if (this.#outboundQueue.length > 0) {\n this.host.dispatchEvent(\n errorEvent(\n `${this.#outboundQueue.length} unsent message(s) were discarded because the configuration changed before the connection was closed`,\n ),\n );\n }\n\n this.#outboundQueue = [];\n }\n\n #setupWebSocketHandlers(\n callbacks: SocketControllerCallbacks<TMessage>,\n ): void {\n if (!this.#webSocket) {\n throw new Error(\"WebSocket not initialized\");\n }\n\n this.#webSocket.on(\"message\", (message) => {\n if (message.type === \"CONFIG_ACCEPTED\") {\n this.#socketReady = true;\n this.#drain();\n }\n\n callbacks.onNetworkActivity?.(\"received\", message);\n\n if (callbacks.onMessage) {\n callbacks.onMessage(message as TMessage);\n }\n });\n\n this.#webSocket.on(\"error\", (event: Error) => {\n this.#socketReady = false;\n if (callbacks.onError) {\n callbacks.onError(event);\n }\n });\n\n this.#webSocket.on(\"close\", (event: unknown) => {\n this.#socketReady = false;\n if (callbacks.onClose) {\n callbacks.onClose(event);\n }\n });\n }\n}\n"]}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { LitElement } from "lit";
|
|
2
2
|
export declare class IconMicOn extends LitElement {
|
|
3
|
-
render(): import("lit
|
|
3
|
+
render(): import("lit").TemplateResult<1>;
|
|
4
4
|
}
|
|
5
5
|
export declare class IconMicOff extends LitElement {
|
|
6
|
-
render(): import("lit
|
|
6
|
+
render(): import("lit").TemplateResult<1>;
|
|
7
7
|
}
|
|
8
8
|
export declare class IconRecording extends LitElement {
|
|
9
|
-
render(): import("lit
|
|
9
|
+
render(): import("lit").TemplateResult<1>;
|
|
10
10
|
}
|
|
11
11
|
export declare class IconSettings extends LitElement {
|
|
12
|
-
render(): import("lit
|
|
12
|
+
render(): import("lit").TemplateResult<1>;
|
|
13
13
|
}
|
|
14
14
|
export declare class IconHeadset extends LitElement {
|
|
15
15
|
static styles: import("lit").CSSResult;
|
|
16
|
-
render(): import("lit
|
|
16
|
+
render(): import("lit").TemplateResult<1>;
|
|
17
17
|
}
|
|
18
18
|
export declare class IconLoadingSpinner extends LitElement {
|
|
19
19
|
static styles: import("lit").CSSResult;
|
|
20
|
-
render(): import("lit
|
|
20
|
+
render(): import("lit").TemplateResult<1>;
|
|
21
21
|
}
|
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
/* eslint-disable max-classes-per-file */
|
|
8
8
|
import { css, html, LitElement } from "lit";
|
|
9
|
-
import {
|
|
9
|
+
import { safeCustomElement } from "../utils/custom-elements.js";
|
|
10
10
|
let IconMicOn = class IconMicOn extends LitElement {
|
|
11
11
|
render() {
|
|
12
12
|
return html `
|
|
@@ -32,7 +32,7 @@ let IconMicOn = class IconMicOn extends LitElement {
|
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
34
|
IconMicOn = __decorate([
|
|
35
|
-
|
|
35
|
+
safeCustomElement("icon-mic-on")
|
|
36
36
|
], IconMicOn);
|
|
37
37
|
export { IconMicOn };
|
|
38
38
|
let IconMicOff = class IconMicOff extends LitElement {
|
|
@@ -61,7 +61,7 @@ let IconMicOff = class IconMicOff extends LitElement {
|
|
|
61
61
|
}
|
|
62
62
|
};
|
|
63
63
|
IconMicOff = __decorate([
|
|
64
|
-
|
|
64
|
+
safeCustomElement("icon-mic-off")
|
|
65
65
|
], IconMicOff);
|
|
66
66
|
export { IconMicOff };
|
|
67
67
|
let IconRecording = class IconRecording extends LitElement {
|
|
@@ -88,7 +88,7 @@ let IconRecording = class IconRecording extends LitElement {
|
|
|
88
88
|
}
|
|
89
89
|
};
|
|
90
90
|
IconRecording = __decorate([
|
|
91
|
-
|
|
91
|
+
safeCustomElement("icon-recording")
|
|
92
92
|
], IconRecording);
|
|
93
93
|
export { IconRecording };
|
|
94
94
|
let IconSettings = class IconSettings extends LitElement {
|
|
@@ -115,7 +115,7 @@ let IconSettings = class IconSettings extends LitElement {
|
|
|
115
115
|
}
|
|
116
116
|
};
|
|
117
117
|
IconSettings = __decorate([
|
|
118
|
-
|
|
118
|
+
safeCustomElement("icon-settings")
|
|
119
119
|
], IconSettings);
|
|
120
120
|
export { IconSettings };
|
|
121
121
|
let IconHeadset = class IconHeadset extends LitElement {
|
|
@@ -151,7 +151,7 @@ IconHeadset.styles = css `
|
|
|
151
151
|
}
|
|
152
152
|
`;
|
|
153
153
|
IconHeadset = __decorate([
|
|
154
|
-
|
|
154
|
+
safeCustomElement("icon-headset")
|
|
155
155
|
], IconHeadset);
|
|
156
156
|
export { IconHeadset };
|
|
157
157
|
let IconLoadingSpinner = class IconLoadingSpinner extends LitElement {
|
|
@@ -188,7 +188,7 @@ IconLoadingSpinner.styles = css `
|
|
|
188
188
|
}
|
|
189
189
|
`;
|
|
190
190
|
IconLoadingSpinner = __decorate([
|
|
191
|
-
|
|
191
|
+
safeCustomElement("icon-loading-spinner")
|
|
192
192
|
], IconLoadingSpinner);
|
|
193
193
|
export { IconLoadingSpinner };
|
|
194
194
|
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/icons/icons.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGzD,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IACvC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;KAmBV,CAAC;IACJ,CAAC;CACF,CAAA;AAvBY,SAAS;IADrB,iBAAiB,CAAC,aAAa,CAAC;GACpB,SAAS,CAuBrB;;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IACxC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;WAoBJ,CAAC;IACV,CAAC;CACF,CAAA;AAxBY,UAAU;IADtB,iBAAiB,CAAC,cAAc,CAAC;GACrB,UAAU,CAwBtB;;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAC3C,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;KAkBV,CAAC;IACJ,CAAC;CACF,CAAA;AAtBY,aAAa;IADzB,iBAAiB,CAAC,gBAAgB,CAAC;GACvB,aAAa,CAsBzB;;AAEM,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAC1C,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;WAkBJ,CAAC;IACV,CAAC;CACF,CAAA;AAtBY,YAAY;IADxB,iBAAiB,CAAC,eAAe,CAAC;GACtB,YAAY,CAsBxB;;AAGM,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAczC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;aAeF,CAAC;IACZ,CAAC;;AA9BM,kBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;GAWlB,AAXY,CAWX;AAZS,WAAW;IADvB,iBAAiB,CAAC,cAAc,CAAC;GACrB,WAAW,CAgCvB;;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAehD,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;WAeJ,CAAC;IACV,CAAC;;AA/BM,yBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;GAYlB,AAZY,CAYX;AAbS,kBAAkB;IAD9B,iBAAiB,CAAC,sBAAsB,CAAC;GAC7B,kBAAkB,CAiC9B","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport { css, html, LitElement } from \"lit\";\nimport { safeCustomElement } from \"../utils/custom-elements.js\";\n\n@safeCustomElement(\"icon-mic-on\")\nexport class IconMicOn extends LitElement {\n render() {\n return html`\n <div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-mic\"\n >\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n </div>\n `;\n }\n}\n\n@safeCustomElement(\"icon-mic-off\")\nexport class IconMicOff extends LitElement {\n render() {\n return html` <div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-mic-off\"\n >\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n </div>`;\n }\n}\n\n@safeCustomElement(\"icon-recording\")\nexport class IconRecording extends LitElement {\n render() {\n return html`\n <div style=\"display: flex;\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-circle-stop\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" />\n </svg>\n </div>\n `;\n }\n}\n@safeCustomElement(\"icon-settings\")\nexport class IconSettings extends LitElement {\n render() {\n return html`<div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-settings-2\"\n >\n <path d=\"M20 7h-9\" />\n <path d=\"M14 17H5\" />\n <circle cx=\"17\" cy=\"17\" r=\"3\" />\n <circle cx=\"7\" cy=\"7\" r=\"3\" />\n </svg>\n </div>`;\n }\n}\n\n@safeCustomElement(\"icon-headset\")\nexport class IconHeadset extends LitElement {\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n\n render() {\n return html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-headset\"\n >\n <path d=\"M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H4a1 1 0 0 1-1-1v-6Z\" />\n <path d=\"M21 14h-3a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h2a1 1 0 0 0 1-1v-6Z\" />\n <path d=\"M3 14a9 9 0 0 1 18 0\" />\n </svg>`;\n }\n}\n\n@safeCustomElement(\"icon-loading-spinner\")\nexport class IconLoadingSpinner extends LitElement {\n static styles = css`\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n .spin {\n animation: spin 1s linear infinite;\n }\n `;\n\n render() {\n return html`<div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-loader-circle spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>`;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Corti } from "@corti/sdk";
|
|
2
|
+
export type TranscribeMessage = Corti.TranscribeConfigStatusMessage | Corti.TranscribeUsageMessage | Corti.TranscribeDeltaUsageMessage | Corti.TranscribeEndedMessage | Corti.TranscribeErrorMessage | Corti.TranscribeTranscriptMessage | Corti.TranscribeCommandMessage | Corti.TranscribeFlushedMessage | Corti.TranscribeAudioEventMessage;
|
|
3
|
+
export type StreamAmbientMessage = Corti.StreamTranscriptMessage | Corti.StreamFactsMessage | Corti.StreamFlushedMessage | Corti.StreamDeltaUsageMessage | Corti.StreamEndedMessage | Corti.StreamUsageMessage | Corti.StreamErrorMessage | Corti.StreamConfigStatusMessage | Corti.StreamAudioEventMessage;
|
|
4
|
+
export type RecordingSocketInboundMessage = TranscribeMessage | StreamAmbientMessage;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-messages.js","sourceRoot":"","sources":["../src/socket-messages.ts"],"names":[],"mappings":"","sourcesContent":["import type { Corti } from \"@corti/sdk\";\n\n// Inbound WebSocket message unions live in core (not dictation/ambient) because\n// RecordingButtonBase is shared and switches on both transcribe and stream payloads.\n// A per-package generic TMessage is not narrowed inside that switch, which forces\n// casts; RecordingSocketInboundMessage is the concrete union the handler branches on.\nexport type TranscribeMessage =\n | Corti.TranscribeConfigStatusMessage\n | Corti.TranscribeUsageMessage\n | Corti.TranscribeDeltaUsageMessage\n | Corti.TranscribeEndedMessage\n | Corti.TranscribeErrorMessage\n | Corti.TranscribeTranscriptMessage\n | Corti.TranscribeCommandMessage\n | Corti.TranscribeFlushedMessage\n | Corti.TranscribeAudioEventMessage;\n\nexport type StreamAmbientMessage =\n | Corti.StreamTranscriptMessage\n | Corti.StreamFactsMessage\n | Corti.StreamFlushedMessage\n | Corti.StreamDeltaUsageMessage\n | Corti.StreamEndedMessage\n | Corti.StreamUsageMessage\n | Corti.StreamErrorMessage\n | Corti.StreamConfigStatusMessage\n | Corti.StreamAudioEventMessage;\n\nexport type RecordingSocketInboundMessage =\n | TranscribeMessage\n | StreamAmbientMessage;\n"]}
|