@corti/dictation-web 0.6.0 → 0.7.0-ambient

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.
Files changed (91) hide show
  1. package/dist/bundle.js +1838 -1455
  2. package/dist/components/ambient-recording-button.d.ts +16 -0
  3. package/dist/components/ambient-recording-button.js +68 -0
  4. package/dist/components/ambient-recording-button.js.map +1 -0
  5. package/dist/components/corti-ambient.d.ts +27 -0
  6. package/dist/components/corti-ambient.js +97 -0
  7. package/dist/components/corti-ambient.js.map +1 -0
  8. package/dist/components/corti-dictation.d.ts +9 -109
  9. package/dist/components/corti-dictation.js +12 -187
  10. package/dist/components/corti-dictation.js.map +1 -1
  11. package/dist/components/corti-root.d.ts +121 -0
  12. package/dist/components/corti-root.js +196 -0
  13. package/dist/components/corti-root.js.map +1 -0
  14. package/dist/components/device-selector.js +1 -1
  15. package/dist/components/device-selector.js.map +1 -1
  16. package/dist/components/dictation-recording-button.d.ts +13 -0
  17. package/dist/components/dictation-recording-button.js +30 -0
  18. package/dist/components/dictation-recording-button.js.map +1 -0
  19. package/dist/components/keybinding-input.js +1 -1
  20. package/dist/components/keybinding-input.js.map +1 -1
  21. package/dist/components/keybinding-selector.js +1 -1
  22. package/dist/components/keybinding-selector.js.map +1 -1
  23. package/dist/components/language-selector.js +2 -1
  24. package/dist/components/language-selector.js.map +1 -1
  25. package/dist/components/{recording-button.d.ts → recording-button-base.d.ts} +7 -9
  26. package/dist/components/recording-button-base.js +321 -0
  27. package/dist/components/recording-button-base.js.map +1 -0
  28. package/dist/components/settings-menu.js +1 -1
  29. package/dist/components/settings-menu.js.map +1 -1
  30. package/dist/constants.d.ts +1 -0
  31. package/dist/constants.js +9 -0
  32. package/dist/constants.js.map +1 -1
  33. package/dist/contexts/ambient-context.d.ts +18 -0
  34. package/dist/contexts/ambient-context.js +48 -0
  35. package/dist/contexts/ambient-context.js.map +1 -0
  36. package/dist/contexts/dictation-context.d.ts +3 -92
  37. package/dist/contexts/dictation-context.js +5 -257
  38. package/dist/contexts/dictation-context.js.map +1 -1
  39. package/dist/contexts/mixins/auth-context.d.ts +32 -0
  40. package/dist/contexts/mixins/auth-context.js +116 -0
  41. package/dist/contexts/mixins/auth-context.js.map +1 -0
  42. package/dist/contexts/mixins/devices-context.d.ts +14 -0
  43. package/dist/contexts/mixins/devices-context.js +58 -0
  44. package/dist/contexts/mixins/devices-context.js.map +1 -0
  45. package/dist/contexts/mixins/keybindings-context.d.ts +13 -0
  46. package/dist/contexts/mixins/keybindings-context.js +62 -0
  47. package/dist/contexts/mixins/keybindings-context.js.map +1 -0
  48. package/dist/contexts/mixins/languages-context.d.ts +11 -0
  49. package/dist/contexts/mixins/languages-context.js +54 -0
  50. package/dist/contexts/mixins/languages-context.js.map +1 -0
  51. package/dist/contexts/mixins/proxy-context.d.ts +14 -0
  52. package/dist/contexts/mixins/proxy-context.js +24 -0
  53. package/dist/contexts/mixins/proxy-context.js.map +1 -0
  54. package/dist/contexts/mixins/recording-state-context.d.ts +13 -0
  55. package/dist/contexts/mixins/recording-state-context.js +30 -0
  56. package/dist/contexts/mixins/recording-state-context.js.map +1 -0
  57. package/dist/contexts/mixins/types.d.ts +5 -0
  58. package/dist/contexts/mixins/types.js +2 -0
  59. package/dist/contexts/mixins/types.js.map +1 -0
  60. package/dist/contexts/root-context.d.ts +8 -0
  61. package/dist/contexts/root-context.js +34 -0
  62. package/dist/contexts/root-context.js.map +1 -0
  63. package/dist/controllers/ambient-controller.d.ts +16 -0
  64. package/dist/controllers/ambient-controller.js +24 -0
  65. package/dist/controllers/ambient-controller.js.map +1 -0
  66. package/dist/controllers/dictation-controller.d.ts +8 -31
  67. package/dist/controllers/dictation-controller.js +17 -283
  68. package/dist/controllers/dictation-controller.js.map +1 -1
  69. package/dist/controllers/languages-controller.js +0 -4
  70. package/dist/controllers/languages-controller.js.map +1 -1
  71. package/dist/controllers/socket-controller.d.ts +51 -0
  72. package/dist/controllers/socket-controller.js +281 -0
  73. package/dist/controllers/socket-controller.js.map +1 -0
  74. package/dist/index.d.ts +5 -2
  75. package/dist/index.js +12 -2
  76. package/dist/index.js.map +1 -1
  77. package/dist/tsconfig.tsbuildinfo +1 -1
  78. package/dist/types.d.ts +3 -0
  79. package/dist/types.js.map +1 -1
  80. package/dist/utils/devices.d.ts +12 -8
  81. package/dist/utils/devices.js +39 -28
  82. package/dist/utils/devices.js.map +1 -1
  83. package/dist/utils/events.d.ts +5 -3
  84. package/dist/utils/events.js +7 -0
  85. package/dist/utils/events.js.map +1 -1
  86. package/dist/utils/keybinding.d.ts +2 -1
  87. package/dist/utils/keybinding.js +12 -6
  88. package/dist/utils/keybinding.js.map +1 -1
  89. package/package.json +1 -1
  90. package/dist/components/recording-button.js +0 -331
  91. package/dist/components/recording-button.js.map +0 -1
@@ -0,0 +1,16 @@
1
+ import { AmbientController, type AmbientStreamSessionConfig, type StreamAmbientMessage } from "../controllers/ambient-controller.js";
2
+ import { RecordingButtonBase } from "./recording-button-base.js";
3
+ export declare class AmbientRecordingButton extends RecordingButtonBase<AmbientStreamSessionConfig, StreamAmbientMessage> {
4
+ #private;
5
+ private _ambientConfig?;
6
+ private _interactionId?;
7
+ protected _socketController: AmbientController;
8
+ startRecording(): void;
9
+ openConnection(): Promise<void>;
10
+ protected _getConnectConfig(): AmbientStreamSessionConfig;
11
+ }
12
+ declare global {
13
+ interface HTMLElementTagNameMap {
14
+ "ambient-recording-button": AmbientRecordingButton;
15
+ }
16
+ }
@@ -0,0 +1,68 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var _AmbientRecordingButton_instances, _AmbientRecordingButton_trimmedInteractionId;
13
+ import { consume } from "@lit/context";
14
+ import { customElement, state } from "lit/decorators.js";
15
+ import { DEFAULT_STREAM_CONFIG } from "../constants.js";
16
+ import { ambientConfigContext, interactionIdContext, } from "../contexts/ambient-context.js";
17
+ import { AmbientController, } from "../controllers/ambient-controller.js";
18
+ import { errorEvent } from "../utils/events.js";
19
+ import { RecordingButtonBase } from "./recording-button-base.js";
20
+ const interactionIdRequiredError = () => new Error("interactionId is required. Set interactionId on ambient-root.");
21
+ let AmbientRecordingButton = class AmbientRecordingButton extends RecordingButtonBase {
22
+ constructor() {
23
+ super(...arguments);
24
+ _AmbientRecordingButton_instances.add(this);
25
+ this._socketController = new AmbientController(this);
26
+ }
27
+ startRecording() {
28
+ if (!__classPrivateFieldGet(this, _AmbientRecordingButton_instances, "m", _AmbientRecordingButton_trimmedInteractionId).call(this)) {
29
+ this.dispatchEvent(errorEvent(interactionIdRequiredError()));
30
+ return;
31
+ }
32
+ super.startRecording();
33
+ }
34
+ async openConnection() {
35
+ if (!__classPrivateFieldGet(this, _AmbientRecordingButton_instances, "m", _AmbientRecordingButton_trimmedInteractionId).call(this)) {
36
+ this.dispatchEvent(errorEvent(interactionIdRequiredError()));
37
+ return;
38
+ }
39
+ await super.openConnection();
40
+ }
41
+ _getConnectConfig() {
42
+ const interactionId = __classPrivateFieldGet(this, _AmbientRecordingButton_instances, "m", _AmbientRecordingButton_trimmedInteractionId).call(this);
43
+ if (!interactionId) {
44
+ throw interactionIdRequiredError();
45
+ }
46
+ return {
47
+ configuration: this._ambientConfig ?? DEFAULT_STREAM_CONFIG,
48
+ interactionId,
49
+ };
50
+ }
51
+ };
52
+ _AmbientRecordingButton_instances = new WeakSet();
53
+ _AmbientRecordingButton_trimmedInteractionId = function _AmbientRecordingButton_trimmedInteractionId() {
54
+ return this._interactionId?.trim();
55
+ };
56
+ __decorate([
57
+ consume({ context: ambientConfigContext, subscribe: true }),
58
+ state()
59
+ ], AmbientRecordingButton.prototype, "_ambientConfig", void 0);
60
+ __decorate([
61
+ consume({ context: interactionIdContext, subscribe: true }),
62
+ state()
63
+ ], AmbientRecordingButton.prototype, "_interactionId", void 0);
64
+ AmbientRecordingButton = __decorate([
65
+ customElement("ambient-recording-button")
66
+ ], AmbientRecordingButton);
67
+ export { AmbientRecordingButton };
68
+ //# sourceMappingURL=ambient-recording-button.js.map
@@ -0,0 +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,CAAC,+DAA+D,CAAC,CAAC;AAGtE,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(\"interactionId is required. Set interactionId on ambient-root.\");\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"]}
@@ -0,0 +1,27 @@
1
+ import type { Corti } from "@corti/sdk";
2
+ import type { AmbientRoot } from "../contexts/ambient-context.js";
3
+ import type { AmbientRecordingButton } from "./ambient-recording-button.js";
4
+ import { CortiRoot } from "./corti-root.js";
5
+ import "../contexts/ambient-context.js";
6
+ import "./ambient-recording-button.js";
7
+ import "./settings-menu.js";
8
+ export declare class CortiAmbient extends CortiRoot<AmbientRoot, AmbientRecordingButton> {
9
+ /**
10
+ * Stream configuration for ambient capture (modes, transcription, etc.).
11
+ */
12
+ set ambientConfig(value: Corti.StreamConfig);
13
+ get ambientConfig(): Corti.StreamConfig;
14
+ _ambientConfig: Corti.StreamConfig;
15
+ /**
16
+ * Stream interaction id passed to `stream.connect` for this session.
17
+ */
18
+ set interactionId(value: string | undefined);
19
+ get interactionId(): string | undefined;
20
+ _interactionId?: string;
21
+ render(): import("lit-html").TemplateResult<1>;
22
+ }
23
+ declare global {
24
+ interface HTMLElementTagNameMap {
25
+ "corti-ambient": CortiAmbient;
26
+ }
27
+ }
@@ -0,0 +1,97 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, nothing } from "lit";
8
+ import { customElement, property, state } from "lit/decorators.js";
9
+ import { classMap } from "lit/directives/class-map.js";
10
+ import { ref } from "lit/directives/ref.js";
11
+ import { DEFAULT_STREAM_CONFIG } from "../constants.js";
12
+ import { CortiRoot } from "./corti-root.js";
13
+ import "../contexts/ambient-context.js";
14
+ import "./ambient-recording-button.js";
15
+ import "./settings-menu.js";
16
+ let CortiAmbient = class CortiAmbient extends CortiRoot {
17
+ constructor() {
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ // Properties
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ super(...arguments);
22
+ this._ambientConfig = DEFAULT_STREAM_CONFIG;
23
+ }
24
+ /**
25
+ * Stream configuration for ambient capture (modes, transcription, etc.).
26
+ */
27
+ set ambientConfig(value) {
28
+ this._ambientConfig = value;
29
+ }
30
+ get ambientConfig() {
31
+ return (this._contextProviderRef.value?.ambientConfig ??
32
+ this._ambientConfig ??
33
+ DEFAULT_STREAM_CONFIG);
34
+ }
35
+ /**
36
+ * Stream interaction id passed to `stream.connect` for this session.
37
+ */
38
+ set interactionId(value) {
39
+ this._interactionId = value;
40
+ }
41
+ get interactionId() {
42
+ return this._contextProviderRef.value?.interactionId ?? this._interactionId;
43
+ }
44
+ // ─────────────────────────────────────────────────────────────────────────────
45
+ // Render
46
+ // ─────────────────────────────────────────────────────────────────────────────
47
+ render() {
48
+ const isHidden = !this.accessToken &&
49
+ !this.authConfig &&
50
+ !this.socketUrl &&
51
+ !this.socketProxy;
52
+ return html `
53
+ <ambient-root
54
+ ${ref(this._contextProviderRef)}
55
+ class=${classMap({ hidden: isHidden })}
56
+ .accessToken=${this.accessToken}
57
+ .authConfig=${this.authConfig}
58
+ .socketUrl=${this.socketUrl}
59
+ .socketProxy=${this.socketProxy}
60
+ .ambientConfig=${this._ambientConfig}
61
+ .interactionId=${this._interactionId}
62
+ .languages=${this._languagesSupported}
63
+ .devices=${this._devices}
64
+ .selectedDevice=${this._selectedDevice}
65
+ .pushToTalkKeybinding=${this._pushToTalkKeybinding}
66
+ .toggleToTalkKeybinding=${this._toggleToTalkKeybinding}
67
+ >
68
+ <ambient-recording-button
69
+ ${ref(this._recordingButtonRef)}
70
+ ?allowButtonFocus=${this.allowButtonFocus}
71
+ ></ambient-recording-button>
72
+ ${this.settingsEnabled?.length > 0
73
+ ? html `<dictation-settings-menu
74
+ .settingsEnabled=${this.settingsEnabled}
75
+ ></dictation-settings-menu>`
76
+ : nothing}
77
+ </ambient-root>
78
+ `;
79
+ }
80
+ };
81
+ __decorate([
82
+ property({ attribute: false, type: Object })
83
+ ], CortiAmbient.prototype, "ambientConfig", null);
84
+ __decorate([
85
+ state()
86
+ ], CortiAmbient.prototype, "_ambientConfig", void 0);
87
+ __decorate([
88
+ property({ type: String })
89
+ ], CortiAmbient.prototype, "interactionId", null);
90
+ __decorate([
91
+ state()
92
+ ], CortiAmbient.prototype, "_interactionId", void 0);
93
+ CortiAmbient = __decorate([
94
+ customElement("corti-ambient")
95
+ ], CortiAmbient);
96
+ export { CortiAmbient };
97
+ //# sourceMappingURL=corti-ambient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corti-ambient.js","sourceRoot":"","sources":["../../src/components/corti-ambient.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,gCAAgC,CAAC;AACxC,OAAO,+BAA+B,CAAC;AACvC,OAAO,oBAAoB,CAAC;AAGrB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,SAGjC;IAHM;QAIL,gFAAgF;QAChF,aAAa;QACb,gFAAgF;;QAmBhF,mBAAc,GAAuB,qBAAqB,CAAC;IA0D7D,CAAC;IA3EC;;OAEG;IAEH,IAAI,aAAa,CAAC,KAAyB;QACzC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,CACL,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa;YAC7C,IAAI,CAAC,cAAc;YACnB,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAKD;;OAEG;IAEH,IAAI,aAAa,CAAC,KAAyB;QACzC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI,CAAC,cAAc,CAAC;IAC9E,CAAC;IAKD,gFAAgF;IAChF,SAAS;IACT,gFAAgF;IAEhF,MAAM;QACJ,MAAM,QAAQ,GACZ,CAAC,IAAI,CAAC,WAAW;YACjB,CAAC,IAAI,CAAC,UAAU;YAChB,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,WAAW,CAAC;QAEpB,OAAO,IAAI,CAAA;;UAEL,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;gBACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;uBACvB,IAAI,CAAC,WAAW;sBACjB,IAAI,CAAC,UAAU;qBAChB,IAAI,CAAC,SAAS;uBACZ,IAAI,CAAC,WAAW;yBACd,IAAI,CAAC,cAAc;yBACnB,IAAI,CAAC,cAAc;qBACvB,IAAI,CAAC,mBAAmB;mBAC1B,IAAI,CAAC,QAAQ;0BACN,IAAI,CAAC,eAAe;gCACd,IAAI,CAAC,qBAAqB;kCACxB,IAAI,CAAC,uBAAuB;;;YAGlD,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;8BACX,IAAI,CAAC,gBAAgB;;UAGzC,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,IAAI,CAAA;mCACiB,IAAI,CAAC,eAAe;0CACb;YAC9B,CAAC,CAAC,OACN;;KAEH,CAAC;IACJ,CAAC;CACF,CAAA;AAvEC;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAG5C;AAWD;IADC,KAAK,EAAE;oDACmD;AAM3D;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iDAG1B;AAOD;IADC,KAAK,EAAE;oDACgB;AAxCb,YAAY;IADxB,aAAa,CAAC,eAAe,CAAC;GAClB,YAAY,CAmFxB","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { html, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { DEFAULT_STREAM_CONFIG } from \"../constants.js\";\nimport type { AmbientRoot } from \"../contexts/ambient-context.js\";\nimport type { AmbientRecordingButton } from \"./ambient-recording-button.js\";\nimport { CortiRoot } from \"./corti-root.js\";\n\nimport \"../contexts/ambient-context.js\";\nimport \"./ambient-recording-button.js\";\nimport \"./settings-menu.js\";\n\n@customElement(\"corti-ambient\")\nexport class CortiAmbient extends CortiRoot<\n AmbientRoot,\n AmbientRecordingButton\n> {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Stream configuration for ambient capture (modes, transcription, etc.).\n */\n @property({ attribute: false, type: Object })\n set ambientConfig(value: Corti.StreamConfig) {\n this._ambientConfig = value;\n }\n\n get ambientConfig(): Corti.StreamConfig {\n return (\n this._contextProviderRef.value?.ambientConfig ??\n this._ambientConfig ??\n DEFAULT_STREAM_CONFIG\n );\n }\n\n @state()\n _ambientConfig: Corti.StreamConfig = DEFAULT_STREAM_CONFIG;\n\n /**\n * Stream interaction id passed to `stream.connect` for this session.\n */\n @property({ type: String })\n set interactionId(value: string | undefined) {\n this._interactionId = value;\n }\n\n get interactionId(): string | undefined {\n return this._contextProviderRef.value?.interactionId ?? this._interactionId;\n }\n\n @state()\n _interactionId?: string;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n const isHidden =\n !this.accessToken &&\n !this.authConfig &&\n !this.socketUrl &&\n !this.socketProxy;\n\n return html`\n <ambient-root\n ${ref(this._contextProviderRef)}\n class=${classMap({ hidden: isHidden })}\n .accessToken=${this.accessToken}\n .authConfig=${this.authConfig}\n .socketUrl=${this.socketUrl}\n .socketProxy=${this.socketProxy}\n .ambientConfig=${this._ambientConfig}\n .interactionId=${this._interactionId}\n .languages=${this._languagesSupported}\n .devices=${this._devices}\n .selectedDevice=${this._selectedDevice}\n .pushToTalkKeybinding=${this._pushToTalkKeybinding}\n .toggleToTalkKeybinding=${this._toggleToTalkKeybinding}\n >\n <ambient-recording-button\n ${ref(this._recordingButtonRef)}\n ?allowButtonFocus=${this.allowButtonFocus}\n ></ambient-recording-button>\n ${\n this.settingsEnabled?.length > 0\n ? html`<dictation-settings-menu\n .settingsEnabled=${this.settingsEnabled}\n ></dictation-settings-menu>`\n : nothing\n }\n </ambient-root>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"corti-ambient\": CortiAmbient;\n }\n}\n"]}
@@ -1,47 +1,11 @@
1
1
  import type { Corti, CortiAuth } from "@corti/sdk";
2
- import { LitElement } from "lit";
3
- import type { ConfigurableSettings, ProxyOptions, RecordingState } from "../types.js";
2
+ import type { DictationRoot } from "../contexts/dictation-context.js";
3
+ import { CortiRoot } from "./corti-root.js";
4
+ import type { DictationRecordingButton } from "./dictation-recording-button.js";
4
5
  import "../contexts/dictation-context.js";
5
- import "./recording-button.js";
6
+ import "./dictation-recording-button.js";
6
7
  import "./settings-menu.js";
7
- export declare class CortiDictation extends LitElement {
8
- #private;
9
- static styles: import("lit").CSSResult;
10
- /**
11
- * Latest access token
12
- */
13
- accessToken?: string;
14
- /**
15
- * Authentication configuration with optional refresh mechanism.
16
- */
17
- authConfig?: CortiAuth.AuthTokenDerivable;
18
- /**
19
- * WebSocket URL for proxy connection. When provided, uses CortiWebSocketProxyClient instead of CortiClient.
20
- */
21
- socketUrl?: string;
22
- /**
23
- * Socket proxy configuration object. When provided, uses CortiWebSocketProxyClient instead of CortiClient.
24
- */
25
- socketProxy?: ProxyOptions;
26
- /**
27
- * List of all language codes available for use with the Web Component.
28
- * Default list depends on the accessToken
29
- */
30
- set languagesSupported(value: Corti.TranscribeSupportedLanguage[] | undefined);
31
- get languagesSupported(): Corti.TranscribeSupportedLanguage[];
32
- _languagesSupported?: Corti.TranscribeSupportedLanguage[];
33
- /**
34
- * Which settings should be available in the UI.
35
- * If an empty array is passed, the settings will be disabled entirely.
36
- * Options are language and devices
37
- */
38
- settingsEnabled: ConfigurableSettings[];
39
- /**
40
- * When false (default), allows the start/stop button from taking focus when clicked,
41
- * disabling textareas or other input elements to maintain focus.
42
- * Set to "true" to allow the button to receive focus on click.
43
- */
44
- allowButtonFocus: boolean;
8
+ export declare class CortiDictation extends CortiRoot<DictationRoot, DictationRecordingButton> {
45
9
  /**
46
10
  * Overrides any device selection and instead uses getDisplayMedia to stream system audio.
47
11
  * Should only be used for debugging.
@@ -53,40 +17,6 @@ export declare class CortiDictation extends LitElement {
53
17
  set dictationConfig(value: Corti.TranscribeConfig);
54
18
  get dictationConfig(): Corti.TranscribeConfig;
55
19
  _dictationConfig: Corti.TranscribeConfig;
56
- /**
57
- * List of available recording devices
58
- */
59
- set devices(value: MediaDeviceInfo[] | undefined);
60
- get devices(): MediaDeviceInfo[];
61
- _devices?: MediaDeviceInfo[];
62
- /**
63
- * The selected device used for recording (MediaDeviceInfo).
64
- */
65
- set selectedDevice(value: MediaDeviceInfo | undefined);
66
- get selectedDevice(): MediaDeviceInfo | undefined;
67
- _selectedDevice?: MediaDeviceInfo;
68
- /**
69
- * Current state of recording (stopped, recording, initializing and stopping, ).
70
- */
71
- get recordingState(): RecordingState;
72
- /**
73
- * Push-to-talk keybinding for keyboard shortcut. Single key only (e.g., "Space", "k", "meta", "ctrl").
74
- * Combinations with "+" are not supported.
75
- * Keydown starts recording, keyup stops recording.
76
- * Defaults to "Space" if keybinding is in settingsEnabled, otherwise undefined
77
- */
78
- set pushToTalkKeybinding(value: string | null | undefined);
79
- get pushToTalkKeybinding(): string | null | undefined;
80
- _pushToTalkKeybinding?: string | null;
81
- /**
82
- * Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., "`", "k", "meta", "ctrl").
83
- * Combinations with "+" are not supported.
84
- * Pressing the key toggles recording on/off.
85
- * Defaults to "`" if keybinding is in settingsEnabled, otherwise undefined
86
- */
87
- set toggleToTalkKeybinding(value: string | null | undefined);
88
- get toggleToTalkKeybinding(): string | null | undefined;
89
- _toggleToTalkKeybinding?: string | null;
90
20
  /**
91
21
  * Set the latest access token.
92
22
  * @returns ServerConfig with environment, tenant, and accessToken
@@ -94,12 +24,8 @@ export declare class CortiDictation extends LitElement {
94
24
  */
95
25
  setAccessToken(token: string): {
96
26
  accessToken: string | undefined;
97
- environment: undefined;
98
- tenant: undefined;
99
- } | {
100
- accessToken: string;
101
- environment: string;
102
- tenant: string;
27
+ environment: string | undefined;
28
+ tenant: string | undefined;
103
29
  };
104
30
  /**
105
31
  * Set the auth configuration for OAuth flows.
@@ -108,39 +34,13 @@ export declare class CortiDictation extends LitElement {
108
34
  */
109
35
  setAuthConfig(config: CortiAuth.AuthTokenDerivable): Promise<{
110
36
  accessToken: string | undefined;
111
- environment: undefined;
112
- tenant: undefined;
113
- } | {
114
- accessToken: string;
115
- environment: string;
116
- tenant: string;
37
+ environment: string | undefined;
38
+ tenant: string | undefined;
117
39
  } | {
118
40
  accessToken: undefined;
119
41
  environment: undefined;
120
42
  tenant: undefined;
121
43
  }>;
122
- /**
123
- * Starts a recording.
124
- */
125
- startRecording(): void;
126
- /**
127
- * Stops a recording.
128
- */
129
- stopRecording(): void;
130
- /**
131
- * Starts or stops recording. Convenience layer on top of the start/stop methods.
132
- */
133
- toggleRecording(): void;
134
- /**
135
- * Opens the WebSocket connection without starting recording.
136
- * Use this to pre-establish the connection before recording starts.
137
- */
138
- openConnection(): Promise<void>;
139
- /**
140
- * Closes the WebSocket connection by sending "end" and waiting for "ended".
141
- * Call this to receive "usage" statistics or when done with the connection.
142
- */
143
- closeConnection(): Promise<void>;
144
44
  render(): import("lit-html").TemplateResult<1>;
145
45
  }
146
46
  declare global {
@@ -4,41 +4,21 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _CortiDictation_recordingButtonRef, _CortiDictation_contextProviderRef;
13
- import { css, html, LitElement, nothing } from "lit";
7
+ import { html, nothing } from "lit";
14
8
  import { customElement, property, state } from "lit/decorators.js";
15
9
  import { classMap } from "lit/directives/class-map.js";
16
- import { createRef, ref } from "lit/directives/ref.js";
10
+ import { ref } from "lit/directives/ref.js";
17
11
  import { DEFAULT_DICTATION_CONFIG } from "../constants.js";
18
- import { commaSeparatedConverter } from "../utils/converters.js";
12
+ import { CortiRoot } from "./corti-root.js";
19
13
  import "../contexts/dictation-context.js";
20
- import "./recording-button.js";
14
+ import "./dictation-recording-button.js";
21
15
  import "./settings-menu.js";
22
- let CortiDictation = class CortiDictation extends LitElement {
16
+ let CortiDictation = class CortiDictation extends CortiRoot {
23
17
  constructor() {
24
- super(...arguments);
25
18
  // ─────────────────────────────────────────────────────────────────────────────
26
- // Private refs
19
+ // Properties
27
20
  // ─────────────────────────────────────────────────────────────────────────────
28
- _CortiDictation_recordingButtonRef.set(this, createRef());
29
- _CortiDictation_contextProviderRef.set(this, createRef());
30
- /**
31
- * Which settings should be available in the UI.
32
- * If an empty array is passed, the settings will be disabled entirely.
33
- * Options are language and devices
34
- */
35
- this.settingsEnabled = ["device", "language"];
36
- /**
37
- * When false (default), allows the start/stop button from taking focus when clicked,
38
- * disabling textareas or other input elements to maintain focus.
39
- * Set to "true" to allow the button to receive focus on click.
40
- */
41
- this.allowButtonFocus = false;
21
+ super(...arguments);
42
22
  /**
43
23
  * Overrides any device selection and instead uses getDisplayMedia to stream system audio.
44
24
  * Should only be used for debugging.
@@ -46,18 +26,6 @@ let CortiDictation = class CortiDictation extends LitElement {
46
26
  this.debug_displayAudio = false;
47
27
  this._dictationConfig = DEFAULT_DICTATION_CONFIG;
48
28
  }
49
- /**
50
- * List of all language codes available for use with the Web Component.
51
- * Default list depends on the accessToken
52
- */
53
- set languagesSupported(value) {
54
- this._languagesSupported = value;
55
- }
56
- get languagesSupported() {
57
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.languages ||
58
- this._languagesSupported ||
59
- []);
60
- }
61
29
  /**
62
30
  * Configuration settings for dictation
63
31
  */
@@ -65,57 +33,7 @@ let CortiDictation = class CortiDictation extends LitElement {
65
33
  this._dictationConfig = value;
66
34
  }
67
35
  get dictationConfig() {
68
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.dictationConfig || this._dictationConfig);
69
- }
70
- /**
71
- * List of available recording devices
72
- */
73
- set devices(value) {
74
- this._devices = value;
75
- }
76
- get devices() {
77
- return __classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.devices || this._devices || [];
78
- }
79
- /**
80
- * The selected device used for recording (MediaDeviceInfo).
81
- */
82
- set selectedDevice(value) {
83
- this._selectedDevice = value;
84
- }
85
- get selectedDevice() {
86
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.selectedDevice || this._selectedDevice);
87
- }
88
- /**
89
- * Current state of recording (stopped, recording, initializing and stopping, ).
90
- */
91
- get recordingState() {
92
- return __classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.recordingState || "stopped";
93
- }
94
- /**
95
- * Push-to-talk keybinding for keyboard shortcut. Single key only (e.g., "Space", "k", "meta", "ctrl").
96
- * Combinations with "+" are not supported.
97
- * Keydown starts recording, keyup stops recording.
98
- * Defaults to "Space" if keybinding is in settingsEnabled, otherwise undefined
99
- */
100
- set pushToTalkKeybinding(value) {
101
- this._pushToTalkKeybinding = value;
102
- }
103
- get pushToTalkKeybinding() {
104
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.pushToTalkKeybinding ||
105
- this._pushToTalkKeybinding);
106
- }
107
- /**
108
- * Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., "`", "k", "meta", "ctrl").
109
- * Combinations with "+" are not supported.
110
- * Pressing the key toggles recording on/off.
111
- * Defaults to "`" if keybinding is in settingsEnabled, otherwise undefined
112
- */
113
- set toggleToTalkKeybinding(value) {
114
- this._toggleToTalkKeybinding = value;
115
- }
116
- get toggleToTalkKeybinding() {
117
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.toggleToTalkKeybinding ||
118
- this._toggleToTalkKeybinding);
36
+ return (this._contextProviderRef.value?.dictationConfig || this._dictationConfig);
119
37
  }
120
38
  // ─────────────────────────────────────────────────────────────────────────────
121
39
  // Public methods
@@ -127,7 +45,7 @@ let CortiDictation = class CortiDictation extends LitElement {
127
45
  */
128
46
  setAccessToken(token) {
129
47
  this.accessToken = token;
130
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.setAccessToken(token) ?? {
48
+ return (this._contextProviderRef.value?.setAccessToken(token) ?? {
131
49
  accessToken: token,
132
50
  environment: undefined,
133
51
  tenant: undefined,
@@ -140,44 +58,12 @@ let CortiDictation = class CortiDictation extends LitElement {
140
58
  */
141
59
  async setAuthConfig(config) {
142
60
  this.authConfig = config;
143
- return (__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f").value?.setAuthConfig(config) ?? {
61
+ return (this._contextProviderRef.value?.setAuthConfig(config) ?? {
144
62
  accessToken: undefined,
145
63
  environment: undefined,
146
64
  tenant: undefined,
147
65
  });
148
66
  }
149
- /**
150
- * Starts a recording.
151
- */
152
- startRecording() {
153
- __classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f").value?.startRecording();
154
- }
155
- /**
156
- * Stops a recording.
157
- */
158
- stopRecording() {
159
- __classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f").value?.stopRecording();
160
- }
161
- /**
162
- * Starts or stops recording. Convenience layer on top of the start/stop methods.
163
- */
164
- toggleRecording() {
165
- __classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f").value?.toggleRecording();
166
- }
167
- /**
168
- * Opens the WebSocket connection without starting recording.
169
- * Use this to pre-establish the connection before recording starts.
170
- */
171
- async openConnection() {
172
- await __classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f").value?.openConnection();
173
- }
174
- /**
175
- * Closes the WebSocket connection by sending "end" and waiting for "ended".
176
- * Call this to receive "usage" statistics or when done with the connection.
177
- */
178
- async closeConnection() {
179
- await __classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f").value?.closeConnection();
180
- }
181
67
  // ─────────────────────────────────────────────────────────────────────────────
182
68
  // Render
183
69
  // ─────────────────────────────────────────────────────────────────────────────
@@ -188,7 +74,7 @@ let CortiDictation = class CortiDictation extends LitElement {
188
74
  !this.socketProxy;
189
75
  return html `
190
76
  <dictation-root
191
- ${ref(__classPrivateFieldGet(this, _CortiDictation_contextProviderRef, "f"))}
77
+ ${ref(this._contextProviderRef)}
192
78
  class=${classMap({ hidden: isHidden })}
193
79
  .accessToken=${this.accessToken}
194
80
  .authConfig=${this.authConfig}
@@ -203,7 +89,7 @@ let CortiDictation = class CortiDictation extends LitElement {
203
89
  .toggleToTalkKeybinding=${this._toggleToTalkKeybinding}
204
90
  >
205
91
  <dictation-recording-button
206
- ${ref(__classPrivateFieldGet(this, _CortiDictation_recordingButtonRef, "f"))}
92
+ ${ref(this._recordingButtonRef)}
207
93
  ?allowButtonFocus=${this.allowButtonFocus}
208
94
  ></dictation-recording-button>
209
95
  ${this.settingsEnabled?.length > 0
@@ -215,43 +101,6 @@ let CortiDictation = class CortiDictation extends LitElement {
215
101
  `;
216
102
  }
217
103
  };
218
- _CortiDictation_recordingButtonRef = new WeakMap();
219
- _CortiDictation_contextProviderRef = new WeakMap();
220
- CortiDictation.styles = css `
221
- .hidden {
222
- display: none;
223
- }
224
- `;
225
- __decorate([
226
- property({ type: String })
227
- ], CortiDictation.prototype, "accessToken", void 0);
228
- __decorate([
229
- property({ attribute: false, type: Object })
230
- ], CortiDictation.prototype, "authConfig", void 0);
231
- __decorate([
232
- property({ type: String })
233
- ], CortiDictation.prototype, "socketUrl", void 0);
234
- __decorate([
235
- property({ attribute: false, type: Object })
236
- ], CortiDictation.prototype, "socketProxy", void 0);
237
- __decorate([
238
- property({
239
- converter: commaSeparatedConverter,
240
- type: Array,
241
- })
242
- ], CortiDictation.prototype, "languagesSupported", null);
243
- __decorate([
244
- state()
245
- ], CortiDictation.prototype, "_languagesSupported", void 0);
246
- __decorate([
247
- property({
248
- converter: commaSeparatedConverter,
249
- type: Array,
250
- })
251
- ], CortiDictation.prototype, "settingsEnabled", void 0);
252
- __decorate([
253
- property({ type: Boolean })
254
- ], CortiDictation.prototype, "allowButtonFocus", void 0);
255
104
  __decorate([
256
105
  property({ attribute: "debug-display-audio", type: Boolean })
257
106
  ], CortiDictation.prototype, "debug_displayAudio", void 0);
@@ -261,30 +110,6 @@ __decorate([
261
110
  __decorate([
262
111
  state()
263
112
  ], CortiDictation.prototype, "_dictationConfig", void 0);
264
- __decorate([
265
- property({ attribute: false, type: Array })
266
- ], CortiDictation.prototype, "devices", null);
267
- __decorate([
268
- state()
269
- ], CortiDictation.prototype, "_devices", void 0);
270
- __decorate([
271
- property({ attribute: false, type: Object })
272
- ], CortiDictation.prototype, "selectedDevice", null);
273
- __decorate([
274
- state()
275
- ], CortiDictation.prototype, "_selectedDevice", void 0);
276
- __decorate([
277
- property({ type: String })
278
- ], CortiDictation.prototype, "pushToTalkKeybinding", null);
279
- __decorate([
280
- state()
281
- ], CortiDictation.prototype, "_pushToTalkKeybinding", void 0);
282
- __decorate([
283
- property({ type: String })
284
- ], CortiDictation.prototype, "toggleToTalkKeybinding", null);
285
- __decorate([
286
- state()
287
- ], CortiDictation.prototype, "_toggleToTalkKeybinding", void 0);
288
113
  CortiDictation = __decorate([
289
114
  customElement("corti-dictation")
290
115
  ], CortiDictation);