@corti/dictation-web 0.4.0-rc.2 → 0.5.0-rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +53 -3
  2. package/dist/bundle.js +795 -152
  3. package/dist/components/corti-dictation.d.ts +15 -1
  4. package/dist/components/corti-dictation.js +35 -0
  5. package/dist/components/corti-dictation.js.map +1 -1
  6. package/dist/components/device-selector.d.ts +1 -1
  7. package/dist/components/keybinding-selector.d.ts +14 -0
  8. package/dist/components/keybinding-selector.js +82 -0
  9. package/dist/components/keybinding-selector.js.map +1 -0
  10. package/dist/components/language-selector.d.ts +1 -1
  11. package/dist/components/mode-selector.d.ts +14 -0
  12. package/dist/components/mode-selector.js +73 -0
  13. package/dist/components/mode-selector.js.map +1 -0
  14. package/dist/components/recording-button.d.ts +5 -2
  15. package/dist/components/recording-button.js +83 -17
  16. package/dist/components/recording-button.js.map +1 -1
  17. package/dist/components/settings-menu.d.ts +2 -0
  18. package/dist/components/settings-menu.js +20 -0
  19. package/dist/components/settings-menu.js.map +1 -1
  20. package/dist/contexts/dictation-context.d.ts +9 -1
  21. package/dist/contexts/dictation-context.js +35 -2
  22. package/dist/contexts/dictation-context.js.map +1 -1
  23. package/dist/controllers/dictation-controller.d.ts +2 -1
  24. package/dist/controllers/dictation-controller.js +53 -19
  25. package/dist/controllers/dictation-controller.js.map +1 -1
  26. package/dist/controllers/keybinding-controller.d.ts +18 -0
  27. package/dist/controllers/keybinding-controller.js +86 -0
  28. package/dist/controllers/keybinding-controller.js.map +1 -0
  29. package/dist/index.d.ts +4 -2
  30. package/dist/index.js +10 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/package.json +87 -7
  33. package/dist/styles/component-styles.d.ts +1 -0
  34. package/dist/styles/component-styles.js +10 -0
  35. package/dist/styles/component-styles.js.map +1 -1
  36. package/dist/styles/keybinding-selector.d.ts +2 -0
  37. package/dist/styles/keybinding-selector.js +72 -0
  38. package/dist/styles/keybinding-selector.js.map +1 -0
  39. package/dist/styles/mode-selector.d.ts +2 -0
  40. package/dist/styles/mode-selector.js +56 -0
  41. package/dist/styles/mode-selector.js.map +1 -0
  42. package/dist/styles/select.d.ts +1 -1
  43. package/dist/styles/select.js +6 -10
  44. package/dist/styles/select.js.map +1 -1
  45. package/dist/styles/settings-menu.js +9 -1
  46. package/dist/styles/settings-menu.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -0
  48. package/dist/types.d.ts +3 -1
  49. package/dist/types.js.map +1 -1
  50. package/dist/utils/events.d.ts +14 -1
  51. package/dist/utils/events.js +22 -0
  52. package/dist/utils/events.js.map +1 -1
  53. package/dist/utils/keybinding.d.ts +36 -0
  54. package/dist/utils/keybinding.js +125 -0
  55. package/dist/utils/keybinding.js.map +1 -0
  56. package/package.json +2 -2
  57. package/dist/CortiDictation.d.ts +0 -55
  58. package/dist/CortiDictation.js +0 -303
  59. package/dist/CortiDictation.js.map +0 -1
  60. package/dist/DictationService.d.ts +0 -16
  61. package/dist/DictationService.js +0 -88
  62. package/dist/DictationService.js.map +0 -1
  63. package/dist/RecorderManager.d.ts +0 -25
  64. package/dist/RecorderManager.js +0 -145
  65. package/dist/RecorderManager.js.map +0 -1
  66. package/dist/audioService.d.ts +0 -6
  67. package/dist/audioService.js +0 -21
  68. package/dist/audioService.js.map +0 -1
  69. package/dist/controllers/DictationController.d.ts +0 -35
  70. package/dist/controllers/DictationController.js +0 -130
  71. package/dist/controllers/DictationController.js.map +0 -1
  72. package/dist/controllers/MediaController.d.ts +0 -31
  73. package/dist/controllers/MediaController.js +0 -99
  74. package/dist/controllers/MediaController.js.map +0 -1
  75. package/dist/src/components/audio-visualiser.d.ts +0 -14
  76. package/dist/src/components/audio-visualiser.js +0 -57
  77. package/dist/src/components/audio-visualiser.js.map +0 -1
  78. package/dist/src/components/corti-dictation.d.ts +0 -123
  79. package/dist/src/components/corti-dictation.js +0 -224
  80. package/dist/src/components/corti-dictation.js.map +0 -1
  81. package/dist/src/components/device-selector.d.ts +0 -24
  82. package/dist/src/components/device-selector.js +0 -106
  83. package/dist/src/components/device-selector.js.map +0 -1
  84. package/dist/src/components/language-selector.d.ts +0 -24
  85. package/dist/src/components/language-selector.js +0 -100
  86. package/dist/src/components/language-selector.js.map +0 -1
  87. package/dist/src/components/recording-button.d.ts +0 -37
  88. package/dist/src/components/recording-button.js +0 -203
  89. package/dist/src/components/recording-button.js.map +0 -1
  90. package/dist/src/components/settings-menu.d.ts +0 -16
  91. package/dist/src/components/settings-menu.js +0 -80
  92. package/dist/src/components/settings-menu.js.map +0 -1
  93. package/dist/src/constants.d.ts +0 -4
  94. package/dist/src/constants.js +0 -37
  95. package/dist/src/constants.js.map +0 -1
  96. package/dist/src/contexts/dictation-context.d.ts +0 -97
  97. package/dist/src/contexts/dictation-context.js +0 -208
  98. package/dist/src/contexts/dictation-context.js.map +0 -1
  99. package/dist/src/controllers/DictationController.d.ts +0 -35
  100. package/dist/src/controllers/DictationController.js +0 -130
  101. package/dist/src/controllers/DictationController.js.map +0 -1
  102. package/dist/src/controllers/MediaController.d.ts +0 -31
  103. package/dist/src/controllers/MediaController.js +0 -99
  104. package/dist/src/controllers/MediaController.js.map +0 -1
  105. package/dist/src/icons/icons.d.ts +0 -17
  106. package/dist/src/icons/icons.js +0 -158
  107. package/dist/src/icons/icons.js.map +0 -1
  108. package/dist/src/styles/ComponentStyles.d.ts +0 -2
  109. package/dist/src/styles/ComponentStyles.js +0 -18
  110. package/dist/src/styles/ComponentStyles.js.map +0 -1
  111. package/dist/src/styles/audio-visualiser.d.ts +0 -2
  112. package/dist/src/styles/audio-visualiser.js +0 -33
  113. package/dist/src/styles/audio-visualiser.js.map +0 -1
  114. package/dist/src/styles/buttons.d.ts +0 -2
  115. package/dist/src/styles/buttons.js +0 -52
  116. package/dist/src/styles/buttons.js.map +0 -1
  117. package/dist/src/styles/callout.d.ts +0 -2
  118. package/dist/src/styles/callout.js +0 -23
  119. package/dist/src/styles/callout.js.map +0 -1
  120. package/dist/src/styles/default-theme.d.ts +0 -2
  121. package/dist/src/styles/default-theme.js +0 -50
  122. package/dist/src/styles/default-theme.js.map +0 -1
  123. package/dist/src/styles/recording-button.d.ts +0 -2
  124. package/dist/src/styles/recording-button.js +0 -8
  125. package/dist/src/styles/recording-button.js.map +0 -1
  126. package/dist/src/styles/select.d.ts +0 -2
  127. package/dist/src/styles/select.js +0 -36
  128. package/dist/src/styles/select.js.map +0 -1
  129. package/dist/src/styles/settings-menu.d.ts +0 -2
  130. package/dist/src/styles/settings-menu.js +0 -34
  131. package/dist/src/styles/settings-menu.js.map +0 -1
  132. package/dist/src/types.d.ts +0 -7
  133. package/dist/src/types.js +0 -2
  134. package/dist/src/types.js.map +0 -1
  135. package/dist/src/utils/auth.d.ts +0 -9
  136. package/dist/src/utils/auth.js +0 -21
  137. package/dist/src/utils/auth.js.map +0 -1
  138. package/dist/src/utils/converters.d.ts +0 -4
  139. package/dist/src/utils/converters.js +0 -8
  140. package/dist/src/utils/converters.js.map +0 -1
  141. package/dist/src/utils/devices.d.ts +0 -26
  142. package/dist/src/utils/devices.js +0 -53
  143. package/dist/src/utils/devices.js.map +0 -1
  144. package/dist/src/utils/events.d.ts +0 -44
  145. package/dist/src/utils/events.js +0 -88
  146. package/dist/src/utils/events.js.map +0 -1
  147. package/dist/src/utils/languages.d.ts +0 -7
  148. package/dist/src/utils/languages.js +0 -29
  149. package/dist/src/utils/languages.js.map +0 -1
  150. package/dist/src/utils/media.d.ts +0 -6
  151. package/dist/src/utils/media.js +0 -39
  152. package/dist/src/utils/media.js.map +0 -1
  153. package/dist/src/utils/token.d.ts +0 -13
  154. package/dist/src/utils/token.js +0 -60
  155. package/dist/src/utils/token.js.map +0 -1
  156. package/dist/src/utils/validation.d.ts +0 -1
  157. package/dist/src/utils/validation.js +0 -7
  158. package/dist/src/utils/validation.js.map +0 -1
  159. package/dist/stories/audio-visualiser.stories.d.ts +0 -39
  160. package/dist/stories/audio-visualiser.stories.js +0 -71
  161. package/dist/stories/audio-visualiser.stories.js.map +0 -1
  162. package/dist/stories/corti-dictation.stories.d.ts +0 -27
  163. package/dist/stories/corti-dictation.stories.js +0 -129
  164. package/dist/stories/corti-dictation.stories.js.map +0 -1
  165. package/dist/stories/device-selector.stories.d.ts +0 -18
  166. package/dist/stories/device-selector.stories.js +0 -84
  167. package/dist/stories/device-selector.stories.js.map +0 -1
  168. package/dist/stories/language-selector.stories.d.ts +0 -18
  169. package/dist/stories/language-selector.stories.js +0 -53
  170. package/dist/stories/language-selector.stories.js.map +0 -1
  171. package/dist/stories/recording-button.stories.d.ts +0 -27
  172. package/dist/stories/recording-button.stories.js +0 -90
  173. package/dist/stories/recording-button.stories.js.map +0 -1
  174. package/dist/stories/settings-menu.stories.d.ts +0 -23
  175. package/dist/stories/settings-menu.stories.js +0 -156
  176. package/dist/stories/settings-menu.stories.js.map +0 -1
  177. package/dist/styles/ComponentStyles.d.ts +0 -2
  178. package/dist/styles/ComponentStyles.js +0 -18
  179. package/dist/styles/ComponentStyles.js.map +0 -1
  180. package/dist/styles/default-theme.d.ts +0 -2
  181. package/dist/styles/default-theme.js +0 -14
  182. package/dist/styles/default-theme.js.map +0 -1
  183. package/dist/styles/theme.d.ts +0 -2
  184. package/dist/styles/theme.js +0 -56
  185. package/dist/styles/theme.js.map +0 -1
  186. package/dist/tsconfig.stories.tsbuildinfo +0 -1
  187. package/dist/utils.d.ts +0 -59
  188. package/dist/utils.js +0 -179
  189. package/dist/utils.js.map +0 -1
@@ -1,100 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { consume } from "@lit/context";
8
- import { html, LitElement } from "lit";
9
- import { customElement, property, state } from "lit/decorators.js";
10
- import { dictationConfigContext, languagesContext, regionContext, } from "../contexts/dictation-context.js";
11
- import SelectStyles from "../styles/select.js";
12
- import { languageChangedEvent, languagesChangedEvent, } from "../utils/events.js";
13
- import { getLanguageName, getLanguagesByRegion } from "../utils/languages.js";
14
- let LanguageSelector = class LanguageSelector extends LitElement {
15
- constructor() {
16
- super(...arguments);
17
- this.disabled = false;
18
- /**
19
- * Internal cache of loaded languages to check if languages were auto-loaded or provided via property
20
- * @private
21
- */
22
- this._loadedLanguages = [];
23
- }
24
- _languagesAutoLoaded() {
25
- return this._loadedLanguages === this._languages;
26
- }
27
- async connectedCallback() {
28
- super.connectedCallback();
29
- if (this._languages) {
30
- return;
31
- }
32
- await this._loadLanguages();
33
- }
34
- updated(changedProperties) {
35
- if (changedProperties.has("_region") && this._languagesAutoLoaded()) {
36
- this._loadLanguages();
37
- }
38
- }
39
- async _loadLanguages() {
40
- const { languages, defaultLanguage } = getLanguagesByRegion(this._region);
41
- this._loadedLanguages = languages;
42
- const selectedLanguage = this._dictationConfig?.primaryLanguage ?? defaultLanguage;
43
- this.dispatchEvent(languagesChangedEvent(languages, selectedLanguage));
44
- // Dispatch backward compatible event
45
- if (selectedLanguage) {
46
- this.dispatchEvent(languageChangedEvent(selectedLanguage));
47
- }
48
- }
49
- _handleSelectLanguage(e) {
50
- const language = e.target.value;
51
- this.dispatchEvent(languagesChangedEvent(this._languages || [], language));
52
- // Dispatch backward compatible event
53
- this.dispatchEvent(languageChangedEvent(language));
54
- }
55
- render() {
56
- return html `
57
- <div>
58
- <label id="language-select-label" for="language-select">
59
- Dictation Language
60
- </label>
61
- <select
62
- id="language-select"
63
- aria-labelledby="language-select-label"
64
- @change=${this._handleSelectLanguage}
65
- ?disabled=${this.disabled || !this._languages || this._languages.length === 0}
66
- >
67
- ${this._languages?.map((language) => html `
68
- <option
69
- value=${language}
70
- ?selected=${this._dictationConfig?.primaryLanguage === language}
71
- >
72
- ${getLanguageName(language)}
73
- </option>
74
- `)}
75
- </select>
76
- </div>
77
- `;
78
- }
79
- };
80
- LanguageSelector.styles = SelectStyles;
81
- __decorate([
82
- consume({ context: languagesContext, subscribe: true }),
83
- state()
84
- ], LanguageSelector.prototype, "_languages", void 0);
85
- __decorate([
86
- consume({ context: dictationConfigContext, subscribe: true }),
87
- state()
88
- ], LanguageSelector.prototype, "_dictationConfig", void 0);
89
- __decorate([
90
- property({ type: Boolean })
91
- ], LanguageSelector.prototype, "disabled", void 0);
92
- __decorate([
93
- consume({ context: regionContext, subscribe: true }),
94
- state()
95
- ], LanguageSelector.prototype, "_region", void 0);
96
- LanguageSelector = __decorate([
97
- customElement("language-selector")
98
- ], LanguageSelector);
99
- export { LanguageSelector };
100
- //# sourceMappingURL=language-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-selector.js","sourceRoot":"","sources":["../../../src/components/language-selector.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { html, LitElement, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport {\n dictationConfigContext,\n languagesContext,\n regionContext,\n} from \"../contexts/dictation-context.js\";\nimport SelectStyles from \"../styles/select.js\";\nimport {\n languageChangedEvent,\n languagesChangedEvent,\n} from \"../utils/events.js\";\nimport { getLanguageName, getLanguagesByRegion } from \"../utils/languages.js\";\n\n@customElement(\"language-selector\")\nexport class LanguageSelector extends LitElement {\n @consume({ context: languagesContext, subscribe: true })\n @state()\n private _languages?: string[];\n\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n private _dictationConfig?: Corti.TranscribeConfig;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @consume({ context: regionContext, subscribe: true })\n @state()\n _region?: string;\n\n /**\n * Internal cache of loaded languages to check if languages were auto-loaded or provided via property\n * @private\n */\n private _loadedLanguages: string[] = [];\n\n private _languagesAutoLoaded(): boolean {\n return this._loadedLanguages === this._languages;\n }\n\n static styles = SelectStyles;\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n\n if (this._languages) {\n return;\n }\n\n await this._loadLanguages();\n }\n\n updated(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has(\"_region\") && this._languagesAutoLoaded()) {\n this._loadLanguages();\n }\n }\n\n private async _loadLanguages(): Promise<void> {\n const { languages, defaultLanguage } = getLanguagesByRegion(this._region);\n this._loadedLanguages = languages;\n\n const selectedLanguage =\n this._dictationConfig?.primaryLanguage ?? defaultLanguage;\n\n this.dispatchEvent(languagesChangedEvent(languages, selectedLanguage));\n\n // Dispatch backward compatible event\n if (selectedLanguage) {\n this.dispatchEvent(languageChangedEvent(selectedLanguage));\n }\n }\n\n private _handleSelectLanguage(e: Event): void {\n const language = (e.target as HTMLSelectElement).value;\n\n this.dispatchEvent(languagesChangedEvent(this._languages || [], language));\n\n // Dispatch backward compatible event\n this.dispatchEvent(languageChangedEvent(language));\n }\n\n render() {\n return html`\n <div>\n <label id=\"language-select-label\" for=\"language-select\">\n Dictation Language\n </label>\n <select\n id=\"language-select\"\n aria-labelledby=\"language-select-label\"\n @change=${this._handleSelectLanguage}\n ?disabled=${this.disabled || !this._languages || this._languages.length === 0}\n >\n ${this._languages?.map(\n (language) => html`\n <option\n value=${language}\n ?selected=${this._dictationConfig?.primaryLanguage === language}\n >\n ${getLanguageName(language)}\n </option>\n `,\n )}\n </select>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"language-selector\": LanguageSelector;\n }\n}\n"]}
@@ -1,37 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- import { type CSSResultGroup, LitElement } from "lit";
3
- import type { ProxyOptions } from "../types.js";
4
- import "./audio-visualiser.js";
5
- import "../icons/icons.js";
6
- export declare class RecordingButton extends LitElement {
7
- private _recordingState;
8
- _selectedDevice?: MediaDeviceInfo;
9
- _accessToken?: string;
10
- _authConfig?: Corti.BearerOptions;
11
- _region?: string;
12
- _tenantName?: string;
13
- _dictationConfig?: Corti.TranscribeConfig;
14
- _socketUrl?: string;
15
- _socketProxy?: ProxyOptions;
16
- _debug_displayAudio?: boolean;
17
- preventFocus: boolean;
18
- private _mediaController;
19
- private _dictationController;
20
- static styles: CSSResultGroup;
21
- private _handleMouseDown;
22
- private _handleWebSocketMessage;
23
- private _handleWebSocketError;
24
- private _handleWebSocketClose;
25
- private _handleStart;
26
- private _handleStop;
27
- private _handleClick;
28
- startRecording(): void;
29
- stopRecording(): void;
30
- toggleRecording(): void;
31
- render(): import("lit-html").TemplateResult<1>;
32
- }
33
- declare global {
34
- interface HTMLElementTagNameMap {
35
- "recording-button": RecordingButton;
36
- }
37
- }
@@ -1,203 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { consume } from "@lit/context";
8
- import { html, LitElement } from "lit";
9
- import { customElement, property, state } from "lit/decorators.js";
10
- import { accessTokenContext, authConfigContext, debugDisplayAudioContext, dictationConfigContext, recordingStateContext, regionContext, selectedDeviceContext, socketProxyContext, socketUrlContext, tenantNameContext, } from "../contexts/dictation-context.js";
11
- import { DictationController, } from "../controllers/DictationController.js";
12
- import { MediaController } from "../controllers/MediaController.js";
13
- import ButtonStyles from "../styles/buttons.js";
14
- import RecordingButtonStyles from "../styles/recording-button.js";
15
- import { audioLevelChangedEvent, commandEvent, errorEvent, networkActivityEvent, recordingStateChangedEvent, streamClosedEvent, transcriptEvent, usageEvent, } from "../utils/events.js";
16
- import "./audio-visualiser.js";
17
- import "../icons/icons.js";
18
- let RecordingButton = class RecordingButton extends LitElement {
19
- constructor() {
20
- super(...arguments);
21
- this._recordingState = "stopped";
22
- this.preventFocus = false;
23
- this._mediaController = new MediaController(this);
24
- this._dictationController = new DictationController(this);
25
- this._handleWebSocketMessage = (message) => {
26
- switch (message.type) {
27
- case "CONFIG_ACCEPTED":
28
- this._mediaController.mediaRecorder?.start(250);
29
- this._mediaController.startAudioLevelMonitoring((level) => {
30
- this.dispatchEvent(audioLevelChangedEvent(level));
31
- });
32
- this.dispatchEvent(recordingStateChangedEvent("recording"));
33
- break;
34
- case "CONFIG_DENIED":
35
- this.dispatchEvent(errorEvent(`Config denied: ${message.reason ?? "Unknown reason"}`));
36
- this._handleStop();
37
- break;
38
- case "CONFIG_TIMEOUT":
39
- this.dispatchEvent(errorEvent("Config timeout"));
40
- this._handleStop();
41
- break;
42
- case "transcript":
43
- this.dispatchEvent(transcriptEvent(message));
44
- break;
45
- case "command":
46
- this.dispatchEvent(commandEvent(message));
47
- break;
48
- case "usage":
49
- this.dispatchEvent(usageEvent(message));
50
- break;
51
- case "error":
52
- this.dispatchEvent(errorEvent(message.error));
53
- this._handleStop();
54
- break;
55
- }
56
- };
57
- this._handleWebSocketError = (error) => {
58
- this.dispatchEvent(errorEvent("Socket error: " + error.message));
59
- this._handleStop();
60
- };
61
- this._handleWebSocketClose = (event) => {
62
- this.dispatchEvent(streamClosedEvent(event));
63
- };
64
- }
65
- _handleMouseDown(event) {
66
- if (this.preventFocus) {
67
- event.preventDefault();
68
- }
69
- }
70
- async _handleStart() {
71
- this.dispatchEvent(recordingStateChangedEvent("initializing"));
72
- try {
73
- await this._mediaController.initialize(() => {
74
- if (this._recordingState === "recording") {
75
- this.dispatchEvent(errorEvent("Microphone access was lost."));
76
- this._handleStop();
77
- }
78
- });
79
- await this._dictationController.connect(this._mediaController.mediaRecorder, this._dictationConfig, {
80
- onClose: this._handleWebSocketClose,
81
- onError: this._handleWebSocketError,
82
- onMessage: this._handleWebSocketMessage,
83
- onNetworkActivity: (direction, data) => {
84
- this.dispatchEvent(networkActivityEvent(direction, data));
85
- },
86
- });
87
- }
88
- catch (error) {
89
- this.dispatchEvent(errorEvent(error));
90
- await this._handleStop();
91
- }
92
- }
93
- async _handleStop() {
94
- this.dispatchEvent(recordingStateChangedEvent("stopping"));
95
- try {
96
- this._mediaController.stopAudioLevelMonitoring();
97
- await this._mediaController.stopRecording();
98
- await this._dictationController.disconnect(this._handleWebSocketClose);
99
- await this._mediaController.cleanup();
100
- }
101
- catch (error) {
102
- this.dispatchEvent(errorEvent(error));
103
- }
104
- this.dispatchEvent(recordingStateChangedEvent("stopped"));
105
- }
106
- _handleClick() {
107
- if (this._recordingState === "stopped") {
108
- this._handleStart();
109
- }
110
- else if (this._recordingState === "recording") {
111
- this._handleStop();
112
- }
113
- }
114
- startRecording() {
115
- if (this._recordingState !== "stopped") {
116
- return;
117
- }
118
- this._handleStart();
119
- }
120
- stopRecording() {
121
- if (this._recordingState !== "recording") {
122
- return;
123
- }
124
- this._handleStop();
125
- }
126
- toggleRecording() {
127
- this._handleClick();
128
- }
129
- render() {
130
- const isLoading = this._recordingState === "initializing" ||
131
- this._recordingState === "stopping";
132
- const isRecording = this._recordingState === "recording";
133
- return html `
134
- <button
135
- @mousedown=${this._handleMouseDown}
136
- @click=${this._handleClick}
137
- ?disabled=${isLoading}
138
- class=${isRecording ? "red" : "accent"}
139
- aria-label=${isRecording ? "Stop recording" : "Start recording"}
140
- aria-pressed=${isRecording}
141
- >
142
- ${isLoading
143
- ? html `<icon-loading-spinner></icon-loading-spinner>`
144
- : isRecording
145
- ? html `<icon-recording></icon-recording>`
146
- : html `<icon-mic-on></icon-mic-on>`}
147
- <audio-visualiser
148
- .level=${this._mediaController.audioLevel}
149
- ?active=${isRecording}
150
- ></audio-visualiser>
151
- </button>
152
- `;
153
- }
154
- };
155
- RecordingButton.styles = [RecordingButtonStyles, ButtonStyles];
156
- __decorate([
157
- consume({ context: recordingStateContext, subscribe: true }),
158
- state()
159
- ], RecordingButton.prototype, "_recordingState", void 0);
160
- __decorate([
161
- consume({ context: selectedDeviceContext, subscribe: true }),
162
- state()
163
- ], RecordingButton.prototype, "_selectedDevice", void 0);
164
- __decorate([
165
- consume({ context: accessTokenContext, subscribe: true }),
166
- state()
167
- ], RecordingButton.prototype, "_accessToken", void 0);
168
- __decorate([
169
- consume({ context: authConfigContext, subscribe: true }),
170
- state()
171
- ], RecordingButton.prototype, "_authConfig", void 0);
172
- __decorate([
173
- consume({ context: regionContext, subscribe: true }),
174
- state()
175
- ], RecordingButton.prototype, "_region", void 0);
176
- __decorate([
177
- consume({ context: tenantNameContext, subscribe: true }),
178
- state()
179
- ], RecordingButton.prototype, "_tenantName", void 0);
180
- __decorate([
181
- consume({ context: dictationConfigContext, subscribe: true }),
182
- state()
183
- ], RecordingButton.prototype, "_dictationConfig", void 0);
184
- __decorate([
185
- consume({ context: socketUrlContext, subscribe: true }),
186
- state()
187
- ], RecordingButton.prototype, "_socketUrl", void 0);
188
- __decorate([
189
- consume({ context: socketProxyContext, subscribe: true }),
190
- state()
191
- ], RecordingButton.prototype, "_socketProxy", void 0);
192
- __decorate([
193
- consume({ context: debugDisplayAudioContext, subscribe: true }),
194
- state()
195
- ], RecordingButton.prototype, "_debug_displayAudio", void 0);
196
- __decorate([
197
- property({ type: Boolean })
198
- ], RecordingButton.prototype, "preventFocus", void 0);
199
- RecordingButton = __decorate([
200
- customElement("recording-button")
201
- ], RecordingButton);
202
- export { RecordingButton };
203
- //# sourceMappingURL=recording-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recording-button.js","sourceRoot":"","sources":["../../../src/components/recording-button.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { type CSSResultGroup, html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport {\n accessTokenContext,\n authConfigContext,\n debugDisplayAudioContext,\n dictationConfigContext,\n recordingStateContext,\n regionContext,\n selectedDeviceContext,\n socketProxyContext,\n socketUrlContext,\n tenantNameContext,\n} from \"../contexts/dictation-context.js\";\nimport {\n DictationController,\n type TranscribeMessage,\n} from \"../controllers/DictationController.js\";\nimport { MediaController } from \"../controllers/MediaController.js\";\nimport ButtonStyles from \"../styles/buttons.js\";\nimport RecordingButtonStyles from \"../styles/recording-button.js\";\nimport type { ProxyOptions, RecordingState } from \"../types.js\";\nimport {\n audioLevelChangedEvent,\n commandEvent,\n errorEvent,\n networkActivityEvent,\n recordingStateChangedEvent,\n streamClosedEvent,\n transcriptEvent,\n usageEvent,\n} from \"../utils/events.js\";\n\nimport \"./audio-visualiser.js\";\nimport \"../icons/icons.js\";\n\n@customElement(\"recording-button\")\nexport class RecordingButton extends LitElement {\n @consume({ context: recordingStateContext, subscribe: true })\n @state()\n private _recordingState: RecordingState = \"stopped\";\n\n @consume({ context: selectedDeviceContext, subscribe: true })\n @state()\n _selectedDevice?: MediaDeviceInfo;\n\n @consume({ context: accessTokenContext, subscribe: true })\n @state()\n _accessToken?: string;\n\n @consume({ context: authConfigContext, subscribe: true })\n @state()\n _authConfig?: Corti.BearerOptions;\n\n @consume({ context: regionContext, subscribe: true })\n @state()\n _region?: string;\n\n @consume({ context: tenantNameContext, subscribe: true })\n @state()\n _tenantName?: string;\n\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n _dictationConfig?: Corti.TranscribeConfig;\n\n @consume({ context: socketUrlContext, subscribe: true })\n @state()\n _socketUrl?: string;\n\n @consume({ context: socketProxyContext, subscribe: true })\n @state()\n _socketProxy?: ProxyOptions;\n\n @consume({ context: debugDisplayAudioContext, subscribe: true })\n @state()\n _debug_displayAudio?: boolean;\n\n @property({ type: Boolean })\n preventFocus: boolean = false;\n\n private _mediaController = new MediaController(this);\n private _dictationController = new DictationController(this);\n\n static styles: CSSResultGroup = [RecordingButtonStyles, ButtonStyles];\n\n private _handleMouseDown(event: MouseEvent): void {\n if (this.preventFocus) {\n event.preventDefault();\n }\n }\n\n private _handleWebSocketMessage = (message: TranscribeMessage): void => {\n switch (message.type) {\n case \"CONFIG_ACCEPTED\":\n this._mediaController.mediaRecorder?.start(250);\n this._mediaController.startAudioLevelMonitoring((level) => {\n this.dispatchEvent(audioLevelChangedEvent(level));\n });\n this.dispatchEvent(recordingStateChangedEvent(\"recording\"));\n break;\n case \"CONFIG_DENIED\":\n this.dispatchEvent(\n errorEvent(`Config denied: ${message.reason ?? \"Unknown reason\"}`),\n );\n this._handleStop();\n break;\n case \"CONFIG_TIMEOUT\":\n this.dispatchEvent(errorEvent(\"Config timeout\"));\n this._handleStop();\n break;\n case \"transcript\":\n this.dispatchEvent(transcriptEvent(message));\n break;\n case \"command\":\n this.dispatchEvent(commandEvent(message));\n break;\n case \"usage\":\n this.dispatchEvent(usageEvent(message));\n break;\n case \"error\":\n this.dispatchEvent(errorEvent(message.error));\n this._handleStop();\n break;\n }\n };\n\n private _handleWebSocketError = (error: Error): void => {\n this.dispatchEvent(errorEvent(\"Socket error: \" + error.message));\n this._handleStop();\n };\n\n private _handleWebSocketClose = (event: unknown): void => {\n this.dispatchEvent(streamClosedEvent(event));\n };\n\n private async _handleStart(): Promise<void> {\n this.dispatchEvent(recordingStateChangedEvent(\"initializing\"));\n\n try {\n await this._mediaController.initialize(() => {\n if (this._recordingState === \"recording\") {\n this.dispatchEvent(errorEvent(\"Microphone access was lost.\"));\n this._handleStop();\n }\n });\n\n await this._dictationController.connect(\n this._mediaController.mediaRecorder,\n this._dictationConfig,\n {\n onClose: this._handleWebSocketClose,\n onError: this._handleWebSocketError,\n onMessage: this._handleWebSocketMessage,\n onNetworkActivity: (direction, data) => {\n this.dispatchEvent(networkActivityEvent(direction, data));\n },\n },\n );\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n await this._handleStop();\n }\n }\n\n private async _handleStop(): Promise<void> {\n this.dispatchEvent(recordingStateChangedEvent(\"stopping\"));\n\n try {\n this._mediaController.stopAudioLevelMonitoring();\n await this._mediaController.stopRecording();\n\n await this._dictationController.disconnect(this._handleWebSocketClose);\n await this._mediaController.cleanup();\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n this.dispatchEvent(recordingStateChangedEvent(\"stopped\"));\n }\n\n private _handleClick(): void {\n if (this._recordingState === \"stopped\") {\n this._handleStart();\n } else if (this._recordingState === \"recording\") {\n this._handleStop();\n }\n }\n\n public startRecording(): void {\n if (this._recordingState !== \"stopped\") {\n return;\n }\n\n this._handleStart();\n }\n\n public stopRecording(): void {\n if (this._recordingState !== \"recording\") {\n return;\n }\n\n this._handleStop();\n }\n\n public toggleRecording(): void {\n this._handleClick();\n }\n\n render() {\n const isLoading =\n this._recordingState === \"initializing\" ||\n this._recordingState === \"stopping\";\n const isRecording = this._recordingState === \"recording\";\n\n return html`\n <button\n @mousedown=${this._handleMouseDown}\n @click=${this._handleClick}\n ?disabled=${isLoading}\n class=${isRecording ? \"red\" : \"accent\"}\n aria-label=${isRecording ? \"Stop recording\" : \"Start recording\"}\n aria-pressed=${isRecording}\n >\n ${\n isLoading\n ? html`<icon-loading-spinner></icon-loading-spinner>`\n : isRecording\n ? html`<icon-recording></icon-recording>`\n : html`<icon-mic-on></icon-mic-on>`\n }\n <audio-visualiser\n .level=${this._mediaController.audioLevel}\n ?active=${isRecording}\n ></audio-visualiser>\n </button>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"recording-button\": RecordingButton;\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- import { type CSSResultGroup, LitElement, nothing } from "lit";
2
- import type { ConfigurableSettings, RecordingState } from "../types.js";
3
- import "./device-selector.js";
4
- import "./language-selector.js";
5
- import "../icons/icons.js";
6
- export declare class SettingsMenu extends LitElement {
7
- _recordingState: RecordingState;
8
- settingsEnabled: ConfigurableSettings[];
9
- static styles: CSSResultGroup;
10
- render(): import("lit-html").TemplateResult<1> | typeof nothing;
11
- }
12
- declare global {
13
- interface HTMLElementTagNameMap {
14
- "settings-menu": SettingsMenu;
15
- }
16
- }
@@ -1,80 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { consume } from "@lit/context";
8
- import { html, LitElement, nothing } from "lit";
9
- import { customElement, property, state } from "lit/decorators.js";
10
- import { recordingStateContext } from "../contexts/dictation-context.js";
11
- import ButtonStyles from "../styles/buttons.js";
12
- import CalloutStyles from "../styles/callout.js";
13
- import SettingsMenuStyles from "../styles/settings-menu.js";
14
- import { commaSeparatedConverter } from "../utils/converters.js";
15
- import "./device-selector.js";
16
- import "./language-selector.js";
17
- import "../icons/icons.js";
18
- let SettingsMenu = class SettingsMenu extends LitElement {
19
- constructor() {
20
- super(...arguments);
21
- this._recordingState = "stopped";
22
- this.settingsEnabled = ["device", "language"];
23
- }
24
- render() {
25
- if (!this.settingsEnabled || this.settingsEnabled.length === 0) {
26
- return nothing;
27
- }
28
- const isRecording = this._recordingState === "recording";
29
- const showDeviceSelector = this.settingsEnabled.includes("device");
30
- const showLanguageSelector = this.settingsEnabled.includes("language");
31
- return html `
32
- <div class="mic-selector">
33
- <button id="settings-popover-button" popovertarget="settings-popover">
34
- <icon-settings></icon-settings>
35
- </button>
36
- <div id="settings-popover" popover>
37
- <div class="settings-wrapper">
38
- ${isRecording
39
- ? html `
40
- <div class="callout warn">
41
- Recording is in progress. Stop recording to change settings.
42
- </div>
43
- `
44
- : nothing}
45
- ${showDeviceSelector
46
- ? html `<device-selector
47
- ?disabled=${isRecording}
48
- ></device-selector>`
49
- : nothing}
50
- ${showLanguageSelector
51
- ? html `<language-selector
52
- ?disabled=${isRecording}
53
- ></language-selector>`
54
- : nothing}
55
- </div>
56
- </div>
57
- </div>
58
- `;
59
- }
60
- };
61
- SettingsMenu.styles = [
62
- SettingsMenuStyles,
63
- ButtonStyles,
64
- CalloutStyles,
65
- ];
66
- __decorate([
67
- consume({ context: recordingStateContext, subscribe: true }),
68
- state()
69
- ], SettingsMenu.prototype, "_recordingState", void 0);
70
- __decorate([
71
- property({
72
- converter: commaSeparatedConverter,
73
- type: Array,
74
- })
75
- ], SettingsMenu.prototype, "settingsEnabled", void 0);
76
- SettingsMenu = __decorate([
77
- customElement("settings-menu")
78
- ], SettingsMenu);
79
- export { SettingsMenu };
80
- //# sourceMappingURL=settings-menu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings-menu.js","sourceRoot":"","sources":["../../../src/components/settings-menu.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAuB,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,YAAY,MAAM,sBAAsB,CAAC;AAChD,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,sBAAsB,CAAC;AAC9B,OAAO,wBAAwB,CAAC;AAChC,OAAO,mBAAmB,CAAC;AAGpB,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAArC;;QAGL,oBAAe,GAAmB,SAAS,CAAC;QAM5C,oBAAe,GAA2B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAoDnE,CAAC;IA5CC,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,KAAK,WAAW,CAAC;QACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAA;;;;;;;cAQD,WAAW;YACT,CAAC,CAAC,IAAI,CAAA;;;;iBAIL;YACD,CAAC,CAAC,OACN;cAEE,kBAAkB;YAChB,CAAC,CAAC,IAAI,CAAA;8BACQ,WAAW;oCACL;YACpB,CAAC,CAAC,OACN;cAEE,oBAAoB;YAClB,CAAC,CAAC,IAAI,CAAA;8BACQ,WAAW;sCACH;YACtB,CAAC,CAAC,OACN;;;;KAIP,CAAC;IACJ,CAAC;;AAjDM,mBAAM,GAAmB;IAC9B,kBAAkB;IAClB,YAAY;IACZ,aAAa;CACd,AAJY,CAIX;AAZF;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC5D,KAAK,EAAE;qDACoC;AAM5C;IAJC,QAAQ,CAAC;QACR,SAAS,EAAE,uBAAuB;QAClC,IAAI,EAAE,KAAK;KACZ,CAAC;qDAC+D;AATtD,YAAY;IADxB,aAAa,CAAC,eAAe,CAAC;GAClB,YAAY,CA6DxB","sourcesContent":["import { consume } from \"@lit/context\";\nimport { type CSSResultGroup, html, LitElement, nothing } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { recordingStateContext } from \"../contexts/dictation-context.js\";\nimport ButtonStyles from \"../styles/buttons.js\";\nimport CalloutStyles from \"../styles/callout.js\";\nimport SettingsMenuStyles from \"../styles/settings-menu.js\";\nimport type { ConfigurableSettings, RecordingState } from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\n\nimport \"./device-selector.js\";\nimport \"./language-selector.js\";\nimport \"../icons/icons.js\";\n\n@customElement(\"settings-menu\")\nexport class SettingsMenu extends LitElement {\n @consume({ context: recordingStateContext, subscribe: true })\n @state()\n _recordingState: RecordingState = \"stopped\";\n\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n settingsEnabled: ConfigurableSettings[] = [\"device\", \"language\"];\n\n static styles: CSSResultGroup = [\n SettingsMenuStyles,\n ButtonStyles,\n CalloutStyles,\n ];\n\n render() {\n if (!this.settingsEnabled || this.settingsEnabled.length === 0) {\n return nothing;\n }\n\n const isRecording = this._recordingState === \"recording\";\n const showDeviceSelector = this.settingsEnabled.includes(\"device\");\n const showLanguageSelector = this.settingsEnabled.includes(\"language\");\n\n return html`\n <div class=\"mic-selector\">\n <button id=\"settings-popover-button\" popovertarget=\"settings-popover\">\n <icon-settings></icon-settings>\n </button>\n <div id=\"settings-popover\" popover>\n <div class=\"settings-wrapper\">\n ${\n isRecording\n ? html`\n <div class=\"callout warn\">\n Recording is in progress. Stop recording to change settings.\n </div>\n `\n : nothing\n }\n ${\n showDeviceSelector\n ? html`<device-selector\n ?disabled=${isRecording}\n ></device-selector>`\n : nothing\n }\n ${\n showLanguageSelector\n ? html`<language-selector\n ?disabled=${isRecording}\n ></language-selector>`\n : nothing\n }\n </div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"settings-menu\": SettingsMenu;\n }\n}\n"]}
@@ -1,4 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- export declare const LANGUAGES_SUPPORTED_EU: Corti.TranscribeSupportedLanguage[];
3
- export declare const LANGUAGES_SUPPORTED_US: Corti.TranscribeSupportedLanguage[];
4
- export declare const DEFAULT_DICTATION_CONFIG: Corti.TranscribeConfig;
@@ -1,37 +0,0 @@
1
- export const LANGUAGES_SUPPORTED_EU = [
2
- "da",
3
- "de",
4
- "de-CH",
5
- "en",
6
- "en-GB",
7
- "es",
8
- "fr",
9
- "hu",
10
- "it",
11
- "nl",
12
- "no",
13
- "pt",
14
- "sv",
15
- "gsw-CH",
16
- ].sort();
17
- export const LANGUAGES_SUPPORTED_US = [
18
- "da",
19
- "de",
20
- "de-CH",
21
- "en",
22
- "en-GB",
23
- "es",
24
- "fr",
25
- "hu",
26
- "it",
27
- "nl",
28
- "no",
29
- "pt",
30
- "sv",
31
- ].sort();
32
- export const DEFAULT_DICTATION_CONFIG = {
33
- automaticPunctuation: false,
34
- primaryLanguage: "en",
35
- spokenPunctuation: true,
36
- };
37
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAwC;IACzE,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;CACT,CAAC,IAAI,EAAE,CAAC;AACT,MAAM,CAAC,MAAM,sBAAsB,GAAwC;IACzE,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,IAAI,EAAE,CAAC;AACT,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,oBAAoB,EAAE,KAAK;IAC3B,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;CACxB,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\n\nexport const LANGUAGES_SUPPORTED_EU: Corti.TranscribeSupportedLanguage[] = [\n \"da\",\n \"de\",\n \"de-CH\",\n \"en\",\n \"en-GB\",\n \"es\",\n \"fr\",\n \"hu\",\n \"it\",\n \"nl\",\n \"no\",\n \"pt\",\n \"sv\",\n \"gsw-CH\",\n].sort();\nexport const LANGUAGES_SUPPORTED_US: Corti.TranscribeSupportedLanguage[] = [\n \"da\",\n \"de\",\n \"de-CH\",\n \"en\",\n \"en-GB\",\n \"es\",\n \"fr\",\n \"hu\",\n \"it\",\n \"nl\",\n \"no\",\n \"pt\",\n \"sv\",\n].sort();\nexport const DEFAULT_DICTATION_CONFIG: Corti.TranscribeConfig = {\n automaticPunctuation: false,\n primaryLanguage: \"en\",\n spokenPunctuation: true,\n};\n"]}
@@ -1,97 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- import { type CSSResultGroup, LitElement } from "lit";
3
- import type { ProxyOptions, RecordingState } from "../types.js";
4
- export declare const regionContext: {
5
- __context__: string | undefined;
6
- };
7
- export declare const tenantNameContext: {
8
- __context__: string | undefined;
9
- };
10
- export declare const languagesContext: {
11
- __context__: string[] | undefined;
12
- };
13
- export declare const devicesContext: {
14
- __context__: MediaDeviceInfo[] | undefined;
15
- };
16
- export declare const selectedDeviceContext: {
17
- __context__: MediaDeviceInfo | undefined;
18
- };
19
- export declare const recordingStateContext: {
20
- __context__: RecordingState;
21
- };
22
- export declare const accessTokenContext: {
23
- __context__: string | undefined;
24
- };
25
- export declare const dictationConfigContext: {
26
- __context__: Corti.TranscribeConfig | undefined;
27
- };
28
- export declare const authConfigContext: {
29
- __context__: Corti.BearerOptions | undefined;
30
- };
31
- export declare const socketUrlContext: {
32
- __context__: string | undefined;
33
- };
34
- export declare const socketProxyContext: {
35
- __context__: ProxyOptions | undefined;
36
- };
37
- export declare const debugDisplayAudioContext: {
38
- __context__: boolean | undefined;
39
- };
40
- export declare class DictationContext extends LitElement {
41
- region?: string;
42
- tenantName?: string;
43
- recordingState: RecordingState;
44
- private _accessToken?;
45
- set accessToken(token: string | undefined);
46
- get accessToken(): string | undefined;
47
- private _authConfig?;
48
- set authConfig(config: Corti.BearerOptions | undefined);
49
- get authConfig(): Corti.BearerOptions | undefined;
50
- socketUrl?: string;
51
- socketProxy?: ProxyOptions;
52
- dictationConfig?: Corti.TranscribeConfig;
53
- languages?: string[];
54
- devices?: MediaDeviceInfo[];
55
- selectedDevice?: MediaDeviceInfo;
56
- debug_displayAudio?: boolean;
57
- noWrapper: boolean;
58
- static styles: CSSResultGroup;
59
- constructor();
60
- /**
61
- * Sets the access token and parses region/tenant from it.
62
- * @returns ServerConfig with environment, tenant, and accessToken
63
- * @deprecated Use 'accessToken' property instead.
64
- */
65
- setAccessToken(token: string | undefined): {
66
- accessToken: string | undefined;
67
- environment: undefined;
68
- tenant: undefined;
69
- } | {
70
- accessToken: string;
71
- environment: string;
72
- tenant: string;
73
- };
74
- /**
75
- * Sets the auth config and parses region/tenant from the initial token.
76
- * @returns Promise with ServerConfig containing environment, tenant, and accessToken
77
- * @deprecated Use 'authConfig' property instead.
78
- */
79
- setAuthConfig(config?: Corti.BearerOptions): Promise<{
80
- accessToken: string | undefined;
81
- environment: undefined;
82
- tenant: undefined;
83
- } | {
84
- accessToken: string;
85
- environment: string;
86
- tenant: string;
87
- }>;
88
- private _handleLanguageChanged;
89
- private _handleDeviceChanged;
90
- private _handleRecordingStateChanged;
91
- render(): import("lit-html").TemplateResult<1>;
92
- }
93
- declare global {
94
- interface HTMLElementTagNameMap {
95
- "dictation-context-provider": DictationContext;
96
- }
97
- }