@dxos/plugin-thread 0.8.3-staging.0fa589b → 0.8.4-main.f9ba587

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 (232) hide show
  1. package/dist/lib/browser/ChannelContainer-5YH4FTBL.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-2UYQ23KO.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-OY7R7EJP.mjs → app-graph-builder-Q5V3KXE3.mjs} +6 -6
  4. package/dist/lib/browser/{call-manager-APQAZWHT.mjs → call-manager-NIPDYUVD.mjs} +6 -5
  5. package/dist/lib/browser/chunk-5ZVJ4GAS.mjs +21 -0
  6. package/dist/lib/browser/chunk-6NSMBO3B.mjs +56 -0
  7. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-5P5BH5GE.mjs → chunk-ERWASUQK.mjs} +66 -5
  9. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-IIUTBDVB.mjs → chunk-EV4JWI7L.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-JKQUJOTX.mjs → chunk-GERVMFQW.mjs} +2 -2
  12. package/dist/lib/browser/{chunk-AEXWNS6Z.mjs → chunk-JVIKVYTI.mjs} +4 -4
  13. package/dist/lib/browser/{chunk-XZKBN3NS.mjs → chunk-LCJD3NOB.mjs} +32 -31
  14. package/dist/lib/browser/chunk-LCJD3NOB.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-R5MDLUPC.mjs → chunk-LGSDKXPF.mjs} +3 -3
  16. package/dist/lib/browser/chunk-NCSFNWBZ.mjs +479 -0
  17. package/dist/lib/browser/chunk-NCSFNWBZ.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-YD57K2SL.mjs +367 -0
  19. package/dist/lib/browser/chunk-YD57K2SL.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-4H4A264L.mjs → chunk-ZE7KWN36.mjs} +85 -124
  21. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +7 -0
  22. package/dist/lib/browser/index.mjs +28 -22
  23. package/dist/lib/browser/index.mjs.map +3 -3
  24. package/dist/lib/browser/{intent-resolver-FK2MDVDT.mjs → intent-resolver-MWE6XLPY.mjs} +6 -6
  25. package/dist/lib/browser/{markdown-TE5SWWNJ.mjs → markdown-ZO34G7RM.mjs} +7 -7
  26. package/dist/lib/browser/meta.json +1 -1
  27. package/dist/lib/browser/react-root-YNDNPODD.mjs +28 -0
  28. package/dist/lib/browser/{react-surface-VXUJKSOG.mjs → react-surface-2AXRNTCA.mjs} +12 -11
  29. package/dist/lib/browser/{settings-RB2RSLXV.mjs → settings-XZGPZNAU.mjs} +4 -4
  30. package/dist/lib/browser/{state-RKL5MSDP.mjs → state-H6CYONWE.mjs} +4 -4
  31. package/dist/lib/browser/types/index.mjs +2 -2
  32. package/dist/lib/node-esm/ChannelContainer-O2LZKMRM.mjs +17 -0
  33. package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs → ChatContainer-6N35MP5J.mjs} +6 -5
  34. package/dist/lib/node-esm/{app-graph-builder-BAHBHYWI.mjs → app-graph-builder-GAKBZNU3.mjs} +6 -6
  35. package/dist/lib/node-esm/{call-manager-UUYXLF4T.mjs → call-manager-D6O5ZJJ4.mjs} +6 -5
  36. package/dist/lib/{browser/call-manager-APQAZWHT.mjs.map → node-esm/call-manager-D6O5ZJJ4.mjs.map} +1 -1
  37. package/dist/lib/node-esm/{chunk-O3V45YJP.mjs → chunk-25ABSYP2.mjs} +65 -5
  38. package/dist/lib/node-esm/chunk-25ABSYP2.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-UJMPYKT3.mjs → chunk-3X3YKRM2.mjs} +4 -4
  40. package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs → chunk-57XR3LEF.mjs} +2 -2
  41. package/dist/lib/node-esm/{chunk-2RNIPFDA.mjs → chunk-5UQ4KKDE.mjs} +32 -31
  42. package/dist/lib/node-esm/chunk-5UQ4KKDE.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs → chunk-75RJ5DJI.mjs} +3 -3
  44. package/dist/lib/node-esm/chunk-A6QLTZCY.mjs +480 -0
  45. package/dist/lib/node-esm/chunk-A6QLTZCY.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs → chunk-GRLRWTRU.mjs} +2 -2
  47. package/dist/lib/node-esm/{chunk-WXNPD542.mjs → chunk-IHDNQLLR.mjs} +84 -124
  48. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs +58 -0
  50. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-RGTWAVEE.mjs +368 -0
  52. package/dist/lib/node-esm/chunk-RGTWAVEE.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-X62X3VOK.mjs +23 -0
  54. package/dist/lib/node-esm/index.mjs +28 -22
  55. package/dist/lib/node-esm/index.mjs.map +3 -3
  56. package/dist/lib/node-esm/{intent-resolver-BU73VYW3.mjs → intent-resolver-B6PNTMPY.mjs} +6 -6
  57. package/dist/lib/node-esm/{markdown-HJUWNBLS.mjs → markdown-ZJUFV2TA.mjs} +7 -7
  58. package/dist/lib/node-esm/meta.json +1 -1
  59. package/dist/lib/node-esm/{react-root-RUXOAQNW.mjs → react-root-ZUVVTKWG.mjs} +12 -11
  60. package/dist/lib/{browser/react-root-NK3A4VG7.mjs.map → node-esm/react-root-ZUVVTKWG.mjs.map} +1 -1
  61. package/dist/lib/node-esm/{react-surface-ELXFYKP6.mjs → react-surface-OMEZTOU6.mjs} +12 -11
  62. package/dist/lib/{browser/react-surface-VXUJKSOG.mjs.map → node-esm/react-surface-OMEZTOU6.mjs.map} +1 -1
  63. package/dist/lib/node-esm/{settings-EA7DFSM6.mjs → settings-XECBSD6Q.mjs} +4 -4
  64. package/dist/lib/node-esm/{state-6AUTNROZ.mjs → state-D7WNDT3N.mjs} +4 -4
  65. package/dist/lib/node-esm/types/index.mjs +2 -2
  66. package/dist/types/src/calls/call-manager.d.ts +1 -1
  67. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  68. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  69. package/dist/types/src/calls/util/calls-service.d.ts +4 -1
  70. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  71. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  72. package/dist/types/src/calls-service.stories.d.ts +22 -0
  73. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  74. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  75. package/dist/types/src/components/ChannelContainer.stories.d.ts +2 -2
  76. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  77. package/dist/types/src/components/Chat.stories.d.ts +3 -2
  78. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  79. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  80. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  81. package/dist/types/src/components/Comments.stories.d.ts +1 -1
  82. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  83. package/dist/types/src/components/CommentsContainer.d.ts +4 -4
  84. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  85. package/dist/types/src/components/CommentsThreadContainer.d.ts +14 -0
  86. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -0
  87. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  88. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +1 -1
  91. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +1 -1
  93. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/index.d.ts +1 -1
  95. package/dist/types/src/components/index.d.ts.map +1 -1
  96. package/dist/types/src/hooks/index.d.ts +2 -0
  97. package/dist/types/src/hooks/index.d.ts.map +1 -1
  98. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  99. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  100. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  101. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  102. package/dist/types/src/testing/stories.d.ts.map +1 -1
  103. package/dist/types/src/translations.d.ts +72 -194
  104. package/dist/types/src/translations.d.ts.map +1 -1
  105. package/dist/types/tsconfig.tsbuildinfo +1 -1
  106. package/package.json +47 -48
  107. package/src/ThreadPlugin.tsx +1 -1
  108. package/src/calls/call-manager.ts +6 -2
  109. package/src/calls/media-manager.ts +11 -4
  110. package/src/calls/util/calls-service.ts +8 -5
  111. package/src/calls/util/stub-media-streams.ts +3 -6
  112. package/src/calls-service.stories.tsx +216 -0
  113. package/src/components/Call/Call.tsx +1 -1
  114. package/src/components/Call/Toolbar.tsx +2 -2
  115. package/src/components/CallDebugPanel.tsx +2 -2
  116. package/src/components/ChannelContainer.stories.tsx +5 -5
  117. package/src/components/ChannelContainer.tsx +6 -5
  118. package/src/components/Chat.stories.tsx +4 -4
  119. package/src/components/ChatContainer.tsx +10 -9
  120. package/src/components/Comments.stories.tsx +22 -15
  121. package/src/components/CommentsContainer.tsx +16 -11
  122. package/src/components/{CommentContainer.tsx → CommentsThreadContainer.tsx} +49 -80
  123. package/src/components/Media/VideoObject.stories.tsx +1 -1
  124. package/src/components/MessageContainer.tsx +27 -43
  125. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +2 -2
  126. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +2 -2
  127. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  128. package/src/components/ThreadComplementary.tsx +2 -2
  129. package/src/components/ThreadSettings.tsx +2 -2
  130. package/src/components/index.ts +1 -1
  131. package/src/hooks/index.ts +2 -0
  132. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  133. package/src/hooks/useVideoStreamTrack.tsx +33 -0
  134. package/src/testing/stories.ts +5 -1
  135. package/src/translations.ts +9 -8
  136. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  137. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  138. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  140. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  141. package/dist/lib/browser/chunk-PG5CTFKK.mjs +0 -550
  142. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  143. package/dist/lib/browser/chunk-TAFSCSUR.mjs +0 -351
  144. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  145. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  146. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  147. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  148. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  149. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  150. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  151. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  152. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  153. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  154. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  155. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  156. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  157. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  158. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  159. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  160. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  161. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  162. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  163. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  164. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  165. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  166. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  167. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  168. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  169. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  170. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  171. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  172. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  173. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  174. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  175. package/dist/lib/node/index.cjs +0 -310
  176. package/dist/lib/node/index.cjs.map +0 -7
  177. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  178. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  179. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  180. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  181. package/dist/lib/node/meta.json +0 -1
  182. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  183. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  184. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  185. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  186. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  187. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  188. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  189. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  190. package/dist/lib/node/types/index.cjs +0 -38
  191. package/dist/lib/node/types/index.cjs.map +0 -7
  192. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  193. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  194. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  195. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  196. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs +0 -352
  197. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  198. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs +0 -551
  199. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  200. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  201. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  202. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  203. package/dist/types/src/peers.stories.d.ts +0 -11
  204. package/dist/types/src/peers.stories.d.ts.map +0 -1
  205. package/src/peers.stories.tsx +0 -189
  206. /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → ChannelContainer-5YH4FTBL.mjs.map} +0 -0
  207. /package/dist/lib/browser/{ChatContainer-RSOKYAMK.mjs.map → ChatContainer-2UYQ23KO.mjs.map} +0 -0
  208. /package/dist/lib/browser/{app-graph-builder-OY7R7EJP.mjs.map → app-graph-builder-Q5V3KXE3.mjs.map} +0 -0
  209. /package/dist/lib/{node-esm/call-manager-UUYXLF4T.mjs.map → browser/call-manager-NIPDYUVD.mjs.map} +0 -0
  210. /package/dist/lib/browser/{chunk-6NBVNXTM.mjs.map → chunk-5ZVJ4GAS.mjs.map} +0 -0
  211. /package/dist/lib/browser/{chunk-IIUTBDVB.mjs.map → chunk-EV4JWI7L.mjs.map} +0 -0
  212. /package/dist/lib/browser/{chunk-JKQUJOTX.mjs.map → chunk-GERVMFQW.mjs.map} +0 -0
  213. /package/dist/lib/browser/{chunk-AEXWNS6Z.mjs.map → chunk-JVIKVYTI.mjs.map} +0 -0
  214. /package/dist/lib/browser/{chunk-R5MDLUPC.mjs.map → chunk-LGSDKXPF.mjs.map} +0 -0
  215. /package/dist/lib/browser/{intent-resolver-FK2MDVDT.mjs.map → intent-resolver-MWE6XLPY.mjs.map} +0 -0
  216. /package/dist/lib/browser/{markdown-TE5SWWNJ.mjs.map → markdown-ZO34G7RM.mjs.map} +0 -0
  217. /package/dist/lib/{node-esm/react-root-RUXOAQNW.mjs.map → browser/react-root-YNDNPODD.mjs.map} +0 -0
  218. /package/dist/lib/{node-esm/react-surface-ELXFYKP6.mjs.map → browser/react-surface-2AXRNTCA.mjs.map} +0 -0
  219. /package/dist/lib/browser/{settings-RB2RSLXV.mjs.map → settings-XZGPZNAU.mjs.map} +0 -0
  220. /package/dist/lib/browser/{state-RKL5MSDP.mjs.map → state-H6CYONWE.mjs.map} +0 -0
  221. /package/dist/lib/node-esm/{ChannelContainer-O4QJII2P.mjs.map → ChannelContainer-O2LZKMRM.mjs.map} +0 -0
  222. /package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs.map → ChatContainer-6N35MP5J.mjs.map} +0 -0
  223. /package/dist/lib/node-esm/{app-graph-builder-BAHBHYWI.mjs.map → app-graph-builder-GAKBZNU3.mjs.map} +0 -0
  224. /package/dist/lib/node-esm/{chunk-UJMPYKT3.mjs.map → chunk-3X3YKRM2.mjs.map} +0 -0
  225. /package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs.map → chunk-57XR3LEF.mjs.map} +0 -0
  226. /package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs.map → chunk-75RJ5DJI.mjs.map} +0 -0
  227. /package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs.map → chunk-GRLRWTRU.mjs.map} +0 -0
  228. /package/dist/lib/node-esm/{chunk-O63QJPQX.mjs.map → chunk-X62X3VOK.mjs.map} +0 -0
  229. /package/dist/lib/node-esm/{intent-resolver-BU73VYW3.mjs.map → intent-resolver-B6PNTMPY.mjs.map} +0 -0
  230. /package/dist/lib/node-esm/{markdown-HJUWNBLS.mjs.map → markdown-ZJUFV2TA.mjs.map} +0 -0
  231. /package/dist/lib/node-esm/{settings-EA7DFSM6.mjs.map → settings-XECBSD6Q.mjs.map} +0 -0
  232. /package/dist/lib/node-esm/{state-6AUTNROZ.mjs.map → state-D7WNDT3N.mjs.map} +0 -0
@@ -1,984 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_UM36TPCT_exports = {};
30
- __export(chunk_UM36TPCT_exports, {
31
- Call: () => Call,
32
- ChannelContainer: () => ChannelContainer,
33
- ChannelContainer_default: () => ChannelContainer_default
34
- });
35
- module.exports = __toCommonJS(chunk_UM36TPCT_exports);
36
- var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
37
- var import_chunk_E3WBZTTI = require("./chunk-E3WBZTTI.cjs");
38
- var import_chunk_FUXJAVFZ = require("./chunk-FUXJAVFZ.cjs");
39
- var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
40
- var import_tracking = require("@preact-signals/safe-react/tracking");
41
- var import_rx_react = require("@effect-rx/rx-react");
42
- var import_react = __toESM(require("react"));
43
- var import_app_framework = require("@dxos/app-framework");
44
- var import_context = require("@dxos/context");
45
- var import_log = require("@dxos/log");
46
- var import_react_client = require("@dxos/react-client");
47
- var import_echo = require("@dxos/react-client/echo");
48
- var import_halo = require("@dxos/react-client/halo");
49
- var import_react_ui = require("@dxos/react-ui");
50
- var import_react_ui_form = require("@dxos/react-ui-form");
51
- var import_react_ui_menu = require("@dxos/react-ui-menu");
52
- var import_react_ui_sfx = require("@dxos/react-ui-sfx");
53
- var import_react_ui_stack = require("@dxos/react-ui-stack");
54
- var import_tracking2 = require("@preact-signals/safe-react/tracking");
55
- var import_react2 = __toESM(require("react"));
56
- var import_app_framework2 = require("@dxos/app-framework");
57
- var import_tracking3 = require("@preact-signals/safe-react/tracking");
58
- var import_react3 = __toESM(require("react"));
59
- var import_app_framework3 = require("@dxos/app-framework");
60
- var import_plugin_graph = require("@dxos/plugin-graph");
61
- var import_echo2 = require("@dxos/react-client/echo");
62
- var import_react_ui2 = require("@dxos/react-ui");
63
- var import_react_ui_theme = require("@dxos/react-ui-theme");
64
- var import_tracking4 = require("@preact-signals/safe-react/tracking");
65
- var import_react4 = __toESM(require("react"));
66
- var import_tracking5 = require("@preact-signals/safe-react/tracking");
67
- var import_react5 = __toESM(require("react"));
68
- var import_react_ui_theme2 = require("@dxos/react-ui-theme");
69
- var import_tracking6 = require("@preact-signals/safe-react/tracking");
70
- var import_react6 = __toESM(require("react"));
71
- var import_app_framework4 = require("@dxos/app-framework");
72
- var import_tracking7 = require("@preact-signals/safe-react/tracking");
73
- var import_react7 = __toESM(require("react"));
74
- var import_react_ui_theme3 = require("@dxos/react-ui-theme");
75
- var import_tracking8 = require("@preact-signals/safe-react/tracking");
76
- var import_react8 = __toESM(require("react"));
77
- var import_react_resize_detector = require("react-resize-detector");
78
- var import_invariant = require("@dxos/invariant");
79
- var import_react_ui_theme4 = require("@dxos/react-ui-theme");
80
- var import_tracking9 = require("@preact-signals/safe-react/tracking");
81
- var import_react9 = __toESM(require("react"));
82
- var import_react_ui3 = require("@dxos/react-ui");
83
- var import_react_ui_sfx2 = require("@dxos/react-ui-sfx");
84
- var import_react_ui_theme5 = require("@dxos/react-ui-theme");
85
- var import_tracking10 = require("@preact-signals/safe-react/tracking");
86
- var import_react10 = __toESM(require("react"));
87
- var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
88
- var _effect = (0, import_tracking3.useSignals)();
89
- try {
90
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
91
- const { graph } = (0, import_app_framework3.useAppGraph)();
92
- const call = (0, import_app_framework3.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
93
- const node = (0, import_plugin_graph.useNode)(graph, channel && (0, import_echo2.fullyQualifiedId)(channel));
94
- const actions = (0, import_plugin_graph.useActions)(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
95
- const isScreensharing = call.media.screenshareTrack !== void 0;
96
- const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
97
- return /* @__PURE__ */ import_react3.default.createElement("div", {
98
- className: (0, import_react_ui_theme.mx)("z-20 flex justify-center m-8", autoHideControls && import_react_ui_theme.groupHoverControlItemWithTransition)
99
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
100
- classNames: [
101
- "p-2 bg-modalSurface rounded-md shadow-md",
102
- classNames
103
- ]
104
- }, /* @__PURE__ */ import_react3.default.createElement(ToggleButton, {
105
- active: call.media.audioEnabled,
106
- state: {
107
- on: {
108
- icon: "ph--microphone--regular",
109
- label: t("mic off"),
110
- onClick: () => call.turnAudioOff(),
111
- classNames: "bg-callActive"
112
- },
113
- off: {
114
- icon: "ph--microphone-slash--duotone",
115
- label: t("mic on"),
116
- onClick: () => call.turnAudioOn(),
117
- classNames: [
118
- call.joined && "bg-callAlert"
119
- ]
120
- }
121
- }
122
- }), /* @__PURE__ */ import_react3.default.createElement(ToggleButton, {
123
- active: call.media.videoEnabled,
124
- state: {
125
- on: {
126
- icon: "ph--video-camera--regular",
127
- label: t("camera off"),
128
- onClick: () => call.turnVideoOff()
129
- },
130
- off: {
131
- icon: "ph--video-camera-slash--duotone",
132
- label: t("camera on"),
133
- onClick: () => call.turnVideoOn()
134
- }
135
- }
136
- }), participants !== void 0 && /* @__PURE__ */ import_react3.default.createElement("div", {
137
- className: "flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued"
138
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
139
- icon: "ph--users--regular",
140
- size: 4
141
- }), /* @__PURE__ */ import_react3.default.createElement("div", null, participants)) || /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Separator, {
142
- variant: "gap"
143
- }), call.joined && /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(ToggleButton, {
144
- disabled: !canSharescreen,
145
- active: isScreensharing,
146
- state: {
147
- on: {
148
- icon: "ph--monitor--regular",
149
- label: t("screenshare off"),
150
- onClick: () => call.turnScreenshareOff()
151
- },
152
- off: {
153
- icon: "ph--monitor-arrow-up--duotone",
154
- label: t("screenshare on"),
155
- onClick: () => call.turnScreenshareOn()
156
- }
157
- }
158
- }), actions.map((action) => /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.IconButton, {
159
- key: action.id,
160
- ...defaultButtonProps,
161
- icon: action.properties.icon,
162
- label: (0, import_react_ui2.toLocalizedString)(action.properties.label, t),
163
- classNames: action.properties.classNames,
164
- onClick: () => action.data({
165
- node
166
- })
167
- })), /* @__PURE__ */ import_react3.default.createElement(ToggleButton, {
168
- active: call.raisedHand,
169
- state: {
170
- on: {
171
- icon: "ph--hand-waving--regular",
172
- label: t("lower hand"),
173
- onClick: () => call.setRaisedHand(false),
174
- classNames: [
175
- call.joined && "bg-callAlert"
176
- ]
177
- },
178
- off: {
179
- icon: "ph--hand-palm--duotone",
180
- label: t("raise hand"),
181
- onClick: () => call.setRaisedHand(true)
182
- }
183
- }
184
- })), call.joined ? /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.IconButton, {
185
- variant: "destructive",
186
- icon: "ph--phone-x--regular",
187
- label: t("leave call"),
188
- onClick: onLeave
189
- }) : /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.IconButton, {
190
- variant: "primary",
191
- icon: "ph--phone-incoming--regular",
192
- label: t("join call"),
193
- onClick: onJoin
194
- })));
195
- } finally {
196
- _effect.f();
197
- }
198
- };
199
- Toolbar.displayName = "MeetingToolbar";
200
- var defaultButtonProps = {
201
- size: 5,
202
- iconOnly: true
203
- };
204
- var ToggleButton = ({ active, state }) => {
205
- var _effect = (0, import_tracking3.useSignals)();
206
- try {
207
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.IconButton, {
208
- ...defaultButtonProps,
209
- classNames: [
210
- active ? state.on.classNames ?? "bg-callActive" : state.off.classNames
211
- ],
212
- icon: active ? state.on.icon : state.off.icon,
213
- label: active ? state.on.label : state.off.label,
214
- onClick: active ? state.on.onClick : state.off.onClick
215
- });
216
- } finally {
217
- _effect.f();
218
- }
219
- };
220
- var AudioStream = ({ tracks }) => {
221
- var _effect = (0, import_tracking4.useSignals)();
222
- try {
223
- const mediaStreamRef = (0, import_react4.useRef)(new MediaStream());
224
- const ref = (0, import_react4.useRef)(null);
225
- (0, import_react4.useEffect)(() => {
226
- const audio = ref.current;
227
- if (!audio) {
228
- return;
229
- }
230
- const mediaStream = mediaStreamRef.current;
231
- audio.srcObject = mediaStream;
232
- }, []);
233
- const resetSrcObject = () => {
234
- const audio = ref.current;
235
- const mediaStream = mediaStreamRef.current;
236
- if (!audio || !mediaStream) {
237
- return;
238
- }
239
- audio.addEventListener("canplay", () => audio.play(), {
240
- once: true
241
- });
242
- audio.srcObject = mediaStream;
243
- };
244
- return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement("audio", {
245
- ref,
246
- autoPlay: true
247
- }), tracks.map((track) => /* @__PURE__ */ import_react4.default.createElement(AudioTrack, {
248
- key: track.id,
249
- track,
250
- mediaStream: mediaStreamRef.current,
251
- resetSrcObject
252
- })));
253
- } finally {
254
- _effect.f();
255
- }
256
- };
257
- var AudioTrack = ({ track, mediaStream, resetSrcObject }) => {
258
- (0, import_react4.useEffect)(() => {
259
- const currentTrack = track;
260
- mediaStream.addTrack(currentTrack);
261
- resetSrcObject();
262
- return () => {
263
- mediaStream.removeTrack(currentTrack);
264
- resetSrcObject();
265
- };
266
- }, [
267
- track,
268
- mediaStream
269
- ]);
270
- return null;
271
- };
272
- var VideoObject = /* @__PURE__ */ (0, import_react5.memo)(/* @__PURE__ */ (0, import_react5.forwardRef)(({ videoStream, classNames, flip, contain, ...rest }, ref) => {
273
- var _effect = (0, import_tracking5.useSignals)();
274
- try {
275
- const internalRef = (0, import_react5.useRef)(null);
276
- (0, import_react5.useEffect)(() => {
277
- const video = internalRef.current;
278
- if (video && videoStream) {
279
- video.srcObject = videoStream;
280
- video.setAttribute("autoplay", "true");
281
- video.setAttribute("playsinline", "true");
282
- }
283
- }, [
284
- videoStream,
285
- internalRef.current
286
- ]);
287
- return /* @__PURE__ */ import_react5.default.createElement("video", {
288
- className: (0, import_react_ui_theme2.mx)("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
289
- ref: (v) => {
290
- internalRef.current = v;
291
- if (ref === null) {
292
- return;
293
- }
294
- if (typeof ref === "function") {
295
- ref(v);
296
- } else {
297
- ref.current = v;
298
- }
299
- },
300
- ...rest
301
- });
302
- } finally {
303
- _effect.f();
304
- }
305
- }));
306
- VideoObject.displayName = "VideoObject";
307
- var ResponsiveContainer = ({ children }) => {
308
- var _effect = (0, import_tracking7.useSignals)();
309
- try {
310
- return (
311
- // Outer container that takes full size of parent.
312
- /* @__PURE__ */ import_react7.default.createElement("div", {
313
- role: "none",
314
- className: "relative flex w-full h-full"
315
- }, /* @__PURE__ */ import_react7.default.createElement("div", {
316
- role: "none",
317
- className: "absolute inset-0 flex justify-center items-center"
318
- }, /* @__PURE__ */ import_react7.default.createElement("div", {
319
- role: "none",
320
- className: (0, import_react_ui_theme3.mx)("max-h-full max-w-full w-auto h-auto aspect-video")
321
- }, children)))
322
- );
323
- } finally {
324
- _effect.f();
325
- }
326
- };
327
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/components/ResponsiveGrid/ResponsiveGrid.tsx";
328
- var ASPECT_RATIO = 16 / 9;
329
- var MIN_GALLERY_HEIGHT = 250;
330
- var DEFAULT_GAP = 8;
331
- var maxImageSize = "w-[2560px] h-[1440px]";
332
- var defaultGetId = (item) => item.id;
333
- var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = defaultGetId, items, pinned, autoHideGallery = false, debug, onPinnedChange }) => {
334
- var _effect = (0, import_tracking8.useSignals)();
335
- try {
336
- const { width: containerWidth = 0, height: containerHeight = 0, ref: containerRef } = (0, import_react_resize_detector.useResizeDetector)({
337
- refreshRate: 100
338
- });
339
- const [dividerHeight, setDividerHeight] = (0, import_react8.useState)(0);
340
- (0, import_react8.useEffect)(() => {
341
- if (containerWidth && containerHeight) {
342
- const { height: height2 } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);
343
- setDividerHeight(Math.min(height2, containerHeight - MIN_GALLERY_HEIGHT));
344
- }
345
- }, [
346
- containerWidth,
347
- containerHeight
348
- ]);
349
- const pinnedItem = (0, import_react8.useMemo)(() => items.find((item) => getId2(item) === pinned), [
350
- items,
351
- pinned
352
- ]);
353
- const mainItems = (0, import_react8.useMemo)(() => items.filter((item) => getId2(item) !== pinned), [
354
- items,
355
- pinned
356
- ]);
357
- const hideGallery = autoHideGallery && pinnedItem !== void 0;
358
- const [{ time, columns, cellWidth }, setLayout] = (0, import_react8.useState)({
359
- time: 0,
360
- columns: 0,
361
- cellWidth: 0
362
- });
363
- const { width = 0, height = 0, ref: gridContainerRef } = (0, import_react_resize_detector.useResizeDetector)({
364
- refreshRate: 200
365
- });
366
- (0, import_react8.useEffect)(() => {
367
- if (containerHeight && width && height) {
368
- const layout = calculateLayout(width, height, mainItems.length, gap);
369
- setLayout({
370
- time: Date.now(),
371
- ...layout
372
- });
373
- }
374
- }, [
375
- containerHeight,
376
- width,
377
- height,
378
- mainItems.length,
379
- gap,
380
- pinned
381
- ]);
382
- const [bounds, setBounds] = (0, import_react8.useState)([]);
383
- (0, import_react8.useLayoutEffect)(() => {
384
- if (!hideGallery && !gridContainerRef.current || !containerHeight) {
385
- return;
386
- }
387
- const t = setTimeout(() => {
388
- setBounds(items.filter((item) => !hideGallery || item === pinnedItem).map((item) => {
389
- (0, import_invariant.invariant)(containerRef.current, void 0, {
390
- F: __dxlog_file,
391
- L: 117,
392
- S: void 0,
393
- A: [
394
- "containerRef.current",
395
- ""
396
- ]
397
- });
398
- const el = containerRef.current.querySelector(`[data-grid-item="${getId2(item)}"]`);
399
- if (!el) {
400
- return null;
401
- }
402
- const bounds2 = getRelativeBounds(containerRef.current, el);
403
- return [
404
- item,
405
- bounds2
406
- ];
407
- }).filter((item) => item !== null));
408
- });
409
- return () => clearTimeout(t);
410
- }, [
411
- containerHeight,
412
- items,
413
- pinnedItem,
414
- hideGallery,
415
- time
416
- ]);
417
- const handleClick = (0, import_react8.useCallback)((item) => onPinnedChange?.(getId2(item) === pinned ? void 0 : getId2(item)), [
418
- pinned,
419
- onPinnedChange
420
- ]);
421
- return /* @__PURE__ */ import_react8.default.createElement("div", {
422
- ref: containerRef,
423
- className: (0, import_react_ui_theme4.mx)("relative w-full h-full", classNames)
424
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
425
- className: "absolute inset-0 flex flex-col grow gap-2"
426
- }, pinnedItem && /* @__PURE__ */ import_react8.default.createElement("div", {
427
- className: (0, import_react_ui_theme4.mx)("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
428
- style: hideGallery ? {} : {
429
- height: dividerHeight
430
- }
431
- }, /* @__PURE__ */ import_react8.default.createElement(SoloItem, {
432
- id: getId2(pinnedItem),
433
- debug
434
- })), !hideGallery && /* @__PURE__ */ import_react8.default.createElement("div", {
435
- ref: gridContainerRef,
436
- className: "flex grow-[1] overflow-hidden justify-center items-center",
437
- style: hideGallery ? {} : {
438
- minHeight: MIN_GALLERY_HEIGHT
439
- }
440
- }, mainItems.length === 1 && /* @__PURE__ */ import_react8.default.createElement("div", {
441
- style: {
442
- width: cellWidth
443
- },
444
- className: "flex h-full"
445
- }, /* @__PURE__ */ import_react8.default.createElement(SoloItem, {
446
- id: getId2(mainItems[0]),
447
- debug
448
- })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ import_react8.default.createElement("div", {
449
- role: "grid",
450
- style: {
451
- display: "grid",
452
- gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,
453
- gap: `${gap}px`
454
- }
455
- }, mainItems.map((item) => /* @__PURE__ */ import_react8.default.createElement("div", {
456
- key: getId2(item),
457
- "data-grid-item": getId2(item),
458
- className: (0, import_react_ui_theme4.mx)("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
459
- }))))), /* @__PURE__ */ import_react8.default.createElement("div", {
460
- className: (0, import_react_ui_theme4.mx)(debug && "opacity-10")
461
- }, bounds.map(([item, bounds2]) => /* @__PURE__ */ import_react8.default.createElement(Cell, {
462
- key: getId2(item),
463
- classNames: "absolute transition-all duration-500",
464
- item,
465
- style: bounds2,
466
- pinned: getId2(item) === pinned,
467
- onClick: items.length > 1 ? handleClick : void 0
468
- }))));
469
- } finally {
470
- _effect.f();
471
- }
472
- };
473
- var SoloItem = ({ debug, id }) => {
474
- var _effect = (0, import_tracking8.useSignals)();
475
- try {
476
- return /* @__PURE__ */ import_react8.default.createElement(ResponsiveContainer, null, /* @__PURE__ */ import_react8.default.createElement("div", {
477
- "data-grid-item": id,
478
- className: (0, import_react_ui_theme4.mx)("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
479
- }, /* @__PURE__ */ import_react8.default.createElement("img", {
480
- alt: "placeholder video",
481
- className: (0, import_react_ui_theme4.mx)("opacity-0", maxImageSize)
482
- })));
483
- } finally {
484
- _effect.f();
485
- }
486
- };
487
- var getRelativeBounds = (container, el) => {
488
- const containerRect = container.getBoundingClientRect();
489
- const elementRect = el.getBoundingClientRect();
490
- return {
491
- top: elementRect.top - containerRect.top,
492
- left: elementRect.left - containerRect.left,
493
- width: elementRect.width,
494
- height: elementRect.height
495
- };
496
- };
497
- var calculateLayout = (containerWidth, containerHeight, count, gap, aspectRatio = ASPECT_RATIO) => {
498
- if (count === 0) {
499
- return {
500
- columns: 1,
501
- cellWidth: 1
502
- };
503
- }
504
- let minWastedSpace = Infinity;
505
- let bestColumns = 1;
506
- let cellWidth = 0;
507
- for (let rows = 1; rows <= count; rows++) {
508
- const cols = Math.ceil(count / rows);
509
- const { width: itemWidth, height: itemHeight } = fitItemsToGrid(containerWidth, containerHeight, cols, rows, aspectRatio, gap);
510
- const usedWidth = itemWidth * cols + gap * cols - 1;
511
- const usedHeight = itemHeight * rows + gap * rows - 1;
512
- const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;
513
- if (wastedSpace < minWastedSpace) {
514
- minWastedSpace = wastedSpace;
515
- bestColumns = cols;
516
- cellWidth = itemWidth;
517
- }
518
- }
519
- return {
520
- columns: bestColumns,
521
- cellWidth
522
- };
523
- };
524
- var fitItemsToGrid = (outerWidth, outerHeight, numCols, numRows, aspectRatio, gap) => {
525
- const availableWidth = outerWidth - gap * (numCols - 1);
526
- const availableHeight = outerHeight - gap * (numRows - 1);
527
- const maxCellWidth = availableWidth / numCols;
528
- const maxCellHeight = availableHeight / numRows;
529
- return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);
530
- };
531
- var fitAspectRatio = (outerWidth, outerHeight, aspectRatio) => {
532
- if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {
533
- return {
534
- width: 0,
535
- height: 0
536
- };
537
- }
538
- let width = outerWidth;
539
- let height = width / aspectRatio;
540
- if (height > outerHeight) {
541
- height = outerHeight;
542
- width = height * aspectRatio;
543
- }
544
- return {
545
- width,
546
- height
547
- };
548
- };
549
- var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinned, screenshare, video, mute, wave, speaking, onClick }) => {
550
- var _effect = (0, import_tracking9.useSignals)();
551
- try {
552
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
553
- const iconProps = {
554
- wave: {
555
- icon: "ph--hand-waving--duotone",
556
- label: t("icon wave"),
557
- classNames: "animate-pulse bg-orange-500"
558
- },
559
- mute: {
560
- icon: "ph--microphone-slash--regular",
561
- label: t("icon muted")
562
- }
563
- };
564
- const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : void 0;
565
- const [speakingIndicator, setSpeakingIndicator] = (0, import_react9.useState)(speaking);
566
- (0, import_react9.useEffect)(() => {
567
- if (speaking) {
568
- setSpeakingIndicator(true);
569
- } else {
570
- const timeout = setTimeout(() => {
571
- setSpeakingIndicator(false);
572
- }, 1e3);
573
- return () => clearTimeout(timeout);
574
- }
575
- }, [
576
- speaking
577
- ]);
578
- return /* @__PURE__ */ import_react9.default.createElement("div", {
579
- className: (0, import_react_ui_theme5.mx)("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),
580
- style
581
- }, children, onClick && /* @__PURE__ */ import_react9.default.createElement("div", {
582
- className: "z-10 absolute top-1 right-1 flex"
583
- }, /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.IconButton, {
584
- classNames: (0, import_react_ui_theme5.mx)("p-1 min-bs-1 rounded", import_react_ui_theme5.groupHoverControlItemWithTransition),
585
- iconOnly: true,
586
- icon: pinned ? "ph--x--regular" : "ph--arrows-out--regular",
587
- size: pinned ? 5 : 4,
588
- label: pinned ? t("icon unpin") : t("icon pin"),
589
- onClick: () => onClick?.(item)
590
- })), name && /* @__PURE__ */ import_react9.default.createElement("div", {
591
- className: "z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center"
592
- }, screenshare && /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.Icon, {
593
- icon: "ph--broadcast--regular",
594
- size: pinned ? 5 : 4
595
- }), /* @__PURE__ */ import_react9.default.createElement("div", {
596
- className: (0, import_react_ui_theme5.mx)("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded", pinned ? "px-2" : "px-1 text-xs")
597
- }, name)), /* @__PURE__ */ import_react9.default.createElement("div", {
598
- className: "z-10 absolute bottom-1 left-1 flex"
599
- }, speaking && /* @__PURE__ */ import_react9.default.createElement(import_react_ui_sfx2.Waveform, {
600
- active: true,
601
- size: pinned ? 5 : 4
602
- }) || props && /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.IconButton, {
603
- classNames: (0, import_react_ui_theme5.mx)("p-1 min-bs-1 rounded", props?.classNames),
604
- icon: props?.icon,
605
- label: props?.label,
606
- size: pinned ? 5 : 4,
607
- iconOnly: true
608
- })));
609
- } finally {
610
- _effect.f();
611
- }
612
- };
613
- var SCREENSHARE_SUFFIX = "_screenshare";
614
- var Participant = /* @__PURE__ */ (0, import_react6.memo)(({ item: user, debug, ...props }) => {
615
- var _effect = (0, import_tracking6.useSignals)();
616
- try {
617
- const call = (0, import_app_framework4.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
618
- const isSelf = call.self.id !== void 0 && user.id !== void 0 && user.id.startsWith(call.self.id);
619
- const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
620
- const pulledVideoStream = call.getVideoStream(isScreenshare || !isSelf ? user.tracks?.video : void 0);
621
- const videoStream = (0, import_react6.useMemo)(() => {
622
- if (isSelf && !isScreenshare) {
623
- return call.media.videoStream;
624
- } else if (isSelf && isScreenshare) {
625
- return call.media.screenshareVideoStream;
626
- } else if (!isSelf) {
627
- return pulledVideoStream;
628
- }
629
- }, [
630
- isSelf,
631
- isScreenshare,
632
- call.media.videoStream,
633
- call.media.screenshareVideoStream,
634
- pulledVideoStream
635
- ]);
636
- return /* @__PURE__ */ import_react6.default.createElement(ResponsiveGridItem, {
637
- ...props,
638
- item: user,
639
- name: user.name,
640
- self: isSelf,
641
- screenshare: !!call.media.screenshareVideoStream,
642
- video: call.media.videoEnabled,
643
- mute: user ? !user.tracks?.audioEnabled : false,
644
- wave: user.raisedHand,
645
- speaking: user.speaking,
646
- debug
647
- }, /* @__PURE__ */ import_react6.default.createElement(VideoObject, {
648
- videoStream,
649
- flip: isSelf && !isScreenshare,
650
- contain: !!isScreenshare,
651
- classNames: "rounded-md"
652
- }));
653
- } finally {
654
- _effect.f();
655
- }
656
- });
657
- Participant.displayName = "Participant";
658
- var getId = (user) => user.id;
659
- var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
660
- var _effect = (0, import_tracking10.useSignals)();
661
- try {
662
- const [pinned, setPinned] = (0, import_react10.useState)();
663
- const allUsers = (0, import_react10.useMemo)(() => {
664
- const allUsers2 = [];
665
- users.forEach((user) => {
666
- if (!user.joined) {
667
- return;
668
- }
669
- allUsers2.push({
670
- ...user,
671
- isSelf: user.id === self.id
672
- });
673
- if (user.tracks?.screenshareEnabled) {
674
- const screenshare = {
675
- ...user,
676
- id: user.id + SCREENSHARE_SUFFIX,
677
- tracks: {
678
- ...user.tracks,
679
- video: user.tracks.screenshare,
680
- videoEnabled: user.tracks.screenshareEnabled
681
- }
682
- };
683
- allUsers2.push(screenshare);
684
- }
685
- });
686
- return allUsers2;
687
- }, [
688
- self,
689
- users
690
- ]);
691
- (0, import_react10.useEffect)(() => {
692
- if (pinned) {
693
- if (!allUsers.find((user) => user.id === pinned)) {
694
- setPinned(void 0);
695
- }
696
- }
697
- }, [
698
- pinned,
699
- allUsers
700
- ]);
701
- const sortedUsers = allUsers.sort((a, b) => {
702
- if (a.isSelf) {
703
- return 1;
704
- } else if (b.isSelf) {
705
- return -1;
706
- } else if (a.tracks?.screenshareEnabled) {
707
- return -1;
708
- } else if (b.tracks?.screenshareEnabled) {
709
- return 1;
710
- } else {
711
- return 0;
712
- }
713
- });
714
- return /* @__PURE__ */ import_react10.default.createElement(ResponsiveGrid, {
715
- classNames,
716
- Cell: Participant,
717
- debug,
718
- getId,
719
- items: sortedUsers,
720
- pinned,
721
- autoHideGallery: fullscreen,
722
- onPinnedChange: setPinned
723
- });
724
- } finally {
725
- _effect.f();
726
- }
727
- };
728
- var CallRoot = ({ children }) => {
729
- var _effect = (0, import_tracking2.useSignals)();
730
- try {
731
- return /* @__PURE__ */ import_react2.default.createElement("div", {
732
- className: "relative flex flex-col grow overflow-hidden"
733
- }, children);
734
- } finally {
735
- _effect.f();
736
- }
737
- };
738
- CallRoot.displayName = "CallRoot";
739
- var CallAudio = () => {
740
- var _effect = (0, import_tracking2.useSignals)();
741
- try {
742
- const call = (0, import_app_framework2.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
743
- return /* @__PURE__ */ import_react2.default.createElement(AudioStream, {
744
- tracks: call.pulledAudioTracks
745
- });
746
- } finally {
747
- _effect.f();
748
- }
749
- };
750
- CallAudio.displayName = "CallAudio";
751
- var CallGrid = ({ fullscreen }) => {
752
- var _effect = (0, import_tracking2.useSignals)();
753
- try {
754
- const debug = (0, import_chunk_FUXJAVFZ.useDebugMode)();
755
- const call = (0, import_app_framework2.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
756
- return /* @__PURE__ */ import_react2.default.createElement("div", {
757
- className: "grid grow p-4 dark:bg-neutral-900"
758
- }, /* @__PURE__ */ import_react2.default.createElement(ParticipantGrid, {
759
- self: call.self,
760
- users: call.users,
761
- debug,
762
- fullscreen
763
- }));
764
- } finally {
765
- _effect.f();
766
- }
767
- };
768
- CallGrid.displayName = "CallGrid";
769
- var CallToolbar = (props) => {
770
- var _effect = (0, import_tracking2.useSignals)();
771
- try {
772
- return /* @__PURE__ */ import_react2.default.createElement("div", {
773
- className: "absolute bottom-0 left-0 right-0 flex justify-center"
774
- }, /* @__PURE__ */ import_react2.default.createElement(Toolbar, {
775
- isInRoom: true,
776
- ...props
777
- }));
778
- } finally {
779
- _effect.f();
780
- }
781
- };
782
- CallToolbar.displayName = "CallToolbar";
783
- var Call = {
784
- Root: CallRoot,
785
- Grid: CallGrid,
786
- Audio: CallAudio,
787
- Toolbar: CallToolbar
788
- };
789
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/components/ChannelContainer.tsx";
790
- var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
791
- var _effect = (0, import_tracking.useSignals)();
792
- try {
793
- const space = (0, import_echo.getSpace)(channel);
794
- const callManager = (0, import_app_framework.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
795
- const roomId = channel ? (0, import_echo.fullyQualifiedId)(channel) : _roomId;
796
- const identity = (0, import_halo.useIdentity)();
797
- const isNamed = !!identity?.profile?.displayName;
798
- const joinSound = (0, import_react_ui_sfx.useSoundEffect)("JoinCall");
799
- const leaveSound = (0, import_react_ui_sfx.useSoundEffect)("LeaveCall");
800
- const extensions = (0, import_app_framework.useCapabilities)(import_chunk_4YSNVPWU.ThreadCapabilities.CallExtension);
801
- (0, import_react.useEffect)(() => {
802
- const ctx = new import_context.Context(void 0, {
803
- F: __dxlog_file2,
804
- L: 47
805
- });
806
- callManager.left.on(ctx, (roomId2) => {
807
- extensions.forEach((extension) => {
808
- void extension.onLeave?.(roomId2);
809
- });
810
- });
811
- callManager.callStateUpdated.on(ctx, (state) => {
812
- extensions.forEach((extension) => {
813
- void extension.onCallStateUpdated?.(state);
814
- });
815
- });
816
- callManager.mediaStateUpdated.on(ctx, (state) => {
817
- extensions.forEach((extension) => {
818
- void extension.onMediaStateUpdated?.(state);
819
- });
820
- });
821
- return () => {
822
- void ctx.dispose();
823
- };
824
- }, [
825
- callManager,
826
- extensions
827
- ]);
828
- const handleJoin = (0, import_react.useCallback)(async () => {
829
- if (!roomId || !channel) {
830
- return;
831
- }
832
- if (callManager.joined) {
833
- await callManager.leave();
834
- }
835
- try {
836
- void joinSound.play();
837
- callManager.setRoomId(roomId);
838
- await callManager.join();
839
- await Promise.all(extensions.map((extension) => extension.onJoin?.({
840
- channel,
841
- roomId
842
- })));
843
- } catch (err) {
844
- import_log.log.catch(err, void 0, {
845
- F: __dxlog_file2,
846
- L: 91,
847
- S: void 0,
848
- C: (f, a) => f(...a)
849
- });
850
- }
851
- }, [
852
- extensions,
853
- channel,
854
- roomId
855
- ]);
856
- const handleLeave = (0, import_react.useCallback)(async () => {
857
- try {
858
- void leaveSound.play();
859
- } catch (err) {
860
- import_log.log.catch(err, void 0, {
861
- F: __dxlog_file2,
862
- L: 103,
863
- S: void 0,
864
- C: (f, a) => f(...a)
865
- });
866
- } finally {
867
- void callManager.turnAudioOff();
868
- void callManager.turnVideoOff();
869
- void callManager.turnScreenshareOff();
870
- void callManager.leave();
871
- }
872
- }, [
873
- extensions,
874
- roomId
875
- ]);
876
- const isJoined = callManager.joined && callManager.roomId === roomId;
877
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
878
- toolbar: !isJoined,
879
- classNames: isJoined && "h-full"
880
- }, isJoined && !isNamed && /* @__PURE__ */ import_react.default.createElement(DisplayNameMissing, null), isJoined && isNamed && /* @__PURE__ */ import_react.default.createElement(Call.Root, null, /* @__PURE__ */ import_react.default.createElement(Call.Grid, {
881
- fullscreen
882
- }), /* @__PURE__ */ import_react.default.createElement(Call.Toolbar, {
883
- channel,
884
- onLeave: handleLeave
885
- })), !isJoined && channel && channel.defaultThread.target && space && /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(ChannelToolbar, {
886
- attendableId: (0, import_echo.fullyQualifiedId)(channel),
887
- role,
888
- onJoinCall: handleJoin
889
- }), /* @__PURE__ */ import_react.default.createElement(import_chunk_E3WBZTTI.ChatContainer_default, {
890
- space,
891
- thread: channel.defaultThread.target
892
- })));
893
- } finally {
894
- _effect.f();
895
- }
896
- };
897
- var ChannelContainer_default = ChannelContainer;
898
- var DisplayNameMissing = () => {
899
- var _effect = (0, import_tracking.useSignals)();
900
- try {
901
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
902
- const client = (0, import_react_client.useClient)();
903
- const [displayName, setDisplayName] = (0, import_react.useState)("");
904
- const handleChange = (0, import_react.useCallback)((event) => setDisplayName(event.target.value), []);
905
- const handleSave = (0, import_react.useCallback)(() => client.halo.updateProfile({
906
- displayName
907
- }), [
908
- client,
909
- displayName
910
- ]);
911
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.ControlGroup, {
912
- classNames: "p-4 place-content-center"
913
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.ControlItemInput, {
914
- title: t("display name label"),
915
- description: t("display name description")
916
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
917
- value: displayName,
918
- onChange: handleChange,
919
- placeholder: t("display name input placeholder"),
920
- classNames: "md:min-is-64"
921
- })), /* @__PURE__ */ import_react.default.createElement(import_react_ui_form.ControlGroupButton, {
922
- disabled: !displayName,
923
- onClick: handleSave
924
- }, t("set display name label")));
925
- } finally {
926
- _effect.f();
927
- }
928
- };
929
- var useChannelToolbarActions = (onJoinCall) => {
930
- const creator = (0, import_react.useMemo)(() => import_rx_react.Rx.make(() => {
931
- return {
932
- nodes: [
933
- (0, import_react_ui_menu.createMenuItemGroup)("root", {
934
- label: [
935
- "channel toolbar title",
936
- {
937
- ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
938
- }
939
- ]
940
- }),
941
- (0, import_react_ui_menu.createMenuAction)("video-call", () => onJoinCall?.(), {
942
- label: [
943
- "start video call label",
944
- {
945
- ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
946
- }
947
- ],
948
- icon: "ph--video-camera--regular",
949
- type: "video-call"
950
- })
951
- ],
952
- edges: [
953
- {
954
- source: "root",
955
- target: "video-call"
956
- }
957
- ]
958
- };
959
- }), []);
960
- return (0, import_react_ui_menu.useMenuActions)(creator);
961
- };
962
- var ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }) => {
963
- var _effect = (0, import_tracking.useSignals)();
964
- try {
965
- const menuProps = useChannelToolbarActions(onJoinCall);
966
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui.ElevationProvider, {
967
- elevation: role === "section" ? "positioned" : "base"
968
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.MenuProvider, {
969
- ...menuProps,
970
- attendableId
971
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, {
972
- classNames
973
- })));
974
- } finally {
975
- _effect.f();
976
- }
977
- };
978
- // Annotate the CommonJS export names for ESM import in node:
979
- 0 && (module.exports = {
980
- Call,
981
- ChannelContainer,
982
- ChannelContainer_default
983
- });
984
- //# sourceMappingURL=chunk-UM36TPCT.cjs.map