@dxos/plugin-transcription 0.8.3 → 0.8.4-main.03d5cd7b56

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 (344) hide show
  1. package/dist/lib/neutral/TranscriptionContainer-XNGXNGPX.mjs +35 -0
  2. package/dist/lib/neutral/TranscriptionContainer-XNGXNGPX.mjs.map +7 -0
  3. package/dist/lib/neutral/TranscriptionPlugin.mjs +34 -0
  4. package/dist/lib/neutral/TranscriptionPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/TranscriptionPlugin.node.mjs +25 -0
  6. package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs +15 -0
  8. package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs.map +7 -0
  9. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  10. package/dist/lib/neutral/capabilities/index.mjs +17 -0
  11. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  12. package/dist/lib/neutral/chunk-GL4RS533.mjs +22 -0
  13. package/dist/lib/neutral/chunk-GL4RS533.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  15. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs +35 -0
  16. package/dist/lib/neutral/chunk-KAEXRX3Y.mjs.map +7 -0
  17. package/dist/lib/{browser/chunk-IQ5ZRMHZ.mjs → neutral/chunk-LS3R7EQI.mjs} +130 -195
  18. package/dist/lib/neutral/chunk-LS3R7EQI.mjs.map +7 -0
  19. package/dist/lib/neutral/chunk-MLRJWAQH.mjs +179 -0
  20. package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +7 -0
  21. package/dist/lib/neutral/chunk-NNR3EYR2.mjs +124 -0
  22. package/dist/lib/neutral/chunk-NNR3EYR2.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-NQQK7UZQ.mjs +244 -0
  24. package/dist/lib/neutral/chunk-NQQK7UZQ.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-WVEZMGBT.mjs +8 -0
  26. package/dist/lib/neutral/chunk-WVEZMGBT.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +30 -0
  28. package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +7 -0
  29. package/dist/lib/neutral/components/index.mjs +207 -0
  30. package/dist/lib/neutral/components/index.mjs.map +7 -0
  31. package/dist/lib/neutral/containers/index.mjs +9 -0
  32. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  33. package/dist/lib/neutral/create-2D6S4IMQ.mjs +21 -0
  34. package/dist/lib/neutral/create-2D6S4IMQ.mjs.map +7 -0
  35. package/dist/lib/neutral/hooks/index.mjs +17 -0
  36. package/dist/lib/neutral/index.mjs +44 -0
  37. package/dist/lib/neutral/meta.json +1 -0
  38. package/dist/lib/neutral/meta.mjs +8 -0
  39. package/dist/lib/neutral/meta.mjs.map +7 -0
  40. package/dist/lib/neutral/open-2QB6IIET.mjs +27 -0
  41. package/dist/lib/neutral/open-2QB6IIET.mjs.map +7 -0
  42. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs +13 -0
  43. package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs.map +7 -0
  44. package/dist/lib/neutral/operations/index.mjs +8 -0
  45. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  46. package/dist/lib/neutral/plugin.mjs +16 -0
  47. package/dist/lib/neutral/plugin.mjs.map +7 -0
  48. package/dist/lib/neutral/react-surface-QF4MUMWG.mjs +26 -0
  49. package/dist/lib/neutral/react-surface-QF4MUMWG.mjs.map +7 -0
  50. package/dist/lib/neutral/summarize-CJPVKWYZ.mjs +78 -0
  51. package/dist/lib/neutral/summarize-CJPVKWYZ.mjs.map +7 -0
  52. package/dist/lib/neutral/text-content-LHSUG2D2.mjs +30 -0
  53. package/dist/lib/neutral/text-content-LHSUG2D2.mjs.map +7 -0
  54. package/dist/lib/{browser/transcriber-OYPLZFG5.mjs → neutral/transcriber-M3R6HPTZ.mjs} +21 -18
  55. package/dist/lib/neutral/transcriber-M3R6HPTZ.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +22 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +12 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/TranscriptionPlugin.d.ts +3 -1
  61. package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
  62. package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
  63. package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
  65. package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/blueprints/index.d.ts +2 -0
  67. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  68. package/dist/types/src/blueprints/transcription-blueprint.d.ts +4 -0
  69. package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  71. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/index.d.ts +10 -4
  73. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  75. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  77. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/text-content.d.ts +8 -0
  79. package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/transcriber.d.ts +4 -3
  81. package/dist/types/src/capabilities/transcriber.d.ts.map +1 -1
  82. package/dist/types/src/components/Transcription/Transcription.d.ts +18 -0
  83. package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -0
  84. package/dist/types/src/components/Transcription/Transcription.stories.d.ts +40 -0
  85. package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/Transcription/index.d.ts +2 -0
  87. package/dist/types/src/components/Transcription/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Transcription/transcription-extension.d.ts +15 -0
  89. package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -0
  90. package/dist/types/src/components/index.d.ts +1 -6
  91. package/dist/types/src/components/index.d.ts.map +1 -1
  92. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts +6 -0
  93. package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts.map +1 -0
  94. package/dist/types/src/containers/TranscriptionContainer/index.d.ts +2 -0
  95. package/dist/types/src/containers/TranscriptionContainer/index.d.ts.map +1 -0
  96. package/dist/types/src/containers/index.d.ts +3 -0
  97. package/dist/types/src/containers/index.d.ts.map +1 -0
  98. package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
  99. package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
  100. package/dist/types/src/hooks/useQueueModelAdapter.d.ts +1 -1
  101. package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +1 -1
  102. package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
  103. package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
  104. package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
  105. package/dist/types/src/index.d.ts +2 -3
  106. package/dist/types/src/index.d.ts.map +1 -1
  107. package/dist/types/src/meta.d.ts +2 -3
  108. package/dist/types/src/meta.d.ts.map +1 -1
  109. package/dist/types/src/model/model.d.ts +2 -2
  110. package/dist/types/src/model/model.d.ts.map +1 -1
  111. package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
  112. package/dist/types/src/normalization/index.d.ts.map +1 -0
  113. package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +5 -5
  114. package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
  115. package/dist/types/src/normalization/normalization.d.ts +543 -0
  116. package/dist/types/src/normalization/normalization.d.ts.map +1 -0
  117. package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
  118. package/dist/types/src/normalization/utils.d.ts +3 -0
  119. package/dist/types/src/normalization/utils.d.ts.map +1 -0
  120. package/dist/types/src/operations/create.d.ts +5 -0
  121. package/dist/types/src/operations/create.d.ts.map +1 -0
  122. package/dist/types/src/operations/index.d.ts +3 -0
  123. package/dist/types/src/operations/index.d.ts.map +1 -0
  124. package/dist/types/src/operations/open.d.ts +5 -0
  125. package/dist/types/src/operations/open.d.ts.map +1 -0
  126. package/dist/types/src/operations/summarize.d.ts +8 -0
  127. package/dist/types/src/operations/summarize.d.ts.map +1 -0
  128. package/dist/types/src/plugin.d.ts +4 -0
  129. package/dist/types/src/plugin.d.ts.map +1 -0
  130. package/dist/types/src/stories/FileTranscription.stories.d.ts +18 -0
  131. package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
  132. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts +14 -0
  133. package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
  134. package/dist/types/src/stories/MicrophoneTranscription.stories.d.ts +20 -0
  135. package/dist/types/src/stories/MicrophoneTranscription.stories.d.ts.map +1 -0
  136. package/dist/types/src/stories/TranscriptionStory.d.ts +23 -0
  137. package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
  138. package/dist/types/src/stories/useIsSpeaking.d.ts.map +1 -0
  139. package/dist/types/src/testing/testing.d.ts +10 -10
  140. package/dist/types/src/testing/testing.d.ts.map +1 -1
  141. package/dist/types/src/transcriber/media-stream-recorder.d.ts +3 -3
  142. package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
  143. package/dist/types/src/transcriber/transcriber.d.ts +60 -5
  144. package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
  145. package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
  146. package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
  147. package/dist/types/src/transcriber/transcription-manager.d.ts +12 -13
  148. package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
  149. package/dist/types/src/translations.d.ts +10 -11
  150. package/dist/types/src/translations.d.ts.map +1 -1
  151. package/dist/types/src/types/TranscriptOperation.d.ts +917 -0
  152. package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -0
  153. package/dist/types/src/types/TranscriptionCapabilities.d.ts +17 -0
  154. package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -0
  155. package/dist/types/src/types/defs.d.ts +5 -0
  156. package/dist/types/src/types/defs.d.ts.map +1 -0
  157. package/dist/types/src/types/index.d.ts +3 -2
  158. package/dist/types/src/types/index.d.ts.map +1 -1
  159. package/dist/types/src/util/array.d.ts.map +1 -1
  160. package/dist/types/src/util/get-time-str.d.ts.map +1 -1
  161. package/dist/types/src/util/index.d.ts +1 -0
  162. package/dist/types/src/util/index.d.ts.map +1 -1
  163. package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
  164. package/dist/types/src/util/render-byline.d.ts +4 -0
  165. package/dist/types/src/util/render-byline.d.ts.map +1 -0
  166. package/dist/types/tsconfig.tsbuildinfo +1 -1
  167. package/package.json +152 -84
  168. package/src/TranscriptionPlugin.node.ts +20 -0
  169. package/src/TranscriptionPlugin.test.ts +31 -0
  170. package/src/TranscriptionPlugin.tsx +22 -61
  171. package/src/blueprints/index.ts +5 -0
  172. package/src/blueprints/transcription-blueprint.ts +29 -0
  173. package/src/capabilities/blueprint-definition.ts +19 -0
  174. package/src/capabilities/index.ts +11 -6
  175. package/src/capabilities/operation-handler.ts +16 -0
  176. package/src/capabilities/react-surface.tsx +23 -14
  177. package/src/capabilities/text-content.ts +33 -0
  178. package/src/capabilities/transcriber.ts +53 -41
  179. package/src/components/{Transcript/Transcript.stories.tsx → Transcription/Transcription.stories.tsx} +80 -75
  180. package/src/components/Transcription/Transcription.tsx +64 -0
  181. package/src/components/{Transcript → Transcription}/index.ts +1 -1
  182. package/src/components/{Transcript/transcript-extension.ts → Transcription/transcription-extension.ts} +15 -48
  183. package/src/components/index.ts +1 -6
  184. package/src/containers/TranscriptionContainer/TranscriptionContainer.tsx +35 -0
  185. package/src/containers/TranscriptionContainer/index.ts +5 -0
  186. package/src/containers/index.ts +7 -0
  187. package/src/hooks/useAudioFile.ts +49 -53
  188. package/src/hooks/useQueueModelAdapter.ts +1 -1
  189. package/src/hooks/useTranscriber.ts +15 -7
  190. package/src/hooks/useVoiceInput.ts +3 -3
  191. package/src/index.ts +4 -5
  192. package/src/meta.ts +9 -6
  193. package/src/model/model.test.ts +27 -21
  194. package/src/model/model.ts +3 -3
  195. package/src/{segments-normalization → normalization}/message-normalizer.ts +20 -19
  196. package/src/{segments-normalization → normalization}/normalization.test.ts +26 -33
  197. package/src/normalization/normalization.ts +76 -0
  198. package/src/{segments-normalization → normalization}/utils.ts +2 -2
  199. package/src/operations/create.ts +24 -0
  200. package/src/operations/index.ts +11 -0
  201. package/src/operations/open.ts +28 -0
  202. package/src/operations/summarize.ts +101 -0
  203. package/src/plugin.ts +11 -0
  204. package/src/stories/FileTranscription.stories.tsx +269 -0
  205. package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +46 -40
  206. package/src/stories/MicrophoneTranscription.stories.tsx +264 -0
  207. package/src/stories/TranscriptionStory.tsx +93 -0
  208. package/src/testing/testing.ts +41 -41
  209. package/src/transcriber/media-stream-recorder.ts +4 -4
  210. package/src/transcriber/transcriber.browser.test.ts +5 -5
  211. package/src/transcriber/transcriber.test.ts +104 -0
  212. package/src/transcriber/transcriber.ts +101 -62
  213. package/src/transcriber/transcription-manager.ts +37 -52
  214. package/src/translations.ts +12 -10
  215. package/src/types/TranscriptOperation.ts +103 -0
  216. package/src/types/TranscriptionCapabilities.ts +39 -0
  217. package/src/types/defs.ts +9 -0
  218. package/src/types/index.ts +4 -2
  219. package/src/util/index.ts +1 -0
  220. package/src/util/render-byline.ts +33 -0
  221. package/dist/lib/browser/TranscriptContainer-H3AZQ4CQ.mjs +0 -11
  222. package/dist/lib/browser/chunk-53AXUEIQ.mjs +0 -764
  223. package/dist/lib/browser/chunk-53AXUEIQ.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-GOF7MJNV.mjs +0 -19
  225. package/dist/lib/browser/chunk-GOF7MJNV.mjs.map +0 -7
  226. package/dist/lib/browser/chunk-IQ5ZRMHZ.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-OSISJM2F.mjs +0 -55
  228. package/dist/lib/browser/chunk-OSISJM2F.mjs.map +0 -7
  229. package/dist/lib/browser/chunk-UDCCT32F.mjs +0 -8
  230. package/dist/lib/browser/chunk-UDCCT32F.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-W2KNYJD6.mjs +0 -16
  232. package/dist/lib/browser/chunk-W2KNYJD6.mjs.map +0 -7
  233. package/dist/lib/browser/index.mjs +0 -125
  234. package/dist/lib/browser/index.mjs.map +0 -7
  235. package/dist/lib/browser/intent-resolver-BGADCHVM.mjs +0 -30
  236. package/dist/lib/browser/intent-resolver-BGADCHVM.mjs.map +0 -7
  237. package/dist/lib/browser/meta.json +0 -1
  238. package/dist/lib/browser/react-surface-HMJS5FSS.mjs +0 -34
  239. package/dist/lib/browser/react-surface-HMJS5FSS.mjs.map +0 -7
  240. package/dist/lib/browser/transcriber-OYPLZFG5.mjs.map +0 -7
  241. package/dist/lib/browser/types/index.mjs +0 -14
  242. package/dist/lib/node/TranscriptContainer-KIG3GMAB.cjs +0 -32
  243. package/dist/lib/node/TranscriptContainer-KIG3GMAB.cjs.map +0 -7
  244. package/dist/lib/node/chunk-3PYT3BDM.cjs +0 -40
  245. package/dist/lib/node/chunk-3PYT3BDM.cjs.map +0 -7
  246. package/dist/lib/node/chunk-6LW5RA3K.cjs +0 -75
  247. package/dist/lib/node/chunk-6LW5RA3K.cjs.map +0 -7
  248. package/dist/lib/node/chunk-AFUZI63A.cjs +0 -42
  249. package/dist/lib/node/chunk-AFUZI63A.cjs.map +0 -7
  250. package/dist/lib/node/chunk-CVUN3UO7.cjs +0 -778
  251. package/dist/lib/node/chunk-CVUN3UO7.cjs.map +0 -7
  252. package/dist/lib/node/chunk-FKDJNJ57.cjs +0 -35
  253. package/dist/lib/node/chunk-FKDJNJ57.cjs.map +0 -7
  254. package/dist/lib/node/chunk-ZFAUMZXE.cjs +0 -518
  255. package/dist/lib/node/chunk-ZFAUMZXE.cjs.map +0 -7
  256. package/dist/lib/node/index.cjs +0 -133
  257. package/dist/lib/node/index.cjs.map +0 -7
  258. package/dist/lib/node/intent-resolver-LL3TTI4H.cjs +0 -45
  259. package/dist/lib/node/intent-resolver-LL3TTI4H.cjs.map +0 -7
  260. package/dist/lib/node/meta.json +0 -1
  261. package/dist/lib/node/react-surface-N25TBBG4.cjs +0 -56
  262. package/dist/lib/node/react-surface-N25TBBG4.cjs.map +0 -7
  263. package/dist/lib/node/transcriber-6J4FVFSZ.cjs +0 -68
  264. package/dist/lib/node/transcriber-6J4FVFSZ.cjs.map +0 -7
  265. package/dist/lib/node/types/index.cjs +0 -36
  266. package/dist/lib/node/types/index.cjs.map +0 -7
  267. package/dist/lib/node-esm/TranscriptContainer-G75LDEO5.mjs +0 -12
  268. package/dist/lib/node-esm/chunk-56QHOX4A.mjs +0 -765
  269. package/dist/lib/node-esm/chunk-56QHOX4A.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-FH75X4JC.mjs +0 -56
  271. package/dist/lib/node-esm/chunk-FH75X4JC.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-MFJO7EKD.mjs +0 -10
  273. package/dist/lib/node-esm/chunk-MFJO7EKD.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-MFJPEIVB.mjs +0 -17
  275. package/dist/lib/node-esm/chunk-MFJPEIVB.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-PRL64SRU.mjs +0 -496
  277. package/dist/lib/node-esm/chunk-PRL64SRU.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-TXMDLLBR.mjs +0 -21
  279. package/dist/lib/node-esm/chunk-TXMDLLBR.mjs.map +0 -7
  280. package/dist/lib/node-esm/index.mjs +0 -126
  281. package/dist/lib/node-esm/index.mjs.map +0 -7
  282. package/dist/lib/node-esm/intent-resolver-5LVCYSJS.mjs +0 -31
  283. package/dist/lib/node-esm/intent-resolver-5LVCYSJS.mjs.map +0 -7
  284. package/dist/lib/node-esm/meta.json +0 -1
  285. package/dist/lib/node-esm/react-surface-JGQSYGRR.mjs +0 -35
  286. package/dist/lib/node-esm/react-surface-JGQSYGRR.mjs.map +0 -7
  287. package/dist/lib/node-esm/transcriber-TVG2MBBN.mjs +0 -57
  288. package/dist/lib/node-esm/transcriber-TVG2MBBN.mjs.map +0 -7
  289. package/dist/lib/node-esm/types/index.mjs +0 -15
  290. package/dist/types/src/capabilities/capabilities.d.ts +0 -17
  291. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  292. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  293. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  294. package/dist/types/src/components/Transcript/Transcript.d.ts +0 -20
  295. package/dist/types/src/components/Transcript/Transcript.d.ts.map +0 -1
  296. package/dist/types/src/components/Transcript/Transcript.stories.d.ts +0 -24
  297. package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +0 -1
  298. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +0 -28
  299. package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +0 -1
  300. package/dist/types/src/components/Transcript/index.d.ts +0 -2
  301. package/dist/types/src/components/Transcript/index.d.ts.map +0 -1
  302. package/dist/types/src/components/Transcript/transcript-extension.d.ts +0 -19
  303. package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +0 -1
  304. package/dist/types/src/components/TranscriptContainer.d.ts +0 -8
  305. package/dist/types/src/components/TranscriptContainer.d.ts.map +0 -1
  306. package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -17
  307. package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
  308. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts +0 -10
  309. package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
  310. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +0 -19
  311. package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
  312. package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -11
  313. package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
  314. package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
  315. package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
  316. package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
  317. package/dist/types/src/segments-normalization/normalization.d.ts +0 -329
  318. package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
  319. package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
  320. package/dist/types/src/segments-normalization/utils.d.ts +0 -3
  321. package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
  322. package/dist/types/src/types/schema.d.ts +0 -41
  323. package/dist/types/src/types/schema.d.ts.map +0 -1
  324. package/dist/types/src/types/types.d.ts +0 -31
  325. package/dist/types/src/types/types.d.ts.map +0 -1
  326. package/src/capabilities/capabilities.ts +0 -33
  327. package/src/capabilities/intent-resolver.ts +0 -24
  328. package/src/components/Transcript/Transcript.tsx +0 -100
  329. package/src/components/Transcript/deprecated/OldTranscript.tsx +0 -260
  330. package/src/components/TranscriptContainer.tsx +0 -30
  331. package/src/components/stories/FileTranscription.stories.tsx +0 -242
  332. package/src/components/stories/MicrophoneTranscription.stories.tsx +0 -280
  333. package/src/components/stories/TranscriptionStory.tsx +0 -41
  334. package/src/segments-normalization/normalization.ts +0 -105
  335. package/src/types/schema.ts +0 -41
  336. package/src/types/types.ts +0 -32
  337. package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  338. package/dist/lib/{browser/TranscriptContainer-H3AZQ4CQ.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  339. package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  340. package/dist/lib/{node-esm/TranscriptContainer-G75LDEO5.mjs.map → neutral/index.mjs.map} +0 -0
  341. package/dist/types/src/{segments-normalization → normalization}/normalization.test.d.ts +0 -0
  342. package/dist/types/src/{components/stories → stories}/useIsSpeaking.d.ts +0 -0
  343. package/src/{segments-normalization → normalization}/index.ts +1 -1
  344. /package/src/{components/stories → stories}/useIsSpeaking.tsx +0 -0
@@ -1,100 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { type Space } from '@dxos/react-client/echo';
8
- import { type Identity } from '@dxos/react-client/halo';
9
- import { IconButton, type ThemedClassName, useThemeContext } from '@dxos/react-ui';
10
- import {
11
- createBasicExtensions,
12
- createMarkdownExtensions,
13
- createRenderer,
14
- createThemeExtensions,
15
- decorateMarkdown,
16
- editorWidth,
17
- preview,
18
- useTextEditor,
19
- } from '@dxos/react-ui-editor';
20
- import { mx } from '@dxos/react-ui-theme';
21
- import { type DataType } from '@dxos/schema';
22
- import { isNotFalsy } from '@dxos/util';
23
-
24
- import { transcript } from './transcript-extension';
25
- import { type SerializationModel } from '../../model';
26
- import { type TranscriptType } from '../../types';
27
-
28
- export const renderMarkdown =
29
- (identities: Identity[]) =>
30
- (message: DataType.Message, index: number, debug = false): string[] => {
31
- if (message.sender.role === 'assistant') {
32
- // Start/stop block.
33
- return [message.blocks.find((block) => block.type === 'transcription')?.text ?? '', ''];
34
- }
35
-
36
- // TODO(burdon): Use link/reference markup for users (with popover).
37
- // TODO(burdon): Color and avatar.
38
- const identity = identities.find((identity) => identity.did === message.sender.identityDid);
39
- const name =
40
- identity?.profile?.displayName ??
41
- message.sender.contact?.target?.fullName ??
42
- message.sender.name ??
43
- message.sender.email ??
44
- message.sender.identityDid;
45
- const blocks = message.blocks.filter((block) => block.type === 'transcription');
46
- return [
47
- `###### ${name}` + (debug ? ` [${index}]:${message.id}` : ''),
48
- blocks.map((block) => block.text.trim()).join(' '),
49
- '',
50
- ];
51
- };
52
-
53
- export type TranscriptProps = ThemedClassName<{
54
- transcript?: TranscriptType;
55
- space?: Space;
56
- model: SerializationModel<DataType.Message>;
57
- // TODO(wittjosiah): Move to container.
58
- attendableId?: string;
59
- ignoreAttention?: boolean;
60
- }>;
61
-
62
- /**
63
- * Transcript component implemented using the editor.
64
- */
65
- export const Transcript = ({
66
- classNames,
67
- transcript: object,
68
- space,
69
- model,
70
- attendableId,
71
- ignoreAttention,
72
- }: TranscriptProps) => {
73
- const { themeMode } = useThemeContext();
74
- const { parentRef } = useTextEditor(() => {
75
- return {
76
- extensions: [
77
- createBasicExtensions({ readOnly: true, lineWrapping: true }),
78
- createMarkdownExtensions({ themeMode }),
79
- createThemeExtensions({ themeMode }),
80
- decorateMarkdown(),
81
- space && preview(),
82
- transcript({
83
- model,
84
- started: object?.started ? new Date(object.started) : undefined,
85
- renderButton: createRenderer(({ onClick }) => (
86
- <IconButton icon='ph--arrow-line-down--regular' iconOnly label='Scroll to bottom' onClick={onClick} />
87
- )),
88
- }),
89
- ].filter(isNotFalsy),
90
- };
91
- }, [space, model]);
92
-
93
- return (
94
- <div
95
- ref={parentRef}
96
- className={mx('flex grow overflow-hidden', editorWidth, classNames)}
97
- data-popover-collision-boundary={true}
98
- />
99
- );
100
- };
@@ -1,260 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { intervalToDuration } from 'date-fns/intervalToDuration';
6
- import { Schema } from 'effect';
7
- import { yieldOrContinue } from 'main-thread-scheduling';
8
- import React, { type FC, useCallback, useEffect, useMemo, useRef, useState, type WheelEvent } from 'react';
9
- import { type OnResizeCallback, useResizeDetector } from 'react-resize-detector';
10
-
11
- import { Type } from '@dxos/echo';
12
- import { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
13
- import { useAttention } from '@dxos/react-ui-attention';
14
- import {
15
- type DxGridCellValue,
16
- type DxGridElement,
17
- type DxGridAxisMeta,
18
- type DxGridPlaneCells,
19
- Grid,
20
- toPlaneCellIndex,
21
- } from '@dxos/react-ui-grid';
22
- import { mx } from '@dxos/react-ui-theme';
23
-
24
- import { TRANSCRIPTION_PLUGIN } from '../../../meta';
25
-
26
- /**
27
- * Transcription fragment.
28
- */
29
- const TranscriptSegment = Schema.Struct({
30
- // TODO(burdon): TS from service is not Unix TS (x1000).
31
- started: Schema.String,
32
- text: Schema.String,
33
- });
34
-
35
- type TranscriptSegment = Schema.Schema.Type<typeof TranscriptSegment>;
36
-
37
- /**
38
- * Transcription block (from single speaker).
39
- */
40
- const TranscriptBlock = Schema.Struct({
41
- id: Schema.String,
42
- authorName: Schema.optional(Schema.String), // TODO(burdon): Replace with identityDid.
43
- authorHue: Schema.optional(Schema.String), // TOOD(burdon): Remove.
44
- segments: Schema.Array(TranscriptSegment),
45
- }).pipe(
46
- Type.Obj({
47
- typename: 'dxos.org/type/TranscriptBlock',
48
- version: '0.1.0',
49
- }),
50
- );
51
-
52
- type TranscriptBlock = Schema.Schema.Type<typeof TranscriptBlock>;
53
-
54
- // TODO(burdon): Actions (e.g., mark, summarize, translate, label, delete).
55
-
56
- const lineHeight = 20;
57
- const cellSpacing = 8 + 2;
58
- const timestampColumnWidth = 68;
59
-
60
- const authorClasses = 'font-medium text-base leading-[20px]';
61
- const timestampClasses = 'text-xs leading-[20px] text-description pie-0 tabular-nums';
62
- const segmentTextClasses = 'text-sm whitespace-normal hyphens-auto';
63
- const measureClasses = mx(
64
- // NOTE(thure): The `inline-start` value must equal `timestampColumnWidth` plus grid’s gap (1px)
65
- 'absolute inline-start-[69px] inline-end-0 invisible z-[-1] border',
66
- 'pli-[--dx-grid-cell-padding-inline] plb-[--dx-grid-cell-padding-block] leading-[20px]',
67
- segmentTextClasses,
68
- );
69
-
70
- const rowDefault = {
71
- grid: { size: lineHeight + cellSpacing },
72
- };
73
-
74
- type QueueRows = [number, number][];
75
-
76
- const mapTranscriptQueue = (blocks?: TranscriptBlock[]): QueueRows => {
77
- if (!blocks || !Array.isArray(blocks) || blocks.length === 0) {
78
- return [];
79
- } else {
80
- return blocks.flatMap((block, blockIndex) => {
81
- return [
82
- [blockIndex, -1],
83
- ...block.segments.map((segment, segmentIndex) => {
84
- return [blockIndex, segmentIndex] as [number, number];
85
- }),
86
- ];
87
- });
88
- }
89
- };
90
-
91
- const pad = (n = 0) => String(n).padStart(2, '0');
92
-
93
- const formatTimestamp = (start: Date, end: Date) => {
94
- const { hours, minutes, seconds } = intervalToDuration({ start, end });
95
- return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
96
- };
97
-
98
- const measureRows = async (
99
- host: HTMLDivElement,
100
- blocks: TranscriptBlock[],
101
- queueMap: QueueRows,
102
- signal: AbortSignal,
103
- ) => {
104
- const result: DxGridAxisMeta = { grid: {} };
105
- for (let row = 0; row < queueMap.length; row++) {
106
- await yieldOrContinue('smooth', signal);
107
- const [blockIndex, segmentIndex] = queueMap[row];
108
- if (segmentIndex < 0) {
109
- result.grid[row] = { size: lineHeight + cellSpacing };
110
- } else {
111
- host.textContent = blocks[blockIndex]!.segments[segmentIndex]!.text;
112
- result.grid[row] = { size: host.offsetHeight };
113
- }
114
- }
115
- return result;
116
- };
117
-
118
- export type TranscriptProps = ThemedClassName<{
119
- blocks?: TranscriptBlock[];
120
- attendableId?: string;
121
- ignoreAttention?: boolean;
122
- }>;
123
-
124
- /**
125
- * @@deprecated
126
- */
127
- export const Transcript: FC<TranscriptProps> = ({ classNames, blocks, attendableId, ignoreAttention }) => {
128
- const { t } = useTranslation(TRANSCRIPTION_PLUGIN);
129
- const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
130
- const [rows, setRows] = useState<DxGridAxisMeta | undefined>(undefined);
131
- const [columns, setColumns] = useState<DxGridAxisMeta | undefined>(undefined);
132
-
133
- const queueMap = useMemo(() => mapTranscriptQueue(blocks), [blocks]);
134
-
135
- const { hasAttention } = useAttention(attendableId);
136
- const [autoScroll, setAutoScroll] = useState(true);
137
- const handleWheel = useCallback(
138
- (event: WheelEvent) => {
139
- setAutoScroll(false);
140
- if (!ignoreAttention && !hasAttention) {
141
- event.stopPropagation();
142
- }
143
- },
144
- [hasAttention, ignoreAttention],
145
- );
146
-
147
- const abortControllerRef = useRef<AbortController>();
148
-
149
- const handleResize = useCallback(
150
- async ({ entry }: { entry: { target: HTMLDivElement } | null }) => {
151
- if (entry?.target && Array.isArray(blocks) && blocks[0] && queueMap) {
152
- abortControllerRef.current?.abort();
153
- abortControllerRef.current = new AbortController();
154
- setColumns({ grid: { 0: { size: timestampColumnWidth }, 1: { size: entry.target.offsetWidth } } });
155
- return measureRows(entry.target, blocks, queueMap, abortControllerRef.current.signal)
156
- .then(setRows)
157
- .catch(() => {
158
- // Aborted mid-measurement by new size.
159
- });
160
- }
161
- },
162
- [blocks, queueMap],
163
- );
164
-
165
- const { width, ref: measureRef } = useResizeDetector({
166
- onResize: handleResize as OnResizeCallback,
167
- refreshOptions: { leading: true },
168
- });
169
-
170
- useEffect(() => {
171
- if (queueMap.length !== Object.keys(rows?.grid ?? {}).length) {
172
- void handleResize({ entry: { target: measureRef.current } }).then(() => {
173
- if (autoScroll) {
174
- // TODO(thure): Implement a deterministic way to do this when `rows` has fully settled and grid has a new `maxPosBlock`.
175
- setTimeout(() => dxGrid?.scrollToEndRow(), 50);
176
- }
177
- });
178
- }
179
- }, [blocks, queueMap, width, autoScroll]);
180
-
181
- useEffect(() => {
182
- if (dxGrid && Array.isArray(blocks) && blocks[0]) {
183
- const transcriptStart = blocks[0]!.segments[0]!.started;
184
- dxGrid.getCells = (range, plane) => {
185
- switch (plane) {
186
- case 'grid': {
187
- const cells: DxGridPlaneCells = {};
188
- for (let row = range.start.row; row <= range.end.row && row < queueMap.length; row++) {
189
- const [blockIndex, segmentIndex] = queueMap[row];
190
-
191
- cells[toPlaneCellIndex({ col: 0, row })] = {
192
- readonly: true,
193
- value:
194
- segmentIndex < 0
195
- ? formatTimestamp(
196
- new Date(transcriptStart),
197
- new Date(blocks[blockIndex]!.segments[Math.max(0, segmentIndex)]!.started),
198
- )
199
- : '',
200
- className: timestampClasses,
201
- } satisfies DxGridCellValue;
202
-
203
- cells[toPlaneCellIndex({ col: 1, row })] = (
204
- segmentIndex < 0
205
- ? {
206
- readonly: true,
207
- accessoryHtml: `<span data-hue="${blocks[blockIndex]!.authorHue}" class="dx-text-hue">${blocks[blockIndex]!.authorName}</span>`,
208
- className: authorClasses,
209
- }
210
- : {
211
- readonly: true,
212
- value: blocks[blockIndex]!.segments[segmentIndex]!.text,
213
- className: segmentTextClasses,
214
- }
215
- ) satisfies DxGridCellValue;
216
- }
217
- return cells;
218
- }
219
- default:
220
- return {};
221
- }
222
- };
223
- }
224
- }, [dxGrid, blocks]);
225
-
226
- const handleScrollToEnd = useCallback(() => {
227
- setAutoScroll(true);
228
- dxGrid?.scrollToEndRow();
229
- }, [dxGrid, autoScroll]);
230
-
231
- return (
232
- <div role='none' className={mx('relative min-bs-0', classNames)}>
233
- <Grid.Root id={`${attendableId}--transcript`}>
234
- <Grid.Content
235
- limitColumns={2}
236
- limitRows={queueMap.length}
237
- columns={columns}
238
- rows={rows}
239
- rowDefault={rowDefault}
240
- onWheel={handleWheel}
241
- className='[--dx-grid-base:var(--dx-baseSurface)] [--dx-grid-lines:var(--dx-baseSurface)] [&_.dx-grid]:min-bs-0 [&_.dx-grid]:min-is-0 [&_.dx-grid]:select-auto'
242
- ref={setDxGrid}
243
- />
244
- </Grid.Root>
245
- <div role='none' {...{ inert: '' }} aria-hidden className={measureClasses} ref={measureRef} />
246
- <IconButton
247
- icon='ph--arrow-line-down--regular'
248
- iconOnly
249
- label={t('scroll to end label')}
250
- tooltipSide='left'
251
- data-state={autoScroll ? 'invisible' : 'visible'}
252
- classNames={[
253
- 'absolute inline-end-2 block-end-2 opacity-0 pointer-events-none',
254
- 'data-[state="visible"]:pointer-events-auto data-[state="visible"]:opacity-100 transition-opacity',
255
- ]}
256
- onClick={handleScrollToEnd}
257
- />
258
- </div>
259
- );
260
- };
@@ -1,30 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import React, { type FC } from 'react';
6
-
7
- import { fullyQualifiedId, getSpace } from '@dxos/client/echo';
8
- import { useMembers, useQueue } from '@dxos/react-client/echo';
9
- import { StackItem } from '@dxos/react-ui-stack';
10
- import { type DataType } from '@dxos/schema';
11
-
12
- import { Transcript, renderMarkdown } from './Transcript';
13
- import { useQueueModelAdapter } from '../hooks';
14
- import { type TranscriptType } from '../types';
15
-
16
- export const TranscriptionContainer: FC<{ role: string; transcript: TranscriptType }> = ({ role, transcript }) => {
17
- const attendableId = fullyQualifiedId(transcript);
18
- const space = getSpace(transcript);
19
- const members = useMembers(space?.key).map((member) => member.identity);
20
- const queue = useQueue<DataType.Message>(transcript.queue.dxn, { pollInterval: 1_000 });
21
- const model = useQueueModelAdapter(renderMarkdown(members), queue);
22
-
23
- return (
24
- <StackItem.Content role={role} classNames='container-max-width pli-2'>
25
- <Transcript attendableId={attendableId} space={space} model={model} transcript={transcript} />
26
- </StackItem.Content>
27
- );
28
- };
29
-
30
- export default TranscriptionContainer;
@@ -1,242 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import '@dxos-theme';
6
-
7
- import { type Meta, type StoryObj } from '@storybook/react';
8
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
-
10
- import { EdgeAiServiceClient } from '@dxos/ai';
11
- import { AI_SERVICE_ENDPOINT } from '@dxos/ai/testing';
12
- import { Events, IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
13
- import { withPluginManager } from '@dxos/app-framework/testing';
14
- import { scheduleTask } from '@dxos/async';
15
- import { Context } from '@dxos/context';
16
- import { Obj } from '@dxos/echo';
17
- import { MemoryQueue } from '@dxos/echo-db';
18
- import { createQueueDXN } from '@dxos/echo-schema';
19
- import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
20
- import { log } from '@dxos/log';
21
- import { ClientPlugin } from '@dxos/plugin-client';
22
- import { PreviewPlugin } from '@dxos/plugin-preview';
23
- import { SpacePlugin } from '@dxos/plugin-space';
24
- import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
25
- import { ThemePlugin } from '@dxos/plugin-theme';
26
- import { defaultTx } from '@dxos/react-ui-theme';
27
- import { DataType } from '@dxos/schema';
28
- import { seedTestData, Testing } from '@dxos/schema/testing';
29
- import { withLayout, withTheme } from '@dxos/storybook-utils';
30
-
31
- import { TranscriptionStory } from './TranscriptionStory';
32
- import { useIsSpeaking } from './useIsSpeaking';
33
- import { TranscriptionPlugin } from '../../TranscriptionPlugin';
34
- import { useAudioFile, useQueueModelAdapter, useTranscriber } from '../../hooks';
35
- import { getActorId, MessageNormalizer } from '../../segments-normalization';
36
- import { TestItem } from '../../testing';
37
- import { type MediaStreamRecorderParams, type TranscriberParams } from '../../transcriber';
38
- import { renderMarkdown } from '../Transcript';
39
-
40
- const AudioFile = ({
41
- detectSpeaking,
42
- audioUrl,
43
- normalizeSentences,
44
- transcriberConfig,
45
- recorderConfig,
46
- audioConstraints,
47
- }: {
48
- detectSpeaking?: boolean;
49
- normalizeSentences?: boolean;
50
- audioUrl: string;
51
- transcriberConfig?: TranscriberParams['config'];
52
- recorderConfig?: MediaStreamRecorderParams['config'];
53
- audioConstraints?: MediaTrackConstraints;
54
- }) => {
55
- const [running, setRunning] = useState(false);
56
- const actor: DataType.Actor = useMemo(() => ({ name: 'You' }), []);
57
-
58
- // Audio.
59
- const { audio, track, stream } = useAudioFile(audioUrl, audioConstraints);
60
-
61
- // Speaking.
62
- const isSpeaking = detectSpeaking ? useIsSpeaking(track) : true;
63
- const ref = useRef<HTMLAudioElement>(null);
64
- useEffect(() => {
65
- if (ref.current && stream) {
66
- ref.current.srcObject = stream;
67
- }
68
- }, [stream]);
69
-
70
- useEffect(() => {
71
- if (!audio) {
72
- log.warn('no audio');
73
- return;
74
- }
75
-
76
- if (running) {
77
- void audio.play();
78
- } else {
79
- void audio.pause();
80
- }
81
- }, [audio, running]);
82
-
83
- // Transcriber.
84
- // TODO(dmaretskyi): Use space.queues.create() instead.
85
- const queueDxn = useMemo(() => createQueueDXN(), []);
86
- const queue = useMemo(() => new MemoryQueue<DataType.Message>(queueDxn), [queueDxn]);
87
-
88
- const model = useQueueModelAdapter(renderMarkdown([]), queue);
89
- const handleSegments = useCallback<TranscriberParams['onSegments']>(
90
- async (blocks) => {
91
- const message = Obj.make(DataType.Message, { sender: actor, created: new Date().toISOString(), blocks });
92
- void queue?.append([message]);
93
- },
94
- [queue],
95
- );
96
-
97
- const transcriber = useTranscriber({
98
- audioStreamTrack: track,
99
- onSegments: handleSegments,
100
- transcriberConfig,
101
- recorderConfig,
102
- });
103
-
104
- // Normalize sentences.
105
- const normalizer = useMemo(() => {
106
- if (!normalizeSentences) {
107
- return;
108
- }
109
- const executor = new FunctionExecutor(
110
- new ServiceContainer().setServices({
111
- ai: {
112
- client: new EdgeAiServiceClient({
113
- endpoint: AI_SERVICE_ENDPOINT.REMOTE,
114
- defaultGenerationOptions: {
115
- model: '@anthropic/claude-3-5-sonnet-20241022',
116
- },
117
- }),
118
- },
119
- }),
120
- );
121
-
122
- return new MessageNormalizer({
123
- functionExecutor: executor,
124
- queue,
125
- startingCursor: { actorId: getActorId(actor), timestamp: new Date().toISOString() },
126
- });
127
- }, [normalizeSentences, queue, actor]);
128
-
129
- useEffect(() => {
130
- if (!normalizer) {
131
- return;
132
- }
133
- const ctx = new Context();
134
- scheduleTask(ctx, async () => {
135
- await normalizer.open();
136
- ctx.onDispose(async () => {
137
- await normalizer.close();
138
- });
139
- });
140
- return () => {
141
- void ctx.dispose();
142
- };
143
- }, [normalizer]);
144
-
145
- const manageChunkRecording = () => {
146
- if (running && isSpeaking) {
147
- log.info('starting transcription');
148
- transcriber?.startChunksRecording();
149
- } else if (!isSpeaking || !running) {
150
- log.info('stopping transcription');
151
- transcriber?.stopChunksRecording();
152
- }
153
- };
154
-
155
- useEffect(() => {
156
- const ctx = new Context();
157
- scheduleTask(ctx, async () => {
158
- if (transcriber && running) {
159
- await transcriber.open();
160
- } else if (!running) {
161
- await transcriber?.close();
162
- }
163
- manageChunkRecording();
164
- });
165
-
166
- return () => {
167
- void ctx.dispose();
168
- };
169
- }, [transcriber, running]);
170
-
171
- useEffect(() => {
172
- manageChunkRecording();
173
- }, [isSpeaking, stream]);
174
-
175
- return <TranscriptionStory model={model} running={running} onRunningChange={setRunning} audioRef={ref} />;
176
- };
177
-
178
- const meta: Meta<typeof AudioFile> = {
179
- title: 'plugins/plugin-transcription/FileTranscription',
180
- decorators: [
181
- withPluginManager({
182
- plugins: [
183
- ThemePlugin({ tx: defaultTx }),
184
- StorybookLayoutPlugin(),
185
- ClientPlugin({
186
- types: [TestItem, DataType.Person, DataType.Organization, Testing.DocumentType],
187
- onClientInitialized: async (_, client) => {
188
- await client.halo.createIdentity();
189
- await client.spaces.waitUntilReady();
190
- await client.spaces.default.waitUntilReady();
191
- await seedTestData(client.spaces.default);
192
- },
193
- }),
194
- SpacePlugin(),
195
- SettingsPlugin(),
196
- PreviewPlugin(),
197
- IntentPlugin(),
198
- TranscriptionPlugin(),
199
- ],
200
- fireEvents: [Events.SetupAppGraph],
201
- }),
202
- withTheme,
203
- withLayout({ fullscreen: true, classNames: 'justify-center' }),
204
- ],
205
- };
206
-
207
- export default meta;
208
-
209
- const TRANSCRIBER_CONFIG = {
210
- transcribeAfterChunksAmount: 100,
211
- prefixBufferChunksAmount: 50,
212
- normalizeSentences: true,
213
- };
214
-
215
- const RECORDER_CONFIG = {
216
- interval: 200,
217
- };
218
-
219
- export const Default: StoryObj<typeof AudioFile> = {
220
- render: AudioFile,
221
- args: {
222
- detectSpeaking: true,
223
- // https://learnenglish.britishcouncil.org/general-english/audio-zone/living-london
224
- audioUrl: 'https://dxos.network/audio-london.m4a',
225
- // textUrl: 'https://dxos.network/audio-london.txt',
226
- transcriberConfig: TRANSCRIBER_CONFIG,
227
- recorderConfig: RECORDER_CONFIG,
228
- },
229
- };
230
-
231
- export const WithSentenceNormalization: StoryObj<typeof AudioFile> = {
232
- render: AudioFile,
233
- args: {
234
- detectSpeaking: true,
235
- normalizeSentences: true,
236
- // https://learnenglish.britishcouncil.org/general-english/audio-zone/living-london
237
- audioUrl: 'https://dxos.network/audio-london.m4a',
238
- // textUrl: 'https://dxos.network/audio-london.txt',
239
- transcriberConfig: TRANSCRIBER_CONFIG,
240
- recorderConfig: RECORDER_CONFIG,
241
- },
242
- };