@corti/dictation-web 0.7.0-ambient.2 → 0.7.0-ambient.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +19 -26
- package/dist/components/ambient-recording-button.js +1 -1
- package/dist/components/ambient-recording-button.js.map +1 -1
- package/dist/components/corti-root.d.ts +4 -5
- package/dist/components/corti-root.js +4 -5
- package/dist/components/corti-root.js.map +1 -1
- package/dist/components/language-selector.js +1 -0
- package/dist/components/language-selector.js.map +1 -1
- package/dist/contexts/ambient-context.js +2 -6
- package/dist/contexts/ambient-context.js.map +1 -1
- package/dist/contexts/dictation-context.js +1 -5
- package/dist/contexts/dictation-context.js.map +1 -1
- package/dist/contexts/mixins/languages-context.d.ts +0 -1
- package/dist/contexts/mixins/languages-context.js +9 -15
- package/dist/contexts/mixins/languages-context.js.map +1 -1
- package/dist/controllers/languages-controller.d.ts +0 -1
- package/dist/controllers/languages-controller.js +1 -1
- package/dist/controllers/languages-controller.js.map +1 -1
- package/dist/controllers/socket-controller.js +1 -1
- package/dist/controllers/socket-controller.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/bundle.js
CHANGED
|
@@ -1491,7 +1491,7 @@ _LanguagesController_autoLoadedLanguages = /* @__PURE__ */ new WeakMap(), _Langu
|
|
|
1491
1491
|
const { languages, defaultLanguage } = getLanguagesByRegion(this.host.region);
|
|
1492
1492
|
__classPrivateFieldSet2(this, _LanguagesController_autoLoadedLanguages, true, "f");
|
|
1493
1493
|
this.host._languages = languages;
|
|
1494
|
-
const previousLanguage = this.host.
|
|
1494
|
+
const previousLanguage = this.host._selectedLanguage;
|
|
1495
1495
|
const selectedLanguage = previousLanguage && languages.includes(previousLanguage) ? previousLanguage : defaultLanguage;
|
|
1496
1496
|
this.host._selectedLanguage = selectedLanguage;
|
|
1497
1497
|
this.host.requestUpdate();
|
|
@@ -1531,23 +1531,20 @@ function LanguagesContextMixin(superclass) {
|
|
|
1531
1531
|
if (value !== void 0) {
|
|
1532
1532
|
__classPrivateFieldGet5(this, _LanguagesContextMixinClass_languagesController, "f").clearAutoLoadedFlag();
|
|
1533
1533
|
}
|
|
1534
|
-
if (value === void 0
|
|
1535
|
-
this.selectedLanguage = void 0;
|
|
1534
|
+
if (value === void 0) {
|
|
1536
1535
|
return;
|
|
1537
1536
|
}
|
|
1538
|
-
if (
|
|
1539
|
-
this.
|
|
1537
|
+
if (value.length === 0) {
|
|
1538
|
+
this._selectedLanguage = void 0;
|
|
1539
|
+
return;
|
|
1540
|
+
}
|
|
1541
|
+
if (this._selectedLanguage === void 0 || !value.includes(this._selectedLanguage)) {
|
|
1542
|
+
this._selectedLanguage = getPreferredDefaultLanguage(value);
|
|
1540
1543
|
}
|
|
1541
1544
|
}
|
|
1542
1545
|
get languages() {
|
|
1543
1546
|
return this._languages;
|
|
1544
1547
|
}
|
|
1545
|
-
set selectedLanguage(value) {
|
|
1546
|
-
this._selectedLanguage = value;
|
|
1547
|
-
}
|
|
1548
|
-
get selectedLanguage() {
|
|
1549
|
-
return this._selectedLanguage;
|
|
1550
|
-
}
|
|
1551
1548
|
constructor(...args) {
|
|
1552
1549
|
super(...args);
|
|
1553
1550
|
_LanguagesContextMixinClass_languagesController.set(this, new LanguagesController(this));
|
|
@@ -1560,7 +1557,7 @@ function LanguagesContextMixin(superclass) {
|
|
|
1560
1557
|
this.addEventListener("languages-changed", (e10) => {
|
|
1561
1558
|
const event = e10;
|
|
1562
1559
|
const selectedLanguage = event.detail.selectedLanguage;
|
|
1563
|
-
this.
|
|
1560
|
+
this._selectedLanguage = selectedLanguage ?? getPreferredDefaultLanguage(event.detail.languages);
|
|
1564
1561
|
});
|
|
1565
1562
|
}
|
|
1566
1563
|
}
|
|
@@ -1579,9 +1576,6 @@ function LanguagesContextMixin(superclass) {
|
|
|
1579
1576
|
type: Array
|
|
1580
1577
|
})
|
|
1581
1578
|
], LanguagesContextMixinClass.prototype, "languages", null);
|
|
1582
|
-
__decorate4([
|
|
1583
|
-
n4({ type: String })
|
|
1584
|
-
], LanguagesContextMixinClass.prototype, "selectedLanguage", null);
|
|
1585
1579
|
return LanguagesContextMixinClass;
|
|
1586
1580
|
}
|
|
1587
1581
|
|
|
@@ -1695,10 +1689,7 @@ var AmbientRoot = class AmbientRoot2 extends RootContext {
|
|
|
1695
1689
|
if (!changedProperties.has("ambientConfig")) {
|
|
1696
1690
|
return;
|
|
1697
1691
|
}
|
|
1698
|
-
|
|
1699
|
-
if (configuredLanguage !== void 0 && configuredLanguage !== this.selectedLanguage) {
|
|
1700
|
-
this.selectedLanguage = configuredLanguage;
|
|
1701
|
-
}
|
|
1692
|
+
this._selectedLanguage = this.ambientConfig?.transcription?.primaryLanguage ?? "en";
|
|
1702
1693
|
}
|
|
1703
1694
|
};
|
|
1704
1695
|
__decorate8([
|
|
@@ -12804,7 +12795,7 @@ _SocketController_webSocket = /* @__PURE__ */ new WeakMap(), _SocketController_c
|
|
|
12804
12795
|
return "superseded";
|
|
12805
12796
|
}
|
|
12806
12797
|
__classPrivateFieldSet3(this, _SocketController_webSocket, socket, "f");
|
|
12807
|
-
|
|
12798
|
+
callbacks?.onNetworkActivity?.("sent", {
|
|
12808
12799
|
configuration: config,
|
|
12809
12800
|
type: "config"
|
|
12810
12801
|
});
|
|
@@ -12922,10 +12913,7 @@ var DictationRoot = class DictationRoot2 extends RootContext {
|
|
|
12922
12913
|
if (!changedProperties.has("dictationConfig")) {
|
|
12923
12914
|
return;
|
|
12924
12915
|
}
|
|
12925
|
-
|
|
12926
|
-
if (configuredLanguage !== void 0 && configuredLanguage !== this.selectedLanguage) {
|
|
12927
|
-
this.selectedLanguage = configuredLanguage;
|
|
12928
|
-
}
|
|
12916
|
+
this._selectedLanguage = this.dictationConfig?.primaryLanguage;
|
|
12929
12917
|
}
|
|
12930
12918
|
};
|
|
12931
12919
|
__decorate9([
|
|
@@ -13940,7 +13928,7 @@ var __classPrivateFieldGet10 = function(receiver, state, kind, f5) {
|
|
|
13940
13928
|
};
|
|
13941
13929
|
var _AmbientRecordingButton_instances;
|
|
13942
13930
|
var _AmbientRecordingButton_trimmedInteractionId;
|
|
13943
|
-
var interactionIdRequiredError = () => new Error("interactionId is required. Set interactionId on ambient-root.");
|
|
13931
|
+
var interactionIdRequiredError = () => new Error("interactionId is required. Set interactionId on corti-ambient or ambient-root.");
|
|
13944
13932
|
var AmbientRecordingButton = class AmbientRecordingButton2 extends RecordingButtonBase {
|
|
13945
13933
|
constructor() {
|
|
13946
13934
|
super(...arguments);
|
|
@@ -14139,7 +14127,7 @@ var CortiRoot = class extends i5 {
|
|
|
14139
14127
|
* Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., "`", "k", "meta", "ctrl").
|
|
14140
14128
|
* Combinations with "+" are not supported.
|
|
14141
14129
|
* Pressing the key toggles recording on/off.
|
|
14142
|
-
* Defaults to "
|
|
14130
|
+
* Defaults to "Enter" if keybinding is in settingsEnabled, otherwise undefined
|
|
14143
14131
|
*/
|
|
14144
14132
|
set toggleToTalkKeybinding(value) {
|
|
14145
14133
|
this._toggleToTalkKeybinding = value;
|
|
@@ -14652,6 +14640,7 @@ var DictationLanguageSelector = class DictationLanguageSelector2 extends i5 {
|
|
|
14652
14640
|
id="language-select"
|
|
14653
14641
|
aria-labelledby="language-select-label"
|
|
14654
14642
|
@change=${__classPrivateFieldGet13(this, _DictationLanguageSelector_instances, "m", _DictationLanguageSelector_handleSelectLanguage)}
|
|
14643
|
+
.value=${this._selectedLanguage ?? ""}
|
|
14655
14644
|
?disabled=${this.disabled || !this._languages || this._languages.length === 0}
|
|
14656
14645
|
>
|
|
14657
14646
|
${this._languages?.map((language) => x`
|
|
@@ -15001,12 +14990,16 @@ if (!customElements.get("dictation-keybinding-selector")) {
|
|
|
15001
14990
|
if (!customElements.get("dictation-settings-menu")) {
|
|
15002
14991
|
customElements.define("dictation-settings-menu", DictationSettingsMenu);
|
|
15003
14992
|
}
|
|
14993
|
+
if (!customElements.get("ambient-root")) {
|
|
14994
|
+
customElements.define("ambient-root", AmbientRoot);
|
|
14995
|
+
}
|
|
15004
14996
|
if (!customElements.get("dictation-root")) {
|
|
15005
14997
|
customElements.define("dictation-root", DictationRoot);
|
|
15006
14998
|
}
|
|
15007
14999
|
var index_default = CortiDictation;
|
|
15008
15000
|
export {
|
|
15009
15001
|
AmbientRecordingButton,
|
|
15002
|
+
AmbientRoot,
|
|
15010
15003
|
CortiAmbient,
|
|
15011
15004
|
CortiDictation,
|
|
15012
15005
|
DictationDeviceSelector,
|
|
@@ -17,7 +17,7 @@ import { ambientConfigContext, interactionIdContext, } from "../contexts/ambient
|
|
|
17
17
|
import { AmbientController, } from "../controllers/ambient-controller.js";
|
|
18
18
|
import { errorEvent } from "../utils/events.js";
|
|
19
19
|
import { RecordingButtonBase } from "./recording-button-base.js";
|
|
20
|
-
const interactionIdRequiredError = () => new Error("interactionId is required. Set interactionId on ambient-root.");
|
|
20
|
+
const interactionIdRequiredError = () => new Error("interactionId is required. Set interactionId on corti-ambient or ambient-root.");
|
|
21
21
|
let AmbientRecordingButton = class AmbientRecordingButton extends RecordingButtonBase {
|
|
22
22
|
constructor() {
|
|
23
23
|
super(...arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambient-recording-button.js","sourceRoot":"","sources":["../../src/components/ambient-recording-button.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,GAGlB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,0BAA0B,GAAG,GAAG,EAAE,CACtC,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"ambient-recording-button.js","sourceRoot":"","sources":["../../src/components/ambient-recording-button.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,GAGlB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,0BAA0B,GAAG,GAAG,EAAE,CACtC,IAAI,KAAK,CACP,gFAAgF,CACjF,CAAC;AAGG,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,mBAG3C;IAHM;;;QAYK,sBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAoC5D,CAAC;IAlCiB,cAAc;QAC5B,IAAI,CAAC,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,cAAc;QAClC,IAAI,CAAC,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAES,iBAAiB;QACzB,MAAM,aAAa,GAAG,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,0BAA0B,EAAE,CAAC;QACrC,CAAC;QAED,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc,IAAI,qBAAqB;YAC3D,aAAa;SACd,CAAC;IACJ,CAAC;CAKF,CAAA;;;IAFG,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAzCO;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3D,KAAK,EAAE;8DACoC;AAIpC;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3D,KAAK,EAAE;8DACwB;AAVrB,sBAAsB;IADlC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,sBAAsB,CAgDlC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { DEFAULT_STREAM_CONFIG } from \"../constants.js\";\nimport {\n ambientConfigContext,\n interactionIdContext,\n} from \"../contexts/ambient-context.js\";\nimport {\n AmbientController,\n type AmbientStreamSessionConfig,\n type StreamAmbientMessage,\n} from \"../controllers/ambient-controller.js\";\nimport { errorEvent } from \"../utils/events.js\";\nimport { RecordingButtonBase } from \"./recording-button-base.js\";\n\nconst interactionIdRequiredError = () =>\n new Error(\n \"interactionId is required. Set interactionId on corti-ambient or ambient-root.\",\n );\n\n@customElement(\"ambient-recording-button\")\nexport class AmbientRecordingButton extends RecordingButtonBase<\n AmbientStreamSessionConfig,\n StreamAmbientMessage\n> {\n @consume({ context: ambientConfigContext, subscribe: true })\n @state()\n private _ambientConfig?: Corti.StreamConfig;\n\n @consume({ context: interactionIdContext, subscribe: true })\n @state()\n private _interactionId?: string;\n\n protected _socketController = new AmbientController(this);\n\n public override startRecording(): void {\n if (!this.#trimmedInteractionId()) {\n this.dispatchEvent(errorEvent(interactionIdRequiredError()));\n return;\n }\n\n super.startRecording();\n }\n\n public override async openConnection(): Promise<void> {\n if (!this.#trimmedInteractionId()) {\n this.dispatchEvent(errorEvent(interactionIdRequiredError()));\n return;\n }\n\n await super.openConnection();\n }\n\n protected _getConnectConfig(): AmbientStreamSessionConfig {\n const interactionId = this.#trimmedInteractionId();\n\n if (!interactionId) {\n throw interactionIdRequiredError();\n }\n\n return {\n configuration: this._ambientConfig ?? DEFAULT_STREAM_CONFIG,\n interactionId,\n };\n }\n\n #trimmedInteractionId(): string | undefined {\n return this._interactionId?.trim();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-recording-button\": AmbientRecordingButton;\n }\n}\n"]}
|
|
@@ -42,13 +42,12 @@ export declare class CortiRoot<TRoot extends CortiProviderRoot = CortiProviderRo
|
|
|
42
42
|
/**
|
|
43
43
|
* Which settings should be available in the UI.
|
|
44
44
|
* If an empty array is passed, the settings will be disabled entirely.
|
|
45
|
-
* Options are language and devices
|
|
46
45
|
*/
|
|
47
46
|
settingsEnabled: ConfigurableSettings[];
|
|
48
47
|
/**
|
|
49
|
-
* When false (default),
|
|
50
|
-
*
|
|
51
|
-
* Set to
|
|
48
|
+
* When false (default), clicking the start/stop button does not move focus
|
|
49
|
+
* to the button, allowing textareas or other input elements to keep focus.
|
|
50
|
+
* Set to true to allow the button to receive focus on click.
|
|
52
51
|
*/
|
|
53
52
|
allowButtonFocus: boolean;
|
|
54
53
|
/**
|
|
@@ -83,7 +82,7 @@ export declare class CortiRoot<TRoot extends CortiProviderRoot = CortiProviderRo
|
|
|
83
82
|
* Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., "`", "k", "meta", "ctrl").
|
|
84
83
|
* Combinations with "+" are not supported.
|
|
85
84
|
* Pressing the key toggles recording on/off.
|
|
86
|
-
* Defaults to "
|
|
85
|
+
* Defaults to "Enter" if keybinding is in settingsEnabled, otherwise undefined
|
|
87
86
|
*/
|
|
88
87
|
set toggleToTalkKeybinding(value: string | null | undefined);
|
|
89
88
|
get toggleToTalkKeybinding(): string | null | undefined;
|
|
@@ -18,13 +18,12 @@ export class CortiRoot extends LitElement {
|
|
|
18
18
|
/**
|
|
19
19
|
* Which settings should be available in the UI.
|
|
20
20
|
* If an empty array is passed, the settings will be disabled entirely.
|
|
21
|
-
* Options are language and devices
|
|
22
21
|
*/
|
|
23
22
|
this.settingsEnabled = ["device", "language"];
|
|
24
23
|
/**
|
|
25
|
-
* When false (default),
|
|
26
|
-
*
|
|
27
|
-
* Set to
|
|
24
|
+
* When false (default), clicking the start/stop button does not move focus
|
|
25
|
+
* to the button, allowing textareas or other input elements to keep focus.
|
|
26
|
+
* Set to true to allow the button to receive focus on click.
|
|
28
27
|
*/
|
|
29
28
|
this.allowButtonFocus = false;
|
|
30
29
|
this._contextProviderRef = createRef();
|
|
@@ -77,7 +76,7 @@ export class CortiRoot extends LitElement {
|
|
|
77
76
|
* Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., "`", "k", "meta", "ctrl").
|
|
78
77
|
* Combinations with "+" are not supported.
|
|
79
78
|
* Pressing the key toggles recording on/off.
|
|
80
|
-
* Defaults to "
|
|
79
|
+
* Defaults to "Enter" if keybinding is in settingsEnabled, otherwise undefined
|
|
81
80
|
*/
|
|
82
81
|
set toggleToTalkKeybinding(value) {
|
|
83
82
|
this._toggleToTalkKeybinding = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"corti-root.js","sourceRoot":"","sources":["../../src/components/corti-root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } from \"@corti/sdk\";\nimport { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { createRef, type Ref } from \"lit/directives/ref.js\";\nimport type {\n ConfigurableSettings,\n ProxyOptions,\n RecordingState,\n} from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\n\ntype CortiProviderRoot = LitElement & {\n recordingState?: RecordingState;\n languages?: Corti.TranscribeSupportedLanguage[];\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo | undefined;\n pushToTalkKeybinding?: string | null | undefined;\n toggleToTalkKeybinding?: string | null | undefined;\n};\n\ntype CortiRecordingButtonHost = LitElement & {\n startRecording(): void;\n stopRecording(): void;\n toggleRecording(): void;\n openConnection(): Promise<void>;\n closeConnection(): Promise<void>;\n};\n\n/**\n * Shared base for all-in-one Corti host elements (e.g. corti-dictation, corti-ambient).\n * Intentionally minimal; shared behavior will move here incrementally.\n */\nexport class CortiRoot<\n TRoot extends CortiProviderRoot = CortiProviderRoot,\n TRecordingButton extends CortiRecordingButtonHost = CortiRecordingButtonHost,\n> extends LitElement {\n static styles = css`\n .hidden {\n display: none;\n }\n `;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Latest access token\n */\n @property({ type: String })\n accessToken?: string;\n\n /**\n * Authentication configuration with optional refresh mechanism.\n */\n @property({ attribute: false, type: Object })\n authConfig?: CortiAuth.AuthTokenDerivable;\n\n /**\n * WebSocket URL for proxy connection. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ type: String })\n socketUrl?: string;\n\n /**\n * Socket proxy configuration object. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n /**\n * Which settings should be available in the UI.\n * If an empty array is passed, the settings will be disabled entirely.\n * Options are language and devices\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n settingsEnabled: ConfigurableSettings[] = [\"device\", \"language\"];\n\n /**\n * When false (default), allows the start/stop button from taking focus when clicked,\n * disabling textareas or other input elements to maintain focus.\n * Set to \"true\" to allow the button to receive focus on click.\n */\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n /**\n * List of all language codes available for use with the Web Component.\n * Default list depends on the accessToken\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languagesSupported(value:\n | Corti.TranscribeSupportedLanguage[]\n | undefined) {\n this._languagesSupported = value;\n }\n\n get languagesSupported(): Corti.TranscribeSupportedLanguage[] {\n return (\n this._contextProviderRef.value?.languages ||\n this._languagesSupported ||\n []\n );\n }\n\n @state()\n protected _languagesSupported?: Corti.TranscribeSupportedLanguage[];\n\n /**\n * List of available recording devices\n */\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n }\n\n get devices(): MediaDeviceInfo[] {\n return this._contextProviderRef.value?.devices || this._devices || [];\n }\n\n @state()\n protected _devices?: MediaDeviceInfo[];\n\n /**\n * The selected device used for recording (MediaDeviceInfo).\n */\n @property({ attribute: false, type: Object })\n set selectedDevice(value: MediaDeviceInfo | undefined) {\n this._selectedDevice = value;\n }\n\n get selectedDevice(): MediaDeviceInfo | undefined {\n return (\n this._contextProviderRef.value?.selectedDevice || this._selectedDevice\n );\n }\n\n @state()\n protected _selectedDevice?: MediaDeviceInfo;\n\n /**\n * Push-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"Space\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Keydown starts recording, keyup stops recording.\n * Defaults to \"Space\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set pushToTalkKeybinding(value: string | null | undefined) {\n this._pushToTalkKeybinding = value;\n }\n\n get pushToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.pushToTalkKeybinding ||\n this._pushToTalkKeybinding\n );\n }\n\n @state()\n protected _pushToTalkKeybinding?: string | null;\n\n /**\n * Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"`\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Pressing the key toggles recording on/off.\n * Defaults to \"`\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set toggleToTalkKeybinding(value: string | null | undefined) {\n this._toggleToTalkKeybinding = value;\n }\n\n get toggleToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.toggleToTalkKeybinding ||\n this._toggleToTalkKeybinding\n );\n }\n\n @state()\n protected _toggleToTalkKeybinding?: string | null;\n\n protected _contextProviderRef: Ref<TRoot> = createRef();\n protected _recordingButtonRef: Ref<TRecordingButton> = createRef();\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Current state of recording (stopped, recording, initializing and stopping, ).\n */\n get recordingState(): RecordingState {\n return this._contextProviderRef.value?.recordingState ?? \"stopped\";\n }\n\n /**\n * Starts a recording.\n */\n public startRecording(): void {\n this._recordingButtonRef.value?.startRecording();\n }\n\n /**\n * Stops a recording.\n */\n public stopRecording(): void {\n this._recordingButtonRef.value?.stopRecording();\n }\n\n /**\n * Starts or stops recording. Convenience layer on top of the start/stop methods.\n */\n public toggleRecording(): void {\n this._recordingButtonRef.value?.toggleRecording();\n }\n\n /**\n * Opens the WebSocket connection without starting recording.\n * Use this to pre-establish the connection before recording starts.\n */\n public async openConnection(): Promise<void> {\n await this._recordingButtonRef.value?.openConnection();\n }\n\n /**\n * Closes the WebSocket connection by sending \"end\" and waiting for \"ended\".\n * Call this to receive \"usage\" statistics or when done with the connection.\n */\n public async closeConnection(): Promise<void> {\n await this._recordingButtonRef.value?.closeConnection();\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n return html``;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"corti-root.js","sourceRoot":"","sources":["../../src/components/corti-root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } from \"@corti/sdk\";\nimport { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { createRef, type Ref } from \"lit/directives/ref.js\";\nimport type {\n ConfigurableSettings,\n ProxyOptions,\n RecordingState,\n} from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\n\ntype CortiProviderRoot = LitElement & {\n recordingState?: RecordingState;\n languages?: Corti.TranscribeSupportedLanguage[];\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo | undefined;\n pushToTalkKeybinding?: string | null | undefined;\n toggleToTalkKeybinding?: string | null | undefined;\n};\n\ntype CortiRecordingButtonHost = LitElement & {\n startRecording(): void;\n stopRecording(): void;\n toggleRecording(): void;\n openConnection(): Promise<void>;\n closeConnection(): Promise<void>;\n};\n\n/**\n * Shared base for all-in-one Corti host elements (e.g. corti-dictation, corti-ambient).\n * Intentionally minimal; shared behavior will move here incrementally.\n */\nexport class CortiRoot<\n TRoot extends CortiProviderRoot = CortiProviderRoot,\n TRecordingButton extends CortiRecordingButtonHost = CortiRecordingButtonHost,\n> extends LitElement {\n static styles = css`\n .hidden {\n display: none;\n }\n `;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Latest access token\n */\n @property({ type: String })\n accessToken?: string;\n\n /**\n * Authentication configuration with optional refresh mechanism.\n */\n @property({ attribute: false, type: Object })\n authConfig?: CortiAuth.AuthTokenDerivable;\n\n /**\n * WebSocket URL for proxy connection. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ type: String })\n socketUrl?: string;\n\n /**\n * Socket proxy configuration object. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n /**\n * Which settings should be available in the UI.\n * If an empty array is passed, the settings will be disabled entirely.\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n settingsEnabled: ConfigurableSettings[] = [\"device\", \"language\"];\n\n /**\n * When false (default), clicking the start/stop button does not move focus\n * to the button, allowing textareas or other input elements to keep focus.\n * Set to true to allow the button to receive focus on click.\n */\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n /**\n * List of all language codes available for use with the Web Component.\n * Default list depends on the accessToken\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languagesSupported(value:\n | Corti.TranscribeSupportedLanguage[]\n | undefined) {\n this._languagesSupported = value;\n }\n\n get languagesSupported(): Corti.TranscribeSupportedLanguage[] {\n return (\n this._contextProviderRef.value?.languages ||\n this._languagesSupported ||\n []\n );\n }\n\n @state()\n protected _languagesSupported?: Corti.TranscribeSupportedLanguage[];\n\n /**\n * List of available recording devices\n */\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n }\n\n get devices(): MediaDeviceInfo[] {\n return this._contextProviderRef.value?.devices || this._devices || [];\n }\n\n @state()\n protected _devices?: MediaDeviceInfo[];\n\n /**\n * The selected device used for recording (MediaDeviceInfo).\n */\n @property({ attribute: false, type: Object })\n set selectedDevice(value: MediaDeviceInfo | undefined) {\n this._selectedDevice = value;\n }\n\n get selectedDevice(): MediaDeviceInfo | undefined {\n return (\n this._contextProviderRef.value?.selectedDevice || this._selectedDevice\n );\n }\n\n @state()\n protected _selectedDevice?: MediaDeviceInfo;\n\n /**\n * Push-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"Space\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Keydown starts recording, keyup stops recording.\n * Defaults to \"Space\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set pushToTalkKeybinding(value: string | null | undefined) {\n this._pushToTalkKeybinding = value;\n }\n\n get pushToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.pushToTalkKeybinding ||\n this._pushToTalkKeybinding\n );\n }\n\n @state()\n protected _pushToTalkKeybinding?: string | null;\n\n /**\n * Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"`\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Pressing the key toggles recording on/off.\n * Defaults to \"Enter\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set toggleToTalkKeybinding(value: string | null | undefined) {\n this._toggleToTalkKeybinding = value;\n }\n\n get toggleToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.toggleToTalkKeybinding ||\n this._toggleToTalkKeybinding\n );\n }\n\n @state()\n protected _toggleToTalkKeybinding?: string | null;\n\n protected _contextProviderRef: Ref<TRoot> = createRef();\n protected _recordingButtonRef: Ref<TRecordingButton> = createRef();\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Current state of recording (stopped, recording, initializing and stopping, ).\n */\n get recordingState(): RecordingState {\n return this._contextProviderRef.value?.recordingState ?? \"stopped\";\n }\n\n /**\n * Starts a recording.\n */\n public startRecording(): void {\n this._recordingButtonRef.value?.startRecording();\n }\n\n /**\n * Stops a recording.\n */\n public stopRecording(): void {\n this._recordingButtonRef.value?.stopRecording();\n }\n\n /**\n * Starts or stops recording. Convenience layer on top of the start/stop methods.\n */\n public toggleRecording(): void {\n this._recordingButtonRef.value?.toggleRecording();\n }\n\n /**\n * Opens the WebSocket connection without starting recording.\n * Use this to pre-establish the connection before recording starts.\n */\n public async openConnection(): Promise<void> {\n await this._recordingButtonRef.value?.openConnection();\n }\n\n /**\n * Closes the WebSocket connection by sending \"end\" and waiting for \"ended\".\n * Call this to receive \"usage\" statistics or when done with the connection.\n */\n public async closeConnection(): Promise<void> {\n await this._recordingButtonRef.value?.closeConnection();\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n return html``;\n }\n}\n"]}
|
|
@@ -33,6 +33,7 @@ let DictationLanguageSelector = class DictationLanguageSelector extends LitEleme
|
|
|
33
33
|
id="language-select"
|
|
34
34
|
aria-labelledby="language-select-label"
|
|
35
35
|
@change=${__classPrivateFieldGet(this, _DictationLanguageSelector_instances, "m", _DictationLanguageSelector_handleSelectLanguage)}
|
|
36
|
+
.value=${this._selectedLanguage ?? ""}
|
|
36
37
|
?disabled=${this.disabled || !this._languages || this._languages.length === 0}
|
|
37
38
|
>
|
|
38
39
|
${this._languages?.map((language) => html `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-selector.js","sourceRoot":"","sources":["../../src/components/language-selector.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjD,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,UAAU;IAAlD;;;QAUL,aAAQ,GAAY,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"language-selector.js","sourceRoot":"","sources":["../../src/components/language-selector.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGjD,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,UAAU;IAAlD;;;QAUL,aAAQ,GAAY,KAAK,CAAC;IAwC5B,CAAC;IA3BC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;oBAQK,uBAAA,IAAI,6FAAsB;mBAC3B,IAAI,CAAC,iBAAiB,IAAI,EAAE;sBACzB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;;YAE3E,IAAI,CAAC,UAAU,EAAE,GAAG,CACpB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAEN,QAAQ;4BACJ,IAAI,CAAC,iBAAiB,KAAK,QAAQ;;kBAE7C,eAAe,CAAC,QAAQ,CAAC;;aAE9B,CACF;;;KAGN,CAAC;IACJ,CAAC;;;2GAnCqB,CAAQ;IAC5B,MAAM,QAAQ,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;IAEvD,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE3E,qCAAqC;IACrC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrD,CAAC;AATM,gCAAM,GAAG,YAAY,AAAf,CAAgB;AAT7B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,KAAK,EAAE;6DACyC;AAIjD;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9D,KAAK,EAAE;oEAC8C;AAGtD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2DACF;AAVf,yBAAyB;IADrC,aAAa,CAAC,6BAA6B,CAAC;GAChC,yBAAyB,CAkDrC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport {\n languagesContext,\n selectedLanguageContext,\n} from \"../contexts/mixins/languages-context.js\";\nimport SelectStyles from \"../styles/select.js\";\nimport {\n languageChangedEvent,\n languagesChangedEvent,\n} from \"../utils/events.js\";\nimport { getLanguageName } from \"../utils/languages.js\";\n\n@customElement(\"dictation-language-selector\")\nexport class DictationLanguageSelector extends LitElement {\n @consume({ context: languagesContext, subscribe: true })\n @state()\n _languages?: Corti.TranscribeSupportedLanguage[];\n\n @consume({ context: selectedLanguageContext, subscribe: true })\n @state()\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n static styles = SelectStyles;\n\n #handleSelectLanguage(e: Event): void {\n const language = (e.target as HTMLSelectElement).value;\n\n this.dispatchEvent(languagesChangedEvent(this._languages || [], language));\n\n // Dispatch backward compatible event\n this.dispatchEvent(languageChangedEvent(language));\n }\n\n render() {\n return html`\n <div>\n <label id=\"language-select-label\" for=\"language-select\">\n Spoken language\n </label>\n <select\n id=\"language-select\"\n aria-labelledby=\"language-select-label\"\n @change=${this.#handleSelectLanguage}\n .value=${this._selectedLanguage ?? \"\"}\n ?disabled=${this.disabled || !this._languages || this._languages.length === 0}\n >\n ${this._languages?.map(\n (language) => html`\n <option\n value=${language}\n ?selected=${this._selectedLanguage === language}\n >\n ${getLanguageName(language)}\n </option>\n `,\n )}\n </select>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-language-selector\": DictationLanguageSelector;\n }\n}\n"]}
|
|
@@ -37,12 +37,8 @@ let AmbientRoot = class AmbientRoot extends RootContext {
|
|
|
37
37
|
if (!changedProperties.has("ambientConfig")) {
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
configuredLanguage !== this.selectedLanguage) {
|
|
43
|
-
this.selectedLanguage =
|
|
44
|
-
configuredLanguage;
|
|
45
|
-
}
|
|
40
|
+
this._selectedLanguage =
|
|
41
|
+
this.ambientConfig?.transcription?.primaryLanguage ?? "en";
|
|
46
42
|
}
|
|
47
43
|
};
|
|
48
44
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambient-context.js","sourceRoot":"","sources":["../../src/contexts/ambient-context.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAE/C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAC/C,MAAM,CAAC,eAAe,CAAC,CACxB,CAAC;AAGK,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,WAAW;IAS1C;QACE,KAAK,EAAE,CAAC;QAPV,kBAAa,GAAuB,qBAAqB,CAAC;QASxD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,CAAgB,CAAC;YAE/B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB;gBACzC,IAAI,CAAsC,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC;YAEzD,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI;gBACP,IAAI,EAAE;oBACJ,GAAG,IAAI,CAAC,IAAI;oBACZ,YAAY,EAAE,IAAI;iBACnB;gBACD,aAAa,EAAE;oBACb,GAAG,IAAI,CAAC,aAAa;oBACrB,eAAe,EAAE,IAAI;iBACtB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,UAAU,CAAC,iBAAiC;QAC7D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"ambient-context.js","sourceRoot":"","sources":["../../src/contexts/ambient-context.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAE/C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAC/C,MAAM,CAAC,eAAe,CAAC,CACxB,CAAC;AAGK,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,WAAW;IAS1C;QACE,KAAK,EAAE,CAAC;QAPV,kBAAa,GAAuB,qBAAqB,CAAC;QASxD,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,CAAgB,CAAC;YAE/B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB;gBACzC,IAAI,CAAsC,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC;YAEzD,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI;gBACP,IAAI,EAAE;oBACJ,GAAG,IAAI,CAAC,IAAI;oBACZ,YAAY,EAAE,IAAI;iBACnB;gBACD,aAAa,EAAE;oBACb,GAAG,IAAI,CAAC,aAAa;oBACrB,eAAe,EAAE,IAAI;iBACtB;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,UAAU,CAAC,iBAAiC;QAC7D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB;YACpB,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,IAAI,IAAI,CAAC;IAC/D,CAAC;CACF,CAAA;AAxCC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDACa;AAI1D;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDACJ;AAPZ,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CA2CvB","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { DEFAULT_STREAM_CONFIG } from \"../constants.js\";\nimport { RootContext } from \"./root-context.js\";\n\nexport const ambientConfigContext = createContext<\n Corti.StreamConfig | undefined\n>(Symbol(\"ambientConfig\"));\n\nexport const interactionIdContext = createContext<string | undefined>(\n Symbol(\"interactionId\"),\n);\n\n@customElement(\"ambient-root\")\nexport class AmbientRoot extends RootContext {\n @provide({ context: ambientConfigContext })\n @property({ attribute: false, type: Object })\n ambientConfig: Corti.StreamConfig = DEFAULT_STREAM_CONFIG;\n\n @provide({ context: interactionIdContext })\n @property({ type: String })\n interactionId?: string;\n\n constructor() {\n super();\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent;\n\n const lang = (event.detail.selectedLanguage ??\n \"en\") as Corti.TranscribeSupportedLanguage;\n const base = this.ambientConfig ?? DEFAULT_STREAM_CONFIG;\n\n this.ambientConfig = {\n ...base,\n mode: {\n ...base.mode,\n outputLocale: lang,\n },\n transcription: {\n ...base.transcription,\n primaryLanguage: lang,\n },\n };\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues): void {\n super.willUpdate(changedProperties);\n\n if (!changedProperties.has(\"ambientConfig\")) {\n return;\n }\n\n this._selectedLanguage =\n this.ambientConfig?.transcription?.primaryLanguage ?? \"en\";\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-root\": AmbientRoot;\n }\n}\n"]}
|
|
@@ -29,11 +29,7 @@ let DictationRoot = class DictationRoot extends RootContext {
|
|
|
29
29
|
if (!changedProperties.has("dictationConfig")) {
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
if (configuredLanguage !== undefined &&
|
|
34
|
-
configuredLanguage !== this.selectedLanguage) {
|
|
35
|
-
this.selectedLanguage = configuredLanguage;
|
|
36
|
-
}
|
|
32
|
+
this._selectedLanguage = this.dictationConfig?.primaryLanguage;
|
|
37
33
|
}
|
|
38
34
|
};
|
|
39
35
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictation-context.js","sourceRoot":"","sources":["../../src/contexts/dictation-context.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAEjD,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CACnD,MAAM,CAAC,mBAAmB,CAAC,CAC5B,CAAC;AAEK,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,WAAW;IAa5C,gFAAgF;IAChF,YAAY;IACZ,gFAAgF;IAEhF;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,CAAgB,CAAC;YAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAEzB,CAAC;YAEd,IAAI,CAAC,eAAe,GAAG;gBACrB,GAAG,IAAI,CAAC,eAAe;gBACvB,eAAe,EAAE,gBAAgB,IAAI,IAAI;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,UAAU,CAAC,iBAAiC;QAC7D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"dictation-context.js","sourceRoot":"","sources":["../../src/contexts/dictation-context.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAEjD,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CACnD,MAAM,CAAC,mBAAmB,CAAC,CAC5B,CAAC;AAEK,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,WAAW;IAa5C,gFAAgF;IAChF,YAAY;IACZ,gFAAgF;IAEhF;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,CAAgB,CAAC;YAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAEzB,CAAC;YAEd,IAAI,CAAC,eAAe,GAAG;gBACrB,GAAG,IAAI,CAAC,eAAe;gBACvB,eAAe,EAAE,gBAAgB,IAAI,IAAI;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,UAAU,CAAC,iBAAiC;QAC7D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;IACjE,CAAC;CACF,CAAA;AAnCC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACJ;AAIzC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yDACjC;AAXlB,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CA0CzB","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { RootContext } from \"./root-context.js\";\n\nexport const dictationConfigContext = createContext<\n Corti.TranscribeConfig | undefined\n>(Symbol(\"dictationConfig\"));\nexport const debugDisplayAudioContext = createContext<boolean | undefined>(\n Symbol(\"debugDisplayAudio\"),\n);\n@customElement(\"dictation-root\")\nexport class DictationRoot extends RootContext {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: dictationConfigContext })\n @property({ attribute: false, type: Object })\n dictationConfig?: Corti.TranscribeConfig;\n\n @provide({ context: debugDisplayAudioContext })\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio?: boolean;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────────────────────────\n\n constructor() {\n super();\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent;\n const selectedLanguage = event.detail.selectedLanguage as\n | Corti.TranscribeSupportedLanguage\n | undefined;\n\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: selectedLanguage ?? \"en\",\n };\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues): void {\n super.willUpdate(changedProperties);\n\n if (!changedProperties.has(\"dictationConfig\")) {\n return;\n }\n\n this._selectedLanguage = this.dictationConfig?.primaryLanguage;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-root\": DictationRoot;\n }\n}\n"]}
|
|
@@ -11,6 +11,5 @@ export declare class LanguagesContextInterface {
|
|
|
11
11
|
_languages?: Corti.TranscribeSupportedLanguage[];
|
|
12
12
|
_selectedLanguage?: Corti.TranscribeSupportedLanguage;
|
|
13
13
|
languages?: Corti.TranscribeSupportedLanguage[];
|
|
14
|
-
selectedLanguage?: Corti.TranscribeSupportedLanguage;
|
|
15
14
|
}
|
|
16
15
|
export declare function LanguagesContextMixin<T extends Constructor<LitElement>>(superclass: T): Constructor<LanguagesContextInterface> & T;
|
|
@@ -25,24 +25,21 @@ export function LanguagesContextMixin(superclass) {
|
|
|
25
25
|
if (value !== undefined) {
|
|
26
26
|
__classPrivateFieldGet(this, _LanguagesContextMixinClass_languagesController, "f").clearAutoLoadedFlag();
|
|
27
27
|
}
|
|
28
|
-
if (value === undefined
|
|
29
|
-
this.selectedLanguage = undefined;
|
|
28
|
+
if (value === undefined) {
|
|
30
29
|
return;
|
|
31
30
|
}
|
|
32
|
-
if (
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
if (value.length === 0) {
|
|
32
|
+
this._selectedLanguage = undefined;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (this._selectedLanguage === undefined ||
|
|
36
|
+
!value.includes(this._selectedLanguage)) {
|
|
37
|
+
this._selectedLanguage = getPreferredDefaultLanguage(value);
|
|
35
38
|
}
|
|
36
39
|
}
|
|
37
40
|
get languages() {
|
|
38
41
|
return this._languages;
|
|
39
42
|
}
|
|
40
|
-
set selectedLanguage(value) {
|
|
41
|
-
this._selectedLanguage = value;
|
|
42
|
-
}
|
|
43
|
-
get selectedLanguage() {
|
|
44
|
-
return this._selectedLanguage;
|
|
45
|
-
}
|
|
46
43
|
constructor(...args) {
|
|
47
44
|
super(...args);
|
|
48
45
|
_LanguagesContextMixinClass_languagesController.set(this, new LanguagesController(this));
|
|
@@ -55,7 +52,7 @@ export function LanguagesContextMixin(superclass) {
|
|
|
55
52
|
this.addEventListener("languages-changed", (e) => {
|
|
56
53
|
const event = e;
|
|
57
54
|
const selectedLanguage = event.detail.selectedLanguage;
|
|
58
|
-
this.
|
|
55
|
+
this._selectedLanguage =
|
|
59
56
|
selectedLanguage ??
|
|
60
57
|
getPreferredDefaultLanguage(event.detail.languages);
|
|
61
58
|
});
|
|
@@ -76,9 +73,6 @@ export function LanguagesContextMixin(superclass) {
|
|
|
76
73
|
type: Array,
|
|
77
74
|
})
|
|
78
75
|
], LanguagesContextMixinClass.prototype, "languages", null);
|
|
79
|
-
__decorate([
|
|
80
|
-
property({ type: String })
|
|
81
|
-
], LanguagesContextMixinClass.prototype, "selectedLanguage", null);
|
|
82
76
|
return LanguagesContextMixinClass;
|
|
83
77
|
}
|
|
84
78
|
//# sourceMappingURL=languages-context.js.map
|
|
@@ -1 +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;
|
|
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"]}
|
|
@@ -6,7 +6,6 @@ interface LanguagesControllerHost extends ReactiveControllerHost {
|
|
|
6
6
|
requestUpdate(): void;
|
|
7
7
|
_languages?: Corti.TranscribeSupportedLanguage[];
|
|
8
8
|
_selectedLanguage?: Corti.TranscribeSupportedLanguage;
|
|
9
|
-
selectedLanguage?: Corti.TranscribeSupportedLanguage;
|
|
10
9
|
}
|
|
11
10
|
/**
|
|
12
11
|
* Controller that manages automatic language loading based on region.
|
|
@@ -62,7 +62,7 @@ _LanguagesController_autoLoadedLanguages = new WeakMap(), _LanguagesController_l
|
|
|
62
62
|
const { languages, defaultLanguage } = getLanguagesByRegion(this.host.region);
|
|
63
63
|
__classPrivateFieldSet(this, _LanguagesController_autoLoadedLanguages, true, "f");
|
|
64
64
|
this.host._languages = languages;
|
|
65
|
-
const previousLanguage = this.host.
|
|
65
|
+
const previousLanguage = this.host._selectedLanguage;
|
|
66
66
|
const selectedLanguage = previousLanguage && languages.includes(previousLanguage)
|
|
67
67
|
? previousLanguage
|
|
68
68
|
: defaultLanguage;
|
|
@@ -1 +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;
|
|
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"]}
|
|
@@ -208,7 +208,7 @@ _SocketController_webSocket = new WeakMap(), _SocketController_cortiClient = new
|
|
|
208
208
|
return "superseded";
|
|
209
209
|
}
|
|
210
210
|
__classPrivateFieldSet(this, _SocketController_webSocket, socket, "f");
|
|
211
|
-
|
|
211
|
+
callbacks?.onNetworkActivity?.("sent", {
|
|
212
212
|
configuration: config,
|
|
213
213
|
type: "config",
|
|
214
214
|
});
|