@corti/dictation-web 0.7.0-ambient.8 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/{bundle.js → dist/bundle.js} +4459 -4823
  5. package/{components → dist/components}/corti-dictation.d.ts +3 -3
  6. package/{components → dist/components}/corti-dictation.js +5 -4
  7. package/dist/components/corti-dictation.js.map +1 -0
  8. package/dist/components/dictation-device-selector.d.ts +8 -0
  9. package/dist/components/dictation-device-selector.js +15 -0
  10. package/dist/components/dictation-device-selector.js.map +1 -0
  11. package/dist/components/dictation-keybinding-selector.d.ts +8 -0
  12. package/dist/components/dictation-keybinding-selector.js +15 -0
  13. package/dist/components/dictation-keybinding-selector.js.map +1 -0
  14. package/dist/components/dictation-language-selector.d.ts +8 -0
  15. package/dist/components/dictation-language-selector.js +15 -0
  16. package/dist/components/dictation-language-selector.js.map +1 -0
  17. package/{components → dist/components}/dictation-recording-button.d.ts +2 -1
  18. package/{components → dist/components}/dictation-recording-button.js +9 -4
  19. package/dist/components/dictation-recording-button.js.map +1 -0
  20. package/dist/components/dictation-settings-menu.d.ts +15 -0
  21. package/dist/components/dictation-settings-menu.js +34 -0
  22. package/dist/components/dictation-settings-menu.js.map +1 -0
  23. package/dist/constants.d.ts +2 -0
  24. package/dist/constants.js +6 -0
  25. package/dist/constants.js.map +1 -0
  26. package/{contexts → dist/contexts}/dictation-context.d.ts +1 -1
  27. package/{contexts → dist/contexts}/dictation-context.js +4 -3
  28. package/dist/contexts/dictation-context.js.map +1 -0
  29. package/{controllers → dist/controllers}/dictation-controller.d.ts +4 -4
  30. package/{controllers → dist/controllers}/dictation-controller.js +1 -1
  31. package/dist/controllers/dictation-controller.js.map +1 -0
  32. package/dist/core/.tsbuildinfo +1 -0
  33. package/{components → dist/core/components}/corti-root.d.ts +1 -1
  34. package/dist/core/components/corti-root.js.map +1 -0
  35. package/dist/core/components/device-selector-base.d.ts +9 -0
  36. package/{components/device-selector.js → dist/core/components/device-selector-base.js} +11 -17
  37. package/dist/core/components/device-selector-base.js.map +1 -0
  38. package/dist/core/components/keybinding-selector-base.d.ts +10 -0
  39. package/{components/keybinding-selector.js → dist/core/components/keybinding-selector-base.js} +21 -21
  40. package/dist/core/components/keybinding-selector-base.js.map +1 -0
  41. package/dist/core/components/language-selector-base.d.ts +10 -0
  42. package/{components/language-selector.js → dist/core/components/language-selector-base.js} +11 -18
  43. package/dist/core/components/language-selector-base.js.map +1 -0
  44. package/{components → dist/core/components}/recording-button-base.d.ts +10 -7
  45. package/{components → dist/core/components}/recording-button-base.js +17 -15
  46. package/dist/core/components/recording-button-base.js.map +1 -0
  47. package/dist/core/components/settings-menu-base.d.ts +13 -0
  48. package/{components/settings-menu.js → dist/core/components/settings-menu-base.js} +14 -36
  49. package/dist/core/components/settings-menu-base.js.map +1 -0
  50. package/{components/audio-visualiser.d.ts → dist/core/components/speech-audio-visualiser.d.ts} +3 -4
  51. package/{components/audio-visualiser.js → dist/core/components/speech-audio-visualiser.js} +11 -12
  52. package/dist/core/components/speech-audio-visualiser.js.map +1 -0
  53. package/{components/keybinding-input.d.ts → dist/core/components/speech-keybinding-input.d.ts} +3 -4
  54. package/{components/keybinding-input.js → dist/core/components/speech-keybinding-input.js} +22 -22
  55. package/dist/core/components/speech-keybinding-input.js.map +1 -0
  56. package/{constants.d.ts → dist/core/constants.d.ts} +0 -2
  57. package/{constants.js → dist/core/constants.js} +0 -14
  58. package/dist/core/constants.js.map +1 -0
  59. package/dist/core/contexts/mixins/auth-context.js.map +1 -0
  60. package/dist/core/contexts/mixins/devices-context.js.map +1 -0
  61. package/{contexts → dist/core/contexts}/mixins/keybindings-context.js +3 -2
  62. package/dist/core/contexts/mixins/keybindings-context.js.map +1 -0
  63. package/dist/core/contexts/mixins/languages-context.js.map +1 -0
  64. package/dist/core/contexts/mixins/proxy-context.js.map +1 -0
  65. package/dist/core/contexts/mixins/recording-state-context.js.map +1 -0
  66. package/dist/core/contexts/mixins/types.js.map +1 -0
  67. package/{contexts → dist/core/contexts}/root-context.d.ts +1 -1
  68. package/dist/core/contexts/root-context.js.map +1 -0
  69. package/dist/core/controllers/devices-controller.js.map +1 -0
  70. package/dist/core/controllers/keybinding-controller.js.map +1 -0
  71. package/dist/core/controllers/languages-controller.js.map +1 -0
  72. package/dist/core/controllers/media-controller.js.map +1 -0
  73. package/dist/core/controllers/socket-controller.js.map +1 -0
  74. package/{icons → dist/core/icons}/icons.d.ts +6 -6
  75. package/{icons → dist/core/icons}/icons.js +7 -7
  76. package/dist/core/icons/icons.js.map +1 -0
  77. package/dist/core/icons/index.js.map +1 -0
  78. package/dist/core/socket-messages.d.ts +4 -0
  79. package/dist/core/socket-messages.js +2 -0
  80. package/dist/core/socket-messages.js.map +1 -0
  81. package/dist/core/styles/audio-visualiser.js.map +1 -0
  82. package/dist/core/styles/buttons.js.map +1 -0
  83. package/dist/core/styles/callout.js.map +1 -0
  84. package/dist/core/styles/component-styles.js.map +1 -0
  85. package/dist/core/styles/keybinding-selector.js.map +1 -0
  86. package/dist/core/styles/recording-button.js.map +1 -0
  87. package/dist/core/styles/select.js.map +1 -0
  88. package/dist/core/styles/settings-menu.js.map +1 -0
  89. package/{types.d.ts → dist/core/types.d.ts} +0 -3
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/core/utils/auth.js.map +1 -0
  92. package/dist/core/utils/converters.js.map +1 -0
  93. package/dist/core/utils/custom-elements.d.ts +6 -0
  94. package/dist/core/utils/custom-elements.js +23 -0
  95. package/dist/core/utils/custom-elements.js.map +1 -0
  96. package/dist/core/utils/devices.js.map +1 -0
  97. package/dist/core/utils/events.js.map +1 -0
  98. package/dist/core/utils/keybinding.js.map +1 -0
  99. package/dist/core/utils/languages.js.map +1 -0
  100. package/dist/core/utils/media.js.map +1 -0
  101. package/dist/core/utils/token.js.map +1 -0
  102. package/dist/core/utils/validation.js.map +1 -0
  103. package/{index.d.ts → dist/index.d.ts} +6 -6
  104. package/dist/index.js +8 -0
  105. package/dist/index.js.map +1 -0
  106. package/package.json +19 -13
  107. package/.tsbuildinfo +0 -1
  108. package/components/ambient-recording-button.d.ts +0 -16
  109. package/components/ambient-recording-button.js +0 -68
  110. package/components/ambient-recording-button.js.map +0 -1
  111. package/components/ambient-virtual-mode-selector.d.ts +0 -14
  112. package/components/ambient-virtual-mode-selector.js +0 -69
  113. package/components/ambient-virtual-mode-selector.js.map +0 -1
  114. package/components/audio-visualiser.js.map +0 -1
  115. package/components/corti-ambient.d.ts +0 -35
  116. package/components/corti-ambient.js +0 -126
  117. package/components/corti-ambient.js.map +0 -1
  118. package/components/corti-dictation.js.map +0 -1
  119. package/components/corti-root.js.map +0 -1
  120. package/components/device-selector.d.ts +0 -15
  121. package/components/device-selector.js.map +0 -1
  122. package/components/dictation-recording-button.js.map +0 -1
  123. package/components/keybinding-input.js.map +0 -1
  124. package/components/keybinding-selector.d.ts +0 -15
  125. package/components/keybinding-selector.js.map +0 -1
  126. package/components/language-selector.d.ts +0 -16
  127. package/components/language-selector.js.map +0 -1
  128. package/components/recording-button-base.js.map +0 -1
  129. package/components/settings-menu.d.ts +0 -19
  130. package/components/settings-menu.js.map +0 -1
  131. package/constants.js.map +0 -1
  132. package/contexts/ambient-context.d.ts +0 -24
  133. package/contexts/ambient-context.js +0 -93
  134. package/contexts/ambient-context.js.map +0 -1
  135. package/contexts/dictation-context.js.map +0 -1
  136. package/contexts/mixins/auth-context.js.map +0 -1
  137. package/contexts/mixins/devices-context.js.map +0 -1
  138. package/contexts/mixins/keybindings-context.js.map +0 -1
  139. package/contexts/mixins/languages-context.js.map +0 -1
  140. package/contexts/mixins/proxy-context.js.map +0 -1
  141. package/contexts/mixins/recording-state-context.js.map +0 -1
  142. package/contexts/mixins/types.js.map +0 -1
  143. package/contexts/root-context.js.map +0 -1
  144. package/controllers/ambient-controller.d.ts +0 -16
  145. package/controllers/ambient-controller.js +0 -24
  146. package/controllers/ambient-controller.js.map +0 -1
  147. package/controllers/devices-controller.js.map +0 -1
  148. package/controllers/dictation-controller.js.map +0 -1
  149. package/controllers/keybinding-controller.js.map +0 -1
  150. package/controllers/languages-controller.js.map +0 -1
  151. package/controllers/media-controller.js.map +0 -1
  152. package/controllers/socket-controller.js.map +0 -1
  153. package/icons/icons.js.map +0 -1
  154. package/icons/index.js.map +0 -1
  155. package/index.js +0 -8
  156. package/index.js.map +0 -1
  157. package/styles/ambient-virtual-mode-selector.d.ts +0 -2
  158. package/styles/ambient-virtual-mode-selector.js +0 -101
  159. package/styles/ambient-virtual-mode-selector.js.map +0 -1
  160. package/styles/audio-visualiser.js.map +0 -1
  161. package/styles/buttons.js.map +0 -1
  162. package/styles/callout.js.map +0 -1
  163. package/styles/component-styles.js.map +0 -1
  164. package/styles/keybinding-selector.js.map +0 -1
  165. package/styles/recording-button.js.map +0 -1
  166. package/styles/select.js.map +0 -1
  167. package/styles/settings-menu.js.map +0 -1
  168. package/types.js.map +0 -1
  169. package/utils/auth.js.map +0 -1
  170. package/utils/converters.js.map +0 -1
  171. package/utils/custom-elements.d.ts +0 -6
  172. package/utils/custom-elements.js +0 -11
  173. package/utils/custom-elements.js.map +0 -1
  174. package/utils/devices.js.map +0 -1
  175. package/utils/events.js.map +0 -1
  176. package/utils/keybinding.js.map +0 -1
  177. package/utils/languages.js.map +0 -1
  178. package/utils/media.js.map +0 -1
  179. package/utils/token.js.map +0 -1
  180. package/utils/validation.js.map +0 -1
  181. /package/{components → dist/core/components}/corti-root.js +0 -0
  182. /package/{contexts → dist/core/contexts}/mixins/auth-context.d.ts +0 -0
  183. /package/{contexts → dist/core/contexts}/mixins/auth-context.js +0 -0
  184. /package/{contexts → dist/core/contexts}/mixins/devices-context.d.ts +0 -0
  185. /package/{contexts → dist/core/contexts}/mixins/devices-context.js +0 -0
  186. /package/{contexts → dist/core/contexts}/mixins/keybindings-context.d.ts +0 -0
  187. /package/{contexts → dist/core/contexts}/mixins/languages-context.d.ts +0 -0
  188. /package/{contexts → dist/core/contexts}/mixins/languages-context.js +0 -0
  189. /package/{contexts → dist/core/contexts}/mixins/proxy-context.d.ts +0 -0
  190. /package/{contexts → dist/core/contexts}/mixins/proxy-context.js +0 -0
  191. /package/{contexts → dist/core/contexts}/mixins/recording-state-context.d.ts +0 -0
  192. /package/{contexts → dist/core/contexts}/mixins/recording-state-context.js +0 -0
  193. /package/{contexts → dist/core/contexts}/mixins/types.d.ts +0 -0
  194. /package/{contexts → dist/core/contexts}/mixins/types.js +0 -0
  195. /package/{contexts → dist/core/contexts}/root-context.js +0 -0
  196. /package/{controllers → dist/core/controllers}/devices-controller.d.ts +0 -0
  197. /package/{controllers → dist/core/controllers}/devices-controller.js +0 -0
  198. /package/{controllers → dist/core/controllers}/keybinding-controller.d.ts +0 -0
  199. /package/{controllers → dist/core/controllers}/keybinding-controller.js +0 -0
  200. /package/{controllers → dist/core/controllers}/languages-controller.d.ts +0 -0
  201. /package/{controllers → dist/core/controllers}/languages-controller.js +0 -0
  202. /package/{controllers → dist/core/controllers}/media-controller.d.ts +0 -0
  203. /package/{controllers → dist/core/controllers}/media-controller.js +0 -0
  204. /package/{controllers → dist/core/controllers}/socket-controller.d.ts +0 -0
  205. /package/{controllers → dist/core/controllers}/socket-controller.js +0 -0
  206. /package/{icons → dist/core/icons}/index.d.ts +0 -0
  207. /package/{icons → dist/core/icons}/index.js +0 -0
  208. /package/{styles → dist/core/styles}/audio-visualiser.d.ts +0 -0
  209. /package/{styles → dist/core/styles}/audio-visualiser.js +0 -0
  210. /package/{styles → dist/core/styles}/buttons.d.ts +0 -0
  211. /package/{styles → dist/core/styles}/buttons.js +0 -0
  212. /package/{styles → dist/core/styles}/callout.d.ts +0 -0
  213. /package/{styles → dist/core/styles}/callout.js +0 -0
  214. /package/{styles → dist/core/styles}/component-styles.d.ts +0 -0
  215. /package/{styles → dist/core/styles}/component-styles.js +0 -0
  216. /package/{styles → dist/core/styles}/keybinding-selector.d.ts +0 -0
  217. /package/{styles → dist/core/styles}/keybinding-selector.js +0 -0
  218. /package/{styles → dist/core/styles}/recording-button.d.ts +0 -0
  219. /package/{styles → dist/core/styles}/recording-button.js +0 -0
  220. /package/{styles → dist/core/styles}/select.d.ts +0 -0
  221. /package/{styles → dist/core/styles}/select.js +0 -0
  222. /package/{styles → dist/core/styles}/settings-menu.d.ts +0 -0
  223. /package/{styles → dist/core/styles}/settings-menu.js +0 -0
  224. /package/{types.js → dist/core/types.js} +0 -0
  225. /package/{utils → dist/core/utils}/auth.d.ts +0 -0
  226. /package/{utils → dist/core/utils}/auth.js +0 -0
  227. /package/{utils → dist/core/utils}/converters.d.ts +0 -0
  228. /package/{utils → dist/core/utils}/converters.js +0 -0
  229. /package/{utils → dist/core/utils}/devices.d.ts +0 -0
  230. /package/{utils → dist/core/utils}/devices.js +0 -0
  231. /package/{utils → dist/core/utils}/events.d.ts +0 -0
  232. /package/{utils → dist/core/utils}/events.js +0 -0
  233. /package/{utils → dist/core/utils}/keybinding.d.ts +0 -0
  234. /package/{utils → dist/core/utils}/keybinding.js +0 -0
  235. /package/{utils → dist/core/utils}/languages.d.ts +0 -0
  236. /package/{utils → dist/core/utils}/languages.js +0 -0
  237. /package/{utils → dist/core/utils}/media.d.ts +0 -0
  238. /package/{utils → dist/core/utils}/media.js +0 -0
  239. /package/{utils → dist/core/utils}/token.d.ts +0 -0
  240. /package/{utils → dist/core/utils}/token.js +0 -0
  241. /package/{utils → dist/core/utils}/validation.d.ts +0 -0
  242. /package/{utils → dist/core/utils}/validation.js +0 -0
@@ -1,16 +0,0 @@
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
- }
@@ -1,68 +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
- 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 corti-ambient or 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
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient-recording-button.js","sourceRoot":"","sources":["../../../src/components/ambient-recording-button.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,GAGlB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,0BAA0B,GAAG,GAAG,EAAE,CACtC,IAAI,KAAK,CACP,gFAAgF,CACjF,CAAC;AAGG,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,mBAG3C;IAHM;;;QAYK,sBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAoC5D,CAAC;IAlCiB,cAAc;QAC5B,IAAI,CAAC,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,cAAc;QAClC,IAAI,CAAC,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;IAES,iBAAiB;QACzB,MAAM,aAAa,GAAG,uBAAA,IAAI,uFAAsB,MAA1B,IAAI,CAAwB,CAAC;QAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,0BAA0B,EAAE,CAAC;QACrC,CAAC;QAED,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc,IAAI,qBAAqB;YAC3D,aAAa;SACd,CAAC;IACJ,CAAC;CAKF,CAAA;;;IAFG,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;AACrC,CAAC;AAzCO;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3D,KAAK,EAAE;8DACoC;AAIpC;IAFP,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3D,KAAK,EAAE;8DACwB;AAVrB,sBAAsB;IADlC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,sBAAsB,CAgDlC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { DEFAULT_STREAM_CONFIG } from \"../constants.js\";\nimport {\n ambientConfigContext,\n interactionIdContext,\n} from \"../contexts/ambient-context.js\";\nimport {\n AmbientController,\n type AmbientStreamSessionConfig,\n type StreamAmbientMessage,\n} from \"../controllers/ambient-controller.js\";\nimport { errorEvent } from \"../utils/events.js\";\nimport { RecordingButtonBase } from \"./recording-button-base.js\";\n\nconst interactionIdRequiredError = () =>\n new Error(\n \"interactionId is required. Set interactionId on corti-ambient or ambient-root.\",\n );\n\n@customElement(\"ambient-recording-button\")\nexport class AmbientRecordingButton extends RecordingButtonBase<\n AmbientStreamSessionConfig,\n StreamAmbientMessage\n> {\n @consume({ context: ambientConfigContext, subscribe: true })\n @state()\n private _ambientConfig?: Corti.StreamConfig;\n\n @consume({ context: interactionIdContext, subscribe: true })\n @state()\n private _interactionId?: string;\n\n protected _socketController = new AmbientController(this);\n\n public override startRecording(): void {\n if (!this.#trimmedInteractionId()) {\n this.dispatchEvent(errorEvent(interactionIdRequiredError()));\n return;\n }\n\n super.startRecording();\n }\n\n public override async openConnection(): Promise<void> {\n if (!this.#trimmedInteractionId()) {\n this.dispatchEvent(errorEvent(interactionIdRequiredError()));\n return;\n }\n\n await super.openConnection();\n }\n\n protected _getConnectConfig(): AmbientStreamSessionConfig {\n const interactionId = this.#trimmedInteractionId();\n\n if (!interactionId) {\n throw interactionIdRequiredError();\n }\n\n return {\n configuration: this._ambientConfig ?? DEFAULT_STREAM_CONFIG,\n interactionId,\n };\n }\n\n #trimmedInteractionId(): string | undefined {\n return this._interactionId?.trim();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-recording-button\": AmbientRecordingButton;\n }\n}\n"]}
@@ -1,14 +0,0 @@
1
- import { LitElement } from "lit";
2
- import "../icons/icons.js";
3
- export declare class AmbientVirtualModeSelector extends LitElement {
4
- #private;
5
- _virtualMode: boolean;
6
- disabled: boolean;
7
- static styles: import("lit").CSSResult;
8
- render(): import("lit-html").TemplateResult<1>;
9
- }
10
- declare global {
11
- interface HTMLElementTagNameMap {
12
- "ambient-virtual-mode-selector": AmbientVirtualModeSelector;
13
- }
14
- }
@@ -1,69 +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
- 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 _AmbientVirtualModeSelector_handleToggle;
13
- import { consume } from "@lit/context";
14
- import { html, LitElement } from "lit";
15
- import { customElement, property, state } from "lit/decorators.js";
16
- import { virtualModeContext } from "../contexts/ambient-context.js";
17
- import AmbientVirtualModeSelectorStyles from "../styles/ambient-virtual-mode-selector.js";
18
- import { virtualModeChangedEvent } from "../utils/events.js";
19
- import "../icons/icons.js";
20
- let AmbientVirtualModeSelector = class AmbientVirtualModeSelector extends LitElement {
21
- constructor() {
22
- super(...arguments);
23
- this._virtualMode = false;
24
- this.disabled = false;
25
- _AmbientVirtualModeSelector_handleToggle.set(this, (e) => {
26
- const checked = e.target.checked;
27
- this.dispatchEvent(virtualModeChangedEvent(checked));
28
- });
29
- }
30
- render() {
31
- return html `
32
- <div class="virtual-mode-row">
33
- <div class="virtual-mode-content">
34
- <div class="virtual-mode-header">
35
- <icon-headset></icon-headset>
36
- <span class="virtual-mode-title">Virtual mode</span>
37
- </div>
38
- <span class="virtual-mode-description">
39
- Share audio from another window or tab
40
- </span>
41
- </div>
42
- <input
43
- id="virtual-mode-toggle"
44
- class="switch"
45
- type="checkbox"
46
- role="switch"
47
- aria-label="Enable virtual mode"
48
- .checked=${this._virtualMode}
49
- ?disabled=${this.disabled}
50
- @change=${__classPrivateFieldGet(this, _AmbientVirtualModeSelector_handleToggle, "f")}
51
- />
52
- </div>
53
- `;
54
- }
55
- };
56
- _AmbientVirtualModeSelector_handleToggle = new WeakMap();
57
- AmbientVirtualModeSelector.styles = AmbientVirtualModeSelectorStyles;
58
- __decorate([
59
- consume({ context: virtualModeContext, subscribe: true }),
60
- state()
61
- ], AmbientVirtualModeSelector.prototype, "_virtualMode", void 0);
62
- __decorate([
63
- property({ type: Boolean })
64
- ], AmbientVirtualModeSelector.prototype, "disabled", void 0);
65
- AmbientVirtualModeSelector = __decorate([
66
- customElement("ambient-virtual-mode-selector")
67
- ], AmbientVirtualModeSelector);
68
- export { AmbientVirtualModeSelector };
69
- //# sourceMappingURL=ambient-virtual-mode-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient-virtual-mode-selector.js","sourceRoot":"","sources":["../../../src/components/ambient-virtual-mode-selector.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,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,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,gCAAgC,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,mBAAmB,CAAC;AAGpB,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,UAAU;IAAnD;;QAGL,iBAAY,GAAY,KAAK,CAAC;QAG9B,aAAQ,GAAY,KAAK,CAAC;QAI1B,mDAAgB,CAAC,CAAQ,EAAQ,EAAE;YACjC,MAAM,OAAO,GAAI,CAAC,CAAC,MAA2B,CAAC,OAAO,CAAC;YACvD,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC,EAAC;IA2BJ,CAAC;IAzBC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;qBAiBM,IAAI,CAAC,YAAY;sBAChB,IAAI,CAAC,QAAQ;oBACf,uBAAA,IAAI,gDAAc;;;KAGjC,CAAC;IACJ,CAAC;;;AA/BM,iCAAM,GAAG,gCAAgC,AAAnC,CAAoC;AALjD;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzD,KAAK,EAAE;gEACsB;AAG9B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4DACF;AANf,0BAA0B;IADtC,aAAa,CAAC,+BAA+B,CAAC;GAClC,0BAA0B,CAwCtC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { virtualModeContext } from \"../contexts/ambient-context.js\";\nimport AmbientVirtualModeSelectorStyles from \"../styles/ambient-virtual-mode-selector.js\";\nimport { virtualModeChangedEvent } from \"../utils/events.js\";\n\nimport \"../icons/icons.js\";\n\n@customElement(\"ambient-virtual-mode-selector\")\nexport class AmbientVirtualModeSelector extends LitElement {\n @consume({ context: virtualModeContext, subscribe: true })\n @state()\n _virtualMode: boolean = false;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n static styles = AmbientVirtualModeSelectorStyles;\n\n #handleToggle = (e: Event): void => {\n const checked = (e.target as HTMLInputElement).checked;\n this.dispatchEvent(virtualModeChangedEvent(checked));\n };\n\n render() {\n return html`\n <div class=\"virtual-mode-row\">\n <div class=\"virtual-mode-content\">\n <div class=\"virtual-mode-header\">\n <icon-headset></icon-headset>\n <span class=\"virtual-mode-title\">Virtual mode</span>\n </div>\n <span class=\"virtual-mode-description\">\n Share audio from another window or tab\n </span>\n </div>\n <input\n id=\"virtual-mode-toggle\"\n class=\"switch\"\n type=\"checkbox\"\n role=\"switch\"\n aria-label=\"Enable virtual mode\"\n .checked=${this._virtualMode}\n ?disabled=${this.disabled}\n @change=${this.#handleToggle}\n />\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-virtual-mode-selector\": AmbientVirtualModeSelector;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"audio-visualiser.js","sourceRoot":"","sources":["../../../src/components/audio-visualiser.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGnD,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,UAAU;IAAjD;;QAEL,UAAK,GAAW,CAAC,CAAC;QAGlB,WAAM,GAAY,KAAK,CAAC;QAGxB,iBAAY,GAAW,CAAC,CAAC;IA+B3B,CAAC;IA3BC,UAAU,CAAC,iBAAuC;QAChD,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM;QACJ,kEAAkE;QAClE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,GAAG,CAClB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EACxB,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAA,cAAc,QAAQ,CAAC;YACzB,MAAM,EAAE,CAAC,GAAG,cAAc;YAC1B,OAAO,EAAE,IAAI;SACd,CAAC,KAAK,CACV,CAAC;QAEF,OAAO,IAAI,CAAA;mBACI,QAAQ,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI;SAChB,CAAC;UACE,QAAQ;;KAEb,CAAC;IACJ,CAAC;;AA5BM,+BAAM,GAAG,qBAAqB,AAAxB,CAAyB;AARtC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uDACT;AAGlB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wDACJ;AAGxB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8DACF;AARd,wBAAwB;IADpC,iBAAiB,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;GAC/D,wBAAwB,CAuCpC","sourcesContent":["import { html, LitElement, type PropertyValues } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { range } from \"lit/directives/range.js\";\nimport AudioVisualiserStyles from \"../styles/audio-visualiser.js\";\nimport { dualCustomElement } from \"../utils/custom-elements.js\";\nimport { normalizeToRange } from \"../utils/validation.js\";\n\n@dualCustomElement(\"dictation-audio-visualiser\", \"ambient-audio-visualiser\")\nexport class DictationAudioVisualiser extends LitElement {\n @property({ type: Number })\n level: number = 0;\n\n @property({ type: Boolean })\n active: boolean = false;\n\n @property({ type: Number })\n segmentCount: number = 5;\n\n static styles = AudioVisualiserStyles;\n\n willUpdate(changedProperties: PropertyValues<this>): void {\n if (changedProperties.has(\"level\")) {\n this.level = normalizeToRange(this.level);\n }\n }\n\n render() {\n // Each segment represents 20%. Using Math.round to fill segments.\n const activeSegments = Math.round(this.level * this.segmentCount);\n const segments = map(\n range(this.segmentCount),\n (i) =>\n html`<div class=${classMap({\n active: i < activeSegments,\n segment: true,\n })} />`,\n );\n\n return html`\n <div class=${classMap({\n active: this.active,\n container: true,\n })}>\n ${segments}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-audio-visualiser\": DictationAudioVisualiser;\n \"dictation-audio-visualiser\": DictationAudioVisualiser;\n }\n}\n"]}
@@ -1,35 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- import type { AmbientRoot } from "../contexts/ambient-context.js";
3
- import type { ConfigurableSettings } from "../types.js";
4
- import type { AmbientRecordingButton } from "./ambient-recording-button.js";
5
- import { CortiRoot } from "./corti-root.js";
6
- import "../contexts/ambient-context.js";
7
- import "./ambient-recording-button.js";
8
- import "./settings-menu.js";
9
- export declare class CortiAmbient extends CortiRoot<AmbientRoot, AmbientRecordingButton> {
10
- settingsEnabled: ConfigurableSettings[];
11
- /**
12
- * Stream configuration for ambient capture (modes, transcription, etc.).
13
- */
14
- set ambientConfig(value: Corti.StreamConfig);
15
- get ambientConfig(): Corti.StreamConfig;
16
- _ambientConfig: Corti.StreamConfig;
17
- /**
18
- * Stream interaction id passed to `stream.connect` for this session.
19
- */
20
- set interactionId(value: string | undefined);
21
- get interactionId(): string | undefined;
22
- _interactionId?: string;
23
- /**
24
- * Enables virtual mode behavior for ambient recording.
25
- */
26
- set virtualMode(value: boolean);
27
- get virtualMode(): boolean;
28
- _virtualMode: boolean;
29
- render(): import("lit-html").TemplateResult<1>;
30
- }
31
- declare global {
32
- interface HTMLElementTagNameMap {
33
- "corti-ambient": CortiAmbient;
34
- }
35
- }
@@ -1,126 +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 { 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 { commaSeparatedConverter } from "../utils/converters.js";
13
- import { CortiRoot } from "./corti-root.js";
14
- import "../contexts/ambient-context.js";
15
- import "./ambient-recording-button.js";
16
- import "./settings-menu.js";
17
- let CortiAmbient = class CortiAmbient extends CortiRoot {
18
- constructor() {
19
- // ─────────────────────────────────────────────────────────────────────────────
20
- // Properties
21
- // ─────────────────────────────────────────────────────────────────────────────
22
- super(...arguments);
23
- this.settingsEnabled = [
24
- "device",
25
- "language",
26
- "virtualMode",
27
- ];
28
- this._ambientConfig = DEFAULT_STREAM_CONFIG;
29
- this._virtualMode = false;
30
- }
31
- /**
32
- * Stream configuration for ambient capture (modes, transcription, etc.).
33
- */
34
- set ambientConfig(value) {
35
- this._ambientConfig = value;
36
- }
37
- get ambientConfig() {
38
- return (this._contextProviderRef.value?.ambientConfig ??
39
- this._ambientConfig ??
40
- DEFAULT_STREAM_CONFIG);
41
- }
42
- /**
43
- * Stream interaction id passed to `stream.connect` for this session.
44
- */
45
- set interactionId(value) {
46
- this._interactionId = value;
47
- }
48
- get interactionId() {
49
- return this._contextProviderRef.value?.interactionId ?? this._interactionId;
50
- }
51
- /**
52
- * Enables virtual mode behavior for ambient recording.
53
- */
54
- set virtualMode(value) {
55
- this._virtualMode = value;
56
- }
57
- get virtualMode() {
58
- return this._contextProviderRef.value?.virtualMode ?? this._virtualMode;
59
- }
60
- // ─────────────────────────────────────────────────────────────────────────────
61
- // Render
62
- // ─────────────────────────────────────────────────────────────────────────────
63
- render() {
64
- const isHidden = !this.accessToken &&
65
- !this.authConfig &&
66
- !this.socketUrl &&
67
- !this.socketProxy;
68
- return html `
69
- <ambient-root
70
- ${ref(this._contextProviderRef)}
71
- class=${classMap({ hidden: isHidden })}
72
- .accessToken=${this.accessToken}
73
- .authConfig=${this.authConfig}
74
- .socketUrl=${this.socketUrl}
75
- .socketProxy=${this.socketProxy}
76
- .ambientConfig=${this._ambientConfig}
77
- .interactionId=${this._interactionId}
78
- ?virtualMode=${this.virtualMode}
79
- .languages=${this._languagesSupported}
80
- .devices=${this._devices}
81
- .selectedDevice=${this._selectedDevice}
82
- .pushToTalkKeybinding=${this._pushToTalkKeybinding}
83
- .toggleToTalkKeybinding=${this._toggleToTalkKeybinding}
84
- >
85
- <ambient-recording-button
86
- ${ref(this._recordingButtonRef)}
87
- ?allowButtonFocus=${this.allowButtonFocus}
88
- ></ambient-recording-button>
89
- ${this.settingsEnabled?.length > 0
90
- ? html `<ambient-settings-menu
91
- .settingsEnabled=${this.settingsEnabled}
92
- ></ambient-settings-menu>`
93
- : nothing}
94
- </ambient-root>
95
- `;
96
- }
97
- };
98
- __decorate([
99
- property({
100
- converter: commaSeparatedConverter,
101
- type: Array,
102
- })
103
- ], CortiAmbient.prototype, "settingsEnabled", void 0);
104
- __decorate([
105
- property({ attribute: false, type: Object })
106
- ], CortiAmbient.prototype, "ambientConfig", null);
107
- __decorate([
108
- state()
109
- ], CortiAmbient.prototype, "_ambientConfig", void 0);
110
- __decorate([
111
- property({ type: String })
112
- ], CortiAmbient.prototype, "interactionId", null);
113
- __decorate([
114
- state()
115
- ], CortiAmbient.prototype, "_interactionId", void 0);
116
- __decorate([
117
- property({ attribute: "virtualMode", type: Boolean })
118
- ], CortiAmbient.prototype, "virtualMode", null);
119
- __decorate([
120
- state()
121
- ], CortiAmbient.prototype, "_virtualMode", void 0);
122
- CortiAmbient = __decorate([
123
- customElement("corti-ambient")
124
- ], CortiAmbient);
125
- export { CortiAmbient };
126
- //# sourceMappingURL=corti-ambient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"corti-ambient.js","sourceRoot":"","sources":["../../../src/components/corti-ambient.ts"],"names":[],"mappings":"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","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 { ConfigurableSettings } from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.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 @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n override settingsEnabled: ConfigurableSettings[] = [\n \"device\",\n \"language\",\n \"virtualMode\",\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 * Enables virtual mode behavior for ambient recording.\n */\n @property({ attribute: \"virtualMode\", type: Boolean })\n set virtualMode(value: boolean) {\n this._virtualMode = value;\n }\n\n get virtualMode(): boolean {\n return this._contextProviderRef.value?.virtualMode ?? this._virtualMode;\n }\n\n @state()\n _virtualMode: boolean = false;\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 ?virtualMode=${this.virtualMode}\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`<ambient-settings-menu\n .settingsEnabled=${this.settingsEnabled}\n ></ambient-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 +0,0 @@
1
- {"version":3,"file":"corti-dictation.js","sourceRoot":"","sources":["../../../src/components/corti-dictation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } 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_DICTATION_CONFIG } from \"../constants.js\";\nimport type { DictationRoot } from \"../contexts/dictation-context.js\";\nimport { CortiRoot } from \"./corti-root.js\";\nimport type { DictationRecordingButton } from \"./dictation-recording-button.js\";\n\nimport \"../contexts/dictation-context.js\";\nimport \"./dictation-recording-button.js\";\nimport \"./settings-menu.js\";\n\n@customElement(\"corti-dictation\")\nexport class CortiDictation extends CortiRoot<\n DictationRoot,\n DictationRecordingButton\n> {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Overrides any device selection and instead uses getDisplayMedia to stream system audio.\n * Should only be used for debugging.\n */\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio: boolean = false;\n\n /**\n * Configuration settings for dictation\n */\n @property({ attribute: false, type: Object })\n set dictationConfig(value: Corti.TranscribeConfig) {\n this._dictationConfig = value;\n }\n\n get dictationConfig(): Corti.TranscribeConfig {\n return (\n this._contextProviderRef.value?.dictationConfig || this._dictationConfig\n );\n }\n\n @state()\n _dictationConfig: Corti.TranscribeConfig = DEFAULT_DICTATION_CONFIG;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Set the latest access token.\n * @returns ServerConfig with environment, tenant, and accessToken\n * @deprecated Use 'accessToken' property instead.\n */\n public setAccessToken(token: string) {\n this.accessToken = token;\n\n return (\n this._contextProviderRef.value?.setAccessToken(token) ?? {\n accessToken: token,\n environment: undefined,\n tenant: undefined,\n }\n );\n }\n\n /**\n * Set the auth configuration for OAuth flows.\n * @returns Promise with ServerConfig containing environment, tenant, and accessToken\n * @deprecated Use 'authConfig' property instead.\n */\n public async setAuthConfig(config: CortiAuth.AuthTokenDerivable) {\n this.authConfig = config;\n\n return (\n this._contextProviderRef.value?.setAuthConfig(config) ?? {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n }\n );\n }\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 <dictation-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 .dictationConfig=${this._dictationConfig}\n .languages=${this._languagesSupported}\n .devices=${this._devices}\n .selectedDevice=${this._selectedDevice}\n .debug_displayAudio=${this.debug_displayAudio}\n .pushToTalkKeybinding=${this._pushToTalkKeybinding}\n .toggleToTalkKeybinding=${this._toggleToTalkKeybinding}\n >\n <dictation-recording-button\n ${ref(this._recordingButtonRef)}\n ?allowButtonFocus=${this.allowButtonFocus}\n ></dictation-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 </dictation-root>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"corti-dictation\": CortiDictation;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"corti-root.js","sourceRoot":"","sources":["../../../src/components/corti-root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti, CortiAuth } from \"@corti/sdk\";\nimport { css, html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { createRef, type Ref } from \"lit/directives/ref.js\";\nimport type {\n ConfigurableSettings,\n ProxyOptions,\n RecordingState,\n} from \"../types.js\";\nimport { commaSeparatedConverter } from \"../utils/converters.js\";\n\ntype CortiProviderRoot = LitElement & {\n recordingState?: RecordingState;\n languages?: Corti.TranscribeSupportedLanguage[];\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo | undefined;\n pushToTalkKeybinding?: string | null | undefined;\n toggleToTalkKeybinding?: string | null | undefined;\n};\n\ntype CortiRecordingButtonHost = LitElement & {\n startRecording(): void;\n stopRecording(): void;\n toggleRecording(): void;\n openConnection(): Promise<void>;\n closeConnection(): Promise<void>;\n};\n\n/**\n * Shared base for all-in-one Corti host elements (e.g. corti-dictation, corti-ambient).\n * Intentionally minimal; shared behavior will move here incrementally.\n */\nexport class CortiRoot<\n TRoot extends CortiProviderRoot = CortiProviderRoot,\n TRecordingButton extends CortiRecordingButtonHost = CortiRecordingButtonHost,\n> extends LitElement {\n static styles = css`\n .hidden {\n display: none;\n }\n `;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Latest access token\n */\n @property({ type: String })\n accessToken?: string;\n\n /**\n * Authentication configuration with optional refresh mechanism.\n */\n @property({ attribute: false, type: Object })\n authConfig?: CortiAuth.AuthTokenDerivable;\n\n /**\n * WebSocket URL for proxy connection. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ type: String })\n socketUrl?: string;\n\n /**\n * Socket proxy configuration object. When provided, uses CortiWebSocketProxyClient instead of CortiClient.\n */\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n\n /**\n * Which settings should be available in the UI.\n * If an empty array is passed, the settings will be disabled entirely.\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n settingsEnabled: ConfigurableSettings[] = [\"device\", \"language\"];\n\n /**\n * When false (default), clicking the start/stop button does not move focus\n * to the button, allowing textareas or other input elements to keep focus.\n * Set to true to allow the button to receive focus on click.\n */\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n /**\n * List of all language codes available for use with the Web Component.\n * Default list depends on the accessToken\n */\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languagesSupported(value:\n | Corti.TranscribeSupportedLanguage[]\n | undefined) {\n this._languagesSupported = value;\n }\n\n get languagesSupported(): Corti.TranscribeSupportedLanguage[] {\n return (\n this._contextProviderRef.value?.languages ||\n this._languagesSupported ||\n []\n );\n }\n\n @state()\n protected _languagesSupported?: Corti.TranscribeSupportedLanguage[];\n\n /**\n * List of available recording devices\n */\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n }\n\n get devices(): MediaDeviceInfo[] {\n return this._contextProviderRef.value?.devices || this._devices || [];\n }\n\n @state()\n protected _devices?: MediaDeviceInfo[];\n\n /**\n * The selected device used for recording (MediaDeviceInfo).\n */\n @property({ attribute: false, type: Object })\n set selectedDevice(value: MediaDeviceInfo | undefined) {\n this._selectedDevice = value;\n }\n\n get selectedDevice(): MediaDeviceInfo | undefined {\n return (\n this._contextProviderRef.value?.selectedDevice || this._selectedDevice\n );\n }\n\n @state()\n protected _selectedDevice?: MediaDeviceInfo;\n\n /**\n * Push-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"Space\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Keydown starts recording, keyup stops recording.\n * Defaults to \"Space\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set pushToTalkKeybinding(value: string | null | undefined) {\n this._pushToTalkKeybinding = value;\n }\n\n get pushToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.pushToTalkKeybinding ||\n this._pushToTalkKeybinding\n );\n }\n\n @state()\n protected _pushToTalkKeybinding?: string | null;\n\n /**\n * Toggle-to-talk keybinding for keyboard shortcut. Single key only (e.g., \"`\", \"k\", \"meta\", \"ctrl\").\n * Combinations with \"+\" are not supported.\n * Pressing the key toggles recording on/off.\n * Defaults to \"Enter\" if keybinding is in settingsEnabled, otherwise undefined\n */\n @property({ type: String })\n set toggleToTalkKeybinding(value: string | null | undefined) {\n this._toggleToTalkKeybinding = value;\n }\n\n get toggleToTalkKeybinding(): string | null | undefined {\n return (\n this._contextProviderRef.value?.toggleToTalkKeybinding ||\n this._toggleToTalkKeybinding\n );\n }\n\n @state()\n protected _toggleToTalkKeybinding?: string | null;\n\n protected _contextProviderRef: Ref<TRoot> = createRef();\n protected _recordingButtonRef: Ref<TRecordingButton> = createRef();\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Current state of recording (stopped, recording, initializing and stopping, ).\n */\n get recordingState(): RecordingState {\n return this._contextProviderRef.value?.recordingState ?? \"stopped\";\n }\n\n /**\n * Starts a recording.\n */\n public startRecording(): void {\n this._recordingButtonRef.value?.startRecording();\n }\n\n /**\n * Stops a recording.\n */\n public stopRecording(): void {\n this._recordingButtonRef.value?.stopRecording();\n }\n\n /**\n * Starts or stops recording. Convenience layer on top of the start/stop methods.\n */\n public toggleRecording(): void {\n this._recordingButtonRef.value?.toggleRecording();\n }\n\n /**\n * Opens the WebSocket connection without starting recording.\n * Use this to pre-establish the connection before recording starts.\n */\n public async openConnection(): Promise<void> {\n await this._recordingButtonRef.value?.openConnection();\n }\n\n /**\n * Closes the WebSocket connection by sending \"end\" and waiting for \"ended\".\n * Call this to receive \"usage\" statistics or when done with the connection.\n */\n public async closeConnection(): Promise<void> {\n await this._recordingButtonRef.value?.closeConnection();\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Render\n // ─────────────────────────────────────────────────────────────────────────────\n\n render() {\n return html``;\n }\n}\n"]}
@@ -1,15 +0,0 @@
1
- import { LitElement } from "lit";
2
- export declare class DictationDeviceSelector extends LitElement {
3
- #private;
4
- _devices?: MediaDeviceInfo[];
5
- _selectedDevice?: MediaDeviceInfo;
6
- disabled: boolean;
7
- static styles: import("lit").CSSResult[];
8
- render(): import("lit-html").TemplateResult<1>;
9
- }
10
- declare global {
11
- interface HTMLElementTagNameMap {
12
- "ambient-device-selector": DictationDeviceSelector;
13
- "dictation-device-selector": DictationDeviceSelector;
14
- }
15
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"device-selector.js","sourceRoot":"","sources":["../../../src/components/device-selector.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,cAAc,EACd,qBAAqB,GACtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAG3D,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,UAAU;IAAhD;;;QAUL,aAAQ,GAAY,KAAK,CAAC;IA2C5B,CAAC;IA1BC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;oBAQK,uBAAA,IAAI,uFAAoB;sBACtB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;;YAEvE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAClB,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAA;;wBAEJ,MAAM,CAAC,QAAQ;4BACX,IAAI,CAAC,eAAe,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ;;kBAE5D,MAAM,CAAC,KAAK,IAAI,gBAAgB;;aAErC,CACF;;;KAGN,CAAC;IACJ,CAAC;;;mGAtCmB,CAAQ;IAC1B,MAAM,QAAQ,GAAI,CAAC,CAAC,MAA4B,CAAC,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,CAAC,aAAa,CAChB,4BAA4B,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAC1D,CAAC;AACJ,CAAC;AAbM,8BAAM,GAAG,YAAY,AAAf,CAAgB;AAT7B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrD,KAAK,EAAE;yDACqB;AAI7B;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC5D,KAAK,EAAE;gEAC0B;AAGlC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yDACF;AAVf,uBAAuB;IADnC,iBAAiB,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;GAC7D,uBAAuB,CAqDnC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport {\n devicesContext,\n selectedDeviceContext,\n} from \"../contexts/mixins/devices-context.js\";\nimport SelectStyles from \"../styles/select.js\";\nimport { dualCustomElement } from \"../utils/custom-elements.js\";\nimport { recordingDevicesChangedEvent } from \"../utils/events.js\";\n\n@dualCustomElement(\"dictation-device-selector\", \"ambient-device-selector\")\nexport class DictationDeviceSelector extends LitElement {\n @consume({ context: devicesContext, subscribe: true })\n @state()\n _devices?: MediaDeviceInfo[];\n\n @consume({ context: selectedDeviceContext, subscribe: true })\n @state()\n _selectedDevice?: MediaDeviceInfo;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n static styles = SelectStyles;\n\n #handleSelectDevice(e: Event): void {\n const deviceId = (e.target as HTMLSelectElement).value;\n const device = this._devices?.find((d) => d.deviceId === deviceId);\n\n if (!device) {\n return;\n }\n\n this.dispatchEvent(\n recordingDevicesChangedEvent(this._devices || [], device),\n );\n }\n\n render() {\n return html`\n <div>\n <label id=\"device-select-label\" for=\"device-select\">\n Microphone\n </label>\n <select\n id=\"device-select\"\n aria-labelledby=\"device-select-label\"\n @change=${this.#handleSelectDevice}\n ?disabled=${this.disabled || !this._devices || this._devices.length === 0}\n >\n ${this._devices?.map(\n (device) => html`\n <option\n value=${device.deviceId}\n ?selected=${this._selectedDevice?.deviceId === device.deviceId}\n >\n ${device.label || \"Unknown Device\"}\n </option>\n `,\n )}\n </select>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-device-selector\": DictationDeviceSelector;\n \"dictation-device-selector\": DictationDeviceSelector;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictation-recording-button.js","sourceRoot":"","sources":["../../../src/components/dictation-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,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EACL,mBAAmB,GAEpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAG1D,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,mBAG7C;IAHM;;QAQK,sBAAiB,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAK9D,CAAC;IAHW,iBAAiB;QACzB,OAAO,IAAI,CAAC,gBAAgB,IAAI,wBAAwB,CAAC;IAC3D,CAAC;CACF,CAAA;AAPW;IAFT,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7D,KAAK,EAAE;kEAC4C;AANzC,wBAAwB;IADpC,aAAa,CAAC,4BAA4B,CAAC;GAC/B,wBAAwB,CAapC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { customElement, state } from \"lit/decorators.js\";\nimport { DEFAULT_DICTATION_CONFIG } from \"../constants.js\";\nimport { dictationConfigContext } from \"../contexts/dictation-context.js\";\nimport {\n DictationController,\n type TranscribeMessage,\n} from \"../controllers/dictation-controller.js\";\nimport { RecordingButtonBase } from \"./recording-button-base.js\";\n\n@customElement(\"dictation-recording-button\")\nexport class DictationRecordingButton extends RecordingButtonBase<\n Corti.TranscribeConfig,\n TranscribeMessage\n> {\n @consume({ context: dictationConfigContext, subscribe: true })\n @state()\n protected _dictationConfig?: Corti.TranscribeConfig;\n\n protected _socketController = new DictationController(this);\n\n protected _getConnectConfig(): Corti.TranscribeConfig {\n return this._dictationConfig ?? DEFAULT_DICTATION_CONFIG;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-recording-button\": DictationRecordingButton;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keybinding-input.js","sourceRoot":"","sources":["../../../src/components/keybinding-input.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGtD,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,UAAU;IAAjD;;;QAEL,mBAAc,GAAsC,gBAAgB,CAAC;QAWrE,aAAQ,GAAY,KAAK,CAAC;QAG1B,2BAAsB,GAAY,KAAK,CAAC;IA8D1C,CAAC;IA9BC,MAAM;QACJ,MAAM,UAAU,GACd,IAAI,CAAC,cAAc,KAAK,cAAc;YACpC,CAAC,CAAC,IAAI,CAAC,qBAAqB;YAC5B,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;QACnC,MAAM,KAAK,GACT,IAAI,CAAC,cAAc,KAAK,cAAc;YACpC,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,2BAA2B,CAAC;QAElC,OAAO,IAAI,CAAA;;iBAEE,KAAK;;YAEV,UAAU,IAAI,IAAI,CAAA,+BAA+B,UAAU,QAAQ;;;;;;;uBAOxD,uBAAA,IAAI,iGAA4B;wBAC/B,uBAAA,IAAI,gGAA2B;uBAChC,uBAAA,IAAI,8FAAyB;wBAC5B,IAAI,CAAC,QAAQ;;;;KAIhC,CAAC;IACJ,CAAC;;;;IAxDC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACrC,CAAC;;IAGC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACtC,CAAC;+GAEwB,KAAoB;IAC3C,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACjC,OAAO;IACT,CAAC;IAED,KAAK,CAAC,cAAc,EAAE,CAAC;IACvB,KAAK,CAAC,eAAe,EAAE,CAAC;IAExB,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,aAAa,CAChB,sBAAsB,CACpB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,IAAI,EACV,UAAU,EACV,IAAI,CAAC,cAAc,CACpB,CACF,CAAC;AACJ,CAAC;AA5BM,+BAAM,GAAG,wBAAwB,AAA3B,CAA4B;AAhBzC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gEAC0C;AAIrE;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClE,KAAK,EAAE;uEAC8B;AAItC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpE,KAAK,EAAE;yEACgC;AAGxC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;0DACF;AAG1B;IADC,KAAK,EAAE;wEACgC;AAhB7B,wBAAwB;IADpC,iBAAiB,CAAC,4BAA4B,EAAE,0BAA0B,CAAC;GAC/D,wBAAwB,CA8EpC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport {\n pushToTalkKeybindingContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/mixins/keybindings-context.js\";\nimport KeybindingSelectorStyles from \"../styles/keybinding-selector.js\";\nimport { dualCustomElement } from \"../utils/custom-elements.js\";\nimport { keybindingChangedEvent } from \"../utils/events.js\";\nimport { normalizeKeybinding } from \"../utils/keybinding.js\";\n\n@dualCustomElement(\"dictation-keybinding-input\", \"ambient-keybinding-input\")\nexport class DictationKeybindingInput extends LitElement {\n @property({ type: String })\n keybindingType: \"push-to-talk\" | \"toggle-to-talk\" = \"toggle-to-talk\";\n\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n @state()\n _isCapturingKeybinding: boolean = false;\n\n static styles = KeybindingSelectorStyles;\n\n #handleKeybindingInputFocus(): void {\n this._isCapturingKeybinding = true;\n }\n\n #handleKeybindingInputBlur(): void {\n this._isCapturingKeybinding = false;\n }\n\n #handleKeybindingKeyDown(event: KeyboardEvent): void {\n if (!this._isCapturingKeybinding) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const keybinding = normalizeKeybinding(event.key);\n\n this.dispatchEvent(\n keybindingChangedEvent(\n event.key,\n event.code,\n keybinding,\n this.keybindingType,\n ),\n );\n }\n\n render() {\n const keybinding =\n this.keybindingType === \"push-to-talk\"\n ? this._pushToTalkKeybinding\n : this._toggleToTalkKeybinding;\n const label =\n this.keybindingType === \"push-to-talk\"\n ? \"Push-to-Talk keybinding\"\n : \"Toggle-to-Talk keybinding\";\n\n return html`\n <div>\n <label>${label}</label>\n <div class=\"keybinding-selector-wrapper\">\n ${keybinding && html`<div class=\"keybinding-key\">${keybinding}</div>`}\n <input\n type=\"text\"\n class=\"keybinding-selector-input\"\n .value=\"\"\n placeholder=\"Click and press a key...\"\n readonly\n @focusin=${this.#handleKeybindingInputFocus}\n @focusout=${this.#handleKeybindingInputBlur}\n @keydown=${this.#handleKeybindingKeyDown}\n ?disabled=${this.disabled}\n />\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-keybinding-input\": DictationKeybindingInput;\n \"dictation-keybinding-input\": DictationKeybindingInput;\n }\n}\n"]}
@@ -1,15 +0,0 @@
1
- import { LitElement } from "lit";
2
- import "./keybinding-input.js";
3
- export declare class DictationKeybindingSelector extends LitElement {
4
- _pushToTalkKeybinding?: string | null;
5
- _toggleToTalkKeybinding?: string | null;
6
- disabled: boolean;
7
- static styles: import("lit").CSSResult[];
8
- render(): import("lit-html").TemplateResult<1>;
9
- }
10
- declare global {
11
- interface HTMLElementTagNameMap {
12
- "ambient-keybinding-selector": DictationKeybindingSelector;
13
- "dictation-keybinding-selector": DictationKeybindingSelector;
14
- }
15
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"keybinding-selector.js","sourceRoot":"","sources":["../../../src/components/keybinding-selector.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,wBAAwB,MAAM,kCAAkC,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,uBAAuB,CAAC;AAMxB,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,UAAU;IAApD;;QAUL,aAAQ,GAAY,KAAK,CAAC;IAwB5B,CAAC;IApBC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;sBAIO,IAAI,CAAC,QAAQ;;;;sBAIb,IAAI,CAAC,QAAQ;;UAGzB,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,qBAAqB,CAAC;YAC5D,IAAI,CAAA;cACA,IAAI,CAAA,SAAS,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B;eAEpH;;KAEH,CAAC;IACJ,CAAC;;AArBM,kCAAM,GAAG,wBAAwB,AAA3B,CAA4B;AATzC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAClE,KAAK,EAAE;0EAC8B;AAItC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACpE,KAAK,EAAE;4EACgC;AAGxC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;6DACF;AAVf,2BAA2B;IAJvC,iBAAiB,CAChB,+BAA+B,EAC/B,6BAA6B,CAC9B;GACY,2BAA2B,CAkCvC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport {\n pushToTalkKeybindingContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/mixins/keybindings-context.js\";\nimport KeybindingSelectorStyles from \"../styles/keybinding-selector.js\";\n\nimport { dualCustomElement } from \"../utils/custom-elements.js\";\n\nimport \"./keybinding-input.js\";\n\n@dualCustomElement(\n \"dictation-keybinding-selector\",\n \"ambient-keybinding-selector\",\n)\nexport class DictationKeybindingSelector extends LitElement {\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n disabled: boolean = false;\n\n static styles = KeybindingSelectorStyles;\n\n render() {\n return html`\n <div class=\"settings-group\">\n <dictation-keybinding-input\n keybindingType=\"toggle-to-talk\"\n ?disabled=${this.disabled}\n ></dictation-keybinding-input>\n <dictation-keybinding-input\n keybindingType=\"push-to-talk\"\n ?disabled=${this.disabled}\n ></dictation-keybinding-input>\n ${\n (this._toggleToTalkKeybinding || this._pushToTalkKeybinding) &&\n html`<p class=\"keybinding-help\">\n ${html`Press ${[this._toggleToTalkKeybinding, this._pushToTalkKeybinding].join(\" or \")} to start/stop recording`}\n </p>`\n }\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-keybinding-selector\": DictationKeybindingSelector;\n \"dictation-keybinding-selector\": DictationKeybindingSelector;\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- import { LitElement } from "lit";
3
- export declare class DictationLanguageSelector extends LitElement {
4
- #private;
5
- _languages?: Corti.TranscribeSupportedLanguage[];
6
- _selectedLanguage?: Corti.TranscribeSupportedLanguage;
7
- disabled: boolean;
8
- static styles: import("lit").CSSResult[];
9
- render(): import("lit-html").TemplateResult<1>;
10
- }
11
- declare global {
12
- interface HTMLElementTagNameMap {
13
- "ambient-language-selector": DictationLanguageSelector;
14
- "dictation-language-selector": DictationLanguageSelector;
15
- }
16
- }
@@ -1 +0,0 @@
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,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,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,iBAAiB,CAAC,6BAA6B,EAAE,2BAA2B,CAAC;GACjE,yBAAyB,CAkDrC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport { html, LitElement } from \"lit\";\nimport { 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 { dualCustomElement } from \"../utils/custom-elements.js\";\nimport {\n languageChangedEvent,\n languagesChangedEvent,\n} from \"../utils/events.js\";\nimport { getLanguageName } from \"../utils/languages.js\";\n\n@dualCustomElement(\"dictation-language-selector\", \"ambient-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 \"ambient-language-selector\": DictationLanguageSelector;\n \"dictation-language-selector\": DictationLanguageSelector;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"recording-button-base.js","sourceRoot":"","sources":["../../../src/components/recording-button-base.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CortiAuth } from \"@corti/sdk\";\nimport { consume } from \"@lit/context\";\nimport {\n type CSSResultGroup,\n html,\n LitElement,\n type PropertyValues,\n} from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { AUDIO_CHUNK_INTERVAL_MS } from \"../constants.js\";\nimport { virtualModeContext } from \"../contexts/ambient-context.js\";\nimport { debugDisplayAudioContext } from \"../contexts/dictation-context.js\";\nimport {\n accessTokenContext,\n authConfigContext,\n regionContext,\n tenantNameContext,\n} from \"../contexts/mixins/auth-context.js\";\nimport { selectedDeviceContext } from \"../contexts/mixins/devices-context.js\";\nimport {\n pushToTalkKeybindingContext,\n toggleToTalkKeybindingContext,\n} from \"../contexts/mixins/keybindings-context.js\";\nimport {\n socketProxyContext,\n socketUrlContext,\n} from \"../contexts/mixins/proxy-context.js\";\nimport { recordingStateContext } from \"../contexts/mixins/recording-state-context.js\";\nimport type { TranscribeMessage } from \"../controllers/dictation-controller.js\";\nimport { KeybindingController } from \"../controllers/keybinding-controller.js\";\nimport { MediaController } from \"../controllers/media-controller.js\";\nimport type {\n SocketController,\n SocketControllerOutboundItem,\n SocketControllerWebSocket,\n} from \"../controllers/socket-controller.js\";\nimport ButtonStyles from \"../styles/buttons.js\";\nimport RecordingButtonStyles from \"../styles/recording-button.js\";\nimport type {\n ProxyOptions,\n RecordingSocketInboundMessage,\n RecordingState,\n} from \"../types.js\";\nimport {\n audioEventEvent,\n audioLevelChangedEvent,\n commandEvent,\n deltaUsageEvent,\n errorEvent,\n factsEvent,\n networkActivityEvent,\n type RecordingStateChangedEventDetail,\n recordingStateChangedEvent,\n streamClosedEvent,\n transcriptEvent,\n usageEvent,\n} from \"../utils/events.js\";\n\nimport \"./audio-visualiser.js\";\nimport \"../icons/icons.js\";\n\nexport abstract class RecordingButtonBase<\n TConfig,\n TMessage extends RecordingSocketInboundMessage = TranscribeMessage,\n> extends LitElement {\n @consume({ context: recordingStateContext, subscribe: true })\n @state()\n _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?: CortiAuth.AuthTokenDerivable;\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: 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 @consume({ context: virtualModeContext, subscribe: true })\n @state()\n _virtualMode?: boolean;\n\n @consume({ context: pushToTalkKeybindingContext, subscribe: true })\n @state()\n _pushToTalkKeybinding?: string | null;\n\n @consume({ context: toggleToTalkKeybindingContext, subscribe: true })\n @state()\n _toggleToTalkKeybinding?: string | null;\n\n @property({ type: Boolean })\n allowButtonFocus: boolean = false;\n\n protected abstract _socketController: SocketController<\n SocketControllerOutboundItem,\n TMessage,\n TConfig,\n SocketControllerWebSocket\n >;\n\n protected abstract _getConnectConfig(): TConfig;\n\n #mediaController = new MediaController(this);\n // biome-ignore lint/correctness/noUnusedPrivateClassMembers: Controller self-registers in constructor (addController).\n #keybindingController = new KeybindingController(this);\n #closeConnectionOnInit = false;\n #processing = false;\n #connection: RecordingStateChangedEventDetail[\"connection\"] = \"CLOSED\";\n\n static styles: CSSResultGroup = [RecordingButtonStyles, ButtonStyles];\n\n protected update(changedProperties: PropertyValues) {\n if (\n changedProperties.has(\"_recordingState\") &&\n this._recordingState === \"recording\" &&\n this.#closeConnectionOnInit\n ) {\n this.#closeConnectionOnInit = false;\n this.#handleStop();\n }\n\n super.update(changedProperties);\n }\n\n #handleClick(event: MouseEvent): void {\n if (!this.allowButtonFocus) {\n event.preventDefault();\n }\n\n this.toggleRecording();\n }\n\n #handleWebSocketMessage = (message: TMessage): void => {\n switch (message.type) {\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 \"facts\":\n this.dispatchEvent(factsEvent(message));\n break;\n case \"usage\":\n this.dispatchEvent(usageEvent(message));\n break;\n case \"delta_usage\":\n this.dispatchEvent(deltaUsageEvent(message));\n break;\n case \"audioEvent\":\n this.dispatchEvent(audioEventEvent(message));\n break;\n case \"error\":\n this.dispatchEvent(errorEvent(message.error));\n this.#handleStop();\n break;\n case \"ended\":\n case \"ENDED\":\n this.#processing = false;\n this.#dispatchRecordingStateChanged(this._recordingState);\n break;\n case \"flushed\":\n if (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n this.#processing = false;\n this.#dispatchRecordingStateChanged(this._recordingState);\n }\n break;\n }\n };\n\n #handleWebSocketError = (error: Error): void => {\n this.dispatchEvent(errorEvent(`Socket error: ${error.message}`));\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.#handleStop();\n };\n\n #handleWebSocketClose = (event: unknown): void => {\n if (\n this._socketController.isConnectionOpen() ||\n this._socketController.isConnecting()\n ) {\n return;\n }\n\n this.#processing = false;\n this.#connection = \"CLOSED\";\n this.dispatchEvent(streamClosedEvent(event));\n this.#dispatchRecordingStateChanged(this._recordingState);\n };\n\n #dispatchRecordingStateChanged(state: RecordingState): void {\n this.dispatchEvent(\n recordingStateChangedEvent(state, {\n connection: this.#connection,\n processing: this.#processing,\n }),\n );\n }\n\n async #handleStart(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"initializing\");\n\n try {\n await this.#mediaController.initialize(() => {\n if (this._recordingState === \"recording\") {\n this.dispatchEvent(errorEvent(\"Recording device access was lost.\"));\n this.#handleStop();\n }\n }, this._socketController.mediaRecorderHandler);\n this.#mediaController.mediaRecorder?.start(AUDIO_CHUNK_INTERVAL_MS);\n this.#mediaController.startAudioLevelMonitoring((level) => {\n this.dispatchEvent(audioLevelChangedEvent(level));\n });\n\n this.#processing = true;\n\n if (this.#connection !== \"OPEN\") {\n this.#connection = \"CONNECTING\";\n }\n\n this.#dispatchRecordingStateChanged(\"recording\");\n\n const isNewConnection = await this._socketController.connect(\n this._getConnectConfig(),\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\n if (isNewConnection === \"superseded\") {\n return;\n }\n\n this.#connection = \"OPEN\";\n\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n await this.#handleStop();\n }\n }\n\n async #handleStop(): Promise<void> {\n this.#dispatchRecordingStateChanged(\"stopping\");\n\n try {\n this.#mediaController.stopAudioLevelMonitoring();\n await this.#mediaController.stopRecording();\n await this._socketController.stopRecording();\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n try {\n await this.#mediaController.cleanup();\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n this.#dispatchRecordingStateChanged(\"stopped\");\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 (\n this._recordingState === \"stopped\" ||\n this._recordingState === \"stopping\"\n ) {\n return;\n }\n\n if (this._recordingState === \"initializing\") {\n this.#closeConnectionOnInit = true;\n return;\n }\n\n this.#handleStop();\n }\n\n public toggleRecording(): void {\n if (this._recordingState === \"stopped\") {\n this.startRecording();\n } else if (this._recordingState === \"recording\") {\n this.stopRecording();\n }\n }\n\n public async openConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this._socketController.isConnectionOpen()) {\n return;\n }\n\n try {\n this.#connection = \"CONNECTING\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n\n await this._socketController.connect(this._getConnectConfig(), {\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 this.#connection = \"OPEN\";\n this.#dispatchRecordingStateChanged(this._recordingState);\n } catch (error) {\n this.#connection = \"CLOSED\";\n this.dispatchEvent(errorEvent(error));\n }\n }\n\n public async closeConnection(): Promise<void> {\n if (this._recordingState !== \"stopped\" || this.#processing) {\n return;\n }\n\n if (this._socketController.isConnecting()) {\n await this._socketController.waitForConnection();\n }\n\n if (!this._socketController.isConnectionOpen()) {\n this.#connection = \"CLOSED\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n return;\n }\n\n try {\n this.#connection = \"CLOSING\";\n this.#dispatchRecordingStateChanged(\"stopped\");\n await this._socketController.closeConnection(this.#handleWebSocketClose);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\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 @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 />`\n : isRecording\n ? html`<icon-recording />`\n : html`<icon-mic-on />`\n }\n <dictation-audio-visualiser\n .level=${this.#mediaController.audioLevel}\n ?active=${isRecording}\n />\n </button>\n `;\n }\n}\n"]}
@@ -1,19 +0,0 @@
1
- import { type CSSResultGroup, LitElement, nothing } from "lit";
2
- import type { ConfigurableSettings, RecordingState } from "../types.js";
3
- import "./ambient-virtual-mode-selector.js";
4
- import "./device-selector.js";
5
- import "./keybinding-selector.js";
6
- import "./language-selector.js";
7
- import "../icons/icons.js";
8
- export declare class DictationSettingsMenu extends LitElement {
9
- _recordingState: RecordingState;
10
- settingsEnabled: ConfigurableSettings[];
11
- static styles: CSSResultGroup;
12
- render(): import("lit-html").TemplateResult<1> | typeof nothing;
13
- }
14
- declare global {
15
- interface HTMLElementTagNameMap {
16
- "ambient-settings-menu": DictationSettingsMenu;
17
- "dictation-settings-menu": DictationSettingsMenu;
18
- }
19
- }