@dxos/plugin-thread 0.8.4-main.67995b8 → 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-N7BE5TYW.mjs → app-graph-builder-HNYLII5E.mjs} +32 -33
- 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-NIPDYUVD.mjs → call-manager-MAXQLMMS.mjs} +7 -7
- package/dist/lib/browser/call-manager-MAXQLMMS.mjs.map +7 -0
- package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
- package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
- package/dist/lib/browser/chunk-BQWQFTWT.mjs +612 -0
- 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-FR6MEAZI.mjs +377 -0
- package/dist/lib/browser/chunk-FR6MEAZI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-INQVAYPN.mjs} +251 -246
- package/dist/lib/browser/chunk-INQVAYPN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-ISCHODBV.mjs} +55 -5
- 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-ERWASUQK.mjs → chunk-KOBXMDCI.mjs} +74 -41
- 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-ZE7KWN36.mjs → chunk-ZCW3NSDZ.mjs} +310 -186
- package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +48 -38
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-BOUT4WGY.mjs} +33 -41
- package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs.map +7 -0
- package/dist/lib/browser/{markdown-M3FMR7OD.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-XWS6GIZY.mjs → react-surface-BCD5ODQ6.mjs} +37 -36
- package/dist/lib/browser/react-surface-BCD5ODQ6.mjs.map +7 -0
- package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-LGQUZITB.mjs} +5 -5
- package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-LGQUZITB.mjs.map} +1 -1
- package/dist/lib/browser/{state-H6CYONWE.mjs → state-36REWXO5.mjs} +5 -5
- package/dist/lib/browser/state-36REWXO5.mjs.map +7 -0
- 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-IQUWU426.mjs → ChatContainer-C526R4DI.mjs} +6 -6
- package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-SOCKP4ST.mjs} +32 -33
- 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-D6O5ZJJ4.mjs → call-manager-LC4OS2KD.mjs} +7 -7
- package/dist/lib/node-esm/call-manager-LC4OS2KD.mjs.map +7 -0
- 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-IHDNQLLR.mjs → chunk-7KZWZS2U.mjs} +310 -186
- 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-C3XFMUAY.mjs → chunk-JF7THR7F.mjs} +251 -246
- package/dist/lib/node-esm/chunk-JF7THR7F.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-JJW6YMLC.mjs +613 -0
- package/dist/lib/node-esm/chunk-JJW6YMLC.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-PZH2EDU5.mjs} +74 -41
- 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-TWKGDFCS.mjs +378 -0
- package/dist/lib/node-esm/chunk-TWKGDFCS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-VBI32FGI.mjs} +55 -5
- 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 +48 -38
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-45PLIFCJ.mjs} +33 -41
- package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-INKTE4MH.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-MJ33KPYE.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-SJ24YG7M.mjs → settings-WKLJSP6R.mjs} +5 -5
- package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-WKLJSP6R.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-X3W67GTL.mjs} +5 -5
- package/dist/lib/node-esm/state-X3W67GTL.mjs.map +7 -0
- 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/call-manager.d.ts.map +1 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts +1 -1
- package/dist/types/src/calls/media-manager.d.ts.map +1 -1
- package/dist/types/src/calls/types.d.ts +1 -1
- package/dist/types/src/calls/types.d.ts.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +4 -2
- 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 +10 -9
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +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/call-manager.d.ts +1 -1
- package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +3 -3
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +11 -10
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/Call/Call.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/CallSidebar.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 +155 -5
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +158 -5
- 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 +156 -4
- 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 +9 -9
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Lobby/Lobby.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 +18 -4
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +6 -3
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +155 -3
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +157 -4
- 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/command-extension.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 -2
- 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 -1
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
- 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 +75 -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/Thread.d.ts +167 -0
- 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 +207 -208
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +69 -63
- package/src/ThreadPlugin.tsx +141 -127
- package/src/calls/call-manager.ts +2 -2
- package/src/calls/call-swarm-synchronizer.ts +1 -1
- package/src/calls/media-manager.ts +66 -37
- package/src/calls/types.ts +8 -4
- package/src/calls/util/calls-service.ts +65 -14
- package/src/calls/util/stub-media-streams.ts +64 -7
- package/src/calls-service.stories.tsx +78 -65
- package/src/capabilities/app-graph-builder.ts +47 -33
- package/src/capabilities/blueprint-definition.ts +38 -0
- package/src/capabilities/call-manager.ts +3 -2
- package/src/capabilities/capabilities.ts +8 -8
- package/src/capabilities/index.ts +1 -0
- package/src/capabilities/intent-resolver.ts +25 -28
- package/src/capabilities/markdown.ts +9 -6
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +28 -26
- package/src/capabilities/state.ts +2 -1
- package/src/components/Call/Call.tsx +4 -3
- package/src/components/Call/Toolbar.tsx +10 -10
- package/src/components/CallDebugPanel.tsx +112 -55
- package/src/components/CallSidebar.tsx +3 -2
- package/src/components/ChannelContainer.stories.tsx +15 -14
- package/src/components/ChannelContainer.tsx +25 -20
- package/src/components/Chat.stories.tsx +33 -36
- package/src/components/ChatContainer.tsx +36 -23
- package/src/components/Comments.stories.tsx +40 -41
- package/src/components/CommentsContainer.tsx +8 -8
- package/src/components/CommentsThreadContainer.tsx +40 -33
- package/src/components/Lobby/Lobby.tsx +2 -2
- package/src/components/Media/VideoObject.stories.tsx +36 -28
- package/src/components/Media/VideoObject.tsx +1 -1
- package/src/components/MessageContainer.tsx +48 -14
- package/src/components/Participant/Participant.tsx +14 -8
- package/src/components/Participant/ParticipantGrid.tsx +2 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +8 -8
- package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +45 -43
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +7 -4
- package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +72 -35
- package/src/components/ThreadSettings.tsx +6 -7
- package/src/components/command-extension.ts +5 -2
- package/src/components/index.ts +4 -4
- package/src/components/testing.ts +27 -5
- package/src/extensions/threads.ts +26 -17
- 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 -1
- package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
- package/src/hooks/useDebugMode.ts +1 -1
- package/src/hooks/useVideoStreamTrack.tsx +6 -3
- package/src/meta.ts +9 -5
- package/src/testing/stories.ts +5 -8
- package/src/translations.ts +7 -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 +29 -28
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/typings.d.ts +8 -0
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-3GIE7ASU.mjs +0 -16
- package/dist/lib/browser/ChatContainer-AIGIWAUG.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
- package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
- package/dist/lib/browser/chunk-3SGRT4NM.mjs +0 -367
- package/dist/lib/browser/chunk-3SGRT4NM.mjs.map +0 -7
- package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERWASUQK.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-FR7KJPNY.mjs +0 -21
- package/dist/lib/browser/chunk-FR7KJPNY.mjs.map +0 -7
- package/dist/lib/browser/chunk-GCLD5ESP.mjs +0 -137
- package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
- package/dist/lib/browser/chunk-LGSDKXPF.mjs +0 -18
- package/dist/lib/browser/chunk-LGSDKXPF.mjs.map +0 -7
- package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
- package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
- package/dist/lib/browser/markdown-M3FMR7OD.mjs.map +0 -7
- package/dist/lib/browser/react-root-JEUSQXI6.mjs +0 -28
- package/dist/lib/browser/react-root-JEUSQXI6.mjs.map +0 -7
- package/dist/lib/browser/react-surface-XWS6GIZY.mjs.map +0 -7
- package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-7FXCKO7X.mjs +0 -17
- package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-25ABSYP2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2CXOK2TD.mjs +0 -23
- package/dist/lib/node-esm/chunk-2CXOK2TD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
- package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-75RJ5DJI.mjs +0 -19
- package/dist/lib/node-esm/chunk-75RJ5DJI.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FLBFYGBK.mjs +0 -368
- package/dist/lib/node-esm/chunk-FLBFYGBK.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-IHDNQLLR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs +0 -138
- package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-INKTE4MH.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs +0 -29
- package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-MJ33KPYE.mjs.map +0 -7
- package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
- 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 -162
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/types/schema.ts +0 -33
- /package/dist/lib/browser/{ChannelContainer-3GIE7ASU.mjs.map → ChannelContainer-MX5ABVGC.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-7F5Y6GXJ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-7FXCKO7X.mjs.map → ChannelContainer-2JJJ3IDK.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-C526R4DI.mjs.map} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, { type ComponentType, type FC,
|
|
5
|
+
import React, { type ComponentType, type FC, useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';
|
|
6
6
|
import { useResizeDetector } from 'react-resize-detector';
|
|
7
7
|
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
@@ -18,7 +18,7 @@ const MIN_GALLERY_HEIGHT = 250;
|
|
|
18
18
|
|
|
19
19
|
const DEFAULT_GAP = 8;
|
|
20
20
|
|
|
21
|
-
const maxImageSize = '
|
|
21
|
+
const maxImageSize = 'is-[2560px] bs-[1440px]';
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Props for the ResponsiveGrid component.
|
|
@@ -136,13 +136,13 @@ export const ResponsiveGrid = <T extends object = any>({
|
|
|
136
136
|
);
|
|
137
137
|
|
|
138
138
|
return (
|
|
139
|
-
<div ref={containerRef} className={mx('relative
|
|
139
|
+
<div ref={containerRef} className={mx('relative is-full bs-full', classNames)}>
|
|
140
140
|
{/* Placeholder elements to calculate layout. */}
|
|
141
141
|
<div className='absolute inset-0 flex flex-col grow gap-2'>
|
|
142
142
|
{/* Pinned item. */}
|
|
143
143
|
{pinnedItem && (
|
|
144
144
|
<div
|
|
145
|
-
className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && '
|
|
145
|
+
className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'bs-full')}
|
|
146
146
|
style={hideGallery ? {} : { height: dividerHeight }}
|
|
147
147
|
>
|
|
148
148
|
<SoloItem id={getId(pinnedItem)} debug={debug} />
|
|
@@ -157,7 +157,7 @@ export const ResponsiveGrid = <T extends object = any>({
|
|
|
157
157
|
style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}
|
|
158
158
|
>
|
|
159
159
|
{mainItems.length === 1 && (
|
|
160
|
-
<div style={{ width: cellWidth }} className='flex
|
|
160
|
+
<div style={{ width: cellWidth }} className='flex bs-full'>
|
|
161
161
|
<SoloItem id={getId(mainItems[0])} debug={debug} />
|
|
162
162
|
</div>
|
|
163
163
|
)}
|
|
@@ -176,7 +176,7 @@ export const ResponsiveGrid = <T extends object = any>({
|
|
|
176
176
|
key={getId(item)}
|
|
177
177
|
{...{ 'data-grid-item': getId(item) }}
|
|
178
178
|
className={mx(
|
|
179
|
-
'aspect-video max-
|
|
179
|
+
'aspect-video max-bs-full max-is-full is-auto bs-auto',
|
|
180
180
|
debug && 'border border-primary-500',
|
|
181
181
|
)}
|
|
182
182
|
/>
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, {
|
|
5
|
+
import React, { type CSSProperties, type PropsWithChildren, useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import { Icon, IconButton,
|
|
7
|
+
import { Icon, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { Waveform } from '@dxos/react-ui-sfx';
|
|
9
9
|
import { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';
|
|
10
10
|
|
|
@@ -76,7 +76,7 @@ export const ResponsiveGridItem = <T extends object = any>({
|
|
|
76
76
|
return (
|
|
77
77
|
<div
|
|
78
78
|
className={mx(
|
|
79
|
-
'relative
|
|
79
|
+
'relative is-full bs-full group',
|
|
80
80
|
'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',
|
|
81
81
|
speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',
|
|
82
82
|
classNames,
|
|
@@ -106,7 +106,10 @@ export const ResponsiveGridItem = <T extends object = any>({
|
|
|
106
106
|
{/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}
|
|
107
107
|
{screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
|
|
108
108
|
<div
|
|
109
|
-
className={mx(
|
|
109
|
+
className={mx(
|
|
110
|
+
'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',
|
|
111
|
+
pinned ? 'pli-2' : 'pli-1 text-xs',
|
|
112
|
+
)}
|
|
110
113
|
>
|
|
111
114
|
{name}
|
|
112
115
|
</div>
|
|
@@ -4,34 +4,28 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
LayoutAction,
|
|
10
|
-
createIntent,
|
|
11
|
-
useCapability,
|
|
12
|
-
useCapabilities,
|
|
13
|
-
useIntentDispatcher,
|
|
14
|
-
} from '@dxos/app-framework';
|
|
7
|
+
import { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
|
|
15
9
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
16
|
-
import {
|
|
10
|
+
import { Ref, getSpace, useQuery } from '@dxos/react-client/echo';
|
|
17
11
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
18
|
-
import {
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
19
13
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
20
14
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
21
15
|
import { Tabs } from '@dxos/react-ui-tabs';
|
|
22
|
-
import {
|
|
16
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
17
|
+
import { AnchoredTo } from '@dxos/types';
|
|
23
18
|
|
|
24
19
|
import { ThreadCapabilities } from '../capabilities';
|
|
25
|
-
import { CommentsContainer } from '../components';
|
|
20
|
+
import { CommentsContainer, type CommentsContainerProps } from '../components';
|
|
26
21
|
import { meta } from '../meta';
|
|
27
|
-
import {
|
|
22
|
+
import { Thread, ThreadAction } from '../types';
|
|
28
23
|
|
|
29
|
-
export const
|
|
24
|
+
export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
30
25
|
const { t } = useTranslation(meta.id);
|
|
31
26
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
32
27
|
const identity = useIdentity();
|
|
33
|
-
const
|
|
34
|
-
const subjectId = fullyQualifiedId(subject);
|
|
28
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
35
29
|
|
|
36
30
|
const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
|
|
37
31
|
const drafts = state.drafts[subjectId];
|
|
@@ -51,18 +45,18 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
51
45
|
);
|
|
52
46
|
|
|
53
47
|
const space = getSpace(subject);
|
|
54
|
-
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));
|
|
55
49
|
const anchors = objectsAnchoredTo
|
|
56
50
|
.toSorted((a, b) => sort?.(a, b) ?? 0)
|
|
57
|
-
.filter((anchor) => Obj.instanceOf(
|
|
51
|
+
.filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
|
|
58
52
|
.concat(drafts ?? []);
|
|
59
53
|
|
|
60
54
|
const attended = useAttended();
|
|
61
55
|
|
|
62
56
|
const handleAttend = useCallback(
|
|
63
|
-
(anchor: AnchoredTo) => {
|
|
64
|
-
const thread = Relation.getSource(anchor) as
|
|
65
|
-
const threadId =
|
|
57
|
+
(anchor: AnchoredTo.AnchoredTo) => {
|
|
58
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
59
|
+
const threadId = Obj.getDXN(thread).toString();
|
|
66
60
|
|
|
67
61
|
if (state.current !== threadId) {
|
|
68
62
|
state.current = threadId;
|
|
@@ -73,7 +67,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
73
67
|
void dispatch(
|
|
74
68
|
createIntent(LayoutAction.ScrollIntoView, {
|
|
75
69
|
part: 'current',
|
|
76
|
-
subject:
|
|
70
|
+
subject: Obj.getDXN(subject).toString(),
|
|
77
71
|
options: {
|
|
78
72
|
cursor: anchor.anchor,
|
|
79
73
|
ref: threadId,
|
|
@@ -86,31 +80,68 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
86
80
|
);
|
|
87
81
|
|
|
88
82
|
const handleComment = useCallback(
|
|
89
|
-
async (anchor: AnchoredTo, text: string) => {
|
|
83
|
+
async (anchor: AnchoredTo.AnchoredTo, text: string) => {
|
|
90
84
|
await dispatch(
|
|
91
|
-
createIntent(ThreadAction.AddMessage, {
|
|
85
|
+
createIntent(ThreadAction.AddMessage, {
|
|
86
|
+
anchor,
|
|
87
|
+
subject,
|
|
88
|
+
sender: { identityDid: identity?.did },
|
|
89
|
+
text,
|
|
90
|
+
}),
|
|
92
91
|
);
|
|
93
92
|
|
|
94
|
-
const thread = Relation.getSource(anchor) as
|
|
95
|
-
state.current =
|
|
93
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
94
|
+
state.current = Obj.getDXN(thread).toString();
|
|
96
95
|
},
|
|
97
96
|
[dispatch, identity, subject],
|
|
98
97
|
);
|
|
99
98
|
|
|
100
99
|
const handleResolve = useCallback(
|
|
101
|
-
(anchor: AnchoredTo) =>
|
|
102
|
-
dispatch(
|
|
100
|
+
(anchor: AnchoredTo.AnchoredTo) =>
|
|
101
|
+
dispatch(
|
|
102
|
+
createIntent(ThreadAction.ToggleResolved, {
|
|
103
|
+
thread: Relation.getSource(anchor) as Thread.Thread,
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
103
106
|
[dispatch],
|
|
104
107
|
);
|
|
105
108
|
|
|
106
109
|
const handleThreadDelete = useCallback(
|
|
107
|
-
(anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
110
|
+
(anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
108
111
|
[dispatch, subject],
|
|
109
112
|
);
|
|
110
113
|
|
|
111
114
|
const handleMessageDelete = useCallback(
|
|
112
|
-
(anchor: AnchoredTo, messageId: string) =>
|
|
113
|
-
dispatch(
|
|
115
|
+
(anchor: AnchoredTo.AnchoredTo, messageId: string) =>
|
|
116
|
+
dispatch(
|
|
117
|
+
createIntent(ThreadAction.DeleteMessage, {
|
|
118
|
+
anchor,
|
|
119
|
+
subject,
|
|
120
|
+
messageId,
|
|
121
|
+
}),
|
|
122
|
+
),
|
|
123
|
+
[dispatch, subject],
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
|
|
127
|
+
async (anchor, messageId) => {
|
|
128
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
129
|
+
const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
|
|
130
|
+
const message = thread.messages[messageIndex]?.target;
|
|
131
|
+
const proposal = message?.blocks.find((block) => block._tag === 'proposal');
|
|
132
|
+
if (!proposal || !anchor.anchor) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
await dispatch(
|
|
137
|
+
createIntent(CollaborationActions.AcceptProposal, {
|
|
138
|
+
subject,
|
|
139
|
+
anchor: anchor.anchor,
|
|
140
|
+
proposal,
|
|
141
|
+
}),
|
|
142
|
+
);
|
|
143
|
+
await dispatch(createIntent(ThreadAction.ToggleResolved, { thread }));
|
|
144
|
+
},
|
|
114
145
|
[dispatch, subject],
|
|
115
146
|
);
|
|
116
147
|
|
|
@@ -124,6 +155,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
124
155
|
onResolve={handleResolve}
|
|
125
156
|
onMessageDelete={handleMessageDelete}
|
|
126
157
|
onThreadDelete={handleThreadDelete}
|
|
158
|
+
onAcceptProposal={handleAcceptProposal}
|
|
127
159
|
/>
|
|
128
160
|
);
|
|
129
161
|
|
|
@@ -132,10 +164,13 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
132
164
|
<Tabs.Root
|
|
133
165
|
value={showResolvedThreads ? 'all' : 'unresolved'}
|
|
134
166
|
orientation='horizontal'
|
|
135
|
-
classNames=
|
|
167
|
+
classNames={[
|
|
168
|
+
'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin',
|
|
169
|
+
]}
|
|
136
170
|
onValueChange={onChangeViewState}
|
|
137
171
|
>
|
|
138
|
-
|
|
172
|
+
{/* TODO(burdon): Standardize (like Tollbar). */}
|
|
173
|
+
<Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
|
|
139
174
|
<Tabs.Tab value='unresolved' classNames='text-sm'>
|
|
140
175
|
{t('show unresolved label')}
|
|
141
176
|
</Tabs.Tab>
|
|
@@ -143,8 +178,10 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
143
178
|
{t('show all label')}
|
|
144
179
|
</Tabs.Tab>
|
|
145
180
|
</Tabs.Tablist>
|
|
146
|
-
<
|
|
147
|
-
|
|
181
|
+
<div className='overflow-y-auto'>
|
|
182
|
+
<Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
|
|
183
|
+
<Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
|
|
184
|
+
</div>
|
|
148
185
|
</Tabs.Root>
|
|
149
186
|
</StackItem.Content>
|
|
150
187
|
);
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
import {
|
|
7
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
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
|
-
|
|
16
|
-
return <DeprecatedFormContainer></DeprecatedFormContainer>;
|
|
13
|
+
export const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
+
const { t: _t } = useTranslation(meta.id);
|
|
15
|
+
return <ControlPage></ControlPage>;
|
|
17
16
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';
|
|
6
6
|
import { type Extension } from '@codemirror/state';
|
|
7
7
|
|
|
8
8
|
import { tags } from '@dxos/react-ui-editor';
|
|
@@ -27,7 +27,10 @@ const parser = StreamLanguage.define<{ count: number }>({
|
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
const styles = HighlightStyle.define([
|
|
30
|
-
{
|
|
30
|
+
{
|
|
31
|
+
tag: tags.tagName,
|
|
32
|
+
class: mx('dx-tag dx-tag--indigo text-baseText font-medium'),
|
|
33
|
+
},
|
|
31
34
|
]);
|
|
32
35
|
|
|
33
36
|
export const command: Extension = [parser, syntaxHighlighting(styles)];
|
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,16 +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
|
+
name: 'Comment',
|
|
15
16
|
messages: faker.helpers.multiple(
|
|
16
17
|
() =>
|
|
17
18
|
Ref.make(
|
|
18
|
-
Obj.make(
|
|
19
|
+
Obj.make(Message.Message, {
|
|
19
20
|
created: new Date().toISOString(),
|
|
20
21
|
sender: {
|
|
21
22
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
@@ -25,5 +26,26 @@ export const createCommentThread = (identity: Identity): ThreadType => {
|
|
|
25
26
|
),
|
|
26
27
|
{ count: { min: 2, max: 3 } },
|
|
27
28
|
),
|
|
29
|
+
status: 'active',
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const createProposalThread = (identity: Identity): Thread.Thread => {
|
|
34
|
+
return Thread.make({
|
|
35
|
+
name: 'Proposal',
|
|
36
|
+
messages: faker.helpers.multiple(
|
|
37
|
+
() =>
|
|
38
|
+
Ref.make(
|
|
39
|
+
Obj.make(Message.Message, {
|
|
40
|
+
created: new Date().toISOString(),
|
|
41
|
+
sender: {
|
|
42
|
+
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
43
|
+
},
|
|
44
|
+
blocks: [{ _tag: 'proposal', text: faker.lorem.sentences(3) }],
|
|
45
|
+
}),
|
|
46
|
+
),
|
|
47
|
+
{ count: { min: 1, max: 1 } },
|
|
48
|
+
),
|
|
49
|
+
status: 'active',
|
|
28
50
|
});
|
|
29
51
|
};
|
|
@@ -6,14 +6,14 @@ import { type Extension } from '@codemirror/state';
|
|
|
6
6
|
import { EditorView } from '@codemirror/view';
|
|
7
7
|
import { computed, effect } from '@preact/signals-core';
|
|
8
8
|
|
|
9
|
-
import {
|
|
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 {
|
|
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 {
|
|
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,7 +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';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { scheduleTask } from '@dxos/async';
|
|
8
|
+
import { Context } from '@dxos/context';
|
|
9
|
+
|
|
10
|
+
import { createBlackCanvasStreamTrack } from '../calls/util/stub-media-streams';
|
|
11
|
+
|
|
12
|
+
export const useBlackCanvasStreamTrack = () => {
|
|
13
|
+
const [blackCanvasStreamTrack, setBlackCanvasStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const ctx = new Context();
|
|
16
|
+
scheduleTask(ctx, async () => {
|
|
17
|
+
const blackCanvasStreamTrack = await createBlackCanvasStreamTrack({ ctx, width: 720, height: 480 });
|
|
18
|
+
setBlackCanvasStreamTrack(blackCanvasStreamTrack);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
return () => {
|
|
22
|
+
void ctx.dispose();
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
25
|
+
|
|
26
|
+
return blackCanvasStreamTrack;
|
|
27
|
+
};
|