@corti/dictation-web 0.7.0-ambient.1 → 0.7.0-ambient.3

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 CHANGED
@@ -1417,9 +1417,18 @@ function getLanguageName(languageCode) {
1417
1417
  return languageCode;
1418
1418
  }
1419
1419
  }
1420
+ function getPreferredDefaultLanguage(languages = []) {
1421
+ if (languages.includes("en")) {
1422
+ return "en";
1423
+ }
1424
+ if (languages.includes("en-GB")) {
1425
+ return "en-GB";
1426
+ }
1427
+ return languages[0];
1428
+ }
1420
1429
  function getLanguagesByRegion(region) {
1421
- const languages = DEFAULT_LANGUAGES_BY_REGION[region || "default"] || DEFAULT_LANGUAGES_BY_REGION["default"];
1422
- const defaultLanguage = languages?.[0];
1430
+ const languages = DEFAULT_LANGUAGES_BY_REGION[region || "default"] ?? DEFAULT_LANGUAGES_BY_REGION.default;
1431
+ const defaultLanguage = getPreferredDefaultLanguage(languages);
1423
1432
  return { defaultLanguage, languages };
1424
1433
  }
1425
1434
 
@@ -1482,7 +1491,7 @@ _LanguagesController_autoLoadedLanguages = /* @__PURE__ */ new WeakMap(), _Langu
1482
1491
  const { languages, defaultLanguage } = getLanguagesByRegion(this.host.region);
1483
1492
  __classPrivateFieldSet2(this, _LanguagesController_autoLoadedLanguages, true, "f");
1484
1493
  this.host._languages = languages;
1485
- const previousLanguage = this.host.selectedLanguage;
1494
+ const previousLanguage = this.host._selectedLanguage;
1486
1495
  const selectedLanguage = previousLanguage && languages.includes(previousLanguage) ? previousLanguage : defaultLanguage;
1487
1496
  this.host._selectedLanguage = selectedLanguage;
1488
1497
  this.host.requestUpdate();
@@ -1522,16 +1531,20 @@ function LanguagesContextMixin(superclass) {
1522
1531
  if (value !== void 0) {
1523
1532
  __classPrivateFieldGet5(this, _LanguagesContextMixinClass_languagesController, "f").clearAutoLoadedFlag();
1524
1533
  }
1534
+ if (value === void 0) {
1535
+ return;
1536
+ }
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);
1543
+ }
1525
1544
  }
1526
1545
  get languages() {
1527
1546
  return this._languages;
1528
1547
  }
1529
- set selectedLanguage(value) {
1530
- this._selectedLanguage = value;
1531
- }
1532
- get selectedLanguage() {
1533
- return this._selectedLanguage;
1534
- }
1535
1548
  constructor(...args) {
1536
1549
  super(...args);
1537
1550
  _LanguagesContextMixinClass_languagesController.set(this, new LanguagesController(this));
@@ -1544,7 +1557,7 @@ function LanguagesContextMixin(superclass) {
1544
1557
  this.addEventListener("languages-changed", (e10) => {
1545
1558
  const event = e10;
1546
1559
  const selectedLanguage = event.detail.selectedLanguage;
1547
- this.selectedLanguage = selectedLanguage ?? event.detail.languages[0];
1560
+ this._selectedLanguage = selectedLanguage ?? getPreferredDefaultLanguage(event.detail.languages);
1548
1561
  });
1549
1562
  }
1550
1563
  }
@@ -1563,9 +1576,6 @@ function LanguagesContextMixin(superclass) {
1563
1576
  type: Array
1564
1577
  })
1565
1578
  ], LanguagesContextMixinClass.prototype, "languages", null);
1566
- __decorate4([
1567
- n4({ type: String })
1568
- ], LanguagesContextMixinClass.prototype, "selectedLanguage", null);
1569
1579
  return LanguagesContextMixinClass;
1570
1580
  }
1571
1581
 
@@ -1679,10 +1689,7 @@ var AmbientRoot = class AmbientRoot2 extends RootContext {
1679
1689
  if (!changedProperties.has("ambientConfig")) {
1680
1690
  return;
1681
1691
  }
1682
- const configuredLanguage = this.ambientConfig?.transcription?.primaryLanguage ?? "en";
1683
- if (configuredLanguage !== void 0 && configuredLanguage !== this.selectedLanguage) {
1684
- this.selectedLanguage = configuredLanguage;
1685
- }
1692
+ this._selectedLanguage = this.ambientConfig?.transcription?.primaryLanguage ?? "en";
1686
1693
  }
1687
1694
  };
1688
1695
  __decorate8([
@@ -12906,10 +12913,7 @@ var DictationRoot = class DictationRoot2 extends RootContext {
12906
12913
  if (!changedProperties.has("dictationConfig")) {
12907
12914
  return;
12908
12915
  }
12909
- const configuredLanguage = this.dictationConfig?.primaryLanguage;
12910
- if (configuredLanguage !== void 0 && configuredLanguage !== this.selectedLanguage) {
12911
- this.selectedLanguage = configuredLanguage;
12912
- }
12916
+ this._selectedLanguage = this.dictationConfig?.primaryLanguage;
12913
12917
  }
12914
12918
  };
12915
12919
  __decorate9([
@@ -14636,6 +14640,7 @@ var DictationLanguageSelector = class DictationLanguageSelector2 extends i5 {
14636
14640
  id="language-select"
14637
14641
  aria-labelledby="language-select-label"
14638
14642
  @change=${__classPrivateFieldGet13(this, _DictationLanguageSelector_instances, "m", _DictationLanguageSelector_handleSelectLanguage)}
14643
+ .value=${this._selectedLanguage ?? ""}
14639
14644
  ?disabled=${this.disabled || !this._languages || this._languages.length === 0}
14640
14645
  >
14641
14646
  ${this._languages?.map((language) => x`
@@ -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;IAuC5B,CAAC;IA1BC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;oBAQK,uBAAA,IAAI,6FAAsB;sBACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;;YAE3E,IAAI,CAAC,UAAU,EAAE,GAAG,CACpB,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAEN,QAAQ;4BACJ,IAAI,CAAC,iBAAiB,KAAK,QAAQ;;kBAE7C,eAAe,CAAC,QAAQ,CAAC;;aAE9B,CACF;;;KAGN,CAAC;IACJ,CAAC;;;2GAlCqB,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,CAiDrC","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 ?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"]}
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
- const configuredLanguage = this.ambientConfig?.transcription?.primaryLanguage ?? "en";
41
- if (configuredLanguage !== undefined &&
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,MAAM,kBAAkB,GACtB,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,IAAI,IAAI,CAAC;QAE7D,IACE,kBAAkB,KAAK,SAAS;YAChC,kBAAkB,KAAK,IAAI,CAAC,gBAAgB,EAC5C,CAAC;YACD,IAAI,CAAC,gBAAgB;gBACnB,kBAAuD,CAAC;QAC5D,CAAC;IACH,CAAC;CACF,CAAA;AAhDC;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,CAmDvB","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 const configuredLanguage =\n this.ambientConfig?.transcription?.primaryLanguage ?? \"en\";\n\n if (\n configuredLanguage !== undefined &&\n configuredLanguage !== this.selectedLanguage\n ) {\n this.selectedLanguage =\n configuredLanguage as Corti.TranscribeSupportedLanguage;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-root\": AmbientRoot;\n }\n}\n"]}
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
- const configuredLanguage = this.dictationConfig?.primaryLanguage;
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,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;QAEjE,IACE,kBAAkB,KAAK,SAAS;YAChC,kBAAkB,KAAK,IAAI,CAAC,gBAAgB,EAC5C,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;QAC7C,CAAC;IACH,CAAC;CACF,CAAA;AA1CC;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,CAiDzB","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 const configuredLanguage = this.dictationConfig?.primaryLanguage;\n\n if (\n configuredLanguage !== undefined &&\n configuredLanguage !== this.selectedLanguage\n ) {\n this.selectedLanguage = configuredLanguage;\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-root\": DictationRoot;\n }\n}\n"]}
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;
@@ -13,6 +13,7 @@ import { createContext, provide } from "@lit/context";
13
13
  import { property, state } from "lit/decorators.js";
14
14
  import { LanguagesController } from "../../controllers/languages-controller.js";
15
15
  import { commaSeparatedConverter } from "../../utils/converters.js";
16
+ import { getPreferredDefaultLanguage } from "../../utils/languages.js";
16
17
  export const languagesContext = createContext(Symbol("languages"));
17
18
  export const selectedLanguageContext = createContext(Symbol("selectedLanguage"));
18
19
  export function LanguagesContextMixin(superclass) {
@@ -24,16 +25,21 @@ export function LanguagesContextMixin(superclass) {
24
25
  if (value !== undefined) {
25
26
  __classPrivateFieldGet(this, _LanguagesContextMixinClass_languagesController, "f").clearAutoLoadedFlag();
26
27
  }
28
+ if (value === undefined) {
29
+ return;
30
+ }
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);
38
+ }
27
39
  }
28
40
  get languages() {
29
41
  return this._languages;
30
42
  }
31
- set selectedLanguage(value) {
32
- this._selectedLanguage = value;
33
- }
34
- get selectedLanguage() {
35
- return this._selectedLanguage;
36
- }
37
43
  constructor(...args) {
38
44
  super(...args);
39
45
  _LanguagesContextMixinClass_languagesController.set(this, new LanguagesController(this));
@@ -46,7 +52,9 @@ export function LanguagesContextMixin(superclass) {
46
52
  this.addEventListener("languages-changed", (e) => {
47
53
  const event = e;
48
54
  const selectedLanguage = event.detail.selectedLanguage;
49
- this.selectedLanguage = selectedLanguage ?? event.detail.languages[0];
55
+ this._selectedLanguage =
56
+ selectedLanguage ??
57
+ getPreferredDefaultLanguage(event.detail.languages);
50
58
  });
51
59
  }
52
60
  }
@@ -65,9 +73,6 @@ export function LanguagesContextMixin(superclass) {
65
73
  type: Array,
66
74
  })
67
75
  ], LanguagesContextMixinClass.prototype, "languages", null);
68
- __decorate([
69
- property({ type: String })
70
- ], LanguagesContextMixinClass.prototype, "selectedLanguage", null);
71
76
  return LanguagesContextMixinClass;
72
77
  }
73
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;AAIpE,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;AAS9B,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;QACH,CAAC;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QAGD,IAAI,gBAAgB,CAAC,KAAoD;YACvE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACjC,CAAC;QAED,IAAI,gBAAgB;YAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAChC,CAAC;QAED,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YArCjB,0DAAuB,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAC;YAuCnD,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,gBAAgB,GAAG,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC;QACL,CAAC;KACF;;IApDC;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;+DAQD;IAOD;QADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sEAG1B;IA4BH,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 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 selectedLanguage?: 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\n get languages(): Corti.TranscribeSupportedLanguage[] | undefined {\n return this._languages;\n }\n\n @property({ type: String })\n set selectedLanguage(value: Corti.TranscribeSupportedLanguage | undefined) {\n this._selectedLanguage = value;\n }\n\n get selectedLanguage(): Corti.TranscribeSupportedLanguage | undefined {\n return this._selectedLanguage;\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 = selectedLanguage ?? event.detail.languages[0];\n });\n }\n }\n\n return LanguagesContextMixinClass as Constructor<LanguagesContextInterface> &\n T;\n}\n"]}
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.selectedLanguage;
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;AAW7D;;;;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,gBAAgB,CAAC;QACpD,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 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"]}
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"]}