@dxos/plugin-thread 0.8.3 → 0.8.4-main.1f223c7

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 (320) hide show
  1. package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-EXNNREYB.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-OY7R7EJP.mjs → app-graph-builder-FHAOPO57.mjs} +8 -8
  4. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-APQAZWHT.mjs → call-manager-RMPTWSTF.mjs} +6 -5
  6. package/dist/lib/browser/call-manager-RMPTWSTF.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-R5MDLUPC.mjs → chunk-4APCDRSH.mjs} +3 -3
  8. package/dist/lib/browser/{chunk-R5MDLUPC.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-XZKBN3NS.mjs → chunk-7W7QK5ZP.mjs} +253 -250
  10. package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-IIUTBDVB.mjs → chunk-EV4JWI7L.mjs} +2 -2
  12. package/dist/lib/browser/chunk-G4CNILRR.mjs +23 -0
  13. package/dist/lib/browser/{chunk-6NBVNXTM.mjs.map → chunk-G4CNILRR.mjs.map} +3 -3
  14. package/dist/lib/browser/{chunk-JKQUJOTX.mjs → chunk-GERVMFQW.mjs} +2 -2
  15. package/dist/lib/browser/{chunk-AEXWNS6Z.mjs → chunk-KTWYVC5X.mjs} +34 -15
  16. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-TAFSCSUR.mjs → chunk-PBMNFG3B.mjs} +97 -72
  18. package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-RI3Z6MK3.mjs +181 -0
  20. package/dist/lib/browser/chunk-RI3Z6MK3.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-XYUJXHYV.mjs +106 -0
  22. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-4H4A264L.mjs → chunk-ZCEU5K23.mjs} +490 -308
  24. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-PG5CTFKK.mjs → chunk-ZH2WPTNP.mjs} +226 -158
  26. package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +7 -0
  27. package/dist/lib/browser/index.mjs +49 -44
  28. package/dist/lib/browser/index.mjs.map +3 -3
  29. package/dist/lib/browser/{intent-resolver-FK2MDVDT.mjs → intent-resolver-J7OCP2P6.mjs} +90 -16
  30. package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +7 -0
  31. package/dist/lib/browser/{markdown-TE5SWWNJ.mjs → markdown-Z677YORA.mjs} +8 -8
  32. package/dist/lib/browser/markdown-Z677YORA.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/react-root-XKOD4KRB.mjs +28 -0
  35. package/dist/lib/browser/{react-surface-VXUJKSOG.mjs → react-surface-GVGZRBDK.mjs} +12 -11
  36. package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +7 -0
  37. package/dist/lib/browser/{settings-RB2RSLXV.mjs → settings-GRKEID73.mjs} +4 -4
  38. package/dist/lib/browser/{state-RKL5MSDP.mjs → state-2T4KDWBX.mjs} +4 -4
  39. package/dist/lib/browser/{state-RKL5MSDP.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  40. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +80 -0
  41. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +2 -2
  43. package/dist/lib/node-esm/ChannelContainer-KQQEZWUN.mjs +17 -0
  44. package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs → ChatContainer-QVQKFBWA.mjs} +6 -5
  45. package/dist/lib/node-esm/{app-graph-builder-BAHBHYWI.mjs → app-graph-builder-XEYWX5FC.mjs} +8 -8
  46. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +7 -0
  47. package/dist/lib/node-esm/{call-manager-UUYXLF4T.mjs → call-manager-QAREJFVX.mjs} +6 -5
  48. package/dist/lib/node-esm/call-manager-QAREJFVX.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs +108 -0
  50. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-4T45PCKP.mjs +25 -0
  52. package/dist/lib/node-esm/{chunk-O63QJPQX.mjs.map → chunk-4T45PCKP.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs → chunk-57XR3LEF.mjs} +2 -2
  54. package/dist/lib/node-esm/{chunk-P6RLFCNT.mjs → chunk-DKCQCENK.mjs} +97 -72
  55. package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +7 -0
  56. package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs → chunk-GRLRWTRU.mjs} +2 -2
  57. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs +182 -0
  58. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-UZWVVFT3.mjs → chunk-LE2LIYGX.mjs} +226 -158
  60. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-UJMPYKT3.mjs → chunk-P6E247RF.mjs} +34 -15
  62. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs → chunk-PYTVBN5J.mjs} +3 -3
  64. package/dist/lib/node-esm/{chunk-K4KAUOKT.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  65. package/dist/lib/node-esm/{chunk-2RNIPFDA.mjs → chunk-SNKFZQST.mjs} +253 -250
  66. package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-WXNPD542.mjs → chunk-TIPIOH2J.mjs} +489 -308
  68. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +49 -44
  70. package/dist/lib/node-esm/index.mjs.map +3 -3
  71. package/dist/lib/node-esm/{intent-resolver-BU73VYW3.mjs → intent-resolver-SR2LW4HF.mjs} +90 -16
  72. package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +7 -0
  73. package/dist/lib/node-esm/{markdown-HJUWNBLS.mjs → markdown-FL4IXLRP.mjs} +8 -8
  74. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-root-RUXOAQNW.mjs → react-root-4JWDRIQB.mjs} +12 -11
  77. package/dist/lib/{browser/react-root-NK3A4VG7.mjs.map → node-esm/react-root-4JWDRIQB.mjs.map} +1 -1
  78. package/dist/lib/node-esm/{react-surface-ELXFYKP6.mjs → react-surface-WLQUVRAX.mjs} +12 -11
  79. package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +7 -0
  80. package/dist/lib/node-esm/{settings-EA7DFSM6.mjs → settings-F2ODVNNW.mjs} +4 -4
  81. package/dist/lib/node-esm/{state-6AUTNROZ.mjs → state-62TQKQVB.mjs} +4 -4
  82. package/dist/lib/node-esm/{state-6AUTNROZ.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  83. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +81 -0
  84. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +7 -0
  85. package/dist/lib/node-esm/types/index.mjs +2 -2
  86. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  87. package/dist/types/src/calls/call-manager.d.ts +1 -1
  88. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  90. package/dist/types/src/calls/media-manager.d.ts +1 -1
  91. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  92. package/dist/types/src/calls/types.d.ts +1 -1
  93. package/dist/types/src/calls/types.d.ts.map +1 -1
  94. package/dist/types/src/calls/util/calls-service.d.ts +8 -3
  95. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  96. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  97. package/dist/types/src/calls-service.stories.d.ts +24 -0
  98. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/call-manager.d.ts +1 -1
  102. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  104. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/index.d.ts +11 -10
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  108. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  110. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-root.d.ts +2 -2
  112. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +1 -1
  115. package/dist/types/src/capabilities/state.d.ts +2 -2
  116. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  118. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  119. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  120. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  121. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  122. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  123. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  124. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/ChannelContainer.stories.d.ts +89 -4
  126. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  127. package/dist/types/src/components/Chat.stories.d.ts +90 -3
  128. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  130. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  131. package/dist/types/src/components/Comments.stories.d.ts +156 -3
  132. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/CommentsContainer.d.ts +4 -4
  134. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/CommentsThreadContainer.d.ts +14 -0
  136. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -0
  137. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  138. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  139. package/dist/types/src/components/Media/VideoObject.stories.d.ts +15 -3
  140. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/MessageContainer.d.ts +4 -1
  142. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  143. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  144. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  145. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +154 -2
  146. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +156 -3
  148. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  149. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  150. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  151. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  152. package/dist/types/src/components/index.d.ts +1 -1
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/components/testing.d.ts +1 -0
  155. package/dist/types/src/components/testing.d.ts.map +1 -1
  156. package/dist/types/src/extensions/threads.d.ts +2 -2
  157. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  158. package/dist/types/src/hooks/index.d.ts +3 -0
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  161. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  163. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  165. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  166. package/dist/types/src/testing/stories.d.ts.map +1 -1
  167. package/dist/types/src/translations.d.ts +76 -194
  168. package/dist/types/src/translations.d.ts.map +1 -1
  169. package/dist/types/src/types/schema.d.ts +125 -81
  170. package/dist/types/src/types/schema.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +270 -139
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/src/util.d.ts +17 -2
  174. package/dist/types/src/util.d.ts.map +1 -1
  175. package/dist/types/tsconfig.tsbuildinfo +1 -1
  176. package/package.json +56 -53
  177. package/src/ThreadPlugin.tsx +16 -24
  178. package/src/calls/call-manager.ts +8 -4
  179. package/src/calls/call-swarm-synchronizer.ts +1 -1
  180. package/src/calls/media-manager.ts +70 -37
  181. package/src/calls/types.ts +8 -4
  182. package/src/calls/util/calls-service.ts +72 -18
  183. package/src/calls/util/stub-media-streams.ts +62 -8
  184. package/src/calls-service.stories.tsx +232 -0
  185. package/src/capabilities/app-graph-builder.ts +8 -5
  186. package/src/capabilities/call-manager.ts +3 -2
  187. package/src/capabilities/capabilities.ts +2 -2
  188. package/src/capabilities/index.ts +1 -0
  189. package/src/capabilities/intent-resolver.ts +60 -8
  190. package/src/capabilities/markdown.ts +4 -3
  191. package/src/capabilities/react-surface.tsx +5 -4
  192. package/src/capabilities/state.ts +2 -1
  193. package/src/capabilities/toolkit.ts +78 -0
  194. package/src/components/Call/Call.tsx +4 -3
  195. package/src/components/Call/Toolbar.tsx +8 -8
  196. package/src/components/CallDebugPanel.tsx +110 -51
  197. package/src/components/CallSidebar.tsx +2 -1
  198. package/src/components/ChannelContainer.stories.tsx +11 -10
  199. package/src/components/ChannelContainer.tsx +13 -11
  200. package/src/components/Chat.stories.tsx +29 -27
  201. package/src/components/ChatContainer.tsx +20 -15
  202. package/src/components/Comments.stories.tsx +52 -41
  203. package/src/components/CommentsContainer.tsx +17 -11
  204. package/src/components/{CommentContainer.tsx → CommentsThreadContainer.tsx} +53 -82
  205. package/src/components/Lobby/Lobby.tsx +1 -1
  206. package/src/components/Media/VideoObject.stories.tsx +30 -27
  207. package/src/components/MessageContainer.tsx +65 -47
  208. package/src/components/Participant/Participant.tsx +13 -7
  209. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  210. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +7 -6
  211. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +42 -39
  212. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  213. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +4 -4
  214. package/src/components/ThreadComplementary.tsx +40 -10
  215. package/src/components/ThreadSettings.tsx +4 -4
  216. package/src/components/command-extension.ts +5 -2
  217. package/src/components/index.ts +1 -1
  218. package/src/components/testing.ts +24 -2
  219. package/src/extensions/threads.ts +6 -6
  220. package/src/hooks/index.ts +3 -0
  221. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  222. package/src/hooks/useDebugMode.ts +1 -1
  223. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  224. package/src/hooks/useVideoStreamTrack.tsx +36 -0
  225. package/src/testing/stories.ts +7 -3
  226. package/src/translations.ts +14 -9
  227. package/src/types/types.ts +28 -11
  228. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  229. package/src/typings.d.ts +8 -0
  230. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  231. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  232. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
  233. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-5P5BH5GE.mjs +0 -88
  236. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  238. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
  239. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  242. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
  243. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
  244. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  245. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
  246. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  247. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  248. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  249. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  250. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  251. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  252. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  253. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  254. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  255. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  256. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  257. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  258. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  259. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  260. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  261. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  262. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  263. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  264. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  265. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  266. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  267. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  268. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  269. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  270. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  271. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  272. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  273. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  274. package/dist/lib/node/index.cjs +0 -310
  275. package/dist/lib/node/index.cjs.map +0 -7
  276. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  277. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  278. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  279. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  280. package/dist/lib/node/meta.json +0 -1
  281. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  282. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  283. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  284. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  285. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  286. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  287. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  288. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  289. package/dist/lib/node/types/index.cjs +0 -38
  290. package/dist/lib/node/types/index.cjs.map +0 -7
  291. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  292. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
  293. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-O3V45YJP.mjs +0 -90
  296. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  298. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  301. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  302. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
  303. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
  304. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
  305. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  306. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  307. package/dist/types/src/peers.stories.d.ts +0 -11
  308. package/dist/types/src/peers.stories.d.ts.map +0 -1
  309. package/src/peers.stories.tsx +0 -189
  310. /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → ChannelContainer-4PYFOIDK.mjs.map} +0 -0
  311. /package/dist/lib/browser/{ChatContainer-RSOKYAMK.mjs.map → ChatContainer-EXNNREYB.mjs.map} +0 -0
  312. /package/dist/lib/browser/{chunk-IIUTBDVB.mjs.map → chunk-EV4JWI7L.mjs.map} +0 -0
  313. /package/dist/lib/browser/{chunk-JKQUJOTX.mjs.map → chunk-GERVMFQW.mjs.map} +0 -0
  314. /package/dist/lib/{node-esm/react-root-RUXOAQNW.mjs.map → browser/react-root-XKOD4KRB.mjs.map} +0 -0
  315. /package/dist/lib/browser/{settings-RB2RSLXV.mjs.map → settings-GRKEID73.mjs.map} +0 -0
  316. /package/dist/lib/node-esm/{ChannelContainer-O4QJII2P.mjs.map → ChannelContainer-KQQEZWUN.mjs.map} +0 -0
  317. /package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs.map → ChatContainer-QVQKFBWA.mjs.map} +0 -0
  318. /package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs.map → chunk-57XR3LEF.mjs.map} +0 -0
  319. /package/dist/lib/node-esm/{chunk-ESQC6SYE.mjs.map → chunk-GRLRWTRU.mjs.map} +0 -0
  320. /package/dist/lib/node-esm/{settings-EA7DFSM6.mjs.map → settings-F2ODVNNW.mjs.map} +0 -0
@@ -1,53 +1,63 @@
1
1
  import {
2
2
  ThreadAction,
3
3
  ThreadType
4
- } from "./chunk-AEXWNS6Z.mjs";
4
+ } from "./chunk-KTWYVC5X.mjs";
5
5
  import {
6
6
  ChannelContainer
7
- } from "./chunk-XZKBN3NS.mjs";
7
+ } from "./chunk-7W7QK5ZP.mjs";
8
8
  import {
9
9
  ThreadCapabilities
10
- } from "./chunk-R5MDLUPC.mjs";
10
+ } from "./chunk-4APCDRSH.mjs";
11
11
  import {
12
12
  MessageContainer,
13
+ buttonClassNames,
14
+ buttonGroupClassNames,
13
15
  command
14
- } from "./chunk-TAFSCSUR.mjs";
16
+ } from "./chunk-PBMNFG3B.mjs";
15
17
  import {
16
18
  useStatus
17
- } from "./chunk-5P5BH5GE.mjs";
19
+ } from "./chunk-RI3Z6MK3.mjs";
18
20
  import {
19
21
  getMessageMetadata
20
- } from "./chunk-JKQUJOTX.mjs";
22
+ } from "./chunk-GERVMFQW.mjs";
21
23
  import {
22
- THREAD_PLUGIN
23
- } from "./chunk-IIUTBDVB.mjs";
24
+ meta
25
+ } from "./chunk-EV4JWI7L.mjs";
24
26
 
25
- // packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx
27
+ // src/components/CallDebugPanel.tsx
26
28
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
27
29
  import { WebRTCStats } from "@peermetrics/webrtc-stats";
28
30
  import React, { useEffect, useMemo, useState } from "react";
29
- import { Panel } from "@dxos/devtools";
31
+ import { truncateKey } from "@dxos/debug";
32
+ import { JsonView, Panel } from "@dxos/devtools";
30
33
  import { log } from "@dxos/log";
31
- import { Input, useTranslation } from "@dxos/react-ui";
32
- import { Json } from "@dxos/react-ui-syntax-highlighter";
33
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
34
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
35
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
34
36
  var CallDebugPanel = ({ state }) => {
35
37
  var _effect = _useSignals();
36
38
  try {
37
- const users = state?.call?.users;
38
- const self = state?.call?.self;
39
- const { t } = useTranslation(THREAD_PLUGIN);
39
+ const { t } = useTranslation(meta.id);
40
40
  const [open, setOpen] = useState(false);
41
41
  const handleToggle = () => setOpen(!open);
42
+ const [showServiceHistory, setShowServiceHistory] = useState(false);
43
+ const handleToggleServiceHistory = () => setShowServiceHistory(!showServiceHistory);
44
+ const handleCopyRaw = async () => {
45
+ await navigator.clipboard.writeText(JSON.stringify({
46
+ users: state?.call?.users,
47
+ stats
48
+ }, null, 2));
49
+ };
42
50
  const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);
43
51
  const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);
44
52
  const webrtcStats = useMemo(() => new WebRTCStats({
45
53
  getStatsInterval: 1e3
46
54
  }), []);
47
- const [stats, setStats] = useState({});
55
+ const [stats, setStats] = useState();
48
56
  useEffect(() => {
49
57
  const pc = state?.media.peer?.session?.peerConnection;
50
- const handleStats = (stats2) => setStats(stats2.data);
58
+ const handleStats = (stats2) => {
59
+ setStats(stats2.data);
60
+ };
51
61
  let added = false;
52
62
  if (pc && showDetailedWebRTCStats) {
53
63
  webrtcStats.addConnection({
@@ -74,7 +84,7 @@ var CallDebugPanel = ({ state }) => {
74
84
  connectionId: "1"
75
85
  }, {
76
86
  F: __dxlog_file,
77
- L: 55,
87
+ L: 62,
78
88
  S: void 0,
79
89
  C: (f, a) => f(...a)
80
90
  });
@@ -84,6 +94,10 @@ var CallDebugPanel = ({ state }) => {
84
94
  state?.media.peer?.session?.peerConnection,
85
95
  showDetailedWebRTCStats
86
96
  ]);
97
+ const rows = useMemo(() => getCallStatusTable(state), [
98
+ state?.call.users,
99
+ state?.media.pulledAudioTracks
100
+ ]);
87
101
  return /* @__PURE__ */ React.createElement(Panel, {
88
102
  id: "meeting-status",
89
103
  icon: "ph--video-conference--regular",
@@ -93,53 +107,111 @@ var CallDebugPanel = ({ state }) => {
93
107
  maxHeight: false,
94
108
  info: /* @__PURE__ */ React.createElement("div", {
95
109
  className: "flex items-center gap-2"
96
- }, /* @__PURE__ */ React.createElement("span", {
97
- title: "Joined"
98
- }, self?.joined ? "Active" : "Inactive"), users?.length !== void 0 && /* @__PURE__ */ React.createElement("span", {
99
- title: "Users"
100
- }, users?.length ?? 0, " User(s)"))
110
+ }, " ", state?.call.joined ? "Active" : "Inactive")
101
111
  }, /* @__PURE__ */ React.createElement("div", {
102
- className: "flex flex-col gap-2 overflow-y-auto"
112
+ className: "flex flex-col w-full gap-2 text-xs"
103
113
  }, /* @__PURE__ */ React.createElement("div", {
104
- className: "flex items-row gap-2"
114
+ className: "flex items-center gap-2"
105
115
  }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
106
116
  classNames: "text-sm"
107
117
  }, t("show webrtc stats title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
108
118
  checked: showDetailedWebRTCStats,
109
119
  onCheckedChange: handleShowDetailedWebRTCStats
110
- }))), /* @__PURE__ */ React.createElement(Json, {
120
+ }))), /* @__PURE__ */ React.createElement("div", {
121
+ className: "flex items-center gap-2"
122
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, {
123
+ classNames: "text-sm"
124
+ }, t("show calls history title")), /* @__PURE__ */ React.createElement(Input.Checkbox, {
125
+ checked: showServiceHistory,
126
+ onCheckedChange: handleToggleServiceHistory
127
+ }))), /* @__PURE__ */ React.createElement("div", {
128
+ className: "flex items-center gap-2"
129
+ }, /* @__PURE__ */ React.createElement(IconButton, {
111
130
  classNames: "text-sm",
131
+ icon: "ph--copy--regular",
132
+ label: "copy raw",
133
+ onClick: handleCopyRaw
134
+ })), /* @__PURE__ */ React.createElement(Table, {
135
+ rows
136
+ }), showDetailedWebRTCStats && /* @__PURE__ */ React.createElement(JsonView, {
112
137
  data: {
113
- users,
114
- activities: state?.call?.activities,
115
- ...showDetailedWebRTCStats ? {
116
- webrtc: {
117
- connectionState: state?.media.peer?.session?.peerConnection.connectionState,
118
- iceConnectionState: state?.media.peer?.session?.peerConnection.iceConnectionState,
119
- stats
120
- }
121
- } : {},
122
- tracks: state?.media.peer?.session?.peerConnection.getTransceivers().map((transceiver) => {
123
- const track = transceiver.direction === "recvonly" ? transceiver.receiver.track : transceiver.sender.track;
124
- return {
125
- id: track?.id,
126
- kind: track?.kind,
127
- direction: transceiver.direction,
128
- enabled: track?.enabled,
129
- muted: track?.muted,
130
- readyState: track?.readyState,
131
- settings: track?.getSettings()
132
- };
133
- }),
134
- callsServiceHistory: state?.media.peer?.history.get()
138
+ stats
139
+ }
140
+ }), showServiceHistory && /* @__PURE__ */ React.createElement(JsonView, {
141
+ data: {
142
+ history: state?.media.peer?.history.get()
135
143
  }
136
144
  })));
137
145
  } finally {
138
146
  _effect.f();
139
147
  }
140
148
  };
149
+ var getCallStatusTable = (state) => {
150
+ if (!state || !state.call?.users) {
151
+ return [];
152
+ }
153
+ const self = state.call.self;
154
+ const users = state.call.users.filter((user) => user.id !== self.id).map((user) => {
155
+ const isOk = {
156
+ audio: user.tracks?.audio && state.media.pulledAudioTracks[user.tracks?.audio]?.ctx.disposed === false,
157
+ video: user.tracks?.video && state.media.pulledVideoStreams[user.tracks?.video]?.ctx.disposed === false,
158
+ screenshare: user.tracks?.screenshare && state.media.pulledVideoStreams[user.tracks?.screenshare]?.ctx.disposed === false
159
+ };
160
+ return {
161
+ ...user,
162
+ isOk
163
+ };
164
+ });
165
+ return [
166
+ [
167
+ "users",
168
+ state.call.users.length ?? 0
169
+ ],
170
+ [
171
+ "*self* " + (self?.name ?? truncateKey(self.id, 8)),
172
+ self?.tracks?.audio && state.media.pushedAudioTrack ? "AUD \u2705" : "AUD \u274C",
173
+ self?.tracks?.video && state.media.pushedVideoTrack ? "VID \u2705" : "VID \u274C",
174
+ self?.tracks?.screenshareEnabled ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack ? "SCR \u2705" : "SCR \u274C" : void 0
175
+ ],
176
+ ...users.map((user) => [
177
+ user.name ?? truncateKey(user.id, 8),
178
+ user.isOk.audio ? "AUD \u2705" : "AUD \u274C",
179
+ user.isOk.video ? "VID \u2705" : "VID \u274C",
180
+ user.tracks?.screenshareEnabled ? user.isOk.screenshare ? "SCR \u2705" : "SCR \u274C" : void 0
181
+ ]),
182
+ [
183
+ "ICE",
184
+ state.media.peer?.session?.peerConnection.iceConnectionState ?? "no connection"
185
+ ]
186
+ ];
187
+ };
188
+ (function(Unit2) {
189
+ Unit2.KB = (n) => ((n ?? 0) / 1e3).toFixed(2);
190
+ })(Unit || (Unit = {}));
191
+ var Table = ({ rows }) => {
192
+ var _effect = _useSignals();
193
+ try {
194
+ return /* @__PURE__ */ React.createElement("div", {
195
+ className: "w-full text-xs font-mono"
196
+ }, rows.map(([prefix, label, value, unit], i) => /* @__PURE__ */ React.createElement("div", {
197
+ key: i,
198
+ className: "grid grid-cols-[3fr_1fr_1fr_1fr]"
199
+ }, /* @__PURE__ */ React.createElement("div", {
200
+ className: "p-1"
201
+ }, prefix), /* @__PURE__ */ React.createElement("div", {
202
+ className: "p-1"
203
+ }, label), /* @__PURE__ */ React.createElement("div", {
204
+ className: "p-1"
205
+ }, value), /* @__PURE__ */ React.createElement("div", {
206
+ className: "p-1"
207
+ }, unit))));
208
+ } finally {
209
+ _effect.f();
210
+ }
211
+ };
212
+ var Unit;
141
213
 
142
- // packages/plugins/plugin-thread/src/components/CallSidebar.tsx
214
+ // src/components/CallSidebar.tsx
143
215
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
144
216
  import React2 from "react";
145
217
  import { useCapability } from "@dxos/app-framework";
@@ -155,100 +227,51 @@ var CallSidebar = () => {
155
227
  }
156
228
  };
157
229
 
158
- // packages/plugins/plugin-thread/src/components/ThreadComplementary.tsx
230
+ // src/components/ThreadComplementary.tsx
159
231
  import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
160
232
  import React6, { useCallback as useCallback2, useMemo as useMemo3 } from "react";
161
- import { Capabilities, LayoutAction, createIntent, useCapability as useCapability2, useCapabilities, useIntentDispatcher } from "@dxos/app-framework";
233
+ import { Capabilities, CollaborationActions, LayoutAction, createIntent, useCapabilities, useCapability as useCapability2, useIntentDispatcher } from "@dxos/app-framework";
162
234
  import { Filter, Obj, Query, Relation as Relation3 } from "@dxos/echo";
163
- import { fullyQualifiedId as fullyQualifiedId3, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
235
+ import { Ref as Ref2, fullyQualifiedId as fullyQualifiedId3, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
164
236
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
165
237
  import { useThemeContext as useThemeContext2, useTranslation as useTranslation4 } from "@dxos/react-ui";
166
238
  import { useAttended } from "@dxos/react-ui-attention";
167
239
  import { StackItem } from "@dxos/react-ui-stack";
168
240
  import { Tabs } from "@dxos/react-ui-tabs";
241
+ import { mx as mx2 } from "@dxos/react-ui-theme";
169
242
  import { AnchoredTo } from "@dxos/schema";
170
243
 
171
- // packages/plugins/plugin-thread/src/components/index.ts
244
+ // src/components/index.ts
172
245
  import { lazy } from "react";
173
246
 
174
- // packages/plugins/plugin-thread/src/components/CommentContainer.tsx
247
+ // src/components/CommentsContainer.tsx
248
+ import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
249
+ import React4, { useEffect as useEffect2 } from "react";
250
+ import { Relation as Relation2 } from "@dxos/echo";
251
+ import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
252
+ import { Callout, Icon, Trans, useTranslation as useTranslation3 } from "@dxos/react-ui";
253
+
254
+ // src/components/CommentsThreadContainer.tsx
175
255
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
176
- import { CheckCircle, X } from "@phosphor-icons/react";
177
256
  import React3, { useCallback, useMemo as useMemo2, useRef, useState as useState2 } from "react";
178
- import { Relation } from "@dxos/echo";
179
- import { RefArray } from "@dxos/live-object";
257
+ import { Ref, Relation } from "@dxos/echo";
180
258
  import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
181
259
  import { useIdentity } from "@dxos/react-client/halo";
182
- import { Button, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
260
+ import { IconButton as IconButton2, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
183
261
  import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
184
- import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
185
- import { MessageTextbox, Thread, ThreadFooter, ThreadHeading } from "@dxos/react-ui-thread";
262
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
263
+ import { MessageTextbox, Thread } from "@dxos/react-ui-thread";
186
264
  import { isNonNullable } from "@dxos/util";
187
- var sizeClass = getSize(4);
188
- var commentControlClassNames = "!p-1 !min-bs-0 transition-opacity";
189
- var ToggleResolvedButton = ({ isResolved, onResolve }) => {
190
- var _effect = _useSignals3();
191
- try {
192
- const { t } = useTranslation2(THREAD_PLUGIN);
193
- const label = t(isResolved ? "mark as unresolved label" : "mark as resolved label");
194
- return /* @__PURE__ */ React3.createElement(Tooltip.Trigger, {
195
- asChild: true,
196
- content: label
197
- }, /* @__PURE__ */ React3.createElement(Button, {
198
- variant: "ghost",
199
- "data-testid": "thread.toggle-resolved",
200
- onClick: onResolve,
201
- classNames: [
202
- commentControlClassNames,
203
- !isResolved && hoverableControlItem
204
- ]
205
- }, /* @__PURE__ */ React3.createElement("span", {
206
- className: "sr-only"
207
- }, label), isResolved ? /* @__PURE__ */ React3.createElement(CheckCircle, {
208
- className: sizeClass,
209
- weight: "fill"
210
- }) : /* @__PURE__ */ React3.createElement(CheckCircle, {
211
- className: sizeClass
212
- })));
213
- } finally {
214
- _effect.f();
215
- }
216
- };
217
- var DeleteThreadButton = ({ onDelete }) => {
218
- var _effect = _useSignals3();
219
- try {
220
- const { t } = useTranslation2(THREAD_PLUGIN);
221
- const label = t("delete thread label");
222
- return /* @__PURE__ */ React3.createElement(Tooltip.Trigger, {
223
- asChild: true,
224
- content: label
225
- }, /* @__PURE__ */ React3.createElement(Button, {
226
- variant: "ghost",
227
- "data-testid": "thread.delete",
228
- onClick: onDelete,
229
- classNames: [
230
- commentControlClassNames,
231
- hoverableControlItem
232
- ]
233
- }, /* @__PURE__ */ React3.createElement("span", {
234
- className: "sr-only"
235
- }, label), /* @__PURE__ */ React3.createElement(X, {
236
- className: sizeClass
237
- })));
238
- } finally {
239
- _effect.f();
240
- }
241
- };
242
- var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete }) => {
265
+ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
243
266
  var _effect = _useSignals3();
244
267
  try {
268
+ const { t } = useTranslation2(meta.id);
245
269
  const identity = useIdentity();
246
270
  const space = getSpace(anchor);
247
271
  const members = useMembers(space?.key);
248
272
  const detached = !anchor.anchor;
249
273
  const thread = Relation.getSource(anchor);
250
274
  const activity = useStatus(space, fullyQualifiedId(thread));
251
- const { t } = useTranslation2(THREAD_PLUGIN);
252
275
  const threadScrollRef = useRef(null);
253
276
  const { themeMode } = useThemeContext();
254
277
  const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
@@ -289,6 +312,10 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
289
312
  onThreadDelete,
290
313
  anchor
291
314
  ]);
315
+ const handleAcceptProposal = useCallback((id) => onAcceptProposal?.(anchor, id), [
316
+ onAcceptProposal,
317
+ anchor
318
+ ]);
292
319
  const handleComment = useCallback(() => {
293
320
  if (!messageRef.current) {
294
321
  return false;
@@ -302,11 +329,12 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
302
329
  anchor,
303
330
  identity
304
331
  ]);
305
- return /* @__PURE__ */ React3.createElement(Thread, {
306
- onClickCapture: handleAttend,
307
- onFocusCapture: handleAttend,
332
+ return /* @__PURE__ */ React3.createElement(Thread.Root, {
333
+ id: fullyQualifiedId(thread),
334
+ classNames: "pbs-2 border-be border-subduedSeparator last:border-none",
308
335
  current,
309
- id: fullyQualifiedId(thread)
336
+ onClickCapture: handleAttend,
337
+ onFocusCapture: handleAttend
310
338
  }, /* @__PURE__ */ React3.createElement("div", {
311
339
  role: "none",
312
340
  className: mx("col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]", hoverableControls, hoverableFocusedWithinControls)
@@ -314,28 +342,47 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
314
342
  asChild: true,
315
343
  content: t("detached thread label"),
316
344
  side: "top"
317
- }, /* @__PURE__ */ React3.createElement(ThreadHeading, {
345
+ }, /* @__PURE__ */ React3.createElement(Thread.Header, {
318
346
  detached: true
319
- }, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadHeading, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
320
- className: "flex flex-row items-center pli-1"
347
+ }, thread.name)) : /* @__PURE__ */ React3.createElement(Thread.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
348
+ role: "none",
349
+ className: buttonGroupClassNames
321
350
  }, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
322
351
  palette: "neutral"
323
- }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(ToggleResolvedButton, {
324
- isResolved: thread?.status === "resolved",
325
- onResolve: handleResolve
326
- }), onThreadDelete && /* @__PURE__ */ React3.createElement(DeleteThreadButton, {
327
- onDelete: handleThreadDelete
328
- }))), RefArray.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => /* @__PURE__ */ React3.createElement(MessageContainer, {
352
+ }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
353
+ "data-testid": "thread.resolve",
354
+ variant: "ghost",
355
+ icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
356
+ iconOnly: true,
357
+ label: t("resolve thread label"),
358
+ classNames: [
359
+ buttonClassNames,
360
+ thread?.status !== "resolved" && hoverableControlItem
361
+ ],
362
+ onClick: handleResolve
363
+ }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
364
+ "data-testid": "thread.delete",
365
+ variant: "ghost",
366
+ icon: "ph--x--regular",
367
+ iconOnly: true,
368
+ label: t("delete thread label"),
369
+ classNames: [
370
+ buttonClassNames,
371
+ hoverableControlItem
372
+ ],
373
+ onClick: handleThreadDelete
374
+ }))), Ref.Array.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => /* @__PURE__ */ React3.createElement(MessageContainer, {
329
375
  key: message.id,
330
376
  editable: true,
331
377
  message,
332
378
  members,
333
- onDelete: handleMessageDelete
379
+ onDelete: handleMessageDelete,
380
+ onAcceptProposal: handleAcceptProposal
334
381
  })), /* @__PURE__ */ React3.createElement(MessageTextbox, {
335
382
  extensions,
336
383
  onSend: handleComment,
337
384
  ...textboxMetadata
338
- }), /* @__PURE__ */ React3.createElement(ThreadFooter, {
385
+ }), /* @__PURE__ */ React3.createElement(Thread.Status, {
339
386
  activity
340
387
  }, t("activity message")), /* @__PURE__ */ React3.createElement("div", {
341
388
  role: "none",
@@ -347,16 +394,11 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
347
394
  }
348
395
  };
349
396
 
350
- // packages/plugins/plugin-thread/src/components/CommentsContainer.tsx
351
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
352
- import React4, { useEffect as useEffect2 } from "react";
353
- import { Relation as Relation2 } from "@dxos/echo";
354
- import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
355
- import { Callout, Icon, Trans, useTranslation as useTranslation3 } from "@dxos/react-ui";
397
+ // src/components/CommentsContainer.tsx
356
398
  var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }) => {
357
399
  var _effect = _useSignals4();
358
400
  try {
359
- const { t } = useTranslation3(THREAD_PLUGIN);
401
+ const { t } = useTranslation3(meta.id);
360
402
  const filteredAnchors = showResolvedThreads ? anchors.filter((anchor) => !!Relation2.getSource(anchor)) : anchors.filter((anchor) => {
361
403
  const thread = Relation2.getSource(anchor);
362
404
  return thread && thread.status !== "resolved";
@@ -387,45 +429,45 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
387
429
  }
388
430
  }))));
389
431
  }
390
- return filteredAnchors.map((anchor) => {
432
+ return /* @__PURE__ */ React4.createElement("div", null, filteredAnchors.map((anchor) => {
391
433
  const thread = Relation2.getSource(anchor);
392
434
  const threadId = fullyQualifiedId2(thread);
393
- return /* @__PURE__ */ React4.createElement(CommentContainer, {
435
+ return /* @__PURE__ */ React4.createElement(CommentsThreadContainer, {
394
436
  key: threadId,
395
437
  anchor,
396
438
  current: currentId === threadId,
397
439
  ...props
398
440
  });
399
- });
441
+ }));
400
442
  } finally {
401
443
  _effect.f();
402
444
  }
403
445
  };
404
446
 
405
- // packages/plugins/plugin-thread/src/components/ThreadSettings.tsx
447
+ // src/components/ThreadSettings.tsx
406
448
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
407
449
  import React5 from "react";
408
- import { DeprecatedFormContainer } from "@dxos/react-ui-form";
450
+ import { ControlPage } from "@dxos/react-ui-form";
409
451
  var ThreadSettings = ({ settings }) => {
410
452
  var _effect = _useSignals5();
411
453
  try {
412
- return /* @__PURE__ */ React5.createElement(DeprecatedFormContainer, null);
454
+ return /* @__PURE__ */ React5.createElement(ControlPage, null);
413
455
  } finally {
414
456
  _effect.f();
415
457
  }
416
458
  };
417
459
 
418
- // packages/plugins/plugin-thread/src/components/index.ts
419
- var ChannelContainer2 = lazy(() => import("./ChannelContainer-PKFBVENP.mjs"));
420
- var ChatContainer = lazy(() => import("./ChatContainer-RSOKYAMK.mjs"));
460
+ // src/components/index.ts
461
+ var ChannelContainer2 = lazy(() => import("./ChannelContainer-4PYFOIDK.mjs"));
462
+ var ChatContainer = lazy(() => import("./ChatContainer-EXNNREYB.mjs"));
421
463
 
422
- // packages/plugins/plugin-thread/src/components/ThreadComplementary.tsx
464
+ // src/components/ThreadComplementary.tsx
423
465
  var ThreadComplementary = ({ subject }) => {
424
466
  var _effect = _useSignals6();
425
467
  try {
468
+ const { t } = useTranslation4(meta.id);
426
469
  const { dispatchPromise: dispatch } = useIntentDispatcher();
427
470
  const identity = useIdentity2();
428
- const { t } = useTranslation4(THREAD_PLUGIN);
429
471
  const { tx } = useThemeContext2();
430
472
  const subjectId = fullyQualifiedId3(subject);
431
473
  const { state, getViewState } = useCapability2(ThreadCapabilities.MutableState);
@@ -504,6 +546,26 @@ var ThreadComplementary = ({ subject }) => {
504
546
  dispatch,
505
547
  subject
506
548
  ]);
549
+ const handleAcceptProposal = useCallback2(async (anchor, messageId) => {
550
+ const thread = Relation3.getSource(anchor);
551
+ const messageIndex = thread.messages.findIndex(Ref2.hasObjectId(messageId));
552
+ const message = thread.messages[messageIndex]?.target;
553
+ const proposal = message?.blocks.find((block) => block._tag === "proposal");
554
+ if (!proposal || !anchor.anchor) {
555
+ return;
556
+ }
557
+ await dispatch(createIntent(CollaborationActions.AcceptProposal, {
558
+ subject,
559
+ anchor: anchor.anchor,
560
+ proposal
561
+ }));
562
+ await dispatch(createIntent(ThreadAction.ToggleResolved, {
563
+ thread
564
+ }));
565
+ }, [
566
+ dispatch,
567
+ subject
568
+ ]);
507
569
  const comments = /* @__PURE__ */ React6.createElement(CommentsContainer, {
508
570
  anchors,
509
571
  currentId: attended.includes(subjectId) ? state.current : void 0,
@@ -512,28 +574,34 @@ var ThreadComplementary = ({ subject }) => {
512
574
  onComment: handleComment,
513
575
  onResolve: handleResolve,
514
576
  onMessageDelete: handleMessageDelete,
515
- onThreadDelete: handleThreadDelete
577
+ onThreadDelete: handleThreadDelete,
578
+ onAcceptProposal: handleAcceptProposal
516
579
  });
517
580
  return /* @__PURE__ */ React6.createElement(StackItem.Content, {
518
- toolbar: true
581
+ toolbar: true,
582
+ classNames: "overflow-hidden"
519
583
  }, /* @__PURE__ */ React6.createElement(Tabs.Root, {
520
584
  value: showResolvedThreads ? "all" : "unresolved",
521
585
  orientation: "horizontal",
522
- classNames: 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin',
586
+ classNames: [
587
+ 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin'
588
+ ],
523
589
  onValueChange: onChangeViewState
524
590
  }, /* @__PURE__ */ React6.createElement(Tabs.Tablist, {
525
- classNames: tx("toolbar.root", "toolbar", {})
591
+ classNames: mx2("bg-toolbarSurface border-b border-subduedSeparator")
526
592
  }, /* @__PURE__ */ React6.createElement(Tabs.Tab, {
527
593
  value: "unresolved",
528
594
  classNames: "text-sm"
529
595
  }, t("show unresolved label")), /* @__PURE__ */ React6.createElement(Tabs.Tab, {
530
596
  value: "all",
531
597
  classNames: "text-sm"
532
- }, t("show all label"))), /* @__PURE__ */ React6.createElement(Tabs.Tabpanel, {
598
+ }, t("show all label"))), /* @__PURE__ */ React6.createElement("div", {
599
+ className: "overflow-y-auto"
600
+ }, /* @__PURE__ */ React6.createElement(Tabs.Tabpanel, {
533
601
  value: "all"
534
602
  }, showResolvedThreads && comments), /* @__PURE__ */ React6.createElement(Tabs.Tabpanel, {
535
603
  value: "unresolved"
536
- }, !showResolvedThreads && comments)));
604
+ }, !showResolvedThreads && comments))));
537
605
  } finally {
538
606
  _effect.f();
539
607
  }
@@ -547,4 +615,4 @@ export {
547
615
  ChannelContainer2 as ChannelContainer,
548
616
  ChatContainer
549
617
  };
550
- //# sourceMappingURL=chunk-PG5CTFKK.mjs.map
618
+ //# sourceMappingURL=chunk-ZH2WPTNP.mjs.map