@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d
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/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs +17 -0
- package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +16 -0
- package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-TWJ2UCOZ.mjs} +32 -32
- package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
- package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-4YFT4XA6.mjs} +8 -7
- package/dist/lib/{node-esm/call-manager-N3KASRDQ.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-ALZKJOZK.mjs} +40 -37
- package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +7 -0
- package/dist/lib/browser/chunk-ANTFU4JB.mjs +25 -0
- package/dist/lib/browser/chunk-ANTFU4JB.mjs.map +7 -0
- package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
- package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
- package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-ISCHODBV.mjs} +53 -3
- package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/{chunk-KTWYVC5X.mjs → chunk-JDJPMI7V.mjs} +47 -51
- package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +7 -0
- package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-KOBXMDCI.mjs} +68 -67
- package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-NPT5S6N4.mjs} +164 -101
- package/dist/lib/browser/chunk-NPT5S6N4.mjs.map +7 -0
- package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
- package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-TLOOZTRD.mjs} +18 -17
- package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-ZCW3NSDZ.mjs} +274 -374
- package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +55 -57
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-G33FT3NO.mjs} +40 -113
- package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +7 -0
- package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-WFZFYJBQ.mjs} +30 -27
- package/dist/lib/browser/markdown-WFZFYJBQ.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-ED7PHA44.mjs +29 -0
- package/dist/lib/browser/react-root-ED7PHA44.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-AUQQSQQC.mjs} +38 -36
- package/dist/lib/browser/react-surface-AUQQSQQC.mjs.map +7 -0
- package/dist/lib/browser/repair-JFJLEM2O.mjs +35 -0
- package/dist/lib/browser/repair-JFJLEM2O.mjs.map +7 -0
- package/dist/lib/browser/{settings-GRKEID73.mjs → settings-E6IOLK46.mjs} +6 -5
- package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-E6IOLK46.mjs.map} +1 -1
- package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
- package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
- package/dist/lib/browser/types/index.mjs +7 -10
- package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.mjs +18 -0
- package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +17 -0
- package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-VD6I2V5H.mjs} +32 -32
- package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
- package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-UMUXEYH5.mjs} +8 -7
- package/dist/lib/{browser/call-manager-EW2QC6Q4.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
- package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-7KZWZS2U.mjs} +274 -374
- package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-AB42KYF3.mjs} +40 -37
- package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
- package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ATNY37UV.mjs +27 -0
- package/dist/lib/node-esm/chunk-ATNY37UV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-E5HNHFYH.mjs} +18 -17
- package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-FF3QVPY4.mjs} +164 -101
- package/dist/lib/node-esm/chunk-FF3QVPY4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-P2M364TO.mjs} +47 -51
- package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-PZH2EDU5.mjs} +68 -67
- package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
- package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-VBI32FGI.mjs} +53 -3
- package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +55 -57
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-4PX3WXQG.mjs} +40 -113
- package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-CSR5MAPZ.mjs} +30 -27
- package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-DZN324JA.mjs +30 -0
- package/dist/lib/node-esm/react-root-DZN324JA.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-AMVESEF4.mjs} +38 -36
- package/dist/lib/node-esm/react-surface-AMVESEF4.mjs.map +7 -0
- package/dist/lib/node-esm/repair-RMLR24YR.mjs +36 -0
- package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-RGZHWDSO.mjs} +6 -5
- package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-RGZHWDSO.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
- package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +7 -10
- package/dist/types/src/ThreadPlugin.d.ts +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts.map +1 -1
- package/dist/types/src/calls/types.d.ts.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +2 -0
- package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
- package/dist/types/src/calls-service.stories.d.ts +0 -1
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +2 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/repair.d.ts +4 -0
- package/dist/types/src/capabilities/repair.d.ts.map +1 -0
- package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
- package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts +2 -2
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts +79 -9
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +79 -7
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +6 -5
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +8 -3
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts +2 -2
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
- package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +4 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +9 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +9 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
- package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
- package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
- package/dist/types/src/components/ThreadSettings.d.ts +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +3 -3
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/functions/create-proposals.d.ts +6 -0
- package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
- package/dist/types/src/functions/index.d.ts +2 -0
- package/dist/types/src/functions/index.d.ts.map +1 -0
- package/dist/types/src/hooks/analytics.d.ts +2 -2
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +78 -7
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +16 -0
- package/dist/types/src/types/Channel.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +130 -244
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +64 -60
- package/src/ThreadPlugin.tsx +135 -134
- package/src/calls/call-manager.ts +1 -1
- package/src/calls/media-manager.ts +11 -7
- package/src/calls/types.ts +7 -3
- package/src/calls/util/calls-service.ts +12 -7
- package/src/calls/util/stub-media-streams.ts +61 -3
- package/src/calls-service.stories.tsx +2 -5
- package/src/capabilities/app-graph-builder.ts +41 -30
- package/src/capabilities/blueprint-definition.ts +38 -0
- package/src/capabilities/capabilities.ts +7 -7
- package/src/capabilities/index.ts +2 -1
- package/src/capabilities/intent-resolver.ts +29 -67
- package/src/capabilities/markdown.ts +5 -3
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +25 -23
- package/src/capabilities/repair.ts +40 -0
- package/src/components/Call/Call.tsx +1 -1
- package/src/components/Call/Toolbar.tsx +9 -9
- package/src/components/CallDebugPanel.tsx +112 -55
- package/src/components/CallSidebar.tsx +1 -1
- package/src/components/ChannelContainer.stories.tsx +10 -10
- package/src/components/ChannelContainer.tsx +19 -15
- package/src/components/Chat.stories.tsx +14 -19
- package/src/components/ChatContainer.tsx +29 -21
- package/src/components/Comments.stories.tsx +11 -17
- package/src/components/CommentsContainer.tsx +5 -7
- package/src/components/CommentsThreadContainer.tsx +31 -27
- package/src/components/Lobby/Lobby.tsx +1 -1
- package/src/components/Media/VideoObject.stories.tsx +12 -7
- package/src/components/Media/VideoObject.tsx +1 -1
- package/src/components/MessageContainer.tsx +11 -9
- package/src/components/Participant/Participant.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
- package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
- package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
- package/src/components/ThreadSettings.tsx +4 -5
- package/src/components/index.ts +4 -4
- package/src/components/testing.ts +7 -9
- package/src/extensions/threads.ts +30 -20
- package/src/functions/create-proposals.ts +56 -0
- package/src/functions/index.ts +5 -0
- package/src/hooks/analytics.ts +4 -7
- package/src/hooks/index.ts +3 -2
- package/src/hooks/useVideoStreamTrack.tsx +1 -1
- package/src/meta.ts +9 -5
- package/src/testing/stories.ts +3 -6
- package/src/translations.ts +8 -4
- package/src/types/Channel.ts +26 -0
- package/src/types/index.ts +1 -1
- package/src/types/types.ts +21 -29
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
- package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
- package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
- package/dist/lib/browser/chunk-2I277V52.mjs.map +0 -7
- package/dist/lib/browser/chunk-2P3GVRHP.mjs.map +0 -7
- package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
- package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
- package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
- package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
- package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
- package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
- package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
- package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
- package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
- package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
- package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
- package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
- package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
- package/dist/lib/node-esm/ChatContainer-4EGHKHIU.mjs +0 -16
- package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
- package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
- package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
- package/dist/types/src/capabilities/toolkit.d.ts +0 -5
- package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
- package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -177
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/capabilities/toolkit.ts +0 -78
- package/src/types/schema.ts +0 -33
- /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-L7MKV7DS.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-KPY4BAUE.mjs.map} +0 -0
- /package/dist/lib/{node-esm/ChannelContainer-D5E2S6AI.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChannelContainer-FYONOOZ6.mjs.map} +0 -0
|
@@ -40,26 +40,84 @@ export const createBlackCanvasStreamTrack = async ({
|
|
|
40
40
|
return track;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
+
let audioContextStartedPreviously = false;
|
|
44
|
+
const userGestureEvents = [
|
|
45
|
+
'click',
|
|
46
|
+
'contextmenu',
|
|
47
|
+
'auxclick',
|
|
48
|
+
'dblclick',
|
|
49
|
+
'mousedown',
|
|
50
|
+
'mouseup',
|
|
51
|
+
'pointerup',
|
|
52
|
+
'touchend',
|
|
53
|
+
'keydown',
|
|
54
|
+
'keyup',
|
|
55
|
+
];
|
|
56
|
+
|
|
43
57
|
/**
|
|
44
58
|
* Creates an inaudible audio stream track.
|
|
45
59
|
* We need this to have audio track available when audio is disabled.
|
|
46
60
|
*/
|
|
47
61
|
export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {
|
|
48
62
|
const audioContext = new window.AudioContext();
|
|
63
|
+
|
|
49
64
|
const oscillator = audioContext.createOscillator();
|
|
50
65
|
oscillator.type = 'triangle';
|
|
51
|
-
// roughly sounds like a box fan
|
|
52
66
|
oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
|
|
53
67
|
|
|
54
68
|
const gainNode = audioContext.createGain();
|
|
55
|
-
gainNode.gain.setValueAtTime(0
|
|
69
|
+
gainNode.gain.setValueAtTime(0, audioContext.currentTime);
|
|
56
70
|
oscillator.connect(gainNode);
|
|
57
71
|
|
|
58
72
|
const destination = audioContext.createMediaStreamDestination();
|
|
59
73
|
gainNode.connect(destination);
|
|
60
|
-
|
|
74
|
+
|
|
75
|
+
let oscillatorStarted = false;
|
|
76
|
+
const ensureOscillatorStarted = () => {
|
|
77
|
+
if (oscillatorStarted) return;
|
|
78
|
+
oscillator.start();
|
|
79
|
+
oscillatorStarted = true;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const stateChangeHandler = () => {
|
|
83
|
+
if (audioContext.state === 'running') {
|
|
84
|
+
audioContextStartedPreviously = true;
|
|
85
|
+
ensureOscillatorStarted();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {
|
|
89
|
+
resumeAudioContext();
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
audioContext.addEventListener('statechange', stateChangeHandler);
|
|
94
|
+
|
|
95
|
+
const resumeAudioContext = () => {
|
|
96
|
+
void audioContext.resume().then(() => {
|
|
97
|
+
cleanUpUserGestureListeners();
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const cleanUpUserGestureListeners = () => {
|
|
102
|
+
userGestureEvents.forEach((gesture) => {
|
|
103
|
+
document.removeEventListener(gesture, resumeAudioContext, {
|
|
104
|
+
capture: true,
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
if (audioContextStartedPreviously) {
|
|
110
|
+
resumeAudioContext();
|
|
111
|
+
} else {
|
|
112
|
+
userGestureEvents.forEach((gesture) => {
|
|
113
|
+
document.addEventListener(gesture, resumeAudioContext, {
|
|
114
|
+
capture: true,
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
61
118
|
|
|
62
119
|
ctx.onDispose(async () => {
|
|
120
|
+
cleanUpUserGestureListeners();
|
|
63
121
|
oscillator.disconnect();
|
|
64
122
|
oscillator.stop();
|
|
65
123
|
await audioContext.close();
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
7
|
|
|
@@ -14,8 +12,8 @@ import { log } from '@dxos/log';
|
|
|
14
12
|
import { Config, useConfig } from '@dxos/react-client';
|
|
15
13
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
16
14
|
import { Button } from '@dxos/react-ui';
|
|
15
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
17
16
|
import { Json } from '@dxos/react-ui-syntax-highlighter';
|
|
18
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
19
17
|
|
|
20
18
|
const testVideo = new URL('../testing/video.mp4', import.meta.url).href;
|
|
21
19
|
|
|
@@ -177,6 +175,7 @@ const meta = {
|
|
|
177
175
|
title: 'plugins/plugin-thread/calls-service',
|
|
178
176
|
render: DefaultStory,
|
|
179
177
|
decorators: [
|
|
178
|
+
withTheme,
|
|
180
179
|
withClientProvider({
|
|
181
180
|
config: new Config({
|
|
182
181
|
runtime: {
|
|
@@ -186,8 +185,6 @@ const meta = {
|
|
|
186
185
|
},
|
|
187
186
|
}),
|
|
188
187
|
}),
|
|
189
|
-
withTheme,
|
|
190
|
-
withLayout(),
|
|
191
188
|
],
|
|
192
189
|
parameters: {
|
|
193
190
|
layout: 'centered',
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
5
|
+
import { Atom } from '@effect-atom/atom-react';
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
7
8
|
|
|
8
9
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
9
10
|
import { Obj } from '@dxos/echo';
|
|
10
11
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
11
12
|
import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
|
|
12
|
-
import { ROOT_ID,
|
|
13
|
-
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
13
|
+
import { ROOT_ID, atomFromSignal, createExtension } from '@dxos/plugin-graph';
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { meta } from '../meta';
|
|
16
|
+
import { Channel, ThreadAction } from '../types';
|
|
17
17
|
import { getAnchor } from '../util';
|
|
18
18
|
|
|
19
19
|
import { ThreadCapabilities } from './capabilities';
|
|
@@ -26,16 +26,16 @@ export default (context: PluginContext) => {
|
|
|
26
26
|
|
|
27
27
|
return contributes(Capabilities.AppGraphBuilder, [
|
|
28
28
|
createExtension({
|
|
29
|
-
id: `${
|
|
29
|
+
id: `${meta.id}/active-call`,
|
|
30
30
|
connector: (node) =>
|
|
31
|
-
|
|
32
|
-
pipe(
|
|
31
|
+
Atom.make((get) =>
|
|
32
|
+
Function.pipe(
|
|
33
33
|
get(node),
|
|
34
34
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
35
35
|
Option.map((node) => {
|
|
36
36
|
const [call] = get(context.capabilities(ThreadCapabilities.CallManager));
|
|
37
37
|
return get(
|
|
38
|
-
|
|
38
|
+
atomFromSignal(() =>
|
|
39
39
|
call?.joined
|
|
40
40
|
? [
|
|
41
41
|
{
|
|
@@ -43,7 +43,7 @@ export default (context: PluginContext) => {
|
|
|
43
43
|
type: DECK_COMPANION_TYPE,
|
|
44
44
|
data: null,
|
|
45
45
|
properties: {
|
|
46
|
-
label: ['call panel label', { ns:
|
|
46
|
+
label: ['call panel label', { ns: meta.id }],
|
|
47
47
|
icon: 'ph--video-conference--regular',
|
|
48
48
|
position: 'hoist',
|
|
49
49
|
disposition: 'hidden',
|
|
@@ -61,16 +61,18 @@ export default (context: PluginContext) => {
|
|
|
61
61
|
// TODO(wittjosiah): The channel shouldn't become the companion during a call.
|
|
62
62
|
// Alternative: the call/meeting/thread should be a child node of the channel and that should be opened.
|
|
63
63
|
createExtension({
|
|
64
|
-
id: `${
|
|
64
|
+
id: `${meta.id}/channel-chat-companion`,
|
|
65
65
|
connector: (node) => {
|
|
66
|
-
return
|
|
67
|
-
return pipe(
|
|
66
|
+
return Atom.make((get) => {
|
|
67
|
+
return Function.pipe(
|
|
68
68
|
get(node),
|
|
69
|
-
Option.flatMap((node) =>
|
|
69
|
+
Option.flatMap((node) =>
|
|
70
|
+
Obj.instanceOf(Channel.Channel, node.data) ? Option.some(node.data) : Option.none(),
|
|
71
|
+
),
|
|
70
72
|
Option.map((channel) => {
|
|
71
73
|
const callManager = context.getCapability(ThreadCapabilities.CallManager);
|
|
72
74
|
const joined = get(
|
|
73
|
-
|
|
75
|
+
atomFromSignal(() => callManager.joined && callManager.roomId === Obj.getDXN(channel).toString()),
|
|
74
76
|
);
|
|
75
77
|
if (!joined) {
|
|
76
78
|
return [];
|
|
@@ -78,11 +80,11 @@ export default (context: PluginContext) => {
|
|
|
78
80
|
|
|
79
81
|
return [
|
|
80
82
|
{
|
|
81
|
-
id: `${
|
|
83
|
+
id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,
|
|
82
84
|
type: PLANK_COMPANION_TYPE,
|
|
83
85
|
data: 'chat',
|
|
84
86
|
properties: {
|
|
85
|
-
label: ['channel companion label', { ns:
|
|
87
|
+
label: ['channel companion label', { ns: meta.id }],
|
|
86
88
|
icon: 'ph--hash--regular',
|
|
87
89
|
position: 'hoist',
|
|
88
90
|
disposition: 'hidden',
|
|
@@ -98,11 +100,11 @@ export default (context: PluginContext) => {
|
|
|
98
100
|
createExtension({
|
|
99
101
|
id: `${meta.id}/comments-companion`,
|
|
100
102
|
connector: (node) =>
|
|
101
|
-
|
|
102
|
-
pipe(
|
|
103
|
+
Atom.make((get) =>
|
|
104
|
+
Function.pipe(
|
|
103
105
|
get(node),
|
|
104
106
|
Option.flatMap((node) => {
|
|
105
|
-
if (!Obj.isObject(node.data) || Obj.instanceOf(
|
|
107
|
+
if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {
|
|
106
108
|
return Option.none();
|
|
107
109
|
}
|
|
108
110
|
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
@@ -128,11 +130,11 @@ export default (context: PluginContext) => {
|
|
|
128
130
|
createExtension({
|
|
129
131
|
id: `${meta.id}/comment-toolbar`,
|
|
130
132
|
actions: (node) =>
|
|
131
|
-
|
|
132
|
-
pipe(
|
|
133
|
+
Atom.make((get) =>
|
|
134
|
+
Function.pipe(
|
|
133
135
|
get(node),
|
|
134
136
|
Option.flatMap((node) => {
|
|
135
|
-
if (!Obj.isObject(node.data) || Obj.instanceOf(
|
|
137
|
+
if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {
|
|
136
138
|
return Option.none();
|
|
137
139
|
}
|
|
138
140
|
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
@@ -142,28 +144,37 @@ export default (context: PluginContext) => {
|
|
|
142
144
|
const selectionManager = context.getCapability(AttentionCapabilities.Selection);
|
|
143
145
|
const toolbar = get(context.capabilities(ThreadCapabilities.State))[0]?.state.toolbar ?? {};
|
|
144
146
|
const disabled = get(
|
|
145
|
-
|
|
147
|
+
atomFromSignal(() => {
|
|
146
148
|
const metadata = resolve(Obj.getTypename(object)!);
|
|
147
|
-
const selection = selectionManager.getSelection(
|
|
149
|
+
const selection = selectionManager.getSelection(
|
|
150
|
+
Obj.getDXN(object).toString(),
|
|
151
|
+
metadata.selectionMode,
|
|
152
|
+
);
|
|
148
153
|
const anchor = getAnchor(selection);
|
|
149
154
|
const invalidSelection = !anchor;
|
|
150
|
-
const overlappingComment = toolbar[
|
|
155
|
+
const overlappingComment = toolbar[Obj.getDXN(object).toString()];
|
|
151
156
|
return (metadata.comments === 'anchored' && invalidSelection) || overlappingComment;
|
|
152
157
|
}),
|
|
153
158
|
);
|
|
154
159
|
|
|
155
160
|
return [
|
|
156
161
|
{
|
|
157
|
-
id: `${
|
|
162
|
+
id: `${Obj.getDXN(object).toString()}/comment`,
|
|
158
163
|
data: () => {
|
|
159
164
|
const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
160
165
|
const metadata = resolve(Obj.getTypename(object)!);
|
|
161
|
-
const selection = selectionManager.getSelection(
|
|
166
|
+
const selection = selectionManager.getSelection(Obj.getDXN(object).toString());
|
|
162
167
|
// TODO(wittjosiah): Use presence of selection to determine if the comment should be anchored.
|
|
163
168
|
// Requires all components which support selection (e.g. table/kanban) to support anchored comments.
|
|
164
169
|
const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();
|
|
165
170
|
const name = metadata.getAnchorLabel?.(object, anchor);
|
|
166
|
-
void dispatch(
|
|
171
|
+
void dispatch(
|
|
172
|
+
createIntent(ThreadAction.Create, {
|
|
173
|
+
anchor,
|
|
174
|
+
name,
|
|
175
|
+
subject: object,
|
|
176
|
+
}),
|
|
177
|
+
);
|
|
167
178
|
},
|
|
168
179
|
properties: {
|
|
169
180
|
label: ['add comment label', { ns: meta.id }],
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Capabilities, type Capability, contributes } from '@dxos/app-framework';
|
|
6
|
+
import { Blueprint, Template } from '@dxos/blueprints';
|
|
7
|
+
import { type FunctionDefinition } from '@dxos/functions';
|
|
8
|
+
import { trim } from '@dxos/util';
|
|
9
|
+
|
|
10
|
+
import { createProposals } from '../functions';
|
|
11
|
+
|
|
12
|
+
const functions: FunctionDefinition[] = [createProposals];
|
|
13
|
+
|
|
14
|
+
export const ASSISTANT_BLUEPRINT_KEY = 'dxos.org/blueprint/thread';
|
|
15
|
+
|
|
16
|
+
export default (): Capability<any>[] => [
|
|
17
|
+
contributes(Capabilities.Functions, functions),
|
|
18
|
+
contributes(
|
|
19
|
+
Capabilities.BlueprintDefinition,
|
|
20
|
+
Blueprint.make({
|
|
21
|
+
key: ASSISTANT_BLUEPRINT_KEY,
|
|
22
|
+
name: 'Thread',
|
|
23
|
+
tools: Blueprint.toolDefinitions({ functions }),
|
|
24
|
+
instructions: Template.make({
|
|
25
|
+
// TODO(wittjosiah): Move example to function input schema annotation.
|
|
26
|
+
source: trim`
|
|
27
|
+
You can update markdown documents via proposals.
|
|
28
|
+
For each diff, respond with the smallest possible matching span.
|
|
29
|
+
For example:
|
|
30
|
+
- "There is a tyop in this sentence."
|
|
31
|
+
+ "There is a typo in this sentence."
|
|
32
|
+
- "This id goof."
|
|
33
|
+
+ "This is good."
|
|
34
|
+
`,
|
|
35
|
+
}),
|
|
36
|
+
}),
|
|
37
|
+
),
|
|
38
|
+
];
|
|
@@ -6,28 +6,28 @@ import { defineCapability } from '@dxos/app-framework';
|
|
|
6
6
|
import { type DeepReadonly } from '@dxos/util';
|
|
7
7
|
|
|
8
8
|
import { type CallManager, type CallState, type MediaState } from '../calls';
|
|
9
|
-
import {
|
|
10
|
-
import { type
|
|
9
|
+
import { meta } from '../meta';
|
|
10
|
+
import { type Channel, type ThreadState, type ViewState } from '../types';
|
|
11
11
|
|
|
12
12
|
export namespace ThreadCapabilities {
|
|
13
|
-
export const CallManager = defineCapability<CallManager>(`${
|
|
13
|
+
export const CallManager = defineCapability<CallManager>(`${meta.id}/capability/call-manager`);
|
|
14
14
|
|
|
15
15
|
// TODO(burdon): Better way to define specific extensions for meeting companions.
|
|
16
16
|
// TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?
|
|
17
17
|
// TODO(wittjosiah): These callbacks could be intents once we support broadcast.
|
|
18
18
|
export type CallProperties = {
|
|
19
|
-
onJoin: (state: { channel?:
|
|
19
|
+
onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;
|
|
20
20
|
onLeave: (roomId?: string) => Promise<void>;
|
|
21
21
|
onCallStateUpdated: (callState: CallState) => Promise<void>;
|
|
22
22
|
onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;
|
|
23
23
|
};
|
|
24
|
-
export const CallExtension = defineCapability<CallProperties>(`${
|
|
24
|
+
export const CallExtension = defineCapability<CallProperties>(`${meta.id}/capability/call-extension`);
|
|
25
25
|
|
|
26
26
|
type GetViewState = (subjectId: string) => ViewState;
|
|
27
27
|
export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(
|
|
28
|
-
`${
|
|
28
|
+
`${meta.id}/capability/state`,
|
|
29
29
|
);
|
|
30
30
|
export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(
|
|
31
|
-
`${
|
|
31
|
+
`${meta.id}/capability/state`,
|
|
32
32
|
);
|
|
33
33
|
}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
import { lazy } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
7
|
export const AppGraphBuilder = lazy(() => import('./app-graph-builder'));
|
|
8
|
+
export const BlueprintDefinition = lazy(() => import('./blueprint-definition'));
|
|
8
9
|
export const CallManager = lazy(() => import('./call-manager'));
|
|
9
10
|
export const IntentResolver = lazy(() => import('./intent-resolver'));
|
|
10
11
|
export const Markdown = lazy(() => import('./markdown'));
|
|
11
12
|
export const ReactRoot = lazy(() => import('./react-root'));
|
|
12
13
|
export const ReactSurface = lazy(() => import('./react-surface'));
|
|
14
|
+
export const Repair = lazy(() => import('./repair'));
|
|
13
15
|
export const ThreadSettings = lazy(() => import('./settings'));
|
|
14
16
|
export const ThreadState = lazy(() => import('./state'));
|
|
15
|
-
export const Toolkit = lazy(() => import('./toolkit'));
|
|
16
17
|
|
|
17
18
|
export * from './capabilities';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, type PluginContext, contributes, createIntent, createResolver } from '@dxos/app-framework';
|
|
8
8
|
import { sleep } from '@dxos/async';
|
|
@@ -10,25 +10,28 @@ import { Obj, Relation, Type } from '@dxos/echo';
|
|
|
10
10
|
import { invariant } from '@dxos/invariant';
|
|
11
11
|
import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';
|
|
12
12
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
13
|
-
import {
|
|
14
|
-
import { Ref,
|
|
15
|
-
import {
|
|
13
|
+
import { SpaceAction } from '@dxos/plugin-space/types';
|
|
14
|
+
import { Ref, getSpace } from '@dxos/react-client/echo';
|
|
15
|
+
import { Collection } from '@dxos/schema';
|
|
16
|
+
import { AnchoredTo, Message, Thread } from '@dxos/types';
|
|
16
17
|
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
18
|
+
import { meta } from '../meta';
|
|
19
|
+
import { Channel, ThreadAction } from '../types';
|
|
19
20
|
|
|
20
21
|
import { ThreadCapabilities } from './capabilities';
|
|
21
22
|
|
|
22
23
|
export default (context: PluginContext) =>
|
|
23
24
|
contributes(Capabilities.IntentResolver, [
|
|
24
25
|
createResolver({
|
|
25
|
-
intent: ThreadAction.
|
|
26
|
-
resolve: ({ space, rootCollection }) =>
|
|
26
|
+
intent: ThreadAction.OnCreateSpace,
|
|
27
|
+
resolve: ({ space, isDefault, rootCollection }) =>
|
|
27
28
|
Effect.gen(function* () {
|
|
29
|
+
if (isDefault) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
28
33
|
const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
29
|
-
const {
|
|
30
|
-
createIntent(CollectionAction.CreateQueryCollection, { typename: Type.getTypename(ChannelType) }),
|
|
31
|
-
);
|
|
34
|
+
const collection = Collection.makeManaged({ key: Type.getTypename(Channel.Channel) });
|
|
32
35
|
rootCollection.objects.push(Ref.make(collection));
|
|
33
36
|
|
|
34
37
|
const { object: channel } = yield* dispatch(
|
|
@@ -41,18 +44,14 @@ export default (context: PluginContext) =>
|
|
|
41
44
|
intent: ThreadAction.CreateChannel,
|
|
42
45
|
resolve: ({ name }) => ({
|
|
43
46
|
data: {
|
|
44
|
-
object:
|
|
45
|
-
name,
|
|
46
|
-
defaultThread: Ref.make(Obj.make(ThreadType, { messages: [], status: 'active' })),
|
|
47
|
-
threads: [],
|
|
48
|
-
}),
|
|
47
|
+
object: Channel.make({ name }),
|
|
49
48
|
},
|
|
50
49
|
}),
|
|
51
50
|
}),
|
|
52
51
|
createResolver({
|
|
53
52
|
intent: ThreadAction.CreateChannelThread,
|
|
54
53
|
resolve: ({ channel }) => {
|
|
55
|
-
const thread =
|
|
54
|
+
const thread = Thread.make({ status: 'active' });
|
|
56
55
|
channel.threads.push(Ref.make(thread));
|
|
57
56
|
return {
|
|
58
57
|
data: {
|
|
@@ -65,13 +64,10 @@ export default (context: PluginContext) =>
|
|
|
65
64
|
createResolver({
|
|
66
65
|
intent: ThreadAction.Create,
|
|
67
66
|
resolve: ({ name, anchor: _anchor, subject }) => {
|
|
68
|
-
const space = getSpace(subject);
|
|
69
|
-
invariant(space, 'Space not found');
|
|
70
|
-
|
|
71
67
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
72
|
-
const subjectId =
|
|
73
|
-
const thread =
|
|
74
|
-
const anchor = Relation.make(AnchoredTo, {
|
|
68
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
69
|
+
const thread = Thread.make({ name });
|
|
70
|
+
const anchor = Relation.make(AnchoredTo.AnchoredTo, {
|
|
75
71
|
[Relation.Source]: thread,
|
|
76
72
|
[Relation.Target]: subject,
|
|
77
73
|
anchor: _anchor,
|
|
@@ -86,41 +82,7 @@ export default (context: PluginContext) =>
|
|
|
86
82
|
|
|
87
83
|
return {
|
|
88
84
|
intents: [
|
|
89
|
-
createIntent(ThreadAction.Select, { current:
|
|
90
|
-
createIntent(DeckAction.ChangeCompanion, {
|
|
91
|
-
primary: subjectId,
|
|
92
|
-
companion: `${subjectId}${ATTENDABLE_PATH_SEPARATOR}comments`,
|
|
93
|
-
}),
|
|
94
|
-
],
|
|
95
|
-
};
|
|
96
|
-
},
|
|
97
|
-
}),
|
|
98
|
-
createResolver({
|
|
99
|
-
intent: ThreadAction.AddProposal,
|
|
100
|
-
resolve: ({ text, anchor, sender, subject }) => {
|
|
101
|
-
console.log('add-proposal', text, anchor, sender, subject);
|
|
102
|
-
const space = getSpace(subject);
|
|
103
|
-
invariant(space, 'Space not found');
|
|
104
|
-
|
|
105
|
-
const subjectId = fullyQualifiedId(subject);
|
|
106
|
-
const proposal = Obj.make(DataType.Message, {
|
|
107
|
-
created: new Date().toISOString(),
|
|
108
|
-
sender,
|
|
109
|
-
blocks: [{ _tag: 'proposal', text }],
|
|
110
|
-
});
|
|
111
|
-
const thread = Obj.make(ThreadType, { name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });
|
|
112
|
-
|
|
113
|
-
return {
|
|
114
|
-
intents: [
|
|
115
|
-
createIntent(SpaceAction.AddObject, { object: thread, target: space, hidden: true }),
|
|
116
|
-
createIntent(SpaceAction.AddRelation, {
|
|
117
|
-
space,
|
|
118
|
-
schema: AnchoredTo,
|
|
119
|
-
source: thread,
|
|
120
|
-
target: subject,
|
|
121
|
-
fields: { anchor },
|
|
122
|
-
}),
|
|
123
|
-
createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),
|
|
85
|
+
createIntent(ThreadAction.Select, { current: Obj.getDXN(thread).toString() }),
|
|
124
86
|
createIntent(DeckAction.ChangeCompanion, {
|
|
125
87
|
primary: subjectId,
|
|
126
88
|
companion: `${subjectId}${ATTENDABLE_PATH_SEPARATOR}comments`,
|
|
@@ -165,9 +127,9 @@ export default (context: PluginContext) =>
|
|
|
165
127
|
createResolver({
|
|
166
128
|
intent: ThreadAction.Delete,
|
|
167
129
|
resolve: async ({ subject, anchor, thread: _thread }, undo) => {
|
|
168
|
-
const thread = _thread ?? (Relation.getSource(anchor) as
|
|
130
|
+
const thread = _thread ?? (Relation.getSource(anchor) as Thread.Thread);
|
|
169
131
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
170
|
-
const subjectId =
|
|
132
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
171
133
|
const draft = state.drafts[subjectId];
|
|
172
134
|
if (draft) {
|
|
173
135
|
// Check if we're deleting a draft; if so, remo ve it.
|
|
@@ -191,7 +153,7 @@ export default (context: PluginContext) =>
|
|
|
191
153
|
|
|
192
154
|
return {
|
|
193
155
|
undoable: {
|
|
194
|
-
message: ['thread deleted label', { ns:
|
|
156
|
+
message: ['thread deleted label', { ns: meta.id }],
|
|
195
157
|
data: { thread, anchor },
|
|
196
158
|
},
|
|
197
159
|
intents: [
|
|
@@ -227,13 +189,13 @@ export default (context: PluginContext) =>
|
|
|
227
189
|
createResolver({
|
|
228
190
|
intent: ThreadAction.AddMessage,
|
|
229
191
|
resolve: ({ anchor, subject, sender, text }) => {
|
|
230
|
-
const thread = Relation.getSource(anchor) as
|
|
192
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
231
193
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
232
|
-
const subjectId =
|
|
194
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
233
195
|
const space = getSpace(subject);
|
|
234
196
|
invariant(space, 'Space not found');
|
|
235
197
|
|
|
236
|
-
const message = Obj.make(
|
|
198
|
+
const message = Obj.make(Message.Message, {
|
|
237
199
|
created: new Date().toISOString(),
|
|
238
200
|
sender,
|
|
239
201
|
blocks: [{ _tag: 'text', text }],
|
|
@@ -253,7 +215,7 @@ export default (context: PluginContext) =>
|
|
|
253
215
|
intents.push(
|
|
254
216
|
createIntent(SpaceAction.AddRelation, {
|
|
255
217
|
space,
|
|
256
|
-
schema: AnchoredTo,
|
|
218
|
+
schema: AnchoredTo.AnchoredTo,
|
|
257
219
|
source: thread,
|
|
258
220
|
target: subject,
|
|
259
221
|
fields: { anchor: draft.anchor },
|
|
@@ -289,7 +251,7 @@ export default (context: PluginContext) =>
|
|
|
289
251
|
createResolver({
|
|
290
252
|
intent: ThreadAction.DeleteMessage,
|
|
291
253
|
resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {
|
|
292
|
-
const thread = Relation.getSource(anchor) as
|
|
254
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
293
255
|
const space = getSpace(subject);
|
|
294
256
|
invariant(space, 'Space not found');
|
|
295
257
|
|
|
@@ -311,7 +273,7 @@ export default (context: PluginContext) =>
|
|
|
311
273
|
|
|
312
274
|
return {
|
|
313
275
|
undoable: {
|
|
314
|
-
message: ['message deleted label', { ns:
|
|
276
|
+
message: ['message deleted label', { ns: meta.id }],
|
|
315
277
|
data: { message, messageIndex },
|
|
316
278
|
},
|
|
317
279
|
intents: [
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { Obj } from '@dxos/echo';
|
|
8
9
|
import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';
|
|
9
10
|
import { MarkdownCapabilities } from '@dxos/plugin-markdown';
|
|
10
|
-
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
11
11
|
import { type EditorState, commentClickedEffect, commentsState, overlap } from '@dxos/react-ui-editor';
|
|
12
12
|
|
|
13
13
|
import { threads } from '../extensions';
|
|
@@ -22,17 +22,19 @@ export default (context: PluginContext) =>
|
|
|
22
22
|
return threads(state, doc, dispatch);
|
|
23
23
|
},
|
|
24
24
|
({ document: doc }) => {
|
|
25
|
+
if (!doc) return [];
|
|
25
26
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
26
27
|
|
|
27
28
|
return EditorView.updateListener.of((update) => {
|
|
28
29
|
if (update.docChanged || update.selectionSet) {
|
|
29
|
-
state.toolbar[
|
|
30
|
+
state.toolbar[Obj.getDXN(doc).toString()] = selectionOverlapsComment(update.state);
|
|
30
31
|
}
|
|
31
32
|
});
|
|
32
33
|
},
|
|
33
34
|
({ document: doc }) => {
|
|
35
|
+
if (!doc) return [];
|
|
34
36
|
const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
35
|
-
const id =
|
|
37
|
+
const id = Obj.getDXN(doc).toString();
|
|
36
38
|
|
|
37
39
|
return EditorView.updateListener.of((update) => {
|
|
38
40
|
update.transactions.forEach((transaction) => {
|
|
@@ -7,11 +7,11 @@ import React from 'react';
|
|
|
7
7
|
import { Capabilities, contributes } from '@dxos/app-framework';
|
|
8
8
|
|
|
9
9
|
import { Call } from '../components';
|
|
10
|
-
import {
|
|
10
|
+
import { meta } from '../meta';
|
|
11
11
|
|
|
12
12
|
export default () => {
|
|
13
13
|
return contributes(Capabilities.ReactRoot, {
|
|
14
|
-
id:
|
|
14
|
+
id: meta.id,
|
|
15
15
|
root: () => <Call.Audio />,
|
|
16
16
|
});
|
|
17
17
|
};
|