@dxos/plugin-thread 0.8.4-main.422d1c7879 → 0.8.4-main.4f23b4e393
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/neutral/CallDebugPanel-CXWTCS7A.mjs +172 -0
- package/dist/lib/neutral/CallDebugPanel-CXWTCS7A.mjs.map +7 -0
- package/dist/lib/neutral/CallSidebar-4USJZ2SB.mjs +25 -0
- package/dist/lib/neutral/CallSidebar-4USJZ2SB.mjs.map +7 -0
- package/dist/lib/neutral/ChannelChat-6YTD5HWL.mjs +10 -0
- package/dist/lib/neutral/ChannelContainer-XHBF2NCK.mjs +9 -0
- package/dist/lib/neutral/ThreadCompanion-NQWPS2H6.mjs +208 -0
- package/dist/lib/neutral/ThreadCompanion-NQWPS2H6.mjs.map +7 -0
- package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs +61 -0
- package/dist/lib/neutral/ThreadContainer-XYEPEOSD.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.mjs +89 -0
- package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
- package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/ThreadSettings-5Z5XIHG3.mjs +15 -0
- package/dist/lib/neutral/ThreadSettings-5Z5XIHG3.mjs.map +7 -0
- package/dist/lib/{browser/add-message-VPPFFLFL.mjs → neutral/add-message-HV5R66K4.mjs} +12 -22
- package/dist/lib/neutral/add-message-HV5R66K4.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-JDLHZ4XO.mjs +173 -0
- package/dist/lib/neutral/app-graph-builder-JDLHZ4XO.mjs.map +7 -0
- package/dist/lib/neutral/append-channel-message-PO33DR5V.mjs +40 -0
- package/dist/lib/neutral/append-channel-message-PO33DR5V.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
- package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/call-manager-JFA4DLWR.mjs +24 -0
- package/dist/lib/neutral/call-manager-JFA4DLWR.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +29 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-44D7D4ZX.mjs +20 -0
- package/dist/lib/neutral/chunk-44D7D4ZX.mjs.map +7 -0
- package/dist/lib/{browser/blueprints/index.mjs → neutral/chunk-5T5LPLBN.mjs} +5 -6
- package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
- package/dist/lib/neutral/chunk-CROE4U4O.mjs +100 -0
- package/dist/lib/neutral/chunk-CROE4U4O.mjs.map +7 -0
- package/dist/lib/neutral/chunk-D5LGFCUY.mjs +55 -0
- package/dist/lib/neutral/chunk-D5LGFCUY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-FWSMZWBO.mjs +178 -0
- package/dist/lib/neutral/chunk-FWSMZWBO.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs +38 -0
- package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
- package/dist/lib/neutral/chunk-KRXHIW4P.mjs +164 -0
- package/dist/lib/neutral/chunk-KRXHIW4P.mjs.map +7 -0
- package/dist/lib/neutral/chunk-MXJYXUS2.mjs +8 -0
- package/dist/lib/neutral/chunk-MXJYXUS2.mjs.map +7 -0
- package/dist/lib/{browser/chunk-VPM44Z35.mjs → neutral/chunk-OZRSYMYO.mjs} +101 -85
- package/dist/lib/neutral/chunk-OZRSYMYO.mjs.map +7 -0
- package/dist/lib/{browser/index.mjs → neutral/chunk-PZ7WTAA2.mjs} +88 -900
- package/dist/lib/neutral/chunk-PZ7WTAA2.mjs.map +7 -0
- package/dist/lib/neutral/chunk-S2AKEA2K.mjs +202 -0
- package/dist/lib/neutral/chunk-S2AKEA2K.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +1230 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +19 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/{browser/create-UGT7V733.mjs → neutral/create-C3CICN35.mjs} +8 -11
- package/dist/lib/neutral/create-C3CICN35.mjs.map +7 -0
- package/dist/lib/neutral/create-channel-UEQESOFT.mjs +19 -0
- package/dist/lib/neutral/create-channel-UEQESOFT.mjs.map +7 -0
- package/dist/lib/neutral/create-object-HIEWSBZB.mjs +27 -0
- package/dist/lib/neutral/create-object-HIEWSBZB.mjs.map +7 -0
- package/dist/lib/{browser/create-proposals-CMK7S7VS.mjs → neutral/create-proposals-OZ4NCBBS.mjs} +5 -6
- package/dist/lib/neutral/create-proposals-OZ4NCBBS.mjs.map +7 -0
- package/dist/lib/{browser/delete-FSFVU6ZA.mjs → neutral/delete-AVFYFWMY.mjs} +8 -10
- package/dist/lib/neutral/delete-AVFYFWMY.mjs.map +7 -0
- package/dist/lib/{browser/delete-message-XL5M5J33.mjs → neutral/delete-message-EV2MKRTB.mjs} +9 -19
- package/dist/lib/neutral/delete-message-EV2MKRTB.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +19 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +68 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/markdown-BUORNCPG.mjs +83 -0
- package/dist/lib/neutral/markdown-BUORNCPG.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +10 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/on-create-space-NQF7WGEB.mjs +23 -0
- package/dist/lib/neutral/on-create-space-NQF7WGEB.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
- package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-root-VMMNUSSL.mjs +18 -0
- package/dist/lib/neutral/react-root-VMMNUSSL.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-WPSVOTVG.mjs +94 -0
- package/dist/lib/neutral/react-surface-WPSVOTVG.mjs.map +7 -0
- package/dist/lib/{browser/restore-2ZGMKUSD.mjs → neutral/restore-MGLYOJ3Y.mjs} +6 -7
- package/dist/lib/neutral/restore-MGLYOJ3Y.mjs.map +7 -0
- package/dist/lib/{browser/restore-message-OYEGWPII.mjs → neutral/restore-message-ZIOA2MQJ.mjs} +8 -17
- package/dist/lib/neutral/restore-message-ZIOA2MQJ.mjs.map +7 -0
- package/dist/lib/{browser/select-VG2XLULE.mjs → neutral/select-CVCGBDHA.mjs} +7 -9
- package/dist/lib/neutral/select-CVCGBDHA.mjs.map +7 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
- package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
- package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +58 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/{browser/toggle-resolved-MM6YC5BU.mjs → neutral/toggle-resolved-ZM4BHON5.mjs} +8 -17
- package/dist/lib/neutral/toggle-resolved-ZM4BHON5.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +90 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +12 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
- package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
- package/dist/types/src/ThreadPlugin.d.ts +1 -0
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
- package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
- package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
- package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts +2 -2
- package/dist/types/src/blueprints/thread-blueprint.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.map +1 -1
- package/dist/types/src/calls/speaking-monitor.d.ts +0 -3
- package/dist/types/src/calls/speaking-monitor.d.ts.map +1 -1
- package/dist/types/src/calls/types.d.ts.map +1 -1
- package/dist/types/src/calls/util/audio.d.ts.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +2 -2
- package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
- package/dist/types/src/calls/util/history-cache.d.ts.map +1 -1
- package/dist/types/src/calls/util/media.d.ts.map +1 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
- package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -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 +2 -2
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +11 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +9 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -1
- package/dist/types/src/components/Call/Call.d.ts +32 -4
- package/dist/types/src/components/Call/Call.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts +5 -5
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Chat/Chat.d.ts +51 -0
- package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
- package/dist/types/src/components/Chat/index.d.ts +2 -0
- package/dist/types/src/components/Chat/index.d.ts.map +1 -0
- package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -1
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +70 -70
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -1
- package/dist/types/src/components/Lobby/Lobby.d.ts +24 -3
- 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/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +70 -70
- 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/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +70 -70
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +70 -70
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +20 -0
- package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelChat/index.d.ts +4 -0
- package/dist/types/src/containers/ChannelChat/index.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +1 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +70 -70
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -1
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts +20 -0
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts.map +1 -0
- package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadContainer/ThreadContainer.stories.d.ts} +71 -71
- package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadContainer/index.d.ts +4 -0
- package/dist/types/src/containers/ThreadContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +2 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +3 -3
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/operations/add-message.d.ts +3 -3
- package/dist/types/src/operations/add-message.d.ts.map +1 -1
- package/dist/types/src/operations/append-channel-message.d.ts +5 -0
- package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
- package/dist/types/src/operations/create-channel.d.ts +3 -3
- package/dist/types/src/operations/create-channel.d.ts.map +1 -1
- package/dist/types/src/operations/create-proposals.d.ts +3 -3
- package/dist/types/src/operations/create-proposals.d.ts.map +1 -1
- package/dist/types/src/operations/create.d.ts +3 -3
- package/dist/types/src/operations/create.d.ts.map +1 -1
- package/dist/types/src/operations/delete-message.d.ts +3 -3
- package/dist/types/src/operations/delete-message.d.ts.map +1 -1
- package/dist/types/src/operations/delete.d.ts +3 -3
- package/dist/types/src/operations/delete.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +1 -2
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/on-create-space.d.ts +3 -3
- package/dist/types/src/operations/on-create-space.d.ts.map +1 -1
- package/dist/types/src/operations/restore-message.d.ts +3 -3
- package/dist/types/src/operations/restore-message.d.ts.map +1 -1
- package/dist/types/src/operations/restore.d.ts +3 -3
- package/dist/types/src/operations/restore.d.ts.map +1 -1
- package/dist/types/src/operations/select.d.ts +3 -3
- package/dist/types/src/operations/select.d.ts.map +1 -1
- package/dist/types/src/operations/toggle-resolved.d.ts +3 -3
- package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +70 -70
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/ThreadCapabilities.d.ts +26 -0
- package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
- package/dist/types/src/{operations/definitions.d.ts → types/ThreadOperation.d.ts} +864 -1673
- package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +124 -86
- package/src/ThreadPlugin.node.ts +39 -0
- package/src/ThreadPlugin.test.ts +37 -0
- package/src/ThreadPlugin.tsx +13 -57
- package/src/blueprints/thread-blueprint.ts +3 -4
- package/src/calls/util/calls-service.ts +3 -1
- package/src/calls/util/stub-media-streams.ts +3 -1
- package/src/capabilities/app-graph-builder.ts +21 -19
- package/src/capabilities/blueprint-definition.ts +2 -0
- package/src/capabilities/call-manager.ts +1 -1
- package/src/capabilities/create-object.ts +29 -0
- package/src/capabilities/index.ts +3 -1
- package/src/capabilities/markdown.ts +6 -2
- package/src/capabilities/operation-handler.ts +1 -1
- package/src/capabilities/react-surface.tsx +13 -7
- package/src/capabilities/settings.ts +1 -3
- package/src/capabilities/undo-mappings.ts +1 -1
- package/src/components/Call/Call.tsx +5 -5
- package/src/components/Call/Toolbar.tsx +1 -1
- package/src/components/Chat/Chat.tsx +258 -0
- package/src/components/Chat/index.ts +5 -0
- package/src/components/CommentsPanel/CommentsPanel.stories.tsx +6 -4
- package/src/components/CommentsPanel/CommentsPanel.tsx +4 -4
- package/src/components/CommentsPanel/CommentsThread.tsx +2 -3
- package/src/components/Lobby/Lobby.tsx +5 -4
- package/src/components/MessagePanel/MessagePanel.tsx +8 -9
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +2 -1
- package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +2 -1
- package/src/components/ResponsiveGrid/ResponsivePanel.tsx +3 -5
- package/src/components/ThreadSettings/ThreadSettings.stories.tsx +2 -1
- package/src/components/index.ts +1 -0
- package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
- package/src/containers/ChannelChat/index.ts +8 -0
- package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +54 -10
- package/src/containers/ChannelContainer/ChannelContainer.tsx +4 -4
- package/src/containers/ThreadCompanion/ThreadCompanion.tsx +10 -12
- package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadContainer/ThreadContainer.stories.tsx} +10 -11
- package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
- package/src/containers/ThreadContainer/index.ts +8 -0
- package/src/containers/index.ts +2 -1
- package/src/extensions/command.ts +1 -1
- package/src/extensions/threads.ts +9 -9
- package/src/hooks/analytics.ts +1 -1
- package/src/index.ts +4 -3
- package/src/operations/add-message.ts +7 -7
- package/src/operations/append-channel-message.ts +37 -0
- package/src/operations/create-channel.ts +4 -4
- package/src/operations/create-proposals.ts +3 -3
- package/src/operations/create.ts +4 -4
- package/src/operations/delete-message.ts +6 -6
- package/src/operations/delete.ts +4 -4
- package/src/operations/index.ts +2 -4
- package/src/operations/on-create-space.ts +4 -4
- package/src/operations/restore-message.ts +5 -5
- package/src/operations/restore.ts +4 -4
- package/src/operations/select.ts +3 -3
- package/src/operations/toggle-resolved.ts +5 -5
- package/src/plugin.ts +11 -0
- package/src/testing/index.ts +1 -1
- package/src/translations.ts +1 -1
- package/src/types/ThreadCapabilities.ts +41 -0
- package/src/{operations/definitions.ts → types/ThreadOperation.ts} +14 -13
- package/src/types/index.ts +4 -2
- package/src/types/types.ts +0 -2
- package/src/util.ts +36 -4
- package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
- package/dist/lib/browser/blueprints/index.mjs.map +0 -7
- package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
- package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
- package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
- package/dist/lib/browser/create-UGT7V733.mjs.map +0 -7
- package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
- package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
- package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
- package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
- package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
- package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
- package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
- package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -14
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
- package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
- package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
- package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -12
- package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
- package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
- package/dist/lib/node-esm/blueprints/index.mjs +0 -38
- package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
- package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
- package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
- package/dist/lib/node-esm/create-XAYNDVU2.mjs +0 -56
- package/dist/lib/node-esm/create-XAYNDVU2.mjs.map +0 -7
- package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
- package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
- package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
- package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
- package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
- package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
- package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
- package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
- package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
- package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -2335
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
- package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -15
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
- package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
- package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
- package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
- package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
- package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
- package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
- package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -13
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
- package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
- package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
- package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
- package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/testing/stories.d.ts +0 -3
- package/dist/types/src/testing/stories.d.ts.map +0 -1
- package/dist/types/src/types/Channel.d.ts +0 -715
- package/dist/types/src/types/Channel.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -24
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
- package/src/containers/ChatContainer/index.ts +0 -8
- package/src/operations/create-channel-thread.ts +0 -26
- package/src/testing/stories.ts +0 -51
- package/src/types/Channel.ts +0 -37
- package/src/types/capabilities.ts +0 -36
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/ChannelChat-6YTD5HWL.mjs.map} +0 -0
- /package/dist/lib/{browser/types/index.mjs.map → neutral/ChannelContainer-XHBF2NCK.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
|
@@ -28,7 +28,9 @@ export default Capability.makeModule(
|
|
|
28
28
|
return threads({ registry, stateAtom }, doc, invokePromise);
|
|
29
29
|
},
|
|
30
30
|
({ document: doc }) => {
|
|
31
|
-
if (!doc)
|
|
31
|
+
if (!doc) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
32
34
|
const registry = capabilities.get(Capabilities.AtomRegistry);
|
|
33
35
|
const stateAtom = capabilities.get(ThreadCapabilities.State);
|
|
34
36
|
|
|
@@ -45,7 +47,9 @@ export default Capability.makeModule(
|
|
|
45
47
|
});
|
|
46
48
|
},
|
|
47
49
|
({ document: doc }) => {
|
|
48
|
-
if (!doc)
|
|
50
|
+
if (!doc) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
49
53
|
const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
|
|
50
54
|
|
|
51
55
|
return EditorView.updateListener.of((update) => {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
8
|
-
import type { OperationHandlerSet } from '@dxos/
|
|
8
|
+
import type { OperationHandlerSet } from '@dxos/compute';
|
|
9
9
|
|
|
10
10
|
import { ThreadOperationHandlerSet } from '#operations';
|
|
11
11
|
|
|
@@ -10,12 +10,19 @@ import { Capabilities, Capability } from '@dxos/app-framework';
|
|
|
10
10
|
import { Surface, useCapability, useSettingsState } from '@dxos/app-framework/ui';
|
|
11
11
|
import { AppSurface } from '@dxos/app-toolkit/ui';
|
|
12
12
|
import { getSpace } from '@dxos/react-client/echo';
|
|
13
|
-
import { Thread } from '@dxos/types';
|
|
13
|
+
import { Channel, Thread } from '@dxos/types';
|
|
14
14
|
|
|
15
15
|
import { ThreadSettings } from '#components';
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
CallDebugPanel,
|
|
18
|
+
CallSidebar,
|
|
19
|
+
ChannelChat,
|
|
20
|
+
ChannelContainer,
|
|
21
|
+
ThreadCompanion,
|
|
22
|
+
ThreadContainer,
|
|
23
|
+
} from '#containers';
|
|
17
24
|
import { meta } from '#meta';
|
|
18
|
-
import {
|
|
25
|
+
import { ThreadCapabilities, type Settings } from '#types';
|
|
19
26
|
|
|
20
27
|
export default Capability.makeModule(() =>
|
|
21
28
|
Effect.succeed(
|
|
@@ -35,12 +42,11 @@ export default Capability.makeModule(() =>
|
|
|
35
42
|
),
|
|
36
43
|
component: ({ data: { companionTo: channel } }) => {
|
|
37
44
|
const space = getSpace(channel);
|
|
38
|
-
|
|
39
|
-
if (!space || !thread) {
|
|
45
|
+
if (!space) {
|
|
40
46
|
return null;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
|
-
return <
|
|
49
|
+
return <ChannelChat channel={channel} space={space} />;
|
|
44
50
|
},
|
|
45
51
|
}),
|
|
46
52
|
Surface.create({
|
|
@@ -52,7 +58,7 @@ export default Capability.makeModule(() =>
|
|
|
52
58
|
return null;
|
|
53
59
|
}
|
|
54
60
|
|
|
55
|
-
return <
|
|
61
|
+
return <ThreadContainer thread={subject} space={space} />;
|
|
56
62
|
},
|
|
57
63
|
}),
|
|
58
64
|
Surface.create({
|
|
@@ -9,9 +9,7 @@ import { AppCapabilities } from '@dxos/app-toolkit';
|
|
|
9
9
|
import { createKvsStore } from '@dxos/effect';
|
|
10
10
|
|
|
11
11
|
import { meta } from '#meta';
|
|
12
|
-
import { Settings } from '#types';
|
|
13
|
-
|
|
14
|
-
import { ThreadCapabilities } from '../types/capabilities';
|
|
12
|
+
import { Settings, ThreadCapabilities } from '#types';
|
|
15
13
|
|
|
16
14
|
export default Capability.makeModule(() =>
|
|
17
15
|
Effect.sync(() => {
|
|
@@ -7,7 +7,7 @@ import * as Effect from 'effect/Effect';
|
|
|
7
7
|
import { Capabilities, Capability, UndoMapping } from '@dxos/app-framework';
|
|
8
8
|
|
|
9
9
|
import { meta } from '#meta';
|
|
10
|
-
import { ThreadOperation } from '#
|
|
10
|
+
import { ThreadOperation } from '#types';
|
|
11
11
|
|
|
12
12
|
export default Capability.makeModule(
|
|
13
13
|
Effect.fnUntraced(function* () {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
|
-
import React, { type
|
|
6
|
+
import React, { type PropsWithChildren } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useCapability } from '@dxos/app-framework/ui';
|
|
9
9
|
import { type ThemedClassName } from '@dxos/react-ui';
|
|
@@ -21,7 +21,7 @@ import { Toolbar, type ToolbarProps } from './Toolbar';
|
|
|
21
21
|
|
|
22
22
|
type CallRootProps = PropsWithChildren<ThemedClassName>;
|
|
23
23
|
|
|
24
|
-
const CallRoot
|
|
24
|
+
const CallRoot = ({ children }: CallRootProps) => {
|
|
25
25
|
return <div className='relative dx-container flex flex-col'>{children}</div>;
|
|
26
26
|
};
|
|
27
27
|
|
|
@@ -33,7 +33,7 @@ CallRoot.displayName = 'CallRoot';
|
|
|
33
33
|
|
|
34
34
|
type CallAudioProps = {};
|
|
35
35
|
|
|
36
|
-
const CallAudio
|
|
36
|
+
const CallAudio = (_props: CallAudioProps) => {
|
|
37
37
|
const call = useCapability(ThreadCapabilities.CallManager);
|
|
38
38
|
const audioTracksToPlay = useAtomValue(call.audioTracksToPlayAtom);
|
|
39
39
|
|
|
@@ -50,7 +50,7 @@ type CallGridProps = {
|
|
|
50
50
|
fullscreen?: boolean;
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
-
const CallGrid
|
|
53
|
+
const CallGrid = ({ fullscreen }: CallGridProps) => {
|
|
54
54
|
const debug = useDebugMode();
|
|
55
55
|
const call = useCapability(ThreadCapabilities.CallManager);
|
|
56
56
|
const self = useAtomValue(call.selfAtom);
|
|
@@ -71,7 +71,7 @@ CallGrid.displayName = 'CallGrid';
|
|
|
71
71
|
|
|
72
72
|
type CallToolbarProps = Pick<ToolbarProps, 'channel' | 'onLeave'>;
|
|
73
73
|
|
|
74
|
-
const CallToolbar
|
|
74
|
+
const CallToolbar = (props: CallToolbarProps) => {
|
|
75
75
|
return (
|
|
76
76
|
<div className='absolute bottom-0 left-0 right-0 flex justify-center'>
|
|
77
77
|
<Toolbar isInRoom {...props} />
|
|
@@ -19,11 +19,11 @@ import {
|
|
|
19
19
|
toLocalizedString,
|
|
20
20
|
useTranslation,
|
|
21
21
|
} from '@dxos/react-ui';
|
|
22
|
+
import { type Channel } from '@dxos/types';
|
|
22
23
|
import { groupHoverControlItemWithTransition, mx } from '@dxos/ui-theme';
|
|
23
24
|
|
|
24
25
|
import { meta } from '#meta';
|
|
25
26
|
import { ThreadCapabilities } from '#types';
|
|
26
|
-
import { type Channel } from '#types';
|
|
27
27
|
|
|
28
28
|
export type ToolbarProps = ThemedClassName<{
|
|
29
29
|
channel?: Channel.Channel;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { type RefObject, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type SpaceMember } from '@dxos/react-client/echo';
|
|
8
|
+
import { type Identity } from '@dxos/react-client/halo';
|
|
9
|
+
import { ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
|
|
10
|
+
import {
|
|
11
|
+
type MessageMetadata,
|
|
12
|
+
MessageTextbox,
|
|
13
|
+
Thread as ThreadComponent,
|
|
14
|
+
type ThreadRootProps,
|
|
15
|
+
threadLayout,
|
|
16
|
+
} from '@dxos/react-ui-thread';
|
|
17
|
+
import { type Message } from '@dxos/types';
|
|
18
|
+
import { createBasicExtensions, createThemeExtensions, listener, type Extension } from '@dxos/ui-editor';
|
|
19
|
+
import { composable, composableProps, mx } from '@dxos/ui-theme';
|
|
20
|
+
import { isNonNullable } from '@dxos/util';
|
|
21
|
+
|
|
22
|
+
import { meta } from '#meta';
|
|
23
|
+
|
|
24
|
+
import { command } from '../../extensions';
|
|
25
|
+
import { getMessageMetadata } from '../../util';
|
|
26
|
+
import { MessagePanel } from '../MessagePanel';
|
|
27
|
+
|
|
28
|
+
export type ChatProps = ThemedClassName<
|
|
29
|
+
{
|
|
30
|
+
/** Stable id used for the underlying thread root and message metadata. */
|
|
31
|
+
id: string;
|
|
32
|
+
/** Identity used to attribute outgoing messages in the textbox metadata. */
|
|
33
|
+
identity?: Identity;
|
|
34
|
+
/** Space members for rendering sender names/avatars on incoming messages. */
|
|
35
|
+
members: SpaceMember[];
|
|
36
|
+
/** Messages to render in order. */
|
|
37
|
+
messages: readonly Message.Message[];
|
|
38
|
+
/** Activity indicator (e.g. processing) shown beneath the textbox. */
|
|
39
|
+
activity?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Called with the user's textbox content when they press send.
|
|
42
|
+
* Returning `true` signals the message was accepted; the textbox is then cleared.
|
|
43
|
+
*/
|
|
44
|
+
onSend: (text: string) => boolean;
|
|
45
|
+
autoFocusTextbox?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Where the composer sits relative to the messages.
|
|
48
|
+
* - `'top'` (default) — composer follows the messages at intrinsic height,
|
|
49
|
+
* suitable for inline comment threads.
|
|
50
|
+
* - `'bottom'` — composer pinned to the bottom of the panel, messages
|
|
51
|
+
* scrolling above it. Suitable for full-panel multi-party chat.
|
|
52
|
+
*/
|
|
53
|
+
orientation?: ChatOrientation;
|
|
54
|
+
/**
|
|
55
|
+
* When true, hide the composer textbox and activity indicator. Used for
|
|
56
|
+
* channels whose source-of-truth lives elsewhere (e.g. externally-synced
|
|
57
|
+
* Slack/Discord channels keyed by a foreign id) — sending isn't meaningful
|
|
58
|
+
* because there is no local-write path back to the source.
|
|
59
|
+
*/
|
|
60
|
+
readOnly?: boolean;
|
|
61
|
+
} & Pick<ThreadRootProps, 'current'>
|
|
62
|
+
>;
|
|
63
|
+
|
|
64
|
+
export type ChatOrientation = 'top' | 'bottom';
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Pure chat UI: scrollable message list + composer textbox + activity indicator.
|
|
68
|
+
* Owns its own UI state (textbox content, scroll position, editor extensions) but
|
|
69
|
+
* does not load data or invoke operations — the caller passes messages and an
|
|
70
|
+
* `onSend` callback. Used by both `ThreadContainer` (AutoMerge `Thread`) and
|
|
71
|
+
* `ChannelContainer`'s feed-backed channel chat.
|
|
72
|
+
*/
|
|
73
|
+
export const Chat = composable<HTMLDivElement, ChatProps>(
|
|
74
|
+
(
|
|
75
|
+
{
|
|
76
|
+
id,
|
|
77
|
+
identity,
|
|
78
|
+
members,
|
|
79
|
+
messages,
|
|
80
|
+
activity,
|
|
81
|
+
onSend,
|
|
82
|
+
autoFocusTextbox,
|
|
83
|
+
current,
|
|
84
|
+
orientation = 'top',
|
|
85
|
+
readOnly,
|
|
86
|
+
...props
|
|
87
|
+
},
|
|
88
|
+
forwardedRef,
|
|
89
|
+
) => {
|
|
90
|
+
const { t } = useTranslation(meta.id);
|
|
91
|
+
const { themeMode } = useThemeContext();
|
|
92
|
+
|
|
93
|
+
const scrollRef = useRef<HTMLDivElement | null>(null);
|
|
94
|
+
const sentinelRef = useRef<HTMLDivElement | null>(null);
|
|
95
|
+
const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
|
|
96
|
+
|
|
97
|
+
// Force the editor to remount after a successful send so its content resets.
|
|
98
|
+
const [_count, _setCount] = useState(0);
|
|
99
|
+
|
|
100
|
+
const textboxMetadata = getMessageMetadata(id, identity);
|
|
101
|
+
const messageRef = useRef('');
|
|
102
|
+
const extensions = useMemo(
|
|
103
|
+
() => [
|
|
104
|
+
createBasicExtensions({ placeholder: t('message.placeholder') }),
|
|
105
|
+
createThemeExtensions({ themeMode }),
|
|
106
|
+
listener({ onChange: ({ text }) => (messageRef.current = text) }),
|
|
107
|
+
command,
|
|
108
|
+
],
|
|
109
|
+
[themeMode, _count],
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const scrollToEnd = (behavior: ScrollBehavior) =>
|
|
113
|
+
setTimeout(() => sentinelRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);
|
|
114
|
+
|
|
115
|
+
useLayoutEffect(() => {
|
|
116
|
+
scrollToEnd('instant');
|
|
117
|
+
}, []);
|
|
118
|
+
// NOTE: Auto-scroll on new messages is intentionally not implemented here. Smooth-scroll
|
|
119
|
+
// animations were causing ResizeObserver feedback loops with CodeMirror/ScrollArea. The
|
|
120
|
+
// proper fix is "scroll only if user is already at the bottom" — deferred to a follow-up.
|
|
121
|
+
|
|
122
|
+
const handleSend = () => {
|
|
123
|
+
const text = messageRef.current;
|
|
124
|
+
if (!text?.length) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const accepted = onSend(text);
|
|
129
|
+
if (!accepted) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
messageRef.current = '';
|
|
134
|
+
setAutoFocus(true);
|
|
135
|
+
scrollToEnd('smooth');
|
|
136
|
+
_setCount((count) => count + 1);
|
|
137
|
+
return true;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const filteredMessages = messages.filter(isNonNullable);
|
|
141
|
+
const renderState: ChatRenderState = {
|
|
142
|
+
messages: filteredMessages,
|
|
143
|
+
members,
|
|
144
|
+
activity,
|
|
145
|
+
extensions,
|
|
146
|
+
autoFocus,
|
|
147
|
+
handleSend,
|
|
148
|
+
textboxMetadata,
|
|
149
|
+
scrollRef,
|
|
150
|
+
sentinelRef,
|
|
151
|
+
readOnly,
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
return orientation === 'bottom' ? (
|
|
155
|
+
<ChannelLayout
|
|
156
|
+
{...composableProps(props, { classNames: 'flex flex-col bs-full min-h-0' })}
|
|
157
|
+
id={id}
|
|
158
|
+
ref={forwardedRef}
|
|
159
|
+
state={renderState}
|
|
160
|
+
/>
|
|
161
|
+
) : (
|
|
162
|
+
<ThreadLayout
|
|
163
|
+
{...composableProps(props, { classNames: 'dx-container grid-rows-[1fr_min-content_min-content]' })}
|
|
164
|
+
id={id}
|
|
165
|
+
current={current}
|
|
166
|
+
ref={forwardedRef}
|
|
167
|
+
state={renderState}
|
|
168
|
+
/>
|
|
169
|
+
);
|
|
170
|
+
},
|
|
171
|
+
);
|
|
172
|
+
|
|
173
|
+
//
|
|
174
|
+
// Internal layout helpers — share state via the ChatRenderState bag.
|
|
175
|
+
//
|
|
176
|
+
|
|
177
|
+
type ChatRenderState = {
|
|
178
|
+
messages: Message.Message[];
|
|
179
|
+
members: SpaceMember[];
|
|
180
|
+
activity?: boolean;
|
|
181
|
+
extensions: Extension[];
|
|
182
|
+
autoFocus?: boolean;
|
|
183
|
+
handleSend: () => boolean;
|
|
184
|
+
textboxMetadata: MessageMetadata;
|
|
185
|
+
scrollRef: RefObject<HTMLDivElement | null>;
|
|
186
|
+
sentinelRef: RefObject<HTMLDivElement | null>;
|
|
187
|
+
readOnly?: boolean;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
type LayoutProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
191
|
+
id: string;
|
|
192
|
+
state: ChatRenderState;
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/** Thread layout — composer follows messages at intrinsic height. */
|
|
196
|
+
const ThreadLayout = React.forwardRef<HTMLDivElement, LayoutProps & Pick<ThreadRootProps, 'current'>>(
|
|
197
|
+
({ id, current, state, ...props }, ref) => {
|
|
198
|
+
const { t } = useTranslation(meta.id);
|
|
199
|
+
const { messages, members, activity, extensions, autoFocus, handleSend, textboxMetadata, sentinelRef, readOnly } =
|
|
200
|
+
state;
|
|
201
|
+
return (
|
|
202
|
+
<ThreadComponent.Root {...props} id={id} current={current} ref={ref}>
|
|
203
|
+
<ScrollArea.Root classNames='col-span-2' orientation='vertical'>
|
|
204
|
+
<ScrollArea.Viewport ref={sentinelRef}>
|
|
205
|
+
<div className={mx(threadLayout, 'place-self-end')}>
|
|
206
|
+
{messages.map((message) => (
|
|
207
|
+
<MessagePanel key={message.id} message={message} members={members} />
|
|
208
|
+
))}
|
|
209
|
+
</div>
|
|
210
|
+
</ScrollArea.Viewport>
|
|
211
|
+
</ScrollArea.Root>
|
|
212
|
+
{!readOnly && (
|
|
213
|
+
<>
|
|
214
|
+
<MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleSend} {...textboxMetadata} />
|
|
215
|
+
<ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>
|
|
216
|
+
</>
|
|
217
|
+
)}
|
|
218
|
+
</ThreadComponent.Root>
|
|
219
|
+
);
|
|
220
|
+
},
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
/** Channel layout — composer pinned to the bottom, messages scroll above it. */
|
|
224
|
+
const ChannelLayout = React.forwardRef<HTMLDivElement, LayoutProps>(({ id, state, ...props }, ref) => {
|
|
225
|
+
const { t } = useTranslation(meta.id);
|
|
226
|
+
const {
|
|
227
|
+
messages,
|
|
228
|
+
members,
|
|
229
|
+
activity,
|
|
230
|
+
extensions,
|
|
231
|
+
autoFocus,
|
|
232
|
+
handleSend,
|
|
233
|
+
textboxMetadata,
|
|
234
|
+
scrollRef,
|
|
235
|
+
sentinelRef,
|
|
236
|
+
readOnly,
|
|
237
|
+
} = state;
|
|
238
|
+
return (
|
|
239
|
+
<div {...props} id={id} ref={ref}>
|
|
240
|
+
<div ref={scrollRef} className='flex-1 min-h-0 overflow-y-auto'>
|
|
241
|
+
{messages.map((message) => (
|
|
242
|
+
<div key={message.id} className='grid grid-cols-[var(--dx-rail-size)_1fr] w-full'>
|
|
243
|
+
<MessagePanel message={message} members={members} />
|
|
244
|
+
</div>
|
|
245
|
+
))}
|
|
246
|
+
<div ref={sentinelRef} />
|
|
247
|
+
</div>
|
|
248
|
+
{!readOnly && (
|
|
249
|
+
<>
|
|
250
|
+
<div className='shrink-0 grid grid-cols-[var(--dx-rail-size)_1fr]'>
|
|
251
|
+
<MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleSend} {...textboxMetadata} />
|
|
252
|
+
</div>
|
|
253
|
+
<div className='shrink-0 px-2 pb-1 text-xs text-description'>{activity ? t('activity.message') : null}</div>
|
|
254
|
+
</>
|
|
255
|
+
)}
|
|
256
|
+
</div>
|
|
257
|
+
);
|
|
258
|
+
});
|
|
@@ -10,24 +10,26 @@ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
|
|
|
10
10
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
11
11
|
import { Obj, Query, Relation } from '@dxos/echo';
|
|
12
12
|
import { TestSchema } from '@dxos/echo/testing';
|
|
13
|
-
import { ClientPlugin } from '@dxos/plugin-client';
|
|
13
|
+
import { ClientPlugin } from '@dxos/plugin-client/plugin';
|
|
14
14
|
import { initializeIdentity } from '@dxos/plugin-client/testing';
|
|
15
15
|
import { random } from '@dxos/random';
|
|
16
|
-
import {
|
|
16
|
+
import { useQuery, useSpaces } from '@dxos/react-client/echo';
|
|
17
17
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
18
18
|
import { useAsyncEffect } from '@dxos/react-ui';
|
|
19
19
|
import { withLayout, withTheme, Loading } from '@dxos/react-ui/testing';
|
|
20
20
|
import { AnchoredTo, Message, Thread } from '@dxos/types';
|
|
21
21
|
|
|
22
|
+
import { translations } from '#translations';
|
|
23
|
+
|
|
22
24
|
import { createCommentThread, createProposalThread } from '../../testing/data';
|
|
23
|
-
import { translations } from '../../translations';
|
|
24
25
|
import { CommentsPanel } from './CommentsPanel';
|
|
25
26
|
|
|
26
27
|
random.seed(1);
|
|
27
28
|
|
|
28
29
|
const DefaultStory = () => {
|
|
29
30
|
const identity = useIdentity();
|
|
30
|
-
const
|
|
31
|
+
const [space] = useSpaces();
|
|
32
|
+
const db = space?.db;
|
|
31
33
|
const anchors = useQuery(db, Query.type(AnchoredTo.AnchoredTo));
|
|
32
34
|
|
|
33
35
|
useAsyncEffect(async () => {
|
|
@@ -41,19 +41,19 @@ export const CommentsPanel = ({ anchors, currentId, showResolvedThreads, ...prop
|
|
|
41
41
|
|
|
42
42
|
if (filteredAnchors.length === 0) {
|
|
43
43
|
return (
|
|
44
|
-
<div
|
|
44
|
+
<div className='p-form-padding'>
|
|
45
45
|
<Message.Root>
|
|
46
|
-
<Message.
|
|
46
|
+
<Message.Content>
|
|
47
47
|
<Trans
|
|
48
48
|
{...{
|
|
49
49
|
t,
|
|
50
50
|
i18nKey: 'no-comments.message',
|
|
51
51
|
components: {
|
|
52
|
-
commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='
|
|
52
|
+
commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='dx-icon-inline' />,
|
|
53
53
|
},
|
|
54
54
|
}}
|
|
55
55
|
/>
|
|
56
|
-
</Message.
|
|
56
|
+
</Message.Content>
|
|
57
57
|
</Message.Root>
|
|
58
58
|
</div>
|
|
59
59
|
);
|
|
@@ -104,7 +104,6 @@ export const CommentsThread = ({
|
|
|
104
104
|
onFocusCapture={handleAttend}
|
|
105
105
|
>
|
|
106
106
|
<div
|
|
107
|
-
role='none'
|
|
108
107
|
className={mx(
|
|
109
108
|
'col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]',
|
|
110
109
|
hoverableControls,
|
|
@@ -118,7 +117,7 @@ export const CommentsThread = ({
|
|
|
118
117
|
) : (
|
|
119
118
|
<ThreadComponent.Header>{thread.name}</ThreadComponent.Header>
|
|
120
119
|
)}
|
|
121
|
-
<div
|
|
120
|
+
<div className={buttonGroupClassNames}>
|
|
122
121
|
{thread.status === 'staged' && <Tag palette='neutral'>{t('draft.button')}</Tag>}
|
|
123
122
|
{onResolve && !(thread?.status === 'staged') && (
|
|
124
123
|
<IconButton
|
|
@@ -166,7 +165,7 @@ export const CommentsThread = ({
|
|
|
166
165
|
|
|
167
166
|
<ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>
|
|
168
167
|
|
|
169
|
-
<div
|
|
168
|
+
<div className='h-px -mt-px' ref={threadScrollRef} />
|
|
170
169
|
</ThreadComponent.Root>
|
|
171
170
|
);
|
|
172
171
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
|
-
import React, { type
|
|
6
|
+
import React, { type PropsWithChildren, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useCapability } from '@dxos/app-framework/ui';
|
|
9
9
|
import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
@@ -26,7 +26,8 @@ const SWARM_PEEK_INTERVAL = 1_000;
|
|
|
26
26
|
|
|
27
27
|
type LobbyRootProps = PropsWithChildren<ThemedClassName>;
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
// TODO(burdon): Make headless?
|
|
30
|
+
const LobbyRoot = ({ children }: LobbyRootProps) => {
|
|
30
31
|
return <div className='relative flex flex-col grow overflow-hidden group'>{children}</div>;
|
|
31
32
|
};
|
|
32
33
|
|
|
@@ -38,7 +39,7 @@ LobbyRoot.displayName = 'LobbyRoot';
|
|
|
38
39
|
|
|
39
40
|
type LobbyPreviewProps = {};
|
|
40
41
|
|
|
41
|
-
const LobbyPreview
|
|
42
|
+
const LobbyPreview = (_props: LobbyPreviewProps) => {
|
|
42
43
|
const { t } = useTranslation(meta.id);
|
|
43
44
|
const call = useCapability(ThreadCapabilities.CallManager);
|
|
44
45
|
const media = useAtomValue(call.mediaAtom);
|
|
@@ -88,7 +89,7 @@ type LobbyToolbarProps = ThemedClassName<
|
|
|
88
89
|
} & Pick<ToolbarProps, 'onJoin'>
|
|
89
90
|
>;
|
|
90
91
|
|
|
91
|
-
const LobbyToolbar
|
|
92
|
+
const LobbyToolbar = ({ roomId, ...props }: LobbyToolbarProps) => {
|
|
92
93
|
const call = useCapability(ThreadCapabilities.CallManager);
|
|
93
94
|
const [count, setCount] = useState<number>(0);
|
|
94
95
|
|
|
@@ -82,7 +82,10 @@ export const MessagePanel = ({
|
|
|
82
82
|
(message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
|
|
83
83
|
(message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),
|
|
84
84
|
)?.identity;
|
|
85
|
-
|
|
85
|
+
// Pass `message.sender` as the fallback so externally-synced messages
|
|
86
|
+
// (Slack, etc.) display the source-side sender name instead of "Anonymous"
|
|
87
|
+
// when no DXOS identity matches.
|
|
88
|
+
const messageMetadata = getMessageMetadata(message.id, senderIdentity, message.sender);
|
|
86
89
|
const userIsAuthor = identity?.did === messageMetadata.authorId;
|
|
87
90
|
const proposalBlock = message.blocks.find((block) => block._tag === 'proposal');
|
|
88
91
|
const references = message.blocks.filter((block) => block._tag === 'reference').map((block) => block.reference);
|
|
@@ -90,14 +93,14 @@ export const MessagePanel = ({
|
|
|
90
93
|
return (
|
|
91
94
|
<MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>
|
|
92
95
|
<MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>
|
|
93
|
-
<div
|
|
96
|
+
<div className={buttonGroupClassNames}>
|
|
94
97
|
{userIsAuthor && editable && (
|
|
95
98
|
<IconButton
|
|
96
99
|
data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}
|
|
97
100
|
variant='ghost'
|
|
98
101
|
icon={editing ? 'ph--check--regular' : 'ph--pencil-simple--regular'}
|
|
99
102
|
iconOnly
|
|
100
|
-
label={t(editing ? 'save
|
|
103
|
+
label={t(editing ? 'save-message.label' : 'edit-message.label')}
|
|
101
104
|
classNames={[buttonClassNames, hoverableControlItem]}
|
|
102
105
|
onClick={handleEdit}
|
|
103
106
|
/>
|
|
@@ -188,15 +191,11 @@ const TextboxBlock = ({
|
|
|
188
191
|
editing && view?.focus();
|
|
189
192
|
}, [editing, view]);
|
|
190
193
|
|
|
191
|
-
return <div
|
|
194
|
+
return <div ref={parentRef} className='me-4' {...focusAttributes} />;
|
|
192
195
|
};
|
|
193
196
|
|
|
194
197
|
const ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {
|
|
195
|
-
return
|
|
196
|
-
<div role='none' className='me-4 italic'>
|
|
197
|
-
{block.text}
|
|
198
|
-
</div>
|
|
199
|
-
);
|
|
198
|
+
return <div className='me-4 italic'>{block.text}</div>;
|
|
200
199
|
};
|
|
201
200
|
|
|
202
201
|
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Unknown }>(({ subject }, forwardedRef) => {
|
|
@@ -8,7 +8,8 @@ import React, { useEffect, useState } from 'react';
|
|
|
8
8
|
import { random } from '@dxos/random';
|
|
9
9
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
10
10
|
|
|
11
|
-
import { translations } from '
|
|
11
|
+
import { translations } from '#translations';
|
|
12
|
+
|
|
12
13
|
import { ResponsiveGrid, type ResponsiveGridProps } from './ResponsiveGrid';
|
|
13
14
|
import { ResponsiveGridItem, type ResponsiveGridItemProps } from './ResponsiveGridItem';
|
|
14
15
|
|
|
@@ -7,7 +7,8 @@ import React from 'react';
|
|
|
7
7
|
|
|
8
8
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
9
9
|
|
|
10
|
-
import { translations } from '
|
|
10
|
+
import { translations } from '#translations';
|
|
11
|
+
|
|
11
12
|
import { VideoObject as VideoObjectComponent } from '../Media';
|
|
12
13
|
import { ResponsivePanel } from './ResponsivePanel';
|
|
13
14
|
|
|
@@ -18,13 +18,11 @@ import { mx } from '@dxos/ui-theme';
|
|
|
18
18
|
export const ResponsivePanel = ({ children }: PropsWithChildren) => {
|
|
19
19
|
return (
|
|
20
20
|
// Outer container that takes full size of parent.
|
|
21
|
-
<div
|
|
21
|
+
<div className='dx-expander relative flex'>
|
|
22
22
|
{/* Absolute positioning layer for centering content. */}
|
|
23
|
-
<div
|
|
23
|
+
<div className='absolute inset-0 flex justify-center items-center'>
|
|
24
24
|
{/* Content container that maintains given aspect ratio and proper scaling. */}
|
|
25
|
-
<div
|
|
26
|
-
{children}
|
|
27
|
-
</div>
|
|
25
|
+
<div className={mx('max-h-full max-w-full w-auto h-auto aspect-video')}>{children}</div>
|
|
28
26
|
</div>
|
|
29
27
|
</div>
|
|
30
28
|
);
|
|
@@ -6,7 +6,8 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
|
6
6
|
|
|
7
7
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
8
8
|
|
|
9
|
-
import { translations } from '
|
|
9
|
+
import { translations } from '#translations';
|
|
10
|
+
|
|
10
11
|
import { ThreadSettings } from './ThreadSettings';
|
|
11
12
|
|
|
12
13
|
const meta = {
|