@dxos/plugin-thread 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (331) hide show
  1. package/dist/lib/browser/ChannelContainer-3BKLNZ4D.mjs +17 -0
  2. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +16 -0
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-TWJ2UCOZ.mjs} +33 -33
  4. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-UO43FHAE.mjs +102 -0
  6. package/dist/lib/browser/blueprint-definition-UO43FHAE.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-4YFT4XA6.mjs} +8 -7
  8. package/dist/lib/browser/call-manager-4YFT4XA6.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-6E6VNV6V.mjs +25 -0
  10. package/dist/lib/browser/chunk-6E6VNV6V.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-ALZKJOZK.mjs} +251 -246
  12. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
  14. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  16. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-ISCHODBV.mjs} +55 -5
  18. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  20. package/dist/lib/browser/chunk-JDJPMI7V.mjs +143 -0
  21. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-KOBXMDCI.mjs} +74 -41
  23. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  24. package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
  25. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-SS3O5SOQ.mjs +611 -0
  27. package/dist/lib/browser/chunk-SS3O5SOQ.mjs.map +7 -0
  28. package/dist/lib/browser/chunk-TLOOZTRD.mjs +377 -0
  29. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +7 -0
  30. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ZCW3NSDZ.mjs} +310 -186
  31. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +61 -53
  33. package/dist/lib/browser/index.mjs.map +3 -3
  34. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-G33FT3NO.mjs} +41 -55
  35. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +7 -0
  36. package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-GSTZY2JL.mjs} +31 -28
  37. package/dist/lib/browser/markdown-GSTZY2JL.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/react-root-GRZVEGGE.mjs +29 -0
  40. package/dist/lib/browser/react-root-GRZVEGGE.mjs.map +7 -0
  41. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-C2OIZGFN.mjs} +38 -36
  42. package/dist/lib/browser/react-surface-C2OIZGFN.mjs.map +7 -0
  43. package/dist/lib/browser/repair-JFJLEM2O.mjs +35 -0
  44. package/dist/lib/browser/repair-JFJLEM2O.mjs.map +7 -0
  45. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-E6IOLK46.mjs} +6 -5
  46. package/dist/lib/{node-esm/settings-SJ24YG7M.mjs.map → browser/settings-E6IOLK46.mjs.map} +1 -1
  47. package/dist/lib/browser/{state-H6CYONWE.mjs → state-UYPLBGZJ.mjs} +6 -5
  48. package/dist/lib/browser/state-UYPLBGZJ.mjs.map +7 -0
  49. package/dist/lib/browser/types/index.mjs +7 -10
  50. package/dist/lib/node-esm/ChannelContainer-I4U4TEEY.mjs +18 -0
  51. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +17 -0
  52. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-VD6I2V5H.mjs} +33 -33
  54. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +7 -0
  55. package/dist/lib/node-esm/blueprint-definition-WANHWSF5.mjs +103 -0
  56. package/dist/lib/node-esm/blueprint-definition-WANHWSF5.mjs.map +7 -0
  57. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-UMUXEYH5.mjs} +8 -7
  58. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
  60. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-7KZWZS2U.mjs} +310 -186
  62. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-AB42KYF3.mjs} +251 -246
  64. package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  66. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs +378 -0
  68. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +7 -0
  69. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  70. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-P2M364TO.mjs +144 -0
  72. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-PZH2EDU5.mjs} +74 -41
  74. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-RDD44HYY.mjs +612 -0
  76. package/dist/lib/node-esm/chunk-RDD44HYY.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
  78. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-UPA2Q5YI.mjs +27 -0
  80. package/dist/lib/node-esm/chunk-UPA2Q5YI.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-VBI32FGI.mjs} +55 -5
  82. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  83. package/dist/lib/node-esm/index.mjs +61 -53
  84. package/dist/lib/node-esm/index.mjs.map +3 -3
  85. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-4PX3WXQG.mjs} +41 -55
  86. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +7 -0
  87. package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-MC5OP2UR.mjs} +31 -28
  88. package/dist/lib/node-esm/markdown-MC5OP2UR.mjs.map +7 -0
  89. package/dist/lib/node-esm/meta.json +1 -1
  90. package/dist/lib/node-esm/react-root-5IYK7CTL.mjs +30 -0
  91. package/dist/lib/node-esm/react-root-5IYK7CTL.mjs.map +7 -0
  92. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-GWBXMENS.mjs} +38 -36
  93. package/dist/lib/node-esm/react-surface-GWBXMENS.mjs.map +7 -0
  94. package/dist/lib/node-esm/repair-RMLR24YR.mjs +36 -0
  95. package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +7 -0
  96. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-RGZHWDSO.mjs} +6 -5
  97. package/dist/lib/{browser/settings-E32MTL7A.mjs.map → node-esm/settings-RGZHWDSO.mjs.map} +1 -1
  98. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-XNWOLBNE.mjs} +6 -5
  99. package/dist/lib/node-esm/state-XNWOLBNE.mjs.map +7 -0
  100. package/dist/lib/node-esm/types/index.mjs +7 -10
  101. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  102. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  103. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  104. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  105. package/dist/types/src/calls/media-manager.d.ts +1 -1
  106. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  107. package/dist/types/src/calls/types.d.ts +1 -1
  108. package/dist/types/src/calls/types.d.ts.map +1 -1
  109. package/dist/types/src/calls/util/calls-service.d.ts +4 -2
  110. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  111. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  112. package/dist/types/src/calls-service.stories.d.ts +10 -9
  113. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  115. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  117. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  119. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/capabilities.d.ts +3 -3
  121. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  122. package/dist/types/src/capabilities/index.d.ts +12 -10
  123. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  124. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  125. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  126. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  127. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  128. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  129. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  130. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/repair.d.ts +4 -0
  132. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/settings.d.ts +1 -1
  134. package/dist/types/src/capabilities/state.d.ts +2 -2
  135. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  136. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  137. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  138. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  139. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  140. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  141. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  142. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  143. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  144. package/dist/types/src/components/ChannelContainer.stories.d.ts +159 -5
  145. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  146. package/dist/types/src/components/Chat.stories.d.ts +162 -5
  147. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  149. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  150. package/dist/types/src/components/Comments.stories.d.ts +160 -4
  151. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  152. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  153. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  154. package/dist/types/src/components/CommentsThreadContainer.d.ts +9 -9
  155. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  156. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  157. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  158. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  159. package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
  160. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/MessageContainer.d.ts +8 -3
  162. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  163. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  164. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  165. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +159 -3
  166. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  167. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +161 -4
  168. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  170. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  171. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  172. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  173. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  174. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  175. package/dist/types/src/components/index.d.ts +3 -3
  176. package/dist/types/src/components/index.d.ts.map +1 -1
  177. package/dist/types/src/components/testing.d.ts +3 -2
  178. package/dist/types/src/components/testing.d.ts.map +1 -1
  179. package/dist/types/src/extensions/threads.d.ts +2 -2
  180. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  181. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  182. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  183. package/dist/types/src/functions/index.d.ts +2 -0
  184. package/dist/types/src/functions/index.d.ts.map +1 -0
  185. package/dist/types/src/hooks/analytics.d.ts +2 -2
  186. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  187. package/dist/types/src/hooks/index.d.ts +2 -1
  188. package/dist/types/src/hooks/index.d.ts.map +1 -1
  189. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  190. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  191. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  192. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  193. package/dist/types/src/meta.d.ts +1 -2
  194. package/dist/types/src/meta.d.ts.map +1 -1
  195. package/dist/types/src/testing/stories.d.ts.map +1 -1
  196. package/dist/types/src/translations.d.ts +79 -7
  197. package/dist/types/src/translations.d.ts.map +1 -1
  198. package/dist/types/src/types/Channel.d.ts +16 -0
  199. package/dist/types/src/types/Channel.d.ts.map +1 -0
  200. package/dist/types/src/types/index.d.ts +1 -1
  201. package/dist/types/src/types/index.d.ts.map +1 -1
  202. package/dist/types/src/types/types.d.ts +236 -265
  203. package/dist/types/src/types/types.d.ts.map +1 -1
  204. package/dist/types/tsconfig.tsbuildinfo +1 -1
  205. package/package.json +67 -59
  206. package/src/ThreadPlugin.tsx +137 -129
  207. package/src/calls/call-manager.ts +2 -2
  208. package/src/calls/call-swarm-synchronizer.ts +1 -1
  209. package/src/calls/media-manager.ts +66 -37
  210. package/src/calls/types.ts +8 -4
  211. package/src/calls/util/calls-service.ts +65 -14
  212. package/src/calls/util/stub-media-streams.ts +64 -7
  213. package/src/calls-service.stories.tsx +78 -65
  214. package/src/capabilities/app-graph-builder.ts +47 -33
  215. package/src/capabilities/blueprint-definition.ts +38 -0
  216. package/src/capabilities/call-manager.ts +3 -2
  217. package/src/capabilities/capabilities.ts +8 -8
  218. package/src/capabilities/index.ts +2 -0
  219. package/src/capabilities/intent-resolver.ts +32 -35
  220. package/src/capabilities/markdown.ts +9 -6
  221. package/src/capabilities/react-root.tsx +2 -2
  222. package/src/capabilities/react-surface.tsx +29 -26
  223. package/src/capabilities/repair.ts +40 -0
  224. package/src/capabilities/state.ts +2 -1
  225. package/src/components/Call/Call.tsx +4 -3
  226. package/src/components/Call/Toolbar.tsx +10 -10
  227. package/src/components/CallDebugPanel.tsx +112 -55
  228. package/src/components/CallSidebar.tsx +3 -2
  229. package/src/components/ChannelContainer.stories.tsx +15 -14
  230. package/src/components/ChannelContainer.tsx +25 -20
  231. package/src/components/Chat.stories.tsx +33 -36
  232. package/src/components/ChatContainer.tsx +35 -23
  233. package/src/components/Comments.stories.tsx +39 -41
  234. package/src/components/CommentsContainer.tsx +7 -8
  235. package/src/components/CommentsThreadContainer.tsx +39 -33
  236. package/src/components/Lobby/Lobby.tsx +2 -2
  237. package/src/components/Media/VideoObject.stories.tsx +36 -28
  238. package/src/components/Media/VideoObject.tsx +1 -1
  239. package/src/components/MessageContainer.tsx +53 -17
  240. package/src/components/Participant/Participant.tsx +14 -8
  241. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  242. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +8 -8
  243. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  244. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +45 -43
  245. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +6 -6
  246. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +7 -4
  247. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +72 -35
  248. package/src/components/ThreadSettings.tsx +6 -7
  249. package/src/components/command-extension.ts +5 -2
  250. package/src/components/index.ts +4 -4
  251. package/src/components/testing.ts +26 -6
  252. package/src/extensions/threads.ts +35 -25
  253. package/src/functions/create-proposals.ts +57 -0
  254. package/src/functions/index.ts +5 -0
  255. package/src/hooks/analytics.ts +4 -7
  256. package/src/hooks/index.ts +3 -1
  257. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  258. package/src/hooks/useDebugMode.ts +1 -1
  259. package/src/hooks/useVideoStreamTrack.tsx +6 -3
  260. package/src/meta.ts +9 -5
  261. package/src/testing/stories.ts +5 -8
  262. package/src/translations.ts +9 -4
  263. package/src/types/Channel.ts +26 -0
  264. package/src/types/index.ts +1 -1
  265. package/src/types/types.ts +31 -30
  266. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  267. package/src/typings.d.ts +8 -0
  268. package/src/util.ts +1 -1
  269. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  270. package/dist/lib/browser/ChatContainer-AIGIWAUG.mjs +0 -15
  271. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  272. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  274. package/dist/lib/browser/chunk-4OYAYON2.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  277. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  278. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  279. package/dist/lib/browser/chunk-GCLD5ESP.mjs +0 -137
  280. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  281. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-LGSDKXPF.mjs +0 -18
  284. package/dist/lib/browser/chunk-LGSDKXPF.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  286. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-XLPJXUKO.mjs +0 -367
  288. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  289. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  290. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  291. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  292. package/dist/lib/browser/react-root-X4UIVGTX.mjs +0 -28
  293. package/dist/lib/browser/react-root-X4UIVGTX.mjs.map +0 -7
  294. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  295. package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
  296. package/dist/lib/node-esm/ChannelContainer-DET6T5N2.mjs +0 -17
  297. package/dist/lib/node-esm/ChatContainer-IQUWU426.mjs +0 -16
  298. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  299. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-25ABSYP2.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  302. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  303. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs +0 -19
  305. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  307. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  308. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  309. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  310. package/dist/lib/node-esm/chunk-GW37AAM4.mjs.map +0 -7
  311. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs +0 -368
  313. package/dist/lib/node-esm/chunk-J4NSON5Q.mjs.map +0 -7
  314. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  315. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs +0 -138
  316. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  317. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  318. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  319. package/dist/lib/node-esm/react-root-M7J6PZVW.mjs +0 -29
  320. package/dist/lib/node-esm/react-root-M7J6PZVW.mjs.map +0 -7
  321. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  322. package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
  323. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  324. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  325. package/dist/types/src/types/schema.d.ts +0 -162
  326. package/dist/types/src/types/schema.d.ts.map +0 -1
  327. package/src/types/schema.ts +0 -33
  328. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-3BKLNZ4D.mjs.map} +0 -0
  329. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-KPY4BAUE.mjs.map} +0 -0
  330. /package/dist/lib/{node-esm/ChannelContainer-DET6T5N2.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  331. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChannelContainer-I4U4TEEY.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/CallDebugPanel.tsx", "../../../src/components/CallSidebar.tsx", "../../../src/components/ThreadCompanion.tsx", "../../../src/components/index.ts", "../../../src/components/CommentsContainer.tsx", "../../../src/components/CommentsThreadContainer.tsx", "../../../src/components/ThreadSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { WebRTCStats, type WebRTCStatsEvent } from '@peermetrics/webrtc-stats';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { truncateKey } from '@dxos/debug';\nimport { JsonView, Panel } from '@dxos/devtools';\nimport { log } from '@dxos/log';\nimport { IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { type EncodedTrackName, type GlobalState } from '../calls';\nimport { meta } from '../meta';\n\nexport type CallDebugPanelProps = ThemedClassName<{ state?: GlobalState }>;\n\nexport const CallDebugPanel = ({ state }: CallDebugPanelProps) => {\n const { t } = useTranslation(meta.id);\n\n const [open, setOpen] = useState(false);\n const handleToggle = () => setOpen(!open);\n const [showServiceHistory, setShowServiceHistory] = useState(false);\n const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);\n\n const handleCopyRaw = async () => {\n await navigator.clipboard.writeText(JSON.stringify({ users: state?.call?.users, stats }, null, 2));\n };\n\n const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);\n const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);\n\n const webrtcStats = useMemo(\n () =>\n new WebRTCStats({\n getStatsInterval: 1000,\n }),\n [],\n );\n const [stats, setStats] = useState<WebRTCStatsEvent['data']>();\n\n useEffect(() => {\n const pc = state?.media.peer?.session?.peerConnection;\n const handleStats = (stats: WebRTCStatsEvent) => {\n setStats(stats.data);\n };\n let added = false;\n if (pc && showDetailedWebRTCStats) {\n webrtcStats.addConnection({ pc, peerId: 1, connectionId: '1' });\n webrtcStats.on('stats', handleStats as never);\n added = true;\n }\n return () => {\n try {\n if (pc && added) {\n webrtcStats.removeConnection({ pc });\n webrtcStats.removeListener('stats', handleStats as never);\n }\n } catch (error) {\n log.error('error removing webrtc stats', { error, pc, peerId: 1, connectionId: '1' });\n }\n };\n }, [state?.media.peer?.session?.peerConnection, showDetailedWebRTCStats]);\n\n const rows = useMemo(() => getCallStatusTable(state), [state?.call.users, state?.media.pulledAudioTracks]);\n\n return (\n <Panel\n id='meeting-status'\n icon='ph--video-conference--regular'\n open={open}\n onToggle={handleToggle}\n title={t('meeting status title')}\n info={<div className='flex items-center gap-2'> {state?.call.joined ? 'Active' : 'Inactive'}</div>}\n maxHeight={0}\n >\n <div className='flex flex-col is-full text-xs'>\n <div className='flex items-center gap-2 items-center'>\n <Input.Root>\n <Input.Switch checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />\n <Input.Label>{t('show webrtc stats title')}</Input.Label>\n </Input.Root>\n </div>\n <div className='flex items-center gap-2 items-center'>\n <Input.Root>\n <Input.Switch checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />\n <Input.Label>{t('show calls history title')}</Input.Label>\n </Input.Root>\n </div>\n <div className='flex items-center gap-2 items-center'>\n <IconButton icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />\n </div>\n <Table rows={rows} />\n {showDetailedWebRTCStats && <JsonView data={{ stats }} />}\n {showServiceHistory && <JsonView data={{ history: state?.media.peer?.history.get() }} />}\n </div>\n </Panel>\n );\n};\n\nconst getCallStatusTable = (state?: GlobalState): TableProps['rows'] => {\n if (!state || !state.call?.users) {\n return [];\n }\n\n const self = state.call.self;\n const users = state.call.users\n .filter((user) => user.id !== self!.id)\n .map((user) => {\n const isOk = {\n audio:\n user.tracks?.audio &&\n state.media.pulledAudioTracks[user.tracks?.audio as EncodedTrackName]?.ctx.disposed === false,\n video:\n user.tracks?.video &&\n state.media.pulledVideoStreams[user.tracks?.video as EncodedTrackName]?.ctx.disposed === false,\n screenshare:\n user.tracks?.screenshare &&\n state.media.pulledVideoStreams[user.tracks?.screenshare as EncodedTrackName]?.ctx.disposed === false,\n };\n\n return {\n ...user,\n isOk,\n };\n });\n\n return [\n ['users', state.call.users.length ?? 0],\n [\n '*self* ' + (self?.name ?? truncateKey(self!.id, 8)),\n self?.tracks?.audio && state.media.pushedAudioTrack ? 'AUD ✅' : 'AUD ❌',\n self?.tracks?.video && state.media.pushedVideoTrack ? 'VID ✅' : 'VID ❌',\n self?.tracks?.screenshareEnabled\n ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack\n ? 'SCR ✅'\n : 'SCR ❌'\n : undefined,\n ],\n\n ...users.map((user) => [\n user.name ?? truncateKey(user.id, 8),\n user.isOk.audio ? 'AUD ✅' : 'AUD ❌',\n user.isOk.video ? 'VID ✅' : 'VID ❌',\n user.tracks?.screenshareEnabled ? (user.isOk.screenshare ? 'SCR ✅' : 'SCR ❌') : undefined,\n ]),\n ['ICE', state.media.peer?.session?.peerConnection.iceConnectionState ?? 'no connection'],\n ];\n};\n\nexport namespace Unit {\n export const KB = (n?: number) => ((n ?? 0) / 1_000).toFixed(2);\n}\n\nexport type TableProps = {\n rows: (string | number | undefined)[][];\n};\n\nexport const Table = ({ rows }: TableProps) => {\n return (\n <div className='is-full text-xs font-mono'>\n {rows.map(([prefix, label, value, unit], i) => (\n <div key={i} className='grid grid-cols-[3fr_1fr_1fr_1fr]'>\n <div className='p-1'>{prefix}</div>\n <div className='p-1'>{label}</div>\n <div className='p-1'>{value}</div>\n <div className='p-1'>{unit}</div>\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useCapability } from '@dxos/app-framework/react';\n\nimport { ThreadCapabilities } from '../capabilities';\n\nimport { ChannelContainer } from './ChannelContainer';\n\nexport const CallSidebar = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n return <ChannelContainer roomId={call.roomId} />;\n};\n\nexport default CallSidebar;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';\nimport { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';\nimport { Filter, Obj, Query, Relation } from '@dxos/echo';\nimport { Ref, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { AnchoredTo, Thread } from '@dxos/types';\n\nimport { ThreadCapabilities } from '../capabilities';\nimport { CommentsContainer, type CommentsContainerProps } from '../components';\nimport { meta } from '../meta';\nimport { ThreadAction } from '../types';\n\nexport const ThreadCompanion = ({ subject }: { subject: any }) => {\n const { t } = useTranslation(meta.id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const subjectId = Obj.getDXN(subject).toString();\n\n const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);\n const drafts = state.drafts[subjectId];\n const viewState = useMemo(() => getViewState(subjectId), [getViewState, subjectId]);\n const { showResolvedThreads } = viewState;\n const onChangeViewState = useCallback(\n (nextValue: string) => {\n viewState.showResolvedThreads = nextValue === 'all';\n },\n [viewState],\n );\n\n const anchorSorts = useCapabilities(Capabilities.AnchorSort);\n const sort = useMemo(\n () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,\n [anchorSorts, subject],\n );\n\n const space = getSpace(subject);\n const objectsAnchoredTo = useQuery(space, Query.select(Filter.id(subject.id)).targetOf(AnchoredTo.AnchoredTo));\n const anchors = objectsAnchoredTo\n .toSorted((a, b) => sort?.(a, b) ?? 0)\n .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))\n .concat(drafts ?? []);\n\n const attended = useAttended();\n\n const handleAttend = useCallback(\n (anchor: AnchoredTo.AnchoredTo) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const threadId = Obj.getDXN(thread).toString();\n\n if (state.current !== threadId) {\n state.current = threadId;\n\n // TODO(wittjosiah): Should this be a thread-specific intent?\n // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.\n // This may be overloading this intent or highjacking its intended purpose.\n void dispatch(\n createIntent(LayoutAction.ScrollIntoView, {\n part: 'current',\n subject: Obj.getDXN(subject).toString(),\n options: {\n cursor: anchor.anchor,\n ref: threadId,\n },\n }),\n );\n }\n },\n [state.current, dispatch, subject],\n );\n\n const handleComment = useCallback(\n async (anchor: AnchoredTo.AnchoredTo, text: string) => {\n await dispatch(\n createIntent(ThreadAction.AddMessage, {\n anchor,\n subject,\n sender: { identityDid: identity?.did },\n text,\n }),\n );\n\n const thread = Relation.getSource(anchor) as Thread.Thread;\n state.current = Obj.getDXN(thread).toString();\n },\n [dispatch, identity, subject],\n );\n\n const handleResolve = useCallback(\n (anchor: AnchoredTo.AnchoredTo) =>\n dispatch(\n createIntent(ThreadAction.ToggleResolved, {\n thread: Relation.getSource(anchor) as Thread.Thread,\n }),\n ),\n [dispatch],\n );\n\n const handleThreadDelete = useCallback(\n (anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),\n [dispatch, subject],\n );\n\n const handleMessageDelete = useCallback(\n (anchor: AnchoredTo.AnchoredTo, messageId: string) =>\n dispatch(\n createIntent(ThreadAction.DeleteMessage, {\n anchor,\n subject,\n messageId,\n }),\n ),\n [dispatch, subject],\n );\n\n const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(\n async (anchor, messageId) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));\n const message = thread.messages[messageIndex]?.target;\n const proposal = message?.blocks.find((block) => block._tag === 'proposal');\n if (!proposal || !anchor.anchor) {\n return;\n }\n\n await dispatch(\n createIntent(CollaborationActions.AcceptProposal, {\n subject,\n anchor: anchor.anchor,\n proposal,\n }),\n );\n await dispatch(createIntent(ThreadAction.ToggleResolved, { thread }));\n },\n [dispatch, subject],\n );\n\n const comments = (\n <CommentsContainer\n anchors={anchors}\n currentId={attended.includes(subjectId) ? state.current : undefined}\n showResolvedThreads={showResolvedThreads}\n onAttend={handleAttend}\n onComment={handleComment}\n onResolve={handleResolve}\n onMessageDelete={handleMessageDelete}\n onThreadDelete={handleThreadDelete}\n onAcceptProposal={handleAcceptProposal}\n />\n );\n\n return (\n <StackItem.Content toolbar>\n <Tabs.Root\n value={showResolvedThreads ? 'all' : 'unresolved'}\n orientation='horizontal'\n classNames={[\n 'contents [&_[role=\"tabpanel\"]]:min-bs-0 [&_[role=\"tabpanel\"]]:overflow-y-auto [&_[role=\"tabpanel\"]]:scrollbar-thin',\n ]}\n onValueChange={onChangeViewState}\n >\n {/* TODO(burdon): Standardize (like Tollbar). */}\n <Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>\n <Tabs.Tab value='unresolved' classNames='text-sm'>\n {t('show unresolved label')}\n </Tabs.Tab>\n <Tabs.Tab value='all' classNames='text-sm'>\n {t('show all label')}\n </Tabs.Tab>\n </Tabs.Tablist>\n <div className='overflow-y-auto'>\n <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>\n <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>\n </div>\n </Tabs.Root>\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\n// TODO(wittjosiah): Suspense boundary for sidebar?\nexport * from './Call';\nexport * from './CallDebugPanel';\nexport * from './CallSidebar';\nexport * from './CommentsContainer';\nexport * from './CommentsThreadContainer';\nexport * from './MessageContainer';\nexport * from './ThreadCompanion';\nexport * from './ThreadSettings';\n\nexport const ChannelContainer = lazy(() => import('./ChannelContainer'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect } from 'react';\n\nimport { Obj, Relation } from '@dxos/echo';\nimport { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';\nimport { type AnchoredTo, type Thread } from '@dxos/types';\n\nimport { meta } from '../meta';\n\nimport { CommentsThreadContainer, type CommentsThreadContainerProps } from './CommentsThreadContainer';\n\nexport type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor' | 'current'> & {\n anchors: AnchoredTo.AnchoredTo[];\n currentId?: string;\n showResolvedThreads?: boolean;\n};\n\n/**\n * Root container for collection of comment threads.\n */\nexport const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }: CommentsContainerProps) => {\n const { t } = useTranslation(meta.id);\n\n // TODO(wittjosiah): There seems to be a race between thread and anchor being deleted.\n const filteredAnchors = showResolvedThreads\n ? anchors.filter((anchor) => !!Relation.getSource(anchor))\n : anchors.filter((anchor) => {\n const thread = Relation.getSource(anchor);\n return thread && thread.status !== 'resolved';\n });\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n if (filteredAnchors.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root>\n <Callout.Title>\n <Trans\n {...{\n t,\n i18nKey: 'no comments message',\n components: {\n commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='inline-block' />,\n },\n }}\n />\n </Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div>\n {filteredAnchors.map((anchor) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const threadId = Obj.getDXN(thread).toString();\n return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;\n })}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Obj, Ref, Relation } from '@dxos/echo';\nimport { getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';\nimport {\n MessageTextbox,\n type MessageTextboxProps,\n Thread as ThreadComponent,\n type ThreadRootProps,\n} from '@dxos/react-ui-thread';\nimport { type AnchoredTo, type Thread } from '@dxos/types';\nimport { isNonNullable } from '@dxos/util';\n\nimport { useStatus } from '../hooks';\nimport { meta } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nimport { command } from './command-extension';\nimport { MessageContainer, buttonClassNames, buttonGroupClassNames } from './MessageContainer';\n\nexport type CommentsThreadContainerProps = {\n anchor: AnchoredTo.AnchoredTo;\n onAttend?: (anchor: AnchoredTo.AnchoredTo) => void;\n onComment?: (anchor: AnchoredTo.AnchoredTo, message: string) => void;\n onResolve?: (anchor: AnchoredTo.AnchoredTo) => void;\n onMessageDelete?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;\n onThreadDelete?: (anchor: AnchoredTo.AnchoredTo) => void;\n onAcceptProposal?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;\n} & Pick<ThreadRootProps, 'current'>;\n\nexport const CommentsThreadContainer = ({\n anchor,\n current,\n onAttend,\n onComment,\n onResolve,\n onMessageDelete,\n onThreadDelete,\n onAcceptProposal,\n}: CommentsThreadContainerProps) => {\n const { themeMode } = useThemeContext();\n const { t } = useTranslation(meta.id);\n const identity = useIdentity()!;\n const space = getSpace(anchor);\n const members = useMembers(space?.key);\n const detached = !anchor.anchor;\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const activity = useStatus(space, Obj.getDXN(thread).toString());\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n\n const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);\n\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [state, setState] = useState({});\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: ({ text }) => (messageRef.current = text) }),\n command,\n ],\n [state],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleAttend = useCallback(() => onAttend?.(anchor), [onAttend, anchor]);\n const handleResolve = useCallback(() => onResolve?.(anchor), [onResolve, anchor]);\n const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(anchor, id), [onMessageDelete, anchor]);\n const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);\n const handleAcceptProposal = useCallback((id: string) => onAcceptProposal?.(anchor, id), [onAcceptProposal, anchor]);\n\n const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {\n if (!messageRef.current) {\n return false;\n }\n\n onComment?.(anchor, messageRef.current);\n messageRef.current = '';\n scrollToEnd('instant');\n setState({});\n\n return true;\n }, [anchor, identity]);\n\n return (\n <ThreadComponent.Root\n id={Obj.getDXN(thread).toString()}\n classNames='pbs-2 border-be border-subduedSeparator last:border-none'\n current={current}\n onClickCapture={handleAttend}\n onFocusCapture={handleAttend}\n >\n <div\n role='none'\n className={mx(\n 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>\n <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>\n </Tooltip.Trigger>\n ) : (\n <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>\n )}\n <div role='none' className={buttonGroupClassNames}>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <IconButton\n data-testid='thread.resolve'\n variant='ghost'\n icon={thread?.status === 'resolved' ? 'ph--check--fill' : 'ph--check--regular'}\n iconOnly\n label={t('resolve thread label')}\n classNames={[buttonClassNames, thread?.status !== 'resolved' && hoverableControlItem]}\n onClick={handleResolve}\n />\n )}\n {onThreadDelete && (\n <IconButton\n data-testid='thread.delete'\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('delete thread label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleThreadDelete}\n />\n )}\n </div>\n </div>\n\n {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}\n {Ref.Array.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (\n <MessageContainer\n key={message.id}\n editable\n message={message}\n members={members}\n onDelete={handleMessageDelete}\n onAcceptProposal={handleAcceptProposal}\n />\n ))}\n\n {/*\n TODO(wittjosiah): Can't autofocus this generally.\n There can be multiple threads with inputs and they can't all be focused.\n Also, it steals focus from documents when first rendered.\n Need to find a way to autofocus in one scenario only: when a new thread is created.\n */}\n <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />\n\n <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>\n\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n </ThreadComponent.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { ControlPage } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\nimport type { ThreadSettingsProps } from '../types';\n\nexport const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {\n const { t: _t } = useTranslation(meta.id);\n return <ControlPage></ControlPage>;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["WebRTCStats", "React", "useEffect", "useMemo", "useState", "truncateKey", "JsonView", "Panel", "log", "IconButton", "Input", "useTranslation", "CallDebugPanel", "state", "t", "useTranslation", "meta", "id", "open", "setOpen", "useState", "handleToggle", "showServiceHistory", "setShowServiceHistory", "handleToggleServiceHistory", "handleCopyRaw", "navigator", "clipboard", "writeText", "JSON", "stringify", "users", "call", "stats", "showDetailedWebRTCStats", "setShowDetailedWebRTCStats", "handleShowDetailedWebRTCStats", "webrtcStats", "useMemo", "WebRTCStats", "getStatsInterval", "setStats", "useEffect", "pc", "media", "peer", "session", "peerConnection", "handleStats", "data", "added", "addConnection", "peerId", "connectionId", "on", "removeConnection", "removeListener", "error", "log", "rows", "getCallStatusTable", "pulledAudioTracks", "Panel", "icon", "onToggle", "title", "info", "div", "className", "joined", "maxHeight", "Input", "Root", "Switch", "checked", "onCheckedChange", "Label", "IconButton", "label", "onClick", "Table", "JsonView", "history", "get", "self", "filter", "user", "map", "isOk", "audio", "tracks", "ctx", "disposed", "video", "pulledVideoStreams", "screenshare", "length", "name", "truncateKey", "pushedAudioTrack", "pushedVideoTrack", "screenshareEnabled", "pushedScreenshareTrack", "undefined", "iceConnectionState", "Unit", "KB", "n", "toFixed", "prefix", "value", "unit", "i", "key", "React", "useCapability", "CallSidebar", "call", "useCapability", "ThreadCapabilities", "CallManager", "React", "ChannelContainer", "roomId", "React", "useCallback", "useMemo", "Capabilities", "CollaborationActions", "LayoutAction", "createIntent", "useCapabilities", "useCapability", "useIntentDispatcher", "Filter", "Obj", "Query", "Relation", "Ref", "getSpace", "useQuery", "useIdentity", "useTranslation", "useAttended", "StackItem", "Tabs", "mx", "AnchoredTo", "Thread", "lazy", "React", "useEffect", "Obj", "Relation", "Callout", "Icon", "Trans", "useTranslation", "React", "useCallback", "useMemo", "useRef", "useState", "Obj", "Ref", "Relation", "getSpace", "useMembers", "useIdentity", "IconButton", "Tag", "Tooltip", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageTextbox", "Thread", "ThreadComponent", "isNonNullable", "CommentsThreadContainer", "anchor", "current", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "themeMode", "useThemeContext", "t", "useTranslation", "meta", "id", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "detached", "thread", "Relation", "getSource", "activity", "useStatus", "Obj", "getDXN", "toString", "threadScrollRef", "useRef", "textboxMetadata", "getMessageMetadata", "state", "setState", "useState", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "handleAttend", "useCallback", "handleResolve", "handleMessageDelete", "handleThreadDelete", "handleAcceptProposal", "handleComment", "React", "ThreadComponent", "Root", "classNames", "onClickCapture", "onFocusCapture", "div", "role", "className", "mx", "hoverableControls", "hoverableFocusedWithinControls", "Tooltip", "Trigger", "asChild", "content", "side", "Header", "name", "buttonGroupClassNames", "status", "Tag", "palette", "IconButton", "data-testid", "variant", "icon", "iconOnly", "label", "buttonClassNames", "hoverableControlItem", "onClick", "Ref", "Array", "targets", "messages", "filter", "isNonNullable", "map", "message", "MessageContainer", "editable", "onDelete", "MessageTextbox", "onSend", "Status", "ref", "CommentsContainer", "anchors", "currentId", "showResolvedThreads", "props", "t", "useTranslation", "meta", "id", "filteredAnchors", "filter", "anchor", "Relation", "getSource", "thread", "status", "useEffect", "document", "getElementById", "scrollIntoView", "behavior", "block", "length", "React", "div", "role", "className", "Callout", "Root", "Title", "Trans", "i18nKey", "components", "commentIcon", "Icon", "icon", "size", "classNames", "map", "threadId", "Obj", "getDXN", "toString", "CommentsThreadContainer", "key", "current", "React", "useTranslation", "ControlPage", "ThreadSettings", "settings", "_settings", "t", "_t", "useTranslation", "meta", "id", "React", "ControlPage", "ChannelContainer", "lazy", "ChatContainer", "ThreadCompanion", "subject", "t", "useTranslation", "meta", "id", "dispatchPromise", "dispatch", "useIntentDispatcher", "identity", "useIdentity", "subjectId", "Obj", "getDXN", "toString", "state", "getViewState", "useCapability", "ThreadCapabilities", "MutableState", "drafts", "viewState", "useMemo", "showResolvedThreads", "onChangeViewState", "useCallback", "nextValue", "anchorSorts", "useCapabilities", "Capabilities", "AnchorSort", "sort", "find", "key", "getTypename", "space", "getSpace", "objectsAnchoredTo", "useQuery", "Query", "select", "Filter", "targetOf", "AnchoredTo", "anchors", "toSorted", "a", "b", "filter", "anchor", "instanceOf", "Thread", "Relation", "getSource", "concat", "attended", "useAttended", "handleAttend", "thread", "threadId", "current", "createIntent", "LayoutAction", "ScrollIntoView", "part", "options", "cursor", "ref", "handleComment", "text", "ThreadAction", "AddMessage", "sender", "identityDid", "did", "handleResolve", "ToggleResolved", "handleThreadDelete", "Delete", "handleMessageDelete", "messageId", "DeleteMessage", "handleAcceptProposal", "messageIndex", "messages", "findIndex", "Ref", "hasObjectId", "message", "target", "proposal", "blocks", "block", "_tag", "CollaborationActions", "AcceptProposal", "comments", "React", "CommentsContainer", "currentId", "includes", "undefined", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "StackItem", "Content", "toolbar", "Tabs", "Root", "value", "orientation", "classNames", "onValueChange", "Tablist", "mx", "Tab", "div", "className", "Tabpanel"]
7
+ }
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ meta
4
+ } from "./chunk-2AEIN5MI.mjs";
5
+
6
+ // src/capabilities/capabilities.ts
7
+ import { defineCapability } from "@dxos/app-framework";
8
+ (function(ThreadCapabilities2) {
9
+ ThreadCapabilities2.CallManager = defineCapability(`${meta.id}/capability/call-manager`);
10
+ ThreadCapabilities2.CallExtension = defineCapability(`${meta.id}/capability/call-extension`);
11
+ ThreadCapabilities2.State = defineCapability(`${meta.id}/capability/state`);
12
+ ThreadCapabilities2.MutableState = defineCapability(`${meta.id}/capability/state`);
13
+ })(ThreadCapabilities || (ThreadCapabilities = {}));
14
+ var ThreadCapabilities;
15
+
16
+ export {
17
+ ThreadCapabilities
18
+ };
19
+ //# sourceMappingURL=chunk-RT6NRL2I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { type CallManager, type CallState, type MediaState } from '../calls';\nimport { meta } from '../meta';\nimport { type Channel, type ThreadState, type ViewState } from '../types';\n\nexport namespace ThreadCapabilities {\n export const CallManager = defineCapability<CallManager>(`${meta.id}/capability/call-manager`);\n\n // TODO(burdon): Better way to define specific extensions for meeting companions.\n // TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?\n // TODO(wittjosiah): These callbacks could be intents once we support broadcast.\n export type CallProperties = {\n onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;\n onLeave: (roomId?: string) => Promise<void>;\n onCallStateUpdated: (callState: CallState) => Promise<void>;\n onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;\n };\n export const CallExtension = defineCapability<CallProperties>(`${meta.id}/capability/call-extension`);\n\n type GetViewState = (subjectId: string) => ViewState;\n export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(\n `${meta.id}/capability/state`,\n );\n export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(\n `${meta.id}/capability/state`,\n );\n}\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,wBAAwB;UAOhBC,qBAAAA;sBACFC,cAAcC,iBAA8B,GAAGC,KAAKC,EAAE,0BAA0B;sBAWhFC,gBAAgBH,iBAAiC,GAAGC,KAAKC,EAAE,4BAA4B;sBAGvFE,QAAQJ,iBACnB,GAAGC,KAAKC,EAAE,mBAAmB;sBAElBG,eAAeL,iBAC1B,GAAGC,KAAKC,EAAE,mBAAmB;AAEjC,GArBiBJ,uBAAAA,qBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["defineCapability", "ThreadCapabilities", "CallManager", "defineCapability", "meta", "id", "CallExtension", "State", "MutableState"]
7
+ }
@@ -0,0 +1,27 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/capabilities/index.ts
4
+ import { lazy } from "@dxos/app-framework";
5
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-VD6I2V5H.mjs"));
6
+ var BlueprintDefinition = lazy(() => import("./blueprint-definition-WANHWSF5.mjs"));
7
+ var CallManager = lazy(() => import("./call-manager-UMUXEYH5.mjs"));
8
+ var IntentResolver = lazy(() => import("./intent-resolver-4PX3WXQG.mjs"));
9
+ var Markdown = lazy(() => import("./markdown-MC5OP2UR.mjs"));
10
+ var ReactRoot = lazy(() => import("./react-root-5IYK7CTL.mjs"));
11
+ var ReactSurface = lazy(() => import("./react-surface-GWBXMENS.mjs"));
12
+ var Repair = lazy(() => import("./repair-RMLR24YR.mjs"));
13
+ var ThreadSettings = lazy(() => import("./settings-RGZHWDSO.mjs"));
14
+ var ThreadState = lazy(() => import("./state-XNWOLBNE.mjs"));
15
+
16
+ export {
17
+ AppGraphBuilder,
18
+ BlueprintDefinition,
19
+ CallManager,
20
+ IntentResolver,
21
+ Markdown,
22
+ ReactRoot,
23
+ ReactSurface,
24
+ Repair,
25
+ ThreadState
26
+ };
27
+ //# sourceMappingURL=chunk-UPA2Q5YI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const BlueprintDefinition = lazy(() => import('./blueprint-definition'));\nexport const CallManager = lazy(() => import('./call-manager'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Repair = lazy(() => import('./repair'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,sBAAsBD,KAAK,MAAM,OAAO,qCAAA,CAAA;AAC9C,IAAME,cAAcF,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMI,WAAWJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMK,YAAYL,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAMM,eAAeN,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMO,SAASP,KAAK,MAAM,OAAO,uBAAA,CAAA;AACjC,IAAMQ,iBAAiBR,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMS,cAAcT,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "BlueprintDefinition", "CallManager", "IntentResolver", "Markdown", "ReactRoot", "ReactSurface", "Repair", "ThreadSettings", "ThreadState"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/calls/util/stub-media-streams.ts
4
- import { waitForCondition, scheduleTaskInterval } from "@dxos/async";
4
+ import { scheduleTaskInterval, waitForCondition } from "@dxos/async";
5
5
  import { cancelWithContext } from "@dxos/context";
6
6
  import { invariant } from "@dxos/invariant";
7
7
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/calls/util/stub-media-streams.ts";
@@ -23,7 +23,7 @@ var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
23
23
  canvasCtx.fillStyle = "black";
24
24
  canvasCtx.fillRect(0, 0, canvas.width, canvas.height);
25
25
  };
26
- scheduleTaskInterval(ctx, async () => drawFrame(), 1e3);
26
+ scheduleTaskInterval(ctx, async () => drawFrame(), 200);
27
27
  const track = canvas.captureStream().getVideoTracks()[0];
28
28
  drawFrame();
29
29
  await cancelWithContext(ctx, waitForCondition({
@@ -32,18 +32,68 @@ var createBlackCanvasStreamTrack = async ({ ctx, width, height }) => {
32
32
  }));
33
33
  return track;
34
34
  };
35
+ var audioContextStartedPreviously = false;
36
+ var userGestureEvents = [
37
+ "click",
38
+ "contextmenu",
39
+ "auxclick",
40
+ "dblclick",
41
+ "mousedown",
42
+ "mouseup",
43
+ "pointerup",
44
+ "touchend",
45
+ "keydown",
46
+ "keyup"
47
+ ];
35
48
  var createInaudibleAudioStreamTrack = async ({ ctx }) => {
36
49
  const audioContext = new window.AudioContext();
37
50
  const oscillator = audioContext.createOscillator();
38
51
  oscillator.type = "triangle";
39
52
  oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
40
53
  const gainNode = audioContext.createGain();
41
- gainNode.gain.setValueAtTime(0.02, audioContext.currentTime);
54
+ gainNode.gain.setValueAtTime(0, audioContext.currentTime);
42
55
  oscillator.connect(gainNode);
43
56
  const destination = audioContext.createMediaStreamDestination();
44
57
  gainNode.connect(destination);
45
- oscillator.start();
58
+ let oscillatorStarted = false;
59
+ const ensureOscillatorStarted = () => {
60
+ if (oscillatorStarted) return;
61
+ oscillator.start();
62
+ oscillatorStarted = true;
63
+ };
64
+ const stateChangeHandler = () => {
65
+ if (audioContext.state === "running") {
66
+ audioContextStartedPreviously = true;
67
+ ensureOscillatorStarted();
68
+ }
69
+ if (audioContext.state === "suspended" || audioContext.state === "interrupted") {
70
+ resumeAudioContext();
71
+ }
72
+ };
73
+ audioContext.addEventListener("statechange", stateChangeHandler);
74
+ const resumeAudioContext = () => {
75
+ void audioContext.resume().then(() => {
76
+ cleanUpUserGestureListeners();
77
+ });
78
+ };
79
+ const cleanUpUserGestureListeners = () => {
80
+ userGestureEvents.forEach((gesture) => {
81
+ document.removeEventListener(gesture, resumeAudioContext, {
82
+ capture: true
83
+ });
84
+ });
85
+ };
86
+ if (audioContextStartedPreviously) {
87
+ resumeAudioContext();
88
+ } else {
89
+ userGestureEvents.forEach((gesture) => {
90
+ document.addEventListener(gesture, resumeAudioContext, {
91
+ capture: true
92
+ });
93
+ });
94
+ }
46
95
  ctx.onDispose(async () => {
96
+ cleanUpUserGestureListeners();
47
97
  oscillator.disconnect();
48
98
  oscillator.stop();
49
99
  await audioContext.close();
@@ -55,4 +105,4 @@ export {
55
105
  createBlackCanvasStreamTrack,
56
106
  createInaudibleAudioStreamTrack
57
107
  };
58
- //# sourceMappingURL=chunk-OU5BYIDO.mjs.map
108
+ //# sourceMappingURL=chunk-VBI32FGI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/calls/util/stub-media-streams.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n//\n\nimport { scheduleTaskInterval, waitForCondition } from '@dxos/async';\nimport { type Context, cancelWithContext } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\n\n/**\n * Creates a black canvas stream track.\n * We need this to to have black rectangle video that is live (have frames) when video feed is disabled.\n */\nexport const createBlackCanvasStreamTrack = async ({\n ctx,\n width,\n height,\n}: {\n ctx: Context;\n width: number;\n height: number;\n}): Promise<MediaStreamTrack> => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n\n const canvasCtx = canvas.getContext('2d');\n invariant(canvasCtx);\n const drawFrame = () => {\n canvasCtx.fillStyle = 'black';\n canvasCtx.fillRect(0, 0, canvas.width, canvas.height);\n };\n scheduleTaskInterval(ctx, async () => drawFrame(), 200);\n\n const track = canvas.captureStream().getVideoTracks()[0];\n drawFrame();\n\n await cancelWithContext(ctx, waitForCondition({ condition: () => track.readyState === 'live', timeout: 1_000 }));\n\n return track;\n};\n\nlet audioContextStartedPreviously = false;\nconst userGestureEvents = [\n 'click',\n 'contextmenu',\n 'auxclick',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'pointerup',\n 'touchend',\n 'keydown',\n 'keyup',\n];\n\n/**\n * Creates an inaudible audio stream track.\n * We need this to have audio track available when audio is disabled.\n */\nexport const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {\n const audioContext = new window.AudioContext();\n\n const oscillator = audioContext.createOscillator();\n oscillator.type = 'triangle';\n oscillator.frequency.setValueAtTime(20, audioContext.currentTime);\n\n const gainNode = audioContext.createGain();\n gainNode.gain.setValueAtTime(0, audioContext.currentTime);\n oscillator.connect(gainNode);\n\n const destination = audioContext.createMediaStreamDestination();\n gainNode.connect(destination);\n\n let oscillatorStarted = false;\n const ensureOscillatorStarted = () => {\n if (oscillatorStarted) return;\n oscillator.start();\n oscillatorStarted = true;\n };\n\n const stateChangeHandler = () => {\n if (audioContext.state === 'running') {\n audioContextStartedPreviously = true;\n ensureOscillatorStarted();\n }\n\n if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {\n resumeAudioContext();\n }\n };\n\n audioContext.addEventListener('statechange', stateChangeHandler);\n\n const resumeAudioContext = () => {\n void audioContext.resume().then(() => {\n cleanUpUserGestureListeners();\n });\n };\n\n const cleanUpUserGestureListeners = () => {\n userGestureEvents.forEach((gesture) => {\n document.removeEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n };\n\n if (audioContextStartedPreviously) {\n resumeAudioContext();\n } else {\n userGestureEvents.forEach((gesture) => {\n document.addEventListener(gesture, resumeAudioContext, {\n capture: true,\n });\n });\n }\n\n ctx.onDispose(async () => {\n cleanUpUserGestureListeners();\n oscillator.disconnect();\n oscillator.stop();\n await audioContext.close();\n });\n\n return destination.stream.getAudioTracks()[0];\n};\n"],
5
+ "mappings": ";;;AAKA,SAASA,sBAAsBC,wBAAwB;AACvD,SAAuBC,yBAAyB;AAChD,SAASC,iBAAiB;;AAMnB,IAAMC,+BAA+B,OAAO,EACjDC,KACAC,OACAC,OAAM,MAKP;AACC,QAAMC,SAASC,SAASC,cAAc,QAAA;AACtCF,SAAOF,QAAQA;AACfE,SAAOD,SAASA;AAEhB,QAAMI,YAAYH,OAAOI,WAAW,IAAA;AACpCT,YAAUQ,WAAAA,QAAAA;;;;;;;;;AACV,QAAME,YAAY,MAAA;AAChBF,cAAUG,YAAY;AACtBH,cAAUI,SAAS,GAAG,GAAGP,OAAOF,OAAOE,OAAOD,MAAM;EACtD;AACAP,uBAAqBK,KAAK,YAAYQ,UAAAA,GAAa,GAAA;AAEnD,QAAMG,QAAQR,OAAOS,cAAa,EAAGC,eAAc,EAAG,CAAA;AACtDL,YAAAA;AAEA,QAAMX,kBAAkBG,KAAKJ,iBAAiB;IAAEkB,WAAW,MAAMH,MAAMI,eAAe;IAAQC,SAAS;EAAM,CAAA,CAAA;AAE7G,SAAOL;AACT;AAEA,IAAIM,gCAAgC;AACpC,IAAMC,oBAAoB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOK,IAAMC,kCAAkC,OAAO,EAAEnB,IAAG,MAAoB;AAC7E,QAAMoB,eAAe,IAAIC,OAAOC,aAAY;AAE5C,QAAMC,aAAaH,aAAaI,iBAAgB;AAChDD,aAAWE,OAAO;AAClBF,aAAWG,UAAUC,eAAe,IAAIP,aAAaQ,WAAW;AAEhE,QAAMC,WAAWT,aAAaU,WAAU;AACxCD,WAASE,KAAKJ,eAAe,GAAGP,aAAaQ,WAAW;AACxDL,aAAWS,QAAQH,QAAAA;AAEnB,QAAMI,cAAcb,aAAac,6BAA4B;AAC7DL,WAASG,QAAQC,WAAAA;AAEjB,MAAIE,oBAAoB;AACxB,QAAMC,0BAA0B,MAAA;AAC9B,QAAID,kBAAmB;AACvBZ,eAAWc,MAAK;AAChBF,wBAAoB;EACtB;AAEA,QAAMG,qBAAqB,MAAA;AACzB,QAAIlB,aAAamB,UAAU,WAAW;AACpCtB,sCAAgC;AAChCmB,8BAAAA;IACF;AAEA,QAAIhB,aAAamB,UAAU,eAAgBnB,aAAamB,UAAqB,eAAe;AAC1FC,yBAAAA;IACF;EACF;AAEApB,eAAaqB,iBAAiB,eAAeH,kBAAAA;AAE7C,QAAME,qBAAqB,MAAA;AACzB,SAAKpB,aAAasB,OAAM,EAAGC,KAAK,MAAA;AAC9BC,kCAAAA;IACF,CAAA;EACF;AAEA,QAAMA,8BAA8B,MAAA;AAClC1B,sBAAkB2B,QAAQ,CAACC,YAAAA;AACzB1C,eAAS2C,oBAAoBD,SAASN,oBAAoB;QACxDQ,SAAS;MACX,CAAA;IACF,CAAA;EACF;AAEA,MAAI/B,+BAA+B;AACjCuB,uBAAAA;EACF,OAAO;AACLtB,sBAAkB2B,QAAQ,CAACC,YAAAA;AACzB1C,eAASqC,iBAAiBK,SAASN,oBAAoB;QACrDQ,SAAS;MACX,CAAA;IACF,CAAA;EACF;AAEAhD,MAAIiD,UAAU,YAAA;AACZL,gCAAAA;AACArB,eAAW2B,WAAU;AACrB3B,eAAW4B,KAAI;AACf,UAAM/B,aAAagC,MAAK;EAC1B,CAAA;AAEA,SAAOnB,YAAYoB,OAAOC,eAAc,EAAG,CAAA;AAC7C;",
6
+ "names": ["scheduleTaskInterval", "waitForCondition", "cancelWithContext", "invariant", "createBlackCanvasStreamTrack", "ctx", "width", "height", "canvas", "document", "createElement", "canvasCtx", "getContext", "drawFrame", "fillStyle", "fillRect", "track", "captureStream", "getVideoTracks", "condition", "readyState", "timeout", "audioContextStartedPreviously", "userGestureEvents", "createInaudibleAudioStreamTrack", "audioContext", "window", "AudioContext", "oscillator", "createOscillator", "type", "frequency", "setValueAtTime", "currentTime", "gainNode", "createGain", "gain", "connect", "destination", "createMediaStreamDestination", "oscillatorStarted", "ensureOscillatorStarted", "start", "stateChangeHandler", "state", "resumeAudioContext", "addEventListener", "resume", "then", "cleanUpUserGestureListeners", "forEach", "gesture", "removeEventListener", "capture", "onDispose", "disconnect", "stop", "close", "stream", "getAudioTracks"]
7
+ }
@@ -1,4 +1,15 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ AppGraphBuilder,
4
+ BlueprintDefinition,
5
+ CallManager as CallManager2,
6
+ IntentResolver,
7
+ Markdown,
8
+ ReactRoot,
9
+ ReactSurface,
10
+ Repair,
11
+ ThreadState
12
+ } from "./chunk-UPA2Q5YI.mjs";
2
13
  import {
3
14
  CALLS_URL,
4
15
  CallManager,
@@ -12,63 +23,55 @@ import {
12
23
  getScreenshare,
13
24
  getUserMediaTrack,
14
25
  monitorAudioLevel
15
- } from "./chunk-IHDNQLLR.mjs";
16
- import {
17
- ChannelType,
18
- ThreadAction,
19
- ThreadType
20
- } from "./chunk-TDFHTCZZ.mjs";
26
+ } from "./chunk-7KZWZS2U.mjs";
21
27
  import {
22
- AppGraphBuilder,
23
- CallManager as CallManager2,
24
- IntentResolver,
25
- Markdown,
26
- ReactRoot,
27
- ReactSurface,
28
- ThreadState
29
- } from "./chunk-GW37AAM4.mjs";
28
+ Channel_exports,
29
+ ThreadAction
30
+ } from "./chunk-P2M364TO.mjs";
30
31
  import {
31
32
  ThreadCapabilities
32
- } from "./chunk-75RJ5DJI.mjs";
33
+ } from "./chunk-RT6NRL2I.mjs";
33
34
  import {
35
+ useBlackCanvasStreamTrack,
34
36
  useDebugMode,
35
37
  useInaudibleAudioStreamTrack,
36
38
  useOnEditAnalytics,
37
39
  useStatus,
38
40
  useVideoStreamTrack
39
- } from "./chunk-25ABSYP2.mjs";
41
+ } from "./chunk-PZH2EDU5.mjs";
40
42
  import {
41
43
  createBlackCanvasStreamTrack,
42
44
  createInaudibleAudioStreamTrack
43
- } from "./chunk-OU5BYIDO.mjs";
45
+ } from "./chunk-VBI32FGI.mjs";
44
46
  import {
45
47
  THREAD_ITEM,
46
- THREAD_PLUGIN,
47
48
  meta
48
- } from "./chunk-GRLRWTRU.mjs";
49
+ } from "./chunk-2AEIN5MI.mjs";
50
+ import "./chunk-HSLMI22Q.mjs";
49
51
 
50
52
  // src/ThreadPlugin.tsx
51
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
52
- import { Ref } from "@dxos/echo";
53
+ import { Capabilities, Events, contributes, createIntent, defineModule, definePlugin } from "@dxos/app-framework";
54
+ import { Ref, Type as Type2 } from "@dxos/echo";
53
55
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
54
56
  import { MarkdownEvents } from "@dxos/plugin-markdown";
55
57
  import { SpaceCapabilities, SpaceEvents } from "@dxos/plugin-space";
56
- import { defineObjectForm } from "@dxos/plugin-space/types";
57
58
  import { translations as threadTranslations } from "@dxos/react-ui-thread";
58
- import { AnchoredTo, DataType } from "@dxos/schema";
59
+ import { AnchoredTo, Message, Thread } from "@dxos/types";
59
60
 
60
61
  // src/translations.ts
62
+ import { Type } from "@dxos/echo";
61
63
  var translations = [
62
64
  {
63
65
  "en-US": {
64
- [ChannelType.typename]: {
66
+ [Type.getTypename(Channel_exports.Channel)]: {
65
67
  "typename label": "Channel",
66
68
  "typename label_zero": "Channels",
67
69
  "typename label_one": "Channel",
68
70
  "typename label_other": "Channels",
69
71
  "object name placeholder": "New channel",
70
72
  "rename object label": "Rename channel",
71
- "delete object label": "Delete channel"
73
+ "delete object label": "Delete channel",
74
+ "object deleted label": "Channel deleted"
72
75
  },
73
76
  [meta.id]: {
74
77
  "plugin name": "Chat",
@@ -94,10 +97,12 @@ var translations = [
94
97
  "save message label": "Save",
95
98
  "edit message label": "Edit",
96
99
  "delete message label": "Delete message",
100
+ "accept proposal label": "Accept proposal",
97
101
  "open comments panel label": "Show Comments",
98
102
  "comments label": "Comments",
99
103
  "show all label": "All comments",
100
104
  "show unresolved label": "Unresolved comments",
105
+ "add comment label": "Add comment",
101
106
  "channel companion label": "Channel",
102
107
  "call panel label": "Active Call",
103
108
  "display name label": "Display name",
@@ -105,9 +110,10 @@ var translations = [
105
110
  "display name input placeholder": "Enter your name",
106
111
  "set display name label": "Continue",
107
112
  "call tab label": "Call",
108
- "meeting status title": "Meeting",
113
+ "meeting status title": "Calls",
109
114
  "share meeting link label": "Share meeting",
110
- "show webrtc stats title": "Detailed WebRTC Stats",
115
+ "show webrtc stats title": "WebRTC Stats",
116
+ "show calls history title": "Service History",
111
117
  "meeting summary label": "Summary",
112
118
  "summarize label": "Summarize",
113
119
  "summarizing label": "Creating summary...",
@@ -137,7 +143,7 @@ var translations = [
137
143
  ];
138
144
 
139
145
  // src/ThreadPlugin.tsx
140
- var ThreadPlugin = () => definePlugin(meta, [
146
+ var ThreadPlugin = definePlugin(meta, () => [
141
147
  defineModule({
142
148
  id: `${meta.id}/module/call-manager`,
143
149
  activatesOn: ClientEvents.ClientReady,
@@ -170,23 +176,27 @@ var ThreadPlugin = () => definePlugin(meta, [
170
176
  activatesOn: Events.SetupMetadata,
171
177
  activate: () => [
172
178
  contributes(Capabilities.Metadata, {
173
- id: ChannelType.typename,
179
+ id: Type2.getTypename(Channel_exports.Channel),
174
180
  metadata: {
175
- icon: "ph--hash--regular"
181
+ icon: "ph--hash--regular",
182
+ iconHue: "rose",
183
+ createObjectIntent: (_, options) => createIntent(ThreadAction.CreateChannel, {
184
+ spaceId: options.space.id
185
+ })
176
186
  }
177
187
  }),
178
188
  contributes(Capabilities.Metadata, {
179
- id: ThreadType.typename,
189
+ id: Type2.getTypename(Thread.Thread),
180
190
  metadata: {
181
191
  // TODO(wittjosiah): Move out of metadata.
182
192
  loadReferences: async (thread) => await Ref.Array.loadAll(thread.messages ?? [])
183
193
  }
184
194
  }),
185
195
  contributes(Capabilities.Metadata, {
186
- id: DataType.Message.typename,
196
+ id: Message.Message.typename,
187
197
  metadata: {
188
198
  // TODO(wittjosiah): Move out of metadata.
189
- loadReferences: (message) => []
199
+ loadReferences: () => []
190
200
  }
191
201
  }),
192
202
  contributes(Capabilities.Metadata, {
@@ -213,40 +223,33 @@ var ThreadPlugin = () => definePlugin(meta, [
213
223
  })
214
224
  ]
215
225
  }),
216
- defineModule({
217
- id: `${meta.id}/module/object-form`,
218
- activatesOn: ClientEvents.SetupSchema,
219
- activate: () => contributes(SpaceCapabilities.ObjectForm, defineObjectForm({
220
- objectSchema: ChannelType,
221
- getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, {
222
- spaceId: options.space.id
223
- })
224
- }))
225
- }),
226
226
  defineModule({
227
227
  id: `${meta.id}/module/schema`,
228
228
  activatesOn: ClientEvents.SetupSchema,
229
229
  activate: () => contributes(ClientCapabilities.Schema, [
230
- AnchoredTo,
231
- ThreadType,
232
- DataType.Message,
233
- DataType.MessageV1
230
+ AnchoredTo.AnchoredTo,
231
+ Channel_exports.Channel,
232
+ Message.Message,
233
+ Message.MessageV1,
234
+ Thread.Thread
234
235
  ])
235
236
  }),
236
237
  defineModule({
237
238
  id: `${meta.id}/module/migration`,
238
239
  activatesOn: ClientEvents.SetupMigration,
239
240
  activate: () => contributes(ClientCapabilities.Migration, [
240
- DataType.MessageV1ToV2
241
+ Message.MessageV1ToV2
241
242
  ])
242
243
  }),
243
244
  defineModule({
244
245
  id: `${meta.id}/module/on-space-created`,
245
246
  activatesOn: SpaceEvents.SpaceCreated,
246
- activate: () => contributes(SpaceCapabilities.OnSpaceCreated, ({ space, rootCollection }) => createIntent(ThreadAction.OnSpaceCreated, {
247
- space,
248
- rootCollection
249
- }))
247
+ activate: () => contributes(SpaceCapabilities.OnCreateSpace, (params) => createIntent(ThreadAction.OnCreateSpace, params))
248
+ }),
249
+ defineModule({
250
+ id: `${meta.id}/module/repair`,
251
+ activatesOn: ClientEvents.SpacesReady,
252
+ activate: Repair
250
253
  }),
251
254
  defineModule({
252
255
  id: `${meta.id}/module/markdown`,
@@ -272,6 +275,11 @@ var ThreadPlugin = () => definePlugin(meta, [
272
275
  id: `${meta.id}/module/app-graph-builder`,
273
276
  activatesOn: Events.SetupAppGraph,
274
277
  activate: AppGraphBuilder
278
+ }),
279
+ defineModule({
280
+ id: `${meta.id}/module/blueprint`,
281
+ activatesOn: Events.SetupArtifactDefinition,
282
+ activate: BlueprintDefinition
275
283
  })
276
284
  ]);
277
285
  export {
@@ -282,7 +290,6 @@ export {
282
290
  MediaManager,
283
291
  SpeakingMonitor,
284
292
  THREAD_ITEM,
285
- THREAD_PLUGIN,
286
293
  ThreadCapabilities,
287
294
  ThreadPlugin,
288
295
  TrackNameCodec,
@@ -294,6 +301,7 @@ export {
294
301
  getUserMediaTrack,
295
302
  meta,
296
303
  monitorAudioLevel,
304
+ useBlackCanvasStreamTrack,
297
305
  useDebugMode,
298
306
  useInaudibleAudioStreamTrack,
299
307
  useOnEditAnalytics,