@dxos/plugin-thread 0.8.3 → 0.8.4-main.1c7ec43d41
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/add-message-3FTZANTW.mjs +89 -0
- package/dist/lib/browser/add-message-3FTZANTW.mjs.map +7 -0
- package/dist/lib/browser/append-channel-message-CO3M6FSA.mjs +40 -0
- package/dist/lib/browser/append-channel-message-CO3M6FSA.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +37 -0
- package/dist/lib/browser/blueprints/index.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-MR4CWITF.mjs +31 -0
- package/dist/lib/browser/chunk-MR4CWITF.mjs.map +7 -0
- package/dist/lib/browser/chunk-TPNZ43NB.mjs +258 -0
- package/dist/lib/browser/chunk-TPNZ43NB.mjs.map +7 -0
- package/dist/lib/browser/create-GMUAPFZM.mjs +55 -0
- package/dist/lib/browser/create-GMUAPFZM.mjs.map +7 -0
- package/dist/lib/browser/create-channel-ZXKSLHGN.mjs +19 -0
- package/dist/lib/browser/create-channel-ZXKSLHGN.mjs.map +7 -0
- package/dist/lib/browser/create-proposals-AV5CREPV.mjs +56 -0
- package/dist/lib/browser/create-proposals-AV5CREPV.mjs.map +7 -0
- package/dist/lib/browser/delete-673YOWCG.mjs +59 -0
- package/dist/lib/browser/delete-673YOWCG.mjs.map +7 -0
- package/dist/lib/browser/delete-message-RQ72ZY5D.mjs +55 -0
- package/dist/lib/browser/delete-message-RQ72ZY5D.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1783 -270
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/on-create-space-SPE3QVFZ.mjs +24 -0
- package/dist/lib/browser/on-create-space-SPE3QVFZ.mjs.map +7 -0
- package/dist/lib/browser/operations/index.mjs +13 -0
- package/dist/lib/browser/operations/index.mjs.map +7 -0
- package/dist/lib/browser/restore-VX7FLZOZ.mjs +32 -0
- package/dist/lib/browser/restore-VX7FLZOZ.mjs.map +7 -0
- package/dist/lib/browser/restore-message-D65NSWUA.mjs +33 -0
- package/dist/lib/browser/restore-message-D65NSWUA.mjs.map +7 -0
- package/dist/lib/browser/select-DO4AYSCB.mjs +26 -0
- package/dist/lib/browser/select-DO4AYSCB.mjs.map +7 -0
- package/dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs +36 -0
- package/dist/lib/browser/toggle-resolved-JD3D4WBZ.mjs.map +7 -0
- package/dist/lib/browser/translations.mjs +90 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +6 -12
- package/dist/lib/node-esm/add-message-56J2HLJB.mjs +90 -0
- package/dist/lib/node-esm/add-message-56J2HLJB.mjs.map +7 -0
- package/dist/lib/node-esm/append-channel-message-F7KGBSWP.mjs +41 -0
- package/dist/lib/node-esm/append-channel-message-F7KGBSWP.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +38 -0
- package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-L6UL3NVS.mjs +32 -0
- package/dist/lib/node-esm/chunk-L6UL3NVS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XKUMDYGR.mjs +259 -0
- package/dist/lib/node-esm/chunk-XKUMDYGR.mjs.map +7 -0
- package/dist/lib/node-esm/create-LEXHIPUT.mjs +56 -0
- package/dist/lib/node-esm/create-LEXHIPUT.mjs.map +7 -0
- package/dist/lib/node-esm/create-channel-6VHTC2OR.mjs +20 -0
- package/dist/lib/node-esm/create-channel-6VHTC2OR.mjs.map +7 -0
- package/dist/lib/node-esm/create-proposals-P5O2ICOL.mjs +57 -0
- package/dist/lib/node-esm/create-proposals-P5O2ICOL.mjs.map +7 -0
- package/dist/lib/node-esm/delete-4KSU4UEJ.mjs +60 -0
- package/dist/lib/node-esm/delete-4KSU4UEJ.mjs.map +7 -0
- package/dist/lib/node-esm/delete-message-PGNLB6TL.mjs +56 -0
- package/dist/lib/node-esm/delete-message-PGNLB6TL.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1783 -270
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/on-create-space-TFBSHWQ4.mjs +25 -0
- package/dist/lib/node-esm/on-create-space-TFBSHWQ4.mjs.map +7 -0
- package/dist/lib/node-esm/operations/index.mjs +14 -0
- package/dist/lib/node-esm/operations/index.mjs.map +7 -0
- package/dist/lib/node-esm/restore-E27OAIFJ.mjs +33 -0
- package/dist/lib/node-esm/restore-E27OAIFJ.mjs.map +7 -0
- package/dist/lib/node-esm/restore-message-J3CH6NGI.mjs +34 -0
- package/dist/lib/node-esm/restore-message-J3CH6NGI.mjs.map +7 -0
- package/dist/lib/node-esm/select-NDHRM75K.mjs +27 -0
- package/dist/lib/node-esm/select-NDHRM75K.mjs.map +7 -0
- package/dist/lib/node-esm/toggle-resolved-VS6NKXL3.mjs +37 -0
- package/dist/lib/node-esm/toggle-resolved-VS6NKXL3.mjs.map +7 -0
- package/dist/lib/node-esm/translations.mjs +91 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +6 -12
- package/dist/types/src/ThreadPlugin.d.ts +3 -1
- 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/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
- package/dist/types/src/calls/call-manager.d.ts +40 -30
- package/dist/types/src/calls/call-manager.d.ts.map +1 -1
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
- package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts +2 -2
- 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 +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 +11 -6
- 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 +2 -2
- package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
- package/dist/types/src/calls-service.stories.d.ts +23 -0
- package/dist/types/src/calls-service.stories.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/call-manager.d.ts +3 -2
- 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 +19 -13
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts +3 -2
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root.d.ts +4 -2
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +5 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +5 -5
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
- 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 +6 -6
- 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 +13 -0
- package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +160 -0
- package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
- package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +14 -0
- package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
- package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
- package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
- 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 +3 -3
- package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
- package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
- package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
- package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
- package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
- package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +160 -5
- 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/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +164 -0
- package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
- package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
- package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
- package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
- package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
- package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +5 -9
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +15 -0
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
- package/dist/types/src/containers/CallDebugPanel/index.d.ts +2 -0
- package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
- package/dist/types/src/containers/CallSidebar/index.d.ts +2 -0
- package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
- 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 +12 -0
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +162 -0
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelContainer/index.d.ts +2 -0
- package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +8 -0
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadCompanion/index.d.ts +2 -0
- package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
- 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/ThreadContainer/ThreadContainer.stories.d.ts +162 -0
- 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 +8 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
- package/dist/types/src/extensions/command.d.ts.map +1 -0
- package/dist/types/src/extensions/index.d.ts +1 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts +9 -4
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts +2 -3
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +3 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
- package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
- package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
- package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +4 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +3 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-message.d.ts +5 -0
- package/dist/types/src/operations/add-message.d.ts.map +1 -0
- 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 +5 -0
- package/dist/types/src/operations/create-channel.d.ts.map +1 -0
- package/dist/types/src/operations/create-proposals.d.ts +5 -0
- package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
- package/dist/types/src/operations/create.d.ts +5 -0
- package/dist/types/src/operations/create.d.ts.map +1 -0
- package/dist/types/src/operations/definitions.d.ts +1995 -0
- package/dist/types/src/operations/definitions.d.ts.map +1 -0
- package/dist/types/src/operations/delete-message.d.ts +5 -0
- package/dist/types/src/operations/delete-message.d.ts.map +1 -0
- package/dist/types/src/operations/delete.d.ts +5 -0
- package/dist/types/src/operations/delete.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +4 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/on-create-space.d.ts +5 -0
- package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
- package/dist/types/src/operations/restore-message.d.ts +5 -0
- package/dist/types/src/operations/restore-message.d.ts.map +1 -0
- package/dist/types/src/operations/restore.d.ts +5 -0
- package/dist/types/src/operations/restore.d.ts.map +1 -0
- package/dist/types/src/operations/select.d.ts +5 -0
- package/dist/types/src/operations/select.d.ts.map +1 -0
- package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
- package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts +5 -0
- package/dist/types/src/testing/data.d.ts.map +1 -0
- 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 +144 -194
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Settings.d.ts +5 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/capabilities.d.ts +29 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +4 -326
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +21 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +119 -75
- package/src/ThreadPlugin.node.ts +39 -0
- package/src/ThreadPlugin.test.ts +37 -0
- package/src/ThreadPlugin.tsx +66 -149
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/thread-blueprint.ts +36 -0
- package/src/calls/call-manager.ts +78 -50
- package/src/calls/call-swarm-synchronizer.ts +3 -3
- package/src/calls/media-manager.ts +77 -41
- package/src/calls/types.ts +8 -4
- package/src/calls/util/calls-service.ts +74 -19
- package/src/calls/util/stub-media-streams.ts +65 -9
- package/src/calls/util/task-scheduling.ts +4 -4
- package/src/calls-service.stories.tsx +230 -0
- package/src/capabilities/app-graph-builder.ts +177 -162
- package/src/capabilities/blueprint-definition.ts +19 -0
- package/src/capabilities/call-manager.ts +19 -11
- package/src/capabilities/create-object.ts +29 -0
- package/src/capabilities/index.ts +17 -11
- package/src/capabilities/markdown.ts +55 -37
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-root.tsx +12 -9
- package/src/capabilities/react-surface.tsx +83 -74
- package/src/capabilities/settings.ts +28 -12
- package/src/capabilities/state.ts +14 -17
- package/src/capabilities/undo-mappings.ts +46 -0
- package/src/components/Call/Call.tsx +17 -12
- package/src/components/Call/Toolbar.tsx +63 -46
- package/src/components/Chat/Chat.tsx +258 -0
- package/src/components/Chat/index.ts +5 -0
- package/src/components/CommentsPanel/CommentsPanel.stories.tsx +95 -0
- package/src/components/CommentsPanel/CommentsPanel.tsx +71 -0
- package/src/components/CommentsPanel/CommentsThread.tsx +172 -0
- package/src/components/CommentsPanel/index.ts +6 -0
- package/src/components/Lobby/Lobby.tsx +21 -17
- package/src/components/Media/AudioStream.tsx +2 -2
- package/src/components/Media/VideoObject.stories.tsx +37 -30
- package/src/components/Media/VideoObject.tsx +1 -1
- package/src/components/MessagePanel/MessagePanel.tsx +225 -0
- package/src/components/MessagePanel/index.ts +5 -0
- package/src/components/Participant/Participant.tsx +35 -15
- package/src/components/Participant/ParticipantGrid.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +51 -49
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +15 -12
- package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +12 -12
- package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +5 -5
- package/src/components/ResponsiveGrid/index.ts +1 -1
- package/src/components/ThreadSettings/ThreadSettings.stories.tsx +32 -0
- package/src/components/ThreadSettings/ThreadSettings.tsx +20 -0
- package/src/components/ThreadSettings/index.ts +5 -0
- package/src/components/index.ts +6 -12
- package/src/containers/CallDebugPanel/CallDebugPanel.tsx +173 -0
- package/src/containers/CallDebugPanel/index.ts +5 -0
- package/src/containers/CallSidebar/CallSidebar.tsx +18 -0
- package/src/containers/CallSidebar/index.ts +5 -0
- package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
- package/src/containers/ChannelChat/index.ts +8 -0
- package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +105 -0
- package/src/containers/ChannelContainer/ChannelContainer.tsx +223 -0
- package/src/containers/ChannelContainer/index.ts +5 -0
- package/src/containers/ThreadCompanion/ThreadCompanion.tsx +215 -0
- package/src/containers/ThreadCompanion/index.ts +5 -0
- package/src/containers/ThreadContainer/ThreadContainer.stories.tsx +86 -0
- package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
- package/src/containers/ThreadContainer/index.ts +8 -0
- package/src/containers/index.ts +12 -0
- package/src/{components/command-extension.ts → extensions/command.ts} +7 -4
- package/src/extensions/index.ts +1 -0
- package/src/extensions/threads.ts +89 -44
- package/src/hooks/analytics.ts +22 -21
- package/src/hooks/index.ts +4 -0
- package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
- package/src/hooks/useDebugMode.ts +1 -1
- package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
- package/src/hooks/useVideoStreamTrack.tsx +36 -0
- package/src/index.ts +11 -4
- package/src/meta.ts +11 -7
- package/src/operations/add-message.ts +81 -0
- package/src/operations/append-channel-message.ts +36 -0
- package/src/operations/create-channel.ts +20 -0
- package/src/operations/create-proposals.ts +49 -0
- package/src/operations/create.ts +48 -0
- package/src/operations/definitions.ts +177 -0
- package/src/operations/delete-message.ts +53 -0
- package/src/operations/delete.ts +63 -0
- package/src/operations/index.ts +22 -0
- package/src/operations/on-create-space.ts +27 -0
- package/src/operations/restore-message.ts +38 -0
- package/src/operations/restore.ts +38 -0
- package/src/operations/select.ts +24 -0
- package/src/operations/toggle-resolved.ts +41 -0
- package/src/testing/data.ts +49 -0
- package/src/testing/index.ts +1 -1
- package/src/translations.ts +77 -73
- package/src/types/Settings.ts +10 -0
- package/src/types/capabilities.ts +42 -0
- package/src/types/index.ts +1 -1
- package/src/types/types.ts +5 -91
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/typings.d.ts +8 -0
- package/src/util.ts +38 -6
- package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
- package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
- package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs +0 -171
- package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
- package/dist/lib/browser/call-manager-APQAZWHT.mjs +0 -23
- package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
- package/dist/lib/browser/chunk-4H4A264L.mjs +0 -1708
- package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
- package/dist/lib/browser/chunk-5P5BH5GE.mjs +0 -88
- package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
- package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
- package/dist/lib/browser/chunk-6NBVNXTM.mjs.map +0 -7
- package/dist/lib/browser/chunk-AEXWNS6Z.mjs +0 -128
- package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
- package/dist/lib/browser/chunk-IIUTBDVB.mjs +0 -17
- package/dist/lib/browser/chunk-IIUTBDVB.mjs.map +0 -7
- package/dist/lib/browser/chunk-JKQUJOTX.mjs +0 -31
- package/dist/lib/browser/chunk-JKQUJOTX.mjs.map +0 -7
- package/dist/lib/browser/chunk-PG5CTFKK.mjs +0 -550
- package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
- package/dist/lib/browser/chunk-R5MDLUPC.mjs +0 -18
- package/dist/lib/browser/chunk-R5MDLUPC.mjs.map +0 -7
- package/dist/lib/browser/chunk-TAFSCSUR.mjs +0 -351
- package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
- package/dist/lib/browser/chunk-XZKBN3NS.mjs +0 -983
- package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs +0 -353
- package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
- package/dist/lib/browser/markdown-TE5SWWNJ.mjs +0 -169
- package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
- package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
- package/dist/lib/browser/react-root-NK3A4VG7.mjs.map +0 -7
- package/dist/lib/browser/react-surface-VXUJKSOG.mjs +0 -108
- package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
- package/dist/lib/browser/settings-RB2RSLXV.mjs +0 -22
- package/dist/lib/browser/settings-RB2RSLXV.mjs.map +0 -7
- package/dist/lib/browser/state-RKL5MSDP.mjs +0 -34
- package/dist/lib/browser/state-RKL5MSDP.mjs.map +0 -7
- package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
- package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
- package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
- package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
- package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
- package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
- package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
- package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
- package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
- package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
- package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
- package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
- package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
- package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
- package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
- package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
- package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
- package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
- package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
- package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
- package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
- package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
- package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
- package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
- package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
- package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
- package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -310
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
- package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
- package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
- package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
- package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
- package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
- package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
- package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
- package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
- package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
- package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
- package/dist/lib/node/types/index.cjs +0 -38
- package/dist/lib/node/types/index.cjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
- package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-F6CSADV7.mjs +0 -15
- package/dist/lib/node-esm/ChatContainer-F6CSADV7.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs +0 -172
- package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs +0 -24
- package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2RNIPFDA.mjs +0 -984
- package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ESQC6SYE.mjs +0 -19
- package/dist/lib/node-esm/chunk-ESQC6SYE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K4KAUOKT.mjs +0 -19
- package/dist/lib/node-esm/chunk-K4KAUOKT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-O3V45YJP.mjs +0 -90
- package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
- package/dist/lib/node-esm/chunk-O63QJPQX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P6RLFCNT.mjs +0 -352
- package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PGRP3O4O.mjs +0 -33
- package/dist/lib/node-esm/chunk-PGRP3O4O.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UJMPYKT3.mjs +0 -129
- package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UZWVVFT3.mjs +0 -551
- package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WXNPD542.mjs +0 -1710
- package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs +0 -354
- package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-HJUWNBLS.mjs +0 -170
- package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-RUXOAQNW.mjs +0 -28
- package/dist/lib/node-esm/react-root-RUXOAQNW.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs +0 -109
- package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
- package/dist/lib/node-esm/settings-EA7DFSM6.mjs +0 -23
- package/dist/lib/node-esm/settings-EA7DFSM6.mjs.map +0 -7
- package/dist/lib/node-esm/state-6AUTNROZ.mjs +0 -35
- package/dist/lib/node-esm/state-6AUTNROZ.mjs.map +0 -7
- package/dist/types/src/capabilities/capabilities.d.ts +0 -27
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/CallDebugPanel.d.ts +0 -8
- package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
- package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
- package/dist/types/src/components/ChannelContainer.d.ts +0 -14
- package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts +0 -10
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/Chat.stories.d.ts +0 -6
- package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
- package/dist/types/src/components/ChatContainer.d.ts +0 -17
- package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/components/CommentContainer.d.ts +0 -13
- package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
- package/dist/types/src/components/Comments.stories.d.ts +0 -6
- package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
- package/dist/types/src/components/CommentsContainer.d.ts +0 -13
- package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
- package/dist/types/src/components/MessageContainer.d.ts +0 -11
- package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -10
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.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/components/ThreadSettings.d.ts +0 -6
- package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
- package/dist/types/src/components/command-extension.d.ts.map +0 -1
- package/dist/types/src/components/testing.d.ts +0 -4
- package/dist/types/src/components/testing.d.ts.map +0 -1
- package/dist/types/src/peers.stories.d.ts +0 -11
- package/dist/types/src/peers.stories.d.ts.map +0 -1
- package/dist/types/src/testing/stories.d.ts +0 -2
- package/dist/types/src/testing/stories.d.ts.map +0 -1
- package/dist/types/src/types/schema.d.ts +0 -133
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/capabilities/capabilities.ts +0 -33
- package/src/capabilities/intent-resolver.ts +0 -296
- package/src/components/CallDebugPanel.tsx +0 -115
- package/src/components/CallSidebar.tsx +0 -17
- package/src/components/ChannelContainer.stories.tsx +0 -58
- package/src/components/ChannelContainer.tsx +0 -199
- package/src/components/Chat.stories.tsx +0 -88
- package/src/components/ChatContainer.tsx +0 -140
- package/src/components/CommentContainer.tsx +0 -198
- package/src/components/Comments.stories.tsx +0 -85
- package/src/components/CommentsContainer.tsx +0 -66
- package/src/components/MessageContainer.tsx +0 -167
- package/src/components/ThreadComplementary.tsx +0 -151
- package/src/components/ThreadSettings.tsx +0 -17
- package/src/components/testing.ts +0 -29
- package/src/peers.stories.tsx +0 -189
- package/src/testing/stories.ts +0 -50
- package/src/types/schema.ts +0 -33
- /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{browser/ChatContainer-RSOKYAMK.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ChannelContainer.tsx", "../../../src/components/Call/Call.tsx", "../../../src/components/Call/Toolbar.tsx", "../../../src/components/Media/AudioStream.tsx", "../../../src/components/Media/VideoObject.tsx", "../../../src/components/Participant/Participant.tsx", "../../../src/components/ResponsiveGrid/ResponsiveContainer.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGrid.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGridItem.tsx", "../../../src/components/Participant/ParticipantGrid.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useCallback, useEffect, useMemo, useState, type ChangeEvent } from 'react';\n\nimport { useCapabilities, useCapability } from '@dxos/app-framework';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, Input, ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlGroupButton } from '@dxos/react-ui-form';\nimport { ToolbarMenu, MenuProvider, createMenuAction, useMenuActions, createMenuItemGroup } from '@dxos/react-ui-menu';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { Call } from './Call';\nimport ChatContainer from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ChannelType } from '../types';\n\nexport type ChannelContainerProps = {\n channel?: ChannelType;\n roomId?: string;\n role?: string;\n fullscreen?: boolean;\n};\n\n/**\n * Renders a call when active, otherwise renders the channel chat.\n */\nexport const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {\n const space = getSpace(channel);\n const callManager = useCapability(ThreadCapabilities.CallManager);\n const roomId = channel ? fullyQualifiedId(channel) : _roomId;\n const identity = useIdentity();\n const isNamed = !!identity?.profile?.displayName;\n const joinSound = useSoundEffect('JoinCall');\n const leaveSound = useSoundEffect('LeaveCall');\n\n const extensions = useCapabilities(ThreadCapabilities.CallExtension);\n useEffect(() => {\n const ctx = new Context();\n callManager.left.on(ctx, (roomId) => {\n extensions.forEach((extension) => {\n void extension.onLeave?.(roomId);\n });\n });\n\n callManager.callStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onCallStateUpdated?.(state);\n });\n });\n\n callManager.mediaStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onMediaStateUpdated?.(state);\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [callManager, extensions]);\n\n /**\n * Join the call.\n */\n // TODO(wittjosiah): Show preview before joining?\n const handleJoin = useCallback(async () => {\n if (!roomId || !channel) {\n return;\n }\n\n if (callManager.joined) {\n await callManager.leave();\n }\n\n try {\n void joinSound.play();\n callManager.setRoomId(roomId);\n await callManager.join();\n await Promise.all(extensions.map((extension) => extension.onJoin?.({ channel, roomId })));\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n }\n }, [extensions, channel, roomId]);\n\n /**\n * Leave the call.\n */\n const handleLeave = useCallback(async () => {\n try {\n void leaveSound.play();\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n } finally {\n void callManager.turnAudioOff();\n void callManager.turnVideoOff();\n void callManager.turnScreenshareOff();\n void callManager.leave();\n }\n }, [extensions, roomId]);\n\n const isJoined = callManager.joined && callManager.roomId === roomId;\n\n return (\n <StackItem.Content toolbar={!isJoined} classNames={isJoined && 'h-full'}>\n {isJoined && !isNamed && <DisplayNameMissing />}\n {isJoined && isNamed && (\n <Call.Root>\n <Call.Grid fullscreen={fullscreen} />\n <Call.Toolbar channel={channel} onLeave={handleLeave} />\n </Call.Root>\n )}\n {!isJoined && channel && channel.defaultThread.target && space && (\n <>\n <ChannelToolbar attendableId={fullyQualifiedId(channel)} role={role} onJoinCall={handleJoin} />\n <ChatContainer space={space} thread={channel.defaultThread.target} />\n </>\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n\nconst DisplayNameMissing = () => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const client = useClient();\n const [displayName, setDisplayName] = useState('');\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value), []);\n const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);\n\n return (\n <ControlGroup classNames='p-4 place-content-center'>\n <ControlItemInput title={t('display name label')} description={t('display name description')}>\n <Input.TextInput\n value={displayName}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='md:min-is-64'\n />\n </ControlItemInput>\n <ControlGroupButton disabled={!displayName} onClick={handleSave}>\n {t('set display name label')}\n </ControlGroupButton>\n </ControlGroup>\n );\n};\n\nconst useChannelToolbarActions = (onJoinCall?: () => void) => {\n const creator = useMemo(\n () =>\n Rx.make(() => {\n return {\n nodes: [\n createMenuItemGroup('root', {\n label: ['channel toolbar title', { ns: THREAD_PLUGIN }],\n }),\n createMenuAction('video-call', () => onJoinCall?.(), {\n label: ['start video call label', { ns: THREAD_PLUGIN }],\n icon: 'ph--video-camera--regular',\n type: 'video-call',\n }),\n ],\n edges: [{ source: 'root', target: 'video-call' }],\n };\n }),\n [],\n );\n\n return useMenuActions(creator);\n};\n\ntype ChannelToolbarProps = ThemedClassName<{\n attendableId?: string;\n role?: string;\n onJoinCall?: () => void;\n}>;\n\nconst ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }: ChannelToolbarProps) => {\n const menuProps = useChannelToolbarActions(onJoinCall);\n\n return (\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menuProps} attendableId={attendableId}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type FC } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Toolbar, type ToolbarProps } from './Toolbar';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { useDebugMode } from '../../hooks';\nimport { AudioStream } from '../Media';\nimport { ParticipantGrid } from '../Participant';\n\n//\n// Root\n//\n\ntype CallRootProps = PropsWithChildren<ThemedClassName>;\n\nconst CallRoot: FC<CallRootProps> = ({ children }) => {\n return <div className='relative flex flex-col grow overflow-hidden'>{children}</div>;\n};\n\nCallRoot.displayName = 'CallRoot';\n\n//\n// Audio\n//\n\ntype CallAudioProps = {};\n\nconst CallAudio: FC<CallAudioProps> = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return <AudioStream tracks={call.pulledAudioTracks} />;\n};\n\nCallAudio.displayName = 'CallAudio';\n\n//\n// Room\n//\n\ntype CallGridProps = {\n fullscreen?: boolean;\n};\n\nconst CallGrid: FC<CallGridProps> = ({ fullscreen }) => {\n const debug = useDebugMode();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return (\n <div className='grid grow p-4 dark:bg-neutral-900'>\n <ParticipantGrid self={call.self} users={call.users} debug={debug} fullscreen={fullscreen} />\n </div>\n );\n};\n\nCallGrid.displayName = 'CallGrid';\n\n//\n// Toolbar\n//\n\ntype CallToolbarProps = Pick<ToolbarProps, 'channel' | 'onLeave'>;\n\nconst CallToolbar: FC<CallToolbarProps> = (props) => {\n return (\n <div className='absolute bottom-0 left-0 right-0 flex justify-center'>\n <Toolbar isInRoom {...props} />\n </div>\n );\n};\n\nCallToolbar.displayName = 'CallToolbar';\n\n//\n// Export\n//\n\nexport const Call = {\n Root: CallRoot,\n Grid: CallGrid,\n Audio: CallAudio,\n Toolbar: CallToolbar,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useAppGraph, useCapability } from '@dxos/app-framework';\nimport { useNode, useActions } from '@dxos/plugin-graph';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Icon,\n IconButton,\n type IconButtonProps,\n type ThemedClassName,\n Toolbar as NativeToolbar,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { ThreadCapabilities } from '../../capabilities';\nimport { THREAD_PLUGIN } from '../../meta';\nimport { type ChannelType } from '../../types';\n\nexport type ToolbarProps = ThemedClassName<{\n channel?: ChannelType;\n participants?: number;\n autoHideControls?: boolean;\n isInRoom?: boolean;\n onJoin?: () => void;\n onLeave?: () => void;\n}>;\n\n// TODO(wittjosiah): Use ToolbarMenu.\nexport const Toolbar = ({\n classNames,\n channel,\n participants,\n autoHideControls = true,\n onJoin,\n onLeave,\n}: ToolbarProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const { graph } = useAppGraph();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n // Channel app graph node.\n const node = useNode(graph, channel && fullyQualifiedId(channel));\n const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === 'toolbar');\n\n // Screen sharing.\n const isScreensharing = call.media.screenshareTrack !== undefined;\n const canSharescreen =\n typeof navigator.mediaDevices !== 'undefined' && navigator.mediaDevices.getDisplayMedia !== undefined;\n\n // TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.\n return (\n <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>\n <NativeToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>\n <ToggleButton\n active={call.media.audioEnabled}\n state={{\n on: {\n icon: 'ph--microphone--regular',\n label: t('mic off'),\n onClick: () => call.turnAudioOff(),\n classNames: 'bg-callActive',\n },\n off: {\n icon: 'ph--microphone-slash--duotone',\n label: t('mic on'),\n onClick: () => call.turnAudioOn(),\n classNames: [call.joined && 'bg-callAlert'],\n },\n }}\n />\n <ToggleButton\n active={call.media.videoEnabled}\n state={{\n on: {\n icon: 'ph--video-camera--regular',\n label: t('camera off'),\n onClick: () => call.turnVideoOff(),\n },\n off: {\n icon: 'ph--video-camera-slash--duotone',\n label: t('camera on'),\n onClick: () => call.turnVideoOn(),\n },\n }}\n />\n\n {(participants !== undefined && (\n <div className='flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued'>\n <Icon icon='ph--users--regular' size={4} />\n <div>{participants}</div>\n </div>\n )) || <NativeToolbar.Separator variant='gap' />}\n\n {call.joined && (\n <>\n <ToggleButton\n disabled={!canSharescreen}\n active={isScreensharing}\n state={{\n on: {\n icon: 'ph--monitor--regular',\n label: t('screenshare off'),\n onClick: () => call.turnScreenshareOff(),\n },\n off: {\n icon: 'ph--monitor-arrow-up--duotone',\n label: t('screenshare on'),\n onClick: () => call.turnScreenshareOn(),\n },\n }}\n />\n\n {/* Companion actions. */}\n {actions.map((action) => (\n <IconButton\n key={action.id}\n {...defaultButtonProps}\n icon={action.properties.icon}\n label={toLocalizedString(action.properties.label, t)}\n classNames={action.properties.classNames}\n onClick={() => action.data({ node })}\n />\n ))}\n\n <ToggleButton\n active={call.raisedHand}\n state={{\n on: {\n icon: 'ph--hand-waving--regular',\n label: t('lower hand'),\n onClick: () => call.setRaisedHand(false),\n classNames: [call.joined && 'bg-callAlert'],\n },\n off: {\n icon: 'ph--hand-palm--duotone',\n label: t('raise hand'),\n onClick: () => call.setRaisedHand(true),\n },\n }}\n />\n </>\n )}\n {call.joined ? (\n <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />\n ) : (\n <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />\n )}\n </NativeToolbar.Root>\n </div>\n );\n};\n\nToolbar.displayName = 'MeetingToolbar';\n\ntype ToolbarButtonProps = Pick<IconButtonProps, 'disabled'> & {\n active?: boolean;\n state: {\n on: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n off: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n };\n};\n\nconst defaultButtonProps: Partial<IconButtonProps> = {\n size: 5,\n iconOnly: true,\n};\n\nconst ToggleButton = ({ active, state }: ToolbarButtonProps) => (\n <IconButton\n {...defaultButtonProps}\n classNames={[active ? state.on.classNames ?? 'bg-callActive' : state.off.classNames]}\n icon={active ? state.on.icon : state.off.icon}\n label={active ? state.on.label : state.off.label}\n onClick={active ? state.on.onClick : state.off.onClick}\n />\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, useEffect, useRef } from 'react';\n\nexport type AudioStreamProps = {\n tracks: MediaStreamTrack[];\n};\n\nexport const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {\n const mediaStreamRef = useRef(new MediaStream());\n const ref = useRef<HTMLAudioElement>(null);\n\n useEffect(() => {\n const audio = ref.current;\n if (!audio) {\n return;\n }\n\n const mediaStream = mediaStreamRef.current;\n audio.srcObject = mediaStream;\n }, []);\n\n const resetSrcObject = () => {\n const audio = ref.current;\n const mediaStream = mediaStreamRef.current;\n if (!audio || !mediaStream) {\n return;\n }\n\n // Need to set srcObject again in Chrome and call play() again for Safari\n // https://www.youtube.com/live/Tkx3OGrwVk8?si=K--P_AzNnAGrjraV&t=2533\n // Calling play() this way to make Chrome happy otherwise it throws an error.\n audio.addEventListener('canplay', () => audio.play(), { once: true });\n audio.srcObject = mediaStream;\n };\n\n return (\n <>\n <audio ref={ref} autoPlay />\n {tracks.map((track) => (\n <AudioTrack key={track.id} track={track} mediaStream={mediaStreamRef.current} resetSrcObject={resetSrcObject} />\n ))}\n </>\n );\n};\n\ntype AudioTrackProps = {\n track: MediaStreamTrack;\n mediaStream: MediaStream;\n resetSrcObject: () => void;\n};\n\nconst AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {\n useEffect(() => {\n const currentTrack = track;\n mediaStream.addTrack(currentTrack);\n resetSrcObject();\n return () => {\n mediaStream.removeTrack(currentTrack);\n resetSrcObject();\n };\n }, [track, mediaStream]);\n\n return null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &\n ThemedClassName<{\n videoStream?: MediaStream;\n flip?: boolean;\n // TODO(burdon): If screenshare then contain.\n contain?: boolean;\n }>;\n\nexport const VideoObject = memo(\n forwardRef<HTMLVideoElement, VideoObjectProps>(({ videoStream, classNames, flip, contain, ...rest }, ref) => {\n const internalRef = useRef<HTMLVideoElement | null>(null);\n\n useEffect(() => {\n const video = internalRef.current;\n if (video && videoStream) {\n video.srcObject = videoStream;\n video.setAttribute('autoplay', 'true');\n video.setAttribute('playsinline', 'true');\n }\n }, [videoStream, internalRef.current]);\n\n // NOTE: The video element typically has a max size of 1280x720.\n return (\n <video\n className={mx(\n 'w-full aspect-video',\n flip && 'scale-x-[-1]',\n contain ? 'object-contain' : 'object-cover',\n classNames,\n )}\n ref={(v) => {\n internalRef.current = v;\n if (ref === null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(v);\n } else {\n ref.current = v;\n }\n }}\n {...rest}\n />\n );\n }),\n);\n\nVideoObject.displayName = 'VideoObject';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { memo, useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\n\nimport { type EncodedTrackName, type UserState } from '../../calls';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { VideoObject } from '../Media';\nimport { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';\n\nexport const SCREENSHARE_SUFFIX = '_screenshare';\n\nexport const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {\n const call = useCapability(ThreadCapabilities.CallManager);\n const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);\n const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);\n const pulledVideoStream = call.getVideoStream(\n isScreenshare || !isSelf ? (user.tracks?.video as EncodedTrackName) : undefined,\n );\n\n const videoStream = useMemo<MediaStream | undefined>(() => {\n if (isSelf && !isScreenshare) {\n return call.media.videoStream;\n } else if (isSelf && isScreenshare) {\n return call.media.screenshareVideoStream;\n } else if (!isSelf) {\n return pulledVideoStream;\n }\n }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);\n\n return (\n <ResponsiveGridItem\n {...props}\n item={user}\n name={user.name}\n self={isSelf}\n screenshare={!!call.media.screenshareVideoStream}\n video={call.media.videoEnabled}\n mute={user ? !user.tracks?.audioEnabled : false}\n wave={user.raisedHand}\n speaking={user.speaking}\n debug={debug}\n >\n <VideoObject\n videoStream={videoStream}\n flip={isSelf && !isScreenshare}\n contain={!!isScreenshare}\n classNames='rounded-md'\n />\n </ResponsiveGridItem>\n );\n});\n\nParticipant.displayName = 'Participant';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * A container component that maintains the child's aspect ratio while centering its content.\n * The container will scale to fit within its parent's bounds while preserving the aspect ratio.\n *\n * @example\n * <ResponsiveContainer>\n * <VideoObject />\n * </ResponsiveContainer>\n */\nexport const ResponsiveContainer = ({ children }: PropsWithChildren) => {\n return (\n // Outer container that takes full size of parent.\n <div role='none' className='relative flex w-full h-full'>\n {/* Absolute positioning layer for centering content. */}\n <div role='none' className='absolute inset-0 flex justify-center items-center'>\n {/* Content container that maintains given aspect ratio and proper scaling. */}\n <div role='none' className={mx('max-h-full max-w-full w-auto h-auto aspect-video')}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentType, type FC, useLayoutEffect, useState, useEffect, useMemo, useCallback } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { type Size } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ResponsiveContainer } from './ResponsiveContainer';\nimport { type ResponsiveGridItemProps } from './ResponsiveGridItem';\n\nconst ASPECT_RATIO = 16 / 9;\nconst MIN_GALLERY_HEIGHT = 250;\n\nconst DEFAULT_GAP = 8;\n\nconst maxImageSize = 'w-[2560px] h-[1440px]';\n\n/**\n * Props for the ResponsiveGrid component.\n */\nexport type ResponsiveGridProps<T extends object = any> = ThemedClassName<{\n /** Cell component. */\n Cell: ComponentType<ResponsiveGridItemProps<T>>;\n\n /** Space between grid items in pixels. */\n gap?: number;\n\n /** Function to get the ID of an item. */\n getId?: (item: T) => string;\n\n /** Array of items to display in the grid. */\n items: T[];\n\n /** ID of the pinned item. */\n pinned?: string;\n\n /** Whether to hide the gallery (unpinned items) when an item is pinned. */\n autoHideGallery?: boolean;\n\n /** Whether the divider is resizable. */\n resizable?: boolean;\n\n /** Debug mode. */\n debug?: boolean;\n\n /** Callback when the pinned item changes. */\n onPinnedChange?: (pinned: string | undefined) => void;\n}>;\n\nconst defaultGetId: ResponsiveGridProps<any>['getId'] = (item: any) => item.id;\n\n/**\n * A responsive grid component that automatically adjusts its layout to optimize space usage.\n * Maintains aspect ratio of items while ensuring uniform gaps between them.\n */\nexport const ResponsiveGrid = <T extends object = any>({\n classNames,\n Cell,\n gap = DEFAULT_GAP,\n getId = defaultGetId,\n items,\n pinned,\n autoHideGallery = false,\n debug,\n onPinnedChange,\n}: ResponsiveGridProps<T>) => {\n const {\n width: containerWidth = 0,\n height: containerHeight = 0,\n ref: containerRef,\n } = useResizeDetector<HTMLDivElement>({ refreshRate: 100 });\n const [dividerHeight, setDividerHeight] = useState<Size>(0);\n useEffect(() => {\n if (containerWidth && containerHeight) {\n const { height } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);\n setDividerHeight(Math.min(height, containerHeight - MIN_GALLERY_HEIGHT));\n }\n }, [containerWidth, containerHeight]);\n\n const pinnedItem = useMemo(() => items.find((item) => getId(item) === pinned), [items, pinned]);\n const mainItems = useMemo(() => items.filter((item) => getId(item) !== pinned), [items, pinned]);\n const hideGallery = autoHideGallery && pinnedItem !== undefined;\n\n //\n // Recalculate optimal layout when container size or items change.\n //\n const [{ time, columns, cellWidth }, setLayout] = useState<Layout>({ time: 0, columns: 0, cellWidth: 0 });\n const { width = 0, height = 0, ref: gridContainerRef } = useResizeDetector<HTMLDivElement>({ refreshRate: 200 });\n useEffect(() => {\n if (containerHeight && width && height) {\n const layout = calculateLayout(width, height, mainItems.length, gap);\n setLayout({ time: Date.now(), ...layout });\n }\n }, [containerHeight, width, height, mainItems.length, gap, pinned]);\n\n //\n // We use the browser to layout invisible divs and then calculate the absolute position of these items,\n // which are animated into position.\n //\n const [bounds, setBounds] = useState<[T, DOMRectBounds][]>([]);\n useLayoutEffect(() => {\n if ((!hideGallery && !gridContainerRef.current) || !containerHeight) {\n return;\n }\n\n // TODO(burdon): Consider directly setting bounds on DOM elementsinstead of state update?\n const t = setTimeout(() => {\n setBounds(\n items\n .filter((item) => !hideGallery || item === pinnedItem)\n .map((item) => {\n invariant(containerRef.current);\n const el = containerRef.current.querySelector(`[data-grid-item=\"${getId(item)}\"]`);\n if (!el) {\n return null;\n }\n\n const bounds = getRelativeBounds(containerRef.current, el as HTMLElement);\n return [item, bounds];\n })\n .filter((item): item is [T, DOMRectBounds] => item !== null),\n );\n });\n\n return () => clearTimeout(t);\n }, [containerHeight, items, pinnedItem, hideGallery, time]);\n\n const handleClick = useCallback(\n (item: T) => onPinnedChange?.(getId(item) === pinned ? undefined : getId(item)),\n [pinned, onPinnedChange],\n );\n\n return (\n <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>\n {/* Placeholder elements to calculate layout. */}\n <div className='absolute inset-0 flex flex-col grow gap-2'>\n {/* Pinned item. */}\n {pinnedItem && (\n <div\n className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}\n style={hideGallery ? {} : { height: dividerHeight }}\n >\n <SoloItem id={getId(pinnedItem)} debug={debug} />\n </div>\n )}\n\n {/* Gallery. */}\n {!hideGallery && (\n <div\n ref={gridContainerRef}\n className='flex grow-[1] overflow-hidden justify-center items-center'\n style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}\n >\n {mainItems.length === 1 && (\n <div style={{ width: cellWidth }} className='flex h-full'>\n <SoloItem id={getId(mainItems[0])} debug={debug} />\n </div>\n )}\n\n {mainItems.length > 1 && columns > 0 && (\n <div\n role='grid'\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,\n gap: `${gap}px`,\n }}\n >\n {mainItems.map((item) => (\n <div\n key={getId(item)}\n {...{ 'data-grid-item': getId(item) }}\n className={mx(\n 'aspect-video max-h-full max-w-full w-auto h-auto',\n debug && 'border border-primary-500',\n )}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Absolutely positioned items. */}\n <div className={mx(debug && 'opacity-10')}>\n {bounds.map(([item, bounds]) => (\n <Cell\n key={getId(item)}\n classNames='absolute transition-all duration-500'\n item={item}\n style={bounds}\n pinned={getId(item) === pinned}\n onClick={items.length > 1 ? handleClick : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ debug, id }) => {\n return (\n <ResponsiveContainer>\n <div\n {...{ 'data-grid-item': id }}\n className={mx('aspect-video overflow-hidden', debug && 'z-20 border-2 border-primary-500')}\n >\n {/* Maximum size placeholder image forces aspect ratio. */}\n <img alt='placeholder video' className={mx('opacity-0', maxImageSize)} />\n </div>\n </ResponsiveContainer>\n );\n};\n\ntype DOMRectBounds = Pick<DOMRect, 'top' | 'left' | 'width' | 'height'>;\n\n// TODO(burdon): Reconcile with react-ui-gameboard.\nconst getRelativeBounds = (container: HTMLElement, el: HTMLElement): DOMRectBounds => {\n const containerRect = container.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left,\n width: elementRect.width,\n height: elementRect.height,\n };\n};\n\ntype Layout = {\n time?: number;\n columns: number;\n cellWidth: number;\n};\n\n/**\n * Calculates the optimal number of columns for a grid layout that minimizes wasted space.\n * @param containerWidth - Width of the container in pixels.\n * @param containerHeight - Height of the container in pixels.\n * @param count - Total number of items to display.\n * @param gap - Space between items in pixels.\n * @param aspectRatio - Desired aspect ratio of items (width/height).\n * @returns The optimal number of columns.\n */\nconst calculateLayout = (\n containerWidth: number,\n containerHeight: number,\n count: number,\n gap: number,\n aspectRatio = ASPECT_RATIO,\n): Layout => {\n if (count === 0) {\n return { columns: 1, cellWidth: 1 };\n }\n\n let minWastedSpace = Infinity;\n let bestColumns = 1;\n let cellWidth = 0;\n\n // Try different rows counts to find the optimal layout that minimizes wasted space.\n for (let rows = 1; rows <= count; rows++) {\n const cols = Math.ceil(count / rows);\n\n // Calculate available space accounting for gaps.\n const { width: itemWidth, height: itemHeight } = fitItemsToGrid(\n containerWidth,\n containerHeight,\n cols,\n rows,\n aspectRatio,\n gap,\n );\n\n // Calculate total wasted space for this configuration.\n const usedWidth = itemWidth * cols + gap * cols - 1;\n const usedHeight = itemHeight * rows + gap * rows - 1;\n\n // Determine if optimal.\n const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;\n if (wastedSpace < minWastedSpace) {\n minWastedSpace = wastedSpace;\n bestColumns = cols;\n cellWidth = itemWidth;\n }\n }\n\n return { columns: bestColumns, cellWidth };\n};\n\n/**\n * Returns the size of the largest rectangle with the given aspect ration that fits within the grid.\n */\nconst fitItemsToGrid = (\n outerWidth: number,\n outerHeight: number,\n numCols: number,\n numRows: number,\n aspectRatio: number,\n gap: number,\n): { width: number; height: number } => {\n // Calculate available space accounting for gaps.\n const availableWidth = outerWidth - gap * (numCols - 1);\n const availableHeight = outerHeight - gap * (numRows - 1);\n\n // Calculate max dimensions.\n const maxCellWidth = availableWidth / numCols;\n const maxCellHeight = availableHeight / numRows;\n\n // Use fitAspectRatio to get dimensions that fit within max cell size while maintaining the desired aspect ratio\n return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);\n};\n\n/**\n * Returns the size of the largest rectangle the given aspect ratio that fits within the outer rectangle.\n */\nconst fitAspectRatio = (\n outerWidth: number,\n outerHeight: number,\n aspectRatio: number,\n): { width: number; height: number } => {\n if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {\n return { width: 0, height: 0 };\n }\n\n // First try fitting to width.\n let width = outerWidth;\n let height = width / aspectRatio;\n\n // If too tall, fit to height instead.\n if (height > outerHeight) {\n height = outerHeight;\n width = height * aspectRatio;\n }\n\n return { width, height };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState, type CSSProperties, type PropsWithChildren } from 'react';\n\nimport { Icon, IconButton, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { Waveform } from '@dxos/react-ui-sfx';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { THREAD_PLUGIN } from '../../meta';\n\nexport type ResponsiveGridItemProps<T extends object = any> = PropsWithChildren<\n ThemedClassName<{\n item: T;\n style?: CSSProperties;\n pinned?: boolean;\n name?: string;\n self?: boolean;\n screenshare?: boolean;\n video?: boolean;\n mute?: boolean;\n wave?: boolean;\n speaking?: boolean;\n debug?: boolean;\n onClick?: (item: T) => void;\n }>\n>;\n\n/**\n * Cell container.\n */\nexport const ResponsiveGridItem = <T extends object = any>({\n children,\n classNames,\n item,\n style,\n name,\n self,\n pinned,\n screenshare,\n video,\n mute,\n wave,\n speaking,\n onClick,\n}: ResponsiveGridItemProps<T>) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const iconProps: Record<string, { icon: string; label: string; classNames?: string }> = {\n wave: {\n icon: 'ph--hand-waving--duotone',\n label: t('icon wave'),\n classNames: 'animate-pulse bg-orange-500',\n },\n mute: {\n icon: 'ph--microphone-slash--regular',\n label: t('icon muted'),\n },\n };\n\n const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : undefined;\n\n // Debounce speaking indicator.\n const [speakingIndicator, setSpeakingIndicator] = useState(speaking);\n useEffect(() => {\n if (speaking) {\n setSpeakingIndicator(true);\n } else {\n const timeout = setTimeout(() => {\n setSpeakingIndicator(false);\n }, 1_000);\n return () => clearTimeout(timeout);\n }\n }, [speaking]);\n\n return (\n <div\n className={mx(\n 'relative w-full h-full group',\n 'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',\n speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',\n classNames,\n )}\n style={style}\n >\n {children}\n\n {/* Action. */}\n {onClick && (\n <div className='z-10 absolute top-1 right-1 flex'>\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}\n iconOnly\n icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}\n size={pinned ? 5 : 4}\n label={pinned ? t('icon unpin') : t('icon pin')}\n onClick={() => onClick?.(item)}\n />\n </div>\n )}\n\n {/* Name. */}\n {name && (\n <div className='z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center'>\n {/* TODO(burdon): Replace with avatar for everyone. */}\n {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}\n {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}\n <div\n className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}\n >\n {name}\n </div>\n </div>\n )}\n\n {/* Activity. */}\n <div className='z-10 absolute bottom-1 left-1 flex'>\n {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||\n (props && (\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}\n icon={props?.icon}\n label={props?.label}\n size={pinned ? 5 : 4}\n iconOnly\n />\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Participant, SCREENSHARE_SUFFIX } from './Participant';\nimport { type UserState } from '../../calls';\nimport { ResponsiveGrid } from '../ResponsiveGrid';\n\nconst getId = (user: UserState): string => user.id!;\n\nexport type ParticipantGridProps = ThemedClassName<{\n self: UserState;\n users: UserState[];\n fullscreen?: boolean;\n debug?: boolean;\n}>;\n\nexport const ParticipantGrid = ({ classNames, self, users, fullscreen, debug }: ParticipantGridProps) => {\n const [pinned, setPinned] = useState<string | undefined>();\n\n const allUsers = useMemo(() => {\n const allUsers: (UserState & { isSelf?: boolean })[] = [];\n users.forEach((user) => {\n if (!user.joined) {\n return;\n }\n\n allUsers.push({ ...user, isSelf: user.id === self.id });\n if (user.tracks?.screenshareEnabled) {\n const screenshare: UserState = {\n ...user,\n id: user.id + SCREENSHARE_SUFFIX,\n tracks: {\n ...user.tracks,\n video: user.tracks.screenshare,\n videoEnabled: user.tracks.screenshareEnabled,\n } as any, // TODO(burdon): Remove cast.\n };\n\n allUsers.push(screenshare);\n }\n });\n\n return allUsers;\n }, [self, users]);\n\n useEffect(() => {\n if (pinned) {\n // Check expanded user is still in call.\n if (!allUsers.find((user) => user.id === pinned)) {\n setPinned(undefined);\n }\n }\n }, [pinned, allUsers]);\n\n // TODO(burdon): Put self last.\n const sortedUsers: UserState[] = allUsers.sort((a, b) => {\n if (a.isSelf) {\n return 1;\n } else if (b.isSelf) {\n return -1;\n } else if (a.tracks?.screenshareEnabled) {\n return -1;\n } else if (b.tracks?.screenshareEnabled) {\n return 1;\n } else {\n return 0;\n }\n });\n\n // TODO(burdon): Show ghost view of user for a second before leaving.\n return (\n <ResponsiveGrid<UserState>\n classNames={classNames}\n Cell={Participant}\n debug={debug}\n getId={getId}\n items={sortedUsers}\n pinned={pinned}\n autoHideGallery={fullscreen}\n onPinnedChange={setPinned}\n />\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_app_framework", "import_echo", "import_react_ui", "import_react_ui_theme", "import_react_ui_sfx", "Toolbar", "classNames", "channel", "participants", "autoHideControls", "onJoin", "onLeave", "t", "useTranslation", "THREAD_PLUGIN", "graph", "useAppGraph", "call", "useCapability", "ThreadCapabilities", "CallManager", "node", "useNode", "fullyQualifiedId", "actions", "useActions", "id", "filter", "action", "properties", "disposition", "isScreensharing", "media", "screenshareTrack", "undefined", "canSharescreen", "navigator", "mediaDevices", "getDisplayMedia", "React", "div", "className", "mx", "groupHoverControlItemWithTransition", "NativeToolbar", "Root", "ToggleButton", "active", "audioEnabled", "state", "on", "icon", "label", "onClick", "turnAudioOff", "off", "turnAudioOn", "joined", "videoEnabled", "turnVideoOff", "turnVideoOn", "Icon", "size", "Separator", "variant", "disabled", "turnScreenshareOff", "turnScreenshareOn", "map", "IconButton", "key", "defaultButtonProps", "toLocalizedString", "data", "raisedHand", "setRaisedHand", "displayName", "iconOnly", "AudioStream", "tracks", "mediaStreamRef", "useRef", "MediaStream", "ref", "useEffect", "audio", "current", "mediaStream", "srcObject", "resetSrcObject", "addEventListener", "play", "once", "autoPlay", "track", "AudioTrack", "currentTrack", "addTrack", "removeTrack", "VideoObject", "memo", "forwardRef", "videoStream", "flip", "contain", "rest", "internalRef", "video", "setAttribute", "v", "ResponsiveContainer", "children", "role", "ASPECT_RATIO", "MIN_GALLERY_HEIGHT", "DEFAULT_GAP", "maxImageSize", "defaultGetId", "item", "ResponsiveGrid", "Cell", "gap", "getId", "items", "pinned", "autoHideGallery", "debug", "onPinnedChange", "width", "containerWidth", "height", "containerHeight", "containerRef", "useResizeDetector", "refreshRate", "dividerHeight", "setDividerHeight", "useState", "fitAspectRatio", "Math", "min", "pinnedItem", "useMemo", "find", "mainItems", "hideGallery", "time", "columns", "cellWidth", "setLayout", "gridContainerRef", "layout", "calculateLayout", "length", "Date", "now", "bounds", "setBounds", "useLayoutEffect", "setTimeout", "invariant", "el", "querySelector", "getRelativeBounds", "clearTimeout", "handleClick", "useCallback", "style", "SoloItem", "minHeight", "display", "gridTemplateColumns", "img", "alt", "container", "containerRect", "getBoundingClientRect", "elementRect", "top", "left", "count", "aspectRatio", "minWastedSpace", "Infinity", "bestColumns", "rows", "cols", "ceil", "itemWidth", "itemHeight", "fitItemsToGrid", "usedWidth", "usedHeight", "wastedSpace", "outerWidth", "outerHeight", "numCols", "numRows", "availableWidth", "availableHeight", "maxCellWidth", "maxCellHeight", "ResponsiveGridItem", "name", "self", "screenshare", "mute", "wave", "speaking", "iconProps", "props", "speakingIndicator", "setSpeakingIndicator", "timeout", "Waveform", "SCREENSHARE_SUFFIX", "Participant", "user", "isSelf", "startsWith", "isScreenshare", "endsWith", "pulledVideoStream", "getVideoStream", "screenshareVideoStream", "ParticipantGrid", "users", "fullscreen", "setPinned", "allUsers", "forEach", "push", "screenshareEnabled", "sortedUsers", "sort", "a", "b", "CallRoot", "CallAudio", "pulledAudioTracks", "CallGrid", "useDebugMode", "CallToolbar", "isInRoom", "Call", "Grid", "Audio", "ChannelContainer", "roomId", "_roomId", "space", "getSpace", "callManager", "identity", "useIdentity", "isNamed", "profile", "joinSound", "useSoundEffect", "leaveSound", "extensions", "useCapabilities", "CallExtension", "ctx", "Context", "extension", "callStateUpdated", "onCallStateUpdated", "mediaStateUpdated", "onMediaStateUpdated", "dispose", "handleJoin", "leave", "setRoomId", "join", "Promise", "all", "err", "log", "catch", "handleLeave", "isJoined", "StackItem", "Content", "toolbar", "DisplayNameMissing", "defaultThread", "target", "ChannelToolbar", "attendableId", "onJoinCall", "ChatContainer", "thread", "client", "useClient", "setDisplayName", "handleChange", "event", "value", "handleSave", "halo", "updateProfile", "ControlGroup", "ControlItemInput", "title", "description", "Input", "TextInput", "onChange", "placeholder", "ControlGroupButton", "useChannelToolbarActions", "creator", "Rx", "make", "nodes", "createMenuItemGroup", "ns", "createMenuAction", "type", "edges", "source", "useMenuActions", "menuProps", "ElevationProvider", "elevation", "MenuProvider", "ToolbarMenu"]
|
|
7
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var chunk_ZGDN3XBR_exports = {};
|
|
20
|
-
__export(chunk_ZGDN3XBR_exports, {
|
|
21
|
-
ChannelType: () => ChannelType,
|
|
22
|
-
ThreadAction: () => ThreadAction,
|
|
23
|
-
ThreadSettingsSchema: () => ThreadSettingsSchema,
|
|
24
|
-
ThreadStatus: () => ThreadStatus,
|
|
25
|
-
ThreadType: () => ThreadType
|
|
26
|
-
});
|
|
27
|
-
module.exports = __toCommonJS(chunk_ZGDN3XBR_exports);
|
|
28
|
-
var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
|
|
29
|
-
var import_effect = require("effect");
|
|
30
|
-
var import_echo = require("@dxos/echo");
|
|
31
|
-
var import_schema = require("@dxos/schema");
|
|
32
|
-
var import_effect2 = require("effect");
|
|
33
|
-
var import_echo2 = require("@dxos/echo");
|
|
34
|
-
var import_echo3 = require("@dxos/react-client/echo");
|
|
35
|
-
var import_schema2 = require("@dxos/schema");
|
|
36
|
-
var ThreadStatus = import_effect.Schema.Union(import_effect.Schema.Literal("staged"), import_effect.Schema.Literal("active"), import_effect.Schema.Literal("resolved"));
|
|
37
|
-
var _ThreadType = import_effect.Schema.Struct({
|
|
38
|
-
name: import_effect.Schema.optional(import_effect.Schema.String),
|
|
39
|
-
status: import_effect.Schema.optional(ThreadStatus),
|
|
40
|
-
messages: import_effect.Schema.mutable(import_effect.Schema.Array(import_echo.Type.Ref(import_schema.DataType.Message)))
|
|
41
|
-
}).pipe(import_echo.Type.Obj({
|
|
42
|
-
typename: "dxos.org/type/Thread",
|
|
43
|
-
version: "0.1.0"
|
|
44
|
-
}));
|
|
45
|
-
var ThreadType = _ThreadType;
|
|
46
|
-
var _ChannelType = import_effect.Schema.Struct({
|
|
47
|
-
name: import_effect.Schema.optional(import_effect.Schema.String),
|
|
48
|
-
defaultThread: import_echo.Type.Ref(ThreadType),
|
|
49
|
-
// TODO(wittjosiah): Should be an "ordered collection".
|
|
50
|
-
threads: import_effect.Schema.mutable(import_effect.Schema.Array(import_echo.Type.Ref(ThreadType)))
|
|
51
|
-
}).pipe(import_echo.Type.Obj({
|
|
52
|
-
typename: "dxos.org/type/Channel",
|
|
53
|
-
version: "0.1.0"
|
|
54
|
-
}));
|
|
55
|
-
var ChannelType = _ChannelType;
|
|
56
|
-
(function(ThreadAction2) {
|
|
57
|
-
const THREAD_ACTION = `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/action`;
|
|
58
|
-
class CreateChannel extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
|
|
59
|
-
input: import_effect2.Schema.Struct({
|
|
60
|
-
spaceId: import_echo2.Type.SpaceId,
|
|
61
|
-
name: import_effect2.Schema.optional(import_effect2.Schema.String)
|
|
62
|
-
}),
|
|
63
|
-
output: import_effect2.Schema.Struct({
|
|
64
|
-
object: ChannelType
|
|
65
|
-
})
|
|
66
|
-
}) {
|
|
67
|
-
}
|
|
68
|
-
ThreadAction2.CreateChannel = CreateChannel;
|
|
69
|
-
class CreateChannelThread extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create-channel-thread`, {
|
|
70
|
-
input: import_effect2.Schema.Struct({
|
|
71
|
-
channel: ChannelType
|
|
72
|
-
}),
|
|
73
|
-
output: import_effect2.Schema.Struct({
|
|
74
|
-
object: ThreadType
|
|
75
|
-
})
|
|
76
|
-
}) {
|
|
77
|
-
}
|
|
78
|
-
ThreadAction2.CreateChannelThread = CreateChannelThread;
|
|
79
|
-
class Create extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create`, {
|
|
80
|
-
input: import_effect2.Schema.Struct({
|
|
81
|
-
name: import_effect2.Schema.optional(import_effect2.Schema.String),
|
|
82
|
-
anchor: import_effect2.Schema.optional(import_effect2.Schema.String),
|
|
83
|
-
subject: import_echo3.EchoObjectSchema
|
|
84
|
-
}),
|
|
85
|
-
output: import_effect2.Schema.Void
|
|
86
|
-
}) {
|
|
87
|
-
}
|
|
88
|
-
ThreadAction2.Create = Create;
|
|
89
|
-
class Delete extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/delete`, {
|
|
90
|
-
input: import_effect2.Schema.Struct({
|
|
91
|
-
anchor: import_schema2.AnchoredTo,
|
|
92
|
-
subject: import_echo3.EchoObjectSchema,
|
|
93
|
-
thread: import_effect2.Schema.optional(ThreadType)
|
|
94
|
-
}),
|
|
95
|
-
output: import_effect2.Schema.Void
|
|
96
|
-
}) {
|
|
97
|
-
}
|
|
98
|
-
ThreadAction2.Delete = Delete;
|
|
99
|
-
class Select extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/select`, {
|
|
100
|
-
input: import_effect2.Schema.Struct({
|
|
101
|
-
current: import_effect2.Schema.String
|
|
102
|
-
}),
|
|
103
|
-
output: import_effect2.Schema.Void
|
|
104
|
-
}) {
|
|
105
|
-
}
|
|
106
|
-
ThreadAction2.Select = Select;
|
|
107
|
-
class ToggleResolved extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/toggle-resolved`, {
|
|
108
|
-
input: import_effect2.Schema.Struct({
|
|
109
|
-
thread: ThreadType
|
|
110
|
-
}),
|
|
111
|
-
output: import_effect2.Schema.Void
|
|
112
|
-
}) {
|
|
113
|
-
}
|
|
114
|
-
ThreadAction2.ToggleResolved = ToggleResolved;
|
|
115
|
-
class AddMessage extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/add-message`, {
|
|
116
|
-
input: import_effect2.Schema.Struct({
|
|
117
|
-
subject: import_echo3.EchoObjectSchema,
|
|
118
|
-
anchor: import_schema2.AnchoredTo,
|
|
119
|
-
sender: import_schema2.DataType.Actor,
|
|
120
|
-
text: import_effect2.Schema.String
|
|
121
|
-
}),
|
|
122
|
-
output: import_effect2.Schema.Void
|
|
123
|
-
}) {
|
|
124
|
-
}
|
|
125
|
-
ThreadAction2.AddMessage = AddMessage;
|
|
126
|
-
class DeleteMessage extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
|
|
127
|
-
input: import_effect2.Schema.Struct({
|
|
128
|
-
anchor: import_schema2.AnchoredTo,
|
|
129
|
-
subject: import_echo3.EchoObjectSchema,
|
|
130
|
-
messageId: import_effect2.Schema.String,
|
|
131
|
-
message: import_effect2.Schema.optional(import_schema2.DataType.Message),
|
|
132
|
-
messageIndex: import_effect2.Schema.optional(import_effect2.Schema.Number)
|
|
133
|
-
}),
|
|
134
|
-
output: import_effect2.Schema.Void
|
|
135
|
-
}) {
|
|
136
|
-
}
|
|
137
|
-
ThreadAction2.DeleteMessage = DeleteMessage;
|
|
138
|
-
})(ThreadAction || (ThreadAction = {}));
|
|
139
|
-
var ThreadSettingsSchema = import_effect2.Schema.mutable(import_effect2.Schema.Struct({}));
|
|
140
|
-
var ThreadAction;
|
|
141
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
142
|
-
0 && (module.exports = {
|
|
143
|
-
ChannelType,
|
|
144
|
-
ThreadAction,
|
|
145
|
-
ThreadSettingsSchema,
|
|
146
|
-
ThreadStatus,
|
|
147
|
-
ThreadType
|
|
148
|
-
});
|
|
149
|
-
//# sourceMappingURL=chunk-ZGDN3XBR.cjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { DataType } from '@dxos/schema';\n\nexport const ThreadStatus = Schema.Union(\n Schema.Literal('staged'),\n Schema.Literal('active'),\n Schema.Literal('resolved'),\n);\n\nconst _ThreadType = Schema.Struct({\n name: Schema.optional(Schema.String),\n status: Schema.optional(ThreadStatus),\n messages: Schema.mutable(Schema.Array(Type.Ref(DataType.Message))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Thread', version: '0.1.0' }));\nexport interface ThreadType extends Schema.Schema.Type<typeof _ThreadType> {}\nexport const ThreadType: Type.obj<Schema.Schema<ThreadType, Schema.Schema.Encoded<typeof _ThreadType>, never>> =\n _ThreadType;\n\nconst _ChannelType = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Type.Ref(ThreadType),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Schema.mutable(Schema.Array(Type.Ref(ThreadType))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Channel', version: '0.1.0' }));\nexport interface ChannelType extends Schema.Schema.Type<typeof _ChannelType> {}\nexport const ChannelType: Type.obj<Schema.Schema<ChannelType, Schema.Schema.Encoded<typeof _ChannelType>, never>> =\n _ChannelType;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport { ChannelType, ThreadType } from './schema';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class CreateChannel extends Schema.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: Schema.Struct({\n spaceId: Type.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class CreateChannelThread extends Schema.TaggedClass<CreateChannelThread>()(\n `${THREAD_ACTION}/create-channel-thread`,\n {\n input: Schema.Struct({\n channel: ChannelType,\n }),\n output: Schema.Struct({\n object: ThreadType,\n }),\n },\n ) {}\n\n export class Create extends Schema.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n anchor: Schema.optional(Schema.String),\n subject: EchoObjectSchema,\n }),\n output: Schema.Void,\n }) {}\n\n export class Delete extends Schema.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n thread: Schema.optional(ThreadType),\n }),\n output: Schema.Void,\n }) {}\n\n export class Select extends Schema.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class ToggleResolved extends Schema.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: Schema.Struct({\n thread: ThreadType,\n }),\n output: Schema.Void,\n }) {}\n\n export class AddMessage extends Schema.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: Schema.Struct({\n subject: EchoObjectSchema,\n anchor: AnchoredTo,\n sender: DataType.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteMessage extends Schema.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n messageId: Schema.String,\n message: Schema.optional(DataType.Message),\n messageIndex: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Object toolbar state. */\n toolbar: Record<string, boolean>;\n /** In-memory draft threads. */\n drafts: Record<string, AnchoredTo[]>;\n current?: string | undefined;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_effect", "import_echo", "import_schema", "ThreadStatus", "Schema", "Union", "Literal", "_ThreadType", "Struct", "name", "optional", "String", "status", "messages", "mutable", "Array", "Type", "Ref", "DataType", "Message", "pipe", "Obj", "typename", "version", "ThreadType", "_ChannelType", "defaultThread", "threads", "ChannelType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "TaggedClass", "input", "spaceId", "SpaceId", "output", "object", "CreateChannelThread", "channel", "Create", "anchor", "subject", "EchoObjectSchema", "Void", "Delete", "AnchoredTo", "thread", "Select", "current", "ToggleResolved", "AddMessage", "sender", "Actor", "text", "DeleteMessage", "messageId", "message", "messageIndex", "Number", "ThreadSettingsSchema"]
|
|
7
|
-
}
|