@dxos/plugin-thread 0.8.4-main.ae835ea → 0.8.4-main.bc674ce
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/app-graph-builder-7C2QW32W.mjs +188 -0
- package/dist/lib/browser/app-graph-builder-7C2QW32W.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs +17 -0
- package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +8 -0
- package/dist/lib/browser/call-manager-4P536YNX.mjs +26 -0
- package/dist/lib/browser/call-manager-4P536YNX.mjs.map +7 -0
- package/dist/lib/browser/chunk-2FIHSX35.mjs +293 -0
- package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
- package/dist/lib/browser/{chunk-HDEQRBOC.mjs → chunk-DLO2G3DM.mjs} +79 -76
- package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-US5ZQYC3.mjs → chunk-ERK254BS.mjs} +78 -61
- package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
- package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-YSHXWAL3.mjs +1815 -0
- package/dist/lib/browser/chunk-YSHXWAL3.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZFLSTQSE.mjs +106 -0
- package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +121 -114
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/markdown-QMJLRR6R.mjs +210 -0
- package/dist/lib/browser/markdown-QMJLRR6R.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-T63EP5TY.mjs +441 -0
- package/dist/lib/browser/operation-resolver-T63EP5TY.mjs.map +7 -0
- package/dist/lib/browser/react-root-56MJI77R.mjs +25 -0
- package/dist/lib/browser/react-root-56MJI77R.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-IC576W2W.mjs → react-surface-DMBHQOXJ.mjs} +43 -42
- package/dist/lib/browser/react-surface-DMBHQOXJ.mjs.map +7 -0
- package/dist/lib/browser/repair-6OZ75AUU.mjs +38 -0
- package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
- package/dist/lib/browser/settings-WZMJMML3.mjs +32 -0
- package/dist/lib/browser/settings-WZMJMML3.mjs.map +7 -0
- package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
- package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +7 -7
- package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs +189 -0
- package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs +18 -0
- package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +9 -0
- package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs +27 -0
- package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7XQLXMX7.mjs +1816 -0
- package/dist/lib/node-esm/chunk-7XQLXMX7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs +107 -0
- package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/{chunk-2MMJF7DW.mjs → chunk-KRBZBJRI.mjs} +79 -76
- package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KGYDYYKJ.mjs → chunk-QP3KQOPQ.mjs} +78 -61
- package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
- package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
- package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +121 -114
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/markdown-L6LLQLIN.mjs +211 -0
- package/dist/lib/node-esm/markdown-L6LLQLIN.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs +442 -0
- package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs.map +7 -0
- package/dist/lib/node-esm/react-root-V4W4X5GL.mjs +26 -0
- package/dist/lib/node-esm/react-root-V4W4X5GL.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-O4LGTAZ3.mjs → react-surface-ELDSTUA3.mjs} +43 -42
- package/dist/lib/node-esm/react-surface-ELDSTUA3.mjs.map +7 -0
- package/dist/lib/node-esm/repair-6777EPOM.mjs +39 -0
- package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
- package/dist/lib/node-esm/settings-37CO3SNR.mjs +33 -0
- package/dist/lib/node-esm/settings-37CO3SNR.mjs.map +7 -0
- package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
- package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +7 -7
- package/dist/types/src/ThreadPlugin.d.ts +2 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
- package/dist/types/src/calls/call-manager.d.ts +40 -30
- package/dist/types/src/calls/call-manager.d.ts.map +1 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
- 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/util/calls-service.d.ts +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
- package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
- package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +9 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
- package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
- package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
- package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +10 -16
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
- package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
- package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
- package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/repair/index.d.ts +3 -0
- package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
- package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +3 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +5 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/index.d.ts +3 -0
- package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/state.d.ts +7 -0
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
- package/dist/types/src/components/Call/Call.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- 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 +4 -5
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts +6 -2
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +5 -1
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +2 -2
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +5 -1
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts +2 -2
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +4 -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/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -1
- 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 +4 -2
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +1 -1
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +7 -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 -3
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/stories.d.ts +2 -1
- package/dist/types/src/testing/stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +5 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +691 -12
- package/dist/types/src/types/Channel.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +23 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +3216 -430
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +86 -65
- package/src/ThreadPlugin.tsx +56 -88
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/thread-blueprint.ts +32 -0
- package/src/calls/call-manager.ts +76 -52
- package/src/calls/call-swarm-synchronizer.ts +2 -2
- package/src/calls/media-manager.ts +10 -7
- package/src/calls/util/calls-service.ts +1 -1
- package/src/calls/util/stub-media-streams.ts +2 -2
- package/src/calls/util/task-scheduling.ts +4 -4
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +201 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +23 -0
- package/src/capabilities/blueprint-definition/index.ts +7 -0
- package/src/capabilities/call-manager/call-manager.ts +26 -0
- package/src/capabilities/call-manager/index.ts +7 -0
- package/src/capabilities/index.ts +10 -13
- package/src/capabilities/markdown/index.ts +7 -0
- package/src/capabilities/markdown/markdown.ts +83 -0
- package/src/capabilities/operation-resolver/index.ts +7 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
- package/src/capabilities/react-root/index.ts +7 -0
- package/src/capabilities/react-root/react-root.tsx +20 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +97 -0
- package/src/capabilities/repair/index.ts +7 -0
- package/src/capabilities/repair/repair.ts +51 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +33 -0
- package/src/capabilities/state/index.ts +7 -0
- package/src/capabilities/state/state.ts +22 -0
- package/src/components/Call/Call.tsx +8 -4
- package/src/components/Call/Toolbar.tsx +31 -23
- package/src/components/CallDebugPanel.tsx +12 -14
- package/src/components/CallSidebar.tsx +5 -3
- package/src/components/ChannelContainer.stories.tsx +12 -10
- package/src/components/ChannelContainer.tsx +22 -19
- package/src/components/Chat.stories.tsx +9 -9
- package/src/components/ChatContainer.tsx +22 -21
- package/src/components/Comments.stories.tsx +25 -23
- package/src/components/CommentsContainer.tsx +4 -6
- package/src/components/CommentsThreadContainer.tsx +21 -22
- package/src/components/Lobby/Lobby.tsx +9 -7
- package/src/components/Media/AudioStream.tsx +2 -2
- package/src/components/Media/VideoObject.tsx +2 -2
- package/src/components/MessageContainer.tsx +59 -28
- package/src/components/Participant/Participant.tsx +32 -19
- package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +3 -3
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +6 -3
- package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +79 -67
- package/src/components/ThreadSettings.tsx +6 -1
- package/src/components/command-extension.ts +2 -2
- package/src/components/index.ts +4 -7
- package/src/components/testing.ts +3 -5
- package/src/extensions/threads.ts +82 -38
- package/src/functions/create-proposals.ts +57 -0
- package/src/functions/index.ts +5 -0
- package/src/hooks/analytics.ts +21 -21
- package/src/hooks/index.ts +3 -2
- package/src/index.ts +1 -1
- package/src/meta.ts +2 -2
- package/src/testing/stories.ts +15 -11
- package/src/translations.ts +3 -1
- package/src/types/Channel.ts +13 -10
- package/src/types/capabilities.ts +34 -0
- package/src/types/index.ts +1 -1
- package/src/types/types.ts +163 -85
- package/dist/lib/browser/ChannelContainer-SVV4ZX5T.mjs +0 -16
- package/dist/lib/browser/ChatContainer-ALFWQ65B.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs +0 -171
- package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs.map +0 -7
- package/dist/lib/browser/call-manager-P3MYR2JS.mjs +0 -24
- package/dist/lib/browser/call-manager-P3MYR2JS.mjs.map +0 -7
- package/dist/lib/browser/chunk-6CUDBEYP.mjs +0 -377
- package/dist/lib/browser/chunk-6CUDBEYP.mjs.map +0 -7
- package/dist/lib/browser/chunk-BBTXGRIR.mjs +0 -18
- package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +0 -7
- package/dist/lib/browser/chunk-DJOUMWEL.mjs +0 -988
- package/dist/lib/browser/chunk-DJOUMWEL.mjs.map +0 -7
- package/dist/lib/browser/chunk-HDEQRBOC.mjs.map +0 -7
- package/dist/lib/browser/chunk-IQSXEHOW.mjs +0 -618
- package/dist/lib/browser/chunk-IQSXEHOW.mjs.map +0 -7
- package/dist/lib/browser/chunk-K2DUJRFJ.mjs +0 -27
- package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +0 -7
- package/dist/lib/browser/chunk-L6F2AG6W.mjs +0 -23
- package/dist/lib/browser/chunk-L6F2AG6W.mjs.map +0 -7
- package/dist/lib/browser/chunk-US5ZQYC3.mjs.map +0 -7
- package/dist/lib/browser/chunk-UTSLSZED.mjs +0 -178
- package/dist/lib/browser/chunk-UTSLSZED.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-5POQTZ24.mjs +0 -419
- package/dist/lib/browser/intent-resolver-5POQTZ24.mjs.map +0 -7
- package/dist/lib/browser/markdown-L7LDNF56.mjs +0 -169
- package/dist/lib/browser/markdown-L7LDNF56.mjs.map +0 -7
- package/dist/lib/browser/react-root-RCJLK4EP.mjs +0 -28
- package/dist/lib/browser/react-root-RCJLK4EP.mjs.map +0 -7
- package/dist/lib/browser/react-surface-IC576W2W.mjs.map +0 -7
- package/dist/lib/browser/settings-5FYGBOGI.mjs +0 -22
- package/dist/lib/browser/settings-5FYGBOGI.mjs.map +0 -7
- package/dist/lib/browser/state-36REWXO5.mjs +0 -34
- package/dist/lib/browser/state-36REWXO5.mjs.map +0 -7
- package/dist/lib/browser/toolkit-PXASLYEQ.mjs +0 -74
- package/dist/lib/browser/toolkit-PXASLYEQ.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-63GMQ753.mjs +0 -17
- package/dist/lib/node-esm/ChatContainer-MFKPXMIK.mjs +0 -16
- package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs +0 -172
- package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-FCEFP7EJ.mjs +0 -25
- package/dist/lib/node-esm/call-manager-FCEFP7EJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs +0 -25
- package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KGYDYYKJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs +0 -378
- package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs +0 -619
- package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QCQAAU6J.mjs +0 -989
- package/dist/lib/node-esm/chunk-QCQAAU6J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TYLLHI46.mjs +0 -179
- package/dist/lib/node-esm/chunk-TYLLHI46.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XI45H4IV.mjs +0 -28
- package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +0 -19
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs +0 -420
- package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs +0 -170
- package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-4IDB2SN2.mjs +0 -29
- package/dist/lib/node-esm/react-root-4IDB2SN2.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-O4LGTAZ3.mjs.map +0 -7
- package/dist/lib/node-esm/settings-EOBQUZSW.mjs +0 -23
- package/dist/lib/node-esm/settings-EOBQUZSW.mjs.map +0 -7
- package/dist/lib/node-esm/state-X3W67GTL.mjs +0 -35
- package/dist/lib/node-esm/state-X3W67GTL.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs +0 -75
- package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/call-manager.d.ts +0 -5
- package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -27
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/markdown.d.ts +0 -4
- package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -7
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -7
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/capabilities/toolkit.d.ts +0 -24
- package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
- package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
- package/dist/types/src/types/Thread.d.ts +0 -167
- package/dist/types/src/types/Thread.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -186
- package/src/capabilities/call-manager.ts +0 -20
- package/src/capabilities/capabilities.ts +0 -33
- package/src/capabilities/intent-resolver.ts +0 -344
- package/src/capabilities/markdown.ts +0 -69
- package/src/capabilities/react-root.tsx +0 -17
- package/src/capabilities/react-surface.tsx +0 -89
- package/src/capabilities/settings.ts +0 -19
- package/src/capabilities/state.ts +0 -26
- package/src/capabilities/toolkit.ts +0 -85
- package/src/types/Thread.ts +0 -26
- /package/dist/lib/browser/{ChannelContainer-SVV4ZX5T.mjs.map → blueprints/index.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-ALFWQ65B.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-63GMQ753.mjs.map → blueprints/index.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-MFKPXMIK.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
|
@@ -50,7 +50,7 @@ export type CallState = {
|
|
|
50
50
|
tracks?: UserState['tracks'];
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
export type
|
|
53
|
+
export type CallSwarmSynchronizerProps = { networkService: NetworkService };
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
56
|
* Period for peer to reconnect to the call swarm gracefully if connection was lost abruptly.
|
|
@@ -76,7 +76,7 @@ export class CallSwarmSynchronizer extends Resource {
|
|
|
76
76
|
|
|
77
77
|
private _sendStateTask?: DeferredTask = undefined;
|
|
78
78
|
|
|
79
|
-
constructor({ networkService }:
|
|
79
|
+
constructor({ networkService }: CallSwarmSynchronizerProps) {
|
|
80
80
|
super();
|
|
81
81
|
this._networkService = networkService;
|
|
82
82
|
}
|
|
@@ -51,7 +51,7 @@ const MAX_WEB_CAM_FRAMERATE = 24;
|
|
|
51
51
|
const MAX_WEB_CAM_BITRATE = 120_0000;
|
|
52
52
|
const RETRY_INTERVAL = 100;
|
|
53
53
|
|
|
54
|
-
export type
|
|
54
|
+
export type MediaManagerProps = {
|
|
55
55
|
serviceConfig: CallsServiceConfig;
|
|
56
56
|
};
|
|
57
57
|
|
|
@@ -59,9 +59,13 @@ const USE_INAUDIBLE_AUDIO = true;
|
|
|
59
59
|
|
|
60
60
|
export class MediaManager extends Resource {
|
|
61
61
|
public readonly stateUpdated = new Event<MediaState>();
|
|
62
|
-
private readonly _state: MediaState = { pulledVideoStreams: {}, pulledAudioTracks: {} };
|
|
63
|
-
private _speakingMonitor?: SpeakingMonitor = undefined;
|
|
64
62
|
|
|
63
|
+
private readonly _state: MediaState = {
|
|
64
|
+
pulledVideoStreams: {},
|
|
65
|
+
pulledAudioTracks: {},
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
private _speakingMonitor?: SpeakingMonitor = undefined;
|
|
65
69
|
private _trackToReconcile: EncodedTrackName[] = [];
|
|
66
70
|
private _blackCanvasStreamTrack?: MediaStreamTrack = undefined;
|
|
67
71
|
private _inaudibleAudioStreamTrack?: MediaStreamTrack = undefined;
|
|
@@ -85,6 +89,7 @@ export class MediaManager extends Resource {
|
|
|
85
89
|
width: VIDEO_WIDTH,
|
|
86
90
|
height: VIDEO_HEIGHT,
|
|
87
91
|
});
|
|
92
|
+
|
|
88
93
|
this._state.videoTrack = this._blackCanvasStreamTrack;
|
|
89
94
|
this._state.videoStream = new MediaStream();
|
|
90
95
|
this._state.videoStream.addTrack(this._state.videoTrack);
|
|
@@ -137,6 +142,7 @@ export class MediaManager extends Resource {
|
|
|
137
142
|
this._state.videoStream!.removeTrack(this._state.videoTrack!);
|
|
138
143
|
this._state.videoTrack = await getUserMediaTrack('videoinput', { width: VIDEO_WIDTH, height: VIDEO_HEIGHT });
|
|
139
144
|
this._state.videoStream!.addTrack(this._state.videoTrack);
|
|
145
|
+
|
|
140
146
|
this._state.videoEnabled = true;
|
|
141
147
|
this.stateUpdated.emit(this._state);
|
|
142
148
|
this._pushTracksTask!.schedule();
|
|
@@ -226,7 +232,6 @@ export class MediaManager extends Resource {
|
|
|
226
232
|
// Wait for cloudflare to process the track.
|
|
227
233
|
await cancelWithContext(this._ctx, sleep(800));
|
|
228
234
|
const trackNames = this._trackToReconcile;
|
|
229
|
-
|
|
230
235
|
const tracksToPull = trackNames.filter(
|
|
231
236
|
(name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name],
|
|
232
237
|
);
|
|
@@ -258,8 +263,8 @@ export class MediaManager extends Resource {
|
|
|
258
263
|
currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
|
|
259
264
|
currentVideoStreams: Object.keys(this._state.pulledVideoStreams),
|
|
260
265
|
});
|
|
261
|
-
this.stateUpdated.emit(this._state);
|
|
262
266
|
|
|
267
|
+
this.stateUpdated.emit(this._state);
|
|
263
268
|
if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
|
|
264
269
|
await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
|
|
265
270
|
log.info('retrying pull tracks', { tracksToPull });
|
|
@@ -296,7 +301,6 @@ export class MediaManager extends Resource {
|
|
|
296
301
|
}
|
|
297
302
|
|
|
298
303
|
const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
|
|
299
|
-
|
|
300
304
|
if (updated) {
|
|
301
305
|
this.stateUpdated.emit(this._state);
|
|
302
306
|
}
|
|
@@ -356,7 +360,6 @@ export class MediaManager extends Resource {
|
|
|
356
360
|
}
|
|
357
361
|
|
|
358
362
|
const ctx = this._ctx.derive();
|
|
359
|
-
|
|
360
363
|
try {
|
|
361
364
|
return {
|
|
362
365
|
track: await this._state.peer!.pushTrack({
|
|
@@ -60,13 +60,12 @@ const userGestureEvents = [
|
|
|
60
60
|
*/
|
|
61
61
|
export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {
|
|
62
62
|
const audioContext = new window.AudioContext();
|
|
63
|
+
|
|
63
64
|
const oscillator = audioContext.createOscillator();
|
|
64
65
|
oscillator.type = 'triangle';
|
|
65
|
-
// roughly sounds like a box fan
|
|
66
66
|
oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
|
|
67
67
|
|
|
68
68
|
const gainNode = audioContext.createGain();
|
|
69
|
-
// even w/ gain at 0 some packets are sent
|
|
70
69
|
gainNode.gain.setValueAtTime(0, audioContext.currentTime);
|
|
71
70
|
oscillator.connect(gainNode);
|
|
72
71
|
|
|
@@ -85,6 +84,7 @@ export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context })
|
|
|
85
84
|
audioContextStartedPreviously = true;
|
|
86
85
|
ensureOscillatorStarted();
|
|
87
86
|
}
|
|
87
|
+
|
|
88
88
|
if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {
|
|
89
89
|
resumeAudioContext();
|
|
90
90
|
}
|
|
@@ -27,8 +27,8 @@ export class FIFOScheduler {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// TODO(mykola): Reconcile with @dxos/async task scheduling.
|
|
30
|
-
export class BulkRequestDispatcher<
|
|
31
|
-
#currentBatch:
|
|
30
|
+
export class BulkRequestDispatcher<RequestEntryProps, BulkResponse> {
|
|
31
|
+
#currentBatch: RequestEntryProps[];
|
|
32
32
|
#currentBulkResponse: Promise<BulkResponse> | null;
|
|
33
33
|
#batchSizeLimit: number;
|
|
34
34
|
|
|
@@ -43,8 +43,8 @@ export class BulkRequestDispatcher<RequestEntryParams, BulkResponse> {
|
|
|
43
43
|
* At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
|
|
44
44
|
*/
|
|
45
45
|
doBulkRequest(
|
|
46
|
-
params:
|
|
47
|
-
bulkRequestFunc: (bulkCopy:
|
|
46
|
+
params: RequestEntryProps,
|
|
47
|
+
bulkRequestFunc: (bulkCopy: RequestEntryProps[]) => Promise<BulkResponse>,
|
|
48
48
|
): Promise<BulkResponse> {
|
|
49
49
|
if (this.#currentBatch.length >= this.#batchSizeLimit) {
|
|
50
50
|
// If it reaches the batch size limit, we make another bulk request.
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Atom } from '@effect-atom/atom-react';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
8
|
+
|
|
9
|
+
import { Capability, Common } from '@dxos/app-framework';
|
|
10
|
+
import { Obj } from '@dxos/echo';
|
|
11
|
+
import { Operation } from '@dxos/operation';
|
|
12
|
+
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
13
|
+
import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
|
|
14
|
+
import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
|
|
15
|
+
import { type SelectionManager, type SelectionMode, defaultSelection } from '@dxos/react-ui-attention';
|
|
16
|
+
|
|
17
|
+
import { meta } from '../../meta';
|
|
18
|
+
import { Channel, ThreadCapabilities, ThreadOperation, type ThreadState } from '../../types';
|
|
19
|
+
import { getAnchor } from '../../util';
|
|
20
|
+
|
|
21
|
+
type CommentDisabledParams = {
|
|
22
|
+
stateAtom: Atom.Atom<Atom.Writable<ThreadState>[]>;
|
|
23
|
+
selectionManager: SelectionManager;
|
|
24
|
+
objectId: string;
|
|
25
|
+
commentsType: string;
|
|
26
|
+
selectionMode: SelectionMode | undefined;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Atom family to derive whether the comment button should be disabled.
|
|
31
|
+
* Uses a composite key to ensure proper caching.
|
|
32
|
+
*/
|
|
33
|
+
const commentDisabledFamily = Atom.family(
|
|
34
|
+
({ stateAtom, selectionManager, objectId, commentsType, selectionMode }: CommentDisabledParams) =>
|
|
35
|
+
Atom.make((get) => {
|
|
36
|
+
const stateAtoms = get(stateAtom);
|
|
37
|
+
const state = stateAtoms[0] ? get(stateAtoms[0]) : undefined;
|
|
38
|
+
const toolbar = state?.toolbar ?? {};
|
|
39
|
+
const selectionState = get(selectionManager.state);
|
|
40
|
+
const selection =
|
|
41
|
+
selectionState.selections[objectId] ?? (selectionMode ? defaultSelection(selectionMode) : undefined);
|
|
42
|
+
const anchor = getAnchor(selection);
|
|
43
|
+
const invalidSelection = !anchor;
|
|
44
|
+
const overlappingComment = toolbar[objectId];
|
|
45
|
+
return (commentsType === 'anchored' && invalidSelection) || overlappingComment;
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
/** Match ECHO objects that are NOT Channels (i.e. objects that can have comments). */
|
|
50
|
+
const whenCommentableObject = NodeMatcher.whenAll(
|
|
51
|
+
NodeMatcher.whenEchoObjectMatches,
|
|
52
|
+
NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
// TODO(wittjosiah): Highlight active calls in L1.
|
|
56
|
+
// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.
|
|
57
|
+
export default Capability.makeModule(
|
|
58
|
+
Effect.fnUntraced(function* () {
|
|
59
|
+
const capabilities = yield* Capability.Service;
|
|
60
|
+
|
|
61
|
+
const resolve = (typename: string) =>
|
|
62
|
+
capabilities.getAll(Common.Capability.Metadata).find(({ id }: { id: string }) => id === typename)?.metadata ?? {};
|
|
63
|
+
|
|
64
|
+
const extensions = yield* Effect.all([
|
|
65
|
+
GraphBuilder.createExtension({
|
|
66
|
+
id: `${meta.id}/active-call`,
|
|
67
|
+
match: NodeMatcher.whenRoot,
|
|
68
|
+
connector: (node, get) => {
|
|
69
|
+
const callManagerAtom = capabilities.atom(ThreadCapabilities.CallManager);
|
|
70
|
+
const [call] = get(callManagerAtom);
|
|
71
|
+
if (!call) {
|
|
72
|
+
return Effect.succeed([]);
|
|
73
|
+
}
|
|
74
|
+
// Use derived joinedAtom for efficient subscription.
|
|
75
|
+
const joined = get(call.joinedAtom);
|
|
76
|
+
return Effect.succeed(
|
|
77
|
+
joined
|
|
78
|
+
? [
|
|
79
|
+
{
|
|
80
|
+
id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,
|
|
81
|
+
type: DECK_COMPANION_TYPE,
|
|
82
|
+
data: null,
|
|
83
|
+
properties: {
|
|
84
|
+
label: ['call panel label', { ns: meta.id }],
|
|
85
|
+
icon: 'ph--video-conference--regular',
|
|
86
|
+
position: 'hoist',
|
|
87
|
+
disposition: 'hidden',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
]
|
|
91
|
+
: [],
|
|
92
|
+
);
|
|
93
|
+
},
|
|
94
|
+
}),
|
|
95
|
+
GraphBuilder.createTypeExtension({
|
|
96
|
+
id: `${meta.id}/channel-chat-companion`,
|
|
97
|
+
type: Channel.Channel,
|
|
98
|
+
connector: (channel, get) => {
|
|
99
|
+
const callManager = capabilities.get(ThreadCapabilities.CallManager);
|
|
100
|
+
// Use derived atoms for efficient subscription.
|
|
101
|
+
const joined = get(callManager.joinedAtom);
|
|
102
|
+
const roomId = get(callManager.roomIdAtom);
|
|
103
|
+
const isActive = joined && roomId === Obj.getDXN(channel).toString();
|
|
104
|
+
if (!isActive) {
|
|
105
|
+
return Effect.succeed([]);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return Effect.succeed([
|
|
109
|
+
{
|
|
110
|
+
id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,
|
|
111
|
+
type: PLANK_COMPANION_TYPE,
|
|
112
|
+
data: 'chat',
|
|
113
|
+
properties: {
|
|
114
|
+
label: ['channel companion label', { ns: meta.id }],
|
|
115
|
+
icon: 'ph--hash--regular',
|
|
116
|
+
position: 'hoist',
|
|
117
|
+
disposition: 'hidden',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
]);
|
|
121
|
+
},
|
|
122
|
+
}),
|
|
123
|
+
GraphBuilder.createExtension({
|
|
124
|
+
id: `${meta.id}/comments-companion`,
|
|
125
|
+
match: (node) => {
|
|
126
|
+
if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
|
|
127
|
+
return Option.none();
|
|
128
|
+
}
|
|
129
|
+
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
130
|
+
return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();
|
|
131
|
+
},
|
|
132
|
+
connector: (node) =>
|
|
133
|
+
Effect.succeed([
|
|
134
|
+
{
|
|
135
|
+
id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),
|
|
136
|
+
type: PLANK_COMPANION_TYPE,
|
|
137
|
+
data: 'comments',
|
|
138
|
+
properties: {
|
|
139
|
+
label: ['comments label', { ns: meta.id }],
|
|
140
|
+
icon: 'ph--chat-text--regular',
|
|
141
|
+
disposition: 'hidden',
|
|
142
|
+
position: 'hoist',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
]),
|
|
146
|
+
}),
|
|
147
|
+
GraphBuilder.createExtension({
|
|
148
|
+
id: `${meta.id}/comment-toolbar`,
|
|
149
|
+
match: (node) => {
|
|
150
|
+
if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {
|
|
151
|
+
return Option.none();
|
|
152
|
+
}
|
|
153
|
+
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
154
|
+
return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();
|
|
155
|
+
},
|
|
156
|
+
actions: (object, get) => {
|
|
157
|
+
const stateAtom = capabilities.atom(ThreadCapabilities.State);
|
|
158
|
+
const selectionManager = capabilities.get(AttentionCapabilities.Selection);
|
|
159
|
+
const objectId = Obj.getDXN(object).toString();
|
|
160
|
+
const metadata = resolve(Obj.getTypename(object)!);
|
|
161
|
+
|
|
162
|
+
const disabled = get(
|
|
163
|
+
commentDisabledFamily({
|
|
164
|
+
stateAtom,
|
|
165
|
+
selectionManager,
|
|
166
|
+
objectId,
|
|
167
|
+
commentsType: metadata.comments as string,
|
|
168
|
+
selectionMode: metadata.selectionMode,
|
|
169
|
+
}),
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
return Effect.succeed([
|
|
173
|
+
{
|
|
174
|
+
id: `${Obj.getDXN(object).toString()}/comment`,
|
|
175
|
+
data: Effect.fnUntraced(function* () {
|
|
176
|
+
const metadata = resolve(Obj.getTypename(object)!);
|
|
177
|
+
const selection = selectionManager.getSelection(Obj.getDXN(object).toString());
|
|
178
|
+
const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();
|
|
179
|
+
const name = metadata.getAnchorLabel?.(object, anchor);
|
|
180
|
+
yield* Operation.invoke(ThreadOperation.Create, {
|
|
181
|
+
anchor,
|
|
182
|
+
name,
|
|
183
|
+
subject: object,
|
|
184
|
+
});
|
|
185
|
+
}),
|
|
186
|
+
properties: {
|
|
187
|
+
label: ['add comment label', { ns: meta.id }],
|
|
188
|
+
icon: 'ph--chat-text--regular',
|
|
189
|
+
disposition: 'toolbar',
|
|
190
|
+
disabled,
|
|
191
|
+
testId: 'thread.comment.add',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
]);
|
|
195
|
+
},
|
|
196
|
+
}),
|
|
197
|
+
]);
|
|
198
|
+
|
|
199
|
+
return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
|
|
200
|
+
}),
|
|
201
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
|
|
7
|
+
import { Capability, Common } from '@dxos/app-framework';
|
|
8
|
+
|
|
9
|
+
import { ThreadBlueprint } from '../../blueprints';
|
|
10
|
+
|
|
11
|
+
export type BlueprintCapabilities = [
|
|
12
|
+
Capability.Capability<typeof Common.Capability.Functions>,
|
|
13
|
+
Capability.Capability<typeof Common.Capability.BlueprintDefinition>,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>
|
|
17
|
+
Effect.succeed([
|
|
18
|
+
Capability.contributes(Common.Capability.Functions, ThreadBlueprint.functions),
|
|
19
|
+
Capability.contributes(Common.Capability.BlueprintDefinition, ThreadBlueprint.make()),
|
|
20
|
+
]),
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default blueprintDefinition;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
|
|
7
|
+
import { Capability, Common } from '@dxos/app-framework';
|
|
8
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
9
|
+
|
|
10
|
+
import { CallManager } from '../../calls';
|
|
11
|
+
import { ThreadCapabilities } from '../../types';
|
|
12
|
+
|
|
13
|
+
export default Capability.makeModule(
|
|
14
|
+
Effect.fnUntraced(function* () {
|
|
15
|
+
const client = yield* Capability.get(ClientCapabilities.Client);
|
|
16
|
+
const registry = yield* Capability.get(Common.Capability.AtomRegistry);
|
|
17
|
+
const callManager = new CallManager(client, registry);
|
|
18
|
+
yield* Effect.tryPromise(() => callManager.open());
|
|
19
|
+
|
|
20
|
+
return Capability.contributes(ThreadCapabilities.CallManager, callManager, () =>
|
|
21
|
+
Effect.sync(() => {
|
|
22
|
+
void callManager.close();
|
|
23
|
+
}),
|
|
24
|
+
);
|
|
25
|
+
}),
|
|
26
|
+
);
|
|
@@ -2,16 +2,13 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export const Toolkit = lazy(() => import('./toolkit'));
|
|
16
|
-
|
|
17
|
-
export * from './capabilities';
|
|
5
|
+
export * from './app-graph-builder';
|
|
6
|
+
export * from './blueprint-definition';
|
|
7
|
+
export * from './call-manager';
|
|
8
|
+
export * from './markdown';
|
|
9
|
+
export * from './operation-resolver';
|
|
10
|
+
export * from './react-root';
|
|
11
|
+
export * from './react-surface';
|
|
12
|
+
export * from './repair';
|
|
13
|
+
export * from './settings';
|
|
14
|
+
export * from './state';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { EditorView } from '@codemirror/view';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
|
|
8
|
+
import { Capability, Common } from '@dxos/app-framework';
|
|
9
|
+
import { Obj } from '@dxos/echo';
|
|
10
|
+
import { ATTENDABLE_PATH_SEPARATOR, DeckOperation } from '@dxos/plugin-deck/types';
|
|
11
|
+
import { MarkdownCapabilities } from '@dxos/plugin-markdown';
|
|
12
|
+
import { type EditorState, commentClickedEffect, commentsState, overlap } from '@dxos/ui-editor';
|
|
13
|
+
|
|
14
|
+
import { threads } from '../../extensions';
|
|
15
|
+
import { ThreadCapabilities } from '../../types';
|
|
16
|
+
|
|
17
|
+
export default Capability.makeModule(
|
|
18
|
+
Effect.fnUntraced(function* () {
|
|
19
|
+
// Get context for lazy capability access in callbacks.
|
|
20
|
+
const capabilities = yield* Capability.Service;
|
|
21
|
+
|
|
22
|
+
return Capability.contributes(MarkdownCapabilities.Extensions, [
|
|
23
|
+
({ document: doc }) => {
|
|
24
|
+
const { invokePromise } = capabilities.get(Common.Capability.OperationInvoker);
|
|
25
|
+
const registry = capabilities.get(Common.Capability.AtomRegistry);
|
|
26
|
+
const stateAtom = capabilities.get(ThreadCapabilities.State);
|
|
27
|
+
return threads({ registry, stateAtom }, doc, invokePromise);
|
|
28
|
+
},
|
|
29
|
+
({ document: doc }) => {
|
|
30
|
+
if (!doc) return [];
|
|
31
|
+
const registry = capabilities.get(Common.Capability.AtomRegistry);
|
|
32
|
+
const stateAtom = capabilities.get(ThreadCapabilities.State);
|
|
33
|
+
|
|
34
|
+
return EditorView.updateListener.of((update) => {
|
|
35
|
+
if (update.docChanged || update.selectionSet) {
|
|
36
|
+
const objectId = Obj.getDXN(doc).toString();
|
|
37
|
+
const overlaps = selectionOverlapsComment(update.state);
|
|
38
|
+
const current = registry.get(stateAtom);
|
|
39
|
+
registry.set(stateAtom, {
|
|
40
|
+
...current,
|
|
41
|
+
toolbar: { ...current.toolbar, [objectId]: overlaps },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
({ document: doc }) => {
|
|
47
|
+
if (!doc) return [];
|
|
48
|
+
const { invokePromise } = capabilities.get(Common.Capability.OperationInvoker);
|
|
49
|
+
const id = Obj.getDXN(doc).toString();
|
|
50
|
+
|
|
51
|
+
return EditorView.updateListener.of((update) => {
|
|
52
|
+
update.transactions.forEach((transaction) => {
|
|
53
|
+
transaction.effects.forEach(async (effect) => {
|
|
54
|
+
if (effect.is(commentClickedEffect)) {
|
|
55
|
+
void invokePromise(DeckOperation.ChangeCompanion, {
|
|
56
|
+
primary: id,
|
|
57
|
+
companion: `${id}${ATTENDABLE_PATH_SEPARATOR}comments`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
]);
|
|
65
|
+
}),
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const selectionOverlapsComment = (state: EditorState): boolean => {
|
|
69
|
+
// May not be defined if thread plugin not installed.
|
|
70
|
+
const commentState = state.field(commentsState, false);
|
|
71
|
+
if (commentState === undefined) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const { selection } = state;
|
|
76
|
+
for (const range of selection.ranges) {
|
|
77
|
+
if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return false;
|
|
83
|
+
};
|