@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 +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,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,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;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,oCAAoC,CAAC;AAC5C,OAAO,sBAAsB,CAAC;AAC9B,OAAO,0BAA0B,CAAC;AAClC,OAAO,wBAAwB,CAAC;AAChC,OAAO,mBAAmB,CAAC;AAGpB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,UAAU;IAA9C;;QAGL,oBAAe,GAAmB,SAAS,CAAC;QAM5C,oBAAe,GAA2B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAoEnE,CAAC;IA5DC,MAAM;QACJ,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACvC,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;QACvE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAErE,OAAO,IAAI,CAAA;;;;;;;cAQD,WAAW;YACT,CAAC,CAAC,IAAI,CAAA;;;;iBAIL;YACD,CAAC,CAAC,OACN;cAEE,kBAAkB;YAChB,CAAC,CAAC,IAAI,CAAA;8BACQ,WAAW;mBACtB;YACH,CAAC,CAAC,OACN;cAEE,oBAAoB;YAClB,CAAC,CAAC,IAAI,CAAA;8BACQ,WAAW;mBACtB;YACH,CAAC,CAAC,OACN;cAEE,cAAc;YACZ,CAAC,CAAC,IAAI,CAAA;gCACU,WAAW;qBACtB;YACL,CAAC,CAAC,OACN;cAEE,eAAe;YACb,CAAC,CAAC,IAAI,CAAA;gCACU,WAAW;oDACS;YACpC,CAAC,CAAC,OACN;;;;KAIP,CAAC;IACJ,CAAC;;AAjEM,4BAAM,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;8DACoC;AAM5C;IAJC,QAAQ,CAAC;QACR,SAAS,EAAE,uBAAuB;QAClC,IAAI,EAAE,KAAK;KACZ,CAAC;8DAC+D;AATtD,qBAAqB;IADjC,iBAAiB,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;GACzD,qBAAqB,CA6EjC","sourcesContent":["import { consume } from \"@lit/context\";\nimport { type CSSResultGroup, html, LitElement, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { recordingStateContext } from \"../contexts/mixins/recording-state-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\";\nimport { dualCustomElement } from \"../utils/custom-elements.js\";\n\nimport \"./ambient-virtual-mode-selector.js\";\nimport \"./device-selector.js\";\nimport \"./keybinding-selector.js\";\nimport \"./language-selector.js\";\nimport \"../icons/icons.js\";\n\n@dualCustomElement(\"dictation-settings-menu\", \"ambient-settings-menu\")\nexport class DictationSettingsMenu 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?.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 const showKeybinding = this.settingsEnabled.includes(\"keybinding\");\n const showVirtualMode = this.settingsEnabled.includes(\"virtualMode\");\n\n return html`\n <div class=\"mic-selector\">\n <button id=\"settings-popover-button\" popovertarget=\"settings-popover\">\n <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`<dictation-device-selector\n ?disabled=${isRecording}\n />`\n : nothing\n }\n ${\n showLanguageSelector\n ? html`<dictation-language-selector\n ?disabled=${isRecording}\n />`\n : nothing\n }\n ${\n showKeybinding\n ? html`<dictation-keybinding-selector\n ?disabled=${isRecording}\n />`\n : nothing\n }\n ${\n showVirtualMode\n ? html`<ambient-virtual-mode-selector\n ?disabled=${isRecording}\n ></ambient-virtual-mode-selector>`\n : nothing\n }\n </div>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-settings-menu\": DictationSettingsMenu;\n \"dictation-settings-menu\": DictationSettingsMenu;\n }\n}\n"]}
package/constants.js.map DELETED
@@ -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;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3C,aAAa,EAAE;QACb,aAAa,EAAE,IAAI;QACnB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,EAAE;QAChB,eAAe,EAAE,IAAI;KACtB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,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\nexport const DEFAULT_STREAM_CONFIG: Corti.StreamConfig = {\n mode: { outputLocale: \"en\", type: \"facts\" },\n transcription: {\n isDiarization: true,\n isMultichannel: false,\n participants: [],\n primaryLanguage: \"en\",\n },\n};\n\n/**\n * Interval in milliseconds at which MediaRecorder fires dataavailable events.\n * This controls how often audio chunks are sent to the WebSocket.\n */\nexport const AUDIO_CHUNK_INTERVAL_MS = 250;\n"]}
@@ -1,24 +0,0 @@
1
- import type { Corti } from "@corti/sdk";
2
- import type { PropertyValues } from "lit";
3
- import { RootContext } from "./root-context.js";
4
- export declare const ambientConfigContext: {
5
- __context__: Corti.StreamConfig | undefined;
6
- };
7
- export declare const interactionIdContext: {
8
- __context__: string | undefined;
9
- };
10
- export declare const virtualModeContext: {
11
- __context__: boolean;
12
- };
13
- export declare class AmbientRoot extends RootContext {
14
- ambientConfig: Corti.StreamConfig;
15
- interactionId?: string;
16
- virtualMode: boolean;
17
- constructor();
18
- protected willUpdate(changedProperties: PropertyValues): void;
19
- }
20
- declare global {
21
- interface HTMLElementTagNameMap {
22
- "ambient-root": AmbientRoot;
23
- }
24
- }
@@ -1,93 +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 { createContext, provide } from "@lit/context";
8
- import { customElement, property } from "lit/decorators.js";
9
- import { DEFAULT_STREAM_CONFIG } from "../constants.js";
10
- import { RootContext } from "./root-context.js";
11
- export const ambientConfigContext = createContext(Symbol("ambientConfig"));
12
- export const interactionIdContext = createContext(Symbol("interactionId"));
13
- export const virtualModeContext = createContext(Symbol("virtualMode"));
14
- let AmbientRoot = class AmbientRoot extends RootContext {
15
- constructor() {
16
- super();
17
- this.ambientConfig = DEFAULT_STREAM_CONFIG;
18
- this.virtualMode = false;
19
- this.addEventListener("virtual-mode-changed", (e) => {
20
- const event = e;
21
- this.virtualMode = event.detail.enabled;
22
- // Set multichannel transcription for virtual mode
23
- const base = this.ambientConfig ?? DEFAULT_STREAM_CONFIG;
24
- if (event.detail.enabled) {
25
- this.ambientConfig = {
26
- ...base,
27
- transcription: {
28
- ...base.transcription,
29
- isDiarization: false,
30
- isMultichannel: true,
31
- participants: [
32
- { channel: 0, role: "doctor" },
33
- { channel: 1, role: "patient" },
34
- ],
35
- },
36
- };
37
- }
38
- else {
39
- this.ambientConfig = {
40
- ...base,
41
- transcription: {
42
- ...base.transcription,
43
- isDiarization: true,
44
- isMultichannel: false,
45
- participants: [],
46
- },
47
- };
48
- }
49
- });
50
- this.addEventListener("languages-changed", (e) => {
51
- const event = e;
52
- const lang = (event.detail.selectedLanguage ??
53
- "en");
54
- const base = this.ambientConfig ?? DEFAULT_STREAM_CONFIG;
55
- this.ambientConfig = {
56
- ...base,
57
- mode: {
58
- ...base.mode,
59
- outputLocale: lang,
60
- },
61
- transcription: {
62
- ...base.transcription,
63
- primaryLanguage: lang,
64
- },
65
- };
66
- });
67
- }
68
- willUpdate(changedProperties) {
69
- super.willUpdate(changedProperties);
70
- if (!changedProperties.has("ambientConfig")) {
71
- return;
72
- }
73
- this._selectedLanguage =
74
- this.ambientConfig?.transcription?.primaryLanguage ?? "en";
75
- }
76
- };
77
- __decorate([
78
- provide({ context: ambientConfigContext }),
79
- property({ attribute: false, type: Object })
80
- ], AmbientRoot.prototype, "ambientConfig", void 0);
81
- __decorate([
82
- provide({ context: interactionIdContext }),
83
- property({ type: String })
84
- ], AmbientRoot.prototype, "interactionId", void 0);
85
- __decorate([
86
- provide({ context: virtualModeContext }),
87
- property({ attribute: "virtualMode", type: Boolean })
88
- ], AmbientRoot.prototype, "virtualMode", void 0);
89
- AmbientRoot = __decorate([
90
- customElement("ambient-root")
91
- ], AmbientRoot);
92
- export { AmbientRoot };
93
- //# sourceMappingURL=ambient-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient-context.js","sourceRoot":"","sources":["../../../src/contexts/ambient-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { DEFAULT_STREAM_CONFIG } from \"../constants.js\";\nimport { RootContext } from \"./root-context.js\";\n\nexport const ambientConfigContext = createContext<\n Corti.StreamConfig | undefined\n>(Symbol(\"ambientConfig\"));\n\nexport const interactionIdContext = createContext<string | undefined>(\n Symbol(\"interactionId\"),\n);\n\nexport const virtualModeContext = createContext<boolean>(Symbol(\"virtualMode\"));\n\n@customElement(\"ambient-root\")\nexport class AmbientRoot extends RootContext {\n @provide({ context: ambientConfigContext })\n @property({ attribute: false, type: Object })\n ambientConfig: Corti.StreamConfig = DEFAULT_STREAM_CONFIG;\n\n @provide({ context: interactionIdContext })\n @property({ type: String })\n interactionId?: string;\n\n @provide({ context: virtualModeContext })\n @property({ attribute: \"virtualMode\", type: Boolean })\n virtualMode: boolean = false;\n\n constructor() {\n super();\n\n this.addEventListener(\"virtual-mode-changed\", (e: Event) => {\n const event = e as CustomEvent<{ enabled: boolean }>;\n this.virtualMode = event.detail.enabled;\n // Set multichannel transcription for virtual mode\n const base = this.ambientConfig ?? DEFAULT_STREAM_CONFIG;\n\n if (event.detail.enabled) {\n this.ambientConfig = {\n ...base,\n transcription: {\n ...base.transcription,\n isDiarization: false,\n isMultichannel: true,\n participants: [\n { channel: 0, role: \"doctor\" },\n { channel: 1, role: \"patient\" },\n ],\n },\n };\n } else {\n this.ambientConfig = {\n ...base,\n transcription: {\n ...base.transcription,\n isDiarization: true,\n isMultichannel: false,\n participants: [],\n },\n };\n }\n });\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent;\n\n const lang = (event.detail.selectedLanguage ??\n \"en\") as Corti.TranscribeSupportedLanguage;\n const base = this.ambientConfig ?? DEFAULT_STREAM_CONFIG;\n\n this.ambientConfig = {\n ...base,\n mode: {\n ...base.mode,\n outputLocale: lang,\n },\n transcription: {\n ...base.transcription,\n primaryLanguage: lang,\n },\n };\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues): void {\n super.willUpdate(changedProperties);\n\n if (!changedProperties.has(\"ambientConfig\")) {\n return;\n }\n\n this._selectedLanguage =\n this.ambientConfig?.transcription?.primaryLanguage ?? \"en\";\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"ambient-root\": AmbientRoot;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictation-context.js","sourceRoot":"","sources":["../../../src/contexts/dictation-context.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAEjD,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,wBAAwB,GAAG,aAAa,CACnD,MAAM,CAAC,mBAAmB,CAAC,CAC5B,CAAC;AAEK,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,WAAW;IAa5C,gFAAgF;IAChF,YAAY;IACZ,gFAAgF;IAEhF;QACE,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;YACtD,MAAM,KAAK,GAAG,CAAgB,CAAC;YAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAEzB,CAAC;YAEd,IAAI,CAAC,eAAe,GAAG;gBACrB,GAAG,IAAI,CAAC,eAAe;gBACvB,eAAe,EAAE,gBAAgB,IAAI,IAAI;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,UAAU,CAAC,iBAAiC;QAC7D,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC;IACjE,CAAC;CACF,CAAA;AAnCC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAC5C,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACJ;AAIzC;IAFC,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;yDACjC;AAXlB,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CA0CzB","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { PropertyValues } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { RootContext } from \"./root-context.js\";\n\nexport const dictationConfigContext = createContext<\n Corti.TranscribeConfig | undefined\n>(Symbol(\"dictationConfig\"));\nexport const debugDisplayAudioContext = createContext<boolean | undefined>(\n Symbol(\"debugDisplayAudio\"),\n);\n@customElement(\"dictation-root\")\nexport class DictationRoot extends RootContext {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: dictationConfigContext })\n @property({ attribute: false, type: Object })\n dictationConfig?: Corti.TranscribeConfig;\n\n @provide({ context: debugDisplayAudioContext })\n @property({ attribute: \"debug-display-audio\", type: Boolean })\n debug_displayAudio?: boolean;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Lifecycle\n // ─────────────────────────────────────────────────────────────────────────────\n\n constructor() {\n super();\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent;\n const selectedLanguage = event.detail.selectedLanguage as\n | Corti.TranscribeSupportedLanguage\n | undefined;\n\n this.dictationConfig = {\n ...this.dictationConfig,\n primaryLanguage: selectedLanguage ?? \"en\",\n };\n });\n }\n\n protected override willUpdate(changedProperties: PropertyValues): void {\n super.willUpdate(changedProperties);\n\n if (!changedProperties.has(\"dictationConfig\")) {\n return;\n }\n\n this._selectedLanguage = this.dictationConfig?.primaryLanguage;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"dictation-root\": DictationRoot;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/auth-context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CortiAuth } from \"@corti/sdk\";\nimport { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { getInitialToken } from \"../../utils/auth.js\";\nimport { errorEvent } from \"../../utils/events.js\";\nimport { decodeToken } from \"../../utils/token.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const regionContext = createContext<string | undefined>(\n Symbol(\"region\"),\n);\nexport const tenantNameContext = createContext<string | undefined>(\n Symbol(\"tenantName\"),\n);\nexport const accessTokenContext = createContext<string | undefined>(\n Symbol(\"accessToken\"),\n);\nexport const authConfigContext = createContext<\n CortiAuth.AuthTokenDerivable | undefined\n>(Symbol(\"authConfig\"));\n\nexport declare class AuthContextInterface {\n region?: string;\n tenantName?: string;\n accessToken?: string;\n authConfig?: CortiAuth.AuthTokenDerivable | undefined;\n setAccessToken(token: string | undefined): {\n accessToken: string | undefined;\n environment: string | undefined;\n tenant: string | undefined;\n };\n setAuthConfig(config?: CortiAuth.AuthTokenDerivable): Promise<{\n accessToken: string | undefined;\n environment: string | undefined;\n tenant: string | undefined;\n }>;\n}\n\nexport function AuthContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<AuthContextInterface> & T {\n class AuthContextMixinClass extends superclass {\n // ─────────────────────────────────────────────────────────────────────────────\n // Context state\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: regionContext })\n @state()\n region?: string;\n\n @provide({ context: tenantNameContext })\n @state()\n tenantName?: string;\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: accessTokenContext })\n @state()\n _accessToken?: string;\n\n @property({ type: String })\n set accessToken(token: string | undefined) {\n this.setAccessToken(token);\n }\n\n get accessToken(): string | undefined {\n return this._accessToken;\n }\n\n @provide({ context: authConfigContext })\n @state()\n _authConfig?: CortiAuth.AuthTokenDerivable;\n\n @property({ attribute: false, type: Object })\n set authConfig(config: CortiAuth.AuthTokenDerivable | undefined) {\n this.setAuthConfig(config);\n }\n\n get authConfig(): CortiAuth.AuthTokenDerivable | undefined {\n return this._authConfig;\n }\n\n // ─────────────────────────────────────────────────────────────────────────────\n // Public methods\n // ─────────────────────────────────────────────────────────────────────────────\n\n /**\n * Sets the access token and parses region/tenant from it.\n * @returns ServerConfig with environment, tenant, and accessToken\n * @deprecated Use 'accessToken' property instead.\n */\n public setAccessToken(token: string | undefined) {\n this._accessToken = token;\n this.region = undefined;\n this.tenantName = undefined;\n\n if (!token) {\n return {\n accessToken: token,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n try {\n const decoded = decodeToken(token);\n\n this.region = decoded?.environment;\n this.tenantName = decoded?.tenant;\n\n return {\n accessToken: token,\n environment: decoded?.environment,\n tenant: decoded?.tenant,\n };\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return { accessToken: token, environment: undefined, tenant: undefined };\n }\n\n /**\n * Sets the auth config and parses region/tenant from the initial token.\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 if (!config) {\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n\n try {\n const { accessToken } = await getInitialToken(config);\n\n return this.setAccessToken(accessToken);\n } catch (error) {\n this.dispatchEvent(errorEvent(error));\n }\n\n return {\n accessToken: undefined,\n environment: undefined,\n tenant: undefined,\n };\n }\n }\n\n return AuthContextMixinClass as Constructor<AuthContextInterface> & T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"devices-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/devices-context.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAG5E,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CACzC,MAAM,CAAC,SAAS,CAAC,CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAChD,MAAM,CAAC,gBAAgB,CAAC,CACzB,CAAC;AAQF,MAAM,UAAU,mBAAmB,CACjC,UAAa;;IAEb,MAAM,wBAAyB,SAAQ,UAAU;QAQ/C,IAAI,OAAO,CAAC,KAAoC;YAC9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YAEtB,2DAA2D;YAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,uBAAA,IAAI,mDAAmB,CAAC,mBAAmB,EAAE,CAAC;YAChD,CAAC;QACH,CAAC;QAED,IAAI,OAAO;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAMD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAzBjB,sDAAqB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAC;YA2B/C,IAAI,CAAC,gBAAgB,CAAC,2BAA2B,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC9D,MAAM,KAAK,GAAG,CAAgB,CAAC;gBAE/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACpD,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,EAAqB,EAAE,EAAE;gBACjE,IAAI,EAAE,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;oBAClC,uBAAA,IAAI,mDAAmB,CAAC,UAAU,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF;;IAlCC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACpC,KAAK,EAAE;8DACqB;IAG7B;QADC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;2DAQ3C;IAQD;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAC3C,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oEACZ;IAkBnC,OAAO,wBAAoE,CAAC;AAC9E,CAAC","sourcesContent":["import { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { DevicesController } from \"../../controllers/devices-controller.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const devicesContext = createContext<MediaDeviceInfo[] | undefined>(\n Symbol(\"devices\"),\n);\n\nexport const selectedDeviceContext = createContext<MediaDeviceInfo | undefined>(\n Symbol(\"selectedDevice\"),\n);\n\nexport declare class DevicesContextInterface {\n _devices?: MediaDeviceInfo[];\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo;\n}\n\nexport function DevicesContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<DevicesContextInterface> & T {\n class DevicesContextMixinClass extends superclass {\n #devicesController = new DevicesController(this);\n\n @provide({ context: devicesContext })\n @state()\n _devices?: MediaDeviceInfo[];\n\n @property({ attribute: false, type: Array })\n set devices(value: MediaDeviceInfo[] | undefined) {\n this._devices = value;\n\n // Clear auto-loaded flag when devices are set via property\n if (value !== undefined) {\n this.#devicesController.clearAutoLoadedFlag();\n }\n }\n\n get devices(): MediaDeviceInfo[] | undefined {\n return this._devices;\n }\n\n @provide({ context: selectedDeviceContext })\n @property({ attribute: false, type: Object })\n selectedDevice?: MediaDeviceInfo;\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"recording-devices-changed\", (e: Event) => {\n const event = e as CustomEvent;\n\n this.selectedDevice = event.detail.selectedDevice;\n });\n this.addEventListener(\"context-request\", (ev: ContextEvent<any>) => {\n if (ev.context === devicesContext) {\n this.#devicesController.initialize();\n }\n });\n }\n }\n\n return DevicesContextMixinClass as Constructor<DevicesContextInterface> & T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keybindings-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/keybindings-context.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAEL,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,CAAC,MAAM,2BAA2B,GAAG,aAAa,CAEtD,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,6BAA6B,GAAG,aAAa,CAExD,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAOpC,MAAM,UAAU,uBAAuB,CACrC,UAAa;;IAEb,MAAM,4BAA6B,SAAQ,UAAU;QASnD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YASjB,6DAAwB,CAAC,CAAoB,EAAE,EAAE;gBAC/C,IACE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE;oBACrC,+BAA+B,EAC/B,CAAC;oBACD,IACE,CAAC,CAAC,OAAO,KAAK,2BAA2B;wBACzC,IAAI,CAAC,oBAAoB,KAAK,SAAS,EACvC,CAAC;wBACD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;wBACpC,IAAI,CAAC,aAAa,CAChB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,CAC9D,CAAC;oBACJ,CAAC;oBAED,IACE,CAAC,CAAC,OAAO,KAAK,6BAA6B;wBAC3C,IAAI,CAAC,sBAAsB,KAAK,SAAS,EACzC,CAAC;wBACD,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;wBACtC,IAAI,CAAC,aAAa,CAChB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CACpE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,EAAC;YAEF,gEAA2B,CAAC,CAAQ,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,CAA8C,CAAC;gBAE7D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;gBAE3C,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACzC,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC;gBACzC,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBAClD,IAAI,CAAC,sBAAsB,GAAG,UAAU,CAAC;gBAC3C,CAAC;YACH,CAAC,EAAC;YA5CA,IAAI,CAAC,gBAAgB,CACnB,oBAAoB,EACpB,uBAAA,IAAI,6DAAyB,CAC9B,CAAC;YACF,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,uBAAA,IAAI,0DAAsB,CAAC,CAAC;QACvE,CAAC;KAwCF;;IAtDC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;QACjD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;8EACU;IAIrC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;QACnD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gFACY;IAoDzC,OAAO,4BACJ,CAAC;AACN,CAAC","sourcesContent":["import { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport {\n type KeybindingChangedEventDetail,\n keybindingChangedEvent,\n} from \"../../utils/events.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const pushToTalkKeybindingContext = createContext<\n string | null | undefined\n>(Symbol(\"pushToTalkKeybinding\"));\n\nexport const toggleToTalkKeybindingContext = createContext<\n string | null | undefined\n>(Symbol(\"toggleToTalkKeybinding\"));\n\nexport declare class KeybindingsContextInterface {\n pushToTalkKeybinding?: string | null;\n toggleToTalkKeybinding?: string | null;\n}\n\nexport function KeybindingsContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<KeybindingsContextInterface> & T {\n class KeybindingsContextMixinClass extends superclass {\n @provide({ context: pushToTalkKeybindingContext })\n @property({ type: String })\n pushToTalkKeybinding?: string | null;\n\n @provide({ context: toggleToTalkKeybindingContext })\n @property({ type: String })\n toggleToTalkKeybinding?: string | null;\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\n \"keybinding-changed\",\n this.#handleKeybindingChanged,\n );\n this.addEventListener(\"context-request\", this.#handleContextRequest);\n }\n\n #handleContextRequest = (e: ContextEvent<any>) => {\n if (\n e.contextTarget.tagName.toLowerCase() ===\n \"dictation-keybinding-selector\"\n ) {\n if (\n e.context === pushToTalkKeybindingContext &&\n this.pushToTalkKeybinding === undefined\n ) {\n this.pushToTalkKeybinding = \"Space\";\n this.dispatchEvent(\n keybindingChangedEvent(\" \", \"Space\", \"Space\", \"push-to-talk\"),\n );\n }\n\n if (\n e.context === toggleToTalkKeybindingContext &&\n this.toggleToTalkKeybinding === undefined\n ) {\n this.toggleToTalkKeybinding = \"Enter\";\n this.dispatchEvent(\n keybindingChangedEvent(\"Enter\", \"Enter\", \"Enter\", \"toggle-to-talk\"),\n );\n }\n }\n };\n\n #handleKeybindingChanged = (e: Event) => {\n const event = e as CustomEvent<KeybindingChangedEventDetail>;\n\n const keybinding = event.detail.keybinding;\n\n if (event.detail.type === \"push-to-talk\") {\n this.pushToTalkKeybinding = keybinding;\n } else if (event.detail.type === \"toggle-to-talk\") {\n this.toggleToTalkKeybinding = keybinding;\n }\n };\n }\n\n return KeybindingsContextMixinClass as Constructor<KeybindingsContextInterface> &\n T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"languages-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/languages-context.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAqB,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAE3C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACvB,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAElD,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAQ9B,MAAM,UAAU,qBAAqB,CACnC,UAAa;;IAEb,MAAM,0BAA2B,SAAQ,UAAU;QAejD,IAAI,SAAS,CAAC,KAAsD;YAClE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,6DAA6D;YAC7D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,uBAAA,IAAI,uDAAqB,CAAC,mBAAmB,EAAE,CAAC;YAClD,CAAC;YAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,IACE,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBACpC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,EACvC,CAAC;gBACD,IAAI,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,IAAI,SAAS;YACX,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QAED,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YA5CjB,0DAAuB,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAC;YA8CnD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACpD,MAAM,EAAE,GAAG,CAA0C,CAAC;gBAEtD,IAAI,EAAE,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;oBACpC,uBAAA,IAAI,uDAAqB,CAAC,UAAU,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACtD,MAAM,KAAK,GAAG,CAA6C,CAAC;gBAC5D,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,gBAEzB,CAAC;gBAEd,IAAI,CAAC,iBAAiB;oBACpB,gBAAgB;wBAChB,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC;KACF;;IA7DC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACtC,KAAK,EAAE;kEACyC;IAIjD;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;QAC7C,KAAK,EAAE;yEAC8C;IAMtD;QAJC,QAAQ,CAAC;YACR,SAAS,EAAE,uBAAuB;YAClC,IAAI,EAAE,KAAK;SACZ,CAAC;+DAwBD;IA8BH,OAAO,0BACJ,CAAC;AACN,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport { type ContextEvent, createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { LanguagesController } from \"../../controllers/languages-controller.js\";\nimport { commaSeparatedConverter } from \"../../utils/converters.js\";\nimport type { LanguagesChangedEventDetail } from \"../../utils/events.js\";\nimport { getPreferredDefaultLanguage } from \"../../utils/languages.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const languagesContext = createContext<\n Corti.TranscribeSupportedLanguage[] | undefined\n>(Symbol(\"languages\"));\nexport const selectedLanguageContext = createContext<\n Corti.TranscribeSupportedLanguage | undefined\n>(Symbol(\"selectedLanguage\"));\n\nexport declare class LanguagesContextInterface {\n _languages?: Corti.TranscribeSupportedLanguage[];\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n languages?: Corti.TranscribeSupportedLanguage[];\n}\n\nexport function LanguagesContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<LanguagesContextInterface> & T {\n class LanguagesContextMixinClass extends superclass {\n #languagesController = new LanguagesController(this);\n\n @provide({ context: languagesContext })\n @state()\n _languages?: Corti.TranscribeSupportedLanguage[];\n\n @provide({ context: selectedLanguageContext })\n @state()\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n\n @property({\n converter: commaSeparatedConverter,\n type: Array,\n })\n set languages(value: Corti.TranscribeSupportedLanguage[] | undefined) {\n this._languages = value;\n\n // Clear auto-loaded flag when languages are set via property\n if (value !== undefined) {\n this.#languagesController.clearAutoLoadedFlag();\n }\n\n if (value === undefined) {\n return;\n }\n\n if (value.length === 0) {\n this._selectedLanguage = undefined;\n return;\n }\n\n if (\n this._selectedLanguage === undefined ||\n !value.includes(this._selectedLanguage)\n ) {\n this._selectedLanguage = getPreferredDefaultLanguage(value);\n }\n }\n\n get languages(): Corti.TranscribeSupportedLanguage[] | undefined {\n return this._languages;\n }\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"context-request\", (e: Event) => {\n const ev = e as ContextEvent<typeof languagesContext>;\n\n if (ev.context === languagesContext) {\n this.#languagesController.initialize();\n }\n });\n\n this.addEventListener(\"languages-changed\", (e: Event) => {\n const event = e as CustomEvent<LanguagesChangedEventDetail>;\n const selectedLanguage = event.detail.selectedLanguage as\n | Corti.TranscribeSupportedLanguage\n | undefined;\n\n this._selectedLanguage =\n selectedLanguage ??\n getPreferredDefaultLanguage(event.detail.languages);\n });\n }\n }\n\n return LanguagesContextMixinClass as Constructor<LanguagesContextInterface> &\n T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"proxy-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/proxy-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAC3C,MAAM,CAAC,WAAW,CAAC,CACpB,CAAC;AACF,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAC7C,MAAM,CAAC,aAAa,CAAC,CACtB,CAAC;AAOF,MAAM,UAAU,iBAAiB,CAC/B,UAAa;IAEb,MAAM,sBAAuB,SAAQ,UAAU;KAY9C;IALC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACtC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6DACR;IAInB;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;QACxC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;+DAClB;IAG7B,OAAO,sBAAgE,CAAC;AAC1E,CAAC","sourcesContent":["import { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport type { ProxyOptions } from \"../../types.js\";\nimport type { Constructor } from \"./types.js\";\n\nexport const socketUrlContext = createContext<string | undefined>(\n Symbol(\"socketUrl\"),\n);\nexport const socketProxyContext = createContext<ProxyOptions | undefined>(\n Symbol(\"socketProxy\"),\n);\n\nexport declare class ProxyContextInterface {\n socketUrl?: string;\n socketProxy?: ProxyOptions;\n}\n\nexport function ProxyContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<ProxyContextInterface> & T {\n class ProxyContextMixinClass extends superclass {\n // ─────────────────────────────────────────────────────────────────────────────\n // Properties\n // ─────────────────────────────────────────────────────────────────────────────\n\n @provide({ context: socketUrlContext })\n @property({ type: String })\n socketUrl?: string;\n\n @provide({ context: socketProxyContext })\n @property({ attribute: false, type: Object })\n socketProxy?: ProxyOptions;\n }\n\n return ProxyContextMixinClass as Constructor<ProxyContextInterface> & T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"recording-state-context.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/recording-state-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C;;GAEG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAChD,MAAM,CAAC,gBAAgB,CAAC,CACzB,CAAC;AAMF,MAAM,UAAU,0BAA0B,CACxC,UAAa;IAEb,MAAM,+BAAgC,SAAQ,UAAU;QAKtD,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAHjB,mBAAc,GAAmB,SAAS,CAAC;YAKzC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,CAAC,CAAQ,EAAE,EAAE;gBAC5D,MAAM,KAAK,GAAG,CAA2C,CAAC;gBAE1D,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;KACF;IAXC;QAFC,OAAO,CAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;QAC3C,KAAK,EAAE;2EACmC;IAa7C,OAAO,+BACJ,CAAC;AACN,CAAC","sourcesContent":["import { createContext, provide } from \"@lit/context\";\nimport type { LitElement } from \"lit\";\nimport { state } from \"lit/decorators.js\";\nimport type { RecordingState } from \"../../types.js\";\nimport type { Constructor } from \"./types.js\";\n\n/**\n * Lit context and mixin for recording UI state (`stopped`, `recording`, …).\n */\n\nexport const recordingStateContext = createContext<RecordingState>(\n Symbol(\"recordingState\"),\n);\n\nexport declare class RecordingStateContextInterface {\n recordingState: RecordingState;\n}\n\nexport function RecordingStateContextMixin<T extends Constructor<LitElement>>(\n superclass: T,\n): Constructor<RecordingStateContextInterface> & T {\n class RecordingStateContextMixinClass extends superclass {\n @provide({ context: recordingStateContext })\n @state()\n recordingState: RecordingState = \"stopped\";\n\n constructor(...args: any[]) {\n super(...args);\n\n this.addEventListener(\"recording-state-changed\", (e: Event) => {\n const event = e as CustomEvent<{ state: RecordingState }>;\n\n this.recordingState = event.detail.state;\n });\n }\n }\n\n return RecordingStateContextMixinClass as Constructor<RecordingStateContextInterface> &\n T;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/contexts/mixins/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Constructor signature for Lit class mixins\n * (https://lit.dev/docs/composition/mixins/).\n */\nexport type Constructor<T extends object = object> = new (...args: any[]) => T;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"root-context.js","sourceRoot":"","sources":["../../../src/contexts/root-context.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAuB,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF,MAAM,OAAO,WAAY,SAAQ,mBAAmB,CAClD,0BAA0B,CACxB,uBAAuB,CACrB,qBAAqB,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CACvE,CACF,CACF;IAND;;QAQE,cAAS,GAAY,KAAK,CAAC;IAa7B,CAAC;IATC,MAAM;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,IAAI,CAAA,eAAe,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAA;;WAEJ,CAAC;IACV,CAAC;;AAVM,kBAAM,GAAmB,CAAC,eAAe,CAAC,AAApC,CAAqC;AAFlD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;8CACD","sourcesContent":["import { type CSSResultGroup, html, LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport ComponentStyles from \"../styles/component-styles.js\";\nimport { AuthContextMixin } from \"./mixins/auth-context.js\";\nimport { DevicesContextMixin } from \"./mixins/devices-context.js\";\nimport { KeybindingsContextMixin } from \"./mixins/keybindings-context.js\";\nimport { LanguagesContextMixin } from \"./mixins/languages-context.js\";\nimport { ProxyContextMixin } from \"./mixins/proxy-context.js\";\nimport { RecordingStateContextMixin } from \"./mixins/recording-state-context.js\";\n\nexport class RootContext extends DevicesContextMixin(\n RecordingStateContextMixin(\n KeybindingsContextMixin(\n LanguagesContextMixin(AuthContextMixin(ProxyContextMixin(LitElement))),\n ),\n ),\n) {\n @property({ type: Boolean })\n noWrapper: boolean = false;\n\n static styles: CSSResultGroup = [ComponentStyles];\n\n render() {\n if (this.noWrapper) {\n return html`<slot></slot>`;\n }\n\n return html`<div class=\"wrapper\">\n <slot></slot>\n </div>`;\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- import { type Corti, type CortiClient } from "@corti/sdk";
2
- import type { ProxyOptions } from "../types.js";
3
- import { SocketController } from "./socket-controller.js";
4
- export type AmbientStreamSessionConfig = {
5
- interactionId: string;
6
- configuration: Corti.StreamConfig;
7
- };
8
- type AmbientStreamSocket = Awaited<ReturnType<CortiClient["stream"]["connect"]>>;
9
- export type StreamAmbientMessage = Corti.StreamTranscriptMessage | Corti.StreamFactsMessage | Corti.StreamFlushedMessage | Corti.StreamDeltaUsageMessage | Corti.StreamEndedMessage | Corti.StreamUsageMessage | Corti.StreamErrorMessage | Corti.StreamConfigStatusMessage | Corti.StreamAudioEventMessage;
10
- type OutboundItem = Blob | Corti.StreamEndMessage;
11
- export declare class AmbientController extends SocketController<OutboundItem, StreamAmbientMessage, AmbientStreamSessionConfig, AmbientStreamSocket> {
12
- stopRecording(): Promise<void>;
13
- protected _connectThroughProxy(session: AmbientStreamSessionConfig, proxy: ProxyOptions): Promise<AmbientStreamSocket>;
14
- protected _connectThroughAuth(client: CortiClient, session: AmbientStreamSessionConfig): Promise<AmbientStreamSocket>;
15
- }
16
- export {};
@@ -1,24 +0,0 @@
1
- import { CortiWebSocketProxyClient, } from "@corti/sdk";
2
- import { SocketController } from "./socket-controller.js";
3
- export class AmbientController extends SocketController {
4
- async stopRecording() {
5
- await this.closeConnection();
6
- }
7
- async _connectThroughProxy(session, proxy) {
8
- return await CortiWebSocketProxyClient.stream.connect({
9
- // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side
10
- awaitConfiguration: false,
11
- configuration: session.configuration,
12
- proxy,
13
- });
14
- }
15
- async _connectThroughAuth(client, session) {
16
- return await client.stream.connect({
17
- // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side
18
- awaitConfiguration: false,
19
- configuration: session.configuration,
20
- id: session.interactionId,
21
- });
22
- }
23
- }
24
- //# sourceMappingURL=ambient-controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient-controller.js","sourceRoot":"","sources":["../../../src/controllers/ambient-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAwB1D,MAAM,OAAO,iBAAkB,SAAQ,gBAKtC;IACC,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;IAC/B,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,OAAmC,EACnC,KAAmB;QAEnB,OAAO,MAAM,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC;YACpD,+GAA+G;YAC/G,kBAAkB,EAAE,KAAK;YACzB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,MAAmB,EACnB,OAAmC;QAEnC,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACjC,+GAA+G;YAC/G,kBAAkB,EAAE,KAAK;YACzB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,EAAE,EAAE,OAAO,CAAC,aAAa;SAC1B,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import {\n type Corti,\n type CortiClient,\n CortiWebSocketProxyClient,\n} from \"@corti/sdk\";\nimport type { ProxyOptions } from \"../types.js\";\nimport { SocketController } from \"./socket-controller.js\";\n\nexport type AmbientStreamSessionConfig = {\n interactionId: string;\n configuration: Corti.StreamConfig;\n};\n\ntype AmbientStreamSocket = Awaited<\n ReturnType<CortiClient[\"stream\"][\"connect\"]>\n>;\n\nexport type StreamAmbientMessage =\n | Corti.StreamTranscriptMessage\n | Corti.StreamFactsMessage\n | Corti.StreamFlushedMessage\n | Corti.StreamDeltaUsageMessage\n | Corti.StreamEndedMessage\n | Corti.StreamUsageMessage\n | Corti.StreamErrorMessage\n | Corti.StreamConfigStatusMessage\n | Corti.StreamAudioEventMessage;\n\ntype OutboundItem = Blob | Corti.StreamEndMessage;\n\nexport class AmbientController extends SocketController<\n OutboundItem,\n StreamAmbientMessage,\n AmbientStreamSessionConfig,\n AmbientStreamSocket\n> {\n async stopRecording(): Promise<void> {\n await this.closeConnection();\n }\n\n protected async _connectThroughProxy(\n session: AmbientStreamSessionConfig,\n proxy: ProxyOptions,\n ): Promise<AmbientStreamSocket> {\n return await CortiWebSocketProxyClient.stream.connect({\n // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side\n awaitConfiguration: false,\n configuration: session.configuration,\n proxy,\n });\n }\n\n protected async _connectThroughAuth(\n client: CortiClient,\n session: AmbientStreamSessionConfig,\n ): Promise<AmbientStreamSocket> {\n return await client.stream.connect({\n // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side\n awaitConfiguration: false,\n configuration: session.configuration,\n id: session.interactionId,\n });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"devices-controller.js","sourceRoot":"","sources":["../../../src/controllers/devices-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { getAudioDevices } from \"../utils/devices.js\";\nimport {\n errorEvent,\n readyEvent,\n recordingDevicesChangedEvent,\n} from \"../utils/events.js\";\n\ninterface DevicesControllerHost extends ReactiveControllerHost {\n devices?: MediaDeviceInfo[];\n selectedDevice?: MediaDeviceInfo;\n dispatchEvent(event: CustomEvent): boolean;\n requestUpdate(): void;\n _devices?: MediaDeviceInfo[];\n}\n\n/**\n * Controller that manages automatic device loading.\n * Loads devices when they're not present and handles device changes.\n * Reacts to updates and automatically loads devices when needed.\n */\nexport class DevicesController implements ReactiveController {\n host: DevicesControllerHost;\n #autoLoadedDevices: boolean = false;\n #loadingDevices: boolean = false;\n #deviceChangeHandler?: () => void;\n #initialized: boolean = false;\n\n constructor(host: DevicesControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n initialize(): void {\n this.#initialized = true;\n if (this.host.devices === undefined) {\n this.#loadDevices();\n this.#setupDeviceChangeListener();\n }\n }\n\n hostDisconnected(): void {\n this.#removeDeviceChangeListener();\n }\n\n hostUpdate(): void {\n // Only react to updates after initialization\n if (!this.#initialized) {\n return;\n }\n\n // When devices are accessed but not present, load them\n if (this.host.devices === undefined) {\n this.#loadDevices();\n }\n }\n\n #setupDeviceChangeListener(): void {\n if (this.#deviceChangeHandler) {\n return;\n }\n\n this.#deviceChangeHandler = () => {\n if (this.#autoLoadedDevices) {\n this.#loadDevices();\n }\n };\n\n navigator.mediaDevices.addEventListener(\n \"devicechange\",\n this.#deviceChangeHandler,\n );\n }\n\n #removeDeviceChangeListener(): void {\n if (!this.#deviceChangeHandler) {\n return;\n }\n\n navigator.mediaDevices.removeEventListener(\n \"devicechange\",\n this.#deviceChangeHandler,\n );\n this.#deviceChangeHandler = undefined;\n }\n\n async #loadDevices(): Promise<void> {\n if (this.#loadingDevices) {\n return;\n }\n\n this.#loadingDevices = true;\n\n try {\n const { devices, defaultDevice } = await getAudioDevices();\n\n this.#autoLoadedDevices = true;\n this.host._devices = devices;\n\n // Use selected device if it still exists, otherwise fall back to default\n const previousDevice = this.host.selectedDevice;\n const selectedDevice =\n (previousDevice &&\n devices.find((d) => d.deviceId === previousDevice.deviceId)) ??\n defaultDevice;\n\n this.host.selectedDevice = selectedDevice;\n\n this.host.requestUpdate();\n this.host.dispatchEvent(\n recordingDevicesChangedEvent(devices, selectedDevice),\n );\n this.host.dispatchEvent(readyEvent());\n } catch (error) {\n this.host.dispatchEvent(errorEvent(error));\n } finally {\n this.#loadingDevices = false;\n }\n }\n\n /**\n * Clear the auto-loaded flag (when devices are set externally)\n */\n clearAutoLoadedFlag(): void {\n this.#autoLoadedDevices = false;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dictation-controller.js","sourceRoot":"","sources":["../../../src/controllers/dictation-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAsB1D,MAAM,OAAO,mBAAoB,SAAQ,gBAKxC;IACC,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,eAAuC,EACvC,KAAmB;QAEnB,OAAO,MAAM,yBAAyB,CAAC,UAAU,CAAC,OAAO,CAAC;YACxD,+GAA+G;YAC/G,kBAAkB,EAAE,KAAK;YACzB,aAAa,EAAE,eAAe;YAC9B,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,mBAAmB,CACjC,MAAmB,EACnB,eAAuC;QAEvC,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;YACrC,+GAA+G;YAC/G,kBAAkB,EAAE,KAAK;YACzB,aAAa,EAAE,eAAe;SAC/B,CAAC,CAAC;IACL,CAAC;CACF","sourcesContent":["import {\n type Corti,\n type CortiClient,\n CortiWebSocketProxyClient,\n} from \"@corti/sdk\";\nimport type { ProxyOptions } from \"../types.js\";\nimport { SocketController } from \"./socket-controller.js\";\n\ntype TranscribeSocket = Awaited<\n ReturnType<CortiClient[\"transcribe\"][\"connect\"]>\n>;\n\nexport type TranscribeMessage =\n | Corti.TranscribeConfigStatusMessage\n | Corti.TranscribeUsageMessage\n | Corti.TranscribeDeltaUsageMessage\n | Corti.TranscribeEndedMessage\n | Corti.TranscribeErrorMessage\n | Corti.TranscribeTranscriptMessage\n | Corti.TranscribeCommandMessage\n | Corti.TranscribeFlushedMessage\n | Corti.TranscribeAudioEventMessage;\n\ntype OutboundItem =\n | Blob\n | Corti.TranscribeFlushMessage\n | Corti.TranscribeEndMessage;\n\nexport class DictationController extends SocketController<\n OutboundItem,\n TranscribeMessage,\n Corti.TranscribeConfig,\n TranscribeSocket\n> {\n async stopRecording(): Promise<void> {\n await this.pause();\n }\n\n protected async _connectThroughProxy(\n dictationConfig: Corti.TranscribeConfig,\n proxy: ProxyOptions,\n ): Promise<TranscribeSocket> {\n return await CortiWebSocketProxyClient.transcribe.connect({\n // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side\n awaitConfiguration: false,\n configuration: dictationConfig,\n proxy,\n });\n }\n\n protected async _connectThroughAuth(\n client: CortiClient,\n dictationConfig: Corti.TranscribeConfig,\n ): Promise<TranscribeSocket> {\n return await client.transcribe.connect({\n // awaitConfiguration: false — CONFIG_* appears in network activity before the socket is configured server-side\n awaitConfiguration: false,\n configuration: dictationConfig,\n });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keybinding-controller.js","sourceRoot":"","sources":["../../../src/controllers/keybinding-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { keybindingActivatedEvent } from \"../utils/events.js\";\nimport {\n matchesKeybinding,\n shouldIgnoreKeybinding,\n} from \"../utils/keybinding.js\";\n\ninterface KeybindingControllerHost extends ReactiveControllerHost {\n _pushToTalkKeybinding?: string | null;\n _toggleToTalkKeybinding?: string | null;\n startRecording(): void;\n stopRecording(): void;\n toggleRecording(): void;\n dispatchEvent(event: Event): boolean;\n}\n\nexport class KeybindingController implements ReactiveController {\n host: KeybindingControllerHost;\n\n #keydownHandler?: (event: KeyboardEvent) => void;\n #keyupHandler?: (event: KeyboardEvent) => void;\n #blurHandler?: () => void;\n #isPushToTalkKeyPressed: boolean = false;\n\n constructor(host: KeybindingControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#setupListeners();\n }\n\n hostDisconnected(): void {\n this.#removeListeners();\n }\n\n #setupListeners(): void {\n this.#removeListeners();\n\n this.#keydownHandler = (event: KeyboardEvent) => {\n if (shouldIgnoreKeybinding(document.activeElement)) {\n return;\n }\n\n if (\n this.host._toggleToTalkKeybinding &&\n matchesKeybinding(event, this.host._toggleToTalkKeybinding) &&\n !this.#isPushToTalkKeyPressed\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n\n this.host.toggleRecording();\n return;\n }\n\n if (\n this.host._pushToTalkKeybinding &&\n matchesKeybinding(event, this.host._pushToTalkKeybinding)\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n\n this.#isPushToTalkKeyPressed = true;\n this.host.startRecording();\n }\n };\n\n this.#keyupHandler = (event: KeyboardEvent) => {\n if (\n this.host._pushToTalkKeybinding &&\n matchesKeybinding(event, this.host._pushToTalkKeybinding)\n ) {\n if (!this.host.dispatchEvent(keybindingActivatedEvent(event))) {\n return;\n }\n this.#isPushToTalkKeyPressed = false;\n this.host.stopRecording();\n }\n };\n\n this.#blurHandler = () => {\n if (this.#isPushToTalkKeyPressed) {\n this.#isPushToTalkKeyPressed = false;\n this.host.stopRecording();\n }\n };\n\n window.addEventListener(\"keydown\", this.#keydownHandler);\n window.addEventListener(\"keyup\", this.#keyupHandler);\n window.addEventListener(\"blur\", this.#blurHandler);\n }\n\n #removeListeners(): void {\n if (this.#keydownHandler) {\n window.removeEventListener(\"keydown\", this.#keydownHandler);\n this.#keydownHandler = undefined;\n }\n\n if (this.#keyupHandler) {\n window.removeEventListener(\"keyup\", this.#keyupHandler);\n this.#keyupHandler = undefined;\n }\n\n if (this.#blurHandler) {\n window.removeEventListener(\"blur\", this.#blurHandler);\n this.#blurHandler = undefined;\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"languages-controller.js","sourceRoot":"","sources":["../../../src/controllers/languages-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAU7D;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IAO9B,YAAY,IAA6B;;QALzC,mDAAgC,KAAK,EAAC;QACtC,gDAA6B,KAAK,EAAC;QACnC,sDAAyB;QACzB,2CAAwB,KAAK,EAAC;QAG5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,UAAU;QACR,uBAAA,IAAI,oCAAgB,IAAI,MAAA,CAAC;QAEzB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,uBAAA,IAAI,0EAAe,MAAnB,IAAI,CAAiB,CAAC;QACxB,CAAC;IACH,CAAC;IAED,UAAU;QACR,6CAA6C;QAC7C,IAAI,CAAC,uBAAA,IAAI,wCAAa,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,IACE,CAAC,uBAAA,IAAI,2CAAgB,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;YACxC,uBAAA,IAAI,gDAAqB,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAClC,CAAC;YACD,uBAAA,IAAI,0EAAe,MAAnB,IAAI,CAAiB,CAAC;QACxB,CAAC;QAED,uBAAA,IAAI,uCAAmB,IAAI,CAAC,IAAI,CAAC,MAAM,MAAA,CAAC;IAC1C,CAAC;IAmCD;;OAEG;IACH,mBAAmB;QACjB,uBAAA,IAAI,4CAAwB,KAAK,MAAA,CAAC;IACpC,CAAC;CACF;6SAvCC,KAAK;IACH,IAAI,uBAAA,IAAI,6CAAkB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,uBAAA,IAAI,yCAAqB,IAAI,MAAA,CAAC;IAE9B,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,oBAAoB,CACzD,IAAI,CAAC,IAAI,CAAC,MAAM,CACjB,CAAC;QAEF,uBAAA,IAAI,4CAAwB,IAAI,MAAA,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAEjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACrD,MAAM,gBAAgB,GACpB,gBAAgB,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACtD,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,eAAe,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CACrB,qBAAqB,CAAC,SAAS,EAAE,gBAAgB,CAAC,CACnD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,uBAAA,IAAI,yCAAqB,KAAK,MAAA,CAAC;IACjC,CAAC;AACH,CAAC","sourcesContent":["import type { Corti } from \"@corti/sdk\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport { errorEvent, languagesChangedEvent } from \"../utils/events.js\";\nimport { getLanguagesByRegion } from \"../utils/languages.js\";\n\ninterface LanguagesControllerHost extends ReactiveControllerHost {\n region?: string;\n dispatchEvent(event: CustomEvent): boolean;\n requestUpdate(): void;\n _languages?: Corti.TranscribeSupportedLanguage[];\n _selectedLanguage?: Corti.TranscribeSupportedLanguage;\n}\n\n/**\n * Controller that manages automatic language loading based on region.\n * Loads languages when they're not present and handles region changes.\n * Reacts to updates and automatically loads languages when needed.\n */\nexport class LanguagesController implements ReactiveController {\n host: LanguagesControllerHost;\n #autoLoadedLanguages: boolean = false;\n #loadingLanguages: boolean = false;\n #previousRegion?: string;\n #initialized: boolean = false;\n\n constructor(host: LanguagesControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n initialize(): void {\n this.#initialized = true;\n\n if (this.host._languages === undefined) {\n this.#loadLanguages();\n }\n }\n\n hostUpdate(): void {\n // Only react to updates after initialization\n if (!this.#initialized) {\n return;\n }\n\n // When region changes, reload languages if they were auto-loaded\n if (\n (this.#previousRegion !== this.host.region &&\n this.#autoLoadedLanguages) ||\n this.host._languages === undefined\n ) {\n this.#loadLanguages();\n }\n\n this.#previousRegion = this.host.region;\n }\n\n async #loadLanguages(): Promise<void> {\n if (this.#loadingLanguages) {\n return;\n }\n\n this.#loadingLanguages = true;\n\n try {\n const { languages, defaultLanguage } = getLanguagesByRegion(\n this.host.region,\n );\n\n this.#autoLoadedLanguages = true;\n this.host._languages = languages;\n\n const previousLanguage = this.host._selectedLanguage;\n const selectedLanguage =\n previousLanguage && languages.includes(previousLanguage)\n ? previousLanguage\n : defaultLanguage;\n\n this.host._selectedLanguage = selectedLanguage;\n this.host.requestUpdate();\n this.host.dispatchEvent(\n languagesChangedEvent(languages, selectedLanguage),\n );\n } catch (error) {\n this.host.dispatchEvent(errorEvent(error));\n } finally {\n this.#loadingLanguages = false;\n }\n }\n\n /**\n * Clear the auto-loaded flag (when languages are set externally)\n */\n clearAutoLoadedFlag(): void {\n this.#autoLoadedLanguages = false;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"media-controller.js","sourceRoot":"","sources":["../../../src/controllers/media-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAS3B,MAAM,OAAO,eAAe;IAe1B,YAAY,IAAyB;QAZrC,uCAAmC,IAAI,EAAC;QACxC,yCAAgC,EAAE,EAAC;QACnC,sCAAmC,IAAI,EAAC;QACxC,wCAAqC,IAAI,EAAC;QAC1C,oCAAiC,IAAI,EAAC;QACtC,yCAAuC,IAAI,EAAC;QAC5C,sDAA6B;QAC7B,sCAAsB,CAAC,EAAC;QACxB,gDAA2B;QAC3B,sDAA8C;QAC9C,+CAAoC;QAGlC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,YAAyB,EACzB,WAAkC;QAElC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErB,uBAAA,IAAI,iCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,gCAAgB,WAAW,MAAA,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,cAAc,CAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EACnC,IAAI,CAAC,IAAI,CAAC,YAAY,EACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAC9B,CAAC;QAEF,uBAAA,IAAI,gCAAgB,OAAO,CAAC,MAAM,MAAA,CAAC;QACnC,uBAAA,IAAI,kCAAkB,OAAO,CAAC,aAAa,MAAA,CAAC;QAC5C,uBAAA,IAAI,+BAAe,OAAO,CAAC,cAAc,IAAI,IAAI,MAAA,CAAC;QAElD,uBAAA,IAAI,sCAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAuB,EAAE,EAAE;gBACrD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;oBACnC,IAAI,uBAAA,IAAI,qCAAc,EAAE,CAAC;wBACvB,uBAAA,IAAI,qCAAc,MAAlB,IAAI,CAAgB,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,uBAAA,IAAI,oCAAa,CAAC,CAAC;QAE1E,uBAAA,IAAI,iCAAiB,YAAY,MAAA,CAAC;QAClC,uBAAA,IAAI,6BAAa,QAAQ,MAAA,CAAC;QAE1B,uBAAA,IAAI,kCAAkB,IAAI,aAAa,CAAC,uBAAA,IAAI,oCAAa,CAAC,MAAA,CAAC;QAC3D,uBAAA,IAAI,sCAAe,CAAC,eAAe,GAAG,CAAC,KAAK,EAAE,EAAE;YAC9C,IAAI,uBAAA,IAAI,oCAAa,EAAE,CAAC;gBACtB,uBAAA,IAAI,oCAAa,MAAjB,IAAI,EAAc,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,uBAAA,IAAI,iCAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,uBAAA,IAAI,iCAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,yBAAyB,CACvB,kBAA4C;QAE5C,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,uBAAA,IAAI,uCAAuB,kBAAkB,MAAA,CAAC;QAE9C,uBAAA,IAAI,uCAAuB,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE;YACjD,uBAAA,IAAI,+BAAe,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,MAAA,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAE1B,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;gBAC7B,uBAAA,IAAI,2CAAoB,MAAxB,IAAI,EAAqB,uBAAA,IAAI,mCAAY,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,MAAA,CAAC;IACV,CAAC;IAED,wBAAwB;QACtB,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;YAC7B,aAAa,CAAC,uBAAA,IAAI,2CAAoB,CAAC,CAAC;YACxC,uBAAA,IAAI,uCAAuB,SAAS,MAAA,CAAC;QACvC,CAAC;QAED,uBAAA,IAAI,+BAAe,CAAC,MAAA,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1B,IAAI,uBAAA,IAAI,2CAAoB,EAAE,CAAC;YAC7B,uBAAA,IAAI,2CAAoB,MAAxB,IAAI,EAAqB,uBAAA,IAAI,mCAAY,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,uBAAA,IAAI,sCAAe,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;YAC/C,uBAAA,IAAI,sCAAe,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,uBAAA,IAAI,sCAAe,EAAE,CAAC;YACxB,uBAAA,IAAI,sCAAe,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7C,CAAC;QAED,IAAI,uBAAA,IAAI,oCAAa,EAAE,CAAC;YACtB,uBAAA,IAAI,oCAAa,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC9C,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,uBAAA,IAAI,gCAAgB,IAAI,MAAA,CAAC;QAC3B,CAAC;QAED,uBAAA,IAAI,sCAAe,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACnC,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,uBAAA,IAAI,kCAAkB,EAAE,MAAA,CAAC;QAEzB,IAAI,uBAAA,IAAI,mCAAY,IAAI,uBAAA,IAAI,mCAAY,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,uBAAA,IAAI,mCAAY,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;QAED,uBAAA,IAAI,+BAAe,IAAI,MAAA,CAAC;QAExB,IAAI,uBAAA,IAAI,qCAAc,IAAI,uBAAA,IAAI,qCAAc,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,uBAAA,IAAI,qCAAc,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAED,uBAAA,IAAI,iCAAiB,IAAI,MAAA,CAAC;QAE1B,uBAAA,IAAI,6BAAa,IAAI,MAAA,CAAC;QACtB,uBAAA,IAAI,kCAAkB,IAAI,MAAA,CAAC;QAC3B,uBAAA,IAAI,iCAAiB,SAAS,MAAA,CAAC;QAC/B,uBAAA,IAAI,uCAAuB,SAAS,MAAA,CAAC;QACrC,uBAAA,IAAI,gCAAgB,SAAS,MAAA,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,uBAAA,IAAI,sCAAe,IAAI,uBAAA,IAAI,sCAAe,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACtE,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;YAED,uBAAA,IAAI,sCAAe,CAAC,MAAM,GAAG,GAAG,EAAE;gBAChC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,uBAAA,IAAI,sCAAe,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,aAAa;QACf,OAAO,uBAAA,IAAI,sCAAe,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,uBAAA,IAAI,mCAAY,CAAC;IAC1B,CAAC;CACF","sourcesContent":["import type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport {\n calculateAudioLevel,\n createAudioAnalyzer,\n getMediaStream,\n} from \"../utils/media.js\";\n\ninterface MediaControllerHost extends ReactiveControllerHost {\n _selectedDevice?: MediaDeviceInfo;\n _virtualMode?: boolean;\n _debug_displayAudio?: boolean;\n dispatchEvent(event: Event): boolean;\n}\n\nexport class MediaController implements ReactiveController {\n host: MediaControllerHost;\n\n #mediaStream: MediaStream | null = null;\n #sourceStreams: MediaStream[] = [];\n #mixContext: AudioContext | null = null;\n #audioContext: AudioContext | null = null;\n #analyser: AnalyserNode | null = null;\n #mediaRecorder: MediaRecorder | null = null;\n #visualiserInterval?: number;\n #audioLevel: number = 0;\n #onTrackEnded?: () => void;\n #onAudioLevelChange?: (level: number) => void;\n #dataHandler?: (data: Blob) => void;\n\n constructor(host: MediaControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n hostDisconnected(): void {\n this.cleanup();\n }\n\n async initialize(\n onTrackEnded?: () => void,\n dataHandler?: (data: Blob) => void,\n ): Promise<void> {\n await this.cleanup();\n\n this.#onTrackEnded = onTrackEnded;\n this.#dataHandler = dataHandler;\n\n const capture = await getMediaStream(\n this.host._selectedDevice?.deviceId,\n this.host._virtualMode,\n this.host._debug_displayAudio,\n );\n\n this.#mediaStream = capture.stream;\n this.#sourceStreams = capture.sourceStreams;\n this.#mixContext = capture.cleanupContext ?? null;\n\n this.#sourceStreams.forEach((stream) => {\n stream.getTracks().forEach((track: MediaStreamTrack) => {\n track.addEventListener(\"ended\", () => {\n if (this.#onTrackEnded) {\n this.#onTrackEnded();\n }\n });\n });\n });\n\n const { audioContext, analyser } = createAudioAnalyzer(this.#mediaStream);\n\n this.#audioContext = audioContext;\n this.#analyser = analyser;\n\n this.#mediaRecorder = new MediaRecorder(this.#mediaStream);\n this.#mediaRecorder.ondataavailable = (event) => {\n if (this.#dataHandler) {\n this.#dataHandler(event.data);\n }\n };\n }\n\n getAudioLevel(): number {\n return this.#analyser ? calculateAudioLevel(this.#analyser) : 0;\n }\n\n startAudioLevelMonitoring(\n onAudioLevelChange?: (level: number) => void,\n ): void {\n this.stopAudioLevelMonitoring();\n\n this.#onAudioLevelChange = onAudioLevelChange;\n\n this.#visualiserInterval = window.setInterval(() => {\n this.#audioLevel = this.getAudioLevel() * 3;\n this.host.requestUpdate();\n\n if (this.#onAudioLevelChange) {\n this.#onAudioLevelChange(this.#audioLevel);\n }\n }, 150);\n }\n\n stopAudioLevelMonitoring(): void {\n if (this.#visualiserInterval) {\n clearInterval(this.#visualiserInterval);\n this.#visualiserInterval = undefined;\n }\n\n this.#audioLevel = 0;\n this.host.requestUpdate();\n\n if (this.#onAudioLevelChange) {\n this.#onAudioLevelChange(this.#audioLevel);\n }\n }\n\n async cleanup(): Promise<void> {\n this.stopAudioLevelMonitoring();\n\n if (this.#mediaRecorder?.state === \"recording\") {\n this.#mediaRecorder.stop();\n }\n\n if (this.#mediaRecorder) {\n this.#mediaRecorder.ondataavailable = null;\n }\n\n if (this.#mediaStream) {\n this.#mediaStream.getTracks().forEach((track) => {\n track.stop();\n });\n this.#mediaStream = null;\n }\n\n this.#sourceStreams.forEach((stream) => {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n });\n this.#sourceStreams = [];\n\n if (this.#mixContext && this.#mixContext.state !== \"closed\") {\n await this.#mixContext.close();\n }\n\n this.#mixContext = null;\n\n if (this.#audioContext && this.#audioContext.state !== \"closed\") {\n await this.#audioContext.close();\n }\n\n this.#audioContext = null;\n\n this.#analyser = null;\n this.#mediaRecorder = null;\n this.#onTrackEnded = undefined;\n this.#onAudioLevelChange = undefined;\n this.#dataHandler = undefined;\n }\n\n /**\n * Stops the media recorder and waits for all buffered data to be flushed.\n * This ensures the final ondataavailable event fires before resolving.\n */\n async stopRecording(): Promise<void> {\n return new Promise<void>((resolve) => {\n if (!this.#mediaRecorder || this.#mediaRecorder.state !== \"recording\") {\n resolve();\n return;\n }\n\n this.#mediaRecorder.onstop = () => {\n resolve();\n };\n\n this.#mediaRecorder.stop();\n });\n }\n\n get mediaRecorder(): MediaRecorder | null {\n return this.#mediaRecorder;\n }\n\n get audioLevel(): number {\n return this.#audioLevel;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"socket-controller.js","sourceRoot":"","sources":["../../../src/controllers/socket-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { type CortiAuth, CortiClient } from \"@corti/sdk\";\nimport type { ReactiveController, ReactiveControllerHost } from \"lit\";\nimport type { ProxyOptions } from \"../types.js\";\nimport { errorEvent } from \"../utils/events.js\";\n\nexport interface SocketControllerHost extends ReactiveControllerHost {\n dispatchEvent: (event: Event) => void;\n _accessToken?: string;\n _authConfig?: CortiAuth.AuthTokenDerivable;\n _region?: string;\n _tenantName?: string;\n _socketUrl?: string;\n _socketProxy?: ProxyOptions;\n}\n\nexport type SocketControllerWebSocket = {\n readyState: number;\n close(): void;\n on(event: \"message\", handler: (message: { type: string }) => void): void;\n on(event: \"error\", handler: (error: Error) => void): void;\n on(event: \"close\", handler: (event: unknown) => void): void;\n send(data: Blob | ArrayBufferLike | string): void;\n sendEnd(message: { type: \"end\" }): void;\n};\n\nexport type SocketControllerCallbacks<TMessage = unknown> = {\n onMessage?: (message: TMessage) => void;\n onError?: (error: Error) => void;\n onClose?: (event: unknown) => void;\n onNetworkActivity?: (direction: \"sent\" | \"received\", data: unknown) => void;\n};\n\nexport type SocketControllerOutboundItem = Blob | { type: string };\n\nexport abstract class SocketController<\n TOutbound extends SocketControllerOutboundItem,\n TMessage = unknown,\n TConfig = unknown,\n TSocket extends SocketControllerWebSocket = SocketControllerWebSocket,\n> implements ReactiveController\n{\n readonly host: SocketControllerHost;\n\n #webSocket: TSocket | null = null;\n #cortiClient: CortiClient | null = null;\n #connectionGeneration = 0;\n #socketReady = false;\n #closeTimeout?: number;\n #outboundQueue: TOutbound[] = [];\n #callbacks?: SocketControllerCallbacks<TMessage>;\n #lastConfig: TConfig | null = null;\n #lastSocketUrl?: string;\n #lastSocketProxy?: ProxyOptions;\n #connectingPromise: Promise<boolean | \"superseded\"> | null = null;\n #isConnecting = false;\n\n protected abstract _connectThroughProxy(\n config: TConfig,\n proxy: ProxyOptions,\n ): Promise<TSocket>;\n protected abstract _connectThroughAuth(\n client: CortiClient,\n config: TConfig,\n ): Promise<TSocket>;\n\n constructor(host: SocketControllerHost) {\n this.host = host;\n host.addController(this);\n }\n\n async #openViaProxy(config: TConfig): Promise<TSocket> {\n const proxyOptions = this.host._socketProxy || {\n url: this.host._socketUrl || \"\",\n };\n\n if (!proxyOptions.url) {\n throw new Error(\"Proxy URL is required when using proxy client\");\n }\n\n return this._connectThroughProxy(config, proxyOptions);\n }\n\n async #openViaAuth(config: TConfig): Promise<TSocket> {\n if (!this.host._authConfig && !this.host._accessToken) {\n throw new Error(\n \"Auth configuration or access token is required to connect\",\n );\n }\n\n const auth: CortiAuth.AuthTokenDerivable = this.host._authConfig || {\n accessToken: this.host._accessToken || \"\",\n refreshAccessToken: () => ({\n accessToken: this.host._accessToken || \"\",\n }),\n };\n\n this.#cortiClient = new CortiClient({\n auth,\n environment: this.host._region,\n tenantName: this.host._tenantName,\n });\n\n return this._connectThroughAuth(this.#cortiClient, config);\n }\n\n async connect(\n config: TConfig,\n callbacks: SocketControllerCallbacks<TMessage>,\n ): Promise<boolean | \"superseded\"> {\n // If a connection attempt is already in progress with the same config, reuse it\n // to avoid opening multiple sockets when connect() is called concurrently.\n if (this.#connectingPromise && !this.#configHasChanged(config)) {\n return this.#connectingPromise;\n }\n\n // #isConnecting must be set synchronously before #doConnect runs, because\n // #doConnect calls cleanup() which closes the old socket, firing its \"close\"\n // event synchronously. Handlers that check isConnecting() need to see true\n // at that point — before #connectingPromise is even assigned.\n this.#isConnecting = true;\n this.#connectingPromise = this.#doConnect(config, callbacks).finally(() => {\n this.#isConnecting = false;\n this.#connectingPromise = null;\n });\n\n return this.#connectingPromise;\n }\n\n async #doConnect(\n config: TConfig,\n callbacks: SocketControllerCallbacks<TMessage>,\n ): Promise<boolean | \"superseded\"> {\n const newConnection =\n this.#configHasChanged(config) || !this.isConnectionOpen();\n\n if (newConnection) {\n this.cleanup();\n\n this.#lastConfig = config;\n this.#lastSocketUrl = this.host._socketUrl;\n this.#lastSocketProxy = this.host._socketProxy;\n\n const generation = this.#connectionGeneration;\n\n const socket =\n this.host._socketUrl || this.host._socketProxy\n ? await this.#openViaProxy(config)\n : await this.#openViaAuth(config);\n\n // If cleanup() was called while we were awaiting (e.g. config changed),\n // the generation counter will have advanced — discard this stale socket.\n if (this.#connectionGeneration !== generation) {\n socket.close();\n return \"superseded\";\n }\n\n this.#webSocket = socket;\n\n callbacks?.onNetworkActivity?.(\"sent\", {\n configuration: config,\n type: \"config\",\n });\n }\n\n this.#callbacks = callbacks;\n this.#setupWebSocketHandlers(callbacks);\n\n if (!newConnection && this.isConnectionOpen()) {\n this.#socketReady = true;\n this.#drain();\n }\n\n return newConnection;\n }\n\n hostDisconnected(): void {\n this.cleanup();\n }\n\n isConnectionOpen(): boolean {\n return (\n this.#webSocket !== null &&\n (this.#webSocket.readyState === WebSocket.OPEN ||\n this.#webSocket.readyState === WebSocket.CONNECTING)\n );\n }\n\n isConnecting(): boolean {\n return this.#isConnecting;\n }\n\n async waitForConnection(): Promise<void> {\n await this.#connectingPromise;\n }\n\n #isSocketOpen(): boolean {\n return (\n this.#webSocket !== null && this.#webSocket.readyState === WebSocket.OPEN\n );\n }\n\n #configHasChanged(nextConfig: TConfig): boolean {\n return (\n JSON.stringify(nextConfig) !== JSON.stringify(this.#lastConfig) ||\n this.host._socketUrl !== this.#lastSocketUrl ||\n JSON.stringify(this.host._socketProxy) !==\n JSON.stringify(this.#lastSocketProxy)\n );\n }\n\n #drain(): void {\n if (\n !this.#socketReady ||\n !this.#isSocketOpen() ||\n this.#outboundQueue.length === 0\n ) {\n return;\n }\n\n while (this.#outboundQueue.length > 0 && this.#isSocketOpen()) {\n const item = this.#outboundQueue.shift();\n\n if (item === undefined) {\n break;\n }\n\n if (item instanceof Blob) {\n this.#webSocket!.send(item);\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n size: item.size,\n type: \"audio\",\n });\n continue;\n }\n\n this.#webSocket!.send(JSON.stringify(item));\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n type: item.type,\n });\n }\n }\n\n mediaRecorderHandler = (data: Blob): void => {\n if (this.#socketReady && this.#isSocketOpen()) {\n this.#webSocket?.send(data);\n this.#callbacks?.onNetworkActivity?.(\"sent\", {\n size: data.size,\n type: \"audio\",\n });\n return;\n }\n\n this.#outboundQueue.push(data as TOutbound);\n };\n\n async pause(): Promise<void> {\n if (this.#socketReady && this.#isSocketOpen()) {\n this.#webSocket?.send(JSON.stringify({ type: \"flush\" }));\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"flush\" });\n return;\n }\n\n this.#outboundQueue.push({ type: \"flush\" } as TOutbound);\n }\n\n async stopRecording(): Promise<void> {\n await this.pause();\n }\n\n async closeConnection(onClose?: (event: unknown) => void): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const oldSocket = this.#webSocket;\n this.#webSocket = null;\n\n if (\n !oldSocket ||\n (oldSocket.readyState !== WebSocket.OPEN &&\n oldSocket.readyState !== WebSocket.CONNECTING)\n ) {\n this.#socketReady = false;\n resolve();\n return;\n }\n\n oldSocket.on(\"close\", (event) => {\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n if (onClose) {\n onClose(event);\n } else if (this.#callbacks?.onClose) {\n this.#callbacks.onClose(event);\n }\n\n resolve();\n });\n\n const wasReady = this.#socketReady;\n this.#socketReady = false;\n\n oldSocket.on(\"message\", (message) => {\n this.#callbacks?.onNetworkActivity?.(\"received\", message);\n\n if (this.#callbacks?.onMessage) {\n this.#callbacks.onMessage(message as TMessage);\n }\n\n // closeConnection() may be called before CONFIG_ACCEPTED arrives (e.g.\n // openConnection() followed immediately by closeConnection()). We can't\n // use the outbound queue here because #webSocket is already null, so we\n // send \"end\" directly on oldSocket as soon as config is accepted.\n if (!wasReady && message.type === \"CONFIG_ACCEPTED\") {\n oldSocket.sendEnd({ type: \"end\" });\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"end\" });\n return;\n }\n\n if (message.type === \"ended\" || message.type === \"ENDED\") {\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n resolve();\n return;\n }\n });\n\n if (wasReady) {\n oldSocket.sendEnd({ type: \"end\" });\n this.#callbacks?.onNetworkActivity?.(\"sent\", { type: \"end\" });\n }\n\n this.#closeTimeout = window.setTimeout(() => {\n reject(new Error(\"Connection close timeout\"));\n\n if (oldSocket?.readyState === WebSocket.OPEN) {\n oldSocket.close();\n }\n }, 10000);\n });\n }\n\n cleanup(): void {\n this.#connectionGeneration++;\n this.#socketReady = false;\n\n if (this.#closeTimeout) {\n clearTimeout(this.#closeTimeout);\n this.#closeTimeout = undefined;\n }\n\n if (this.isConnectionOpen()) {\n this.#webSocket?.close();\n }\n\n this.#webSocket = null;\n this.#cortiClient = null;\n this.#lastConfig = null;\n this.#lastSocketUrl = undefined;\n this.#lastSocketProxy = undefined;\n\n if (this.#outboundQueue.length > 0) {\n this.host.dispatchEvent(\n errorEvent(\n `${this.#outboundQueue.length} unsent message(s) were discarded because the configuration changed before the connection was closed`,\n ),\n );\n }\n\n this.#outboundQueue = [];\n }\n\n #setupWebSocketHandlers(\n callbacks: SocketControllerCallbacks<TMessage>,\n ): void {\n if (!this.#webSocket) {\n throw new Error(\"WebSocket not initialized\");\n }\n\n this.#webSocket.on(\"message\", (message) => {\n if (message.type === \"CONFIG_ACCEPTED\") {\n this.#socketReady = true;\n this.#drain();\n }\n\n callbacks.onNetworkActivity?.(\"received\", message);\n\n if (callbacks.onMessage) {\n callbacks.onMessage(message as TMessage);\n }\n });\n\n this.#webSocket.on(\"error\", (event: Error) => {\n this.#socketReady = false;\n if (callbacks.onError) {\n callbacks.onError(event);\n }\n });\n\n this.#webSocket.on(\"close\", (event: unknown) => {\n this.#socketReady = false;\n if (callbacks.onClose) {\n callbacks.onClose(event);\n }\n });\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/icons/icons.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AACzC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG3C,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IACvC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;KAmBV,CAAC;IACJ,CAAC;CACF,CAAA;AAvBY,SAAS;IADrB,aAAa,CAAC,aAAa,CAAC;GAChB,SAAS,CAuBrB;;AAGM,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,UAAU;IACxC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;;;WAoBJ,CAAC;IACV,CAAC;CACF,CAAA;AAxBY,UAAU;IADtB,aAAa,CAAC,cAAc,CAAC;GACjB,UAAU,CAwBtB;;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAC3C,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;KAkBV,CAAC;IACJ,CAAC;CACF,CAAA;AAtBY,aAAa;IADzB,aAAa,CAAC,gBAAgB,CAAC;GACnB,aAAa,CAsBzB;;AAEM,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,UAAU;IAC1C,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;;;;WAkBJ,CAAC;IACV,CAAC;CACF,CAAA;AAtBY,YAAY;IADxB,aAAa,CAAC,eAAe,CAAC;GAClB,YAAY,CAsBxB;;AAGM,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,UAAU;IAczC,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;aAeF,CAAC;IACZ,CAAC;;AA9BM,kBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;GAWlB,AAXY,CAWX;AAZS,WAAW;IADvB,aAAa,CAAC,cAAc,CAAC;GACjB,WAAW,CAgCvB;;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,UAAU;IAehD,MAAM;QACJ,OAAO,IAAI,CAAA;;;;;;;;;;;;;;;WAeJ,CAAC;IACV,CAAC;;AA/BM,yBAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;GAYlB,AAZY,CAYX;AAbS,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAiC9B","sourcesContent":["/* eslint-disable max-classes-per-file */\nimport { css, html, LitElement } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\n\n@customElement(\"icon-mic-on\")\nexport class IconMicOn extends LitElement {\n render() {\n return html`\n <div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-mic\"\n >\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n </div>\n `;\n }\n}\n\n@customElement(\"icon-mic-off\")\nexport class IconMicOff extends LitElement {\n render() {\n return html` <div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-mic-off\"\n >\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n <path d=\"M18.89 13.23A7.12 7.12 0 0 0 19 12v-2\" />\n <path d=\"M5 10v2a7 7 0 0 0 12 5\" />\n <path d=\"M15 9.34V5a3 3 0 0 0-5.68-1.33\" />\n <path d=\"M9 9v3a3 3 0 0 0 5.12 2.12\" />\n <line x1=\"12\" x2=\"12\" y1=\"19\" y2=\"22\" />\n </svg>\n </div>`;\n }\n}\n\n@customElement(\"icon-recording\")\nexport class IconRecording extends LitElement {\n render() {\n return html`\n <div style=\"display: flex;\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-circle-stop\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <rect x=\"9\" y=\"9\" width=\"6\" height=\"6\" rx=\"1\" fill=\"currentColor\" />\n </svg>\n </div>\n `;\n }\n}\n@customElement(\"icon-settings\")\nexport class IconSettings extends LitElement {\n render() {\n return html`<div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-settings-2\"\n >\n <path d=\"M20 7h-9\" />\n <path d=\"M14 17H5\" />\n <circle cx=\"17\" cy=\"17\" r=\"3\" />\n <circle cx=\"7\" cy=\"7\" r=\"3\" />\n </svg>\n </div>`;\n }\n}\n\n@customElement(\"icon-headset\")\nexport class IconHeadset extends LitElement {\n static styles = css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n `;\n\n render() {\n return html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-headset\"\n >\n <path d=\"M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H4a1 1 0 0 1-1-1v-6Z\" />\n <path d=\"M21 14h-3a2 2 0 0 0-2 2v3a2 2 0 0 0 2 2h2a1 1 0 0 0 1-1v-6Z\" />\n <path d=\"M3 14a9 9 0 0 1 18 0\" />\n </svg>`;\n }\n}\n\n@customElement(\"icon-loading-spinner\")\nexport class IconLoadingSpinner extends LitElement {\n static styles = css`\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n .spin {\n animation: spin 1s linear infinite;\n }\n `;\n\n render() {\n return html`<div style=\"display: flex\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-loader-circle spin\"\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n </div>`;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/icons/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
package/index.js DELETED
@@ -1,8 +0,0 @@
1
- export { CortiDictation as default, CortiDictation, } from "./components/corti-dictation.js";
2
- export { DictationDeviceSelector } from "./components/device-selector.js";
3
- export { DictationRecordingButton } from "./components/dictation-recording-button.js";
4
- export { DictationKeybindingSelector } from "./components/keybinding-selector.js";
5
- export { DictationLanguageSelector } from "./components/language-selector.js";
6
- export { DictationSettingsMenu } from "./components/settings-menu.js";
7
- export { DictationRoot } from "./contexts/dictation-context.js";
8
- //# sourceMappingURL=index.js.map
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,IAAI,OAAO,EACzB,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC","sourcesContent":["export {\n CortiDictation as default,\n CortiDictation,\n} from \"./components/corti-dictation.js\";\nexport { DictationDeviceSelector } from \"./components/device-selector.js\";\nexport { DictationRecordingButton } from \"./components/dictation-recording-button.js\";\nexport { DictationKeybindingSelector } from \"./components/keybinding-selector.js\";\nexport { DictationLanguageSelector } from \"./components/language-selector.js\";\nexport { DictationSettingsMenu } from \"./components/settings-menu.js\";\nexport { DictationRoot } from \"./contexts/dictation-context.js\";\n\nexport type {\n ConfigurableSettings,\n Keybinding,\n RecordingState,\n} from \"./types.js\";\nexport type {\n AudioEventEventDetail,\n AudioLevelChangedEventDetail,\n CommandEventDetail,\n DeltaUsageEventDetail,\n ErrorEventDetail,\n KeybindingActivatedEventDetail,\n KeybindingChangedEventDetail,\n LanguageChangedEventDetail,\n LanguagesChangedEventDetail,\n NetworkActivityEventDetail,\n RecordingDevicesChangedEventDetail,\n RecordingStateChangedEventDetail,\n TranscriptEventDetail,\n UsageEventDetail,\n} from \"./utils/events.js\";\n"]}
@@ -1,2 +0,0 @@
1
- declare const AmbientVirtualModeSelectorStyles: import("lit").CSSResult;
2
- export default AmbientVirtualModeSelectorStyles;
@@ -1,101 +0,0 @@
1
- import { css } from "lit";
2
- const AmbientVirtualModeSelectorStyles = css `
3
- :host {
4
- display: block;
5
- }
6
-
7
- .virtual-mode-row {
8
- display: flex;
9
- align-items: flex-start;
10
- justify-content: space-between;
11
- gap: 12px;
12
- width: 100%;
13
- }
14
-
15
- .virtual-mode-content {
16
- display: flex;
17
- flex-direction: column;
18
- gap: 4px;
19
- flex: 1 1 auto;
20
- min-width: 0;
21
- }
22
-
23
- .virtual-mode-header {
24
- display: flex;
25
- align-items: center;
26
- gap: 8px;
27
- line-height: 1;
28
- color: var(--component-text-color, light-dark(#333, #eee));
29
- }
30
-
31
- .virtual-mode-header icon-headset {
32
- display: inline-flex;
33
- flex-shrink: 0;
34
- width: 14px;
35
- height: 14px;
36
- transform: translateY(-1px);
37
- }
38
-
39
- .virtual-mode-title {
40
- font-size: 0.8rem;
41
- font-weight: 500;
42
- line-height: 1;
43
- color: var(--component-text-color, light-dark(#333, #eee));
44
- }
45
-
46
- .virtual-mode-description {
47
- font-size: 12px;
48
- line-height: 1.45;
49
- color: var(--component-text-color, light-dark(#333, #eee));
50
- opacity: 0.6;
51
- }
52
-
53
- .switch {
54
- appearance: none;
55
- -webkit-appearance: none;
56
- position: relative;
57
- width: 36px;
58
- height: 20px;
59
- flex-shrink: 0;
60
- border-radius: 9999px;
61
- background: var(--card-border-color, light-dark(#ddd, #555));
62
- border: none;
63
- cursor: pointer;
64
- padding: 2px;
65
- transition: background-color 0.15s ease;
66
- margin: 0;
67
- }
68
-
69
- .switch:checked {
70
- background: var(--action-accent-background, light-dark(#007bff, #0056b3));
71
- }
72
-
73
- .switch::before {
74
- content: "";
75
- position: absolute;
76
- top: 2px;
77
- left: 2px;
78
- width: 16px;
79
- height: 16px;
80
- border-radius: 9999px;
81
- background: var(--card-background, light-dark(#fff, #fff));
82
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
83
- transition: transform 0.15s ease;
84
- }
85
-
86
- .switch:checked::before {
87
- transform: translateX(16px);
88
- }
89
-
90
- .switch:disabled {
91
- cursor: not-allowed;
92
- opacity: 0.5;
93
- }
94
-
95
- .switch:focus-visible {
96
- outline: 2px solid var(--action-accent-background, light-dark(#007bff, #0056b3));
97
- outline-offset: 2px;
98
- }
99
- `;
100
- export default AmbientVirtualModeSelectorStyles;
101
- //# sourceMappingURL=ambient-virtual-mode-selector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ambient-virtual-mode-selector.js","sourceRoot":"","sources":["../../../src/styles/ambient-virtual-mode-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,gCAAgC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiG3C,CAAC;AAEF,eAAe,gCAAgC,CAAC","sourcesContent":["import { css } from \"lit\";\n\nconst AmbientVirtualModeSelectorStyles = css`\n :host {\n display: block;\n }\n\n .virtual-mode-row {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n width: 100%;\n }\n\n .virtual-mode-content {\n display: flex;\n flex-direction: column;\n gap: 4px;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .virtual-mode-header {\n display: flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n color: var(--component-text-color, light-dark(#333, #eee));\n }\n\n .virtual-mode-header icon-headset {\n display: inline-flex;\n flex-shrink: 0;\n width: 14px;\n height: 14px;\n transform: translateY(-1px);\n }\n\n .virtual-mode-title {\n font-size: 0.8rem;\n font-weight: 500;\n line-height: 1;\n color: var(--component-text-color, light-dark(#333, #eee));\n }\n\n .virtual-mode-description {\n font-size: 12px;\n line-height: 1.45;\n color: var(--component-text-color, light-dark(#333, #eee));\n opacity: 0.6;\n }\n\n .switch {\n appearance: none;\n -webkit-appearance: none;\n position: relative;\n width: 36px;\n height: 20px;\n flex-shrink: 0;\n border-radius: 9999px;\n background: var(--card-border-color, light-dark(#ddd, #555));\n border: none;\n cursor: pointer;\n padding: 2px;\n transition: background-color 0.15s ease;\n margin: 0;\n }\n\n .switch:checked {\n background: var(--action-accent-background, light-dark(#007bff, #0056b3));\n }\n\n .switch::before {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 9999px;\n background: var(--card-background, light-dark(#fff, #fff));\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);\n transition: transform 0.15s ease;\n }\n\n .switch:checked::before {\n transform: translateX(16px);\n }\n\n .switch:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .switch:focus-visible {\n outline: 2px solid var(--action-accent-background, light-dark(#007bff, #0056b3));\n outline-offset: 2px;\n }\n`;\n\nexport default AmbientVirtualModeSelectorStyles;\n"]}