@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.
Files changed (244) hide show
  1. package/dist/lib/browser/ChannelContainer-SVV4ZX5T.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-ALFWQ65B.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-ACBXRBOS.mjs} +20 -20
  4. package/dist/lib/browser/app-graph-builder-ACBXRBOS.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-P3MYR2JS.mjs} +7 -7
  6. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs.map → call-manager-P3MYR2JS.mjs.map} +1 -1
  7. package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-6CUDBEYP.mjs} +12 -11
  8. package/dist/lib/browser/chunk-6CUDBEYP.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
  10. package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  12. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-DJOUMWEL.mjs} +20 -18
  14. package/dist/lib/browser/chunk-DJOUMWEL.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-HDEQRBOC.mjs} +2 -2
  16. package/dist/lib/browser/{chunk-2P3GVRHP.mjs.map → chunk-HDEQRBOC.mjs.map} +2 -2
  17. package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-IQSXEHOW.mjs} +139 -69
  18. package/dist/lib/browser/chunk-IQSXEHOW.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-K2DUJRFJ.mjs +27 -0
  20. package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-L6F2AG6W.mjs +23 -0
  22. package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-US5ZQYC3.mjs} +267 -367
  23. package/dist/lib/browser/chunk-US5ZQYC3.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-UTSLSZED.mjs +178 -0
  25. package/dist/lib/browser/chunk-UTSLSZED.mjs.map +7 -0
  26. package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-XYUJXHYV.mjs} +53 -3
  27. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
  28. package/dist/lib/browser/index.mjs +23 -22
  29. package/dist/lib/browser/index.mjs.map +3 -3
  30. package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-5POQTZ24.mjs} +25 -34
  31. package/dist/lib/browser/intent-resolver-5POQTZ24.mjs.map +7 -0
  32. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-L7LDNF56.mjs} +9 -9
  33. package/dist/lib/browser/markdown-L7LDNF56.mjs.map +7 -0
  34. package/dist/lib/browser/meta.json +1 -1
  35. package/dist/lib/browser/react-root-RCJLK4EP.mjs +28 -0
  36. package/dist/lib/browser/react-root-RCJLK4EP.mjs.map +7 -0
  37. package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-IC576W2W.mjs} +27 -27
  38. package/dist/lib/browser/react-surface-IC576W2W.mjs.map +7 -0
  39. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-5FYGBOGI.mjs} +5 -5
  40. package/dist/lib/browser/{settings-GRKEID73.mjs.map → settings-5FYGBOGI.mjs.map} +1 -1
  41. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-36REWXO5.mjs} +5 -5
  42. package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-36REWXO5.mjs.map} +1 -1
  43. package/dist/lib/browser/toolkit-PXASLYEQ.mjs +74 -0
  44. package/dist/lib/browser/toolkit-PXASLYEQ.mjs.map +7 -0
  45. package/dist/lib/browser/types/index.mjs +7 -9
  46. package/dist/lib/node-esm/ChannelContainer-63GMQ753.mjs +17 -0
  47. package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs → ChatContainer-MFKPXMIK.mjs} +6 -6
  48. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-JXD7KY3G.mjs} +20 -20
  49. package/dist/lib/node-esm/app-graph-builder-JXD7KY3G.mjs.map +7 -0
  50. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-FCEFP7EJ.mjs} +7 -7
  51. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs.map → call-manager-FCEFP7EJ.mjs.map} +1 -1
  52. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-2MMJF7DW.mjs} +2 -2
  53. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs.map → chunk-2MMJF7DW.mjs.map} +2 -2
  54. package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-2V3WSLUZ.mjs} +53 -3
  55. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  57. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-AFDO2SUZ.mjs +25 -0
  59. package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-KGYDYYKJ.mjs} +267 -367
  60. package/dist/lib/node-esm/chunk-KGYDYYKJ.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-NWUUMKVQ.mjs} +12 -11
  62. package/dist/lib/node-esm/chunk-NWUUMKVQ.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-Q7AKKZNY.mjs} +139 -69
  64. package/dist/lib/node-esm/chunk-Q7AKKZNY.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-QCQAAU6J.mjs} +20 -18
  66. package/dist/lib/node-esm/chunk-QCQAAU6J.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-TYLLHI46.mjs +179 -0
  68. package/dist/lib/node-esm/chunk-TYLLHI46.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-XI45H4IV.mjs +28 -0
  70. package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +19 -0
  72. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +7 -0
  73. package/dist/lib/node-esm/index.mjs +23 -22
  74. package/dist/lib/node-esm/index.mjs.map +3 -3
  75. package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-63NV3XD2.mjs} +25 -34
  76. package/dist/lib/node-esm/intent-resolver-63NV3XD2.mjs.map +7 -0
  77. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-ZQW7MI5U.mjs} +9 -9
  78. package/dist/lib/node-esm/markdown-ZQW7MI5U.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/react-root-4IDB2SN2.mjs +29 -0
  81. package/dist/lib/node-esm/react-root-4IDB2SN2.mjs.map +7 -0
  82. package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-O4LGTAZ3.mjs} +27 -27
  83. package/dist/lib/node-esm/react-surface-O4LGTAZ3.mjs.map +7 -0
  84. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-EOBQUZSW.mjs} +5 -5
  85. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs.map → settings-EOBQUZSW.mjs.map} +1 -1
  86. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-X3W67GTL.mjs} +5 -5
  87. package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-X3W67GTL.mjs.map} +1 -1
  88. package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs +75 -0
  89. package/dist/lib/node-esm/toolkit-X2KA4FNC.mjs.map +7 -0
  90. package/dist/lib/node-esm/types/index.mjs +7 -9
  91. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  92. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  93. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  94. package/dist/types/src/calls/types.d.ts.map +1 -1
  95. package/dist/types/src/calls/util/calls-service.d.ts +2 -0
  96. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  97. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  98. package/dist/types/src/calls-service.stories.d.ts +0 -1
  99. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  102. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/toolkit.d.ts +21 -2
  105. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -1
  106. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  107. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  108. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  109. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  110. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  111. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  112. package/dist/types/src/components/ChannelContainer.stories.d.ts +74 -8
  113. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/Chat.stories.d.ts +74 -6
  115. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  117. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/Comments.stories.d.ts +3 -2
  119. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  121. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  122. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  123. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  124. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +4 -2
  126. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +4 -2
  128. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  130. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  131. package/dist/types/src/components/index.d.ts +1 -1
  132. package/dist/types/src/components/index.d.ts.map +1 -1
  133. package/dist/types/src/components/testing.d.ts +3 -3
  134. package/dist/types/src/components/testing.d.ts.map +1 -1
  135. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  136. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  137. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  138. package/dist/types/src/meta.d.ts +1 -2
  139. package/dist/types/src/meta.d.ts.map +1 -1
  140. package/dist/types/src/testing/stories.d.ts.map +1 -1
  141. package/dist/types/src/translations.d.ts +73 -6
  142. package/dist/types/src/translations.d.ts.map +1 -1
  143. package/dist/types/src/types/Channel.d.ts +16 -0
  144. package/dist/types/src/types/Channel.d.ts.map +1 -0
  145. package/dist/types/src/types/{schema.d.ts → Thread.d.ts} +18 -28
  146. package/dist/types/src/types/Thread.d.ts.map +1 -0
  147. package/dist/types/src/types/index.d.ts +2 -1
  148. package/dist/types/src/types/index.d.ts.map +1 -1
  149. package/dist/types/src/types/types.d.ts +37 -50
  150. package/dist/types/src/types/types.d.ts.map +1 -1
  151. package/dist/types/tsconfig.tsbuildinfo +1 -1
  152. package/package.json +59 -59
  153. package/src/ThreadPlugin.tsx +133 -130
  154. package/src/calls/call-manager.ts +1 -1
  155. package/src/calls/media-manager.ts +2 -1
  156. package/src/calls/types.ts +7 -3
  157. package/src/calls/util/calls-service.ts +12 -7
  158. package/src/calls/util/stub-media-streams.ts +60 -2
  159. package/src/calls-service.stories.tsx +2 -5
  160. package/src/capabilities/app-graph-builder.ts +17 -14
  161. package/src/capabilities/capabilities.ts +7 -7
  162. package/src/capabilities/intent-resolver.ts +14 -19
  163. package/src/capabilities/react-root.tsx +2 -2
  164. package/src/capabilities/react-surface.tsx +15 -15
  165. package/src/capabilities/toolkit.ts +18 -11
  166. package/src/components/Call/Toolbar.tsx +6 -6
  167. package/src/components/CallDebugPanel.tsx +108 -49
  168. package/src/components/ChannelContainer.stories.tsx +9 -9
  169. package/src/components/ChannelContainer.tsx +14 -11
  170. package/src/components/Chat.stories.tsx +13 -18
  171. package/src/components/ChatContainer.tsx +26 -17
  172. package/src/components/Comments.stories.tsx +8 -13
  173. package/src/components/CommentsContainer.tsx +2 -2
  174. package/src/components/CommentsThreadContainer.tsx +19 -14
  175. package/src/components/Media/VideoObject.stories.tsx +12 -7
  176. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  177. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +3 -4
  178. package/src/components/ThreadComplementary.tsx +7 -7
  179. package/src/components/ThreadSettings.tsx +4 -5
  180. package/src/components/testing.ts +5 -5
  181. package/src/extensions/threads.ts +5 -5
  182. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  183. package/src/meta.ts +9 -5
  184. package/src/testing/stories.ts +3 -6
  185. package/src/translations.ts +5 -3
  186. package/src/types/Channel.ts +27 -0
  187. package/src/types/Thread.ts +26 -0
  188. package/src/types/index.ts +2 -1
  189. package/src/types/types.ts +10 -9
  190. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  191. package/src/util.ts +1 -1
  192. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
  193. package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
  194. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
  196. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  197. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  199. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
  202. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
  203. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
  204. package/dist/lib/browser/chunk-KTWYVC5X.mjs +0 -147
  205. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
  208. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
  209. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  210. package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
  211. package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
  212. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
  213. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  214. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  215. package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
  216. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  220. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-P6E247RF.mjs +0 -148
  224. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  225. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  226. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
  229. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
  230. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
  231. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  232. package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
  233. package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
  234. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
  235. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  236. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  237. package/dist/types/src/types/schema.d.ts.map +0 -1
  238. package/src/types/schema.ts +0 -33
  239. /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-SVV4ZX5T.mjs.map} +0 -0
  240. /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-ALFWQ65B.mjs.map} +0 -0
  241. /package/dist/lib/browser/{chunk-2I277V52.mjs.map → chunk-L6F2AG6W.mjs.map} +0 -0
  242. /package/dist/lib/node-esm/{ChannelContainer-D5E2S6AI.mjs.map → ChannelContainer-63GMQ753.mjs.map} +0 -0
  243. /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChatContainer-MFKPXMIK.mjs.map} +0 -0
  244. /package/dist/lib/node-esm/{chunk-UJ2QNRLS.mjs.map → chunk-AFDO2SUZ.mjs.map} +0 -0
@@ -1,56 +1,64 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ThreadAction,
4
- ThreadType
5
- } from "./chunk-P6E247RF.mjs";
4
+ Thread_exports
5
+ } from "./chunk-TYLLHI46.mjs";
6
6
  import {
7
7
  ChannelContainer
8
- } from "./chunk-CCE5LHBE.mjs";
8
+ } from "./chunk-QCQAAU6J.mjs";
9
9
  import {
10
10
  ThreadCapabilities
11
- } from "./chunk-PYTVBN5J.mjs";
11
+ } from "./chunk-ZQAGII7M.mjs";
12
12
  import {
13
13
  MessageContainer,
14
14
  buttonClassNames,
15
15
  buttonGroupClassNames,
16
16
  command
17
- } from "./chunk-UHZQTPXU.mjs";
17
+ } from "./chunk-NWUUMKVQ.mjs";
18
18
  import {
19
19
  useStatus
20
- } from "./chunk-CTZ75IFK.mjs";
20
+ } from "./chunk-2MMJF7DW.mjs";
21
21
  import {
22
22
  getMessageMetadata
23
- } from "./chunk-57XR3LEF.mjs";
23
+ } from "./chunk-ABUFOZVX.mjs";
24
24
  import {
25
25
  meta
26
- } from "./chunk-GRLRWTRU.mjs";
26
+ } from "./chunk-XI45H4IV.mjs";
27
27
 
28
28
  // src/components/CallDebugPanel.tsx
29
29
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
30
30
  import { WebRTCStats } from "@peermetrics/webrtc-stats";
31
31
  import React, { useEffect, useMemo, useState } from "react";
32
- import { Panel } from "@dxos/devtools";
32
+ import { truncateKey } from "@dxos/debug";
33
+ import { JsonView, Panel } from "@dxos/devtools";
33
34
  import { log } from "@dxos/log";
34
- import { Input, useTranslation } from "@dxos/react-ui";
35
- import { Json } from "@dxos/react-ui-syntax-highlighter";
35
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
36
36
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
37
37
  var CallDebugPanel = ({ state }) => {
38
38
  var _effect = _useSignals();
39
39
  try {
40
40
  const { t } = useTranslation(meta.id);
41
- const users = state?.call?.users;
42
- const self = state?.call?.self;
43
41
  const [open, setOpen] = useState(false);
44
42
  const handleToggle = () => setOpen(!open);
43
+ const [showServiceHistory, setShowServiceHistory] = useState(false);
44
+ const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);
45
+ const handleCopyRaw = async () => {
46
+ await navigator.clipboard.writeText(JSON.stringify({
47
+ users: state?.call?.users,
48
+ stats
49
+ }, null, 2));
50
+ };
45
51
  const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);
46
52
  const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);
47
53
  const webrtcStats = useMemo(() => new WebRTCStats({
48
54
  getStatsInterval: 1e3
49
55
  }), []);
50
- const [stats, setStats] = useState({});
56
+ const [stats, setStats] = useState();
51
57
  useEffect(() => {
52
58
  const pc = state?.media.peer?.session?.peerConnection;
53
- const handleStats = (stats2) => setStats(stats2.data);
59
+ const handleStats = (stats2) => {
60
+ setStats(stats2.data);
61
+ };
54
62
  let added = false;
55
63
  if (pc && showDetailedWebRTCStats) {
56
64
  webrtcStats.addConnection({
@@ -77,7 +85,7 @@ var CallDebugPanel = ({ state }) => {
77
85
  connectionId: "1"
78
86
  }, {
79
87
  F: __dxlog_file,
80
- L: 55,
88
+ L: 62,
81
89
  S: void 0,
82
90
  C: (f, a) => f(...a)
83
91
  });
@@ -87,6 +95,10 @@ var CallDebugPanel = ({ state }) => {
87
95
  state?.media.peer?.session?.peerConnection,
88
96
  showDetailedWebRTCStats
89
97
  ]);
98
+ const rows = useMemo(() => getCallStatusTable(state), [
99
+ state?.call.users,
100
+ state?.media.pulledAudioTracks
101
+ ]);
90
102
  return /* @__PURE__ */ React.createElement(Panel, {
91
103
  id: "meeting-status",
92
104
  icon: "ph--video-conference--regular",
@@ -96,51 +108,109 @@ var CallDebugPanel = ({ state }) => {
96
108
  maxHeight: false,
97
109
  info: /* @__PURE__ */ React.createElement("div", {
98
110
  className: "flex items-center gap-2"
99
- }, /* @__PURE__ */ React.createElement("span", {
100
- title: "Joined"
101
- }, self?.joined ? "Active" : "Inactive"), users?.length !== void 0 && /* @__PURE__ */ React.createElement("span", {
102
- title: "Users"
103
- }, users?.length ?? 0, " User(s)"))
111
+ }, " ", state?.call.joined ? "Active" : "Inactive")
104
112
  }, /* @__PURE__ */ React.createElement("div", {
105
- className: "flex flex-col gap-2 overflow-y-auto"
113
+ className: "flex flex-col w-full gap-2 text-xs"
106
114
  }, /* @__PURE__ */ React.createElement("div", {
107
- className: "flex items-row gap-2"
115
+ className: "flex items-center gap-2"
108
116
  }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
109
117
  classNames: "text-sm"
110
118
  }, t("show webrtc stats title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
111
119
  checked: showDetailedWebRTCStats,
112
120
  onCheckedChange: handleShowDetailedWebRTCStats
113
- }))), /* @__PURE__ */ React.createElement(Json, {
121
+ }))), /* @__PURE__ */ React.createElement("div", {
122
+ className: "flex items-center gap-2"
123
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
124
+ classNames: "text-sm"
125
+ }, t("show calls history title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
126
+ checked: showServiceHistory,
127
+ onCheckedChange: handleToggleServiceHistory
128
+ }))), /* @__PURE__ */ React.createElement("div", {
129
+ className: "flex items-center gap-2"
130
+ }, /* @__PURE__ */ React.createElement(IconButton, {
114
131
  classNames: "text-sm",
132
+ icon: "ph--copy--regular",
133
+ label: "copy raw",
134
+ onClick: handleCopyRaw
135
+ })), /* @__PURE__ */ React.createElement(Table, {
136
+ rows
137
+ }), showDetailedWebRTCStats && /* @__PURE__ */ React.createElement(JsonView, {
115
138
  data: {
116
- users,
117
- activities: state?.call?.activities,
118
- ...showDetailedWebRTCStats ? {
119
- webrtc: {
120
- connectionState: state?.media.peer?.session?.peerConnection.connectionState,
121
- iceConnectionState: state?.media.peer?.session?.peerConnection.iceConnectionState,
122
- stats
123
- }
124
- } : {},
125
- tracks: state?.media.peer?.session?.peerConnection.getTransceivers().map((transceiver) => {
126
- const track = transceiver.direction === "recvonly" ? transceiver.receiver.track : transceiver.sender.track;
127
- return {
128
- id: track?.id,
129
- kind: track?.kind,
130
- direction: transceiver.direction,
131
- enabled: track?.enabled,
132
- muted: track?.muted,
133
- readyState: track?.readyState,
134
- settings: track?.getSettings()
135
- };
136
- }),
137
- callsServiceHistory: state?.media.peer?.history.get()
139
+ stats
140
+ }
141
+ }), showServiceHistory && /* @__PURE__ */ React.createElement(JsonView, {
142
+ data: {
143
+ history: state?.media.peer?.history.get()
138
144
  }
139
145
  })));
140
146
  } finally {
141
147
  _effect.f();
142
148
  }
143
149
  };
150
+ var getCallStatusTable = (state) => {
151
+ if (!state || !state.call?.users) {
152
+ return [];
153
+ }
154
+ const self = state.call.self;
155
+ const users = state.call.users.filter((user) => user.id !== self.id).map((user) => {
156
+ const isOk = {
157
+ audio: user.tracks?.audio && state.media.pulledAudioTracks[user.tracks?.audio]?.ctx.disposed === false,
158
+ video: user.tracks?.video && state.media.pulledVideoStreams[user.tracks?.video]?.ctx.disposed === false,
159
+ screenshare: user.tracks?.screenshare && state.media.pulledVideoStreams[user.tracks?.screenshare]?.ctx.disposed === false
160
+ };
161
+ return {
162
+ ...user,
163
+ isOk
164
+ };
165
+ });
166
+ return [
167
+ [
168
+ "users",
169
+ state.call.users.length ?? 0
170
+ ],
171
+ [
172
+ "*self* " + (self?.name ?? truncateKey(self.id, 8)),
173
+ self?.tracks?.audio && state.media.pushedAudioTrack ? "AUD \u2705" : "AUD \u274C",
174
+ self?.tracks?.video && state.media.pushedVideoTrack ? "VID \u2705" : "VID \u274C",
175
+ self?.tracks?.screenshareEnabled ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack ? "SCR \u2705" : "SCR \u274C" : void 0
176
+ ],
177
+ ...users.map((user) => [
178
+ user.name ?? truncateKey(user.id, 8),
179
+ user.isOk.audio ? "AUD \u2705" : "AUD \u274C",
180
+ user.isOk.video ? "VID \u2705" : "VID \u274C",
181
+ user.tracks?.screenshareEnabled ? user.isOk.screenshare ? "SCR \u2705" : "SCR \u274C" : void 0
182
+ ]),
183
+ [
184
+ "ICE",
185
+ state.media.peer?.session?.peerConnection.iceConnectionState ?? "no connection"
186
+ ]
187
+ ];
188
+ };
189
+ (function(Unit2) {
190
+ Unit2.KB = (n) => ((n ?? 0) / 1e3).toFixed(2);
191
+ })(Unit || (Unit = {}));
192
+ var Table = ({ rows }) => {
193
+ var _effect = _useSignals();
194
+ try {
195
+ return /* @__PURE__ */ React.createElement("div", {
196
+ className: "w-full text-xs font-mono"
197
+ }, rows.map(([prefix, label, value, unit], i) => /* @__PURE__ */ React.createElement("div", {
198
+ key: i,
199
+ className: "grid grid-cols-[3fr_1fr_1fr_1fr]"
200
+ }, /* @__PURE__ */ React.createElement("div", {
201
+ className: "p-1"
202
+ }, prefix), /* @__PURE__ */ React.createElement("div", {
203
+ className: "p-1"
204
+ }, label), /* @__PURE__ */ React.createElement("div", {
205
+ className: "p-1"
206
+ }, value), /* @__PURE__ */ React.createElement("div", {
207
+ className: "p-1"
208
+ }, unit))));
209
+ } finally {
210
+ _effect.f();
211
+ }
212
+ };
213
+ var Unit;
144
214
 
145
215
  // src/components/CallSidebar.tsx
146
216
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
@@ -165,7 +235,7 @@ import { Capabilities, CollaborationActions, LayoutAction, createIntent, useCapa
165
235
  import { Filter, Obj, Query, Relation as Relation3 } from "@dxos/echo";
166
236
  import { Ref as Ref2, fullyQualifiedId as fullyQualifiedId3, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
167
237
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
168
- import { useThemeContext as useThemeContext2, useTranslation as useTranslation4 } from "@dxos/react-ui";
238
+ import { useThemeContext as useThemeContext2, useTranslation as useTranslation5 } from "@dxos/react-ui";
169
239
  import { useAttended } from "@dxos/react-ui-attention";
170
240
  import { StackItem } from "@dxos/react-ui-stack";
171
241
  import { Tabs } from "@dxos/react-ui-tabs";
@@ -188,14 +258,15 @@ import React3, { useCallback, useMemo as useMemo2, useRef, useState as useState2
188
258
  import { Ref, Relation } from "@dxos/echo";
189
259
  import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
190
260
  import { useIdentity } from "@dxos/react-client/halo";
191
- import { IconButton, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
261
+ import { IconButton as IconButton2, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
192
262
  import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
193
263
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
194
- import { MessageTextbox, Thread } from "@dxos/react-ui-thread";
264
+ import { MessageTextbox, Thread as ThreadComponent } from "@dxos/react-ui-thread";
195
265
  import { isNonNullable } from "@dxos/util";
196
266
  var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
197
267
  var _effect = _useSignals3();
198
268
  try {
269
+ const { themeMode } = useThemeContext();
199
270
  const { t } = useTranslation2(meta.id);
200
271
  const identity = useIdentity();
201
272
  const space = getSpace(anchor);
@@ -204,10 +275,8 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
204
275
  const thread = Relation.getSource(anchor);
205
276
  const activity = useStatus(space, fullyQualifiedId(thread));
206
277
  const threadScrollRef = useRef(null);
207
- const { themeMode } = useThemeContext();
208
278
  const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
209
- const [_count, _setCount] = useState2(0);
210
- const rerenderEditor = () => _setCount((count) => count + 1);
279
+ const [state, setState] = useState2({});
211
280
  const messageRef = useRef("");
212
281
  const extensions = useMemo2(() => [
213
282
  createBasicExtensions({
@@ -217,11 +286,11 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
217
286
  themeMode
218
287
  }),
219
288
  listener({
220
- onChange: (text) => messageRef.current = text
289
+ onChange: ({ text }) => messageRef.current = text
221
290
  }),
222
291
  command
223
292
  ], [
224
- _count
293
+ state
225
294
  ]);
226
295
  const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
227
296
  behavior,
@@ -254,13 +323,13 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
254
323
  onComment?.(anchor, messageRef.current);
255
324
  messageRef.current = "";
256
325
  scrollToEnd("instant");
257
- rerenderEditor();
326
+ setState({});
258
327
  return true;
259
328
  }, [
260
329
  anchor,
261
330
  identity
262
331
  ]);
263
- return /* @__PURE__ */ React3.createElement(Thread.Root, {
332
+ return /* @__PURE__ */ React3.createElement(ThreadComponent.Root, {
264
333
  id: fullyQualifiedId(thread),
265
334
  classNames: "pbs-2 border-be border-subduedSeparator last:border-none",
266
335
  current,
@@ -273,14 +342,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
273
342
  asChild: true,
274
343
  content: t("detached thread label"),
275
344
  side: "top"
276
- }, /* @__PURE__ */ React3.createElement(Thread.Header, {
345
+ }, /* @__PURE__ */ React3.createElement(ThreadComponent.Header, {
277
346
  detached: true
278
- }, thread.name)) : /* @__PURE__ */ React3.createElement(Thread.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
347
+ }, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadComponent.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
279
348
  role: "none",
280
349
  className: buttonGroupClassNames
281
350
  }, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
282
351
  palette: "neutral"
283
- }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton, {
352
+ }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
284
353
  "data-testid": "thread.resolve",
285
354
  variant: "ghost",
286
355
  icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
@@ -291,7 +360,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
291
360
  thread?.status !== "resolved" && hoverableControlItem
292
361
  ],
293
362
  onClick: handleResolve
294
- }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton, {
363
+ }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
295
364
  "data-testid": "thread.delete",
296
365
  variant: "ghost",
297
366
  icon: "ph--x--regular",
@@ -313,7 +382,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
313
382
  extensions,
314
383
  onSend: handleComment,
315
384
  ...textboxMetadata
316
- }), /* @__PURE__ */ React3.createElement(Thread.Status, {
385
+ }), /* @__PURE__ */ React3.createElement(ThreadComponent.Status, {
317
386
  activity
318
387
  }, t("activity message")), /* @__PURE__ */ React3.createElement("div", {
319
388
  role: "none",
@@ -378,10 +447,12 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
378
447
  // src/components/ThreadSettings.tsx
379
448
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
380
449
  import React5 from "react";
450
+ import { useTranslation as useTranslation4 } from "@dxos/react-ui";
381
451
  import { ControlPage } from "@dxos/react-ui-form";
382
- var ThreadSettings = ({ settings }) => {
452
+ var ThreadSettings = ({ settings: _settings }) => {
383
453
  var _effect = _useSignals5();
384
454
  try {
455
+ const { t: _t } = useTranslation4(meta.id);
385
456
  return /* @__PURE__ */ React5.createElement(ControlPage, null);
386
457
  } finally {
387
458
  _effect.f();
@@ -389,14 +460,14 @@ var ThreadSettings = ({ settings }) => {
389
460
  };
390
461
 
391
462
  // src/components/index.ts
392
- var ChannelContainer2 = lazy(() => import("./ChannelContainer-D5E2S6AI.mjs"));
393
- var ChatContainer = lazy(() => import("./ChatContainer-4EGHKHIU.mjs"));
463
+ var ChannelContainer2 = lazy(() => import("./ChannelContainer-63GMQ753.mjs"));
464
+ var ChatContainer = lazy(() => import("./ChatContainer-MFKPXMIK.mjs"));
394
465
 
395
466
  // src/components/ThreadComplementary.tsx
396
467
  var ThreadComplementary = ({ subject }) => {
397
468
  var _effect = _useSignals6();
398
469
  try {
399
- const { t } = useTranslation4(meta.id);
470
+ const { t } = useTranslation5(meta.id);
400
471
  const { dispatchPromise: dispatch } = useIntentDispatcher();
401
472
  const identity = useIdentity2();
402
473
  const { tx } = useThemeContext2();
@@ -420,7 +491,7 @@ var ThreadComplementary = ({ subject }) => {
420
491
  ]);
421
492
  const space = getSpace2(subject);
422
493
  const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
423
- const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj.instanceOf(ThreadType, Relation3.getSource(anchor))).concat(drafts ?? []);
494
+ const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj.instanceOf(Thread_exports.Thread, Relation3.getSource(anchor))).concat(drafts ?? []);
424
495
  const attended = useAttended();
425
496
  const handleAttend = useCallback2((anchor) => {
426
497
  const thread = Relation3.getSource(anchor);
@@ -509,8 +580,7 @@ var ThreadComplementary = ({ subject }) => {
509
580
  onAcceptProposal: handleAcceptProposal
510
581
  });
511
582
  return /* @__PURE__ */ React6.createElement(StackItem.Content, {
512
- toolbar: true,
513
- classNames: "overflow-hidden"
583
+ toolbar: true
514
584
  }, /* @__PURE__ */ React6.createElement(Tabs.Root, {
515
585
  value: showResolvedThreads ? "all" : "unresolved",
516
586
  orientation: "horizontal",
@@ -546,4 +616,4 @@ export {
546
616
  ChannelContainer2 as ChannelContainer,
547
617
  ChatContainer
548
618
  };
549
- //# sourceMappingURL=chunk-NNKKNW57.mjs.map
619
+ //# sourceMappingURL=chunk-Q7AKKZNY.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
+ }
@@ -1,16 +1,16 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ThreadCapabilities
4
- } from "./chunk-PYTVBN5J.mjs";
4
+ } from "./chunk-ZQAGII7M.mjs";
5
5
  import {
6
6
  ChatContainer_default
7
- } from "./chunk-UHZQTPXU.mjs";
7
+ } from "./chunk-NWUUMKVQ.mjs";
8
8
  import {
9
9
  useDebugMode
10
- } from "./chunk-CTZ75IFK.mjs";
10
+ } from "./chunk-2MMJF7DW.mjs";
11
11
  import {
12
12
  meta
13
- } from "./chunk-GRLRWTRU.mjs";
13
+ } from "./chunk-XI45H4IV.mjs";
14
14
 
15
15
  // src/components/ChannelContainer.tsx
16
16
  import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
@@ -589,7 +589,7 @@ import React8 from "react";
589
589
  import { useAppGraph, useCapability as useCapability2 } from "@dxos/app-framework";
590
590
  import { useActions, useNode } from "@dxos/plugin-graph";
591
591
  import { fullyQualifiedId } from "@dxos/react-client/echo";
592
- import { Icon as Icon2, IconButton as IconButton2, Toolbar as NativeToolbar, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
592
+ import { Icon as Icon2, IconButton as IconButton2, Toolbar as NaturalToolbar, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
593
593
  import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/react-ui-theme";
594
594
  var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
595
595
  var _effect = _useSignals8();
@@ -603,7 +603,7 @@ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJ
603
603
  const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
604
604
  return /* @__PURE__ */ React8.createElement("div", {
605
605
  className: mx5("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition2)
606
- }, /* @__PURE__ */ React8.createElement(NativeToolbar.Root, {
606
+ }, /* @__PURE__ */ React8.createElement(NaturalToolbar.Root, {
607
607
  classNames: [
608
608
  "p-2 bg-modalSurface rounded-md shadow-md",
609
609
  classNames
@@ -645,7 +645,7 @@ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJ
645
645
  }, /* @__PURE__ */ React8.createElement(Icon2, {
646
646
  icon: "ph--users--regular",
647
647
  size: 4
648
- }), /* @__PURE__ */ React8.createElement("div", null, participants)) || /* @__PURE__ */ React8.createElement(NativeToolbar.Separator, {
648
+ }), /* @__PURE__ */ React8.createElement("div", null, participants)) || /* @__PURE__ */ React8.createElement(NaturalToolbar.Separator, {
649
649
  variant: "gap"
650
650
  }), call.joined && /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(ToggleButton, {
651
651
  disabled: !canSharescreen,
@@ -795,7 +795,8 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
795
795
  try {
796
796
  const space = getSpace(channel);
797
797
  const callManager = useCapability4(ThreadCapabilities.CallManager);
798
- const roomId = _roomId ?? (channel ? fullyQualifiedId2(channel) : failUndefined());
798
+ const attendableId = fullyQualifiedId2(channel);
799
+ const roomId = _roomId ?? (channel ? attendableId : failUndefined());
799
800
  const identity = useIdentity();
800
801
  const isNamed = !!identity?.profile?.displayName;
801
802
  const joinSound = useSoundEffect("JoinCall");
@@ -804,7 +805,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
804
805
  useEffect6(() => {
805
806
  const ctx = new Context(void 0, {
806
807
  F: __dxlog_file2,
807
- L: 49
808
+ L: 52
808
809
  });
809
810
  callManager.left.on(ctx, (roomId2) => {
810
811
  extensions.forEach((extension) => {
@@ -846,7 +847,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
846
847
  } catch (err) {
847
848
  log.catch(err, void 0, {
848
849
  F: __dxlog_file2,
849
- L: 93,
850
+ L: 96,
850
851
  S: void 0,
851
852
  C: (f, a) => f(...a)
852
853
  });
@@ -862,7 +863,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
862
863
  } catch (err) {
863
864
  log.catch(err, void 0, {
864
865
  F: __dxlog_file2,
865
- L: 105,
866
+ L: 108,
866
867
  S: void 0,
867
868
  C: (f, a) => f(...a)
868
869
  });
@@ -878,20 +879,21 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
878
879
  ]);
879
880
  const isJoined = callManager.joined && callManager.roomId === roomId;
880
881
  return /* @__PURE__ */ React10.createElement(StackItem.Content, {
881
- toolbar: !isJoined,
882
- classNames: isJoined && "h-full"
882
+ classNames: isJoined && "bs-full",
883
+ toolbar: !isJoined
883
884
  }, isJoined && !isNamed && /* @__PURE__ */ React10.createElement(DisplayNameMissing, null), isJoined && isNamed && /* @__PURE__ */ React10.createElement(Call.Root, null, /* @__PURE__ */ React10.createElement(Call.Grid, {
884
885
  fullscreen
885
886
  }), /* @__PURE__ */ React10.createElement(Call.Toolbar, {
886
887
  channel,
887
888
  onLeave: handleLeave
888
889
  })), !isJoined && channel && channel.defaultThread.target && space && /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(ChannelToolbar, {
889
- attendableId: fullyQualifiedId2(channel),
890
+ attendableId,
890
891
  role,
891
892
  onJoinCall: handleJoin
892
893
  }), /* @__PURE__ */ React10.createElement(ChatContainer_default, {
893
894
  space,
894
- thread: channel.defaultThread.target
895
+ thread: channel.defaultThread.target,
896
+ classNames: "container-max-width"
895
897
  })));
896
898
  } finally {
897
899
  _effect.f();
@@ -962,7 +964,7 @@ var useChannelToolbarActions = (onJoinCall) => {
962
964
  }), []);
963
965
  return useMenuActions(creator);
964
966
  };
965
- var ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }) => {
967
+ var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
966
968
  var _effect = _useSignals10();
967
969
  try {
968
970
  const menuProps = useChannelToolbarActions(onJoinCall);
@@ -972,7 +974,7 @@ var ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }) => {
972
974
  ...menuProps,
973
975
  attendableId
974
976
  }, /* @__PURE__ */ React10.createElement(ToolbarMenu, {
975
- classNames
977
+ textBlockWidth: true
976
978
  })));
977
979
  } finally {
978
980
  _effect.f();
@@ -984,4 +986,4 @@ export {
984
986
  ChannelContainer,
985
987
  ChannelContainer_default
986
988
  };
987
- //# sourceMappingURL=chunk-CCE5LHBE.mjs.map
989
+ //# sourceMappingURL=chunk-QCQAAU6J.mjs.map