@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
|
@@ -1,55 +1,63 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ThreadAction,
|
|
3
|
-
|
|
4
|
-
} from "./chunk-
|
|
3
|
+
Thread_exports
|
|
4
|
+
} from "./chunk-UTSLSZED.mjs";
|
|
5
5
|
import {
|
|
6
6
|
ChannelContainer
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DJOUMWEL.mjs";
|
|
8
8
|
import {
|
|
9
9
|
ThreadCapabilities
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-BBTXGRIR.mjs";
|
|
11
11
|
import {
|
|
12
12
|
MessageContainer,
|
|
13
13
|
buttonClassNames,
|
|
14
14
|
buttonGroupClassNames,
|
|
15
15
|
command
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-6CUDBEYP.mjs";
|
|
17
17
|
import {
|
|
18
18
|
useStatus
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-HDEQRBOC.mjs";
|
|
20
20
|
import {
|
|
21
21
|
getMessageMetadata
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-CP7E2HRE.mjs";
|
|
23
23
|
import {
|
|
24
24
|
meta
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-K2DUJRFJ.mjs";
|
|
26
26
|
|
|
27
27
|
// src/components/CallDebugPanel.tsx
|
|
28
28
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
29
29
|
import { WebRTCStats } from "@peermetrics/webrtc-stats";
|
|
30
30
|
import React, { useEffect, useMemo, useState } from "react";
|
|
31
|
-
import {
|
|
31
|
+
import { truncateKey } from "@dxos/debug";
|
|
32
|
+
import { JsonView, Panel } from "@dxos/devtools";
|
|
32
33
|
import { log } from "@dxos/log";
|
|
33
|
-
import { Input, useTranslation } from "@dxos/react-ui";
|
|
34
|
-
import { Json } from "@dxos/react-ui-syntax-highlighter";
|
|
34
|
+
import { IconButton, Input, useTranslation } from "@dxos/react-ui";
|
|
35
35
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
|
|
36
36
|
var CallDebugPanel = ({ state }) => {
|
|
37
37
|
var _effect = _useSignals();
|
|
38
38
|
try {
|
|
39
39
|
const { t } = useTranslation(meta.id);
|
|
40
|
-
const users = state?.call?.users;
|
|
41
|
-
const self = state?.call?.self;
|
|
42
40
|
const [open, setOpen] = useState(false);
|
|
43
41
|
const handleToggle = () => setOpen(!open);
|
|
42
|
+
const [showServiceHistory, setShowServiceHistory] = useState(false);
|
|
43
|
+
const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);
|
|
44
|
+
const handleCopyRaw = async () => {
|
|
45
|
+
await navigator.clipboard.writeText(JSON.stringify({
|
|
46
|
+
users: state?.call?.users,
|
|
47
|
+
stats
|
|
48
|
+
}, null, 2));
|
|
49
|
+
};
|
|
44
50
|
const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);
|
|
45
51
|
const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);
|
|
46
52
|
const webrtcStats = useMemo(() => new WebRTCStats({
|
|
47
53
|
getStatsInterval: 1e3
|
|
48
54
|
}), []);
|
|
49
|
-
const [stats, setStats] = useState(
|
|
55
|
+
const [stats, setStats] = useState();
|
|
50
56
|
useEffect(() => {
|
|
51
57
|
const pc = state?.media.peer?.session?.peerConnection;
|
|
52
|
-
const handleStats = (stats2) =>
|
|
58
|
+
const handleStats = (stats2) => {
|
|
59
|
+
setStats(stats2.data);
|
|
60
|
+
};
|
|
53
61
|
let added = false;
|
|
54
62
|
if (pc && showDetailedWebRTCStats) {
|
|
55
63
|
webrtcStats.addConnection({
|
|
@@ -76,7 +84,7 @@ var CallDebugPanel = ({ state }) => {
|
|
|
76
84
|
connectionId: "1"
|
|
77
85
|
}, {
|
|
78
86
|
F: __dxlog_file,
|
|
79
|
-
L:
|
|
87
|
+
L: 62,
|
|
80
88
|
S: void 0,
|
|
81
89
|
C: (f, a) => f(...a)
|
|
82
90
|
});
|
|
@@ -86,6 +94,10 @@ var CallDebugPanel = ({ state }) => {
|
|
|
86
94
|
state?.media.peer?.session?.peerConnection,
|
|
87
95
|
showDetailedWebRTCStats
|
|
88
96
|
]);
|
|
97
|
+
const rows = useMemo(() => getCallStatusTable(state), [
|
|
98
|
+
state?.call.users,
|
|
99
|
+
state?.media.pulledAudioTracks
|
|
100
|
+
]);
|
|
89
101
|
return /* @__PURE__ */ React.createElement(Panel, {
|
|
90
102
|
id: "meeting-status",
|
|
91
103
|
icon: "ph--video-conference--regular",
|
|
@@ -95,51 +107,109 @@ var CallDebugPanel = ({ state }) => {
|
|
|
95
107
|
maxHeight: false,
|
|
96
108
|
info: /* @__PURE__ */ React.createElement("div", {
|
|
97
109
|
className: "flex items-center gap-2"
|
|
98
|
-
},
|
|
99
|
-
title: "Joined"
|
|
100
|
-
}, self?.joined ? "Active" : "Inactive"), users?.length !== void 0 && /* @__PURE__ */ React.createElement("span", {
|
|
101
|
-
title: "Users"
|
|
102
|
-
}, users?.length ?? 0, " User(s)"))
|
|
110
|
+
}, " ", state?.call.joined ? "Active" : "Inactive")
|
|
103
111
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
104
|
-
className: "flex flex-col gap-2
|
|
112
|
+
className: "flex flex-col w-full gap-2 text-xs"
|
|
105
113
|
}, /* @__PURE__ */ React.createElement("div", {
|
|
106
|
-
className: "flex items-
|
|
114
|
+
className: "flex items-center gap-2"
|
|
107
115
|
}, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
|
|
108
116
|
classNames: "text-sm"
|
|
109
117
|
}, t("show webrtc stats title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
|
|
110
118
|
checked: showDetailedWebRTCStats,
|
|
111
119
|
onCheckedChange: handleShowDetailedWebRTCStats
|
|
112
|
-
}))), /* @__PURE__ */ React.createElement(
|
|
120
|
+
}))), /* @__PURE__ */ React.createElement("div", {
|
|
121
|
+
className: "flex items-center gap-2"
|
|
122
|
+
}, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
|
|
123
|
+
classNames: "text-sm"
|
|
124
|
+
}, t("show calls history title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
|
|
125
|
+
checked: showServiceHistory,
|
|
126
|
+
onCheckedChange: handleToggleServiceHistory
|
|
127
|
+
}))), /* @__PURE__ */ React.createElement("div", {
|
|
128
|
+
className: "flex items-center gap-2"
|
|
129
|
+
}, /* @__PURE__ */ React.createElement(IconButton, {
|
|
113
130
|
classNames: "text-sm",
|
|
131
|
+
icon: "ph--copy--regular",
|
|
132
|
+
label: "copy raw",
|
|
133
|
+
onClick: handleCopyRaw
|
|
134
|
+
})), /* @__PURE__ */ React.createElement(Table, {
|
|
135
|
+
rows
|
|
136
|
+
}), showDetailedWebRTCStats && /* @__PURE__ */ React.createElement(JsonView, {
|
|
114
137
|
data: {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
iceConnectionState: state?.media.peer?.session?.peerConnection.iceConnectionState,
|
|
121
|
-
stats
|
|
122
|
-
}
|
|
123
|
-
} : {},
|
|
124
|
-
tracks: state?.media.peer?.session?.peerConnection.getTransceivers().map((transceiver) => {
|
|
125
|
-
const track = transceiver.direction === "recvonly" ? transceiver.receiver.track : transceiver.sender.track;
|
|
126
|
-
return {
|
|
127
|
-
id: track?.id,
|
|
128
|
-
kind: track?.kind,
|
|
129
|
-
direction: transceiver.direction,
|
|
130
|
-
enabled: track?.enabled,
|
|
131
|
-
muted: track?.muted,
|
|
132
|
-
readyState: track?.readyState,
|
|
133
|
-
settings: track?.getSettings()
|
|
134
|
-
};
|
|
135
|
-
}),
|
|
136
|
-
callsServiceHistory: state?.media.peer?.history.get()
|
|
138
|
+
stats
|
|
139
|
+
}
|
|
140
|
+
}), showServiceHistory && /* @__PURE__ */ React.createElement(JsonView, {
|
|
141
|
+
data: {
|
|
142
|
+
history: state?.media.peer?.history.get()
|
|
137
143
|
}
|
|
138
144
|
})));
|
|
139
145
|
} finally {
|
|
140
146
|
_effect.f();
|
|
141
147
|
}
|
|
142
148
|
};
|
|
149
|
+
var getCallStatusTable = (state) => {
|
|
150
|
+
if (!state || !state.call?.users) {
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
const self = state.call.self;
|
|
154
|
+
const users = state.call.users.filter((user) => user.id !== self.id).map((user) => {
|
|
155
|
+
const isOk = {
|
|
156
|
+
audio: user.tracks?.audio && state.media.pulledAudioTracks[user.tracks?.audio]?.ctx.disposed === false,
|
|
157
|
+
video: user.tracks?.video && state.media.pulledVideoStreams[user.tracks?.video]?.ctx.disposed === false,
|
|
158
|
+
screenshare: user.tracks?.screenshare && state.media.pulledVideoStreams[user.tracks?.screenshare]?.ctx.disposed === false
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
...user,
|
|
162
|
+
isOk
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
return [
|
|
166
|
+
[
|
|
167
|
+
"users",
|
|
168
|
+
state.call.users.length ?? 0
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
"*self* " + (self?.name ?? truncateKey(self.id, 8)),
|
|
172
|
+
self?.tracks?.audio && state.media.pushedAudioTrack ? "AUD \u2705" : "AUD \u274C",
|
|
173
|
+
self?.tracks?.video && state.media.pushedVideoTrack ? "VID \u2705" : "VID \u274C",
|
|
174
|
+
self?.tracks?.screenshareEnabled ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack ? "SCR \u2705" : "SCR \u274C" : void 0
|
|
175
|
+
],
|
|
176
|
+
...users.map((user) => [
|
|
177
|
+
user.name ?? truncateKey(user.id, 8),
|
|
178
|
+
user.isOk.audio ? "AUD \u2705" : "AUD \u274C",
|
|
179
|
+
user.isOk.video ? "VID \u2705" : "VID \u274C",
|
|
180
|
+
user.tracks?.screenshareEnabled ? user.isOk.screenshare ? "SCR \u2705" : "SCR \u274C" : void 0
|
|
181
|
+
]),
|
|
182
|
+
[
|
|
183
|
+
"ICE",
|
|
184
|
+
state.media.peer?.session?.peerConnection.iceConnectionState ?? "no connection"
|
|
185
|
+
]
|
|
186
|
+
];
|
|
187
|
+
};
|
|
188
|
+
(function(Unit2) {
|
|
189
|
+
Unit2.KB = (n) => ((n ?? 0) / 1e3).toFixed(2);
|
|
190
|
+
})(Unit || (Unit = {}));
|
|
191
|
+
var Table = ({ rows }) => {
|
|
192
|
+
var _effect = _useSignals();
|
|
193
|
+
try {
|
|
194
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
195
|
+
className: "w-full text-xs font-mono"
|
|
196
|
+
}, rows.map(([prefix, label, value, unit], i) => /* @__PURE__ */ React.createElement("div", {
|
|
197
|
+
key: i,
|
|
198
|
+
className: "grid grid-cols-[3fr_1fr_1fr_1fr]"
|
|
199
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
200
|
+
className: "p-1"
|
|
201
|
+
}, prefix), /* @__PURE__ */ React.createElement("div", {
|
|
202
|
+
className: "p-1"
|
|
203
|
+
}, label), /* @__PURE__ */ React.createElement("div", {
|
|
204
|
+
className: "p-1"
|
|
205
|
+
}, value), /* @__PURE__ */ React.createElement("div", {
|
|
206
|
+
className: "p-1"
|
|
207
|
+
}, unit))));
|
|
208
|
+
} finally {
|
|
209
|
+
_effect.f();
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
var Unit;
|
|
143
213
|
|
|
144
214
|
// src/components/CallSidebar.tsx
|
|
145
215
|
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
|
@@ -164,7 +234,7 @@ import { Capabilities, CollaborationActions, LayoutAction, createIntent, useCapa
|
|
|
164
234
|
import { Filter, Obj, Query, Relation as Relation3 } from "@dxos/echo";
|
|
165
235
|
import { Ref as Ref2, fullyQualifiedId as fullyQualifiedId3, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
|
|
166
236
|
import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
|
|
167
|
-
import { useThemeContext as useThemeContext2, useTranslation as
|
|
237
|
+
import { useThemeContext as useThemeContext2, useTranslation as useTranslation5 } from "@dxos/react-ui";
|
|
168
238
|
import { useAttended } from "@dxos/react-ui-attention";
|
|
169
239
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
170
240
|
import { Tabs } from "@dxos/react-ui-tabs";
|
|
@@ -187,14 +257,15 @@ import React3, { useCallback, useMemo as useMemo2, useRef, useState as useState2
|
|
|
187
257
|
import { Ref, Relation } from "@dxos/echo";
|
|
188
258
|
import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
|
|
189
259
|
import { useIdentity } from "@dxos/react-client/halo";
|
|
190
|
-
import { IconButton, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
260
|
+
import { IconButton as IconButton2, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
191
261
|
import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
|
|
192
262
|
import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
|
|
193
|
-
import { MessageTextbox, Thread } from "@dxos/react-ui-thread";
|
|
263
|
+
import { MessageTextbox, Thread as ThreadComponent } from "@dxos/react-ui-thread";
|
|
194
264
|
import { isNonNullable } from "@dxos/util";
|
|
195
265
|
var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
|
|
196
266
|
var _effect = _useSignals3();
|
|
197
267
|
try {
|
|
268
|
+
const { themeMode } = useThemeContext();
|
|
198
269
|
const { t } = useTranslation2(meta.id);
|
|
199
270
|
const identity = useIdentity();
|
|
200
271
|
const space = getSpace(anchor);
|
|
@@ -203,10 +274,8 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
203
274
|
const thread = Relation.getSource(anchor);
|
|
204
275
|
const activity = useStatus(space, fullyQualifiedId(thread));
|
|
205
276
|
const threadScrollRef = useRef(null);
|
|
206
|
-
const { themeMode } = useThemeContext();
|
|
207
277
|
const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
|
|
208
|
-
const [
|
|
209
|
-
const rerenderEditor = () => _setCount((count) => count + 1);
|
|
278
|
+
const [state, setState] = useState2({});
|
|
210
279
|
const messageRef = useRef("");
|
|
211
280
|
const extensions = useMemo2(() => [
|
|
212
281
|
createBasicExtensions({
|
|
@@ -216,11 +285,11 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
216
285
|
themeMode
|
|
217
286
|
}),
|
|
218
287
|
listener({
|
|
219
|
-
onChange: (text) => messageRef.current = text
|
|
288
|
+
onChange: ({ text }) => messageRef.current = text
|
|
220
289
|
}),
|
|
221
290
|
command
|
|
222
291
|
], [
|
|
223
|
-
|
|
292
|
+
state
|
|
224
293
|
]);
|
|
225
294
|
const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
|
|
226
295
|
behavior,
|
|
@@ -253,13 +322,13 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
253
322
|
onComment?.(anchor, messageRef.current);
|
|
254
323
|
messageRef.current = "";
|
|
255
324
|
scrollToEnd("instant");
|
|
256
|
-
|
|
325
|
+
setState({});
|
|
257
326
|
return true;
|
|
258
327
|
}, [
|
|
259
328
|
anchor,
|
|
260
329
|
identity
|
|
261
330
|
]);
|
|
262
|
-
return /* @__PURE__ */ React3.createElement(
|
|
331
|
+
return /* @__PURE__ */ React3.createElement(ThreadComponent.Root, {
|
|
263
332
|
id: fullyQualifiedId(thread),
|
|
264
333
|
classNames: "pbs-2 border-be border-subduedSeparator last:border-none",
|
|
265
334
|
current,
|
|
@@ -272,14 +341,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
272
341
|
asChild: true,
|
|
273
342
|
content: t("detached thread label"),
|
|
274
343
|
side: "top"
|
|
275
|
-
}, /* @__PURE__ */ React3.createElement(
|
|
344
|
+
}, /* @__PURE__ */ React3.createElement(ThreadComponent.Header, {
|
|
276
345
|
detached: true
|
|
277
|
-
}, thread.name)) : /* @__PURE__ */ React3.createElement(
|
|
346
|
+
}, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadComponent.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
|
|
278
347
|
role: "none",
|
|
279
348
|
className: buttonGroupClassNames
|
|
280
349
|
}, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
|
|
281
350
|
palette: "neutral"
|
|
282
|
-
}, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(
|
|
351
|
+
}, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
|
|
283
352
|
"data-testid": "thread.resolve",
|
|
284
353
|
variant: "ghost",
|
|
285
354
|
icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
|
|
@@ -290,7 +359,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
290
359
|
thread?.status !== "resolved" && hoverableControlItem
|
|
291
360
|
],
|
|
292
361
|
onClick: handleResolve
|
|
293
|
-
}), onThreadDelete && /* @__PURE__ */ React3.createElement(
|
|
362
|
+
}), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
|
|
294
363
|
"data-testid": "thread.delete",
|
|
295
364
|
variant: "ghost",
|
|
296
365
|
icon: "ph--x--regular",
|
|
@@ -312,7 +381,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
|
|
|
312
381
|
extensions,
|
|
313
382
|
onSend: handleComment,
|
|
314
383
|
...textboxMetadata
|
|
315
|
-
}), /* @__PURE__ */ React3.createElement(
|
|
384
|
+
}), /* @__PURE__ */ React3.createElement(ThreadComponent.Status, {
|
|
316
385
|
activity
|
|
317
386
|
}, t("activity message")), /* @__PURE__ */ React3.createElement("div", {
|
|
318
387
|
role: "none",
|
|
@@ -377,10 +446,12 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
|
|
|
377
446
|
// src/components/ThreadSettings.tsx
|
|
378
447
|
import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
|
|
379
448
|
import React5 from "react";
|
|
449
|
+
import { useTranslation as useTranslation4 } from "@dxos/react-ui";
|
|
380
450
|
import { ControlPage } from "@dxos/react-ui-form";
|
|
381
|
-
var ThreadSettings = ({ settings }) => {
|
|
451
|
+
var ThreadSettings = ({ settings: _settings }) => {
|
|
382
452
|
var _effect = _useSignals5();
|
|
383
453
|
try {
|
|
454
|
+
const { t: _t } = useTranslation4(meta.id);
|
|
384
455
|
return /* @__PURE__ */ React5.createElement(ControlPage, null);
|
|
385
456
|
} finally {
|
|
386
457
|
_effect.f();
|
|
@@ -388,14 +459,14 @@ var ThreadSettings = ({ settings }) => {
|
|
|
388
459
|
};
|
|
389
460
|
|
|
390
461
|
// src/components/index.ts
|
|
391
|
-
var ChannelContainer2 = lazy(() => import("./ChannelContainer-
|
|
392
|
-
var ChatContainer = lazy(() => import("./ChatContainer-
|
|
462
|
+
var ChannelContainer2 = lazy(() => import("./ChannelContainer-SVV4ZX5T.mjs"));
|
|
463
|
+
var ChatContainer = lazy(() => import("./ChatContainer-ALFWQ65B.mjs"));
|
|
393
464
|
|
|
394
465
|
// src/components/ThreadComplementary.tsx
|
|
395
466
|
var ThreadComplementary = ({ subject }) => {
|
|
396
467
|
var _effect = _useSignals6();
|
|
397
468
|
try {
|
|
398
|
-
const { t } =
|
|
469
|
+
const { t } = useTranslation5(meta.id);
|
|
399
470
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
400
471
|
const identity = useIdentity2();
|
|
401
472
|
const { tx } = useThemeContext2();
|
|
@@ -419,7 +490,7 @@ var ThreadComplementary = ({ subject }) => {
|
|
|
419
490
|
]);
|
|
420
491
|
const space = getSpace2(subject);
|
|
421
492
|
const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
|
|
422
|
-
const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj.instanceOf(
|
|
493
|
+
const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj.instanceOf(Thread_exports.Thread, Relation3.getSource(anchor))).concat(drafts ?? []);
|
|
423
494
|
const attended = useAttended();
|
|
424
495
|
const handleAttend = useCallback2((anchor) => {
|
|
425
496
|
const thread = Relation3.getSource(anchor);
|
|
@@ -508,8 +579,7 @@ var ThreadComplementary = ({ subject }) => {
|
|
|
508
579
|
onAcceptProposal: handleAcceptProposal
|
|
509
580
|
});
|
|
510
581
|
return /* @__PURE__ */ React6.createElement(StackItem.Content, {
|
|
511
|
-
toolbar: true
|
|
512
|
-
classNames: "overflow-hidden"
|
|
582
|
+
toolbar: true
|
|
513
583
|
}, /* @__PURE__ */ React6.createElement(Tabs.Root, {
|
|
514
584
|
value: showResolvedThreads ? "all" : "unresolved",
|
|
515
585
|
orientation: "horizontal",
|
|
@@ -545,4 +615,4 @@ export {
|
|
|
545
615
|
ChannelContainer2 as ChannelContainer,
|
|
546
616
|
ChatContainer
|
|
547
617
|
};
|
|
548
|
-
//# sourceMappingURL=chunk-
|
|
618
|
+
//# sourceMappingURL=chunk-IQSXEHOW.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/CallDebugPanel.tsx", "../../../src/components/CallSidebar.tsx", "../../../src/components/ThreadComplementary.tsx", "../../../src/components/index.ts", "../../../src/components/CommentsContainer.tsx", "../../../src/components/CommentsThreadContainer.tsx", "../../../src/components/ThreadSettings.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { WebRTCStats, type WebRTCStatsEvent } from '@peermetrics/webrtc-stats';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { truncateKey } from '@dxos/debug';\nimport { JsonView, Panel } from '@dxos/devtools';\nimport { log } from '@dxos/log';\nimport { IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { type EncodedTrackName, type GlobalState } from '../calls';\nimport { meta } from '../meta';\n\nexport type CallDebugPanelProps = ThemedClassName<{\n state?: GlobalState;\n}>;\n\nexport const CallDebugPanel = ({ state }: CallDebugPanelProps) => {\n const { t } = useTranslation(meta.id);\n\n const [open, setOpen] = useState(false);\n const handleToggle = () => setOpen(!open);\n const [showServiceHistory, setShowServiceHistory] = useState(false);\n const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);\n\n const handleCopyRaw = async () => {\n await navigator.clipboard.writeText(JSON.stringify({ users: state?.call?.users, stats }, null, 2));\n };\n\n const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);\n const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);\n\n const webrtcStats = useMemo(\n () =>\n new WebRTCStats({\n getStatsInterval: 1000,\n }),\n [],\n );\n const [stats, setStats] = useState<WebRTCStatsEvent['data']>();\n\n useEffect(() => {\n const pc = state?.media.peer?.session?.peerConnection;\n const handleStats = (stats: WebRTCStatsEvent) => {\n setStats(stats.data);\n };\n let added = false;\n if (pc && showDetailedWebRTCStats) {\n webrtcStats.addConnection({ pc, peerId: 1, connectionId: '1' });\n webrtcStats.on('stats', handleStats as never);\n added = true;\n }\n return () => {\n try {\n if (pc && added) {\n webrtcStats.removeConnection({ pc });\n webrtcStats.removeListener('stats', handleStats as never);\n }\n } catch (error) {\n log.error('error removing webrtc stats', { error, pc, peerId: 1, connectionId: '1' });\n }\n };\n }, [state?.media.peer?.session?.peerConnection, showDetailedWebRTCStats]);\n\n const rows = useMemo(() => getCallStatusTable(state), [state?.call.users, state?.media.pulledAudioTracks]);\n\n return (\n <Panel\n id='meeting-status'\n icon='ph--video-conference--regular'\n open={open}\n onToggle={handleToggle}\n title={t('meeting status title')}\n maxHeight={false}\n info={<div className='flex items-center gap-2'> {state?.call.joined ? 'Active' : 'Inactive'}</div>}\n >\n <div className='flex flex-col w-full gap-2 text-xs'>\n <div className='flex items-center gap-2'>\n <Input.Root>\n <Input.Label classNames={'text-sm'}>{t('show webrtc stats title')}</Input.Label>\n <Input.Checkbox checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />\n </Input.Root>\n </div>\n <div className='flex items-center gap-2'>\n <Input.Root>\n <Input.Label classNames={'text-sm'}>{t('show calls history title')}</Input.Label>\n <Input.Checkbox checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />\n </Input.Root>\n </div>\n <div className='flex items-center gap-2'>\n <IconButton classNames={'text-sm'} icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />\n </div>\n <Table rows={rows} />\n {showDetailedWebRTCStats && <JsonView data={{ stats }} />}\n {showServiceHistory && <JsonView data={{ history: state?.media.peer?.history.get() }} />}\n </div>\n </Panel>\n );\n};\n\nconst getCallStatusTable = (state?: GlobalState): TableProps['rows'] => {\n if (!state || !state.call?.users) {\n return [];\n }\n\n const self = state.call.self;\n const users = state.call.users\n .filter((user) => user.id !== self!.id)\n .map((user) => {\n const isOk = {\n audio:\n user.tracks?.audio &&\n state.media.pulledAudioTracks[user.tracks?.audio as EncodedTrackName]?.ctx.disposed === false,\n video:\n user.tracks?.video &&\n state.media.pulledVideoStreams[user.tracks?.video as EncodedTrackName]?.ctx.disposed === false,\n screenshare:\n user.tracks?.screenshare &&\n state.media.pulledVideoStreams[user.tracks?.screenshare as EncodedTrackName]?.ctx.disposed === false,\n };\n\n return {\n ...user,\n isOk,\n };\n });\n\n return [\n ['users', state.call.users.length ?? 0],\n [\n '*self* ' + (self?.name ?? truncateKey(self!.id, 8)),\n self?.tracks?.audio && state.media.pushedAudioTrack ? 'AUD ✅' : 'AUD ❌',\n self?.tracks?.video && state.media.pushedVideoTrack ? 'VID ✅' : 'VID ❌',\n self?.tracks?.screenshareEnabled\n ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack\n ? 'SCR ✅'\n : 'SCR ❌'\n : undefined,\n ],\n\n ...users.map((user) => [\n user.name ?? truncateKey(user.id, 8),\n user.isOk.audio ? 'AUD ✅' : 'AUD ❌',\n user.isOk.video ? 'VID ✅' : 'VID ❌',\n user.tracks?.screenshareEnabled ? (user.isOk.screenshare ? 'SCR ✅' : 'SCR ❌') : undefined,\n ]),\n ['ICE', state.media.peer?.session?.peerConnection.iceConnectionState ?? 'no connection'],\n ];\n};\n\nexport namespace Unit {\n export const KB = (n?: number) => ((n ?? 0) / 1_000).toFixed(2);\n}\n\nexport type TableProps = {\n rows: (string | number | undefined)[][];\n};\n\nexport const Table = ({ rows }: TableProps) => {\n return (\n <div className='w-full text-xs font-mono'>\n {rows.map(([prefix, label, value, unit], i) => (\n <div key={i} className='grid grid-cols-[3fr_1fr_1fr_1fr]'>\n <div className='p-1'>{prefix}</div>\n <div className='p-1'>{label}</div>\n <div className='p-1'>{value}</div>\n <div className='p-1'>{unit}</div>\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\n\nimport { ThreadCapabilities } from '../capabilities';\n\nimport { ChannelContainer } from './ChannelContainer';\n\nexport const CallSidebar = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n return <ChannelContainer roomId={call.roomId} />;\n};\n\nexport default CallSidebar;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Capabilities,\n CollaborationActions,\n LayoutAction,\n createIntent,\n useCapabilities,\n useCapability,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { Filter, Obj, Query, Relation } from '@dxos/echo';\nimport { Ref, fullyQualifiedId, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { AnchoredTo } from '@dxos/schema';\n\nimport { ThreadCapabilities } from '../capabilities';\nimport { CommentsContainer, type CommentsContainerProps } from '../components';\nimport { meta } from '../meta';\nimport { Thread, ThreadAction } from '../types';\n\nexport const ThreadComplementary = ({ subject }: { subject: any }) => {\n const { t } = useTranslation(meta.id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const { tx } = useThemeContext();\n const subjectId = fullyQualifiedId(subject);\n\n const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);\n const drafts = state.drafts[subjectId];\n const viewState = useMemo(() => getViewState(subjectId), [getViewState, subjectId]);\n const { showResolvedThreads } = viewState;\n const onChangeViewState = useCallback(\n (nextValue: string) => {\n viewState.showResolvedThreads = nextValue === 'all';\n },\n [viewState],\n );\n\n const anchorSorts = useCapabilities(Capabilities.AnchorSort);\n const sort = useMemo(\n () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,\n [anchorSorts, subject],\n );\n\n const space = getSpace(subject);\n const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));\n const anchors = objectsAnchoredTo\n .toSorted((a, b) => sort?.(a, b) ?? 0)\n .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))\n .concat(drafts ?? []);\n\n const attended = useAttended();\n\n const handleAttend = useCallback(\n (anchor: AnchoredTo) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const threadId = fullyQualifiedId(thread);\n\n if (state.current !== threadId) {\n state.current = threadId;\n\n // TODO(wittjosiah): Should this be a thread-specific intent?\n // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.\n // This may be overloading this intent or highjacking its intended purpose.\n void dispatch(\n createIntent(LayoutAction.ScrollIntoView, {\n part: 'current',\n subject: fullyQualifiedId(subject),\n options: {\n cursor: anchor.anchor,\n ref: threadId,\n },\n }),\n );\n }\n },\n [state.current, dispatch, subject],\n );\n\n const handleComment = useCallback(\n async (anchor: AnchoredTo, text: string) => {\n await dispatch(\n createIntent(ThreadAction.AddMessage, { anchor, subject, sender: { identityDid: identity?.did }, text }),\n );\n\n const thread = Relation.getSource(anchor) as Thread.Thread;\n state.current = fullyQualifiedId(thread);\n },\n [dispatch, identity, subject],\n );\n\n const handleResolve = useCallback(\n (anchor: AnchoredTo) =>\n dispatch(createIntent(ThreadAction.ToggleResolved, { thread: Relation.getSource(anchor) as Thread.Thread })),\n [dispatch],\n );\n\n const handleThreadDelete = useCallback(\n (anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),\n [dispatch, subject],\n );\n\n const handleMessageDelete = useCallback(\n (anchor: AnchoredTo, messageId: string) =>\n dispatch(createIntent(ThreadAction.DeleteMessage, { anchor, subject, messageId })),\n [dispatch, subject],\n );\n\n const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(\n async (anchor, messageId) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));\n const message = thread.messages[messageIndex]?.target;\n const proposal = message?.blocks.find((block) => block._tag === 'proposal');\n if (!proposal || !anchor.anchor) {\n return;\n }\n\n await dispatch(\n createIntent(CollaborationActions.AcceptProposal, {\n subject,\n anchor: anchor.anchor,\n proposal,\n }),\n );\n await dispatch(createIntent(ThreadAction.ToggleResolved, { thread }));\n },\n [dispatch, subject],\n );\n\n const comments = (\n <CommentsContainer\n anchors={anchors}\n currentId={attended.includes(subjectId) ? state.current : undefined}\n showResolvedThreads={showResolvedThreads}\n onAttend={handleAttend}\n onComment={handleComment}\n onResolve={handleResolve}\n onMessageDelete={handleMessageDelete}\n onThreadDelete={handleThreadDelete}\n onAcceptProposal={handleAcceptProposal}\n />\n );\n\n return (\n <StackItem.Content toolbar>\n <Tabs.Root\n value={showResolvedThreads ? 'all' : 'unresolved'}\n orientation='horizontal'\n classNames={[\n 'contents [&_[role=\"tabpanel\"]]:min-bs-0 [&_[role=\"tabpanel\"]]:overflow-y-auto [&_[role=\"tabpanel\"]]:scrollbar-thin',\n ]}\n onValueChange={onChangeViewState}\n >\n {/* TODO(burdon): Standardize (like Tollbar). */}\n <Tabs.Tablist classNames={mx('bg-toolbarSurface border-b border-subduedSeparator')}>\n <Tabs.Tab value='unresolved' classNames='text-sm'>\n {t('show unresolved label')}\n </Tabs.Tab>\n <Tabs.Tab value='all' classNames='text-sm'>\n {t('show all label')}\n </Tabs.Tab>\n </Tabs.Tablist>\n <div className='overflow-y-auto'>\n <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>\n <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>\n </div>\n </Tabs.Root>\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const ChannelContainer = lazy(() => import('./ChannelContainer'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n\n// TODO(wittjosiah): Suspense boundary for sidebar?\nexport * from './Call';\nexport * from './CallDebugPanel';\nexport * from './CallSidebar';\nexport * from './CommentsContainer';\nexport * from './CommentsThreadContainer';\nexport * from './MessageContainer';\nexport * from './ThreadComplementary';\nexport * from './ThreadSettings';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect } from 'react';\n\nimport { Relation } from '@dxos/echo';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';\nimport { type AnchoredTo } from '@dxos/schema';\n\nimport { meta } from '../meta';\nimport { type Thread } from '../types';\n\nimport { CommentsThreadContainer, type CommentsThreadContainerProps } from './CommentsThreadContainer';\n\nexport type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor' | 'current'> & {\n anchors: AnchoredTo[];\n currentId?: string;\n showResolvedThreads?: boolean;\n};\n\n/**\n * Root container for collection of comment threads.\n */\nexport const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }: CommentsContainerProps) => {\n const { t } = useTranslation(meta.id);\n\n // TODO(wittjosiah): There seems to be a race between thread and anchor being deleted.\n const filteredAnchors = showResolvedThreads\n ? anchors.filter((anchor) => !!Relation.getSource(anchor))\n : anchors.filter((anchor) => {\n const thread = Relation.getSource(anchor);\n return thread && thread.status !== 'resolved';\n });\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n if (filteredAnchors.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root>\n <Callout.Title>\n <Trans\n {...{\n t,\n i18nKey: 'no comments message',\n components: {\n commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='inline-block' />,\n },\n }}\n />\n </Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div>\n {filteredAnchors.map((anchor) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const threadId = fullyQualifiedId(thread);\n return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;\n })}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Ref, Relation } from '@dxos/echo';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';\nimport {\n MessageTextbox,\n type MessageTextboxProps,\n Thread as ThreadComponent,\n type ThreadRootProps,\n} from '@dxos/react-ui-thread';\nimport { type AnchoredTo } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { useStatus } from '../hooks';\nimport { meta } from '../meta';\nimport { type Thread } from '../types';\nimport { getMessageMetadata } from '../util';\n\nimport { command } from './command-extension';\nimport { MessageContainer, buttonClassNames, buttonGroupClassNames } from './MessageContainer';\n\nexport type CommentsThreadContainerProps = {\n anchor: AnchoredTo;\n onAttend?: (anchor: AnchoredTo) => void;\n onComment?: (anchor: AnchoredTo, message: string) => void;\n onResolve?: (anchor: AnchoredTo) => void;\n onMessageDelete?: (anchor: AnchoredTo, messageId: string) => void;\n onThreadDelete?: (anchor: AnchoredTo) => void;\n onAcceptProposal?: (anchor: AnchoredTo, messageId: string) => void;\n} & Pick<ThreadRootProps, 'current'>;\n\nexport const CommentsThreadContainer = ({\n anchor,\n current,\n onAttend,\n onComment,\n onResolve,\n onMessageDelete,\n onThreadDelete,\n onAcceptProposal,\n}: CommentsThreadContainerProps) => {\n const { themeMode } = useThemeContext();\n const { t } = useTranslation(meta.id);\n const identity = useIdentity()!;\n const space = getSpace(anchor);\n const members = useMembers(space?.key);\n const detached = !anchor.anchor;\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const activity = useStatus(space, fullyQualifiedId(thread));\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\n\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [state, setState] = useState({});\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: ({ text }) => (messageRef.current = text) }),\n command,\n ],\n [state],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleAttend = useCallback(() => onAttend?.(anchor), [onAttend, anchor]);\n const handleResolve = useCallback(() => onResolve?.(anchor), [onResolve, anchor]);\n const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(anchor, id), [onMessageDelete, anchor]);\n const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);\n const handleAcceptProposal = useCallback((id: string) => onAcceptProposal?.(anchor, id), [onAcceptProposal, anchor]);\n\n const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {\n if (!messageRef.current) {\n return false;\n }\n\n onComment?.(anchor, messageRef.current);\n messageRef.current = '';\n scrollToEnd('instant');\n setState({});\n\n return true;\n }, [anchor, identity]);\n\n return (\n <ThreadComponent.Root\n id={fullyQualifiedId(thread)}\n classNames='pbs-2 border-be border-subduedSeparator last:border-none'\n current={current}\n onClickCapture={handleAttend}\n onFocusCapture={handleAttend}\n >\n <div\n role='none'\n className={mx(\n 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>\n <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>\n </Tooltip.Trigger>\n ) : (\n <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>\n )}\n <div role='none' className={buttonGroupClassNames}>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <IconButton\n data-testid='thread.resolve'\n variant='ghost'\n icon={thread?.status === 'resolved' ? 'ph--check--fill' : 'ph--check--regular'}\n iconOnly\n label={t('resolve thread label')}\n classNames={[buttonClassNames, thread?.status !== 'resolved' && hoverableControlItem]}\n onClick={handleResolve}\n />\n )}\n {onThreadDelete && (\n <IconButton\n data-testid='thread.delete'\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('delete thread label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleThreadDelete}\n />\n )}\n </div>\n </div>\n\n {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}\n {Ref.Array.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (\n <MessageContainer\n key={message.id}\n editable\n message={message}\n members={members}\n onDelete={handleMessageDelete}\n onAcceptProposal={handleAcceptProposal}\n />\n ))}\n\n {/*\n TODO(wittjosiah): Can't autofocus this generally.\n There can be multiple threads with inputs and they can't all be focused.\n Also, it steals focus from documents when first rendered.\n Need to find a way to autofocus in one scenario only: when a new thread is created.\n */}\n <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />\n\n <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>\n\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n </ThreadComponent.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlPage } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\nimport type { ThreadSettingsProps } from '../types';\n\nexport const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {\n const { t: _t } = useTranslation(meta.id);\n return <ControlPage></ControlPage>;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["WebRTCStats", "React", "useEffect", "useMemo", "useState", "truncateKey", "JsonView", "Panel", "log", "IconButton", "Input", "useTranslation", "CallDebugPanel", "state", "t", "useTranslation", "meta", "id", "open", "setOpen", "useState", "handleToggle", "showServiceHistory", "setShowServiceHistory", "handleToggleServiceHistory", "handleCopyRaw", "navigator", "clipboard", "writeText", "JSON", "stringify", "users", "call", "stats", "showDetailedWebRTCStats", "setShowDetailedWebRTCStats", "handleShowDetailedWebRTCStats", "webrtcStats", "useMemo", "WebRTCStats", "getStatsInterval", "setStats", "useEffect", "pc", "media", "peer", "session", "peerConnection", "handleStats", "data", "added", "addConnection", "peerId", "connectionId", "on", "removeConnection", "removeListener", "error", "log", "rows", "getCallStatusTable", "pulledAudioTracks", "Panel", "icon", "onToggle", "title", "maxHeight", "info", "div", "className", "joined", "Input", "Root", "Label", "classNames", "Checkbox", "checked", "onCheckedChange", "IconButton", "label", "onClick", "Table", "JsonView", "history", "get", "self", "filter", "user", "map", "isOk", "audio", "tracks", "ctx", "disposed", "video", "pulledVideoStreams", "screenshare", "length", "name", "truncateKey", "pushedAudioTrack", "pushedVideoTrack", "screenshareEnabled", "pushedScreenshareTrack", "undefined", "iceConnectionState", "Unit", "KB", "n", "toFixed", "prefix", "value", "unit", "i", "key", "React", "useCapability", "CallSidebar", "call", "useCapability", "ThreadCapabilities", "CallManager", "React", "ChannelContainer", "roomId", "React", "useCallback", "useMemo", "Capabilities", "CollaborationActions", "LayoutAction", "createIntent", "useCapabilities", "useCapability", "useIntentDispatcher", "Filter", "Obj", "Query", "Relation", "Ref", "fullyQualifiedId", "getSpace", "useQuery", "useIdentity", "useThemeContext", "useTranslation", "useAttended", "StackItem", "Tabs", "mx", "AnchoredTo", "lazy", "React", "useEffect", "Relation", "fullyQualifiedId", "Callout", "Icon", "Trans", "useTranslation", "React", "useCallback", "useMemo", "useRef", "useState", "Ref", "Relation", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "IconButton", "Tag", "Tooltip", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageTextbox", "Thread", "ThreadComponent", "isNonNullable", "CommentsThreadContainer", "anchor", "current", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "themeMode", "useThemeContext", "t", "useTranslation", "meta", "id", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "detached", "thread", "Relation", "getSource", "activity", "useStatus", "fullyQualifiedId", "threadScrollRef", "useRef", "textboxMetadata", "getMessageMetadata", "state", "setState", "useState", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "handleAttend", "useCallback", "handleResolve", "handleMessageDelete", "handleThreadDelete", "handleAcceptProposal", "handleComment", "React", "ThreadComponent", "Root", "classNames", "onClickCapture", "onFocusCapture", "div", "role", "className", "mx", "hoverableControls", "hoverableFocusedWithinControls", "Tooltip", "Trigger", "asChild", "content", "side", "Header", "name", "buttonGroupClassNames", "status", "Tag", "palette", "IconButton", "data-testid", "variant", "icon", "iconOnly", "label", "buttonClassNames", "hoverableControlItem", "onClick", "Ref", "Array", "targets", "messages", "filter", "isNonNullable", "map", "message", "MessageContainer", "editable", "onDelete", "MessageTextbox", "onSend", "Status", "ref", "CommentsContainer", "anchors", "currentId", "showResolvedThreads", "props", "t", "useTranslation", "meta", "id", "filteredAnchors", "filter", "anchor", "Relation", "getSource", "thread", "status", "useEffect", "document", "getElementById", "scrollIntoView", "behavior", "block", "length", "React", "div", "role", "className", "Callout", "Root", "Title", "Trans", "i18nKey", "components", "commentIcon", "Icon", "icon", "size", "classNames", "map", "threadId", "fullyQualifiedId", "CommentsThreadContainer", "key", "current", "React", "useTranslation", "ControlPage", "ThreadSettings", "settings", "_settings", "t", "_t", "useTranslation", "meta", "id", "React", "ControlPage", "ChannelContainer", "lazy", "ChatContainer", "ThreadComplementary", "subject", "t", "useTranslation", "meta", "id", "dispatchPromise", "dispatch", "useIntentDispatcher", "identity", "useIdentity", "tx", "useThemeContext", "subjectId", "fullyQualifiedId", "state", "getViewState", "useCapability", "ThreadCapabilities", "MutableState", "drafts", "viewState", "useMemo", "showResolvedThreads", "onChangeViewState", "useCallback", "nextValue", "anchorSorts", "useCapabilities", "Capabilities", "AnchorSort", "sort", "find", "key", "Obj", "getTypename", "space", "getSpace", "objectsAnchoredTo", "useQuery", "Query", "select", "Filter", "ids", "targetOf", "AnchoredTo", "anchors", "toSorted", "a", "b", "filter", "anchor", "instanceOf", "Thread", "Relation", "getSource", "concat", "attended", "useAttended", "handleAttend", "thread", "threadId", "current", "createIntent", "LayoutAction", "ScrollIntoView", "part", "options", "cursor", "ref", "handleComment", "text", "ThreadAction", "AddMessage", "sender", "identityDid", "did", "handleResolve", "ToggleResolved", "handleThreadDelete", "Delete", "handleMessageDelete", "messageId", "DeleteMessage", "handleAcceptProposal", "messageIndex", "messages", "findIndex", "Ref", "hasObjectId", "message", "target", "proposal", "blocks", "block", "_tag", "CollaborationActions", "AcceptProposal", "comments", "React", "CommentsContainer", "currentId", "includes", "undefined", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "StackItem", "Content", "toolbar", "Tabs", "Root", "value", "orientation", "classNames", "onValueChange", "Tablist", "mx", "Tab", "div", "className", "Tabpanel"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// src/meta.ts
|
|
8
|
+
import { trim } from "@dxos/util";
|
|
9
|
+
var meta = {
|
|
10
|
+
id: "dxos.org/plugin/thread",
|
|
11
|
+
name: "Chat",
|
|
12
|
+
description: trim`
|
|
13
|
+
Multi-modal communication platform supporting text chat, voice, and video conferencing.
|
|
14
|
+
Create threaded conversations and add contextual comments directly on any workspace object.
|
|
15
|
+
`,
|
|
16
|
+
icon: "ph--video-conference--regular",
|
|
17
|
+
iconHue: "rose",
|
|
18
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread"
|
|
19
|
+
};
|
|
20
|
+
var THREAD_ITEM = `${meta.id}/item`;
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
__export,
|
|
24
|
+
meta,
|
|
25
|
+
THREAD_ITEM
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=chunk-K2DUJRFJ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\n// TODO(wittjosiah): Needs screenshots.\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/thread',\n name: 'Chat',\n description: trim`\n Multi-modal communication platform supporting text chat, voice, and video conferencing.\n Create threaded conversations and add contextual comments directly on any workspace object.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n\nexport const THREAD_ITEM = `${meta.id}/item`;\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAKA,SAASA,YAAY;AAGd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;EACNC,SAAS;EACTC,QAAQ;AACV;AAEO,IAAMC,cAAc,GAAGR,KAAKC,EAAE;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "THREAD_ITEM"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// src/capabilities/index.ts
|
|
2
|
+
import { lazy } from "@dxos/app-framework";
|
|
3
|
+
var AppGraphBuilder = lazy(() => import("./app-graph-builder-ACBXRBOS.mjs"));
|
|
4
|
+
var CallManager = lazy(() => import("./call-manager-P3MYR2JS.mjs"));
|
|
5
|
+
var IntentResolver = lazy(() => import("./intent-resolver-5POQTZ24.mjs"));
|
|
6
|
+
var Markdown = lazy(() => import("./markdown-L7LDNF56.mjs"));
|
|
7
|
+
var ReactRoot = lazy(() => import("./react-root-RCJLK4EP.mjs"));
|
|
8
|
+
var ReactSurface = lazy(() => import("./react-surface-IC576W2W.mjs"));
|
|
9
|
+
var ThreadSettings = lazy(() => import("./settings-5FYGBOGI.mjs"));
|
|
10
|
+
var ThreadState = lazy(() => import("./state-36REWXO5.mjs"));
|
|
11
|
+
var Toolkit = lazy(() => import("./toolkit-PXASLYEQ.mjs"));
|
|
12
|
+
|
|
13
|
+
export {
|
|
14
|
+
AppGraphBuilder,
|
|
15
|
+
CallManager,
|
|
16
|
+
IntentResolver,
|
|
17
|
+
Markdown,
|
|
18
|
+
ReactRoot,
|
|
19
|
+
ReactSurface,
|
|
20
|
+
ThreadState,
|
|
21
|
+
Toolkit
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-L6F2AG6W.mjs.map
|