@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3
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-MX5ABVGC.mjs +16 -0
- package/dist/lib/browser/ChatContainer-7F5Y6GXJ.mjs +15 -0
- package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-HNYLII5E.mjs} +31 -32
- package/dist/lib/browser/app-graph-builder-HNYLII5E.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs +104 -0
- package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-MAXQLMMS.mjs} +7 -7
- package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs.map → call-manager-MAXQLMMS.mjs.map} +1 -1
- package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
- package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
- package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-BQWQFTWT.mjs} +165 -101
- package/dist/lib/browser/chunk-BQWQFTWT.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-H63NDV62.mjs → chunk-FR6MEAZI.mjs} +18 -17
- package/dist/lib/browser/chunk-FR6MEAZI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-INQVAYPN.mjs} +40 -37
- package/dist/lib/browser/chunk-INQVAYPN.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-K2DUJRFJ.mjs +27 -0
- package/dist/lib/browser/chunk-K2DUJRFJ.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-NMJEVD36.mjs +168 -0
- package/dist/lib/browser/chunk-NMJEVD36.mjs.map +7 -0
- package/dist/lib/browser/chunk-OOUDK7Q7.mjs +23 -0
- package/dist/lib/browser/chunk-OOUDK7Q7.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 +42 -42
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-BOUT4WGY.mjs} +32 -99
- package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs.map +7 -0
- package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-74EUSQGV.mjs} +24 -22
- package/dist/lib/browser/markdown-74EUSQGV.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-BVG7B2LW.mjs +28 -0
- package/dist/lib/browser/react-root-BVG7B2LW.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-BCD5ODQ6.mjs} +37 -36
- package/dist/lib/browser/react-surface-BCD5ODQ6.mjs.map +7 -0
- package/dist/lib/browser/{settings-GRKEID73.mjs → settings-LGQUZITB.mjs} +5 -5
- package/dist/lib/browser/{settings-GRKEID73.mjs.map → settings-LGQUZITB.mjs.map} +1 -1
- package/dist/lib/browser/{state-2T4KDWBX.mjs → state-36REWXO5.mjs} +5 -5
- package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-36REWXO5.mjs.map} +1 -1
- package/dist/lib/browser/types/index.mjs +7 -9
- package/dist/lib/node-esm/ChannelContainer-2JJJ3IDK.mjs +17 -0
- package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs → ChatContainer-C526R4DI.mjs} +6 -6
- package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-SOCKP4ST.mjs} +31 -32
- package/dist/lib/node-esm/app-graph-builder-SOCKP4ST.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs +105 -0
- package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-LC4OS2KD.mjs} +7 -7
- package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs.map → call-manager-LC4OS2KD.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-5DLH4MWN.mjs +25 -0
- package/dist/lib/node-esm/chunk-5DLH4MWN.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-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
- package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-JF7THR7F.mjs} +40 -37
- package/dist/lib/node-esm/chunk-JF7THR7F.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-JJW6YMLC.mjs} +165 -101
- package/dist/lib/node-esm/chunk-JJW6YMLC.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-TJKM5JZT.mjs +169 -0
- package/dist/lib/node-esm/chunk-TJKM5JZT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-TWKGDFCS.mjs} +18 -17
- package/dist/lib/node-esm/chunk-TWKGDFCS.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/chunk-XI45H4IV.mjs +28 -0
- package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +19 -0
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +42 -42
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-45PLIFCJ.mjs} +32 -99
- package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-566XXB55.mjs} +24 -22
- package/dist/lib/node-esm/markdown-566XXB55.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-DCY6DKLC.mjs +29 -0
- package/dist/lib/node-esm/react-root-DCY6DKLC.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-WZH7OAO3.mjs} +37 -36
- package/dist/lib/node-esm/react-surface-WZH7OAO3.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-WKLJSP6R.mjs} +5 -5
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs.map → settings-WKLJSP6R.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-X3W67GTL.mjs} +5 -5
- package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-X3W67GTL.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +7 -9
- 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 +1 -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/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 +75 -9
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +75 -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 +4 -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 +2 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -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 +74 -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/{schema.d.ts → Thread.d.ts} +18 -28
- package/dist/types/src/types/Thread.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +31 -117
- 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 +139 -132
- 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 +1 -1
- package/src/capabilities/intent-resolver.ts +22 -60
- package/src/capabilities/markdown.ts +5 -3
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +24 -23
- 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 +30 -21
- package/src/components/Comments.stories.tsx +12 -17
- package/src/components/CommentsContainer.tsx +6 -7
- package/src/components/CommentsThreadContainer.tsx +32 -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 +6 -6
- 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 +8 -8
- package/src/extensions/threads.ts +25 -16
- package/src/functions/create-proposals.ts +58 -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 +6 -4
- package/src/types/Channel.ts +27 -0
- package/src/types/Thread.ts +26 -0
- package/src/types/index.ts +2 -1
- package/src/types/types.ts +19 -27
- 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 +0 -147
- 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/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 +0 -148
- 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.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-MX5ABVGC.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-7F5Y6GXJ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-D5E2S6AI.mjs.map → ChannelContainer-2JJJ3IDK.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChatContainer-C526R4DI.mjs.map} +0 -0
|
@@ -4,36 +4,28 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
CollaborationActions,
|
|
10
|
-
LayoutAction,
|
|
11
|
-
createIntent,
|
|
12
|
-
useCapabilities,
|
|
13
|
-
useCapability,
|
|
14
|
-
useIntentDispatcher,
|
|
15
|
-
} from '@dxos/app-framework';
|
|
7
|
+
import { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
|
|
16
9
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
17
|
-
import { Ref,
|
|
10
|
+
import { Ref, getSpace, useQuery } from '@dxos/react-client/echo';
|
|
18
11
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
19
|
-
import {
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
20
13
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
21
14
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
22
15
|
import { Tabs } from '@dxos/react-ui-tabs';
|
|
23
16
|
import { mx } from '@dxos/react-ui-theme';
|
|
24
|
-
import { AnchoredTo } from '@dxos/
|
|
17
|
+
import { AnchoredTo } from '@dxos/types';
|
|
25
18
|
|
|
26
19
|
import { ThreadCapabilities } from '../capabilities';
|
|
27
20
|
import { CommentsContainer, type CommentsContainerProps } from '../components';
|
|
28
21
|
import { meta } from '../meta';
|
|
29
|
-
import {
|
|
22
|
+
import { Thread, ThreadAction } from '../types';
|
|
30
23
|
|
|
31
|
-
export const
|
|
24
|
+
export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
32
25
|
const { t } = useTranslation(meta.id);
|
|
33
26
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
34
27
|
const identity = useIdentity();
|
|
35
|
-
const
|
|
36
|
-
const subjectId = fullyQualifiedId(subject);
|
|
28
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
37
29
|
|
|
38
30
|
const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
|
|
39
31
|
const drafts = state.drafts[subjectId];
|
|
@@ -53,18 +45,18 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
53
45
|
);
|
|
54
46
|
|
|
55
47
|
const space = getSpace(subject);
|
|
56
|
-
const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
|
|
48
|
+
const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
|
|
57
49
|
const anchors = objectsAnchoredTo
|
|
58
50
|
.toSorted((a, b) => sort?.(a, b) ?? 0)
|
|
59
|
-
.filter((anchor) => Obj.instanceOf(
|
|
51
|
+
.filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
|
|
60
52
|
.concat(drafts ?? []);
|
|
61
53
|
|
|
62
54
|
const attended = useAttended();
|
|
63
55
|
|
|
64
56
|
const handleAttend = useCallback(
|
|
65
|
-
(anchor: AnchoredTo) => {
|
|
66
|
-
const thread = Relation.getSource(anchor) as
|
|
67
|
-
const threadId =
|
|
57
|
+
(anchor: AnchoredTo.AnchoredTo) => {
|
|
58
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
59
|
+
const threadId = Obj.getDXN(thread).toString();
|
|
68
60
|
|
|
69
61
|
if (state.current !== threadId) {
|
|
70
62
|
state.current = threadId;
|
|
@@ -75,7 +67,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
75
67
|
void dispatch(
|
|
76
68
|
createIntent(LayoutAction.ScrollIntoView, {
|
|
77
69
|
part: 'current',
|
|
78
|
-
subject:
|
|
70
|
+
subject: Obj.getDXN(subject).toString(),
|
|
79
71
|
options: {
|
|
80
72
|
cursor: anchor.anchor,
|
|
81
73
|
ref: threadId,
|
|
@@ -88,37 +80,52 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
88
80
|
);
|
|
89
81
|
|
|
90
82
|
const handleComment = useCallback(
|
|
91
|
-
async (anchor: AnchoredTo, text: string) => {
|
|
83
|
+
async (anchor: AnchoredTo.AnchoredTo, text: string) => {
|
|
92
84
|
await dispatch(
|
|
93
|
-
createIntent(ThreadAction.AddMessage, {
|
|
85
|
+
createIntent(ThreadAction.AddMessage, {
|
|
86
|
+
anchor,
|
|
87
|
+
subject,
|
|
88
|
+
sender: { identityDid: identity?.did },
|
|
89
|
+
text,
|
|
90
|
+
}),
|
|
94
91
|
);
|
|
95
92
|
|
|
96
|
-
const thread = Relation.getSource(anchor) as
|
|
97
|
-
state.current =
|
|
93
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
94
|
+
state.current = Obj.getDXN(thread).toString();
|
|
98
95
|
},
|
|
99
96
|
[dispatch, identity, subject],
|
|
100
97
|
);
|
|
101
98
|
|
|
102
99
|
const handleResolve = useCallback(
|
|
103
|
-
(anchor: AnchoredTo) =>
|
|
104
|
-
dispatch(
|
|
100
|
+
(anchor: AnchoredTo.AnchoredTo) =>
|
|
101
|
+
dispatch(
|
|
102
|
+
createIntent(ThreadAction.ToggleResolved, {
|
|
103
|
+
thread: Relation.getSource(anchor) as Thread.Thread,
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
105
106
|
[dispatch],
|
|
106
107
|
);
|
|
107
108
|
|
|
108
109
|
const handleThreadDelete = useCallback(
|
|
109
|
-
(anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
110
|
+
(anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
110
111
|
[dispatch, subject],
|
|
111
112
|
);
|
|
112
113
|
|
|
113
114
|
const handleMessageDelete = useCallback(
|
|
114
|
-
(anchor: AnchoredTo, messageId: string) =>
|
|
115
|
-
dispatch(
|
|
115
|
+
(anchor: AnchoredTo.AnchoredTo, messageId: string) =>
|
|
116
|
+
dispatch(
|
|
117
|
+
createIntent(ThreadAction.DeleteMessage, {
|
|
118
|
+
anchor,
|
|
119
|
+
subject,
|
|
120
|
+
messageId,
|
|
121
|
+
}),
|
|
122
|
+
),
|
|
116
123
|
[dispatch, subject],
|
|
117
124
|
);
|
|
118
125
|
|
|
119
126
|
const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
|
|
120
127
|
async (anchor, messageId) => {
|
|
121
|
-
const thread = Relation.getSource(anchor) as
|
|
128
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
122
129
|
const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
|
|
123
130
|
const message = thread.messages[messageIndex]?.target;
|
|
124
131
|
const proposal = message?.blocks.find((block) => block._tag === 'proposal');
|
|
@@ -153,7 +160,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
153
160
|
);
|
|
154
161
|
|
|
155
162
|
return (
|
|
156
|
-
<StackItem.Content toolbar
|
|
163
|
+
<StackItem.Content toolbar>
|
|
157
164
|
<Tabs.Root
|
|
158
165
|
value={showResolvedThreads ? 'all' : 'unresolved'}
|
|
159
166
|
orientation='horizontal'
|
|
@@ -163,7 +170,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
163
170
|
onValueChange={onChangeViewState}
|
|
164
171
|
>
|
|
165
172
|
{/* TODO(burdon): Standardize (like Tollbar). */}
|
|
166
|
-
<Tabs.Tablist classNames={mx('bg-toolbarSurface border-
|
|
173
|
+
<Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
|
|
167
174
|
<Tabs.Tab value='unresolved' classNames='text-sm'>
|
|
168
175
|
{t('show unresolved label')}
|
|
169
176
|
</Tabs.Tab>
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { ControlPage } from '@dxos/react-ui-form';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
import { meta } from '../meta';
|
|
11
11
|
import type { ThreadSettingsProps } from '../types';
|
|
12
12
|
|
|
13
|
-
export const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
+
const { t: _t } = useTranslation(meta.id);
|
|
16
15
|
return <ControlPage></ControlPage>;
|
|
17
16
|
};
|
package/src/components/index.ts
CHANGED
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import { lazy } from 'react';
|
|
6
6
|
|
|
7
|
-
export const ChannelContainer = lazy(() => import('./ChannelContainer'));
|
|
8
|
-
export const ChatContainer = lazy(() => import('./ChatContainer'));
|
|
9
|
-
|
|
10
7
|
// TODO(wittjosiah): Suspense boundary for sidebar?
|
|
11
8
|
export * from './Call';
|
|
12
9
|
export * from './CallDebugPanel';
|
|
@@ -14,5 +11,8 @@ export * from './CallSidebar';
|
|
|
14
11
|
export * from './CommentsContainer';
|
|
15
12
|
export * from './CommentsThreadContainer';
|
|
16
13
|
export * from './MessageContainer';
|
|
17
|
-
export * from './
|
|
14
|
+
export * from './ThreadCompanion';
|
|
18
15
|
export * from './ThreadSettings';
|
|
16
|
+
|
|
17
|
+
export const ChannelContainer = lazy(() => import('./ChannelContainer'));
|
|
18
|
+
export const ChatContainer = lazy(() => import('./ChatContainer'));
|
|
@@ -6,17 +6,17 @@ import { Obj, Ref } from '@dxos/echo';
|
|
|
6
6
|
import { IdentityDid } from '@dxos/keys';
|
|
7
7
|
import { faker } from '@dxos/random';
|
|
8
8
|
import { type Identity } from '@dxos/react-client/halo';
|
|
9
|
-
import {
|
|
9
|
+
import { Message } from '@dxos/types';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { Thread } from '../types';
|
|
12
12
|
|
|
13
|
-
export const createCommentThread = (identity: Identity):
|
|
14
|
-
return
|
|
13
|
+
export const createCommentThread = (identity: Identity): Thread.Thread => {
|
|
14
|
+
return Thread.make({
|
|
15
15
|
name: 'Comment',
|
|
16
16
|
messages: faker.helpers.multiple(
|
|
17
17
|
() =>
|
|
18
18
|
Ref.make(
|
|
19
|
-
Obj.make(
|
|
19
|
+
Obj.make(Message.Message, {
|
|
20
20
|
created: new Date().toISOString(),
|
|
21
21
|
sender: {
|
|
22
22
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
@@ -30,13 +30,13 @@ export const createCommentThread = (identity: Identity): ThreadType => {
|
|
|
30
30
|
});
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
-
export const createProposalThread = (identity: Identity):
|
|
34
|
-
return
|
|
33
|
+
export const createProposalThread = (identity: Identity): Thread.Thread => {
|
|
34
|
+
return Thread.make({
|
|
35
35
|
name: 'Proposal',
|
|
36
36
|
messages: faker.helpers.multiple(
|
|
37
37
|
() =>
|
|
38
38
|
Ref.make(
|
|
39
|
-
Obj.make(
|
|
39
|
+
Obj.make(Message.Message, {
|
|
40
40
|
created: new Date().toISOString(),
|
|
41
41
|
sender: {
|
|
42
42
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
@@ -9,11 +9,11 @@ import { computed, effect } from '@preact/signals-core';
|
|
|
9
9
|
import { type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
|
|
10
10
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
11
11
|
import { type Markdown } from '@dxos/plugin-markdown/types';
|
|
12
|
-
import { createDocAccessor,
|
|
12
|
+
import { createDocAccessor, getSource, getSpace, getTextInRange } from '@dxos/react-client/echo';
|
|
13
13
|
import { comments, createExternalCommentSync } from '@dxos/react-ui-editor';
|
|
14
|
-
import { AnchoredTo } from '@dxos/
|
|
14
|
+
import { AnchoredTo } from '@dxos/types';
|
|
15
15
|
|
|
16
|
-
import { ThreadAction, type ThreadState
|
|
16
|
+
import { Thread, ThreadAction, type ThreadState } from '../types';
|
|
17
17
|
|
|
18
18
|
// TODO(burdon): Factor out.
|
|
19
19
|
const getName = (doc: Markdown.Document, anchor: string): string | undefined => {
|
|
@@ -34,16 +34,16 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
|
|
|
34
34
|
return [comments()];
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));
|
|
37
|
+
const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo.AnchoredTo));
|
|
38
38
|
const unsubscribe = query.subscribe();
|
|
39
39
|
|
|
40
40
|
const anchors = computed(() =>
|
|
41
41
|
query.objects
|
|
42
42
|
.filter((anchor) => {
|
|
43
43
|
const thread = Relation.getSource(anchor);
|
|
44
|
-
return Obj.instanceOf(
|
|
44
|
+
return Obj.instanceOf(Thread.Thread, thread) && thread.status !== 'resolved';
|
|
45
45
|
})
|
|
46
|
-
.concat(state.drafts[
|
|
46
|
+
.concat(state.drafts[Obj.getDXN(doc).toString()] ?? []),
|
|
47
47
|
);
|
|
48
48
|
|
|
49
49
|
return [
|
|
@@ -60,7 +60,7 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
|
|
|
60
60
|
// Only update if the name has changed, otherwise this will cause an infinite loop.
|
|
61
61
|
// Skip if the name is empty; this means comment text was deleted, but thread name should remain.
|
|
62
62
|
const name = getName(doc, anchor.anchor);
|
|
63
|
-
const thread = Relation.getSource(anchor) as
|
|
63
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
64
64
|
if (name && name !== thread.name) {
|
|
65
65
|
thread.name = name;
|
|
66
66
|
}
|
|
@@ -70,24 +70,33 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
|
|
|
70
70
|
}),
|
|
71
71
|
|
|
72
72
|
createExternalCommentSync(
|
|
73
|
-
|
|
73
|
+
Obj.getDXN(doc).toString(),
|
|
74
74
|
(sink) => effect(() => sink()),
|
|
75
75
|
() =>
|
|
76
76
|
anchors.value
|
|
77
77
|
.filter((anchor) => anchor.anchor)
|
|
78
|
-
.map((anchor) => ({
|
|
78
|
+
.map((anchor) => ({
|
|
79
|
+
id: Obj.getDXN(Relation.getSource(anchor)).toString(),
|
|
80
|
+
cursor: anchor.anchor,
|
|
81
|
+
})),
|
|
79
82
|
),
|
|
80
83
|
|
|
81
84
|
comments({
|
|
82
|
-
id:
|
|
85
|
+
id: Obj.getDXN(doc).toString(),
|
|
83
86
|
onCreate: ({ cursor }) => {
|
|
84
87
|
const name = getName(doc, cursor);
|
|
85
|
-
void dispatch(
|
|
88
|
+
void dispatch(
|
|
89
|
+
createIntent(ThreadAction.Create, {
|
|
90
|
+
anchor: cursor,
|
|
91
|
+
name,
|
|
92
|
+
subject: doc,
|
|
93
|
+
}),
|
|
94
|
+
);
|
|
86
95
|
},
|
|
87
96
|
onDelete: ({ id }) => {
|
|
88
|
-
const draft = state.drafts[
|
|
97
|
+
const draft = state.drafts[Obj.getDXN(doc).toString()];
|
|
89
98
|
if (draft) {
|
|
90
|
-
const index = draft.findIndex((thread) =>
|
|
99
|
+
const index = draft.findIndex((thread) => Obj.getDXN(thread).toString() === id);
|
|
91
100
|
if (index !== -1) {
|
|
92
101
|
draft.splice(index, 1);
|
|
93
102
|
}
|
|
@@ -99,9 +108,9 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
|
|
|
99
108
|
}
|
|
100
109
|
},
|
|
101
110
|
onUpdate: ({ id, cursor }) => {
|
|
102
|
-
const draft = state.drafts[
|
|
111
|
+
const draft = state.drafts[Obj.getDXN(doc).toString()]?.find((thread) => Obj.getDXN(thread).toString() === id);
|
|
103
112
|
if (draft) {
|
|
104
|
-
const thread = Relation.getSource(draft) as
|
|
113
|
+
const thread = Relation.getSource(draft) as Thread.Thread;
|
|
105
114
|
thread.name = getName(doc, cursor);
|
|
106
115
|
draft.anchor = cursor;
|
|
107
116
|
}
|
|
@@ -109,7 +118,7 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
|
|
|
109
118
|
const relation = query.objects.find((object) => getSource(object).id === id);
|
|
110
119
|
if (relation) {
|
|
111
120
|
const thread = getSource(relation);
|
|
112
|
-
if (Obj.instanceOf(
|
|
121
|
+
if (Obj.instanceOf(Thread.Thread, thread)) {
|
|
113
122
|
thread.name = getName(doc, cursor);
|
|
114
123
|
relation.anchor = cursor;
|
|
115
124
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Array from 'effect/Array';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Function from 'effect/Function';
|
|
8
|
+
import * as Schema from 'effect/Schema';
|
|
9
|
+
|
|
10
|
+
import { ArtifactId, computeDiffsWithCursors } from '@dxos/assistant';
|
|
11
|
+
import { Obj, Ref, Relation } from '@dxos/echo';
|
|
12
|
+
import { createDocAccessor } from '@dxos/echo-db';
|
|
13
|
+
import { DatabaseService, defineFunction } from '@dxos/functions';
|
|
14
|
+
import { DXN } from '@dxos/keys';
|
|
15
|
+
import { Markdown } from '@dxos/plugin-markdown/types';
|
|
16
|
+
import { AnchoredTo, Message } from '@dxos/types';
|
|
17
|
+
|
|
18
|
+
import { Thread } from '../types';
|
|
19
|
+
|
|
20
|
+
export default defineFunction({
|
|
21
|
+
key: 'dxos.org/function/thread/create-proposals',
|
|
22
|
+
name: 'Create Proposals',
|
|
23
|
+
description: 'Proposes a set of changes to a document.',
|
|
24
|
+
inputSchema: Schema.Struct({
|
|
25
|
+
id: ArtifactId,
|
|
26
|
+
diffs: Schema.Array(Schema.String).annotations({
|
|
27
|
+
description: 'The diffs to propose for the document.',
|
|
28
|
+
}),
|
|
29
|
+
}),
|
|
30
|
+
outputSchema: Schema.Void,
|
|
31
|
+
handler: Effect.fn(function* ({ data: { id, diffs: _diffs } }) {
|
|
32
|
+
const object = yield* DatabaseService.resolve(DXN.parse(id), Markdown.Document);
|
|
33
|
+
const content = yield* Effect.promise(() => object.content.load());
|
|
34
|
+
const accessor = createDocAccessor(content, ['content']);
|
|
35
|
+
|
|
36
|
+
yield* Function.pipe(
|
|
37
|
+
computeDiffsWithCursors(accessor, _diffs),
|
|
38
|
+
Array.map(
|
|
39
|
+
Effect.fnUntraced(function* ({ cursor, text }) {
|
|
40
|
+
const proposal = Obj.make(Message.Message, {
|
|
41
|
+
created: new Date().toISOString(),
|
|
42
|
+
sender: { role: 'assistant' },
|
|
43
|
+
blocks: [{ _tag: 'proposal', text }],
|
|
44
|
+
});
|
|
45
|
+
const thread = Thread.make({ name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });
|
|
46
|
+
const relation = Relation.make(AnchoredTo.AnchoredTo, {
|
|
47
|
+
[Relation.Source]: thread,
|
|
48
|
+
[Relation.Target]: object,
|
|
49
|
+
anchor: cursor,
|
|
50
|
+
});
|
|
51
|
+
yield* DatabaseService.add(thread);
|
|
52
|
+
yield* DatabaseService.add(relation);
|
|
53
|
+
}),
|
|
54
|
+
),
|
|
55
|
+
Effect.allWith({ concurrency: 'unbounded' }),
|
|
56
|
+
);
|
|
57
|
+
}),
|
|
58
|
+
});
|
package/src/hooks/analytics.ts
CHANGED
|
@@ -4,18 +4,15 @@
|
|
|
4
4
|
|
|
5
5
|
import { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { createIntent
|
|
7
|
+
import { createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useIntentDispatcher } from '@dxos/app-framework/react';
|
|
8
9
|
import { type Live } from '@dxos/live-object';
|
|
9
10
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
10
11
|
import { getSpace } from '@dxos/react-client/echo';
|
|
11
12
|
import { useOnTransition } from '@dxos/react-ui';
|
|
12
|
-
import { type
|
|
13
|
+
import { type ContentBlock } from '@dxos/types';
|
|
13
14
|
|
|
14
|
-
export const useOnEditAnalytics = (
|
|
15
|
-
message: Live<any>,
|
|
16
|
-
textBlock: DataType.MessageBlock.Text | undefined,
|
|
17
|
-
editing: boolean,
|
|
18
|
-
) => {
|
|
15
|
+
export const useOnEditAnalytics = (message: Live<any>, textBlock: ContentBlock.Text | undefined, editing: boolean) => {
|
|
19
16
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
20
17
|
|
|
21
18
|
const onEdit = useCallback(() => {
|
package/src/hooks/index.ts
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
export * from './analytics';
|
|
6
|
+
|
|
7
|
+
export * from './useBlackCanvasStreamTrack';
|
|
6
8
|
export * from './useDebugMode';
|
|
9
|
+
export * from './useInaudibleAudioStreamTrack';
|
|
7
10
|
export * from './useStatus';
|
|
8
11
|
export * from './useVideoStreamTrack';
|
|
9
|
-
export * from './useInaudibleAudioStreamTrack';
|
|
10
|
-
export * from './useBlackCanvasStreamTrack';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { type RefObject, useEffect, useRef, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
export const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement>, videoSrc: string) => {
|
|
7
|
+
export const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement | null>, videoSrc: string) => {
|
|
8
8
|
// Get video stream track.
|
|
9
9
|
const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);
|
|
10
10
|
const hadRun = useRef(false);
|
package/src/meta.ts
CHANGED
|
@@ -3,15 +3,19 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
|
-
export const THREAD_PLUGIN = 'dxos.org/plugin/thread';
|
|
8
|
-
export const THREAD_ITEM = `${THREAD_PLUGIN}/item`;
|
|
6
|
+
import { trim } from '@dxos/util';
|
|
9
7
|
|
|
10
8
|
// TODO(wittjosiah): Needs screenshots.
|
|
11
9
|
export const meta: PluginMeta = {
|
|
12
|
-
id:
|
|
10
|
+
id: 'dxos.org/plugin/thread',
|
|
13
11
|
name: 'Chat',
|
|
14
|
-
description:
|
|
12
|
+
description: trim`
|
|
13
|
+
Multi-modal communication platform supporting text chat, voice, and video conferencing.
|
|
14
|
+
Create threaded conversations and add contextual comments directly on any workspace object.
|
|
15
|
+
`,
|
|
15
16
|
icon: 'ph--video-conference--regular',
|
|
17
|
+
iconHue: 'rose',
|
|
16
18
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',
|
|
17
19
|
};
|
|
20
|
+
|
|
21
|
+
export const THREAD_ITEM = `${meta.id}/item`;
|
package/src/testing/stories.ts
CHANGED
|
@@ -3,17 +3,15 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
|
|
6
|
-
import { Obj } from '@dxos/echo';
|
|
7
6
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
8
7
|
import { GraphPlugin } from '@dxos/plugin-graph';
|
|
9
8
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
10
9
|
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
11
10
|
import { Config } from '@dxos/react-client';
|
|
12
|
-
import { Ref } from '@dxos/react-client/echo';
|
|
13
11
|
import { defaultTx } from '@dxos/react-ui-theme';
|
|
14
12
|
|
|
15
13
|
import { ThreadPlugin } from '../ThreadPlugin';
|
|
16
|
-
import {
|
|
14
|
+
import { Channel } from '../types';
|
|
17
15
|
|
|
18
16
|
export const createThreadPlugins = async () => [
|
|
19
17
|
ThemePlugin({ tx: defaultTx }),
|
|
@@ -23,8 +21,7 @@ export const createThreadPlugins = async () => [
|
|
|
23
21
|
},
|
|
24
22
|
onSpacesReady: async ({ client }) => {
|
|
25
23
|
await client.spaces.default.waitUntilReady();
|
|
26
|
-
|
|
27
|
-
client.spaces.default.db.add(Obj.make(ChannelType, { defaultThread: Ref.make(thread), threads: [] }));
|
|
24
|
+
client.spaces.default.db.add(Channel.make());
|
|
28
25
|
},
|
|
29
26
|
config: new Config({
|
|
30
27
|
runtime: {
|
|
@@ -46,7 +43,7 @@ export const createThreadPlugins = async () => [
|
|
|
46
43
|
},
|
|
47
44
|
}),
|
|
48
45
|
}),
|
|
49
|
-
SpacePlugin(),
|
|
46
|
+
SpacePlugin({}),
|
|
50
47
|
IntentPlugin(),
|
|
51
48
|
SettingsPlugin(),
|
|
52
49
|
GraphPlugin(),
|
package/src/translations.ts
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Type } from '@dxos/echo';
|
|
5
6
|
import { type Resource } from '@dxos/react-ui';
|
|
6
7
|
|
|
7
8
|
import { meta } from './meta';
|
|
8
|
-
import {
|
|
9
|
+
import { Channel } from './types';
|
|
9
10
|
|
|
10
11
|
export const translations = [
|
|
11
12
|
{
|
|
12
13
|
'en-US': {
|
|
13
|
-
[
|
|
14
|
+
[Type.getTypename(Channel.Channel)]: {
|
|
14
15
|
'typename label': 'Channel',
|
|
15
16
|
'typename label_zero': 'Channels',
|
|
16
17
|
'typename label_one': 'Channel',
|
|
@@ -59,9 +60,10 @@ export const translations = [
|
|
|
59
60
|
'set display name label': 'Continue',
|
|
60
61
|
|
|
61
62
|
'call tab label': 'Call',
|
|
62
|
-
'meeting status title': '
|
|
63
|
+
'meeting status title': 'Calls',
|
|
63
64
|
'share meeting link label': 'Share meeting',
|
|
64
|
-
'show webrtc stats title': '
|
|
65
|
+
'show webrtc stats title': 'WebRTC Stats',
|
|
66
|
+
'show calls history title': 'Service History',
|
|
65
67
|
|
|
66
68
|
'meeting summary label': 'Summary',
|
|
67
69
|
'summarize label': 'Summarize',
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
|
|
7
|
+
import { Obj, Ref, Type } from '@dxos/echo';
|
|
8
|
+
import { FormAnnotation } from '@dxos/echo/internal';
|
|
9
|
+
|
|
10
|
+
import * as Thread from './Thread';
|
|
11
|
+
|
|
12
|
+
const _Channel = Schema.Struct({
|
|
13
|
+
name: Schema.optional(Schema.String),
|
|
14
|
+
defaultThread: Type.Ref(Thread.Thread).pipe(FormAnnotation.set(false)),
|
|
15
|
+
// TODO(wittjosiah): Should be an "ordered collection".
|
|
16
|
+
threads: Type.Ref(Thread.Thread).pipe(Schema.Array, Schema.mutable, FormAnnotation.set(false)),
|
|
17
|
+
}).pipe(Type.Obj({ typename: 'dxos.org/type/Channel', version: '0.1.0' }));
|
|
18
|
+
export interface Channel extends Schema.Schema.Type<typeof _Channel> {}
|
|
19
|
+
export interface ChannelEncoded extends Schema.Schema.Encoded<typeof _Channel> {}
|
|
20
|
+
export const Channel: Schema.Schema<Channel, ChannelEncoded> = _Channel;
|
|
21
|
+
|
|
22
|
+
export const make = (props: Pick<Obj.MakeProps<typeof Channel>, 'name'> = {}) =>
|
|
23
|
+
Obj.make(Channel, {
|
|
24
|
+
...props,
|
|
25
|
+
defaultThread: Ref.make(Obj.make(Thread.Thread, { messages: [], status: 'active' })),
|
|
26
|
+
threads: [],
|
|
27
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
|
|
7
|
+
import { Obj, Type } from '@dxos/echo';
|
|
8
|
+
import { Message } from '@dxos/types';
|
|
9
|
+
|
|
10
|
+
export const ThreadStatus = Schema.Union(
|
|
11
|
+
Schema.Literal('staged'),
|
|
12
|
+
Schema.Literal('active'),
|
|
13
|
+
Schema.Literal('resolved'),
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
const _Thread = Schema.Struct({
|
|
17
|
+
name: Schema.String.pipe(Schema.optional),
|
|
18
|
+
status: ThreadStatus.pipe(Schema.optional),
|
|
19
|
+
messages: Schema.mutable(Schema.Array(Type.Ref(Message.Message))),
|
|
20
|
+
}).pipe(Type.Obj({ typename: 'dxos.org/type/Thread', version: '0.1.0' }));
|
|
21
|
+
export interface Thread extends Schema.Schema.Type<typeof _Thread> {}
|
|
22
|
+
export interface ThreadEncoded extends Schema.Schema.Encoded<typeof _Thread> {}
|
|
23
|
+
export const Thread: Schema.Schema<Thread, ThreadEncoded> = _Thread;
|
|
24
|
+
|
|
25
|
+
export const make = ({ status = 'staged', messages = [], ...props }: Partial<Obj.MakeProps<typeof Thread>> = {}) =>
|
|
26
|
+
Obj.make(Thread, { status, messages, ...props });
|