@dxos/plugin-thread 0.8.4-main.2e9d522 → 0.8.4-main.5ea62a8

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 (247) hide show
  1. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +16 -0
  2. package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-42ALOWUA.mjs} +4 -4
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-FHAOPO57.mjs} +5 -5
  4. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-EW2QC6Q4.mjs} +4 -4
  6. package/dist/lib/browser/call-manager-EW2QC6Q4.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2I277V52.mjs +23 -0
  8. package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-2I277V52.mjs.map} +3 -3
  9. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-2P3GVRHP.mjs} +38 -6
  10. package/dist/lib/{node-esm/chunk-25ABSYP2.mjs.map → browser/chunk-2P3GVRHP.mjs.map} +4 -4
  11. package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  13. package/dist/lib/browser/chunk-H63NDV62.mjs +376 -0
  14. package/dist/lib/browser/chunk-H63NDV62.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-J26C57ZY.mjs +548 -0
  16. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-KEXJGF2R.mjs} +4 -4
  18. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-KTWYVC5X.mjs} +22 -12
  20. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-TQJYDFBU.mjs} +232 -230
  22. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-TUSBPMNU.mjs} +398 -174
  24. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +7 -0
  25. package/dist/lib/browser/index.mjs +18 -8
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-IB5GYU2D.mjs} +68 -9
  28. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +7 -0
  29. package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-Z677YORA.mjs} +4 -4
  30. package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-PTTTW2MO.mjs} +9 -9
  33. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-X2VB6P37.mjs} +9 -9
  34. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +7 -0
  35. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-GRKEID73.mjs} +2 -2
  36. package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
  37. package/dist/lib/browser/{state-H6CYONWE.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  38. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +80 -0
  39. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +1 -1
  41. package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-D5E2S6AI.mjs} +7 -7
  42. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-4EGHKHIU.mjs} +4 -4
  43. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-XEYWX5FC.mjs} +5 -5
  44. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
  45. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-N3KASRDQ.mjs} +4 -4
  46. package/dist/lib/node-esm/call-manager-N3KASRDQ.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-CCE5LHBE.mjs} +232 -230
  48. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-CTZ75IFK.mjs} +38 -6
  50. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-JR7KESLL.mjs} +398 -174
  52. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-NNKKNW57.mjs +549 -0
  54. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-P6E247RF.mjs} +22 -12
  56. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
  58. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  59. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-S3D7DTBF.mjs} +4 -4
  60. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs +377 -0
  62. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +25 -0
  64. package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-UJ2QNRLS.mjs.map} +3 -3
  65. package/dist/lib/node-esm/index.mjs +18 -8
  66. package/dist/lib/node-esm/index.mjs.map +3 -3
  67. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-VIMI5VLH.mjs} +68 -9
  68. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +7 -0
  69. package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-FL4IXLRP.mjs} +4 -4
  70. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +7 -0
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs → react-root-2HHRRUME.mjs} +9 -9
  73. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-OLN3XNND.mjs} +9 -9
  74. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +7 -0
  75. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-F2ODVNNW.mjs} +2 -2
  76. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
  77. package/dist/lib/node-esm/{state-D7WNDT3N.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  78. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +81 -0
  79. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +1 -1
  81. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  82. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  83. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  84. package/dist/types/src/calls/media-manager.d.ts +1 -1
  85. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  86. package/dist/types/src/calls/types.d.ts +1 -1
  87. package/dist/types/src/calls/types.d.ts.map +1 -1
  88. package/dist/types/src/calls/util/calls-service.d.ts +2 -2
  89. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  90. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  91. package/dist/types/src/calls-service.stories.d.ts +10 -8
  92. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  96. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  98. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/index.d.ts +11 -10
  100. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  102. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  104. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  106. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/settings.d.ts +1 -1
  109. package/dist/types/src/capabilities/state.d.ts +2 -2
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  112. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  113. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  114. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  115. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  116. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  117. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts +87 -3
  119. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Chat.stories.d.ts +89 -4
  121. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  123. package/dist/types/src/components/Comments.stories.d.ts +154 -3
  124. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  126. package/dist/types/src/components/CommentsThreadContainer.d.ts +2 -2
  127. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  129. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  130. package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
  131. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  133. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  135. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +152 -2
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +154 -3
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  141. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  142. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  143. package/dist/types/src/components/testing.d.ts +1 -0
  144. package/dist/types/src/components/testing.d.ts.map +1 -1
  145. package/dist/types/src/extensions/threads.d.ts +2 -2
  146. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  147. package/dist/types/src/hooks/index.d.ts +1 -0
  148. package/dist/types/src/hooks/index.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  150. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  151. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  152. package/dist/types/src/translations.d.ts +1 -0
  153. package/dist/types/src/translations.d.ts.map +1 -1
  154. package/dist/types/src/types/schema.d.ts +122 -107
  155. package/dist/types/src/types/schema.d.ts.map +1 -1
  156. package/dist/types/src/types/types.d.ts +253 -168
  157. package/dist/types/src/types/types.d.ts.map +1 -1
  158. package/dist/types/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +51 -47
  160. package/src/ThreadPlugin.tsx +9 -2
  161. package/src/calls/call-manager.ts +1 -1
  162. package/src/calls/call-swarm-synchronizer.ts +1 -1
  163. package/src/calls/media-manager.ts +58 -33
  164. package/src/calls/types.ts +1 -1
  165. package/src/calls/util/calls-service.ts +56 -10
  166. package/src/calls/util/stub-media-streams.ts +4 -5
  167. package/src/calls-service.stories.tsx +76 -60
  168. package/src/capabilities/app-graph-builder.ts +8 -5
  169. package/src/capabilities/call-manager.ts +3 -2
  170. package/src/capabilities/capabilities.ts +2 -2
  171. package/src/capabilities/index.ts +1 -0
  172. package/src/capabilities/intent-resolver.ts +39 -4
  173. package/src/capabilities/markdown.ts +4 -3
  174. package/src/capabilities/react-surface.tsx +5 -4
  175. package/src/capabilities/state.ts +2 -1
  176. package/src/capabilities/toolkit.ts +78 -0
  177. package/src/components/Call/Call.tsx +3 -2
  178. package/src/components/Call/Toolbar.tsx +2 -2
  179. package/src/components/CallDebugPanel.tsx +1 -1
  180. package/src/components/CallSidebar.tsx +2 -1
  181. package/src/components/ChannelContainer.stories.tsx +6 -5
  182. package/src/components/ChannelContainer.tsx +7 -6
  183. package/src/components/Chat.stories.tsx +28 -26
  184. package/src/components/ChatContainer.tsx +8 -4
  185. package/src/components/Comments.stories.tsx +33 -29
  186. package/src/components/CommentsContainer.tsx +2 -1
  187. package/src/components/CommentsThreadContainer.tsx +9 -7
  188. package/src/components/Lobby/Lobby.tsx +1 -1
  189. package/src/components/Media/VideoObject.stories.tsx +30 -27
  190. package/src/components/MessageContainer.tsx +43 -9
  191. package/src/components/Participant/Participant.tsx +13 -7
  192. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  193. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +6 -5
  194. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
  195. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  196. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  197. package/src/components/ThreadComplementary.tsx +38 -8
  198. package/src/components/ThreadSettings.tsx +2 -2
  199. package/src/components/command-extension.ts +5 -2
  200. package/src/components/testing.ts +22 -0
  201. package/src/extensions/threads.ts +6 -6
  202. package/src/hooks/index.ts +1 -0
  203. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  204. package/src/hooks/useDebugMode.ts +1 -1
  205. package/src/hooks/useVideoStreamTrack.tsx +5 -2
  206. package/src/testing/stories.ts +2 -2
  207. package/src/translations.ts +1 -0
  208. package/src/types/types.ts +21 -12
  209. package/src/typings.d.ts +8 -0
  210. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  211. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  212. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  213. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  214. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  215. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  216. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  217. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  218. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  219. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  220. package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
  221. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  222. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  223. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  224. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  225. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  226. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  227. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  229. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  230. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  231. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  232. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  233. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
  234. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
  235. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  236. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  237. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  238. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  239. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  240. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-GHDNEZT2.mjs.map} +0 -0
  241. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-42ALOWUA.mjs.map} +0 -0
  242. /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-PTTTW2MO.mjs.map} +0 -0
  243. /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-GRKEID73.mjs.map} +0 -0
  244. /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-D5E2S6AI.mjs.map} +0 -0
  245. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-4EGHKHIU.mjs.map} +0 -0
  246. /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-2HHRRUME.mjs.map} +0 -0
  247. /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  ThreadCapabilities
3
- } from "./chunk-LGSDKXPF.mjs";
3
+ } from "./chunk-4APCDRSH.mjs";
4
4
  import {
5
5
  ChatContainer_default
6
- } from "./chunk-VUWC4IJM.mjs";
6
+ } from "./chunk-H63NDV62.mjs";
7
7
  import {
8
8
  useDebugMode
9
- } from "./chunk-ERWASUQK.mjs";
9
+ } from "./chunk-2P3GVRHP.mjs";
10
10
  import {
11
11
  meta
12
12
  } from "./chunk-EV4JWI7L.mjs";
@@ -22,9 +22,9 @@ import { log } from "@dxos/log";
22
22
  import { useClient } from "@dxos/react-client";
23
23
  import { fullyQualifiedId as fullyQualifiedId2, getSpace } from "@dxos/react-client/echo";
24
24
  import { useIdentity } from "@dxos/react-client/halo";
25
- import { useTranslation as useTranslation3, Input, ElevationProvider } from "@dxos/react-ui";
26
- import { ControlGroup, ControlItemInput, ControlGroupButton } from "@dxos/react-ui-form";
27
- import { ToolbarMenu, MenuProvider, createMenuAction, useMenuActions, createMenuItemGroup } from "@dxos/react-ui-menu";
25
+ import { ElevationProvider, Input, useTranslation as useTranslation3 } from "@dxos/react-ui";
26
+ import { ControlGroup, ControlGroupButton, ControlItemInput } from "@dxos/react-ui-form";
27
+ import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from "@dxos/react-ui-menu";
28
28
  import { useSoundEffect } from "@dxos/react-ui-sfx";
29
29
  import { StackItem } from "@dxos/react-ui-stack";
30
30
 
@@ -33,153 +33,11 @@ import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking"
33
33
  import React9 from "react";
34
34
  import { useCapability as useCapability3 } from "@dxos/app-framework";
35
35
 
36
- // src/components/Call/Toolbar.tsx
37
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
38
- import React from "react";
39
- import { useAppGraph, useCapability } from "@dxos/app-framework";
40
- import { useNode, useActions } from "@dxos/plugin-graph";
41
- import { fullyQualifiedId } from "@dxos/react-client/echo";
42
- import { Icon, IconButton, Toolbar as NativeToolbar, toLocalizedString, useTranslation } from "@dxos/react-ui";
43
- import { groupHoverControlItemWithTransition, mx } from "@dxos/react-ui-theme";
44
- var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
45
- var _effect = _useSignals();
46
- try {
47
- const { t } = useTranslation(meta.id);
48
- const { graph } = useAppGraph();
49
- const call = useCapability(ThreadCapabilities.CallManager);
50
- const node = useNode(graph, channel && fullyQualifiedId(channel));
51
- const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
52
- const isScreensharing = call.media.screenshareTrack !== void 0;
53
- const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
54
- return /* @__PURE__ */ React.createElement("div", {
55
- className: mx("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition)
56
- }, /* @__PURE__ */ React.createElement(NativeToolbar.Root, {
57
- classNames: [
58
- "p-2 bg-modalSurface rounded-md shadow-md",
59
- classNames
60
- ]
61
- }, /* @__PURE__ */ React.createElement(ToggleButton, {
62
- active: call.media.audioEnabled,
63
- state: {
64
- on: {
65
- icon: "ph--microphone--regular",
66
- label: t("mic off"),
67
- onClick: () => call.turnAudioOff(),
68
- classNames: "bg-callActive"
69
- },
70
- off: {
71
- icon: "ph--microphone-slash--duotone",
72
- label: t("mic on"),
73
- onClick: () => call.turnAudioOn(),
74
- classNames: [
75
- call.joined && "bg-callAlert"
76
- ]
77
- }
78
- }
79
- }), /* @__PURE__ */ React.createElement(ToggleButton, {
80
- active: call.media.videoEnabled,
81
- state: {
82
- on: {
83
- icon: "ph--video-camera--regular",
84
- label: t("camera off"),
85
- onClick: () => call.turnVideoOff()
86
- },
87
- off: {
88
- icon: "ph--video-camera-slash--duotone",
89
- label: t("camera on"),
90
- onClick: () => call.turnVideoOn()
91
- }
92
- }
93
- }), participants !== void 0 && /* @__PURE__ */ React.createElement("div", {
94
- className: "flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued"
95
- }, /* @__PURE__ */ React.createElement(Icon, {
96
- icon: "ph--users--regular",
97
- size: 4
98
- }), /* @__PURE__ */ React.createElement("div", null, participants)) || /* @__PURE__ */ React.createElement(NativeToolbar.Separator, {
99
- variant: "gap"
100
- }), call.joined && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ToggleButton, {
101
- disabled: !canSharescreen,
102
- active: isScreensharing,
103
- state: {
104
- on: {
105
- icon: "ph--monitor--regular",
106
- label: t("screenshare off"),
107
- onClick: () => call.turnScreenshareOff()
108
- },
109
- off: {
110
- icon: "ph--monitor-arrow-up--duotone",
111
- label: t("screenshare on"),
112
- onClick: () => call.turnScreenshareOn()
113
- }
114
- }
115
- }), actions.map((action) => /* @__PURE__ */ React.createElement(IconButton, {
116
- key: action.id,
117
- ...defaultButtonProps,
118
- icon: action.properties.icon,
119
- label: toLocalizedString(action.properties.label, t),
120
- classNames: action.properties.classNames,
121
- onClick: () => action.data({
122
- node
123
- })
124
- })), /* @__PURE__ */ React.createElement(ToggleButton, {
125
- active: call.raisedHand,
126
- state: {
127
- on: {
128
- icon: "ph--hand-waving--regular",
129
- label: t("lower hand"),
130
- onClick: () => call.setRaisedHand(false),
131
- classNames: [
132
- call.joined && "bg-callAlert"
133
- ]
134
- },
135
- off: {
136
- icon: "ph--hand-palm--duotone",
137
- label: t("raise hand"),
138
- onClick: () => call.setRaisedHand(true)
139
- }
140
- }
141
- })), call.joined ? /* @__PURE__ */ React.createElement(IconButton, {
142
- variant: "destructive",
143
- icon: "ph--phone-x--regular",
144
- label: t("leave call"),
145
- onClick: onLeave
146
- }) : /* @__PURE__ */ React.createElement(IconButton, {
147
- variant: "primary",
148
- icon: "ph--phone-incoming--regular",
149
- label: t("join call"),
150
- onClick: onJoin
151
- })));
152
- } finally {
153
- _effect.f();
154
- }
155
- };
156
- Toolbar.displayName = "MeetingToolbar";
157
- var defaultButtonProps = {
158
- size: 5,
159
- iconOnly: true
160
- };
161
- var ToggleButton = ({ active, state }) => {
162
- var _effect = _useSignals();
163
- try {
164
- return /* @__PURE__ */ React.createElement(IconButton, {
165
- ...defaultButtonProps,
166
- classNames: [
167
- active ? state.on.classNames ?? "bg-callActive" : state.off.classNames
168
- ],
169
- icon: active ? state.on.icon : state.off.icon,
170
- label: active ? state.on.label : state.off.label,
171
- onClick: active ? state.on.onClick : state.off.onClick
172
- });
173
- } finally {
174
- _effect.f();
175
- }
176
- };
177
-
178
36
  // src/components/Media/AudioStream.tsx
179
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
180
- import React2, { useEffect, useRef } from "react";
37
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
38
+ import React, { useEffect, useRef } from "react";
181
39
  var AudioStream = ({ tracks }) => {
182
- var _effect = _useSignals2();
40
+ var _effect = _useSignals();
183
41
  try {
184
42
  const mediaStreamRef = useRef(new MediaStream());
185
43
  const ref = useRef(null);
@@ -202,10 +60,10 @@ var AudioStream = ({ tracks }) => {
202
60
  });
203
61
  audio.srcObject = mediaStream;
204
62
  };
205
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("audio", {
63
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("audio", {
206
64
  ref,
207
65
  autoPlay: true
208
- }), tracks.map((track) => /* @__PURE__ */ React2.createElement(AudioTrack, {
66
+ }), tracks.map((track) => /* @__PURE__ */ React.createElement(AudioTrack, {
209
67
  key: track.id,
210
68
  track,
211
69
  mediaStream: mediaStreamRef.current,
@@ -232,11 +90,11 @@ var AudioTrack = ({ track, mediaStream, resetSrcObject }) => {
232
90
  };
233
91
 
234
92
  // src/components/Media/VideoObject.tsx
235
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
236
- import React3, { forwardRef, memo, useEffect as useEffect2, useRef as useRef2 } from "react";
237
- import { mx as mx2 } from "@dxos/react-ui-theme";
93
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
94
+ import React2, { forwardRef, memo, useEffect as useEffect2, useRef as useRef2 } from "react";
95
+ import { mx } from "@dxos/react-ui-theme";
238
96
  var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream, classNames, flip, contain, ...rest }, ref) => {
239
- var _effect = _useSignals3();
97
+ var _effect = _useSignals2();
240
98
  try {
241
99
  const internalRef = useRef2(null);
242
100
  useEffect2(() => {
@@ -250,8 +108,8 @@ var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream
250
108
  videoStream,
251
109
  internalRef.current
252
110
  ]);
253
- return /* @__PURE__ */ React3.createElement("video", {
254
- className: mx2("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
111
+ return /* @__PURE__ */ React2.createElement("video", {
112
+ className: mx("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
255
113
  ref: (v) => {
256
114
  internalRef.current = v;
257
115
  if (ref === null) {
@@ -272,28 +130,28 @@ var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream
272
130
  VideoObject.displayName = "VideoObject";
273
131
 
274
132
  // src/components/Participant/Participant.tsx
275
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
276
- import React7, { memo as memo2, useMemo as useMemo2 } from "react";
277
- import { useCapability as useCapability2 } from "@dxos/app-framework";
133
+ import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
134
+ import React6, { memo as memo2, useMemo as useMemo2 } from "react";
135
+ import { useCapability } from "@dxos/app-framework";
278
136
 
279
137
  // src/components/ResponsiveGrid/ResponsiveContainer.tsx
280
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
281
- import React4 from "react";
282
- import { mx as mx3 } from "@dxos/react-ui-theme";
138
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
139
+ import React3 from "react";
140
+ import { mx as mx2 } from "@dxos/react-ui-theme";
283
141
  var ResponsiveContainer = ({ children }) => {
284
- var _effect = _useSignals4();
142
+ var _effect = _useSignals3();
285
143
  try {
286
144
  return (
287
145
  // Outer container that takes full size of parent.
288
- /* @__PURE__ */ React4.createElement("div", {
146
+ /* @__PURE__ */ React3.createElement("div", {
289
147
  role: "none",
290
148
  className: "relative flex w-full h-full"
291
- }, /* @__PURE__ */ React4.createElement("div", {
149
+ }, /* @__PURE__ */ React3.createElement("div", {
292
150
  role: "none",
293
151
  className: "absolute inset-0 flex justify-center items-center"
294
- }, /* @__PURE__ */ React4.createElement("div", {
152
+ }, /* @__PURE__ */ React3.createElement("div", {
295
153
  role: "none",
296
- className: mx3("max-h-full max-w-full w-auto h-auto aspect-video")
154
+ className: mx2("max-h-full max-w-full w-auto h-auto aspect-video")
297
155
  }, children)))
298
156
  );
299
157
  } finally {
@@ -302,11 +160,11 @@ var ResponsiveContainer = ({ children }) => {
302
160
  };
303
161
 
304
162
  // src/components/ResponsiveGrid/ResponsiveGrid.tsx
305
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
306
- import React5, { useLayoutEffect, useState, useEffect as useEffect3, useMemo, useCallback } from "react";
163
+ import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
164
+ import React4, { useCallback, useEffect as useEffect3, useLayoutEffect, useMemo, useState } from "react";
307
165
  import { useResizeDetector } from "react-resize-detector";
308
166
  import { invariant } from "@dxos/invariant";
309
- import { mx as mx4 } from "@dxos/react-ui-theme";
167
+ import { mx as mx3 } from "@dxos/react-ui-theme";
310
168
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/ResponsiveGrid/ResponsiveGrid.tsx";
311
169
  var ASPECT_RATIO = 16 / 9;
312
170
  var MIN_GALLERY_HEIGHT = 250;
@@ -314,7 +172,7 @@ var DEFAULT_GAP = 8;
314
172
  var maxImageSize = "w-[2560px] h-[1440px]";
315
173
  var defaultGetId = (item) => item.id;
316
174
  var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = defaultGetId, items, pinned, autoHideGallery = false, debug, onPinnedChange }) => {
317
- var _effect = _useSignals5();
175
+ var _effect = _useSignals4();
318
176
  try {
319
177
  const { width: containerWidth = 0, height: containerHeight = 0, ref: containerRef } = useResizeDetector({
320
178
  refreshRate: 100
@@ -401,47 +259,47 @@ var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = def
401
259
  pinned,
402
260
  onPinnedChange
403
261
  ]);
404
- return /* @__PURE__ */ React5.createElement("div", {
262
+ return /* @__PURE__ */ React4.createElement("div", {
405
263
  ref: containerRef,
406
- className: mx4("relative w-full h-full", classNames)
407
- }, /* @__PURE__ */ React5.createElement("div", {
264
+ className: mx3("relative w-full h-full", classNames)
265
+ }, /* @__PURE__ */ React4.createElement("div", {
408
266
  className: "absolute inset-0 flex flex-col grow gap-2"
409
- }, pinnedItem && /* @__PURE__ */ React5.createElement("div", {
410
- className: mx4("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
267
+ }, pinnedItem && /* @__PURE__ */ React4.createElement("div", {
268
+ className: mx3("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
411
269
  style: hideGallery ? {} : {
412
270
  height: dividerHeight
413
271
  }
414
- }, /* @__PURE__ */ React5.createElement(SoloItem, {
272
+ }, /* @__PURE__ */ React4.createElement(SoloItem, {
415
273
  id: getId2(pinnedItem),
416
274
  debug
417
- })), !hideGallery && /* @__PURE__ */ React5.createElement("div", {
275
+ })), !hideGallery && /* @__PURE__ */ React4.createElement("div", {
418
276
  ref: gridContainerRef,
419
277
  className: "flex grow-[1] overflow-hidden justify-center items-center",
420
278
  style: hideGallery ? {} : {
421
279
  minHeight: MIN_GALLERY_HEIGHT
422
280
  }
423
- }, mainItems.length === 1 && /* @__PURE__ */ React5.createElement("div", {
281
+ }, mainItems.length === 1 && /* @__PURE__ */ React4.createElement("div", {
424
282
  style: {
425
283
  width: cellWidth
426
284
  },
427
285
  className: "flex h-full"
428
- }, /* @__PURE__ */ React5.createElement(SoloItem, {
286
+ }, /* @__PURE__ */ React4.createElement(SoloItem, {
429
287
  id: getId2(mainItems[0]),
430
288
  debug
431
- })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ React5.createElement("div", {
289
+ })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ React4.createElement("div", {
432
290
  role: "grid",
433
291
  style: {
434
292
  display: "grid",
435
293
  gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,
436
294
  gap: `${gap}px`
437
295
  }
438
- }, mainItems.map((item) => /* @__PURE__ */ React5.createElement("div", {
296
+ }, mainItems.map((item) => /* @__PURE__ */ React4.createElement("div", {
439
297
  key: getId2(item),
440
298
  "data-grid-item": getId2(item),
441
- className: mx4("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
442
- }))))), /* @__PURE__ */ React5.createElement("div", {
443
- className: mx4(debug && "opacity-10")
444
- }, bounds.map(([item, bounds2]) => /* @__PURE__ */ React5.createElement(Cell, {
299
+ className: mx3("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
300
+ }))))), /* @__PURE__ */ React4.createElement("div", {
301
+ className: mx3(debug && "opacity-10")
302
+ }, bounds.map(([item, bounds2]) => /* @__PURE__ */ React4.createElement(Cell, {
445
303
  key: getId2(item),
446
304
  classNames: "absolute transition-all duration-500",
447
305
  item,
@@ -454,14 +312,14 @@ var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = def
454
312
  }
455
313
  };
456
314
  var SoloItem = ({ debug, id }) => {
457
- var _effect = _useSignals5();
315
+ var _effect = _useSignals4();
458
316
  try {
459
- return /* @__PURE__ */ React5.createElement(ResponsiveContainer, null, /* @__PURE__ */ React5.createElement("div", {
317
+ return /* @__PURE__ */ React4.createElement(ResponsiveContainer, null, /* @__PURE__ */ React4.createElement("div", {
460
318
  "data-grid-item": id,
461
- className: mx4("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
462
- }, /* @__PURE__ */ React5.createElement("img", {
319
+ className: mx3("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
320
+ }, /* @__PURE__ */ React4.createElement("img", {
463
321
  alt: "placeholder video",
464
- className: mx4("opacity-0", maxImageSize)
322
+ className: mx3("opacity-0", maxImageSize)
465
323
  })));
466
324
  } finally {
467
325
  _effect.f();
@@ -531,15 +389,15 @@ var fitAspectRatio = (outerWidth, outerHeight, aspectRatio) => {
531
389
  };
532
390
 
533
391
  // src/components/ResponsiveGrid/ResponsiveGridItem.tsx
534
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
535
- import React6, { useEffect as useEffect4, useState as useState2 } from "react";
536
- import { Icon as Icon2, IconButton as IconButton2, useTranslation as useTranslation2 } from "@dxos/react-ui";
392
+ import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
393
+ import React5, { useEffect as useEffect4, useState as useState2 } from "react";
394
+ import { Icon, IconButton, useTranslation } from "@dxos/react-ui";
537
395
  import { Waveform } from "@dxos/react-ui-sfx";
538
- import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/react-ui-theme";
396
+ import { groupHoverControlItemWithTransition, mx as mx4 } from "@dxos/react-ui-theme";
539
397
  var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinned, screenshare, video, mute, wave, speaking, onClick }) => {
540
- var _effect = _useSignals6();
398
+ var _effect = _useSignals5();
541
399
  try {
542
- const { t } = useTranslation2(meta.id);
400
+ const { t } = useTranslation(meta.id);
543
401
  const iconProps = {
544
402
  wave: {
545
403
  icon: "ph--hand-waving--duotone",
@@ -565,32 +423,32 @@ var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinne
565
423
  }, [
566
424
  speaking
567
425
  ]);
568
- return /* @__PURE__ */ React6.createElement("div", {
569
- className: mx5("relative w-full h-full group", "rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500", speakingIndicator ? "outline-green-500" : !video && "outline-separator", classNames),
426
+ return /* @__PURE__ */ React5.createElement("div", {
427
+ className: mx4("relative w-full h-full group", "rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500", speakingIndicator ? "outline-green-500" : !video && "outline-separator", classNames),
570
428
  style
571
- }, children, onClick && /* @__PURE__ */ React6.createElement("div", {
429
+ }, children, onClick && /* @__PURE__ */ React5.createElement("div", {
572
430
  className: "z-10 absolute top-1 right-1 flex"
573
- }, /* @__PURE__ */ React6.createElement(IconButton2, {
574
- classNames: mx5("p-1 min-bs-1 rounded", groupHoverControlItemWithTransition2),
431
+ }, /* @__PURE__ */ React5.createElement(IconButton, {
432
+ classNames: mx4("p-1 min-bs-1 rounded", groupHoverControlItemWithTransition),
575
433
  iconOnly: true,
576
434
  icon: pinned ? "ph--x--regular" : "ph--arrows-out--regular",
577
435
  size: pinned ? 5 : 4,
578
436
  label: pinned ? t("icon unpin") : t("icon pin"),
579
437
  onClick: () => onClick?.(item)
580
- })), name && /* @__PURE__ */ React6.createElement("div", {
438
+ })), name && /* @__PURE__ */ React5.createElement("div", {
581
439
  className: "z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center"
582
- }, screenshare && /* @__PURE__ */ React6.createElement(Icon2, {
440
+ }, screenshare && /* @__PURE__ */ React5.createElement(Icon, {
583
441
  icon: "ph--broadcast--regular",
584
442
  size: pinned ? 5 : 4
585
- }), /* @__PURE__ */ React6.createElement("div", {
586
- className: mx5("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded", pinned ? "px-2" : "px-1 text-xs")
587
- }, name)), /* @__PURE__ */ React6.createElement("div", {
443
+ }), /* @__PURE__ */ React5.createElement("div", {
444
+ className: mx4("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded", pinned ? "px-2" : "px-1 text-xs")
445
+ }, name)), /* @__PURE__ */ React5.createElement("div", {
588
446
  className: "z-10 absolute bottom-1 left-1 flex"
589
- }, speaking && /* @__PURE__ */ React6.createElement(Waveform, {
447
+ }, speaking && /* @__PURE__ */ React5.createElement(Waveform, {
590
448
  active: true,
591
449
  size: pinned ? 5 : 4
592
- }) || props && /* @__PURE__ */ React6.createElement(IconButton2, {
593
- classNames: mx5("p-1 min-bs-1 rounded", props?.classNames),
450
+ }) || props && /* @__PURE__ */ React5.createElement(IconButton, {
451
+ classNames: mx4("p-1 min-bs-1 rounded", props?.classNames),
594
452
  icon: props?.icon,
595
453
  label: props?.label,
596
454
  size: pinned ? 5 : 4,
@@ -604,17 +462,19 @@ var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinne
604
462
  // src/components/Participant/Participant.tsx
605
463
  var SCREENSHARE_SUFFIX = "_screenshare";
606
464
  var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
607
- var _effect = _useSignals7();
465
+ var _effect = _useSignals6();
608
466
  try {
609
- const call = useCapability2(ThreadCapabilities.CallManager);
467
+ const call = useCapability(ThreadCapabilities.CallManager);
610
468
  const isSelf = call.self.id !== void 0 && user.id !== void 0 && user.id.startsWith(call.self.id);
611
469
  const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
612
- const pulledVideoStream = call.getVideoStream(isScreenshare || !isSelf ? user.tracks?.video : void 0);
470
+ const pulledVideoStream = !isSelf && isScreenshare && user.tracks?.screenshareEnabled ? call.getVideoStream(user.tracks?.screenshare) : !isSelf && !isScreenshare && user.tracks?.videoEnabled ? call.getVideoStream(user.tracks?.video) : void 0;
613
471
  const videoStream = useMemo2(() => {
614
- if (isSelf && !isScreenshare) {
615
- return call.media.videoStream;
616
- } else if (isSelf && isScreenshare) {
617
- return call.media.screenshareVideoStream;
472
+ if (isSelf) {
473
+ if (isScreenshare) {
474
+ return call.media.screenshareVideoStream;
475
+ } else if (!isScreenshare) {
476
+ return call.media.videoStream;
477
+ }
618
478
  } else if (!isSelf) {
619
479
  return pulledVideoStream;
620
480
  }
@@ -625,7 +485,7 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
625
485
  call.media.screenshareVideoStream,
626
486
  pulledVideoStream
627
487
  ]);
628
- return /* @__PURE__ */ React7.createElement(ResponsiveGridItem, {
488
+ return /* @__PURE__ */ React6.createElement(ResponsiveGridItem, {
629
489
  ...props,
630
490
  item: user,
631
491
  name: user.name,
@@ -636,7 +496,7 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
636
496
  wave: user.raisedHand,
637
497
  speaking: user.speaking,
638
498
  debug
639
- }, /* @__PURE__ */ React7.createElement(VideoObject, {
499
+ }, /* @__PURE__ */ React6.createElement(VideoObject, {
640
500
  videoStream,
641
501
  flip: isSelf && !isScreenshare,
642
502
  contain: !!isScreenshare,
@@ -649,11 +509,11 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
649
509
  Participant.displayName = "Participant";
650
510
 
651
511
  // src/components/Participant/ParticipantGrid.tsx
652
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
653
- import React8, { useEffect as useEffect5, useMemo as useMemo3, useState as useState3 } from "react";
512
+ import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
513
+ import React7, { useEffect as useEffect5, useMemo as useMemo3, useState as useState3 } from "react";
654
514
  var getId = (user) => user.id;
655
515
  var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
656
- var _effect = _useSignals8();
516
+ var _effect = _useSignals7();
657
517
  try {
658
518
  const [pinned, setPinned] = useState3();
659
519
  const allUsers = useMemo3(() => {
@@ -707,7 +567,7 @@ var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
707
567
  return 0;
708
568
  }
709
569
  });
710
- return /* @__PURE__ */ React8.createElement(ResponsiveGrid, {
570
+ return /* @__PURE__ */ React7.createElement(ResponsiveGrid, {
711
571
  classNames,
712
572
  Cell: Participant,
713
573
  debug,
@@ -722,6 +582,148 @@ var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
722
582
  }
723
583
  };
724
584
 
585
+ // src/components/Call/Toolbar.tsx
586
+ import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
587
+ import React8 from "react";
588
+ import { useAppGraph, useCapability as useCapability2 } from "@dxos/app-framework";
589
+ import { useActions, useNode } from "@dxos/plugin-graph";
590
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
591
+ import { Icon as Icon2, IconButton as IconButton2, Toolbar as NativeToolbar, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
592
+ import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/react-ui-theme";
593
+ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
594
+ var _effect = _useSignals8();
595
+ try {
596
+ const { t } = useTranslation2(meta.id);
597
+ const { graph } = useAppGraph();
598
+ const call = useCapability2(ThreadCapabilities.CallManager);
599
+ const node = useNode(graph, channel && fullyQualifiedId(channel));
600
+ const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
601
+ const isScreensharing = call.media.screenshareTrack !== void 0;
602
+ const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
603
+ return /* @__PURE__ */ React8.createElement("div", {
604
+ className: mx5("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition2)
605
+ }, /* @__PURE__ */ React8.createElement(NativeToolbar.Root, {
606
+ classNames: [
607
+ "p-2 bg-modalSurface rounded-md shadow-md",
608
+ classNames
609
+ ]
610
+ }, /* @__PURE__ */ React8.createElement(ToggleButton, {
611
+ active: call.media.audioEnabled,
612
+ state: {
613
+ on: {
614
+ icon: "ph--microphone--regular",
615
+ label: t("mic off"),
616
+ onClick: () => call.turnAudioOff(),
617
+ classNames: "bg-callActive"
618
+ },
619
+ off: {
620
+ icon: "ph--microphone-slash--duotone",
621
+ label: t("mic on"),
622
+ onClick: () => call.turnAudioOn(),
623
+ classNames: [
624
+ call.joined && "bg-callAlert"
625
+ ]
626
+ }
627
+ }
628
+ }), /* @__PURE__ */ React8.createElement(ToggleButton, {
629
+ active: call.media.videoEnabled,
630
+ state: {
631
+ on: {
632
+ icon: "ph--video-camera--regular",
633
+ label: t("camera off"),
634
+ onClick: () => call.turnVideoOff()
635
+ },
636
+ off: {
637
+ icon: "ph--video-camera-slash--duotone",
638
+ label: t("camera on"),
639
+ onClick: () => call.turnVideoOn()
640
+ }
641
+ }
642
+ }), participants !== void 0 && /* @__PURE__ */ React8.createElement("div", {
643
+ className: "flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued"
644
+ }, /* @__PURE__ */ React8.createElement(Icon2, {
645
+ icon: "ph--users--regular",
646
+ size: 4
647
+ }), /* @__PURE__ */ React8.createElement("div", null, participants)) || /* @__PURE__ */ React8.createElement(NativeToolbar.Separator, {
648
+ variant: "gap"
649
+ }), call.joined && /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(ToggleButton, {
650
+ disabled: !canSharescreen,
651
+ active: isScreensharing,
652
+ state: {
653
+ on: {
654
+ icon: "ph--monitor--regular",
655
+ label: t("screenshare off"),
656
+ onClick: () => call.turnScreenshareOff()
657
+ },
658
+ off: {
659
+ icon: "ph--monitor-arrow-up--duotone",
660
+ label: t("screenshare on"),
661
+ onClick: () => call.turnScreenshareOn()
662
+ }
663
+ }
664
+ }), actions.map((action) => /* @__PURE__ */ React8.createElement(IconButton2, {
665
+ key: action.id,
666
+ ...defaultButtonProps,
667
+ icon: action.properties.icon,
668
+ label: toLocalizedString(action.properties.label, t),
669
+ classNames: action.properties.classNames,
670
+ onClick: () => action.data({
671
+ node
672
+ })
673
+ })), /* @__PURE__ */ React8.createElement(ToggleButton, {
674
+ active: call.raisedHand,
675
+ state: {
676
+ on: {
677
+ icon: "ph--hand-waving--regular",
678
+ label: t("lower hand"),
679
+ onClick: () => call.setRaisedHand(false),
680
+ classNames: [
681
+ call.joined && "bg-callAlert"
682
+ ]
683
+ },
684
+ off: {
685
+ icon: "ph--hand-palm--duotone",
686
+ label: t("raise hand"),
687
+ onClick: () => call.setRaisedHand(true)
688
+ }
689
+ }
690
+ })), call.joined ? /* @__PURE__ */ React8.createElement(IconButton2, {
691
+ variant: "destructive",
692
+ icon: "ph--phone-x--regular",
693
+ label: t("leave call"),
694
+ onClick: onLeave
695
+ }) : /* @__PURE__ */ React8.createElement(IconButton2, {
696
+ variant: "primary",
697
+ icon: "ph--phone-incoming--regular",
698
+ label: t("join call"),
699
+ onClick: onJoin
700
+ })));
701
+ } finally {
702
+ _effect.f();
703
+ }
704
+ };
705
+ Toolbar.displayName = "MeetingToolbar";
706
+ var defaultButtonProps = {
707
+ size: 5,
708
+ iconOnly: true
709
+ };
710
+ var ToggleButton = ({ active, state }) => {
711
+ var _effect = _useSignals8();
712
+ try {
713
+ return /* @__PURE__ */ React8.createElement(IconButton2, {
714
+ ...defaultButtonProps,
715
+ classNames: [
716
+ active ? state.on.classNames ?? "bg-callActive" : state.off.classNames
717
+ ],
718
+ icon: active ? state.on.icon : state.off.icon,
719
+ label: active ? state.on.label : state.off.label,
720
+ onClick: active ? state.on.onClick : state.off.onClick
721
+ });
722
+ } finally {
723
+ _effect.f();
724
+ }
725
+ };
726
+
725
727
  // src/components/Call/Call.tsx
726
728
  var CallRoot = ({ children }) => {
727
729
  var _effect = _useSignals9();
@@ -801,7 +803,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
801
803
  useEffect6(() => {
802
804
  const ctx = new Context(void 0, {
803
805
  F: __dxlog_file2,
804
- L: 48
806
+ L: 49
805
807
  });
806
808
  callManager.left.on(ctx, (roomId2) => {
807
809
  extensions.forEach((extension) => {
@@ -843,7 +845,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
843
845
  } catch (err) {
844
846
  log.catch(err, void 0, {
845
847
  F: __dxlog_file2,
846
- L: 92,
848
+ L: 93,
847
849
  S: void 0,
848
850
  C: (f, a) => f(...a)
849
851
  });
@@ -859,7 +861,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
859
861
  } catch (err) {
860
862
  log.catch(err, void 0, {
861
863
  F: __dxlog_file2,
862
- L: 104,
864
+ L: 105,
863
865
  S: void 0,
864
866
  C: (f, a) => f(...a)
865
867
  });
@@ -981,4 +983,4 @@ export {
981
983
  ChannelContainer,
982
984
  ChannelContainer_default
983
985
  };
984
- //# sourceMappingURL=chunk-KWPRNHTK.mjs.map
986
+ //# sourceMappingURL=chunk-TQJYDFBU.mjs.map