@dxos/plugin-transcription 0.8.4-main.c85a9c8dae → 0.8.4-main.d9fc60f731
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.
- package/LICENSE +102 -5
- package/PLUGIN.mdl +401 -0
- package/README.md +1 -1
- package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs +54 -0
- package/dist/lib/neutral/TranscriptionArticle-L6XANBH5.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.mjs +46 -0
- package/dist/lib/neutral/TranscriptionPlugin.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.node.mjs +25 -0
- package/dist/lib/neutral/TranscriptionPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs +21 -0
- package/dist/lib/neutral/TranscriptionPlugin.workerd.mjs.map +7 -0
- package/dist/lib/{browser/blueprint-definition-C6XA2SVZ.mjs → neutral/blueprint-definition-HOXDG5QP.mjs} +4 -7
- package/dist/lib/neutral/blueprint-definition-HOXDG5QP.mjs.map +7 -0
- package/dist/lib/{browser → neutral}/blueprints/index.mjs +1 -2
- package/dist/lib/neutral/capabilities/index.mjs +17 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2O3ONPRZ.mjs +298 -0
- package/dist/lib/neutral/chunk-2O3ONPRZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FHNI26QW.mjs +45 -0
- package/dist/lib/neutral/chunk-FHNI26QW.mjs.map +7 -0
- package/dist/lib/{browser/chunk-EV5ZYKET.mjs → neutral/chunk-ILSA3DU7.mjs} +87 -112
- package/dist/lib/neutral/chunk-ILSA3DU7.mjs.map +7 -0
- package/dist/lib/{browser/chunk-HOOPZ7EM.mjs → neutral/chunk-KAEXRX3Y.mjs} +1 -1
- package/dist/lib/neutral/chunk-KVUT2KYT.mjs +124 -0
- package/dist/lib/neutral/chunk-KVUT2KYT.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MLRJWAQH.mjs +179 -0
- package/dist/lib/neutral/chunk-MLRJWAQH.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Y4YI44ZD.mjs +8 -0
- package/dist/lib/neutral/chunk-Y4YI44ZD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs +30 -0
- package/dist/lib/neutral/chunk-ZR4BH4QQ.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +273 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +9 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/create-VWFMMAUY.mjs +21 -0
- package/dist/lib/neutral/create-VWFMMAUY.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +19 -0
- package/dist/lib/neutral/index.mjs +44 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/open-V772IQYW.mjs +27 -0
- package/dist/lib/neutral/open-V772IQYW.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs +13 -0
- package/dist/lib/neutral/operation-handler-NXMOAXFP.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-YMZRO242.mjs +26 -0
- package/dist/lib/neutral/react-surface-YMZRO242.mjs.map +7 -0
- package/dist/lib/neutral/summarize-6PDRGTKE.mjs +78 -0
- package/dist/lib/neutral/summarize-6PDRGTKE.mjs.map +7 -0
- package/dist/lib/neutral/text-content-KBB37HSM.mjs +30 -0
- package/dist/lib/neutral/text-content-KBB37HSM.mjs.map +7 -0
- package/dist/lib/{browser/transcriber-WCPHHJYY.mjs → neutral/transcriber-ABHATBVH.mjs} +8 -10
- package/dist/lib/neutral/transcriber-ABHATBVH.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +24 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +10 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/TranscriptionPlugin.d.ts +1 -0
- package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
- package/dist/types/src/TranscriptionPlugin.node.d.ts +4 -0
- package/dist/types/src/TranscriptionPlugin.node.d.ts.map +1 -0
- package/dist/types/src/TranscriptionPlugin.test.d.ts +2 -0
- package/dist/types/src/TranscriptionPlugin.test.d.ts.map +1 -0
- package/dist/types/src/TranscriptionPlugin.workerd.d.ts +4 -0
- package/dist/types/src/TranscriptionPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/blueprints/transcription-blueprint.d.ts +2 -2
- package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +10 -4
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/text-content.d.ts +8 -0
- package/dist/types/src/capabilities/text-content.d.ts.map +1 -0
- package/dist/types/src/capabilities/{transcriber/transcriber.d.ts → transcriber.d.ts} +1 -1
- package/dist/types/src/capabilities/transcriber.d.ts.map +1 -0
- package/dist/types/src/components/Oracle/Oracle.d.ts +24 -0
- package/dist/types/src/components/Oracle/Oracle.d.ts.map +1 -0
- package/dist/types/src/components/Oracle/Oracle.stories.d.ts +32 -0
- package/dist/types/src/components/Oracle/Oracle.stories.d.ts.map +1 -0
- package/dist/types/src/components/Oracle/index.d.ts +2 -0
- package/dist/types/src/components/Oracle/index.d.ts.map +1 -0
- package/dist/types/src/components/Transcription/Transcription.d.ts +5 -9
- package/dist/types/src/components/Transcription/Transcription.d.ts.map +1 -1
- package/dist/types/src/components/Transcription/Transcription.stories.d.ts +21 -24
- package/dist/types/src/components/Transcription/Transcription.stories.d.ts.map +1 -1
- package/dist/types/src/components/Transcription/transcription-extension.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts +6 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.d.ts.map +1 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts +28 -0
- package/dist/types/src/containers/TranscriptionArticle/TranscriptionArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/TranscriptionArticle/index.d.ts +2 -0
- package/dist/types/src/containers/TranscriptionArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/enrichment/conversation.test.d.ts +2 -0
- package/dist/types/src/enrichment/conversation.test.d.ts.map +1 -0
- package/dist/types/src/enrichment/operations.d.ts +200 -0
- package/dist/types/src/enrichment/operations.d.ts.map +1 -0
- package/dist/types/src/enrichment/parser.d.ts +26 -0
- package/dist/types/src/enrichment/parser.d.ts.map +1 -0
- package/dist/types/src/enrichment/stream-simulator.d.ts +38 -0
- package/dist/types/src/enrichment/stream-simulator.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useAudioFile.d.ts.map +1 -1
- package/dist/types/src/hooks/useAudioTrack.d.ts.map +1 -1
- package/dist/types/src/hooks/useFeedModelAdapter.d.ts +12 -0
- package/dist/types/src/hooks/useFeedModelAdapter.d.ts.map +1 -0
- package/dist/types/src/hooks/useTranscriber.d.ts +2 -2
- package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
- package/dist/types/src/hooks/useTranscriptionRecording.d.ts +12 -0
- package/dist/types/src/hooks/useTranscriptionRecording.d.ts.map +1 -0
- package/dist/types/src/hooks/useVoiceInput.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/model.d.ts +2 -2
- package/dist/types/src/model/model.d.ts.map +1 -1
- package/dist/types/src/{segments-normalization → normalization}/index.d.ts +1 -1
- package/dist/types/src/normalization/index.d.ts.map +1 -0
- package/dist/types/src/{segments-normalization → normalization}/message-normalizer.d.ts +7 -5
- package/dist/types/src/normalization/message-normalizer.d.ts.map +1 -0
- package/dist/types/src/normalization/normalization.d.ts +834 -0
- package/dist/types/src/normalization/normalization.d.ts.map +1 -0
- package/dist/types/src/normalization/normalization.test.d.ts.map +1 -0
- package/dist/types/src/normalization/utils.d.ts.map +1 -0
- package/dist/types/src/operations/create.d.ts +5 -0
- package/dist/types/src/operations/create.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/open.d.ts +5 -0
- package/dist/types/src/operations/open.d.ts.map +1 -0
- package/dist/types/src/operations/summarize.d.ts +8 -0
- package/dist/types/src/operations/summarize.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/stories/FileTranscription.stories.d.ts +20 -0
- package/dist/types/src/stories/FileTranscription.stories.d.ts.map +1 -0
- package/dist/types/src/{components/stories → stories}/KeyWordRecognition.stories.d.ts +2 -2
- package/dist/types/src/stories/KeyWordRecognition.stories.d.ts.map +1 -0
- package/dist/types/src/{components/stories/MicrophoneTranscription.stories.d.ts → stories/LiveTranscription.stories.d.ts} +7 -7
- package/dist/types/src/stories/LiveTranscription.stories.d.ts.map +1 -0
- package/dist/types/src/stories/TranscriptionStory.d.ts +21 -0
- package/dist/types/src/stories/TranscriptionStory.d.ts.map +1 -0
- package/dist/types/src/stories/common.d.ts +248 -0
- package/dist/types/src/stories/common.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +5 -6
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/transcriber/index.d.ts +1 -1
- package/dist/types/src/transcriber/index.d.ts.map +1 -1
- package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcriber.d.ts +58 -3
- package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcriber.test.d.ts +2 -0
- package/dist/types/src/transcriber/transcriber.test.d.ts.map +1 -0
- package/dist/types/src/transcriber/transcription-manager.d.ts +6 -4
- package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -8
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/TranscriptOperation.d.ts +1670 -0
- package/dist/types/src/types/TranscriptOperation.d.ts.map +1 -0
- package/dist/types/src/types/TranscriptionCapabilities.d.ts +17 -0
- package/dist/types/src/types/TranscriptionCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -4
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/array.d.ts.map +1 -1
- package/dist/types/src/util/get-time-str.d.ts.map +1 -1
- package/dist/types/src/util/monitor-audio-level.d.ts.map +1 -1
- package/dist/types/src/util/render-byline.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +140 -86
- package/src/TranscriptionPlugin.node.ts +20 -0
- package/src/TranscriptionPlugin.test.ts +31 -0
- package/src/TranscriptionPlugin.tsx +14 -29
- package/src/TranscriptionPlugin.workerd.ts +18 -0
- package/src/blueprints/transcription-blueprint.ts +5 -9
- package/src/capabilities/{blueprint-definition/blueprint-definition.ts → blueprint-definition.ts} +3 -1
- package/src/capabilities/index.ts +12 -4
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +31 -0
- package/src/capabilities/text-content.ts +33 -0
- package/src/capabilities/{transcriber/transcriber.ts → transcriber.ts} +5 -2
- package/src/components/Oracle/Oracle.stories.tsx +147 -0
- package/src/components/Oracle/Oracle.tsx +142 -0
- package/src/components/Oracle/index.ts +5 -0
- package/src/components/Transcription/Transcription.stories.tsx +125 -158
- package/src/components/Transcription/Transcription.tsx +33 -38
- package/src/components/index.ts +1 -0
- package/src/containers/TranscriptionArticle/TranscriptionArticle.stories.tsx +61 -0
- package/src/containers/TranscriptionArticle/TranscriptionArticle.tsx +62 -0
- package/src/containers/TranscriptionArticle/index.ts +5 -0
- package/src/containers/index.ts +1 -1
- package/src/enrichment/conversation.test.ts +162 -0
- package/src/enrichment/conversation.txt +23 -0
- package/src/enrichment/operations.ts +271 -0
- package/src/enrichment/parser.ts +101 -0
- package/src/enrichment/stream-simulator.ts +125 -0
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useFeedModelAdapter.ts +46 -0
- package/src/hooks/useTranscriber.ts +5 -2
- package/src/hooks/useTranscriptionRecording.ts +87 -0
- package/src/hooks/useVoiceInput.ts +0 -1
- package/src/index.ts +4 -5
- package/src/meta.ts +28 -6
- package/src/model/model.test.ts +8 -8
- package/src/model/model.ts +3 -3
- package/src/{segments-normalization → normalization}/message-normalizer.ts +25 -17
- package/src/{segments-normalization → normalization}/normalization.test.ts +3 -37
- package/src/normalization/normalization.ts +76 -0
- package/src/operations/create.ts +24 -0
- package/src/operations/index.ts +11 -0
- package/src/operations/open.ts +28 -0
- package/src/operations/summarize.ts +101 -0
- package/src/plugin.ts +11 -0
- package/src/stories/FileTranscription.stories.tsx +143 -0
- package/src/{components/stories → stories}/KeyWordRecognition.stories.tsx +38 -38
- package/src/stories/LiveTranscription.stories.tsx +153 -0
- package/src/stories/TranscriptionStory.tsx +101 -0
- package/src/stories/common.ts +233 -0
- package/src/testing/testing.ts +29 -51
- package/src/transcriber/index.ts +1 -1
- package/src/transcriber/transcriber.browser.test.ts +0 -1
- package/src/transcriber/transcriber.test.ts +104 -0
- package/src/transcriber/transcriber.ts +100 -55
- package/src/transcriber/transcription-manager.ts +14 -9
- package/src/translations.ts +10 -7
- package/src/types/TranscriptOperation.ts +106 -0
- package/src/types/TranscriptionCapabilities.ts +39 -0
- package/src/types/index.ts +2 -4
- package/src/vite-env.d.ts +10 -0
- package/dist/lib/browser/TranscriptionContainer-RBFHP2AV.mjs +0 -41
- package/dist/lib/browser/TranscriptionContainer-RBFHP2AV.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-C6XA2SVZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-2B74LZZD.mjs +0 -22
- package/dist/lib/browser/chunk-2B74LZZD.mjs.map +0 -7
- package/dist/lib/browser/chunk-EV5ZYKET.mjs.map +0 -7
- package/dist/lib/browser/chunk-GH4IIQ6C.mjs +0 -54
- package/dist/lib/browser/chunk-GH4IIQ6C.mjs.map +0 -7
- package/dist/lib/browser/chunk-O7ILGNBZ.mjs +0 -148
- package/dist/lib/browser/chunk-O7ILGNBZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-XLMRCOQN.mjs +0 -668
- package/dist/lib/browser/chunk-XLMRCOQN.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -114
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/operation-resolver-5BLRH4XE.mjs +0 -23
- package/dist/lib/browser/operation-resolver-5BLRH4XE.mjs.map +0 -7
- package/dist/lib/browser/react-surface-U2SI74JK.mjs +0 -36
- package/dist/lib/browser/react-surface-U2SI74JK.mjs.map +0 -7
- package/dist/lib/browser/transcriber-WCPHHJYY.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -15
- package/dist/lib/node-esm/TranscriptionContainer-3OOID5KH.mjs +0 -42
- package/dist/lib/node-esm/TranscriptionContainer-3OOID5KH.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-TLXDUXIQ.mjs +0 -19
- package/dist/lib/node-esm/blueprint-definition-TLXDUXIQ.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -10
- package/dist/lib/node-esm/chunk-6GW5NZYG.mjs +0 -55
- package/dist/lib/node-esm/chunk-6GW5NZYG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7UE7G6DE.mjs +0 -461
- package/dist/lib/node-esm/chunk-7UE7G6DE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DYUGYQCB.mjs +0 -669
- package/dist/lib/node-esm/chunk-DYUGYQCB.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-F47HK7GT.mjs +0 -24
- package/dist/lib/node-esm/chunk-F47HK7GT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-H3MXHMQL.mjs +0 -149
- package/dist/lib/node-esm/chunk-H3MXHMQL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-NVM2QUMX.mjs +0 -37
- package/dist/lib/node-esm/chunk-NVM2QUMX.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -115
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/operation-resolver-CVZB7BF4.mjs +0 -24
- package/dist/lib/node-esm/operation-resolver-CVZB7BF4.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-2ICJPBPX.mjs +0 -37
- package/dist/lib/node-esm/react-surface-2ICJPBPX.mjs.map +0 -7
- package/dist/lib/node-esm/transcriber-2RIHUEX4.mjs +0 -62
- package/dist/lib/node-esm/transcriber-2RIHUEX4.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -16
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -6
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-handler/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-handler/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +0 -5
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/transcriber/index.d.ts +0 -3
- package/dist/types/src/capabilities/transcriber/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/transcriber/transcriber.d.ts.map +0 -1
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts +0 -18
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/KeyWordRecognition.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +0 -1
- package/dist/types/src/components/stories/TranscriptionStory.d.ts +0 -12
- package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +0 -1
- package/dist/types/src/components/stories/useIsSpeaking.d.ts +0 -3
- package/dist/types/src/components/stories/useIsSpeaking.d.ts.map +0 -1
- package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts +0 -6
- package/dist/types/src/containers/TranscriptionContainer/TranscriptionContainer.d.ts.map +0 -1
- package/dist/types/src/containers/TranscriptionContainer/index.d.ts +0 -3
- package/dist/types/src/containers/TranscriptionContainer/index.d.ts.map +0 -1
- package/dist/types/src/functions/index.d.ts +0 -18
- package/dist/types/src/functions/index.d.ts.map +0 -1
- package/dist/types/src/functions/open.d.ts +0 -11
- package/dist/types/src/functions/open.d.ts.map +0 -1
- package/dist/types/src/functions/summarize.d.ts +0 -11
- package/dist/types/src/functions/summarize.d.ts.map +0 -1
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts +0 -8
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/index.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/normalization.d.ts +0 -534
- package/dist/types/src/segments-normalization/normalization.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/normalization.test.d.ts.map +0 -1
- package/dist/types/src/segments-normalization/utils.d.ts.map +0 -1
- package/dist/types/src/types/TranscriptAction.d.ts +0 -25
- package/dist/types/src/types/TranscriptAction.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -18
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/dist/types/src/types/types.d.ts +0 -5
- package/dist/types/src/types/types.d.ts.map +0 -1
- package/src/capabilities/blueprint-definition/index.ts +0 -7
- package/src/capabilities/operation-handler/index.ts +0 -7
- package/src/capabilities/operation-handler/operation-handler.ts +0 -25
- package/src/capabilities/operation-resolver/index.ts +0 -7
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -25
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/capabilities/react-surface/react-surface.tsx +0 -28
- package/src/capabilities/transcriber/index.ts +0 -7
- package/src/components/stories/FileTranscription.stories.tsx +0 -252
- package/src/components/stories/MicrophoneTranscription.stories.tsx +0 -282
- package/src/components/stories/TranscriptionStory.tsx +0 -41
- package/src/components/stories/useIsSpeaking.tsx +0 -40
- package/src/containers/TranscriptionContainer/TranscriptionContainer.tsx +0 -33
- package/src/containers/TranscriptionContainer/index.ts +0 -7
- package/src/functions/index.ts +0 -11
- package/src/functions/open.ts +0 -37
- package/src/functions/summarize.ts +0 -103
- package/src/hooks/useQueueModelAdapter.ts +0 -66
- package/src/segments-normalization/normalization.ts +0 -115
- package/src/types/TranscriptAction.ts +0 -32
- package/src/types/capabilities.ts +0 -33
- package/src/types/types.ts +0 -9
- package/dist/lib/{browser → neutral}/blueprints/index.mjs.map +0 -0
- package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
- package/dist/lib/{browser/chunk-HOOPZ7EM.mjs.map → neutral/chunk-KAEXRX3Y.mjs.map} +0 -0
- package/dist/lib/{browser/types → neutral/hooks}/index.mjs.map +0 -0
- package/dist/lib/{node-esm/blueprints → neutral}/index.mjs.map +0 -0
- package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
- package/dist/lib/{node-esm/types → neutral/operations}/index.mjs.map +0 -0
- package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
- package/dist/types/src/{segments-normalization → normalization}/normalization.test.d.ts +0 -0
- package/dist/types/src/{segments-normalization → normalization}/utils.d.ts +0 -0
- package/src/{segments-normalization → normalization}/index.ts +1 -1
- /package/src/{segments-normalization → normalization}/utils.ts +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// src/model/model.ts
|
|
2
|
+
import { Text } from "@codemirror/state";
|
|
3
|
+
import { Event } from "@dxos/async";
|
|
4
|
+
import { invariant } from "@dxos/invariant";
|
|
5
|
+
import { log } from "@dxos/log";
|
|
6
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-transcription/src/model/model.ts";
|
|
7
|
+
var DocumentAdapter = class {
|
|
8
|
+
_view;
|
|
9
|
+
constructor(_view) {
|
|
10
|
+
this._view = _view;
|
|
11
|
+
}
|
|
12
|
+
/** The document must always have at least one line. */
|
|
13
|
+
lineCount() {
|
|
14
|
+
return this._view.state.doc.lines - 1;
|
|
15
|
+
}
|
|
16
|
+
replaceLines(from, remove, insert) {
|
|
17
|
+
log("replaceLines", {
|
|
18
|
+
count: this._view.state.doc.lines,
|
|
19
|
+
from,
|
|
20
|
+
remove,
|
|
21
|
+
insert
|
|
22
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: this });
|
|
23
|
+
const numLines = this._view.state.doc.lines;
|
|
24
|
+
const posFrom = this._view.state.doc.line(from).from;
|
|
25
|
+
const posTo = remove === 0 ? posFrom : this._view.state.doc.line(Math.min(numLines, from + remove)).from;
|
|
26
|
+
let text = insert.join("\n");
|
|
27
|
+
if (posTo === this._view.state.doc.length) {
|
|
28
|
+
text += "\n";
|
|
29
|
+
}
|
|
30
|
+
this._view.dispatch({
|
|
31
|
+
changes: {
|
|
32
|
+
from: posFrom,
|
|
33
|
+
to: posTo,
|
|
34
|
+
insert: text
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var SerializationModel = class {
|
|
40
|
+
_renderer;
|
|
41
|
+
/** Emits when the document is updated. */
|
|
42
|
+
update = new Event();
|
|
43
|
+
/** Ordered set of chunks. */
|
|
44
|
+
_chunks = [];
|
|
45
|
+
/** Map of chunk IDs to their current line counts. */
|
|
46
|
+
_chunkLineCounts = /* @__PURE__ */ new Map();
|
|
47
|
+
/** Map of line numbers to chunk IDs. */
|
|
48
|
+
_lineToChunk = /* @__PURE__ */ new Map();
|
|
49
|
+
/** Track chunk changes since last sync. */
|
|
50
|
+
_changes = [];
|
|
51
|
+
constructor(_renderer, initialChunks = []) {
|
|
52
|
+
this._renderer = _renderer;
|
|
53
|
+
initialChunks.forEach((chunk) => {
|
|
54
|
+
this.appendChunk(chunk);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
toJSON() {
|
|
58
|
+
return {
|
|
59
|
+
chunks: this._chunks.length,
|
|
60
|
+
changes: this._changes.length
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
get doc() {
|
|
64
|
+
return Text.of([
|
|
65
|
+
...this._chunks.flatMap((chunk, index) => this._renderer(chunk, index)),
|
|
66
|
+
""
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
69
|
+
get chunks() {
|
|
70
|
+
return this._chunks;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the block ID at the given line number.
|
|
74
|
+
*/
|
|
75
|
+
getChunkAtLine(line) {
|
|
76
|
+
return this._lineToChunk.get(line);
|
|
77
|
+
}
|
|
78
|
+
reset() {
|
|
79
|
+
this._chunks.length = 0;
|
|
80
|
+
this._chunkLineCounts.clear();
|
|
81
|
+
this._lineToChunk.clear();
|
|
82
|
+
this.update.emit();
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
appendChunk(chunk) {
|
|
86
|
+
const index = this._chunks.length;
|
|
87
|
+
this._chunks.push(chunk);
|
|
88
|
+
this._changes.push({
|
|
89
|
+
type: "append",
|
|
90
|
+
index,
|
|
91
|
+
chunk
|
|
92
|
+
});
|
|
93
|
+
this.update.emit();
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
updateChunk(chunk) {
|
|
97
|
+
const index = this._chunks.findIndex((c) => c.id === chunk.id);
|
|
98
|
+
invariant(index !== -1, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 102, S: this, A: ["index !== -1", ""] });
|
|
99
|
+
this._chunks[index] = chunk;
|
|
100
|
+
this._changes.push({
|
|
101
|
+
type: "update",
|
|
102
|
+
index,
|
|
103
|
+
chunk
|
|
104
|
+
});
|
|
105
|
+
this.update.emit();
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
deleteBlock(id) {
|
|
109
|
+
const index = this._chunks.findIndex((c) => c.id === id);
|
|
110
|
+
invariant(index !== -1, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 114, S: this, A: ["index !== -1", ""] });
|
|
111
|
+
this._chunks.splice(index, 1);
|
|
112
|
+
this._changes.push({
|
|
113
|
+
type: "delete",
|
|
114
|
+
index,
|
|
115
|
+
id
|
|
116
|
+
});
|
|
117
|
+
this.update.emit();
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Syncs the tracked changes with the ChunkDocument.
|
|
122
|
+
*/
|
|
123
|
+
sync(document) {
|
|
124
|
+
log("sync", {
|
|
125
|
+
changes: this._changes
|
|
126
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 127, S: this });
|
|
127
|
+
for (const change of this._changes) {
|
|
128
|
+
switch (change.type) {
|
|
129
|
+
case "append": {
|
|
130
|
+
const lines = this._renderer(change.chunk, change.index);
|
|
131
|
+
const lastLine = document.lineCount();
|
|
132
|
+
document.replaceLines(lastLine + 1, 0, lines);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
case "update": {
|
|
136
|
+
let lineStart = 1;
|
|
137
|
+
for (let i = 0; i < change.index; i++) {
|
|
138
|
+
lineStart += this._chunkLineCounts.get(this._chunks[i].id);
|
|
139
|
+
}
|
|
140
|
+
const previousLineCount = this._chunkLineCounts.get(change.chunk.id);
|
|
141
|
+
const newLines = this._renderer(change.chunk, change.index);
|
|
142
|
+
document.replaceLines(lineStart, previousLineCount, newLines);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
case "delete": {
|
|
146
|
+
let lineStart = 1;
|
|
147
|
+
for (let i = 0; i < change.index; i++) {
|
|
148
|
+
lineStart += this._chunkLineCounts.get(this._chunks[i].id);
|
|
149
|
+
}
|
|
150
|
+
const previousLineCount = this._chunkLineCounts.get(change.id);
|
|
151
|
+
document.replaceLines(lineStart, previousLineCount, []);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this._lineToChunk.clear();
|
|
157
|
+
let currentLine = 1;
|
|
158
|
+
for (const [index, chunk] of this._chunks.entries()) {
|
|
159
|
+
const lineCount = this._renderer(chunk, index).length;
|
|
160
|
+
this._chunkLineCounts.set(chunk.id, lineCount);
|
|
161
|
+
this._lineToChunk.set(currentLine, chunk);
|
|
162
|
+
currentLine += lineCount;
|
|
163
|
+
}
|
|
164
|
+
const chunkIds = new Set(this._chunks.map((chunk) => chunk.id));
|
|
165
|
+
for (const id of this._chunkLineCounts.keys()) {
|
|
166
|
+
if (!chunkIds.has(id)) {
|
|
167
|
+
this._chunkLineCounts.delete(id);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
this._changes.length = 0;
|
|
171
|
+
return this;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
export {
|
|
176
|
+
DocumentAdapter,
|
|
177
|
+
SerializationModel
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=chunk-MLRJWAQH.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/model/model.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Text } from '@codemirror/state';\nimport { type EditorView } from '@codemirror/view';\n\nimport { Event } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nexport type Chunk = { id: string };\n\n/**\n * Covert block to a set of markdown lines.\n */\nexport type ChunkRenderer<T extends Chunk> = (chunk: T, index: number, debug?: boolean) => string[];\n\n/**\n * Abstract representation of the document model.\n */\nexport interface ChunkDocument {\n lineCount(): number;\n replaceLines(from: number, remove: number, insert: string[]): void;\n}\n\n/**\n * Codemirror document adapter.\n */\nexport class DocumentAdapter implements ChunkDocument {\n constructor(private readonly _view: EditorView) {}\n\n /** The document must always have at least one line. */\n lineCount(): number {\n return this._view.state.doc.lines - 1;\n }\n\n replaceLines(from: number, remove: number, insert: string[]): void {\n log('replaceLines', { count: this._view.state.doc.lines, from, remove, insert });\n\n const numLines = this._view.state.doc.lines;\n const posFrom = this._view.state.doc.line(from).from;\n const posTo = remove === 0 ? posFrom : this._view.state.doc.line(Math.min(numLines, from + remove)).from;\n\n // Don't remove the last line.\n let text = insert.join('\\n');\n if (posTo === this._view.state.doc.length) {\n text += '\\n';\n }\n\n this._view.dispatch({\n changes: { from: posFrom, to: posTo, insert: text },\n });\n }\n}\n\ntype ChunkChange<T extends Chunk> =\n | {\n type: 'append';\n index: number;\n chunk: T;\n }\n | {\n type: 'update';\n index: number;\n chunk: T;\n }\n | {\n type: 'delete';\n index: number;\n id: string;\n };\n\n/**\n * Each Chunk can be converted into a set of lines.\n * Chunks can be added, updated or deleted from the Queue.\n * A Document is an immutable projection that represents a flat list of lines corresponding to the Queue.\n *\n * Ideally we would implement a custom virtual Text model for the View, but this currently isn't possible in Codemirror.\n * Instead this model tracks changes and syncs them with the ChunkDocument.\n */\nexport class SerializationModel<T extends Chunk> {\n /** Emits when the document is updated. */\n public readonly update = new Event<void>();\n\n /** Ordered set of chunks. */\n private readonly _chunks: T[] = [];\n\n /** Map of chunk IDs to their current line counts. */\n private readonly _chunkLineCounts = new Map<string, number>();\n\n /** Map of line numbers to chunk IDs. */\n private readonly _lineToChunk = new Map<number, T>();\n\n /** Track chunk changes since last sync. */\n private readonly _changes: Array<ChunkChange<T>> = [];\n\n constructor(\n private readonly _renderer: ChunkRenderer<T>,\n initialChunks: T[] = [],\n ) {\n initialChunks.forEach((chunk) => {\n this.appendChunk(chunk);\n });\n }\n\n toJSON(): { chunks: number; changes: number } {\n return {\n chunks: this._chunks.length,\n changes: this._changes.length,\n };\n }\n\n get doc() {\n return Text.of([...this._chunks.flatMap((chunk, index) => this._renderer(chunk, index)), '']);\n }\n\n get chunks() {\n return this._chunks;\n }\n\n /**\n * Get the block ID at the given line number.\n */\n getChunkAtLine(line: number): T | undefined {\n return this._lineToChunk.get(line);\n }\n\n reset(): this {\n this._chunks.length = 0;\n this._chunkLineCounts.clear();\n this._lineToChunk.clear();\n this.update.emit();\n return this;\n }\n\n appendChunk(chunk: T): this {\n const index = this._chunks.length;\n this._chunks.push(chunk);\n this._changes.push({ type: 'append', index, chunk });\n this.update.emit();\n return this;\n }\n\n updateChunk(chunk: T): this {\n const index = this._chunks.findIndex((c) => c.id === chunk.id);\n invariant(index !== -1);\n this._chunks[index] = chunk;\n this._changes.push({ type: 'update', index, chunk });\n this.update.emit();\n return this;\n }\n\n deleteBlock(id: string): this {\n const index = this._chunks.findIndex((c) => c.id === id);\n invariant(index !== -1);\n this._chunks.splice(index, 1);\n this._changes.push({ type: 'delete', index, id });\n this.update.emit();\n return this;\n }\n\n /**\n * Syncs the tracked changes with the ChunkDocument.\n */\n sync(document: ChunkDocument): this {\n log('sync', { changes: this._changes });\n\n // Process each change in order.\n for (const change of this._changes) {\n switch (change.type) {\n case 'append': {\n // For appends, convert block to lines and add at the end.\n const lines = this._renderer(change.chunk, change.index);\n const lastLine = document.lineCount();\n document.replaceLines(lastLine + 1, 0, lines);\n break;\n }\n\n case 'update': {\n // For updates, find the block's line range and replace with new lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.chunk.id)!;\n const newLines = this._renderer(change.chunk, change.index);\n document.replaceLines(lineStart, previousLineCount, newLines);\n break;\n }\n\n case 'delete': {\n // For deletes, find the block's line range and remove those lines.\n let lineStart = 1;\n for (let i = 0; i < change.index; i++) {\n lineStart += this._chunkLineCounts.get(this._chunks[i].id)!;\n }\n const previousLineCount = this._chunkLineCounts.get(change.id)!;\n document.replaceLines(lineStart, previousLineCount, []);\n break;\n }\n }\n }\n\n // Clear the line-to-block mapping.\n this._lineToChunk.clear();\n\n // Update all block line counts and line-to-block mapping after processing changes.\n let currentLine = 1;\n for (const [index, chunk] of this._chunks.entries()) {\n const lineCount = this._renderer(chunk, index).length;\n this._chunkLineCounts.set(chunk.id, lineCount);\n this._lineToChunk.set(currentLine, chunk);\n currentLine += lineCount;\n }\n\n // Clean up deleted blocks.\n const chunkIds = new Set(this._chunks.map((chunk) => chunk.id));\n for (const id of this._chunkLineCounts.keys()) {\n if (!chunkIds.has(id)) {\n this._chunkLineCounts.delete(id);\n }\n }\n\n // Clear changes after sync.\n this._changes.length = 0;\n return this;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Text", "Event", "invariant", "log", "_view", "replaceLines", "from", "remove", "insert", "count", "state", "posFrom", "line", "posTo", "text", "dispatch", "_chunkLineCounts", "_lineToChunk", "_changes", "_renderer", "initialChunks", "forEach", "chunk", "appendChunk", "toJSON", "chunks", "changes", "doc", "reset", "clear", "update", "_chunks", "push", "type", "index", "updateChunk", "deleteBlock", "splice", "id", "change", "document", "lastLine", "lines", "lineStart", "previousLineCount", "get", "newLines", "currentLine", "lineCount", "set", "chunkIds"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// src/operations/index.ts
|
|
2
|
+
import { OperationHandlerSet } from "@dxos/compute";
|
|
3
|
+
var TranscriptionOperationHandlerSet = OperationHandlerSet.lazy(() => import("./create-VWFMMAUY.mjs"), () => import("./open-V772IQYW.mjs"), () => import("./summarize-6PDRGTKE.mjs"));
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
TranscriptionOperationHandlerSet
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=chunk-Y4YI44ZD.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/operations/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const TranscriptionOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./create'),\n () => import('./open'),\n () => import('./summarize'),\n);\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,mCAAmCD,oBAAoBE,KAClE,MAAM,OAAO,uBAAA,GACb,MAAM,OAAO,qBAAA,GACb,MAAM,OAAO,0BAAA,CAAA;",
|
|
6
|
+
"names": ["OperationHandlerSet", "TranscriptionOperationHandlerSet", "lazy"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/blueprints/transcription-blueprint.ts
|
|
2
|
+
import { Blueprint, Template } from "@dxos/compute";
|
|
3
|
+
import { trim } from "@dxos/util";
|
|
4
|
+
import { TranscriptOperation } from "#types";
|
|
5
|
+
var BLUEPRINT_KEY = "org.dxos.blueprint.transcription";
|
|
6
|
+
var make = () => Blueprint.make({
|
|
7
|
+
key: BLUEPRINT_KEY,
|
|
8
|
+
name: "Transcription",
|
|
9
|
+
tools: Blueprint.toolDefinitions({
|
|
10
|
+
operations: [
|
|
11
|
+
TranscriptOperation.Open,
|
|
12
|
+
TranscriptOperation.Summarize
|
|
13
|
+
]
|
|
14
|
+
}),
|
|
15
|
+
instructions: Template.make({
|
|
16
|
+
source: trim`
|
|
17
|
+
You can open and summarize a meeting transcript.
|
|
18
|
+
`
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
var blueprint = {
|
|
22
|
+
key: BLUEPRINT_KEY,
|
|
23
|
+
make
|
|
24
|
+
};
|
|
25
|
+
var transcription_blueprint_default = blueprint;
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
transcription_blueprint_default
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-ZR4BH4QQ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/blueprints/transcription-blueprint.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Blueprint, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nimport { TranscriptOperation } from '#types';\n\nconst BLUEPRINT_KEY = 'org.dxos.blueprint.transcription';\n\nconst make = () =>\n Blueprint.make({\n key: BLUEPRINT_KEY,\n name: 'Transcription',\n tools: Blueprint.toolDefinitions({ operations: [TranscriptOperation.Open, TranscriptOperation.Summarize] }),\n instructions: Template.make({\n source: trim`\n You can open and summarize a meeting transcript.\n `,\n }),\n });\n\nconst blueprint: Blueprint.Definition = {\n key: BLUEPRINT_KEY,\n make,\n};\n\nexport default blueprint;\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AACpC,SAASC,YAAY;AAErB,SAASC,2BAA2B;AAEpC,IAAMC,gBAAgB;AAEtB,IAAMC,OAAO,MACXL,UAAUK,KAAK;EACbC,KAAKF;EACLG,MAAM;EACNC,OAAOR,UAAUS,gBAAgB;IAAEC,YAAY;MAACP,oBAAoBQ;MAAMR,oBAAoBS;;EAAW,CAAA;EACzGC,cAAcZ,SAASI,KAAK;IAC1BS,QAAQZ;;;EAGV,CAAA;AACF,CAAA;AAEF,IAAMa,YAAkC;EACtCT,KAAKF;EACLC;AACF;AAEA,IAAA,kCAAeU;",
|
|
6
|
+
"names": ["Blueprint", "Template", "trim", "TranscriptOperation", "BLUEPRINT_KEY", "make", "key", "name", "tools", "toolDefinitions", "operations", "Open", "Summarize", "instructions", "source", "blueprint"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DocumentAdapter
|
|
3
|
+
} from "../chunk-MLRJWAQH.mjs";
|
|
4
|
+
import {
|
|
5
|
+
renderByline
|
|
6
|
+
} from "../chunk-KAEXRX3Y.mjs";
|
|
7
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
8
|
+
|
|
9
|
+
// src/components/Oracle/Oracle.tsx
|
|
10
|
+
import { Primitive } from "@radix-ui/react-primitive";
|
|
11
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
12
|
+
import React, { createContext, useContext, useMemo } from "react";
|
|
13
|
+
import "@dxos/react-ui-graph/styles/graph.css";
|
|
14
|
+
import { composableProps, slottable } from "@dxos/react-ui";
|
|
15
|
+
import { TextBlock } from "@dxos/react-ui-components";
|
|
16
|
+
import { SVG } from "@dxos/react-ui-graph";
|
|
17
|
+
import { mx } from "@dxos/ui-theme";
|
|
18
|
+
var OracleContext = /* @__PURE__ */ createContext(null);
|
|
19
|
+
var useOracleContext = (consumer) => {
|
|
20
|
+
const ctx = useContext(OracleContext);
|
|
21
|
+
if (!ctx) {
|
|
22
|
+
throw new Error(`<Oracle.${consumer}> must be rendered inside <Oracle.Root>`);
|
|
23
|
+
}
|
|
24
|
+
return ctx;
|
|
25
|
+
};
|
|
26
|
+
var Root = ({ children, text = "", delay = 12 }) => {
|
|
27
|
+
const value = useMemo(() => ({
|
|
28
|
+
text,
|
|
29
|
+
delay
|
|
30
|
+
}), [
|
|
31
|
+
text,
|
|
32
|
+
delay
|
|
33
|
+
]);
|
|
34
|
+
return /* @__PURE__ */ React.createElement(OracleContext.Provider, {
|
|
35
|
+
value
|
|
36
|
+
}, children);
|
|
37
|
+
};
|
|
38
|
+
var Content = slottable(({ children, asChild, ...props }, forwardedRef) => {
|
|
39
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
40
|
+
return /* @__PURE__ */ React.createElement(Comp, {
|
|
41
|
+
...composableProps(props, {
|
|
42
|
+
classNames: "relative dx-expander"
|
|
43
|
+
}),
|
|
44
|
+
ref: forwardedRef
|
|
45
|
+
}, children);
|
|
46
|
+
});
|
|
47
|
+
Content.displayName = "Oracle.Content";
|
|
48
|
+
var Canvas = ({ classNames, children }) => /* @__PURE__ */ React.createElement(SVG.Root, {
|
|
49
|
+
centered: true,
|
|
50
|
+
classNames: mx("absolute inset-0", classNames)
|
|
51
|
+
}, children ?? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SVG.Markers, null), /* @__PURE__ */ React.createElement(SVG.Grid, null), /* @__PURE__ */ React.createElement(SVG.Zoom, {
|
|
52
|
+
extent: [
|
|
53
|
+
1 / 4,
|
|
54
|
+
4
|
|
55
|
+
]
|
|
56
|
+
}, /* @__PURE__ */ React.createElement(SVG.Graph, null))));
|
|
57
|
+
var Text = ({ classNames }) => {
|
|
58
|
+
const { text, delay } = useOracleContext("Text");
|
|
59
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
60
|
+
className: "pointer-events-none absolute inset-0 flex items-center justify-center"
|
|
61
|
+
}, /* @__PURE__ */ React.createElement(TextBlock, {
|
|
62
|
+
classNames: mx("max-w-xl px-6 py-4 text-center text-2xl font-medium text-balance text-subdued", classNames),
|
|
63
|
+
text,
|
|
64
|
+
delay
|
|
65
|
+
}));
|
|
66
|
+
};
|
|
67
|
+
var Oracle = {
|
|
68
|
+
Root,
|
|
69
|
+
Content,
|
|
70
|
+
Canvas,
|
|
71
|
+
Text
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// src/components/Transcription/Transcription.tsx
|
|
75
|
+
import React2 from "react";
|
|
76
|
+
import { useThemeContext } from "@dxos/react-ui";
|
|
77
|
+
import { composable, composableProps as composableProps2 } from "@dxos/react-ui";
|
|
78
|
+
import { useTextEditor } from "@dxos/react-ui-editor";
|
|
79
|
+
import { createBasicExtensions, createMarkdownExtensions, createThemeExtensions, decorateMarkdown, documentSlots, preview, scroller } from "@dxos/ui-editor";
|
|
80
|
+
|
|
81
|
+
// src/components/Transcription/transcription-extension.ts
|
|
82
|
+
import { RangeSetBuilder } from "@codemirror/state";
|
|
83
|
+
import { EditorView, GutterMarker, ViewPlugin, gutter } from "@codemirror/view";
|
|
84
|
+
import { format } from "date-fns/format";
|
|
85
|
+
import { intervalToDuration } from "date-fns/intervalToDuration";
|
|
86
|
+
import { addEventListener, combine } from "@dxos/async";
|
|
87
|
+
var transcription = ({ model, started }) => {
|
|
88
|
+
return [
|
|
89
|
+
// Show timestamps in the gutter.
|
|
90
|
+
gutter({
|
|
91
|
+
class: "cm-timestamp-gutter",
|
|
92
|
+
lineMarkerChange: (update) => update.docChanged || update.viewportChanged,
|
|
93
|
+
markers: (view) => {
|
|
94
|
+
const start = getStartTime(started, model.chunks[0]);
|
|
95
|
+
const builder = new RangeSetBuilder();
|
|
96
|
+
for (const { from, to } of view.visibleRanges) {
|
|
97
|
+
let line = view.state.doc.lineAt(from);
|
|
98
|
+
while (line.from <= to) {
|
|
99
|
+
const block = model.getChunkAtLine(line.number)?.blocks[0];
|
|
100
|
+
const timestamp = block?._tag === "transcript" && block.started;
|
|
101
|
+
if (timestamp) {
|
|
102
|
+
builder.add(line.from, line.from, new TimestampMarker(line.number, new Date(timestamp), start));
|
|
103
|
+
}
|
|
104
|
+
if (line.to + 1 > view.state.doc.length) {
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
line = view.state.doc.lineAt(line.to + 1);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return builder.finish();
|
|
111
|
+
}
|
|
112
|
+
}),
|
|
113
|
+
// Listen for model updates.
|
|
114
|
+
ViewPlugin.fromClass(class {
|
|
115
|
+
_controls;
|
|
116
|
+
_cleanup;
|
|
117
|
+
_adapter;
|
|
118
|
+
_initialized = false;
|
|
119
|
+
constructor(view) {
|
|
120
|
+
this._adapter = new DocumentAdapter(view);
|
|
121
|
+
const scroller2 = view.scrollDOM;
|
|
122
|
+
let isAutoScrolling = false;
|
|
123
|
+
let hasScrolled = false;
|
|
124
|
+
let timeout;
|
|
125
|
+
const scrollToBottom = (smooth = false) => {
|
|
126
|
+
scroller2.style.scrollBehavior = smooth ? "smooth" : "";
|
|
127
|
+
scroller2.classList.add("cm-hide-scrollbar");
|
|
128
|
+
isAutoScrolling = true;
|
|
129
|
+
clearTimeout(timeout);
|
|
130
|
+
timeout = setTimeout(() => {
|
|
131
|
+
this._controls?.classList.add("opacity-0");
|
|
132
|
+
scroller2.classList.remove("cm-hide-scrollbar");
|
|
133
|
+
isAutoScrolling = false;
|
|
134
|
+
}, 500);
|
|
135
|
+
view.dispatch({
|
|
136
|
+
effects: EditorView.scrollIntoView(view.state.doc.length, {
|
|
137
|
+
y: "end"
|
|
138
|
+
})
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
this._cleanup = combine(addEventListener(view.scrollDOM, "scroll", () => {
|
|
142
|
+
if (!isAutoScrolling) {
|
|
143
|
+
hasScrolled = true;
|
|
144
|
+
this._controls?.classList.remove("opacity-0");
|
|
145
|
+
}
|
|
146
|
+
}), model.update.on(() => {
|
|
147
|
+
const autoScroll = scroller2.scrollHeight - scroller2.scrollTop - scroller2.clientHeight === 0 || !hasScrolled;
|
|
148
|
+
model.sync(this._adapter);
|
|
149
|
+
if (autoScroll) {
|
|
150
|
+
scrollToBottom(true);
|
|
151
|
+
}
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
update(_update) {
|
|
155
|
+
if (!this._initialized) {
|
|
156
|
+
this._initialized = true;
|
|
157
|
+
setTimeout(() => {
|
|
158
|
+
model.sync(this._adapter);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
destroy() {
|
|
163
|
+
this._controls?.remove();
|
|
164
|
+
this._cleanup();
|
|
165
|
+
}
|
|
166
|
+
}),
|
|
167
|
+
EditorView.theme({
|
|
168
|
+
".cm-gutters": {
|
|
169
|
+
backgroundColor: "var(--color-base-surface)"
|
|
170
|
+
},
|
|
171
|
+
".cm-timestamp-gutter": {
|
|
172
|
+
width: "6rem",
|
|
173
|
+
paddingLeft: "0.5rem",
|
|
174
|
+
paddingRight: "1rem"
|
|
175
|
+
},
|
|
176
|
+
".cm-timestamp-gutter > .cm-gutterElement > div": {
|
|
177
|
+
display: "inline-flex",
|
|
178
|
+
textAlign: "right",
|
|
179
|
+
padding: "3px"
|
|
180
|
+
}
|
|
181
|
+
})
|
|
182
|
+
];
|
|
183
|
+
};
|
|
184
|
+
var TimestampMarker = class extends GutterMarker {
|
|
185
|
+
_line;
|
|
186
|
+
_timestamp;
|
|
187
|
+
_started;
|
|
188
|
+
constructor(_line, _timestamp, _started) {
|
|
189
|
+
super(), this._line = _line, this._timestamp = _timestamp, this._started = _started;
|
|
190
|
+
}
|
|
191
|
+
eq(other) {
|
|
192
|
+
return this._timestamp === other._timestamp;
|
|
193
|
+
}
|
|
194
|
+
toDOM(view) {
|
|
195
|
+
const el = document.createElement("div");
|
|
196
|
+
el.className = "text-sm text-subdued hover:bg-hover-surface cursor-pointer";
|
|
197
|
+
el.textContent = formatTimestamp(this._timestamp, this._started);
|
|
198
|
+
el.onclick = () => {
|
|
199
|
+
const pos = view.state.doc.line(this._line).from;
|
|
200
|
+
view.dispatch({
|
|
201
|
+
effects: EditorView.scrollIntoView(pos, {
|
|
202
|
+
y: "start"
|
|
203
|
+
})
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
return el;
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
var getStartTime = (started, message) => {
|
|
210
|
+
if (started) {
|
|
211
|
+
return started;
|
|
212
|
+
}
|
|
213
|
+
if (message?.blocks[0]?._tag === "transcript" && message.blocks[0].started) {
|
|
214
|
+
return new Date(message.blocks[0].started);
|
|
215
|
+
}
|
|
216
|
+
return void 0;
|
|
217
|
+
};
|
|
218
|
+
var formatTimestamp = (timestamp, relative) => {
|
|
219
|
+
if (relative) {
|
|
220
|
+
const pad = (n = 0) => String(n).padStart(2, "0");
|
|
221
|
+
const { hours, minutes, seconds } = intervalToDuration({
|
|
222
|
+
start: relative,
|
|
223
|
+
end: timestamp
|
|
224
|
+
});
|
|
225
|
+
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
|
|
226
|
+
} else {
|
|
227
|
+
return format(timestamp, "HH:mm:ss");
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
// src/components/Transcription/Transcription.tsx
|
|
232
|
+
var Transcription = composable(({ transcript: object, model, children, ...props }, forwardedRef) => {
|
|
233
|
+
const { themeMode } = useThemeContext();
|
|
234
|
+
const { parentRef } = useTextEditor(() => {
|
|
235
|
+
return {
|
|
236
|
+
extensions: [
|
|
237
|
+
createBasicExtensions({
|
|
238
|
+
readOnly: true,
|
|
239
|
+
lineWrapping: true,
|
|
240
|
+
search: true
|
|
241
|
+
}),
|
|
242
|
+
createThemeExtensions({
|
|
243
|
+
themeMode,
|
|
244
|
+
slots: documentSlots
|
|
245
|
+
}),
|
|
246
|
+
createMarkdownExtensions(),
|
|
247
|
+
decorateMarkdown(),
|
|
248
|
+
preview(),
|
|
249
|
+
transcription({
|
|
250
|
+
model,
|
|
251
|
+
started: object?.started ? new Date(object.started) : void 0
|
|
252
|
+
}),
|
|
253
|
+
scroller()
|
|
254
|
+
]
|
|
255
|
+
};
|
|
256
|
+
}, [
|
|
257
|
+
model,
|
|
258
|
+
themeMode
|
|
259
|
+
]);
|
|
260
|
+
return /* @__PURE__ */ React2.createElement("div", {
|
|
261
|
+
...composableProps2(props, {
|
|
262
|
+
classNames: "dx-container"
|
|
263
|
+
}),
|
|
264
|
+
"data-popover-collision-boundary": true,
|
|
265
|
+
ref: parentRef
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
export {
|
|
269
|
+
Oracle,
|
|
270
|
+
Transcription,
|
|
271
|
+
renderByline
|
|
272
|
+
};
|
|
273
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/Oracle/Oracle.tsx", "../../../../src/components/Transcription/Transcription.tsx", "../../../../src/components/Transcription/transcription-extension.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport React, { type PropsWithChildren, createContext, useContext, useMemo } from 'react';\n\nimport '@dxos/react-ui-graph/styles/graph.css';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { composableProps, slottable } from '@dxos/react-ui';\nimport { TextBlock } from '@dxos/react-ui-components';\nimport { SVG } from '@dxos/react-ui-graph';\nimport { mx } from '@dxos/ui-theme';\nimport { type SlottableProps } from '@dxos/ui-types';\n\n//\n// Context\n//\n\ntype OracleContextValue = {\n /** Latest utterance / phrase rendered by `Oracle.Text`. */\n text: string;\n /** Per-character reveal delay in ms for the streaming TextBlock. */\n delay: number;\n};\n\nconst OracleContext = createContext<OracleContextValue | null>(null);\n\nconst useOracleContext = (consumer: string): OracleContextValue => {\n const ctx = useContext(OracleContext);\n if (!ctx) {\n throw new Error(`<Oracle.${consumer}> must be rendered inside <Oracle.Root>`);\n }\n return ctx;\n};\n\n//\n// Root (headless — provides context only, renders no DOM)\n//\n\nexport type OracleRootProps = PropsWithChildren<{\n /** Latest utterance / phrase rendered by `Oracle.Text`. */\n text?: string;\n /** Per-character reveal delay in ms for the streaming TextBlock. @default 12 */\n delay?: number;\n}>;\n\n/**\n * Oracle surface root. Headless — provides text/delay context to subcomponents and renders\n * no DOM of its own. Wrap subcomponents in `<Oracle.Content>` for the standard relative\n * stacking layout, or place `<Oracle.Canvas>` / `<Oracle.Text>` inside any positioned\n * container of your choice.\n */\nconst Root = ({ children, text = '', delay = 12 }: OracleRootProps) => {\n const value = useMemo(() => ({ text, delay }), [text, delay]);\n return <OracleContext.Provider value={value}>{children}</OracleContext.Provider>;\n};\n\n//\n// Content\n//\n\nexport type OracleContentProps = SlottableProps;\n\n/**\n * Positioned container that stacks `Oracle.Canvas` (the SVG graph viewport, absolutely\n * positioned to fill) under `Oracle.Text` (the centered overlay). Use this for the standard\n * Oracle layout; skip it if you need custom positioning.\n *\n * Pass `asChild` to merge the positioning + sizing onto a parent slot (e.g. `Panel.Content`).\n */\nconst Content = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : Primitive.div;\n return (\n <Comp {...composableProps(props, { classNames: 'relative dx-expander' })} ref={forwardedRef}>\n {children}\n </Comp>\n );\n});\n\nContent.displayName = 'Oracle.Content';\n\n//\n// Canvas\n//\n\nexport type OracleCanvasProps = ThemedClassName<PropsWithChildren<{}>>;\n\n/**\n * SVG graph viewport. Renders sensible defaults (markers, grid, pan/zoom, empty graph)\n * when no children are supplied; consumers can replace those by passing their own\n * SVG.* children (e.g. a populated `<SVG.Graph model={…} />`).\n */\nconst Canvas = ({ classNames, children }: OracleCanvasProps) => (\n <SVG.Root centered classNames={mx('absolute inset-0', classNames)}>\n {children ?? (\n <>\n <SVG.Markers />\n <SVG.Grid />\n <SVG.Zoom extent={[1 / 4, 4]}>\n <SVG.Graph />\n </SVG.Zoom>\n </>\n )}\n </SVG.Root>\n);\n\n//\n// Text\n//\n\nexport type OracleTextProps = ThemedClassName<{}>;\n\n/**\n * Centered text overlay. Reads `text` and `delay` from `Oracle.Root` context and renders\n * a streaming `TextBlock` floating above the canvas. Pointer-events are disabled so the\n * underlying graph remains interactive.\n */\nconst Text = ({ classNames }: OracleTextProps) => {\n const { text, delay } = useOracleContext('Text');\n return (\n <div className='pointer-events-none absolute inset-0 flex items-center justify-center'>\n <TextBlock\n classNames={mx('max-w-xl px-6 py-4 text-center text-2xl font-medium text-balance text-subdued', classNames)}\n text={text}\n delay={delay}\n />\n </div>\n );\n};\n\n//\n// Namespace\n//\n\nexport const Oracle = {\n Root,\n Content,\n Canvas,\n Text,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { useTextEditor } from '@dxos/react-ui-editor';\nimport { type Message, type Transcript } from '@dxos/types';\nimport {\n createBasicExtensions,\n createMarkdownExtensions,\n createThemeExtensions,\n decorateMarkdown,\n documentSlots,\n preview,\n scroller,\n} from '@dxos/ui-editor';\n\nimport { type SerializationModel } from '../../model';\nimport { renderByline } from '../../util';\nimport { transcription } from './transcription-extension';\n\nexport { renderByline };\n\nexport type TranscriptionProps = {\n transcript?: Transcript.Transcript;\n model: SerializationModel<Message.Message>;\n};\n\n// TODO(burdon): Remove forwardedRef/use react-ui-editor.\nexport const Transcription = composable<HTMLDivElement, TranscriptionProps>(\n ({ transcript: object, model, children, ...props }, forwardedRef) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n return {\n extensions: [\n createBasicExtensions({ readOnly: true, lineWrapping: true, search: true }),\n createThemeExtensions({ themeMode, slots: documentSlots }),\n createMarkdownExtensions(),\n decorateMarkdown(),\n preview(),\n transcription({ model, started: object?.started ? new Date(object.started) : undefined }),\n scroller(),\n ],\n };\n }, [model, themeMode]);\n\n return (\n <div\n {...composableProps(props, { classNames: 'dx-container' })}\n data-popover-collision-boundary={true}\n ref={parentRef}\n />\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Extension, RangeSetBuilder } from '@codemirror/state';\nimport { EditorView, GutterMarker, ViewPlugin, type ViewUpdate, gutter } from '@codemirror/view';\nimport { format } from 'date-fns/format';\nimport { intervalToDuration } from 'date-fns/intervalToDuration';\n\nimport { type CleanupFn, addEventListener, combine } from '@dxos/async';\nimport { type Message } from '@dxos/types';\n\nimport { DocumentAdapter, type SerializationModel } from '../../model';\n\n/**\n * Data structure that maps Chunks queue to lines with transcript state.\n */\nexport type TranscriptionOptions = {\n model: SerializationModel<Message.Message>;\n started?: Date;\n};\n\n/**\n * Scrolling transcript with timestamps.\n */\nexport const transcription = ({ model, started }: TranscriptionOptions): Extension => {\n return [\n // Show timestamps in the gutter.\n gutter({\n class: 'cm-timestamp-gutter',\n lineMarkerChange: (update) => update.docChanged || update.viewportChanged,\n markers: (view) => {\n const start = getStartTime(started, model.chunks[0]);\n const builder = new RangeSetBuilder<GutterMarker>();\n for (const { from, to } of view.visibleRanges) {\n let line = view.state.doc.lineAt(from);\n while (line.from <= to) {\n const block = model.getChunkAtLine(line.number)?.blocks[0];\n const timestamp = block?._tag === 'transcript' && block.started;\n if (timestamp) {\n builder.add(line.from, line.from, new TimestampMarker(line.number, new Date(timestamp), start));\n }\n\n if (line.to + 1 > view.state.doc.length) {\n break;\n }\n\n line = view.state.doc.lineAt(line.to + 1);\n }\n }\n\n return builder.finish();\n },\n }),\n\n // Listen for model updates.\n ViewPlugin.fromClass(\n class {\n private readonly _controls?: HTMLDivElement;\n private readonly _cleanup: CleanupFn;\n private readonly _adapter: DocumentAdapter;\n private _initialized = false;\n\n constructor(view: EditorView) {\n this._adapter = new DocumentAdapter(view);\n\n const scroller = view.scrollDOM;\n let isAutoScrolling = false;\n let hasScrolled = false;\n\n let timeout: NodeJS.Timeout | undefined;\n const scrollToBottom = (smooth = false) => {\n scroller.style.scrollBehavior = smooth ? 'smooth' : '';\n\n // Temporarily hide scrollbar to prevent flicker.\n scroller.classList.add('cm-hide-scrollbar');\n isAutoScrolling = true;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n this._controls?.classList.add('opacity-0');\n scroller.classList.remove('cm-hide-scrollbar');\n isAutoScrolling = false;\n }, 500);\n\n // Scroll to bottom.\n view.dispatch({\n effects: EditorView.scrollIntoView(view.state.doc.length, { y: 'end' }),\n });\n };\n\n // Event listeners.\n this._cleanup = combine(\n addEventListener(view.scrollDOM, 'scroll', () => {\n if (!isAutoScrolling) {\n hasScrolled = true;\n this._controls?.classList.remove('opacity-0');\n }\n }),\n\n model.update.on(() => {\n // Check if clamped to bottom.\n const autoScroll =\n scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight === 0 || !hasScrolled;\n\n // Sync.\n model.sync(this._adapter);\n\n // Scroll.\n if (autoScroll) {\n scrollToBottom(true);\n }\n }),\n );\n }\n\n update(_update: ViewUpdate) {\n // Initial sync.\n if (!this._initialized) {\n this._initialized = true;\n setTimeout(() => {\n model.sync(this._adapter);\n });\n }\n }\n\n destroy() {\n this._controls?.remove();\n this._cleanup();\n }\n },\n ),\n\n EditorView.theme({\n '.cm-gutters': {\n backgroundColor: 'var(--color-base-surface)',\n },\n '.cm-timestamp-gutter': {\n width: '6rem',\n paddingLeft: '0.5rem',\n paddingRight: '1rem',\n },\n '.cm-timestamp-gutter > .cm-gutterElement > div': {\n display: 'inline-flex',\n textAlign: 'right',\n padding: '3px',\n },\n }),\n ];\n};\n\n/**\n * Gutter marker that displays a timestamp.\n */\nclass TimestampMarker extends GutterMarker {\n constructor(\n readonly _line: number,\n readonly _timestamp: Date,\n readonly _started?: Date,\n ) {\n super();\n }\n\n override eq(other: this) {\n return this._timestamp === other._timestamp;\n }\n\n override toDOM(view: EditorView) {\n const el = document.createElement('div');\n el.className = 'text-sm text-subdued hover:bg-hover-surface cursor-pointer';\n el.textContent = formatTimestamp(this._timestamp, this._started);\n // TODO(burdon): Click to bookmark or copy hyperlink.\n el.onclick = () => {\n const pos = view.state.doc.line(this._line).from;\n view.dispatch({\n effects: EditorView.scrollIntoView(pos, { y: 'start' }),\n });\n };\n\n return el;\n }\n}\n\nconst getStartTime = (started?: Date, message?: Message.Message): Date | undefined => {\n if (started) {\n return started;\n }\n\n if (message?.blocks[0]?._tag === 'transcript' && message.blocks[0].started) {\n return new Date(message.blocks[0].started);\n }\n\n return undefined;\n};\n\nconst formatTimestamp = (timestamp: Date, relative?: Date) => {\n if (relative) {\n const pad = (n = 0) => String(n).padStart(2, '0');\n const { hours, minutes, seconds } = intervalToDuration({ start: relative, end: timestamp });\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;\n } else {\n return format(timestamp, 'HH:mm:ss');\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Primitive", "Slot", "React", "createContext", "useContext", "useMemo", "composableProps", "slottable", "TextBlock", "SVG", "mx", "OracleContext", "useOracleContext", "consumer", "ctx", "Error", "Root", "children", "text", "delay", "value", "Provider", "Content", "asChild", "props", "forwardedRef", "Comp", "div", "classNames", "ref", "displayName", "Canvas", "centered", "Markers", "Grid", "Zoom", "extent", "Graph", "Text", "className", "Oracle", "React", "useThemeContext", "composable", "composableProps", "useTextEditor", "createBasicExtensions", "createMarkdownExtensions", "createThemeExtensions", "decorateMarkdown", "documentSlots", "preview", "scroller", "RangeSetBuilder", "EditorView", "GutterMarker", "ViewPlugin", "gutter", "format", "intervalToDuration", "addEventListener", "combine", "transcription", "model", "started", "gutter", "class", "lineMarkerChange", "update", "docChanged", "viewportChanged", "markers", "view", "start", "getStartTime", "chunks", "builder", "RangeSetBuilder", "from", "to", "visibleRanges", "line", "state", "doc", "lineAt", "block", "getChunkAtLine", "number", "blocks", "timestamp", "_tag", "add", "TimestampMarker", "Date", "length", "finish", "ViewPlugin", "fromClass", "_controls", "_cleanup", "_adapter", "_initialized", "DocumentAdapter", "scroller", "scrollDOM", "isAutoScrolling", "hasScrolled", "timeout", "scrollToBottom", "smooth", "style", "scrollBehavior", "classList", "clearTimeout", "setTimeout", "remove", "dispatch", "effects", "EditorView", "scrollIntoView", "y", "combine", "addEventListener", "on", "autoScroll", "scrollHeight", "scrollTop", "clientHeight", "sync", "_update", "destroy", "theme", "backgroundColor", "width", "paddingLeft", "paddingRight", "display", "textAlign", "padding", "GutterMarker", "_line", "_timestamp", "_started", "eq", "other", "toDOM", "el", "document", "createElement", "className", "textContent", "formatTimestamp", "onclick", "pos", "message", "undefined", "relative", "pad", "n", "String", "padStart", "hours", "minutes", "seconds", "intervalToDuration", "end", "format", "Transcription", "composable", "transcript", "object", "model", "children", "props", "forwardedRef", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "extensions", "createBasicExtensions", "readOnly", "lineWrapping", "search", "createThemeExtensions", "slots", "documentSlots", "createMarkdownExtensions", "decorateMarkdown", "preview", "transcription", "started", "Date", "undefined", "scroller", "React", "div", "composableProps", "classNames", "data-popover-collision-boundary", "ref"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/containers/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const TranscriptionArticle: ComponentType<any> = lazy(() => import('./TranscriptionArticle'));\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,uBAA2CD,KAAK,MAAM,OAAO,sCAAA,CAAA;",
|
|
6
|
+
"names": ["lazy", "TranscriptionArticle"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
TranscriptOperation_exports
|
|
3
|
+
} from "./chunk-KVUT2KYT.mjs";
|
|
4
|
+
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
+
|
|
6
|
+
// src/operations/create.ts
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import { Operation } from "@dxos/compute";
|
|
9
|
+
import { Feed, Ref } from "@dxos/echo";
|
|
10
|
+
import { Transcript } from "@dxos/types";
|
|
11
|
+
var handler = TranscriptOperation_exports.Create.pipe(Operation.withHandler(Effect.fn(function* ({ space }) {
|
|
12
|
+
const feed = space.db.add(Feed.make());
|
|
13
|
+
return {
|
|
14
|
+
object: Transcript.make(Ref.make(feed))
|
|
15
|
+
};
|
|
16
|
+
})));
|
|
17
|
+
var create_default = handler;
|
|
18
|
+
export {
|
|
19
|
+
create_default as default
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=create-VWFMMAUY.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/operations/create.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Feed, Ref } from '@dxos/echo';\nimport { Transcript } from '@dxos/types';\n\nimport { TranscriptOperation } from '../types';\n\nconst handler: Operation.WithHandler<typeof TranscriptOperation.Create> = TranscriptOperation.Create.pipe(\n Operation.withHandler(\n Effect.fn(function* ({ space }) {\n const feed = space.db.add(Feed.make());\n return {\n object: Transcript.make(Ref.make(feed)),\n };\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,MAAMC,WAAW;AAC1B,SAASC,kBAAkB;AAI3B,IAAMC,UAAoEC,4BAAoBC,OAAOC,KACnGC,UAAUC,YACDC,UAAG,WAAW,EAAEC,MAAK,GAAE;AAC5B,QAAMC,OAAOD,MAAME,GAAGC,IAAIC,KAAKC,KAAI,CAAA;AACnC,SAAO;IACLC,QAAQC,WAAWF,KAAKG,IAAIH,KAAKJ,IAAAA,CAAAA;EACnC;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,iBAAeR;",
|
|
6
|
+
"names": ["Effect", "Operation", "Feed", "Ref", "Transcript", "handler", "TranscriptOperation", "Create", "pipe", "Operation", "withHandler", "fn", "space", "feed", "db", "add", "Feed", "make", "object", "Transcript", "Ref"]
|
|
7
|
+
}
|