@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d

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 (297) hide show
  1. package/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs +17 -0
  2. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +16 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-TWJ2UCOZ.mjs} +32 -32
  4. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
  6. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-4YFT4XA6.mjs} +8 -7
  8. package/dist/lib/{node-esm/call-manager-N3KASRDQ.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-ALZKJOZK.mjs} +40 -37
  10. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-ANTFU4JB.mjs +25 -0
  12. package/dist/lib/browser/chunk-ANTFU4JB.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-KEXJGF2R.mjs → chunk-ISCHODBV.mjs} +53 -3
  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-KTWYVC5X.mjs → chunk-JDJPMI7V.mjs} +47 -51
  21. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-KOBXMDCI.mjs} +68 -67
  23. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-NPT5S6N4.mjs} +164 -101
  25. package/dist/lib/browser/chunk-NPT5S6N4.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
  27. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
  28. package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-TLOOZTRD.mjs} +18 -17
  29. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +7 -0
  30. package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-ZCW3NSDZ.mjs} +274 -374
  31. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +55 -57
  33. package/dist/lib/browser/index.mjs.map +3 -3
  34. package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-G33FT3NO.mjs} +40 -113
  35. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +7 -0
  36. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-WFZFYJBQ.mjs} +30 -27
  37. package/dist/lib/browser/markdown-WFZFYJBQ.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/react-root-ED7PHA44.mjs +29 -0
  40. package/dist/lib/browser/react-root-ED7PHA44.mjs.map +7 -0
  41. package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-AUQQSQQC.mjs} +38 -36
  42. package/dist/lib/browser/react-surface-AUQQSQQC.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-GRKEID73.mjs → settings-E6IOLK46.mjs} +6 -5
  46. package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-E6IOLK46.mjs.map} +1 -1
  47. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
  48. package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
  49. package/dist/lib/browser/types/index.mjs +7 -10
  50. package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.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-XEYWX5FC.mjs → app-graph-builder-VD6I2V5H.mjs} +32 -32
  54. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +7 -0
  55. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
  56. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
  57. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-UMUXEYH5.mjs} +8 -7
  58. package/dist/lib/{browser/call-manager-EW2QC6Q4.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
  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-JR7KESLL.mjs → chunk-7KZWZS2U.mjs} +274 -374
  62. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-AB42KYF3.mjs} +40 -37
  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-ATNY37UV.mjs +27 -0
  68. package/dist/lib/node-esm/chunk-ATNY37UV.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-E5HNHFYH.mjs} +18 -17
  70. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-FF3QVPY4.mjs} +164 -101
  72. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  74. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-P2M364TO.mjs} +47 -51
  76. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +7 -0
  77. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-PZH2EDU5.mjs} +68 -67
  78. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
  80. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-VBI32FGI.mjs} +53 -3
  82. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  83. package/dist/lib/node-esm/index.mjs +55 -57
  84. package/dist/lib/node-esm/index.mjs.map +3 -3
  85. package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-4PX3WXQG.mjs} +40 -113
  86. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +7 -0
  87. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-CSR5MAPZ.mjs} +30 -27
  88. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs.map +7 -0
  89. package/dist/lib/node-esm/meta.json +1 -1
  90. package/dist/lib/node-esm/react-root-DZN324JA.mjs +30 -0
  91. package/dist/lib/node-esm/react-root-DZN324JA.mjs.map +7 -0
  92. package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-AMVESEF4.mjs} +38 -36
  93. package/dist/lib/node-esm/react-surface-AMVESEF4.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-F2ODVNNW.mjs → settings-RGZHWDSO.mjs} +6 -5
  97. package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-RGZHWDSO.mjs.map} +1 -1
  98. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
  99. package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
  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/media-manager.d.ts.map +1 -1
  104. package/dist/types/src/calls/types.d.ts.map +1 -1
  105. package/dist/types/src/calls/util/calls-service.d.ts +2 -0
  106. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  107. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  108. package/dist/types/src/calls-service.stories.d.ts +0 -1
  109. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  112. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  114. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/index.d.ts +2 -1
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/repair.d.ts +4 -0
  121. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  122. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  123. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  124. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  125. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  126. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  127. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/ChannelContainer.stories.d.ts +79 -9
  129. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Chat.stories.d.ts +79 -7
  131. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  133. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/Comments.stories.d.ts +8 -3
  135. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  137. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  138. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  139. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  140. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  141. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  142. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  143. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/MessageContainer.d.ts +4 -2
  145. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +9 -3
  147. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +9 -3
  149. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  151. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  152. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  153. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  154. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/index.d.ts +3 -3
  156. package/dist/types/src/components/index.d.ts.map +1 -1
  157. package/dist/types/src/components/testing.d.ts +3 -3
  158. package/dist/types/src/components/testing.d.ts.map +1 -1
  159. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  160. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  161. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  162. package/dist/types/src/functions/index.d.ts +2 -0
  163. package/dist/types/src/functions/index.d.ts.map +1 -0
  164. package/dist/types/src/hooks/analytics.d.ts +2 -2
  165. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  166. package/dist/types/src/hooks/index.d.ts +2 -2
  167. package/dist/types/src/hooks/index.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  169. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  170. package/dist/types/src/meta.d.ts +1 -2
  171. package/dist/types/src/meta.d.ts.map +1 -1
  172. package/dist/types/src/testing/stories.d.ts.map +1 -1
  173. package/dist/types/src/translations.d.ts +78 -7
  174. package/dist/types/src/translations.d.ts.map +1 -1
  175. package/dist/types/src/types/Channel.d.ts +16 -0
  176. package/dist/types/src/types/Channel.d.ts.map +1 -0
  177. package/dist/types/src/types/index.d.ts +1 -1
  178. package/dist/types/src/types/index.d.ts.map +1 -1
  179. package/dist/types/src/types/types.d.ts +130 -244
  180. package/dist/types/src/types/types.d.ts.map +1 -1
  181. package/dist/types/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +64 -60
  183. package/src/ThreadPlugin.tsx +135 -134
  184. package/src/calls/call-manager.ts +1 -1
  185. package/src/calls/media-manager.ts +11 -7
  186. package/src/calls/types.ts +7 -3
  187. package/src/calls/util/calls-service.ts +12 -7
  188. package/src/calls/util/stub-media-streams.ts +61 -3
  189. package/src/calls-service.stories.tsx +2 -5
  190. package/src/capabilities/app-graph-builder.ts +41 -30
  191. package/src/capabilities/blueprint-definition.ts +38 -0
  192. package/src/capabilities/capabilities.ts +7 -7
  193. package/src/capabilities/index.ts +2 -1
  194. package/src/capabilities/intent-resolver.ts +29 -67
  195. package/src/capabilities/markdown.ts +5 -3
  196. package/src/capabilities/react-root.tsx +2 -2
  197. package/src/capabilities/react-surface.tsx +25 -23
  198. package/src/capabilities/repair.ts +40 -0
  199. package/src/components/Call/Call.tsx +1 -1
  200. package/src/components/Call/Toolbar.tsx +9 -9
  201. package/src/components/CallDebugPanel.tsx +112 -55
  202. package/src/components/CallSidebar.tsx +1 -1
  203. package/src/components/ChannelContainer.stories.tsx +10 -10
  204. package/src/components/ChannelContainer.tsx +19 -15
  205. package/src/components/Chat.stories.tsx +14 -19
  206. package/src/components/ChatContainer.tsx +29 -21
  207. package/src/components/Comments.stories.tsx +11 -17
  208. package/src/components/CommentsContainer.tsx +5 -7
  209. package/src/components/CommentsThreadContainer.tsx +31 -27
  210. package/src/components/Lobby/Lobby.tsx +1 -1
  211. package/src/components/Media/VideoObject.stories.tsx +12 -7
  212. package/src/components/Media/VideoObject.tsx +1 -1
  213. package/src/components/MessageContainer.tsx +11 -9
  214. package/src/components/Participant/Participant.tsx +1 -1
  215. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  216. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  217. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  218. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  219. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  220. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  221. package/src/components/ThreadSettings.tsx +4 -5
  222. package/src/components/index.ts +4 -4
  223. package/src/components/testing.ts +7 -9
  224. package/src/extensions/threads.ts +30 -20
  225. package/src/functions/create-proposals.ts +56 -0
  226. package/src/functions/index.ts +5 -0
  227. package/src/hooks/analytics.ts +4 -7
  228. package/src/hooks/index.ts +3 -2
  229. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  230. package/src/meta.ts +9 -5
  231. package/src/testing/stories.ts +3 -6
  232. package/src/translations.ts +8 -4
  233. package/src/types/Channel.ts +26 -0
  234. package/src/types/index.ts +1 -1
  235. package/src/types/types.ts +21 -29
  236. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  237. package/src/util.ts +1 -1
  238. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
  239. package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
  240. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
  242. package/dist/lib/browser/chunk-2I277V52.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-2P3GVRHP.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  245. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  247. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
  252. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
  255. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
  256. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  257. package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
  258. package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
  259. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
  260. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  261. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  262. package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
  263. package/dist/lib/node-esm/ChatContainer-4EGHKHIU.mjs +0 -16
  264. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  269. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  274. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
  278. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs.map +0 -7
  279. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
  280. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  281. package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
  282. package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
  283. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
  284. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  285. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  286. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  287. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  288. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  289. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  290. package/dist/types/src/types/schema.d.ts +0 -177
  291. package/dist/types/src/types/schema.d.ts.map +0 -1
  292. package/src/capabilities/toolkit.ts +0 -78
  293. package/src/types/schema.ts +0 -33
  294. /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-L7MKV7DS.mjs.map} +0 -0
  295. /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-KPY4BAUE.mjs.map} +0 -0
  296. /package/dist/lib/{node-esm/ChannelContainer-D5E2S6AI.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  297. /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChannelContainer-FYONOOZ6.mjs.map} +0 -0
@@ -1,55 +1,62 @@
1
- import {
2
- ThreadAction,
3
- ThreadType
4
- } from "./chunk-KTWYVC5X.mjs";
5
1
  import {
6
2
  ChannelContainer
7
- } from "./chunk-TQJYDFBU.mjs";
3
+ } from "./chunk-ALZKJOZK.mjs";
4
+ import {
5
+ ThreadAction
6
+ } from "./chunk-JDJPMI7V.mjs";
8
7
  import {
9
8
  ThreadCapabilities
10
- } from "./chunk-4APCDRSH.mjs";
9
+ } from "./chunk-CFC7LEPD.mjs";
11
10
  import {
12
11
  MessageContainer,
13
12
  buttonClassNames,
14
13
  buttonGroupClassNames,
15
14
  command
16
- } from "./chunk-H63NDV62.mjs";
15
+ } from "./chunk-TLOOZTRD.mjs";
17
16
  import {
18
17
  useStatus
19
- } from "./chunk-2P3GVRHP.mjs";
18
+ } from "./chunk-KOBXMDCI.mjs";
20
19
  import {
21
20
  getMessageMetadata
22
- } from "./chunk-GERVMFQW.mjs";
21
+ } from "./chunk-CP7E2HRE.mjs";
23
22
  import {
24
23
  meta
25
- } from "./chunk-EV4JWI7L.mjs";
24
+ } from "./chunk-QM34EZQK.mjs";
26
25
 
27
26
  // src/components/CallDebugPanel.tsx
28
27
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
29
28
  import { WebRTCStats } from "@peermetrics/webrtc-stats";
30
29
  import React, { useEffect, useMemo, useState } from "react";
31
- import { Panel } from "@dxos/devtools";
30
+ import { truncateKey } from "@dxos/debug";
31
+ import { JsonView, Panel } from "@dxos/devtools";
32
32
  import { log } from "@dxos/log";
33
- import { Input, useTranslation } from "@dxos/react-ui";
34
- import { Json } from "@dxos/react-ui-syntax-highlighter";
33
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
35
34
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
36
35
  var CallDebugPanel = ({ state }) => {
37
36
  var _effect = _useSignals();
38
37
  try {
39
38
  const { t } = useTranslation(meta.id);
40
- const users = state?.call?.users;
41
- const self = state?.call?.self;
42
39
  const [open, setOpen] = useState(false);
43
40
  const handleToggle = () => setOpen(!open);
41
+ const [showServiceHistory, setShowServiceHistory] = useState(false);
42
+ const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);
43
+ const handleCopyRaw = async () => {
44
+ await navigator.clipboard.writeText(JSON.stringify({
45
+ users: state?.call?.users,
46
+ stats
47
+ }, null, 2));
48
+ };
44
49
  const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);
45
50
  const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);
46
51
  const webrtcStats = useMemo(() => new WebRTCStats({
47
52
  getStatsInterval: 1e3
48
53
  }), []);
49
- const [stats, setStats] = useState({});
54
+ const [stats, setStats] = useState();
50
55
  useEffect(() => {
51
56
  const pc = state?.media.peer?.session?.peerConnection;
52
- const handleStats = (stats2) => setStats(stats2.data);
57
+ const handleStats = (stats2) => {
58
+ setStats(stats2.data);
59
+ };
53
60
  let added = false;
54
61
  if (pc && showDetailedWebRTCStats) {
55
62
  webrtcStats.addConnection({
@@ -76,7 +83,7 @@ var CallDebugPanel = ({ state }) => {
76
83
  connectionId: "1"
77
84
  }, {
78
85
  F: __dxlog_file,
79
- L: 55,
86
+ L: 60,
80
87
  S: void 0,
81
88
  C: (f, a) => f(...a)
82
89
  });
@@ -86,65 +93,122 @@ var CallDebugPanel = ({ state }) => {
86
93
  state?.media.peer?.session?.peerConnection,
87
94
  showDetailedWebRTCStats
88
95
  ]);
96
+ const rows = useMemo(() => getCallStatusTable(state), [
97
+ state?.call.users,
98
+ state?.media.pulledAudioTracks
99
+ ]);
89
100
  return /* @__PURE__ */ React.createElement(Panel, {
90
101
  id: "meeting-status",
91
102
  icon: "ph--video-conference--regular",
92
103
  open,
93
104
  onToggle: handleToggle,
94
105
  title: t("meeting status title"),
95
- maxHeight: false,
96
106
  info: /* @__PURE__ */ React.createElement("div", {
97
107
  className: "flex items-center gap-2"
98
- }, /* @__PURE__ */ React.createElement("span", {
99
- title: "Joined"
100
- }, self?.joined ? "Active" : "Inactive"), users?.length !== void 0 && /* @__PURE__ */ React.createElement("span", {
101
- title: "Users"
102
- }, users?.length ?? 0, " User(s)"))
108
+ }, " ", state?.call.joined ? "Active" : "Inactive"),
109
+ maxHeight: 0
103
110
  }, /* @__PURE__ */ React.createElement("div", {
104
- className: "flex flex-col gap-2 overflow-y-auto"
111
+ className: "flex flex-col is-full text-xs"
105
112
  }, /* @__PURE__ */ React.createElement("div", {
106
- className: "flex items-row gap-2"
107
- }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
108
- classNames: "text-sm"
109
- }, t("show webrtc stats title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
113
+ className: "flex items-center gap-2 items-center"
114
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
110
115
  checked: showDetailedWebRTCStats,
111
116
  onCheckedChange: handleShowDetailedWebRTCStats
112
- }))), /* @__PURE__ */ React.createElement(Json, {
113
- classNames: "text-sm",
117
+ }), /* @__PURE__ */ React.createElement(Input.Label, null, t("show webrtc stats title")))), /* @__PURE__ */ React.createElement("div", {
118
+ className: "flex items-center gap-2 items-center"
119
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
120
+ checked: showServiceHistory,
121
+ onCheckedChange: handleToggleServiceHistory
122
+ }), /* @__PURE__ */ React.createElement(Input.Label, null, t("show calls history title")))), /* @__PURE__ */ React.createElement("div", {
123
+ className: "flex items-center gap-2 items-center"
124
+ }, /* @__PURE__ */ React.createElement(IconButton, {
125
+ icon: "ph--copy--regular",
126
+ label: "copy raw",
127
+ onClick: handleCopyRaw
128
+ })), /* @__PURE__ */ React.createElement(Table, {
129
+ rows
130
+ }), showDetailedWebRTCStats && /* @__PURE__ */ React.createElement(JsonView, {
114
131
  data: {
115
- users,
116
- activities: state?.call?.activities,
117
- ...showDetailedWebRTCStats ? {
118
- webrtc: {
119
- connectionState: state?.media.peer?.session?.peerConnection.connectionState,
120
- iceConnectionState: state?.media.peer?.session?.peerConnection.iceConnectionState,
121
- stats
122
- }
123
- } : {},
124
- tracks: state?.media.peer?.session?.peerConnection.getTransceivers().map((transceiver) => {
125
- const track = transceiver.direction === "recvonly" ? transceiver.receiver.track : transceiver.sender.track;
126
- return {
127
- id: track?.id,
128
- kind: track?.kind,
129
- direction: transceiver.direction,
130
- enabled: track?.enabled,
131
- muted: track?.muted,
132
- readyState: track?.readyState,
133
- settings: track?.getSettings()
134
- };
135
- }),
136
- callsServiceHistory: state?.media.peer?.history.get()
132
+ stats
133
+ }
134
+ }), showServiceHistory && /* @__PURE__ */ React.createElement(JsonView, {
135
+ data: {
136
+ history: state?.media.peer?.history.get()
137
137
  }
138
138
  })));
139
139
  } finally {
140
140
  _effect.f();
141
141
  }
142
142
  };
143
+ var getCallStatusTable = (state) => {
144
+ if (!state || !state.call?.users) {
145
+ return [];
146
+ }
147
+ const self = state.call.self;
148
+ const users = state.call.users.filter((user) => user.id !== self.id).map((user) => {
149
+ const isOk = {
150
+ audio: user.tracks?.audio && state.media.pulledAudioTracks[user.tracks?.audio]?.ctx.disposed === false,
151
+ video: user.tracks?.video && state.media.pulledVideoStreams[user.tracks?.video]?.ctx.disposed === false,
152
+ screenshare: user.tracks?.screenshare && state.media.pulledVideoStreams[user.tracks?.screenshare]?.ctx.disposed === false
153
+ };
154
+ return {
155
+ ...user,
156
+ isOk
157
+ };
158
+ });
159
+ return [
160
+ [
161
+ "users",
162
+ state.call.users.length ?? 0
163
+ ],
164
+ [
165
+ "*self* " + (self?.name ?? truncateKey(self.id, 8)),
166
+ self?.tracks?.audio && state.media.pushedAudioTrack ? "AUD \u2705" : "AUD \u274C",
167
+ self?.tracks?.video && state.media.pushedVideoTrack ? "VID \u2705" : "VID \u274C",
168
+ self?.tracks?.screenshareEnabled ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack ? "SCR \u2705" : "SCR \u274C" : void 0
169
+ ],
170
+ ...users.map((user) => [
171
+ user.name ?? truncateKey(user.id, 8),
172
+ user.isOk.audio ? "AUD \u2705" : "AUD \u274C",
173
+ user.isOk.video ? "VID \u2705" : "VID \u274C",
174
+ user.tracks?.screenshareEnabled ? user.isOk.screenshare ? "SCR \u2705" : "SCR \u274C" : void 0
175
+ ]),
176
+ [
177
+ "ICE",
178
+ state.media.peer?.session?.peerConnection.iceConnectionState ?? "no connection"
179
+ ]
180
+ ];
181
+ };
182
+ (function(Unit2) {
183
+ Unit2.KB = (n) => ((n ?? 0) / 1e3).toFixed(2);
184
+ })(Unit || (Unit = {}));
185
+ var Table = ({ rows }) => {
186
+ var _effect = _useSignals();
187
+ try {
188
+ return /* @__PURE__ */ React.createElement("div", {
189
+ className: "is-full text-xs font-mono"
190
+ }, rows.map(([prefix, label, value, unit], i) => /* @__PURE__ */ React.createElement("div", {
191
+ key: i,
192
+ className: "grid grid-cols-[3fr_1fr_1fr_1fr]"
193
+ }, /* @__PURE__ */ React.createElement("div", {
194
+ className: "p-1"
195
+ }, prefix), /* @__PURE__ */ React.createElement("div", {
196
+ className: "p-1"
197
+ }, label), /* @__PURE__ */ React.createElement("div", {
198
+ className: "p-1"
199
+ }, value), /* @__PURE__ */ React.createElement("div", {
200
+ className: "p-1"
201
+ }, unit))));
202
+ } finally {
203
+ _effect.f();
204
+ }
205
+ };
206
+ var Unit;
143
207
 
144
208
  // src/components/CallSidebar.tsx
145
209
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
146
210
  import React2 from "react";
147
- import { useCapability } from "@dxos/app-framework";
211
+ import { useCapability } from "@dxos/app-framework/react";
148
212
  var CallSidebar = () => {
149
213
  var _effect = _useSignals2();
150
214
  try {
@@ -157,19 +221,20 @@ var CallSidebar = () => {
157
221
  }
158
222
  };
159
223
 
160
- // src/components/ThreadComplementary.tsx
224
+ // src/components/ThreadCompanion.tsx
161
225
  import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
162
226
  import React6, { useCallback as useCallback2, useMemo as useMemo3 } from "react";
163
- import { Capabilities, CollaborationActions, LayoutAction, createIntent, useCapabilities, useCapability as useCapability2, useIntentDispatcher } from "@dxos/app-framework";
164
- import { Filter, Obj, Query, Relation as Relation3 } from "@dxos/echo";
165
- import { Ref as Ref2, fullyQualifiedId as fullyQualifiedId3, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
227
+ import { Capabilities, CollaborationActions, LayoutAction, createIntent } from "@dxos/app-framework";
228
+ import { useCapabilities, useCapability as useCapability2, useIntentDispatcher } from "@dxos/app-framework/react";
229
+ import { Filter, Obj as Obj3, Query, Relation as Relation3 } from "@dxos/echo";
230
+ import { Ref as Ref2, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
166
231
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
167
- import { useThemeContext as useThemeContext2, useTranslation as useTranslation4 } from "@dxos/react-ui";
232
+ import { useTranslation as useTranslation5 } from "@dxos/react-ui";
168
233
  import { useAttended } from "@dxos/react-ui-attention";
169
234
  import { StackItem } from "@dxos/react-ui-stack";
170
235
  import { Tabs } from "@dxos/react-ui-tabs";
171
236
  import { mx as mx2 } from "@dxos/react-ui-theme";
172
- import { AnchoredTo } from "@dxos/schema";
237
+ import { AnchoredTo, Thread } from "@dxos/types";
173
238
 
174
239
  // src/components/index.ts
175
240
  import { lazy } from "react";
@@ -177,36 +242,34 @@ import { lazy } from "react";
177
242
  // src/components/CommentsContainer.tsx
178
243
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
179
244
  import React4, { useEffect as useEffect2 } from "react";
180
- import { Relation as Relation2 } from "@dxos/echo";
181
- import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
245
+ import { Obj as Obj2, Relation as Relation2 } from "@dxos/echo";
182
246
  import { Callout, Icon, Trans, useTranslation as useTranslation3 } from "@dxos/react-ui";
183
247
 
184
248
  // src/components/CommentsThreadContainer.tsx
185
249
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
186
250
  import React3, { useCallback, useMemo as useMemo2, useRef, useState as useState2 } from "react";
187
- import { Ref, Relation } from "@dxos/echo";
188
- import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
251
+ import { Obj, Ref, Relation } from "@dxos/echo";
252
+ import { getSpace, useMembers } from "@dxos/react-client/echo";
189
253
  import { useIdentity } from "@dxos/react-client/halo";
190
- import { IconButton, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
254
+ import { IconButton as IconButton2, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
191
255
  import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
192
256
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
193
- import { MessageTextbox, Thread } from "@dxos/react-ui-thread";
257
+ import { MessageTextbox, Thread as ThreadComponent } from "@dxos/react-ui-thread";
194
258
  import { isNonNullable } from "@dxos/util";
195
259
  var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
196
260
  var _effect = _useSignals3();
197
261
  try {
262
+ const { themeMode } = useThemeContext();
198
263
  const { t } = useTranslation2(meta.id);
199
264
  const identity = useIdentity();
200
265
  const space = getSpace(anchor);
201
266
  const members = useMembers(space?.key);
202
267
  const detached = !anchor.anchor;
203
268
  const thread = Relation.getSource(anchor);
204
- const activity = useStatus(space, fullyQualifiedId(thread));
269
+ const activity = useStatus(space, Obj.getDXN(thread).toString());
205
270
  const threadScrollRef = useRef(null);
206
- const { themeMode } = useThemeContext();
207
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
208
- const [_count, _setCount] = useState2(0);
209
- const rerenderEditor = () => _setCount((count) => count + 1);
271
+ const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);
272
+ const [state, setState] = useState2({});
210
273
  const messageRef = useRef("");
211
274
  const extensions = useMemo2(() => [
212
275
  createBasicExtensions({
@@ -216,11 +279,11 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
216
279
  themeMode
217
280
  }),
218
281
  listener({
219
- onChange: (text) => messageRef.current = text
282
+ onChange: ({ text }) => messageRef.current = text
220
283
  }),
221
284
  command
222
285
  ], [
223
- _count
286
+ state
224
287
  ]);
225
288
  const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
226
289
  behavior,
@@ -253,14 +316,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
253
316
  onComment?.(anchor, messageRef.current);
254
317
  messageRef.current = "";
255
318
  scrollToEnd("instant");
256
- rerenderEditor();
319
+ setState({});
257
320
  return true;
258
321
  }, [
259
322
  anchor,
260
323
  identity
261
324
  ]);
262
- return /* @__PURE__ */ React3.createElement(Thread.Root, {
263
- id: fullyQualifiedId(thread),
325
+ return /* @__PURE__ */ React3.createElement(ThreadComponent.Root, {
326
+ id: Obj.getDXN(thread).toString(),
264
327
  classNames: "pbs-2 border-be border-subduedSeparator last:border-none",
265
328
  current,
266
329
  onClickCapture: handleAttend,
@@ -272,14 +335,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
272
335
  asChild: true,
273
336
  content: t("detached thread label"),
274
337
  side: "top"
275
- }, /* @__PURE__ */ React3.createElement(Thread.Header, {
338
+ }, /* @__PURE__ */ React3.createElement(ThreadComponent.Header, {
276
339
  detached: true
277
- }, thread.name)) : /* @__PURE__ */ React3.createElement(Thread.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
340
+ }, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadComponent.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
278
341
  role: "none",
279
342
  className: buttonGroupClassNames
280
343
  }, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
281
344
  palette: "neutral"
282
- }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton, {
345
+ }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
283
346
  "data-testid": "thread.resolve",
284
347
  variant: "ghost",
285
348
  icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
@@ -290,7 +353,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
290
353
  thread?.status !== "resolved" && hoverableControlItem
291
354
  ],
292
355
  onClick: handleResolve
293
- }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton, {
356
+ }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
294
357
  "data-testid": "thread.delete",
295
358
  variant: "ghost",
296
359
  icon: "ph--x--regular",
@@ -312,7 +375,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
312
375
  extensions,
313
376
  onSend: handleComment,
314
377
  ...textboxMetadata
315
- }), /* @__PURE__ */ React3.createElement(Thread.Status, {
378
+ }), /* @__PURE__ */ React3.createElement(ThreadComponent.Status, {
316
379
  activity
317
380
  }, t("activity message")), /* @__PURE__ */ React3.createElement("div", {
318
381
  role: "none",
@@ -361,7 +424,7 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
361
424
  }
362
425
  return /* @__PURE__ */ React4.createElement("div", null, filteredAnchors.map((anchor) => {
363
426
  const thread = Relation2.getSource(anchor);
364
- const threadId = fullyQualifiedId2(thread);
427
+ const threadId = Obj2.getDXN(thread).toString();
365
428
  return /* @__PURE__ */ React4.createElement(CommentsThreadContainer, {
366
429
  key: threadId,
367
430
  anchor,
@@ -377,10 +440,12 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
377
440
  // src/components/ThreadSettings.tsx
378
441
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
379
442
  import React5 from "react";
443
+ import { useTranslation as useTranslation4 } from "@dxos/react-ui";
380
444
  import { ControlPage } from "@dxos/react-ui-form";
381
- var ThreadSettings = ({ settings }) => {
445
+ var ThreadSettings = ({ settings: _settings }) => {
382
446
  var _effect = _useSignals5();
383
447
  try {
448
+ const { t: _t } = useTranslation4(meta.id);
384
449
  return /* @__PURE__ */ React5.createElement(ControlPage, null);
385
450
  } finally {
386
451
  _effect.f();
@@ -388,18 +453,17 @@ var ThreadSettings = ({ settings }) => {
388
453
  };
389
454
 
390
455
  // src/components/index.ts
391
- var ChannelContainer2 = lazy(() => import("./ChannelContainer-GHDNEZT2.mjs"));
392
- var ChatContainer = lazy(() => import("./ChatContainer-42ALOWUA.mjs"));
456
+ var ChannelContainer2 = lazy(() => import("./ChannelContainer-L7MKV7DS.mjs"));
457
+ var ChatContainer = lazy(() => import("./ChatContainer-KPY4BAUE.mjs"));
393
458
 
394
- // src/components/ThreadComplementary.tsx
395
- var ThreadComplementary = ({ subject }) => {
459
+ // src/components/ThreadCompanion.tsx
460
+ var ThreadCompanion = ({ subject }) => {
396
461
  var _effect = _useSignals6();
397
462
  try {
398
- const { t } = useTranslation4(meta.id);
463
+ const { t } = useTranslation5(meta.id);
399
464
  const { dispatchPromise: dispatch } = useIntentDispatcher();
400
465
  const identity = useIdentity2();
401
- const { tx } = useThemeContext2();
402
- const subjectId = fullyQualifiedId3(subject);
466
+ const subjectId = Obj3.getDXN(subject).toString();
403
467
  const { state, getViewState } = useCapability2(ThreadCapabilities.MutableState);
404
468
  const drafts = state.drafts[subjectId];
405
469
  const viewState = useMemo3(() => getViewState(subjectId), [
@@ -413,22 +477,22 @@ var ThreadComplementary = ({ subject }) => {
413
477
  viewState
414
478
  ]);
415
479
  const anchorSorts = useCapabilities(Capabilities.AnchorSort);
416
- const sort = useMemo3(() => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort, [
480
+ const sort = useMemo3(() => anchorSorts.find(({ key }) => key === Obj3.getTypename(subject))?.sort, [
417
481
  anchorSorts,
418
482
  subject
419
483
  ]);
420
484
  const space = getSpace2(subject);
421
- const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
422
- const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj.instanceOf(ThreadType, Relation3.getSource(anchor))).concat(drafts ?? []);
485
+ const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
486
+ const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj3.instanceOf(Thread.Thread, Relation3.getSource(anchor))).concat(drafts ?? []);
423
487
  const attended = useAttended();
424
488
  const handleAttend = useCallback2((anchor) => {
425
489
  const thread = Relation3.getSource(anchor);
426
- const threadId = fullyQualifiedId3(thread);
490
+ const threadId = Obj3.getDXN(thread).toString();
427
491
  if (state.current !== threadId) {
428
492
  state.current = threadId;
429
493
  void dispatch(createIntent(LayoutAction.ScrollIntoView, {
430
494
  part: "current",
431
- subject: fullyQualifiedId3(subject),
495
+ subject: Obj3.getDXN(subject).toString(),
432
496
  options: {
433
497
  cursor: anchor.anchor,
434
498
  ref: threadId
@@ -450,7 +514,7 @@ var ThreadComplementary = ({ subject }) => {
450
514
  text
451
515
  }));
452
516
  const thread = Relation3.getSource(anchor);
453
- state.current = fullyQualifiedId3(thread);
517
+ state.current = Obj3.getDXN(thread).toString();
454
518
  }, [
455
519
  dispatch,
456
520
  identity,
@@ -508,8 +572,7 @@ var ThreadComplementary = ({ subject }) => {
508
572
  onAcceptProposal: handleAcceptProposal
509
573
  });
510
574
  return /* @__PURE__ */ React6.createElement(StackItem.Content, {
511
- toolbar: true,
512
- classNames: "overflow-hidden"
575
+ toolbar: true
513
576
  }, /* @__PURE__ */ React6.createElement(Tabs.Root, {
514
577
  value: showResolvedThreads ? "all" : "unresolved",
515
578
  orientation: "horizontal",
@@ -518,7 +581,7 @@ var ThreadComplementary = ({ subject }) => {
518
581
  ],
519
582
  onValueChange: onChangeViewState
520
583
  }, /* @__PURE__ */ React6.createElement(Tabs.Tablist, {
521
- classNames: mx2("bg-toolbarSurface border-b border-subduedSeparator")
584
+ classNames: mx2("bg-toolbarSurface border-be border-subduedSeparator")
522
585
  }, /* @__PURE__ */ React6.createElement(Tabs.Tab, {
523
586
  value: "unresolved",
524
587
  classNames: "text-sm"
@@ -540,9 +603,9 @@ var ThreadComplementary = ({ subject }) => {
540
603
  export {
541
604
  CallDebugPanel,
542
605
  CallSidebar,
543
- ThreadComplementary,
606
+ ThreadCompanion,
544
607
  ThreadSettings,
545
608
  ChannelContainer2 as ChannelContainer,
546
609
  ChatContainer
547
610
  };
548
- //# sourceMappingURL=chunk-J26C57ZY.mjs.map
611
+ //# sourceMappingURL=chunk-NPT5S6N4.mjs.map
@@ -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.ids(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", "ids", "targetOf", "AnchoredTo", "anchors", "toSorted", "a", "b", "filter", "anchor", "instanceOf", "Thread", "Relation", "getSource", "concat", "attended", "useAttended", "handleAttend", "thread", "threadId", "current", "createIntent", "LayoutAction", "ScrollIntoView", "part", "options", "cursor", "ref", "handleComment", "text", "ThreadAction", "AddMessage", "sender", "identityDid", "did", "handleResolve", "ToggleResolved", "handleThreadDelete", "Delete", "handleMessageDelete", "messageId", "DeleteMessage", "handleAcceptProposal", "messageIndex", "messages", "findIndex", "Ref", "hasObjectId", "message", "target", "proposal", "blocks", "block", "_tag", "CollaborationActions", "AcceptProposal", "comments", "React", "CommentsContainer", "currentId", "includes", "undefined", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "StackItem", "Content", "toolbar", "Tabs", "Root", "value", "orientation", "classNames", "onValueChange", "Tablist", "mx", "Tab", "div", "className", "Tabpanel"]
7
+ }
@@ -0,0 +1,20 @@
1
+ // src/meta.ts
2
+ import { trim } from "@dxos/util";
3
+ var meta = {
4
+ id: "dxos.org/plugin/thread",
5
+ name: "Chat",
6
+ description: trim`
7
+ Multi-modal communication platform supporting text chat, voice, and video conferencing.
8
+ Create threaded conversations and add contextual comments directly on any workspace object.
9
+ `,
10
+ icon: "ph--video-conference--regular",
11
+ iconHue: "rose",
12
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread"
13
+ };
14
+ var THREAD_ITEM = `${meta.id}/item`;
15
+
16
+ export {
17
+ meta,
18
+ THREAD_ITEM
19
+ };
20
+ //# sourceMappingURL=chunk-QM34EZQK.mjs.map