@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.ae835ea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/ChannelContainer-SVV4ZX5T.mjs +16 -0
- package/dist/lib/browser/ChatContainer-ALFWQ65B.mjs +15 -0
- package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-ACBXRBOS.mjs} +20 -20
- package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs.map +7 -0
- package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-P3MYR2JS.mjs} +7 -7
- package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs.map → call-manager-P3MYR2JS.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-6CUDBEYP.mjs} +12 -11
- package/dist/lib/browser/chunk-6CUDBEYP.mjs.map +7 -0
- package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
- package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
- package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-DJOUMWEL.mjs} +20 -18
- package/dist/lib/browser/chunk-DJOUMWEL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-HDEQRBOC.mjs} +2 -2
- package/dist/lib/browser/{chunk-2P3GVRHP.mjs.map → chunk-HDEQRBOC.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-IQSXEHOW.mjs} +139 -69
- package/dist/lib/browser/chunk-IQSXEHOW.mjs.map +7 -0
- package/dist/lib/browser/chunk-K2DUJRFJ.mjs +27 -0
- package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-L6F2AG6W.mjs +23 -0
- package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-US5ZQYC3.mjs} +267 -367
- package/dist/lib/browser/chunk-US5ZQYC3.mjs.map +7 -0
- package/dist/lib/browser/chunk-UTSLSZED.mjs +178 -0
- package/dist/lib/browser/chunk-UTSLSZED.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-XYUJXHYV.mjs} +53 -3
- package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +23 -22
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-5POQTZ24.mjs} +25 -34
- package/dist/lib/browser/intent-resolver-5POQTZ24.mjs.map +7 -0
- package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-L7LDNF56.mjs} +9 -9
- package/dist/lib/browser/markdown-L7LDNF56.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-root-RCJLK4EP.mjs +28 -0
- package/dist/lib/browser/react-root-RCJLK4EP.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-IC576W2W.mjs} +27 -27
- package/dist/lib/browser/react-surface-IC576W2W.mjs.map +7 -0
- package/dist/lib/browser/{settings-GRKEID73.mjs → settings-5FYGBOGI.mjs} +5 -5
- package/dist/lib/browser/{settings-GRKEID73.mjs.map → settings-5FYGBOGI.mjs.map} +1 -1
- package/dist/lib/browser/{state-2T4KDWBX.mjs → state-36REWXO5.mjs} +5 -5
- package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-36REWXO5.mjs.map} +1 -1
- package/dist/lib/browser/toolkit-PXASLYEQ.mjs +74 -0
- package/dist/lib/browser/toolkit-PXASLYEQ.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +7 -9
- package/dist/lib/node-esm/ChannelContainer-63GMQ753.mjs +17 -0
- package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs → ChatContainer-MFKPXMIK.mjs} +6 -6
- package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-JXD7KY3G.mjs} +20 -20
- package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs.map +7 -0
- package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-FCEFP7EJ.mjs} +7 -7
- package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs.map → call-manager-FCEFP7EJ.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-2MMJF7DW.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs.map → chunk-2MMJF7DW.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-2V3WSLUZ.mjs} +53 -3
- package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
- package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs +25 -0
- package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-KGYDYYKJ.mjs} +267 -367
- package/dist/lib/node-esm/chunk-KGYDYYKJ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-NWUUMKVQ.mjs} +12 -11
- package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-Q7AKKZNY.mjs} +139 -69
- package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-QCQAAU6J.mjs} +20 -18
- package/dist/lib/node-esm/chunk-QCQAAU6J.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-TYLLHI46.mjs +179 -0
- package/dist/lib/node-esm/chunk-TYLLHI46.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XI45H4IV.mjs +28 -0
- package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +19 -0
- package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +23 -22
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-63NV3XD2.mjs} +25 -34
- package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-ZQW7MI5U.mjs} +9 -9
- package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-root-4IDB2SN2.mjs +29 -0
- package/dist/lib/node-esm/react-root-4IDB2SN2.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-O4LGTAZ3.mjs} +27 -27
- package/dist/lib/node-esm/react-surface-O4LGTAZ3.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-EOBQUZSW.mjs} +5 -5
- package/dist/lib/node-esm/{settings-F2ODVNNW.mjs.map → settings-EOBQUZSW.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-X3W67GTL.mjs} +5 -5
- package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-X3W67GTL.mjs.map} +1 -1
- package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs +75 -0
- package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +7 -9
- package/dist/types/src/ThreadPlugin.d.ts +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/calls/media-manager.d.ts.map +1 -1
- package/dist/types/src/calls/types.d.ts.map +1 -1
- package/dist/types/src/calls/util/calls-service.d.ts +2 -0
- package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
- package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
- package/dist/types/src/calls-service.stories.d.ts +0 -1
- package/dist/types/src/calls-service.stories.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +2 -2
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit.d.ts +21 -2
- package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
- package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts +2 -2
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts +74 -8
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +74 -6
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +6 -5
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +3 -2
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
- package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
- package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
- package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +4 -2
- package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +4 -2
- package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +3 -3
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
- package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +73 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +16 -0
- package/dist/types/src/types/Channel.d.ts.map +1 -0
- package/dist/types/src/types/{schema.d.ts → Thread.d.ts} +18 -28
- package/dist/types/src/types/Thread.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +37 -50
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +59 -59
- package/src/ThreadPlugin.tsx +133 -130
- package/src/calls/call-manager.ts +1 -1
- package/src/calls/media-manager.ts +2 -1
- package/src/calls/types.ts +7 -3
- package/src/calls/util/calls-service.ts +12 -7
- package/src/calls/util/stub-media-streams.ts +60 -2
- package/src/calls-service.stories.tsx +2 -5
- package/src/capabilities/app-graph-builder.ts +17 -14
- package/src/capabilities/capabilities.ts +7 -7
- package/src/capabilities/intent-resolver.ts +14 -19
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +15 -15
- package/src/capabilities/toolkit.ts +18 -11
- package/src/components/Call/Toolbar.tsx +6 -6
- package/src/components/CallDebugPanel.tsx +108 -49
- package/src/components/ChannelContainer.stories.tsx +9 -9
- package/src/components/ChannelContainer.tsx +14 -11
- package/src/components/Chat.stories.tsx +13 -18
- package/src/components/ChatContainer.tsx +26 -17
- package/src/components/Comments.stories.tsx +8 -13
- package/src/components/CommentsContainer.tsx +2 -2
- package/src/components/CommentsThreadContainer.tsx +19 -14
- package/src/components/Media/VideoObject.stories.tsx +12 -7
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +3 -4
- package/src/components/ThreadComplementary.tsx +7 -7
- package/src/components/ThreadSettings.tsx +4 -5
- package/src/components/testing.ts +5 -5
- package/src/extensions/threads.ts +5 -5
- package/src/hooks/useVideoStreamTrack.tsx +1 -1
- package/src/meta.ts +9 -5
- package/src/testing/stories.ts +3 -6
- package/src/translations.ts +5 -3
- package/src/types/Channel.ts +27 -0
- package/src/types/Thread.ts +26 -0
- package/src/types/index.ts +2 -1
- package/src/types/types.ts +10 -9
- package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
- package/src/util.ts +1 -1
- package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
- package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
- package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
- package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
- package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
- package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
- package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
- package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
- package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
- package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
- package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
- package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
- package/dist/lib/browser/chunk-KTWYVC5X.mjs +0 -147
- package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
- package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
- package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
- package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
- package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
- package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
- package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
- package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
- package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
- package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
- package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P6E247RF.mjs +0 -148
- package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
- package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
- package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
- package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
- package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
- package/dist/types/src/types/schema.d.ts.map +0 -1
- package/src/types/schema.ts +0 -33
- /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-SVV4ZX5T.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-ALFWQ65B.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-2I277V52.mjs.map → chunk-L6F2AG6W.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-D5E2S6AI.mjs.map → ChannelContainer-63GMQ753.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChatContainer-MFKPXMIK.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-UJ2QNRLS.mjs.map → chunk-AFDO2SUZ.mjs.map} +0 -0
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
9
7
|
|
|
@@ -14,8 +12,8 @@ import { log } from '@dxos/log';
|
|
|
14
12
|
import { Config, useConfig } from '@dxos/react-client';
|
|
15
13
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
16
14
|
import { Button } from '@dxos/react-ui';
|
|
15
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
17
16
|
import { Json } from '@dxos/react-ui-syntax-highlighter';
|
|
18
|
-
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
19
17
|
|
|
20
18
|
const testVideo = new URL('../testing/video.mp4', import.meta.url).href;
|
|
21
19
|
|
|
@@ -177,6 +175,7 @@ const meta = {
|
|
|
177
175
|
title: 'plugins/plugin-thread/calls-service',
|
|
178
176
|
render: DefaultStory,
|
|
179
177
|
decorators: [
|
|
178
|
+
withTheme,
|
|
180
179
|
withClientProvider({
|
|
181
180
|
config: new Config({
|
|
182
181
|
runtime: {
|
|
@@ -186,8 +185,6 @@ const meta = {
|
|
|
186
185
|
},
|
|
187
186
|
}),
|
|
188
187
|
}),
|
|
189
|
-
withTheme,
|
|
190
|
-
withLayout(),
|
|
191
188
|
],
|
|
192
189
|
parameters: {
|
|
193
190
|
layout: 'centered',
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Rx } from '@effect-rx/rx-react';
|
|
6
|
-
import
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
7
8
|
|
|
8
9
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
9
10
|
import { Obj } from '@dxos/echo';
|
|
@@ -12,8 +13,8 @@ import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE }
|
|
|
12
13
|
import { ROOT_ID, createExtension, rxFromSignal } from '@dxos/plugin-graph';
|
|
13
14
|
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
14
15
|
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
16
|
+
import { meta } from '../meta';
|
|
17
|
+
import { Channel, ThreadAction } from '../types';
|
|
17
18
|
import { getAnchor } from '../util';
|
|
18
19
|
|
|
19
20
|
import { ThreadCapabilities } from './capabilities';
|
|
@@ -26,10 +27,10 @@ export default (context: PluginContext) => {
|
|
|
26
27
|
|
|
27
28
|
return contributes(Capabilities.AppGraphBuilder, [
|
|
28
29
|
createExtension({
|
|
29
|
-
id: `${
|
|
30
|
+
id: `${meta.id}/active-call`,
|
|
30
31
|
connector: (node) =>
|
|
31
32
|
Rx.make((get) =>
|
|
32
|
-
pipe(
|
|
33
|
+
Function.pipe(
|
|
33
34
|
get(node),
|
|
34
35
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
35
36
|
Option.map((node) => {
|
|
@@ -43,7 +44,7 @@ export default (context: PluginContext) => {
|
|
|
43
44
|
type: DECK_COMPANION_TYPE,
|
|
44
45
|
data: null,
|
|
45
46
|
properties: {
|
|
46
|
-
label: ['call panel label', { ns:
|
|
47
|
+
label: ['call panel label', { ns: meta.id }],
|
|
47
48
|
icon: 'ph--video-conference--regular',
|
|
48
49
|
position: 'hoist',
|
|
49
50
|
disposition: 'hidden',
|
|
@@ -61,12 +62,14 @@ export default (context: PluginContext) => {
|
|
|
61
62
|
// TODO(wittjosiah): The channel shouldn't become the companion during a call.
|
|
62
63
|
// Alternative: the call/meeting/thread should be a child node of the channel and that should be opened.
|
|
63
64
|
createExtension({
|
|
64
|
-
id: `${
|
|
65
|
+
id: `${meta.id}/channel-chat-companion`,
|
|
65
66
|
connector: (node) => {
|
|
66
67
|
return Rx.make((get) => {
|
|
67
|
-
return pipe(
|
|
68
|
+
return Function.pipe(
|
|
68
69
|
get(node),
|
|
69
|
-
Option.flatMap((node) =>
|
|
70
|
+
Option.flatMap((node) =>
|
|
71
|
+
Obj.instanceOf(Channel.Channel, node.data) ? Option.some(node.data) : Option.none(),
|
|
72
|
+
),
|
|
70
73
|
Option.map((channel) => {
|
|
71
74
|
const callManager = context.getCapability(ThreadCapabilities.CallManager);
|
|
72
75
|
const joined = get(
|
|
@@ -82,7 +85,7 @@ export default (context: PluginContext) => {
|
|
|
82
85
|
type: PLANK_COMPANION_TYPE,
|
|
83
86
|
data: 'chat',
|
|
84
87
|
properties: {
|
|
85
|
-
label: ['channel companion label', { ns:
|
|
88
|
+
label: ['channel companion label', { ns: meta.id }],
|
|
86
89
|
icon: 'ph--hash--regular',
|
|
87
90
|
position: 'hoist',
|
|
88
91
|
disposition: 'hidden',
|
|
@@ -99,10 +102,10 @@ export default (context: PluginContext) => {
|
|
|
99
102
|
id: `${meta.id}/comments-companion`,
|
|
100
103
|
connector: (node) =>
|
|
101
104
|
Rx.make((get) =>
|
|
102
|
-
pipe(
|
|
105
|
+
Function.pipe(
|
|
103
106
|
get(node),
|
|
104
107
|
Option.flatMap((node) => {
|
|
105
|
-
if (!Obj.isObject(node.data) || Obj.instanceOf(
|
|
108
|
+
if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {
|
|
106
109
|
return Option.none();
|
|
107
110
|
}
|
|
108
111
|
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
@@ -129,10 +132,10 @@ export default (context: PluginContext) => {
|
|
|
129
132
|
id: `${meta.id}/comment-toolbar`,
|
|
130
133
|
actions: (node) =>
|
|
131
134
|
Rx.make((get) =>
|
|
132
|
-
pipe(
|
|
135
|
+
Function.pipe(
|
|
133
136
|
get(node),
|
|
134
137
|
Option.flatMap((node) => {
|
|
135
|
-
if (!Obj.isObject(node.data) || Obj.instanceOf(
|
|
138
|
+
if (!Obj.isObject(node.data) || Obj.instanceOf(Channel.Channel, node.data)) {
|
|
136
139
|
return Option.none();
|
|
137
140
|
}
|
|
138
141
|
const metadata = resolve(Obj.getTypename(node.data)!);
|
|
@@ -6,28 +6,28 @@ import { defineCapability } from '@dxos/app-framework';
|
|
|
6
6
|
import { type DeepReadonly } from '@dxos/util';
|
|
7
7
|
|
|
8
8
|
import { type CallManager, type CallState, type MediaState } from '../calls';
|
|
9
|
-
import {
|
|
10
|
-
import { type
|
|
9
|
+
import { meta } from '../meta';
|
|
10
|
+
import { type Channel, type ThreadState, type ViewState } from '../types';
|
|
11
11
|
|
|
12
12
|
export namespace ThreadCapabilities {
|
|
13
|
-
export const CallManager = defineCapability<CallManager>(`${
|
|
13
|
+
export const CallManager = defineCapability<CallManager>(`${meta.id}/capability/call-manager`);
|
|
14
14
|
|
|
15
15
|
// TODO(burdon): Better way to define specific extensions for meeting companions.
|
|
16
16
|
// TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?
|
|
17
17
|
// TODO(wittjosiah): These callbacks could be intents once we support broadcast.
|
|
18
18
|
export type CallProperties = {
|
|
19
|
-
onJoin: (state: { channel?:
|
|
19
|
+
onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;
|
|
20
20
|
onLeave: (roomId?: string) => Promise<void>;
|
|
21
21
|
onCallStateUpdated: (callState: CallState) => Promise<void>;
|
|
22
22
|
onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;
|
|
23
23
|
};
|
|
24
|
-
export const CallExtension = defineCapability<CallProperties>(`${
|
|
24
|
+
export const CallExtension = defineCapability<CallProperties>(`${meta.id}/capability/call-extension`);
|
|
25
25
|
|
|
26
26
|
type GetViewState = (subjectId: string) => ViewState;
|
|
27
27
|
export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(
|
|
28
|
-
`${
|
|
28
|
+
`${meta.id}/capability/state`,
|
|
29
29
|
);
|
|
30
30
|
export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(
|
|
31
|
-
`${
|
|
31
|
+
`${meta.id}/capability/state`,
|
|
32
32
|
);
|
|
33
33
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, type PluginContext, contributes, createIntent, createResolver } from '@dxos/app-framework';
|
|
8
8
|
import { sleep } from '@dxos/async';
|
|
@@ -14,20 +14,20 @@ import { CollectionAction, SpaceAction } from '@dxos/plugin-space/types';
|
|
|
14
14
|
import { Ref, fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
|
|
15
15
|
import { AnchoredTo, DataType } from '@dxos/schema';
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
17
|
+
import { meta } from '../meta';
|
|
18
|
+
import { Channel, Thread, ThreadAction } from '../types';
|
|
19
19
|
|
|
20
20
|
import { ThreadCapabilities } from './capabilities';
|
|
21
21
|
|
|
22
22
|
export default (context: PluginContext) =>
|
|
23
23
|
contributes(Capabilities.IntentResolver, [
|
|
24
24
|
createResolver({
|
|
25
|
-
intent: ThreadAction.
|
|
25
|
+
intent: ThreadAction.onCreateSpace,
|
|
26
26
|
resolve: ({ space, rootCollection }) =>
|
|
27
27
|
Effect.gen(function* () {
|
|
28
28
|
const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
29
29
|
const { object: collection } = yield* dispatch(
|
|
30
|
-
createIntent(CollectionAction.CreateQueryCollection, { typename: Type.getTypename(
|
|
30
|
+
createIntent(CollectionAction.CreateQueryCollection, { typename: Type.getTypename(Channel.Channel) }),
|
|
31
31
|
);
|
|
32
32
|
rootCollection.objects.push(Ref.make(collection));
|
|
33
33
|
|
|
@@ -41,18 +41,14 @@ export default (context: PluginContext) =>
|
|
|
41
41
|
intent: ThreadAction.CreateChannel,
|
|
42
42
|
resolve: ({ name }) => ({
|
|
43
43
|
data: {
|
|
44
|
-
object:
|
|
45
|
-
name,
|
|
46
|
-
defaultThread: Ref.make(Obj.make(ThreadType, { messages: [], status: 'active' })),
|
|
47
|
-
threads: [],
|
|
48
|
-
}),
|
|
44
|
+
object: Channel.make({ name }),
|
|
49
45
|
},
|
|
50
46
|
}),
|
|
51
47
|
}),
|
|
52
48
|
createResolver({
|
|
53
49
|
intent: ThreadAction.CreateChannelThread,
|
|
54
50
|
resolve: ({ channel }) => {
|
|
55
|
-
const thread =
|
|
51
|
+
const thread = Thread.make({ status: 'active' });
|
|
56
52
|
channel.threads.push(Ref.make(thread));
|
|
57
53
|
return {
|
|
58
54
|
data: {
|
|
@@ -70,7 +66,7 @@ export default (context: PluginContext) =>
|
|
|
70
66
|
|
|
71
67
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
72
68
|
const subjectId = fullyQualifiedId(subject);
|
|
73
|
-
const thread =
|
|
69
|
+
const thread = Thread.make({ name });
|
|
74
70
|
const anchor = Relation.make(AnchoredTo, {
|
|
75
71
|
[Relation.Source]: thread,
|
|
76
72
|
[Relation.Target]: subject,
|
|
@@ -98,7 +94,6 @@ export default (context: PluginContext) =>
|
|
|
98
94
|
createResolver({
|
|
99
95
|
intent: ThreadAction.AddProposal,
|
|
100
96
|
resolve: ({ text, anchor, sender, subject }) => {
|
|
101
|
-
console.log('add-proposal', text, anchor, sender, subject);
|
|
102
97
|
const space = getSpace(subject);
|
|
103
98
|
invariant(space, 'Space not found');
|
|
104
99
|
|
|
@@ -108,7 +103,7 @@ export default (context: PluginContext) =>
|
|
|
108
103
|
sender,
|
|
109
104
|
blocks: [{ _tag: 'proposal', text }],
|
|
110
105
|
});
|
|
111
|
-
const thread =
|
|
106
|
+
const thread = Thread.make({ name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });
|
|
112
107
|
|
|
113
108
|
return {
|
|
114
109
|
intents: [
|
|
@@ -165,7 +160,7 @@ export default (context: PluginContext) =>
|
|
|
165
160
|
createResolver({
|
|
166
161
|
intent: ThreadAction.Delete,
|
|
167
162
|
resolve: async ({ subject, anchor, thread: _thread }, undo) => {
|
|
168
|
-
const thread = _thread ?? (Relation.getSource(anchor) as
|
|
163
|
+
const thread = _thread ?? (Relation.getSource(anchor) as Thread.Thread);
|
|
169
164
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
170
165
|
const subjectId = fullyQualifiedId(subject);
|
|
171
166
|
const draft = state.drafts[subjectId];
|
|
@@ -191,7 +186,7 @@ export default (context: PluginContext) =>
|
|
|
191
186
|
|
|
192
187
|
return {
|
|
193
188
|
undoable: {
|
|
194
|
-
message: ['thread deleted label', { ns:
|
|
189
|
+
message: ['thread deleted label', { ns: meta.id }],
|
|
195
190
|
data: { thread, anchor },
|
|
196
191
|
},
|
|
197
192
|
intents: [
|
|
@@ -227,7 +222,7 @@ export default (context: PluginContext) =>
|
|
|
227
222
|
createResolver({
|
|
228
223
|
intent: ThreadAction.AddMessage,
|
|
229
224
|
resolve: ({ anchor, subject, sender, text }) => {
|
|
230
|
-
const thread = Relation.getSource(anchor) as
|
|
225
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
231
226
|
const { state } = context.getCapability(ThreadCapabilities.MutableState);
|
|
232
227
|
const subjectId = fullyQualifiedId(subject);
|
|
233
228
|
const space = getSpace(subject);
|
|
@@ -289,7 +284,7 @@ export default (context: PluginContext) =>
|
|
|
289
284
|
createResolver({
|
|
290
285
|
intent: ThreadAction.DeleteMessage,
|
|
291
286
|
resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {
|
|
292
|
-
const thread = Relation.getSource(anchor) as
|
|
287
|
+
const thread = Relation.getSource(anchor) as Thread.Thread;
|
|
293
288
|
const space = getSpace(subject);
|
|
294
289
|
invariant(space, 'Space not found');
|
|
295
290
|
|
|
@@ -311,7 +306,7 @@ export default (context: PluginContext) =>
|
|
|
311
306
|
|
|
312
307
|
return {
|
|
313
308
|
undoable: {
|
|
314
|
-
message: ['message deleted label', { ns:
|
|
309
|
+
message: ['message deleted label', { ns: meta.id }],
|
|
315
310
|
data: { message, messageIndex },
|
|
316
311
|
},
|
|
317
312
|
intents: [
|
|
@@ -7,11 +7,11 @@ import React from 'react';
|
|
|
7
7
|
import { Capabilities, contributes } from '@dxos/app-framework';
|
|
8
8
|
|
|
9
9
|
import { Call } from '../components';
|
|
10
|
-
import {
|
|
10
|
+
import { meta } from '../meta';
|
|
11
11
|
|
|
12
12
|
export default () => {
|
|
13
13
|
return contributes(Capabilities.ReactRoot, {
|
|
14
|
-
id:
|
|
14
|
+
id: meta.id,
|
|
15
15
|
root: () => <Call.Audio />,
|
|
16
16
|
});
|
|
17
17
|
};
|
|
@@ -17,24 +17,24 @@ import {
|
|
|
17
17
|
ThreadComplementary,
|
|
18
18
|
ThreadSettings,
|
|
19
19
|
} from '../components';
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { meta } from '../meta';
|
|
21
|
+
import { Channel, Thread, type ThreadSettingsProps } from '../types';
|
|
22
22
|
|
|
23
23
|
import { ThreadCapabilities } from './capabilities';
|
|
24
24
|
|
|
25
25
|
export default () =>
|
|
26
26
|
contributes(Capabilities.ReactSurface, [
|
|
27
27
|
createSurface({
|
|
28
|
-
id: `${
|
|
28
|
+
id: `${meta.id}/channel`,
|
|
29
29
|
role: 'article',
|
|
30
|
-
filter: (data): data is { subject:
|
|
30
|
+
filter: (data): data is { subject: Channel.Channel } => Obj.instanceOf(Channel.Channel, data.subject),
|
|
31
31
|
component: ({ data: { subject: channel }, role }) => <ChannelContainer channel={channel} role={role} />,
|
|
32
32
|
}),
|
|
33
33
|
createSurface({
|
|
34
|
-
id: `${
|
|
34
|
+
id: `${meta.id}/chat-companion`,
|
|
35
35
|
role: 'article',
|
|
36
|
-
filter: (data): data is { companionTo:
|
|
37
|
-
Obj.instanceOf(
|
|
36
|
+
filter: (data): data is { companionTo: Channel.Channel; subject: 'chat' } =>
|
|
37
|
+
Obj.instanceOf(Channel.Channel, data.companionTo) && data.subject === 'chat',
|
|
38
38
|
component: ({ data: { companionTo: channel } }) => {
|
|
39
39
|
const space = getSpace(channel);
|
|
40
40
|
const thread = channel.defaultThread.target;
|
|
@@ -46,9 +46,9 @@ export default () =>
|
|
|
46
46
|
},
|
|
47
47
|
}),
|
|
48
48
|
createSurface({
|
|
49
|
-
id: `${
|
|
49
|
+
id: `${meta.id}/thread`,
|
|
50
50
|
role: 'article',
|
|
51
|
-
filter: (data): data is { subject:
|
|
51
|
+
filter: (data): data is { subject: Thread.Thread } => Obj.instanceOf(Thread.Thread, data.subject),
|
|
52
52
|
component: ({ data: { subject: thread } }) => {
|
|
53
53
|
const space = getSpace(thread);
|
|
54
54
|
if (!space || !thread) {
|
|
@@ -59,27 +59,27 @@ export default () =>
|
|
|
59
59
|
},
|
|
60
60
|
}),
|
|
61
61
|
createSurface({
|
|
62
|
-
id: `${
|
|
62
|
+
id: `${meta.id}/comments`,
|
|
63
63
|
role: 'article',
|
|
64
|
-
filter: (data): data is { companionTo: { threads: Ref.Ref<
|
|
64
|
+
filter: (data): data is { companionTo: { threads: Ref.Ref<Thread.Thread>[] } } =>
|
|
65
65
|
data.subject === 'comments' && Obj.isObject(data.companionTo),
|
|
66
66
|
// TODO(wittjosiah): This isn't scrolling properly in a plank.
|
|
67
67
|
component: ({ data }) => <ThreadComplementary subject={data.companionTo} />,
|
|
68
68
|
}),
|
|
69
69
|
createSurface({
|
|
70
|
-
id: `${
|
|
70
|
+
id: `${meta.id}/plugin-settings`,
|
|
71
71
|
role: 'article',
|
|
72
72
|
filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>
|
|
73
|
-
data.subject instanceof SettingsStore && data.subject.prefix ===
|
|
73
|
+
data.subject instanceof SettingsStore && data.subject.prefix === meta.id,
|
|
74
74
|
component: ({ data: { subject } }) => <ThreadSettings settings={subject.value} />,
|
|
75
75
|
}),
|
|
76
76
|
createSurface({
|
|
77
|
-
id: `${
|
|
77
|
+
id: `${meta.id}/assistant`,
|
|
78
78
|
role: 'deck-companion--active-call',
|
|
79
79
|
component: () => <CallSidebar />,
|
|
80
80
|
}),
|
|
81
81
|
createSurface({
|
|
82
|
-
id: `${
|
|
82
|
+
id: `${meta.id}/devtools-overview`,
|
|
83
83
|
role: 'devtools-overview',
|
|
84
84
|
component: () => {
|
|
85
85
|
const call = useCapability(ThreadCapabilities.CallManager);
|
|
@@ -2,8 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import * as Tool from '@effect/ai/Tool';
|
|
6
|
+
import * as Toolkit from '@effect/ai/Toolkit';
|
|
7
|
+
import * as Array from 'effect/Array';
|
|
8
|
+
import * as Effect from 'effect/Effect';
|
|
9
|
+
import * as Function from 'effect/Function';
|
|
10
|
+
import * as Schema from 'effect/Schema';
|
|
7
11
|
|
|
8
12
|
import { Capabilities, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
|
|
9
13
|
import { ArtifactId, computeDiffsWithCursors } from '@dxos/assistant';
|
|
@@ -16,8 +20,8 @@ import { trim } from '@dxos/util';
|
|
|
16
20
|
import { ThreadAction } from '../types';
|
|
17
21
|
|
|
18
22
|
// TODO(wittjosiah): How to make this work for more than Documents?
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
const Toolkit$ = Toolkit.make(
|
|
24
|
+
Tool.make('add-proposals', {
|
|
21
25
|
description: trim`
|
|
22
26
|
Proposes a set of changes to a document.
|
|
23
27
|
`,
|
|
@@ -30,9 +34,13 @@ class Toolkit extends AiToolkit.make(
|
|
|
30
34
|
success: Schema.Any,
|
|
31
35
|
failure: Schema.Never,
|
|
32
36
|
}),
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
export namespace ThreadToolkit {
|
|
40
|
+
export const Toolkit = Toolkit$;
|
|
41
|
+
|
|
42
|
+
export const createLayer = (context: PluginContext) =>
|
|
43
|
+
Toolkit$.toLayer({
|
|
36
44
|
'add-proposals': ({ id, diffs: _diffs }) =>
|
|
37
45
|
Effect.gen(function* () {
|
|
38
46
|
// TODO(wittjosiah): Get capabilities via layers.
|
|
@@ -41,7 +49,6 @@ class Toolkit extends AiToolkit.make(
|
|
|
41
49
|
const state = context.getCapability(Capabilities.Layout);
|
|
42
50
|
|
|
43
51
|
const dxn = ArtifactId.toDXN(id, state.workspace as SpaceId);
|
|
44
|
-
|
|
45
52
|
const echoDxn = dxn.asEchoDXN();
|
|
46
53
|
if (!echoDxn) {
|
|
47
54
|
throw new Error(`Invalid object ID: ${id}`);
|
|
@@ -55,7 +62,7 @@ class Toolkit extends AiToolkit.make(
|
|
|
55
62
|
|
|
56
63
|
const content = yield* Effect.promise(() => object.content.load());
|
|
57
64
|
const accessor = createDocAccessor(content, ['content']);
|
|
58
|
-
yield* pipe(
|
|
65
|
+
yield* Function.pipe(
|
|
59
66
|
computeDiffsWithCursors(accessor, _diffs),
|
|
60
67
|
Array.map(({ cursor, text }) =>
|
|
61
68
|
createIntent(ThreadAction.AddProposal, {
|
|
@@ -73,6 +80,6 @@ class Toolkit extends AiToolkit.make(
|
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
export default (context: PluginContext) => [
|
|
76
|
-
contributes(Capabilities.Toolkit, Toolkit),
|
|
77
|
-
contributes(Capabilities.ToolkitHandler,
|
|
83
|
+
contributes(Capabilities.Toolkit, ThreadToolkit.Toolkit),
|
|
84
|
+
contributes(Capabilities.ToolkitHandler, ThreadToolkit.createLayer(context)),
|
|
78
85
|
];
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
Icon,
|
|
12
12
|
IconButton,
|
|
13
13
|
type IconButtonProps,
|
|
14
|
-
Toolbar as
|
|
14
|
+
Toolbar as NaturalToolbar,
|
|
15
15
|
type ThemedClassName,
|
|
16
16
|
toLocalizedString,
|
|
17
17
|
useTranslation,
|
|
@@ -20,10 +20,10 @@ import { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';
|
|
|
20
20
|
|
|
21
21
|
import { ThreadCapabilities } from '../../capabilities';
|
|
22
22
|
import { meta } from '../../meta';
|
|
23
|
-
import { type
|
|
23
|
+
import { type Channel } from '../../types';
|
|
24
24
|
|
|
25
25
|
export type ToolbarProps = ThemedClassName<{
|
|
26
|
-
channel?:
|
|
26
|
+
channel?: Channel.Channel;
|
|
27
27
|
participants?: number;
|
|
28
28
|
autoHideControls?: boolean;
|
|
29
29
|
isInRoom?: boolean;
|
|
@@ -56,7 +56,7 @@ export const Toolbar = ({
|
|
|
56
56
|
// TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.
|
|
57
57
|
return (
|
|
58
58
|
<div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>
|
|
59
|
-
<
|
|
59
|
+
<NaturalToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>
|
|
60
60
|
<ToggleButton
|
|
61
61
|
active={call.media.audioEnabled}
|
|
62
62
|
state={{
|
|
@@ -95,7 +95,7 @@ export const Toolbar = ({
|
|
|
95
95
|
<Icon icon='ph--users--regular' size={4} />
|
|
96
96
|
<div>{participants}</div>
|
|
97
97
|
</div>
|
|
98
|
-
)) || <
|
|
98
|
+
)) || <NaturalToolbar.Separator variant='gap' />}
|
|
99
99
|
|
|
100
100
|
{call.joined && (
|
|
101
101
|
<>
|
|
@@ -151,7 +151,7 @@ export const Toolbar = ({
|
|
|
151
151
|
) : (
|
|
152
152
|
<IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />
|
|
153
153
|
)}
|
|
154
|
-
</
|
|
154
|
+
</NaturalToolbar.Root>
|
|
155
155
|
</div>
|
|
156
156
|
);
|
|
157
157
|
};
|