@dxos/plugin-thread 0.8.3 → 0.8.4-main.28f8d3d

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 (294) hide show
  1. package/dist/lib/browser/ChannelContainer-O2SFQJU7.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-PVT3DUZJ.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-OY7R7EJP.mjs → app-graph-builder-AF3M7UWN.mjs} +8 -8
  4. package/dist/lib/browser/app-graph-builder-AF3M7UWN.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-APQAZWHT.mjs → call-manager-XRRCAVLI.mjs} +6 -5
  6. package/dist/lib/browser/call-manager-XRRCAVLI.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2CWJBXBH.mjs +21 -0
  8. package/dist/lib/browser/{chunk-R5MDLUPC.mjs → chunk-4APCDRSH.mjs} +3 -3
  9. package/dist/lib/browser/{chunk-R5MDLUPC.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  10. package/dist/lib/browser/{chunk-AEXWNS6Z.mjs → chunk-DW7JD64V.mjs} +14 -5
  11. package/dist/lib/browser/chunk-DW7JD64V.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-IIUTBDVB.mjs → chunk-EV4JWI7L.mjs} +2 -2
  13. package/dist/lib/browser/chunk-FY4ZRD5X.mjs +367 -0
  14. package/dist/lib/browser/chunk-FY4ZRD5X.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-JKQUJOTX.mjs → chunk-GERVMFQW.mjs} +2 -2
  16. package/dist/lib/browser/chunk-J3JO5NWO.mjs +477 -0
  17. package/dist/lib/browser/chunk-J3JO5NWO.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-JGKMMI65.mjs +56 -0
  19. package/dist/lib/browser/chunk-JGKMMI65.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-4H4A264L.mjs → chunk-TUFWPOVS.mjs} +148 -158
  21. package/dist/lib/browser/chunk-TUFWPOVS.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-5P5BH5GE.mjs → chunk-X5PIP5YR.mjs} +67 -6
  23. package/dist/lib/browser/chunk-X5PIP5YR.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-XZKBN3NS.mjs → chunk-ZJ7QBXK6.mjs} +246 -245
  25. package/dist/lib/browser/chunk-ZJ7QBXK6.mjs.map +7 -0
  26. package/dist/lib/browser/index.mjs +36 -42
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/{intent-resolver-FK2MDVDT.mjs → intent-resolver-DCY4P4OX.mjs} +31 -15
  29. package/dist/lib/browser/intent-resolver-DCY4P4OX.mjs.map +7 -0
  30. package/dist/lib/browser/{markdown-TE5SWWNJ.mjs → markdown-WZSXCEZJ.mjs} +8 -8
  31. package/dist/lib/browser/markdown-WZSXCEZJ.mjs.map +7 -0
  32. package/dist/lib/browser/meta.json +1 -1
  33. package/dist/lib/browser/react-root-QXPALOUQ.mjs +28 -0
  34. package/dist/lib/browser/{react-surface-VXUJKSOG.mjs → react-surface-PYAMIADB.mjs} +12 -11
  35. package/dist/lib/browser/react-surface-PYAMIADB.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-RB2RSLXV.mjs → settings-AC6YSASL.mjs} +4 -4
  37. package/dist/lib/browser/{state-RKL5MSDP.mjs → state-2T4KDWBX.mjs} +4 -4
  38. package/dist/lib/browser/{state-RKL5MSDP.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  39. package/dist/lib/browser/types/index.mjs +2 -2
  40. package/dist/lib/node-esm/ChannelContainer-B2ZGAE4P.mjs +17 -0
  41. package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs → ChatContainer-2CT4PJ7I.mjs} +6 -5
  42. package/dist/lib/node-esm/{app-graph-builder-BAHBHYWI.mjs → app-graph-builder-OLSJVCWY.mjs} +8 -8
  43. package/dist/lib/node-esm/app-graph-builder-OLSJVCWY.mjs.map +7 -0
  44. package/dist/lib/node-esm/{call-manager-UUYXLF4T.mjs → call-manager-EI7FXRAU.mjs} +6 -5
  45. package/dist/lib/node-esm/call-manager-EI7FXRAU.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-WXNPD542.mjs → chunk-4TME3BR4.mjs} +147 -158
  47. package/dist/lib/node-esm/chunk-4TME3BR4.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs → chunk-57XR3LEF.mjs} +2 -2
  49. package/dist/lib/node-esm/chunk-6CRHHOST.mjs +23 -0
  50. package/dist/lib/node-esm/chunk-BF4UKS55.mjs +368 -0
  51. package/dist/lib/node-esm/chunk-BF4UKS55.mjs.map +7 -0
  52. package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs → chunk-GRLRWTRU.mjs} +2 -2
  53. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs → chunk-PYTVBN5J.mjs} +3 -3
  54. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  55. package/dist/lib/node-esm/chunk-QBHKLWGR.mjs +58 -0
  56. package/dist/lib/node-esm/chunk-QBHKLWGR.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-O3V45YJP.mjs → chunk-SED3O2XO.mjs} +66 -6
  58. package/dist/lib/node-esm/chunk-SED3O2XO.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-VNG6M2IY.mjs +478 -0
  60. package/dist/lib/node-esm/chunk-VNG6M2IY.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-UJMPYKT3.mjs → chunk-XVKWHTH4.mjs} +14 -5
  62. package/dist/lib/node-esm/chunk-XVKWHTH4.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-2RNIPFDA.mjs → chunk-YIDU3DXK.mjs} +246 -245
  64. package/dist/lib/node-esm/chunk-YIDU3DXK.mjs.map +7 -0
  65. package/dist/lib/node-esm/index.mjs +36 -42
  66. package/dist/lib/node-esm/index.mjs.map +3 -3
  67. package/dist/lib/node-esm/{intent-resolver-BU73VYW3.mjs → intent-resolver-QGTPU6QB.mjs} +31 -15
  68. package/dist/lib/node-esm/intent-resolver-QGTPU6QB.mjs.map +7 -0
  69. package/dist/lib/node-esm/{markdown-HJUWNBLS.mjs → markdown-3MZXUGUA.mjs} +8 -8
  70. package/dist/lib/node-esm/markdown-3MZXUGUA.mjs.map +7 -0
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{react-root-RUXOAQNW.mjs → react-root-7ZFJYVUZ.mjs} +12 -11
  73. package/dist/lib/{browser/react-root-NK3A4VG7.mjs.map → node-esm/react-root-7ZFJYVUZ.mjs.map} +1 -1
  74. package/dist/lib/node-esm/{react-surface-ELXFYKP6.mjs → react-surface-UJFCSFNO.mjs} +12 -11
  75. package/dist/lib/node-esm/react-surface-UJFCSFNO.mjs.map +7 -0
  76. package/dist/lib/node-esm/{settings-EA7DFSM6.mjs → settings-N52O7MLS.mjs} +4 -4
  77. package/dist/lib/node-esm/{state-6AUTNROZ.mjs → state-62TQKQVB.mjs} +4 -4
  78. package/dist/lib/node-esm/{state-6AUTNROZ.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  79. package/dist/lib/node-esm/types/index.mjs +2 -2
  80. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  81. package/dist/types/src/calls/call-manager.d.ts +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.map +1 -1
  85. package/dist/types/src/calls/types.d.ts +1 -1
  86. package/dist/types/src/calls/types.d.ts.map +1 -1
  87. package/dist/types/src/calls/util/calls-service.d.ts +5 -2
  88. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  89. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  90. package/dist/types/src/calls-service.stories.d.ts +22 -0
  91. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  95. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/index.d.ts +1 -1
  97. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  100. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  103. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  104. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  105. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  106. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  107. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  108. package/dist/types/src/components/ChannelContainer.stories.d.ts +2 -2
  109. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/Chat.stories.d.ts +3 -2
  111. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  113. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/Comments.stories.d.ts +1 -1
  115. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/CommentsContainer.d.ts +4 -4
  117. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/CommentsThreadContainer.d.ts +14 -0
  119. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -0
  120. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  121. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  122. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  123. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  126. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +1 -1
  127. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +1 -1
  129. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  131. package/dist/types/src/components/index.d.ts +1 -1
  132. package/dist/types/src/components/index.d.ts.map +1 -1
  133. package/dist/types/src/extensions/threads.d.ts +2 -2
  134. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  135. package/dist/types/src/hooks/index.d.ts +2 -0
  136. package/dist/types/src/hooks/index.d.ts.map +1 -1
  137. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  138. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  139. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  140. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  141. package/dist/types/src/testing/stories.d.ts.map +1 -1
  142. package/dist/types/src/translations.d.ts +74 -194
  143. package/dist/types/src/translations.d.ts.map +1 -1
  144. package/dist/types/src/types/schema.d.ts +53 -22
  145. package/dist/types/src/types/schema.d.ts.map +1 -1
  146. package/dist/types/src/types/types.d.ts +72 -24
  147. package/dist/types/src/types/types.d.ts.map +1 -1
  148. package/dist/types/src/util.d.ts +17 -2
  149. package/dist/types/src/util.d.ts.map +1 -1
  150. package/dist/types/tsconfig.tsbuildinfo +1 -1
  151. package/package.json +49 -48
  152. package/src/ThreadPlugin.tsx +9 -24
  153. package/src/calls/call-manager.ts +7 -3
  154. package/src/calls/call-swarm-synchronizer.ts +1 -1
  155. package/src/calls/media-manager.ts +13 -6
  156. package/src/calls/types.ts +1 -1
  157. package/src/calls/util/calls-service.ts +12 -8
  158. package/src/calls/util/stub-media-streams.ts +5 -8
  159. package/src/calls-service.stories.tsx +216 -0
  160. package/src/capabilities/app-graph-builder.ts +6 -5
  161. package/src/capabilities/call-manager.ts +3 -2
  162. package/src/capabilities/capabilities.ts +2 -2
  163. package/src/capabilities/intent-resolver.ts +26 -7
  164. package/src/capabilities/markdown.ts +4 -3
  165. package/src/capabilities/react-surface.tsx +5 -4
  166. package/src/capabilities/state.ts +2 -1
  167. package/src/components/Call/Call.tsx +4 -3
  168. package/src/components/Call/Toolbar.tsx +5 -5
  169. package/src/components/CallDebugPanel.tsx +3 -3
  170. package/src/components/CallSidebar.tsx +2 -1
  171. package/src/components/ChannelContainer.stories.tsx +8 -7
  172. package/src/components/ChannelContainer.tsx +13 -11
  173. package/src/components/Chat.stories.tsx +7 -6
  174. package/src/components/ChatContainer.tsx +16 -14
  175. package/src/components/Comments.stories.tsx +24 -16
  176. package/src/components/CommentsContainer.tsx +17 -11
  177. package/src/components/{CommentContainer.tsx → CommentsThreadContainer.tsx} +51 -81
  178. package/src/components/Lobby/Lobby.tsx +1 -1
  179. package/src/components/Media/VideoObject.stories.tsx +4 -3
  180. package/src/components/MessageContainer.tsx +31 -46
  181. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  182. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +5 -4
  183. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +5 -4
  184. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  185. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +4 -4
  186. package/src/components/ThreadComplementary.tsx +3 -3
  187. package/src/components/ThreadSettings.tsx +2 -2
  188. package/src/components/command-extension.ts +1 -1
  189. package/src/components/index.ts +1 -1
  190. package/src/components/testing.ts +2 -2
  191. package/src/extensions/threads.ts +6 -6
  192. package/src/hooks/index.ts +2 -0
  193. package/src/hooks/useDebugMode.ts +1 -1
  194. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  195. package/src/hooks/useVideoStreamTrack.tsx +33 -0
  196. package/src/testing/stories.ts +7 -3
  197. package/src/translations.ts +11 -8
  198. package/src/types/types.ts +11 -2
  199. package/src/typings.d.ts +8 -0
  200. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  201. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  202. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
  203. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
  204. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  207. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-PG5CTFKK.mjs +0 -550
  209. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  210. package/dist/lib/browser/chunk-TAFSCSUR.mjs +0 -351
  211. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  212. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  213. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
  214. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
  215. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  216. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
  217. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  218. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  219. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  220. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  221. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  222. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  223. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  224. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  225. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  226. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  227. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  228. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  229. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  230. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  231. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  232. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  233. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  234. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  235. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  236. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  237. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  238. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  239. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  240. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  241. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  242. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  243. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  244. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  245. package/dist/lib/node/index.cjs +0 -310
  246. package/dist/lib/node/index.cjs.map +0 -7
  247. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  248. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  249. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  250. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  251. package/dist/lib/node/meta.json +0 -1
  252. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  253. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  254. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  255. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  256. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  257. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  258. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  259. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  260. package/dist/lib/node/types/index.cjs +0 -38
  261. package/dist/lib/node/types/index.cjs.map +0 -7
  262. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  263. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
  264. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  268. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs +0 -352
  269. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs +0 -551
  272. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  274. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
  275. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
  276. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
  277. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  278. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  279. package/dist/types/src/peers.stories.d.ts +0 -11
  280. package/dist/types/src/peers.stories.d.ts.map +0 -1
  281. package/src/peers.stories.tsx +0 -189
  282. /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → ChannelContainer-O2SFQJU7.mjs.map} +0 -0
  283. /package/dist/lib/browser/{ChatContainer-RSOKYAMK.mjs.map → ChatContainer-PVT3DUZJ.mjs.map} +0 -0
  284. /package/dist/lib/browser/{chunk-6NBVNXTM.mjs.map → chunk-2CWJBXBH.mjs.map} +0 -0
  285. /package/dist/lib/browser/{chunk-IIUTBDVB.mjs.map → chunk-EV4JWI7L.mjs.map} +0 -0
  286. /package/dist/lib/browser/{chunk-JKQUJOTX.mjs.map → chunk-GERVMFQW.mjs.map} +0 -0
  287. /package/dist/lib/{node-esm/react-root-RUXOAQNW.mjs.map → browser/react-root-QXPALOUQ.mjs.map} +0 -0
  288. /package/dist/lib/browser/{settings-RB2RSLXV.mjs.map → settings-AC6YSASL.mjs.map} +0 -0
  289. /package/dist/lib/node-esm/{ChannelContainer-O4QJII2P.mjs.map → ChannelContainer-B2ZGAE4P.mjs.map} +0 -0
  290. /package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs.map → ChatContainer-2CT4PJ7I.mjs.map} +0 -0
  291. /package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs.map → chunk-57XR3LEF.mjs.map} +0 -0
  292. /package/dist/lib/node-esm/{chunk-O63QJPQX.mjs.map → chunk-6CRHHOST.mjs.map} +0 -0
  293. /package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs.map → chunk-GRLRWTRU.mjs.map} +0 -0
  294. /package/dist/lib/node-esm/{settings-EA7DFSM6.mjs.map → settings-N52O7MLS.mjs.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ChannelContainer.tsx", "../../../src/components/Call/Call.tsx", "../../../src/components/Call/Toolbar.tsx", "../../../src/components/Media/AudioStream.tsx", "../../../src/components/Media/VideoObject.tsx", "../../../src/components/Participant/Participant.tsx", "../../../src/components/ResponsiveGrid/ResponsiveContainer.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGrid.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGridItem.tsx", "../../../src/components/Participant/ParticipantGrid.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useCallback, useEffect, useMemo, useState, type ChangeEvent } from 'react';\n\nimport { useCapabilities, useCapability } from '@dxos/app-framework';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, Input, ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlGroupButton } from '@dxos/react-ui-form';\nimport { ToolbarMenu, MenuProvider, createMenuAction, useMenuActions, createMenuItemGroup } from '@dxos/react-ui-menu';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { Call } from './Call';\nimport ChatContainer from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ChannelType } from '../types';\n\nexport type ChannelContainerProps = {\n channel?: ChannelType;\n roomId?: string;\n role?: string;\n fullscreen?: boolean;\n};\n\n/**\n * Renders a call when active, otherwise renders the channel chat.\n */\nexport const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {\n const space = getSpace(channel);\n const callManager = useCapability(ThreadCapabilities.CallManager);\n const roomId = channel ? fullyQualifiedId(channel) : _roomId;\n const identity = useIdentity();\n const isNamed = !!identity?.profile?.displayName;\n const joinSound = useSoundEffect('JoinCall');\n const leaveSound = useSoundEffect('LeaveCall');\n\n const extensions = useCapabilities(ThreadCapabilities.CallExtension);\n useEffect(() => {\n const ctx = new Context();\n callManager.left.on(ctx, (roomId) => {\n extensions.forEach((extension) => {\n void extension.onLeave?.(roomId);\n });\n });\n\n callManager.callStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onCallStateUpdated?.(state);\n });\n });\n\n callManager.mediaStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onMediaStateUpdated?.(state);\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [callManager, extensions]);\n\n /**\n * Join the call.\n */\n // TODO(wittjosiah): Show preview before joining?\n const handleJoin = useCallback(async () => {\n if (!roomId || !channel) {\n return;\n }\n\n if (callManager.joined) {\n await callManager.leave();\n }\n\n try {\n void joinSound.play();\n callManager.setRoomId(roomId);\n await callManager.join();\n await Promise.all(extensions.map((extension) => extension.onJoin?.({ channel, roomId })));\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n }\n }, [extensions, channel, roomId]);\n\n /**\n * Leave the call.\n */\n const handleLeave = useCallback(async () => {\n try {\n void leaveSound.play();\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n } finally {\n void callManager.turnAudioOff();\n void callManager.turnVideoOff();\n void callManager.turnScreenshareOff();\n void callManager.leave();\n }\n }, [extensions, roomId]);\n\n const isJoined = callManager.joined && callManager.roomId === roomId;\n\n return (\n <StackItem.Content toolbar={!isJoined} classNames={isJoined && 'h-full'}>\n {isJoined && !isNamed && <DisplayNameMissing />}\n {isJoined && isNamed && (\n <Call.Root>\n <Call.Grid fullscreen={fullscreen} />\n <Call.Toolbar channel={channel} onLeave={handleLeave} />\n </Call.Root>\n )}\n {!isJoined && channel && channel.defaultThread.target && space && (\n <>\n <ChannelToolbar attendableId={fullyQualifiedId(channel)} role={role} onJoinCall={handleJoin} />\n <ChatContainer space={space} thread={channel.defaultThread.target} />\n </>\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n\nconst DisplayNameMissing = () => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const client = useClient();\n const [displayName, setDisplayName] = useState('');\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value), []);\n const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);\n\n return (\n <ControlGroup classNames='p-4 place-content-center'>\n <ControlItemInput title={t('display name label')} description={t('display name description')}>\n <Input.TextInput\n value={displayName}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='md:min-is-64'\n />\n </ControlItemInput>\n <ControlGroupButton disabled={!displayName} onClick={handleSave}>\n {t('set display name label')}\n </ControlGroupButton>\n </ControlGroup>\n );\n};\n\nconst useChannelToolbarActions = (onJoinCall?: () => void) => {\n const creator = useMemo(\n () =>\n Rx.make(() => {\n return {\n nodes: [\n createMenuItemGroup('root', {\n label: ['channel toolbar title', { ns: THREAD_PLUGIN }],\n }),\n createMenuAction('video-call', () => onJoinCall?.(), {\n label: ['start video call label', { ns: THREAD_PLUGIN }],\n icon: 'ph--video-camera--regular',\n type: 'video-call',\n }),\n ],\n edges: [{ source: 'root', target: 'video-call' }],\n };\n }),\n [],\n );\n\n return useMenuActions(creator);\n};\n\ntype ChannelToolbarProps = ThemedClassName<{\n attendableId?: string;\n role?: string;\n onJoinCall?: () => void;\n}>;\n\nconst ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }: ChannelToolbarProps) => {\n const menuProps = useChannelToolbarActions(onJoinCall);\n\n return (\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menuProps} attendableId={attendableId}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type FC } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Toolbar, type ToolbarProps } from './Toolbar';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { useDebugMode } from '../../hooks';\nimport { AudioStream } from '../Media';\nimport { ParticipantGrid } from '../Participant';\n\n//\n// Root\n//\n\ntype CallRootProps = PropsWithChildren<ThemedClassName>;\n\nconst CallRoot: FC<CallRootProps> = ({ children }) => {\n return <div className='relative flex flex-col grow overflow-hidden'>{children}</div>;\n};\n\nCallRoot.displayName = 'CallRoot';\n\n//\n// Audio\n//\n\ntype CallAudioProps = {};\n\nconst CallAudio: FC<CallAudioProps> = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return <AudioStream tracks={call.pulledAudioTracks} />;\n};\n\nCallAudio.displayName = 'CallAudio';\n\n//\n// Room\n//\n\ntype CallGridProps = {\n fullscreen?: boolean;\n};\n\nconst CallGrid: FC<CallGridProps> = ({ fullscreen }) => {\n const debug = useDebugMode();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return (\n <div className='grid grow p-4 dark:bg-neutral-900'>\n <ParticipantGrid self={call.self} users={call.users} debug={debug} fullscreen={fullscreen} />\n </div>\n );\n};\n\nCallGrid.displayName = 'CallGrid';\n\n//\n// Toolbar\n//\n\ntype CallToolbarProps = Pick<ToolbarProps, 'channel' | 'onLeave'>;\n\nconst CallToolbar: FC<CallToolbarProps> = (props) => {\n return (\n <div className='absolute bottom-0 left-0 right-0 flex justify-center'>\n <Toolbar isInRoom {...props} />\n </div>\n );\n};\n\nCallToolbar.displayName = 'CallToolbar';\n\n//\n// Export\n//\n\nexport const Call = {\n Root: CallRoot,\n Grid: CallGrid,\n Audio: CallAudio,\n Toolbar: CallToolbar,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useAppGraph, useCapability } from '@dxos/app-framework';\nimport { useNode, useActions } from '@dxos/plugin-graph';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Icon,\n IconButton,\n type IconButtonProps,\n type ThemedClassName,\n Toolbar as NativeToolbar,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { ThreadCapabilities } from '../../capabilities';\nimport { THREAD_PLUGIN } from '../../meta';\nimport { type ChannelType } from '../../types';\n\nexport type ToolbarProps = ThemedClassName<{\n channel?: ChannelType;\n participants?: number;\n autoHideControls?: boolean;\n isInRoom?: boolean;\n onJoin?: () => void;\n onLeave?: () => void;\n}>;\n\n// TODO(wittjosiah): Use ToolbarMenu.\nexport const Toolbar = ({\n classNames,\n channel,\n participants,\n autoHideControls = true,\n onJoin,\n onLeave,\n}: ToolbarProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const { graph } = useAppGraph();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n // Channel app graph node.\n const node = useNode(graph, channel && fullyQualifiedId(channel));\n const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === 'toolbar');\n\n // Screen sharing.\n const isScreensharing = call.media.screenshareTrack !== undefined;\n const canSharescreen =\n typeof navigator.mediaDevices !== 'undefined' && navigator.mediaDevices.getDisplayMedia !== undefined;\n\n // TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.\n return (\n <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>\n <NativeToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>\n <ToggleButton\n active={call.media.audioEnabled}\n state={{\n on: {\n icon: 'ph--microphone--regular',\n label: t('mic off'),\n onClick: () => call.turnAudioOff(),\n classNames: 'bg-callActive',\n },\n off: {\n icon: 'ph--microphone-slash--duotone',\n label: t('mic on'),\n onClick: () => call.turnAudioOn(),\n classNames: [call.joined && 'bg-callAlert'],\n },\n }}\n />\n <ToggleButton\n active={call.media.videoEnabled}\n state={{\n on: {\n icon: 'ph--video-camera--regular',\n label: t('camera off'),\n onClick: () => call.turnVideoOff(),\n },\n off: {\n icon: 'ph--video-camera-slash--duotone',\n label: t('camera on'),\n onClick: () => call.turnVideoOn(),\n },\n }}\n />\n\n {(participants !== undefined && (\n <div className='flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued'>\n <Icon icon='ph--users--regular' size={4} />\n <div>{participants}</div>\n </div>\n )) || <NativeToolbar.Separator variant='gap' />}\n\n {call.joined && (\n <>\n <ToggleButton\n disabled={!canSharescreen}\n active={isScreensharing}\n state={{\n on: {\n icon: 'ph--monitor--regular',\n label: t('screenshare off'),\n onClick: () => call.turnScreenshareOff(),\n },\n off: {\n icon: 'ph--monitor-arrow-up--duotone',\n label: t('screenshare on'),\n onClick: () => call.turnScreenshareOn(),\n },\n }}\n />\n\n {/* Companion actions. */}\n {actions.map((action) => (\n <IconButton\n key={action.id}\n {...defaultButtonProps}\n icon={action.properties.icon}\n label={toLocalizedString(action.properties.label, t)}\n classNames={action.properties.classNames}\n onClick={() => action.data({ node })}\n />\n ))}\n\n <ToggleButton\n active={call.raisedHand}\n state={{\n on: {\n icon: 'ph--hand-waving--regular',\n label: t('lower hand'),\n onClick: () => call.setRaisedHand(false),\n classNames: [call.joined && 'bg-callAlert'],\n },\n off: {\n icon: 'ph--hand-palm--duotone',\n label: t('raise hand'),\n onClick: () => call.setRaisedHand(true),\n },\n }}\n />\n </>\n )}\n {call.joined ? (\n <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />\n ) : (\n <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />\n )}\n </NativeToolbar.Root>\n </div>\n );\n};\n\nToolbar.displayName = 'MeetingToolbar';\n\ntype ToolbarButtonProps = Pick<IconButtonProps, 'disabled'> & {\n active?: boolean;\n state: {\n on: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n off: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n };\n};\n\nconst defaultButtonProps: Partial<IconButtonProps> = {\n size: 5,\n iconOnly: true,\n};\n\nconst ToggleButton = ({ active, state }: ToolbarButtonProps) => (\n <IconButton\n {...defaultButtonProps}\n classNames={[active ? state.on.classNames ?? 'bg-callActive' : state.off.classNames]}\n icon={active ? state.on.icon : state.off.icon}\n label={active ? state.on.label : state.off.label}\n onClick={active ? state.on.onClick : state.off.onClick}\n />\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, useEffect, useRef } from 'react';\n\nexport type AudioStreamProps = {\n tracks: MediaStreamTrack[];\n};\n\nexport const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {\n const mediaStreamRef = useRef(new MediaStream());\n const ref = useRef<HTMLAudioElement>(null);\n\n useEffect(() => {\n const audio = ref.current;\n if (!audio) {\n return;\n }\n\n const mediaStream = mediaStreamRef.current;\n audio.srcObject = mediaStream;\n }, []);\n\n const resetSrcObject = () => {\n const audio = ref.current;\n const mediaStream = mediaStreamRef.current;\n if (!audio || !mediaStream) {\n return;\n }\n\n // Need to set srcObject again in Chrome and call play() again for Safari\n // https://www.youtube.com/live/Tkx3OGrwVk8?si=K--P_AzNnAGrjraV&t=2533\n // Calling play() this way to make Chrome happy otherwise it throws an error.\n audio.addEventListener('canplay', () => audio.play(), { once: true });\n audio.srcObject = mediaStream;\n };\n\n return (\n <>\n <audio ref={ref} autoPlay />\n {tracks.map((track) => (\n <AudioTrack key={track.id} track={track} mediaStream={mediaStreamRef.current} resetSrcObject={resetSrcObject} />\n ))}\n </>\n );\n};\n\ntype AudioTrackProps = {\n track: MediaStreamTrack;\n mediaStream: MediaStream;\n resetSrcObject: () => void;\n};\n\nconst AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {\n useEffect(() => {\n const currentTrack = track;\n mediaStream.addTrack(currentTrack);\n resetSrcObject();\n return () => {\n mediaStream.removeTrack(currentTrack);\n resetSrcObject();\n };\n }, [track, mediaStream]);\n\n return null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &\n ThemedClassName<{\n videoStream?: MediaStream;\n flip?: boolean;\n // TODO(burdon): If screenshare then contain.\n contain?: boolean;\n }>;\n\nexport const VideoObject = memo(\n forwardRef<HTMLVideoElement, VideoObjectProps>(({ videoStream, classNames, flip, contain, ...rest }, ref) => {\n const internalRef = useRef<HTMLVideoElement | null>(null);\n\n useEffect(() => {\n const video = internalRef.current;\n if (video && videoStream) {\n video.srcObject = videoStream;\n video.setAttribute('autoplay', 'true');\n video.setAttribute('playsinline', 'true');\n }\n }, [videoStream, internalRef.current]);\n\n // NOTE: The video element typically has a max size of 1280x720.\n return (\n <video\n className={mx(\n 'w-full aspect-video',\n flip && 'scale-x-[-1]',\n contain ? 'object-contain' : 'object-cover',\n classNames,\n )}\n ref={(v) => {\n internalRef.current = v;\n if (ref === null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(v);\n } else {\n ref.current = v;\n }\n }}\n {...rest}\n />\n );\n }),\n);\n\nVideoObject.displayName = 'VideoObject';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { memo, useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\n\nimport { type EncodedTrackName, type UserState } from '../../calls';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { VideoObject } from '../Media';\nimport { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';\n\nexport const SCREENSHARE_SUFFIX = '_screenshare';\n\nexport const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {\n const call = useCapability(ThreadCapabilities.CallManager);\n const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);\n const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);\n const pulledVideoStream = call.getVideoStream(\n isScreenshare || !isSelf ? (user.tracks?.video as EncodedTrackName) : undefined,\n );\n\n const videoStream = useMemo<MediaStream | undefined>(() => {\n if (isSelf && !isScreenshare) {\n return call.media.videoStream;\n } else if (isSelf && isScreenshare) {\n return call.media.screenshareVideoStream;\n } else if (!isSelf) {\n return pulledVideoStream;\n }\n }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);\n\n return (\n <ResponsiveGridItem\n {...props}\n item={user}\n name={user.name}\n self={isSelf}\n screenshare={!!call.media.screenshareVideoStream}\n video={call.media.videoEnabled}\n mute={user ? !user.tracks?.audioEnabled : false}\n wave={user.raisedHand}\n speaking={user.speaking}\n debug={debug}\n >\n <VideoObject\n videoStream={videoStream}\n flip={isSelf && !isScreenshare}\n contain={!!isScreenshare}\n classNames='rounded-md'\n />\n </ResponsiveGridItem>\n );\n});\n\nParticipant.displayName = 'Participant';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * A container component that maintains the child's aspect ratio while centering its content.\n * The container will scale to fit within its parent's bounds while preserving the aspect ratio.\n *\n * @example\n * <ResponsiveContainer>\n * <VideoObject />\n * </ResponsiveContainer>\n */\nexport const ResponsiveContainer = ({ children }: PropsWithChildren) => {\n return (\n // Outer container that takes full size of parent.\n <div role='none' className='relative flex w-full h-full'>\n {/* Absolute positioning layer for centering content. */}\n <div role='none' className='absolute inset-0 flex justify-center items-center'>\n {/* Content container that maintains given aspect ratio and proper scaling. */}\n <div role='none' className={mx('max-h-full max-w-full w-auto h-auto aspect-video')}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentType, type FC, useLayoutEffect, useState, useEffect, useMemo, useCallback } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { type Size } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ResponsiveContainer } from './ResponsiveContainer';\nimport { type ResponsiveGridItemProps } from './ResponsiveGridItem';\n\nconst ASPECT_RATIO = 16 / 9;\nconst MIN_GALLERY_HEIGHT = 250;\n\nconst DEFAULT_GAP = 8;\n\nconst maxImageSize = 'w-[2560px] h-[1440px]';\n\n/**\n * Props for the ResponsiveGrid component.\n */\nexport type ResponsiveGridProps<T extends object = any> = ThemedClassName<{\n /** Cell component. */\n Cell: ComponentType<ResponsiveGridItemProps<T>>;\n\n /** Space between grid items in pixels. */\n gap?: number;\n\n /** Function to get the ID of an item. */\n getId?: (item: T) => string;\n\n /** Array of items to display in the grid. */\n items: T[];\n\n /** ID of the pinned item. */\n pinned?: string;\n\n /** Whether to hide the gallery (unpinned items) when an item is pinned. */\n autoHideGallery?: boolean;\n\n /** Whether the divider is resizable. */\n resizable?: boolean;\n\n /** Debug mode. */\n debug?: boolean;\n\n /** Callback when the pinned item changes. */\n onPinnedChange?: (pinned: string | undefined) => void;\n}>;\n\nconst defaultGetId: ResponsiveGridProps<any>['getId'] = (item: any) => item.id;\n\n/**\n * A responsive grid component that automatically adjusts its layout to optimize space usage.\n * Maintains aspect ratio of items while ensuring uniform gaps between them.\n */\nexport const ResponsiveGrid = <T extends object = any>({\n classNames,\n Cell,\n gap = DEFAULT_GAP,\n getId = defaultGetId,\n items,\n pinned,\n autoHideGallery = false,\n debug,\n onPinnedChange,\n}: ResponsiveGridProps<T>) => {\n const {\n width: containerWidth = 0,\n height: containerHeight = 0,\n ref: containerRef,\n } = useResizeDetector<HTMLDivElement>({ refreshRate: 100 });\n const [dividerHeight, setDividerHeight] = useState<Size>(0);\n useEffect(() => {\n if (containerWidth && containerHeight) {\n const { height } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);\n setDividerHeight(Math.min(height, containerHeight - MIN_GALLERY_HEIGHT));\n }\n }, [containerWidth, containerHeight]);\n\n const pinnedItem = useMemo(() => items.find((item) => getId(item) === pinned), [items, pinned]);\n const mainItems = useMemo(() => items.filter((item) => getId(item) !== pinned), [items, pinned]);\n const hideGallery = autoHideGallery && pinnedItem !== undefined;\n\n //\n // Recalculate optimal layout when container size or items change.\n //\n const [{ time, columns, cellWidth }, setLayout] = useState<Layout>({ time: 0, columns: 0, cellWidth: 0 });\n const { width = 0, height = 0, ref: gridContainerRef } = useResizeDetector<HTMLDivElement>({ refreshRate: 200 });\n useEffect(() => {\n if (containerHeight && width && height) {\n const layout = calculateLayout(width, height, mainItems.length, gap);\n setLayout({ time: Date.now(), ...layout });\n }\n }, [containerHeight, width, height, mainItems.length, gap, pinned]);\n\n //\n // We use the browser to layout invisible divs and then calculate the absolute position of these items,\n // which are animated into position.\n //\n const [bounds, setBounds] = useState<[T, DOMRectBounds][]>([]);\n useLayoutEffect(() => {\n if ((!hideGallery && !gridContainerRef.current) || !containerHeight) {\n return;\n }\n\n // TODO(burdon): Consider directly setting bounds on DOM elementsinstead of state update?\n const t = setTimeout(() => {\n setBounds(\n items\n .filter((item) => !hideGallery || item === pinnedItem)\n .map((item) => {\n invariant(containerRef.current);\n const el = containerRef.current.querySelector(`[data-grid-item=\"${getId(item)}\"]`);\n if (!el) {\n return null;\n }\n\n const bounds = getRelativeBounds(containerRef.current, el as HTMLElement);\n return [item, bounds];\n })\n .filter((item): item is [T, DOMRectBounds] => item !== null),\n );\n });\n\n return () => clearTimeout(t);\n }, [containerHeight, items, pinnedItem, hideGallery, time]);\n\n const handleClick = useCallback(\n (item: T) => onPinnedChange?.(getId(item) === pinned ? undefined : getId(item)),\n [pinned, onPinnedChange],\n );\n\n return (\n <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>\n {/* Placeholder elements to calculate layout. */}\n <div className='absolute inset-0 flex flex-col grow gap-2'>\n {/* Pinned item. */}\n {pinnedItem && (\n <div\n className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}\n style={hideGallery ? {} : { height: dividerHeight }}\n >\n <SoloItem id={getId(pinnedItem)} debug={debug} />\n </div>\n )}\n\n {/* Gallery. */}\n {!hideGallery && (\n <div\n ref={gridContainerRef}\n className='flex grow-[1] overflow-hidden justify-center items-center'\n style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}\n >\n {mainItems.length === 1 && (\n <div style={{ width: cellWidth }} className='flex h-full'>\n <SoloItem id={getId(mainItems[0])} debug={debug} />\n </div>\n )}\n\n {mainItems.length > 1 && columns > 0 && (\n <div\n role='grid'\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,\n gap: `${gap}px`,\n }}\n >\n {mainItems.map((item) => (\n <div\n key={getId(item)}\n {...{ 'data-grid-item': getId(item) }}\n className={mx(\n 'aspect-video max-h-full max-w-full w-auto h-auto',\n debug && 'border border-primary-500',\n )}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Absolutely positioned items. */}\n <div className={mx(debug && 'opacity-10')}>\n {bounds.map(([item, bounds]) => (\n <Cell\n key={getId(item)}\n classNames='absolute transition-all duration-500'\n item={item}\n style={bounds}\n pinned={getId(item) === pinned}\n onClick={items.length > 1 ? handleClick : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ debug, id }) => {\n return (\n <ResponsiveContainer>\n <div\n {...{ 'data-grid-item': id }}\n className={mx('aspect-video overflow-hidden', debug && 'z-20 border-2 border-primary-500')}\n >\n {/* Maximum size placeholder image forces aspect ratio. */}\n <img alt='placeholder video' className={mx('opacity-0', maxImageSize)} />\n </div>\n </ResponsiveContainer>\n );\n};\n\ntype DOMRectBounds = Pick<DOMRect, 'top' | 'left' | 'width' | 'height'>;\n\n// TODO(burdon): Reconcile with react-ui-gameboard.\nconst getRelativeBounds = (container: HTMLElement, el: HTMLElement): DOMRectBounds => {\n const containerRect = container.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left,\n width: elementRect.width,\n height: elementRect.height,\n };\n};\n\ntype Layout = {\n time?: number;\n columns: number;\n cellWidth: number;\n};\n\n/**\n * Calculates the optimal number of columns for a grid layout that minimizes wasted space.\n * @param containerWidth - Width of the container in pixels.\n * @param containerHeight - Height of the container in pixels.\n * @param count - Total number of items to display.\n * @param gap - Space between items in pixels.\n * @param aspectRatio - Desired aspect ratio of items (width/height).\n * @returns The optimal number of columns.\n */\nconst calculateLayout = (\n containerWidth: number,\n containerHeight: number,\n count: number,\n gap: number,\n aspectRatio = ASPECT_RATIO,\n): Layout => {\n if (count === 0) {\n return { columns: 1, cellWidth: 1 };\n }\n\n let minWastedSpace = Infinity;\n let bestColumns = 1;\n let cellWidth = 0;\n\n // Try different rows counts to find the optimal layout that minimizes wasted space.\n for (let rows = 1; rows <= count; rows++) {\n const cols = Math.ceil(count / rows);\n\n // Calculate available space accounting for gaps.\n const { width: itemWidth, height: itemHeight } = fitItemsToGrid(\n containerWidth,\n containerHeight,\n cols,\n rows,\n aspectRatio,\n gap,\n );\n\n // Calculate total wasted space for this configuration.\n const usedWidth = itemWidth * cols + gap * cols - 1;\n const usedHeight = itemHeight * rows + gap * rows - 1;\n\n // Determine if optimal.\n const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;\n if (wastedSpace < minWastedSpace) {\n minWastedSpace = wastedSpace;\n bestColumns = cols;\n cellWidth = itemWidth;\n }\n }\n\n return { columns: bestColumns, cellWidth };\n};\n\n/**\n * Returns the size of the largest rectangle with the given aspect ration that fits within the grid.\n */\nconst fitItemsToGrid = (\n outerWidth: number,\n outerHeight: number,\n numCols: number,\n numRows: number,\n aspectRatio: number,\n gap: number,\n): { width: number; height: number } => {\n // Calculate available space accounting for gaps.\n const availableWidth = outerWidth - gap * (numCols - 1);\n const availableHeight = outerHeight - gap * (numRows - 1);\n\n // Calculate max dimensions.\n const maxCellWidth = availableWidth / numCols;\n const maxCellHeight = availableHeight / numRows;\n\n // Use fitAspectRatio to get dimensions that fit within max cell size while maintaining the desired aspect ratio\n return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);\n};\n\n/**\n * Returns the size of the largest rectangle the given aspect ratio that fits within the outer rectangle.\n */\nconst fitAspectRatio = (\n outerWidth: number,\n outerHeight: number,\n aspectRatio: number,\n): { width: number; height: number } => {\n if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {\n return { width: 0, height: 0 };\n }\n\n // First try fitting to width.\n let width = outerWidth;\n let height = width / aspectRatio;\n\n // If too tall, fit to height instead.\n if (height > outerHeight) {\n height = outerHeight;\n width = height * aspectRatio;\n }\n\n return { width, height };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState, type CSSProperties, type PropsWithChildren } from 'react';\n\nimport { Icon, IconButton, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { Waveform } from '@dxos/react-ui-sfx';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { THREAD_PLUGIN } from '../../meta';\n\nexport type ResponsiveGridItemProps<T extends object = any> = PropsWithChildren<\n ThemedClassName<{\n item: T;\n style?: CSSProperties;\n pinned?: boolean;\n name?: string;\n self?: boolean;\n screenshare?: boolean;\n video?: boolean;\n mute?: boolean;\n wave?: boolean;\n speaking?: boolean;\n debug?: boolean;\n onClick?: (item: T) => void;\n }>\n>;\n\n/**\n * Cell container.\n */\nexport const ResponsiveGridItem = <T extends object = any>({\n children,\n classNames,\n item,\n style,\n name,\n self,\n pinned,\n screenshare,\n video,\n mute,\n wave,\n speaking,\n onClick,\n}: ResponsiveGridItemProps<T>) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const iconProps: Record<string, { icon: string; label: string; classNames?: string }> = {\n wave: {\n icon: 'ph--hand-waving--duotone',\n label: t('icon wave'),\n classNames: 'animate-pulse bg-orange-500',\n },\n mute: {\n icon: 'ph--microphone-slash--regular',\n label: t('icon muted'),\n },\n };\n\n const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : undefined;\n\n // Debounce speaking indicator.\n const [speakingIndicator, setSpeakingIndicator] = useState(speaking);\n useEffect(() => {\n if (speaking) {\n setSpeakingIndicator(true);\n } else {\n const timeout = setTimeout(() => {\n setSpeakingIndicator(false);\n }, 1_000);\n return () => clearTimeout(timeout);\n }\n }, [speaking]);\n\n return (\n <div\n className={mx(\n 'relative w-full h-full group',\n 'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',\n speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',\n classNames,\n )}\n style={style}\n >\n {children}\n\n {/* Action. */}\n {onClick && (\n <div className='z-10 absolute top-1 right-1 flex'>\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}\n iconOnly\n icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}\n size={pinned ? 5 : 4}\n label={pinned ? t('icon unpin') : t('icon pin')}\n onClick={() => onClick?.(item)}\n />\n </div>\n )}\n\n {/* Name. */}\n {name && (\n <div className='z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center'>\n {/* TODO(burdon): Replace with avatar for everyone. */}\n {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}\n {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}\n <div\n className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}\n >\n {name}\n </div>\n </div>\n )}\n\n {/* Activity. */}\n <div className='z-10 absolute bottom-1 left-1 flex'>\n {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||\n (props && (\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}\n icon={props?.icon}\n label={props?.label}\n size={pinned ? 5 : 4}\n iconOnly\n />\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Participant, SCREENSHARE_SUFFIX } from './Participant';\nimport { type UserState } from '../../calls';\nimport { ResponsiveGrid } from '../ResponsiveGrid';\n\nconst getId = (user: UserState): string => user.id!;\n\nexport type ParticipantGridProps = ThemedClassName<{\n self: UserState;\n users: UserState[];\n fullscreen?: boolean;\n debug?: boolean;\n}>;\n\nexport const ParticipantGrid = ({ classNames, self, users, fullscreen, debug }: ParticipantGridProps) => {\n const [pinned, setPinned] = useState<string | undefined>();\n\n const allUsers = useMemo(() => {\n const allUsers: (UserState & { isSelf?: boolean })[] = [];\n users.forEach((user) => {\n if (!user.joined) {\n return;\n }\n\n allUsers.push({ ...user, isSelf: user.id === self.id });\n if (user.tracks?.screenshareEnabled) {\n const screenshare: UserState = {\n ...user,\n id: user.id + SCREENSHARE_SUFFIX,\n tracks: {\n ...user.tracks,\n video: user.tracks.screenshare,\n videoEnabled: user.tracks.screenshareEnabled,\n } as any, // TODO(burdon): Remove cast.\n };\n\n allUsers.push(screenshare);\n }\n });\n\n return allUsers;\n }, [self, users]);\n\n useEffect(() => {\n if (pinned) {\n // Check expanded user is still in call.\n if (!allUsers.find((user) => user.id === pinned)) {\n setPinned(undefined);\n }\n }\n }, [pinned, allUsers]);\n\n // TODO(burdon): Put self last.\n const sortedUsers: UserState[] = allUsers.sort((a, b) => {\n if (a.isSelf) {\n return 1;\n } else if (b.isSelf) {\n return -1;\n } else if (a.tracks?.screenshareEnabled) {\n return -1;\n } else if (b.tracks?.screenshareEnabled) {\n return 1;\n } else {\n return 0;\n }\n });\n\n // TODO(burdon): Show ghost view of user for a second before leaving.\n return (\n <ResponsiveGrid<UserState>\n classNames={classNames}\n Cell={Participant}\n debug={debug}\n getId={getId}\n items={sortedUsers}\n pinned={pinned}\n autoHideGallery={fullscreen}\n onPinnedChange={setPinned}\n />\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_app_framework", "import_echo", "import_react_ui", "import_react_ui_theme", "import_react_ui_sfx", "Toolbar", "classNames", "channel", "participants", "autoHideControls", "onJoin", "onLeave", "t", "useTranslation", "THREAD_PLUGIN", "graph", "useAppGraph", "call", "useCapability", "ThreadCapabilities", "CallManager", "node", "useNode", "fullyQualifiedId", "actions", "useActions", "id", "filter", "action", "properties", "disposition", "isScreensharing", "media", "screenshareTrack", "undefined", "canSharescreen", "navigator", "mediaDevices", "getDisplayMedia", "React", "div", "className", "mx", "groupHoverControlItemWithTransition", "NativeToolbar", "Root", "ToggleButton", "active", "audioEnabled", "state", "on", "icon", "label", "onClick", "turnAudioOff", "off", "turnAudioOn", "joined", "videoEnabled", "turnVideoOff", "turnVideoOn", "Icon", "size", "Separator", "variant", "disabled", "turnScreenshareOff", "turnScreenshareOn", "map", "IconButton", "key", "defaultButtonProps", "toLocalizedString", "data", "raisedHand", "setRaisedHand", "displayName", "iconOnly", "AudioStream", "tracks", "mediaStreamRef", "useRef", "MediaStream", "ref", "useEffect", "audio", "current", "mediaStream", "srcObject", "resetSrcObject", "addEventListener", "play", "once", "autoPlay", "track", "AudioTrack", "currentTrack", "addTrack", "removeTrack", "VideoObject", "memo", "forwardRef", "videoStream", "flip", "contain", "rest", "internalRef", "video", "setAttribute", "v", "ResponsiveContainer", "children", "role", "ASPECT_RATIO", "MIN_GALLERY_HEIGHT", "DEFAULT_GAP", "maxImageSize", "defaultGetId", "item", "ResponsiveGrid", "Cell", "gap", "getId", "items", "pinned", "autoHideGallery", "debug", "onPinnedChange", "width", "containerWidth", "height", "containerHeight", "containerRef", "useResizeDetector", "refreshRate", "dividerHeight", "setDividerHeight", "useState", "fitAspectRatio", "Math", "min", "pinnedItem", "useMemo", "find", "mainItems", "hideGallery", "time", "columns", "cellWidth", "setLayout", "gridContainerRef", "layout", "calculateLayout", "length", "Date", "now", "bounds", "setBounds", "useLayoutEffect", "setTimeout", "invariant", "el", "querySelector", "getRelativeBounds", "clearTimeout", "handleClick", "useCallback", "style", "SoloItem", "minHeight", "display", "gridTemplateColumns", "img", "alt", "container", "containerRect", "getBoundingClientRect", "elementRect", "top", "left", "count", "aspectRatio", "minWastedSpace", "Infinity", "bestColumns", "rows", "cols", "ceil", "itemWidth", "itemHeight", "fitItemsToGrid", "usedWidth", "usedHeight", "wastedSpace", "outerWidth", "outerHeight", "numCols", "numRows", "availableWidth", "availableHeight", "maxCellWidth", "maxCellHeight", "ResponsiveGridItem", "name", "self", "screenshare", "mute", "wave", "speaking", "iconProps", "props", "speakingIndicator", "setSpeakingIndicator", "timeout", "Waveform", "SCREENSHARE_SUFFIX", "Participant", "user", "isSelf", "startsWith", "isScreenshare", "endsWith", "pulledVideoStream", "getVideoStream", "screenshareVideoStream", "ParticipantGrid", "users", "fullscreen", "setPinned", "allUsers", "forEach", "push", "screenshareEnabled", "sortedUsers", "sort", "a", "b", "CallRoot", "CallAudio", "pulledAudioTracks", "CallGrid", "useDebugMode", "CallToolbar", "isInRoom", "Call", "Grid", "Audio", "ChannelContainer", "roomId", "_roomId", "space", "getSpace", "callManager", "identity", "useIdentity", "isNamed", "profile", "joinSound", "useSoundEffect", "leaveSound", "extensions", "useCapabilities", "CallExtension", "ctx", "Context", "extension", "callStateUpdated", "onCallStateUpdated", "mediaStateUpdated", "onMediaStateUpdated", "dispose", "handleJoin", "leave", "setRoomId", "join", "Promise", "all", "err", "log", "catch", "handleLeave", "isJoined", "StackItem", "Content", "toolbar", "DisplayNameMissing", "defaultThread", "target", "ChannelToolbar", "attendableId", "onJoinCall", "ChatContainer", "thread", "client", "useClient", "setDisplayName", "handleChange", "event", "value", "handleSave", "halo", "updateProfile", "ControlGroup", "ControlItemInput", "title", "description", "Input", "TextInput", "onChange", "placeholder", "ControlGroupButton", "useChannelToolbarActions", "creator", "Rx", "make", "nodes", "createMenuItemGroup", "ns", "createMenuAction", "type", "edges", "source", "useMenuActions", "menuProps", "ElevationProvider", "elevation", "MenuProvider", "ToolbarMenu"]
7
- }
@@ -1,149 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_ZGDN3XBR_exports = {};
20
- __export(chunk_ZGDN3XBR_exports, {
21
- ChannelType: () => ChannelType,
22
- ThreadAction: () => ThreadAction,
23
- ThreadSettingsSchema: () => ThreadSettingsSchema,
24
- ThreadStatus: () => ThreadStatus,
25
- ThreadType: () => ThreadType
26
- });
27
- module.exports = __toCommonJS(chunk_ZGDN3XBR_exports);
28
- var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
29
- var import_effect = require("effect");
30
- var import_echo = require("@dxos/echo");
31
- var import_schema = require("@dxos/schema");
32
- var import_effect2 = require("effect");
33
- var import_echo2 = require("@dxos/echo");
34
- var import_echo3 = require("@dxos/react-client/echo");
35
- var import_schema2 = require("@dxos/schema");
36
- var ThreadStatus = import_effect.Schema.Union(import_effect.Schema.Literal("staged"), import_effect.Schema.Literal("active"), import_effect.Schema.Literal("resolved"));
37
- var _ThreadType = import_effect.Schema.Struct({
38
- name: import_effect.Schema.optional(import_effect.Schema.String),
39
- status: import_effect.Schema.optional(ThreadStatus),
40
- messages: import_effect.Schema.mutable(import_effect.Schema.Array(import_echo.Type.Ref(import_schema.DataType.Message)))
41
- }).pipe(import_echo.Type.Obj({
42
- typename: "dxos.org/type/Thread",
43
- version: "0.1.0"
44
- }));
45
- var ThreadType = _ThreadType;
46
- var _ChannelType = import_effect.Schema.Struct({
47
- name: import_effect.Schema.optional(import_effect.Schema.String),
48
- defaultThread: import_echo.Type.Ref(ThreadType),
49
- // TODO(wittjosiah): Should be an "ordered collection".
50
- threads: import_effect.Schema.mutable(import_effect.Schema.Array(import_echo.Type.Ref(ThreadType)))
51
- }).pipe(import_echo.Type.Obj({
52
- typename: "dxos.org/type/Channel",
53
- version: "0.1.0"
54
- }));
55
- var ChannelType = _ChannelType;
56
- (function(ThreadAction2) {
57
- const THREAD_ACTION = `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/action`;
58
- class CreateChannel extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
59
- input: import_effect2.Schema.Struct({
60
- spaceId: import_echo2.Type.SpaceId,
61
- name: import_effect2.Schema.optional(import_effect2.Schema.String)
62
- }),
63
- output: import_effect2.Schema.Struct({
64
- object: ChannelType
65
- })
66
- }) {
67
- }
68
- ThreadAction2.CreateChannel = CreateChannel;
69
- class CreateChannelThread extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create-channel-thread`, {
70
- input: import_effect2.Schema.Struct({
71
- channel: ChannelType
72
- }),
73
- output: import_effect2.Schema.Struct({
74
- object: ThreadType
75
- })
76
- }) {
77
- }
78
- ThreadAction2.CreateChannelThread = CreateChannelThread;
79
- class Create extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/create`, {
80
- input: import_effect2.Schema.Struct({
81
- name: import_effect2.Schema.optional(import_effect2.Schema.String),
82
- anchor: import_effect2.Schema.optional(import_effect2.Schema.String),
83
- subject: import_echo3.EchoObjectSchema
84
- }),
85
- output: import_effect2.Schema.Void
86
- }) {
87
- }
88
- ThreadAction2.Create = Create;
89
- class Delete extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/delete`, {
90
- input: import_effect2.Schema.Struct({
91
- anchor: import_schema2.AnchoredTo,
92
- subject: import_echo3.EchoObjectSchema,
93
- thread: import_effect2.Schema.optional(ThreadType)
94
- }),
95
- output: import_effect2.Schema.Void
96
- }) {
97
- }
98
- ThreadAction2.Delete = Delete;
99
- class Select extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/select`, {
100
- input: import_effect2.Schema.Struct({
101
- current: import_effect2.Schema.String
102
- }),
103
- output: import_effect2.Schema.Void
104
- }) {
105
- }
106
- ThreadAction2.Select = Select;
107
- class ToggleResolved extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/toggle-resolved`, {
108
- input: import_effect2.Schema.Struct({
109
- thread: ThreadType
110
- }),
111
- output: import_effect2.Schema.Void
112
- }) {
113
- }
114
- ThreadAction2.ToggleResolved = ToggleResolved;
115
- class AddMessage extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/add-message`, {
116
- input: import_effect2.Schema.Struct({
117
- subject: import_echo3.EchoObjectSchema,
118
- anchor: import_schema2.AnchoredTo,
119
- sender: import_schema2.DataType.Actor,
120
- text: import_effect2.Schema.String
121
- }),
122
- output: import_effect2.Schema.Void
123
- }) {
124
- }
125
- ThreadAction2.AddMessage = AddMessage;
126
- class DeleteMessage extends import_effect2.Schema.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
127
- input: import_effect2.Schema.Struct({
128
- anchor: import_schema2.AnchoredTo,
129
- subject: import_echo3.EchoObjectSchema,
130
- messageId: import_effect2.Schema.String,
131
- message: import_effect2.Schema.optional(import_schema2.DataType.Message),
132
- messageIndex: import_effect2.Schema.optional(import_effect2.Schema.Number)
133
- }),
134
- output: import_effect2.Schema.Void
135
- }) {
136
- }
137
- ThreadAction2.DeleteMessage = DeleteMessage;
138
- })(ThreadAction || (ThreadAction = {}));
139
- var ThreadSettingsSchema = import_effect2.Schema.mutable(import_effect2.Schema.Struct({}));
140
- var ThreadAction;
141
- // Annotate the CommonJS export names for ESM import in node:
142
- 0 && (module.exports = {
143
- ChannelType,
144
- ThreadAction,
145
- ThreadSettingsSchema,
146
- ThreadStatus,
147
- ThreadType
148
- });
149
- //# sourceMappingURL=chunk-ZGDN3XBR.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { DataType } from '@dxos/schema';\n\nexport const ThreadStatus = Schema.Union(\n Schema.Literal('staged'),\n Schema.Literal('active'),\n Schema.Literal('resolved'),\n);\n\nconst _ThreadType = Schema.Struct({\n name: Schema.optional(Schema.String),\n status: Schema.optional(ThreadStatus),\n messages: Schema.mutable(Schema.Array(Type.Ref(DataType.Message))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Thread', version: '0.1.0' }));\nexport interface ThreadType extends Schema.Schema.Type<typeof _ThreadType> {}\nexport const ThreadType: Type.obj<Schema.Schema<ThreadType, Schema.Schema.Encoded<typeof _ThreadType>, never>> =\n _ThreadType;\n\nconst _ChannelType = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Type.Ref(ThreadType),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Schema.mutable(Schema.Array(Type.Ref(ThreadType))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Channel', version: '0.1.0' }));\nexport interface ChannelType extends Schema.Schema.Type<typeof _ChannelType> {}\nexport const ChannelType: Type.obj<Schema.Schema<ChannelType, Schema.Schema.Encoded<typeof _ChannelType>, never>> =\n _ChannelType;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport { ChannelType, ThreadType } from './schema';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class CreateChannel extends Schema.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: Schema.Struct({\n spaceId: Type.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class CreateChannelThread extends Schema.TaggedClass<CreateChannelThread>()(\n `${THREAD_ACTION}/create-channel-thread`,\n {\n input: Schema.Struct({\n channel: ChannelType,\n }),\n output: Schema.Struct({\n object: ThreadType,\n }),\n },\n ) {}\n\n export class Create extends Schema.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n anchor: Schema.optional(Schema.String),\n subject: EchoObjectSchema,\n }),\n output: Schema.Void,\n }) {}\n\n export class Delete extends Schema.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n thread: Schema.optional(ThreadType),\n }),\n output: Schema.Void,\n }) {}\n\n export class Select extends Schema.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class ToggleResolved extends Schema.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: Schema.Struct({\n thread: ThreadType,\n }),\n output: Schema.Void,\n }) {}\n\n export class AddMessage extends Schema.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: Schema.Struct({\n subject: EchoObjectSchema,\n anchor: AnchoredTo,\n sender: DataType.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteMessage extends Schema.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n messageId: Schema.String,\n message: Schema.optional(DataType.Message),\n messageIndex: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Object toolbar state. */\n toolbar: Record<string, boolean>;\n /** In-memory draft threads. */\n drafts: Record<string, AnchoredTo[]>;\n current?: string | undefined;\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_effect", "import_echo", "import_schema", "ThreadStatus", "Schema", "Union", "Literal", "_ThreadType", "Struct", "name", "optional", "String", "status", "messages", "mutable", "Array", "Type", "Ref", "DataType", "Message", "pipe", "Obj", "typename", "version", "ThreadType", "_ChannelType", "defaultThread", "threads", "ChannelType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "TaggedClass", "input", "spaceId", "SpaceId", "output", "object", "CreateChannelThread", "channel", "Create", "anchor", "subject", "EchoObjectSchema", "Void", "Delete", "AnchoredTo", "thread", "Select", "current", "ToggleResolved", "AddMessage", "sender", "Actor", "text", "DeleteMessage", "messageId", "message", "messageIndex", "Number", "ThreadSettingsSchema"]
7
- }