@dxos/plugin-thread 0.8.4-main.2e9d522 → 0.8.4-main.548089c
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-56QROCE4.mjs +16 -0
- package/dist/lib/browser/ChatContainer-7F5Y6GXJ.mjs +15 -0
- package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-USFBLGFG.mjs} +30 -31
- package/dist/lib/browser/app-graph-builder-USFBLGFG.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-KWPRNHTK.mjs → chunk-44S2SB4N.mjs} +250 -245
- package/dist/lib/browser/chunk-44S2SB4N.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-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-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-NSREO7OX.mjs +23 -0
- package/dist/lib/browser/chunk-NSREO7OX.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/chunk-ZO5ZGDN5.mjs +617 -0
- package/dist/lib/browser/chunk-ZO5ZGDN5.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +47 -37
- 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-GEXBVJYN.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-2VRIT2HF.mjs +28 -0
- package/dist/lib/browser/react-root-2VRIT2HF.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-UOECBYHE.mjs} +29 -28
- package/dist/lib/browser/react-surface-UOECBYHE.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-4SV22AKC.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-DWYGNENL.mjs} +30 -31
- package/dist/lib/node-esm/app-graph-builder-DWYGNENL.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-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-KE6SKBPO.mjs +618 -0
- package/dist/lib/node-esm/chunk-KE6SKBPO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-NEGIPZTJ.mjs} +250 -245
- package/dist/lib/node-esm/chunk-NEGIPZTJ.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-VM6WD3YY.mjs +25 -0
- package/dist/lib/node-esm/chunk-VM6WD3YY.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 +47 -37
- 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-LIJZDK2J.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-JAE2VI2D.mjs +29 -0
- package/dist/lib/node-esm/react-root-JAE2VI2D.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-BYKXK5YA.mjs} +29 -28
- package/dist/lib/node-esm/react-surface-BYKXK5YA.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/ThreadComplementary.d.ts.map +1 -1
- 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 +1 -1
- 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 +2 -2
- 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 +74 -6
- 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 +67 -59
- 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 +45 -31
- 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 +21 -19
- 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 +108 -49
- 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 +5 -5
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +7 -4
- package/src/components/ThreadComplementary.tsx +71 -34
- package/src/components/ThreadSettings.tsx +6 -7
- package/src/components/command-extension.ts +5 -2
- package/src/components/testing.ts +27 -5
- package/src/extensions/threads.ts +29 -20
- 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 +6 -3
- 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-IY2UIRLF.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-4OYAYON2.mjs +0 -21
- package/dist/lib/browser/chunk-4OYAYON2.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-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-XLPJXUKO.mjs +0 -367
- package/dist/lib/browser/chunk-XLPJXUKO.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-GEXBVJYN.mjs.map +0 -7
- package/dist/lib/browser/react-root-X4UIVGTX.mjs +0 -28
- package/dist/lib/browser/react-root-X4UIVGTX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
- package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-DET6T5N2.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-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-GRLRWTRU.mjs +0 -19
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
- package/dist/lib/node-esm/chunk-GW37AAM4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
- package/dist/lib/node-esm/chunk-J4NSON5Q.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-LIJZDK2J.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-M7J6PZVW.mjs +0 -29
- package/dist/lib/node-esm/react-root-M7J6PZVW.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
- package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
- 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-IY2UIRLF.mjs.map → ChannelContainer-56QROCE4.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-7F5Y6GXJ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-4SV22AKC.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';
|
|
@@ -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 w-auto h-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
24
|
export const ThreadComplementary = ({ 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-b 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)];
|
|
@@ -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,17 +6,17 @@ 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
|
-
import { type
|
|
12
|
-
import {
|
|
11
|
+
import { type Markdown } from '@dxos/plugin-markdown/types';
|
|
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
|
-
const getName = (doc:
|
|
19
|
+
const getName = (doc: Markdown.Document, anchor: string): string | undefined => {
|
|
20
20
|
if (doc.content) {
|
|
21
21
|
const [start, end] = anchor.split(':');
|
|
22
22
|
return getTextInRange(createDocAccessor(doc.content.target!, ['content']), start, end);
|
|
@@ -26,7 +26,7 @@ const getName = (doc: DocumentType, anchor: string): string | undefined => {
|
|
|
26
26
|
/**
|
|
27
27
|
* Construct plugins.
|
|
28
28
|
*/
|
|
29
|
-
export const threads = (state: ThreadState, doc?:
|
|
29
|
+
export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?: PromiseIntentDispatcher): Extension => {
|
|
30
30
|
const space = doc && getSpace(doc);
|
|
31
31
|
if (!doc || !space || !dispatch) {
|
|
32
32
|
// Include no-op comments extension here to ensure that the facets are always present when they are expected.
|
|
@@ -34,16 +34,16 @@ export const threads = (state: ThreadState, doc?: DocumentType, dispatch?: Promi
|
|
|
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?: DocumentType, dispatch?: Promi
|
|
|
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?: DocumentType, dispatch?: Promi
|
|
|
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?: DocumentType, dispatch?: Promi
|
|
|
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?: DocumentType, dispatch?: Promi
|
|
|
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
|
+
};
|
|
@@ -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);
|
|
@@ -15,13 +15,16 @@ export const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement>, v
|
|
|
15
15
|
}
|
|
16
16
|
hadRun.current = true;
|
|
17
17
|
videoElement.current.addEventListener('playing', () => {
|
|
18
|
+
if (videoStreamTrack) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
18
21
|
const stream = (videoElement.current as any).captureStream();
|
|
19
22
|
const track = stream.getTracks()[0];
|
|
20
|
-
if (track) {
|
|
23
|
+
if (track && !videoStreamTrack) {
|
|
21
24
|
setVideoStreamTrack(track);
|
|
22
25
|
}
|
|
23
26
|
stream.onaddtrack = (event: MediaStreamTrackEvent) => {
|
|
24
|
-
if (event.track.kind === 'video') {
|
|
27
|
+
if (event.track.kind === 'video' && !videoStreamTrack) {
|
|
25
28
|
setVideoStreamTrack(event.track);
|
|
26
29
|
}
|
|
27
30
|
};
|