@dxos/plugin-thread 0.8.4-main.dedc0f3 → 0.8.4-main.e8ec1fe
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-NDIH62Q4.mjs +17 -0
- package/dist/lib/browser/ChatContainer-6FVFME3R.mjs +16 -0
- package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-URVQHGMR.mjs} +32 -32
- package/dist/lib/browser/app-graph-builder-URVQHGMR.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
- package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-RMPTWSTF.mjs → call-manager-4YFT4XA6.mjs} +8 -7
- package/dist/lib/{node-esm/call-manager-QAREJFVX.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-PBMNFG3B.mjs → chunk-6LWKNZUV.mjs} +18 -17
- package/dist/lib/browser/chunk-6LWKNZUV.mjs.map +7 -0
- package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
- package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
- package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7W7QK5ZP.mjs → chunk-F36NHPJG.mjs} +37 -34
- package/dist/lib/browser/chunk-F36NHPJG.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZH2WPTNP.mjs → chunk-HKI7FUMB.mjs} +65 -72
- package/dist/lib/browser/chunk-HKI7FUMB.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-JDFDDUTH.mjs +23 -0
- package/dist/lib/browser/chunk-JDFDDUTH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RI3Z6MK3.mjs → chunk-KOBXMDCI.mjs} +68 -67
- package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
- package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
- package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KTWYVC5X.mjs → chunk-R5UOPOO7.mjs} +44 -49
- package/dist/lib/browser/chunk-R5UOPOO7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZCEU5K23.mjs → chunk-ZCW3NSDZ.mjs} +139 -236
- package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +41 -42
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-J7OCP2P6.mjs → intent-resolver-S3F7DVFM.mjs} +33 -99
- package/dist/lib/browser/intent-resolver-S3F7DVFM.mjs.map +7 -0
- package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-454GFKEZ.mjs} +25 -23
- package/dist/lib/browser/markdown-454GFKEZ.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-ZB5ZA4I6.mjs +29 -0
- package/dist/lib/browser/react-root-ZB5ZA4I6.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-GVGZRBDK.mjs → react-surface-MBLTXSOC.mjs} +38 -36
- package/dist/lib/browser/react-surface-MBLTXSOC.mjs.map +7 -0
- package/dist/lib/browser/{settings-GRKEID73.mjs → settings-JN2HHORY.mjs} +6 -5
- package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-JN2HHORY.mjs.map} +1 -1
- package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
- package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
- package/dist/lib/browser/types/index.mjs +7 -10
- package/dist/lib/node-esm/ChannelContainer-NGSDMNEE.mjs +18 -0
- package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs +17 -0
- package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-2IH5RPR7.mjs} +32 -32
- package/dist/lib/node-esm/app-graph-builder-2IH5RPR7.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
- package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-QAREJFVX.mjs → call-manager-UMUXEYH5.mjs} +8 -7
- package/dist/lib/{browser/call-manager-RMPTWSTF.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
- package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
- package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3VRYXHKX.mjs +25 -0
- package/dist/lib/node-esm/chunk-3VRYXHKX.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TIPIOH2J.mjs → chunk-7KZWZS2U.mjs} +139 -236
- 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-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-MEIWWPR2.mjs} +44 -49
- package/dist/lib/node-esm/chunk-MEIWWPR2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LE2LIYGX.mjs → chunk-MM6HOX5W.mjs} +65 -72
- package/dist/lib/node-esm/chunk-MM6HOX5W.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-JNPKMT7O.mjs → chunk-PZH2EDU5.mjs} +68 -67
- package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
- package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-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-SNKFZQST.mjs → chunk-Y3F2SGNH.mjs} +37 -34
- package/dist/lib/node-esm/chunk-Y3F2SGNH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-DKCQCENK.mjs → chunk-Z4GUSLWL.mjs} +18 -17
- package/dist/lib/node-esm/chunk-Z4GUSLWL.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +41 -42
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-SR2LW4HF.mjs → intent-resolver-UES35EMJ.mjs} +33 -99
- package/dist/lib/node-esm/intent-resolver-UES35EMJ.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-7JUG6J7B.mjs} +25 -23
- package/dist/lib/node-esm/markdown-7JUG6J7B.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-3XXULWUN.mjs +30 -0
- package/dist/lib/node-esm/react-root-3XXULWUN.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-WLQUVRAX.mjs → react-surface-DCF4DD7B.mjs} +38 -36
- package/dist/lib/node-esm/react-surface-DCF4DD7B.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-VSPM3BIM.mjs} +6 -5
- package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-VSPM3BIM.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
- package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +7 -10
- package/dist/types/src/ThreadPlugin.d.ts +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts.map +1 -1
- package/dist/types/src/calls-service.stories.d.ts +0 -1
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/CallDebugPanel.d.ts.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 +73 -8
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +73 -6
- 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 +1 -2
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts +2 -2
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
- package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +2 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +2 -2
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +2 -2
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
- package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
- package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
- package/dist/types/src/components/ThreadSettings.d.ts +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +3 -3
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/functions/create-proposals.d.ts +6 -0
- package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
- package/dist/types/src/functions/index.d.ts +2 -0
- package/dist/types/src/functions/index.d.ts.map +1 -0
- package/dist/types/src/hooks/analytics.d.ts +2 -2
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +2 -2
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +72 -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/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +30 -117
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +62 -58
- package/src/ThreadPlugin.tsx +139 -132
- package/src/calls/media-manager.ts +9 -6
- package/src/calls/util/stub-media-streams.ts +2 -2
- package/src/calls-service.stories.tsx +2 -5
- package/src/capabilities/app-graph-builder.ts +41 -30
- package/src/capabilities/blueprint-definition.ts +38 -0
- package/src/capabilities/capabilities.ts +7 -7
- package/src/capabilities/index.ts +1 -1
- package/src/capabilities/intent-resolver.ts +22 -59
- package/src/capabilities/markdown.ts +5 -3
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +25 -23
- package/src/components/Call/Call.tsx +1 -1
- package/src/components/Call/Toolbar.tsx +5 -5
- package/src/components/CallDebugPanel.tsx +12 -14
- package/src/components/CallSidebar.tsx +1 -1
- package/src/components/ChannelContainer.stories.tsx +10 -10
- package/src/components/ChannelContainer.tsx +19 -15
- package/src/components/Chat.stories.tsx +14 -19
- package/src/components/ChatContainer.tsx +29 -21
- package/src/components/Comments.stories.tsx +11 -17
- package/src/components/CommentsContainer.tsx +5 -7
- package/src/components/CommentsThreadContainer.tsx +31 -27
- package/src/components/Lobby/Lobby.tsx +1 -1
- package/src/components/Media/VideoObject.stories.tsx +12 -7
- package/src/components/Media/VideoObject.tsx +1 -1
- package/src/components/MessageContainer.tsx +6 -6
- package/src/components/Participant/Participant.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
- package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
- package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
- package/src/components/ThreadSettings.tsx +4 -5
- package/src/components/index.ts +4 -4
- package/src/components/testing.ts +7 -9
- package/src/extensions/threads.ts +25 -16
- package/src/functions/create-proposals.ts +56 -0
- package/src/functions/index.ts +5 -0
- package/src/hooks/analytics.ts +4 -7
- package/src/hooks/index.ts +3 -2
- package/src/hooks/useVideoStreamTrack.tsx +1 -1
- package/src/meta.ts +9 -5
- package/src/testing/stories.ts +3 -6
- package/src/translations.ts +4 -3
- package/src/types/Channel.ts +26 -0
- package/src/types/index.ts +1 -1
- package/src/types/types.ts +18 -27
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +0 -16
- package/dist/lib/browser/ChatContainer-EXNNREYB.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
- package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
- package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
- package/dist/lib/browser/chunk-7W7QK5ZP.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-G4CNILRR.mjs +0 -23
- package/dist/lib/browser/chunk-G4CNILRR.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
- package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +0 -7
- package/dist/lib/browser/chunk-RI3Z6MK3.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +0 -7
- package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
- package/dist/lib/browser/react-root-XKOD4KRB.mjs +0 -28
- package/dist/lib/browser/react-root-XKOD4KRB.mjs.map +0 -7
- package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +0 -7
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-KQQEZWUN.mjs +0 -17
- package/dist/lib/node-esm/ChatContainer-QVQKFBWA.mjs +0 -16
- package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4T45PCKP.mjs +0 -25
- package/dist/lib/node-esm/chunk-4T45PCKP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DKCQCENK.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-JNPKMT7O.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-4JWDRIQB.mjs +0 -29
- package/dist/lib/node-esm/react-root-4JWDRIQB.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
- package/dist/types/src/capabilities/toolkit.d.ts +0 -5
- package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
- package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -177
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/capabilities/toolkit.ts +0 -78
- package/src/types/schema.ts +0 -33
- /package/dist/lib/browser/{ChannelContainer-4PYFOIDK.mjs.map → ChannelContainer-NDIH62Q4.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-EXNNREYB.mjs.map → ChatContainer-6FVFME3R.mjs.map} +0 -0
- /package/dist/lib/{node-esm/ChannelContainer-KQQEZWUN.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-QVQKFBWA.mjs.map → ChannelContainer-NGSDMNEE.mjs.map} +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { type FC, type PropsWithChildren, useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import { useCapability } from '@dxos/app-framework';
|
|
7
|
+
import { useCapability } from '@dxos/app-framework/react';
|
|
8
8
|
import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
9
9
|
import { mx } from '@dxos/react-ui-theme';
|
|
10
10
|
|
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useEffect, useState } from 'react';
|
|
9
7
|
|
|
10
8
|
import { scheduleTask } from '@dxos/async';
|
|
11
9
|
import { Context } from '@dxos/context';
|
|
12
10
|
import { log } from '@dxos/log';
|
|
13
|
-
import {
|
|
11
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
14
12
|
|
|
15
13
|
import { getUserMediaTrack } from '../../calls';
|
|
16
14
|
import { ResponsiveContainer } from '../ResponsiveGrid';
|
|
@@ -23,9 +21,13 @@ const DefaultStory = (props: VideoObjectProps) => {
|
|
|
23
21
|
useEffect(() => {
|
|
24
22
|
const ctx = new Context();
|
|
25
23
|
scheduleTask(ctx, async () => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
try {
|
|
25
|
+
const stream = new MediaStream();
|
|
26
|
+
stream.addTrack(await getUserMediaTrack('videoinput'));
|
|
27
|
+
setVideoStream(stream);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
log.catch(err);
|
|
30
|
+
}
|
|
29
31
|
});
|
|
30
32
|
|
|
31
33
|
return () => {
|
|
@@ -45,7 +47,10 @@ const meta = {
|
|
|
45
47
|
title: 'plugins/plugin-thread/VideoObject',
|
|
46
48
|
component: VideoObject,
|
|
47
49
|
render: DefaultStory,
|
|
48
|
-
decorators: [withTheme
|
|
50
|
+
decorators: [withTheme],
|
|
51
|
+
parameters: {
|
|
52
|
+
layout: 'fullscreen',
|
|
53
|
+
},
|
|
49
54
|
};
|
|
50
55
|
|
|
51
56
|
export default meta;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
6
|
import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { Surface } from '@dxos/app-framework';
|
|
8
|
+
import { Surface } from '@dxos/app-framework/react';
|
|
9
9
|
import { type Obj, Ref, type Type } from '@dxos/echo';
|
|
10
10
|
import { PublicKey } from '@dxos/react-client';
|
|
11
11
|
import { type SpaceMember } from '@dxos/react-client/echo';
|
|
@@ -14,7 +14,7 @@ import { IconButton, useOnTransition, useThemeContext, useTranslation } from '@d
|
|
|
14
14
|
import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
|
|
15
15
|
import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
|
|
16
16
|
import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
|
|
17
|
-
import { type
|
|
17
|
+
import { type ContentBlock, type Message } from '@dxos/types';
|
|
18
18
|
|
|
19
19
|
import { useOnEditAnalytics } from '../hooks';
|
|
20
20
|
import { meta } from '../meta';
|
|
@@ -26,7 +26,7 @@ export const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pie-2';
|
|
|
26
26
|
export const buttonClassNames = '!p-1 transition-opacity';
|
|
27
27
|
|
|
28
28
|
export type MessageContainerProps = {
|
|
29
|
-
message:
|
|
29
|
+
message: Message.Message;
|
|
30
30
|
members: SpaceMember[];
|
|
31
31
|
editable?: boolean;
|
|
32
32
|
onDelete?: (id: string) => void;
|
|
@@ -116,7 +116,7 @@ const TextboxBlock = ({
|
|
|
116
116
|
isAuthor,
|
|
117
117
|
editing,
|
|
118
118
|
}: {
|
|
119
|
-
block:
|
|
119
|
+
block: ContentBlock.Text;
|
|
120
120
|
editing?: boolean;
|
|
121
121
|
isAuthor?: boolean;
|
|
122
122
|
identity?: Identity;
|
|
@@ -158,7 +158,7 @@ const TextboxBlock = ({
|
|
|
158
158
|
return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
|
|
159
159
|
};
|
|
160
160
|
|
|
161
|
-
const ProposalBlock = ({ block }: { block:
|
|
161
|
+
const ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {
|
|
162
162
|
return (
|
|
163
163
|
<div role='none' className='mie-4 italic'>
|
|
164
164
|
{block.text}
|
|
@@ -176,7 +176,7 @@ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(
|
|
|
176
176
|
return (
|
|
177
177
|
<div
|
|
178
178
|
role='group'
|
|
179
|
-
className={mx('grid col-span-3
|
|
179
|
+
className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
|
|
180
180
|
ref={forwardedRef}
|
|
181
181
|
>
|
|
182
182
|
<Surface role='card' limit={1} data={{ subject }} fallback={title} />
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { memo, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import { useCapability } from '@dxos/app-framework';
|
|
7
|
+
import { useCapability } from '@dxos/app-framework/react';
|
|
8
8
|
|
|
9
9
|
import { type EncodedTrackName, type UserState } from '../../calls';
|
|
10
10
|
import { ThreadCapabilities } from '../../capabilities';
|
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React from 'react';
|
|
9
7
|
|
|
10
|
-
import {
|
|
8
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
11
9
|
|
|
12
10
|
import { translations } from '../../translations';
|
|
13
11
|
import { VideoObject as VideoObjectComponent } from '../Media';
|
|
@@ -17,8 +15,9 @@ import { ResponsiveContainer } from './ResponsiveContainer';
|
|
|
17
15
|
const meta = {
|
|
18
16
|
title: 'plugins/plugin-thread/ResponsiveContainer',
|
|
19
17
|
component: ResponsiveContainer,
|
|
20
|
-
decorators: [withTheme
|
|
18
|
+
decorators: [withTheme],
|
|
21
19
|
parameters: {
|
|
20
|
+
layout: 'fullscreen',
|
|
22
21
|
translations,
|
|
23
22
|
},
|
|
24
23
|
} satisfies Meta<typeof ResponsiveContainer>;
|
|
@@ -18,11 +18,11 @@ import { mx } from '@dxos/react-ui-theme';
|
|
|
18
18
|
export const ResponsiveContainer = ({ children }: PropsWithChildren) => {
|
|
19
19
|
return (
|
|
20
20
|
// Outer container that takes full size of parent.
|
|
21
|
-
<div role='none' className='relative flex
|
|
21
|
+
<div role='none' className='relative flex is-full bs-full'>
|
|
22
22
|
{/* Absolute positioning layer for centering content. */}
|
|
23
23
|
<div role='none' className='absolute inset-0 flex justify-center items-center'>
|
|
24
24
|
{/* Content container that maintains given aspect ratio and proper scaling. */}
|
|
25
|
-
<div role='none' className={mx('max-
|
|
25
|
+
<div role='none' className={mx('max-bs-full max-is-full is-auto bs-auto aspect-video')}>
|
|
26
26
|
{children}
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useEffect, useState } from 'react';
|
|
9
7
|
|
|
10
8
|
import { faker } from '@dxos/random';
|
|
11
|
-
import {
|
|
9
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
10
|
|
|
13
11
|
import { translations } from '../../translations';
|
|
14
12
|
|
|
@@ -43,7 +41,7 @@ const TestCell = ({ item, ...props }: ResponsiveGridItemProps<TestItem>) => {
|
|
|
43
41
|
{item.type === 'image' && <img className='aspect-video object-contain' src={item.imageUrl} />}
|
|
44
42
|
{item.type === 'video' && (
|
|
45
43
|
<video
|
|
46
|
-
className='
|
|
44
|
+
className='is-full aspect-video object-cover rounded-md'
|
|
47
45
|
src={item.videoUrl}
|
|
48
46
|
playsInline
|
|
49
47
|
autoPlay
|
|
@@ -94,8 +92,9 @@ const meta = {
|
|
|
94
92
|
title: 'plugins/plugin-thread/ResponsiveGrid',
|
|
95
93
|
component: ResponsiveGrid as any,
|
|
96
94
|
render: DefaultStory,
|
|
97
|
-
decorators: [withTheme
|
|
95
|
+
decorators: [withTheme],
|
|
98
96
|
parameters: {
|
|
97
|
+
layout: 'fullscreen',
|
|
99
98
|
translations,
|
|
100
99
|
},
|
|
101
100
|
} satisfies Meta<typeof DefaultStory>;
|
|
@@ -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
|
/>
|
|
@@ -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,36 +4,28 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
CollaborationActions,
|
|
10
|
-
LayoutAction,
|
|
11
|
-
createIntent,
|
|
12
|
-
useCapabilities,
|
|
13
|
-
useCapability,
|
|
14
|
-
useIntentDispatcher,
|
|
15
|
-
} from '@dxos/app-framework';
|
|
7
|
+
import { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';
|
|
8
|
+
import { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
|
|
16
9
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
17
|
-
import { Ref,
|
|
10
|
+
import { Ref, getSpace, useQuery } from '@dxos/react-client/echo';
|
|
18
11
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
19
|
-
import {
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
20
13
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
21
14
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
22
15
|
import { Tabs } from '@dxos/react-ui-tabs';
|
|
23
16
|
import { mx } from '@dxos/react-ui-theme';
|
|
24
|
-
import { AnchoredTo } from '@dxos/
|
|
17
|
+
import { AnchoredTo, Thread } from '@dxos/types';
|
|
25
18
|
|
|
26
19
|
import { ThreadCapabilities } from '../capabilities';
|
|
27
20
|
import { CommentsContainer, type CommentsContainerProps } from '../components';
|
|
28
21
|
import { meta } from '../meta';
|
|
29
|
-
import { ThreadAction
|
|
22
|
+
import { ThreadAction } from '../types';
|
|
30
23
|
|
|
31
|
-
export const
|
|
24
|
+
export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
32
25
|
const { t } = useTranslation(meta.id);
|
|
33
26
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
34
27
|
const identity = useIdentity();
|
|
35
|
-
const
|
|
36
|
-
const subjectId = fullyQualifiedId(subject);
|
|
28
|
+
const subjectId = Obj.getDXN(subject).toString();
|
|
37
29
|
|
|
38
30
|
const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
|
|
39
31
|
const drafts = state.drafts[subjectId];
|
|
@@ -53,18 +45,18 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
53
45
|
);
|
|
54
46
|
|
|
55
47
|
const space = getSpace(subject);
|
|
56
|
-
const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
|
|
48
|
+
const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
|
|
57
49
|
const anchors = objectsAnchoredTo
|
|
58
50
|
.toSorted((a, b) => sort?.(a, b) ?? 0)
|
|
59
|
-
.filter((anchor) => Obj.instanceOf(
|
|
51
|
+
.filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
|
|
60
52
|
.concat(drafts ?? []);
|
|
61
53
|
|
|
62
54
|
const attended = useAttended();
|
|
63
55
|
|
|
64
56
|
const handleAttend = useCallback(
|
|
65
|
-
(anchor: AnchoredTo) => {
|
|
66
|
-
const thread = Relation.getSource(anchor) as
|
|
67
|
-
const threadId =
|
|
57
|
+
(anchor: AnchoredTo.AnchoredTo) => {
|
|
58
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
59
|
+
const threadId = Obj.getDXN(thread).toString();
|
|
68
60
|
|
|
69
61
|
if (state.current !== threadId) {
|
|
70
62
|
state.current = threadId;
|
|
@@ -75,7 +67,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
75
67
|
void dispatch(
|
|
76
68
|
createIntent(LayoutAction.ScrollIntoView, {
|
|
77
69
|
part: 'current',
|
|
78
|
-
subject:
|
|
70
|
+
subject: Obj.getDXN(subject).toString(),
|
|
79
71
|
options: {
|
|
80
72
|
cursor: anchor.anchor,
|
|
81
73
|
ref: threadId,
|
|
@@ -88,37 +80,52 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
88
80
|
);
|
|
89
81
|
|
|
90
82
|
const handleComment = useCallback(
|
|
91
|
-
async (anchor: AnchoredTo, text: string) => {
|
|
83
|
+
async (anchor: AnchoredTo.AnchoredTo, text: string) => {
|
|
92
84
|
await dispatch(
|
|
93
|
-
createIntent(ThreadAction.AddMessage, {
|
|
85
|
+
createIntent(ThreadAction.AddMessage, {
|
|
86
|
+
anchor,
|
|
87
|
+
subject,
|
|
88
|
+
sender: { identityDid: identity?.did },
|
|
89
|
+
text,
|
|
90
|
+
}),
|
|
94
91
|
);
|
|
95
92
|
|
|
96
|
-
const thread = Relation.getSource(anchor) as
|
|
97
|
-
state.current =
|
|
93
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
94
|
+
state.current = Obj.getDXN(thread).toString();
|
|
98
95
|
},
|
|
99
96
|
[dispatch, identity, subject],
|
|
100
97
|
);
|
|
101
98
|
|
|
102
99
|
const handleResolve = useCallback(
|
|
103
|
-
(anchor: AnchoredTo) =>
|
|
104
|
-
dispatch(
|
|
100
|
+
(anchor: AnchoredTo.AnchoredTo) =>
|
|
101
|
+
dispatch(
|
|
102
|
+
createIntent(ThreadAction.ToggleResolved, {
|
|
103
|
+
thread: Relation.getSource(anchor) as Thread.Thread,
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
105
106
|
[dispatch],
|
|
106
107
|
);
|
|
107
108
|
|
|
108
109
|
const handleThreadDelete = useCallback(
|
|
109
|
-
(anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
110
|
+
(anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
|
|
110
111
|
[dispatch, subject],
|
|
111
112
|
);
|
|
112
113
|
|
|
113
114
|
const handleMessageDelete = useCallback(
|
|
114
|
-
(anchor: AnchoredTo, messageId: string) =>
|
|
115
|
-
dispatch(
|
|
115
|
+
(anchor: AnchoredTo.AnchoredTo, messageId: string) =>
|
|
116
|
+
dispatch(
|
|
117
|
+
createIntent(ThreadAction.DeleteMessage, {
|
|
118
|
+
anchor,
|
|
119
|
+
subject,
|
|
120
|
+
messageId,
|
|
121
|
+
}),
|
|
122
|
+
),
|
|
116
123
|
[dispatch, subject],
|
|
117
124
|
);
|
|
118
125
|
|
|
119
126
|
const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
|
|
120
127
|
async (anchor, messageId) => {
|
|
121
|
-
const thread = Relation.getSource(anchor) as
|
|
128
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
122
129
|
const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
|
|
123
130
|
const message = thread.messages[messageIndex]?.target;
|
|
124
131
|
const proposal = message?.blocks.find((block) => block._tag === 'proposal');
|
|
@@ -153,7 +160,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
153
160
|
);
|
|
154
161
|
|
|
155
162
|
return (
|
|
156
|
-
<StackItem.Content toolbar
|
|
163
|
+
<StackItem.Content toolbar>
|
|
157
164
|
<Tabs.Root
|
|
158
165
|
value={showResolvedThreads ? 'all' : 'unresolved'}
|
|
159
166
|
orientation='horizontal'
|
|
@@ -163,7 +170,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
163
170
|
onValueChange={onChangeViewState}
|
|
164
171
|
>
|
|
165
172
|
{/* TODO(burdon): Standardize (like Tollbar). */}
|
|
166
|
-
<Tabs.Tablist classNames={mx('bg-toolbarSurface border-
|
|
173
|
+
<Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
|
|
167
174
|
<Tabs.Tab value='unresolved' classNames='text-sm'>
|
|
168
175
|
{t('show unresolved label')}
|
|
169
176
|
</Tabs.Tab>
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
8
8
|
import { ControlPage } from '@dxos/react-ui-form';
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
import { meta } from '../meta';
|
|
11
11
|
import type { ThreadSettingsProps } from '../types';
|
|
12
12
|
|
|
13
|
-
export const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
export const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
+
const { t: _t } = useTranslation(meta.id);
|
|
16
15
|
return <ControlPage></ControlPage>;
|
|
17
16
|
};
|
package/src/components/index.ts
CHANGED
|
@@ -4,9 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import { lazy } from 'react';
|
|
6
6
|
|
|
7
|
-
export const ChannelContainer = lazy(() => import('./ChannelContainer'));
|
|
8
|
-
export const ChatContainer = lazy(() => import('./ChatContainer'));
|
|
9
|
-
|
|
10
7
|
// TODO(wittjosiah): Suspense boundary for sidebar?
|
|
11
8
|
export * from './Call';
|
|
12
9
|
export * from './CallDebugPanel';
|
|
@@ -14,5 +11,8 @@ export * from './CallSidebar';
|
|
|
14
11
|
export * from './CommentsContainer';
|
|
15
12
|
export * from './CommentsThreadContainer';
|
|
16
13
|
export * from './MessageContainer';
|
|
17
|
-
export * from './
|
|
14
|
+
export * from './ThreadCompanion';
|
|
18
15
|
export * from './ThreadSettings';
|
|
16
|
+
|
|
17
|
+
export const ChannelContainer = lazy(() => import('./ChannelContainer'));
|
|
18
|
+
export const ChatContainer = lazy(() => import('./ChatContainer'));
|
|
@@ -6,17 +6,15 @@ 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, Thread } from '@dxos/types';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
export const createCommentThread = (identity: Identity): ThreadType => {
|
|
14
|
-
return Obj.make(ThreadType, {
|
|
11
|
+
export const createCommentThread = (identity: Identity): Thread.Thread => {
|
|
12
|
+
return Thread.make({
|
|
15
13
|
name: 'Comment',
|
|
16
14
|
messages: faker.helpers.multiple(
|
|
17
15
|
() =>
|
|
18
16
|
Ref.make(
|
|
19
|
-
Obj.make(
|
|
17
|
+
Obj.make(Message.Message, {
|
|
20
18
|
created: new Date().toISOString(),
|
|
21
19
|
sender: {
|
|
22
20
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
@@ -30,13 +28,13 @@ export const createCommentThread = (identity: Identity): ThreadType => {
|
|
|
30
28
|
});
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
export const createProposalThread = (identity: Identity):
|
|
34
|
-
return
|
|
31
|
+
export const createProposalThread = (identity: Identity): Thread.Thread => {
|
|
32
|
+
return Thread.make({
|
|
35
33
|
name: 'Proposal',
|
|
36
34
|
messages: faker.helpers.multiple(
|
|
37
35
|
() =>
|
|
38
36
|
Ref.make(
|
|
39
|
-
Obj.make(
|
|
37
|
+
Obj.make(Message.Message, {
|
|
40
38
|
created: new Date().toISOString(),
|
|
41
39
|
sender: {
|
|
42
40
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
@@ -9,11 +9,11 @@ import { computed, effect } from '@preact/signals-core';
|
|
|
9
9
|
import { type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
|
|
10
10
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
11
11
|
import { type Markdown } from '@dxos/plugin-markdown/types';
|
|
12
|
-
import { createDocAccessor,
|
|
12
|
+
import { createDocAccessor, getSource, getSpace, getTextInRange } from '@dxos/react-client/echo';
|
|
13
13
|
import { comments, createExternalCommentSync } from '@dxos/react-ui-editor';
|
|
14
|
-
import { AnchoredTo } from '@dxos/
|
|
14
|
+
import { AnchoredTo, Thread } from '@dxos/types';
|
|
15
15
|
|
|
16
|
-
import { ThreadAction, type ThreadState
|
|
16
|
+
import { 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
|
}
|