@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (289) hide show
  1. package/dist/lib/browser/ChannelContainer-MX5ABVGC.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-7F5Y6GXJ.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-HNYLII5E.mjs} +31 -32
  4. package/dist/lib/browser/app-graph-builder-HNYLII5E.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs +104 -0
  6. package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-MAXQLMMS.mjs} +7 -7
  8. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs.map → call-manager-MAXQLMMS.mjs.map} +1 -1
  9. package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
  10. package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-BQWQFTWT.mjs} +165 -101
  12. package/dist/lib/browser/chunk-BQWQFTWT.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  14. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-FR6MEAZI.mjs} +18 -17
  16. package/dist/lib/browser/chunk-FR6MEAZI.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-INQVAYPN.mjs} +40 -37
  18. package/dist/lib/browser/chunk-INQVAYPN.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-ISCHODBV.mjs} +53 -3
  20. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-K2DUJRFJ.mjs +27 -0
  22. package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-KOBXMDCI.mjs} +68 -67
  24. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-NMJEVD36.mjs +168 -0
  26. package/dist/lib/browser/chunk-NMJEVD36.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-OOUDK7Q7.mjs +23 -0
  28. package/dist/lib/browser/chunk-OOUDK7Q7.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-ZCW3NSDZ.mjs} +274 -374
  30. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +42 -42
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-BOUT4WGY.mjs} +32 -99
  34. package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs.map +7 -0
  35. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-74EUSQGV.mjs} +24 -22
  36. package/dist/lib/browser/markdown-74EUSQGV.mjs.map +7 -0
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/react-root-BVG7B2LW.mjs +28 -0
  39. package/dist/lib/browser/react-root-BVG7B2LW.mjs.map +7 -0
  40. package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-BCD5ODQ6.mjs} +37 -36
  41. package/dist/lib/browser/react-surface-BCD5ODQ6.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-LGQUZITB.mjs} +5 -5
  43. package/dist/lib/browser/{settings-GRKEID73.mjs.map → settings-LGQUZITB.mjs.map} +1 -1
  44. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-36REWXO5.mjs} +5 -5
  45. package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-36REWXO5.mjs.map} +1 -1
  46. package/dist/lib/browser/types/index.mjs +7 -9
  47. package/dist/lib/node-esm/ChannelContainer-2JJJ3IDK.mjs +17 -0
  48. package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs → ChatContainer-C526R4DI.mjs} +6 -6
  49. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-SOCKP4ST.mjs} +31 -32
  50. package/dist/lib/node-esm/app-graph-builder-SOCKP4ST.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs +105 -0
  52. package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs.map +7 -0
  53. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-LC4OS2KD.mjs} +7 -7
  54. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs.map → call-manager-LC4OS2KD.mjs.map} +1 -1
  55. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs +25 -0
  56. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-7KZWZS2U.mjs} +274 -374
  58. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  60. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-JF7THR7F.mjs} +40 -37
  62. package/dist/lib/node-esm/chunk-JF7THR7F.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-JJW6YMLC.mjs} +165 -101
  64. package/dist/lib/node-esm/chunk-JJW6YMLC.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-PZH2EDU5.mjs} +68 -67
  66. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs +169 -0
  68. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-TWKGDFCS.mjs} +18 -17
  70. package/dist/lib/node-esm/chunk-TWKGDFCS.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-VBI32FGI.mjs} +53 -3
  72. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-XI45H4IV.mjs +28 -0
  74. package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +19 -0
  76. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +7 -0
  77. package/dist/lib/node-esm/index.mjs +42 -42
  78. package/dist/lib/node-esm/index.mjs.map +3 -3
  79. package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-45PLIFCJ.mjs} +32 -99
  80. package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs.map +7 -0
  81. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-566XXB55.mjs} +24 -22
  82. package/dist/lib/node-esm/markdown-566XXB55.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs +29 -0
  85. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-WZH7OAO3.mjs} +37 -36
  87. package/dist/lib/node-esm/react-surface-WZH7OAO3.mjs.map +7 -0
  88. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-WKLJSP6R.mjs} +5 -5
  89. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs.map → settings-WKLJSP6R.mjs.map} +1 -1
  90. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-X3W67GTL.mjs} +5 -5
  91. package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-X3W67GTL.mjs.map} +1 -1
  92. package/dist/lib/node-esm/types/index.mjs +7 -9
  93. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  94. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  95. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  96. package/dist/types/src/calls/types.d.ts.map +1 -1
  97. package/dist/types/src/calls/util/calls-service.d.ts +2 -0
  98. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  99. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  100. package/dist/types/src/calls-service.stories.d.ts +0 -1
  101. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  104. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  106. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/index.d.ts +1 -1
  108. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  113. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  115. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  116. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  117. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts +75 -9
  119. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Chat.stories.d.ts +75 -7
  121. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  123. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/Comments.stories.d.ts +4 -3
  125. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  127. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  129. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  131. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  132. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  133. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/MessageContainer.d.ts +2 -2
  135. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -3
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -3
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  141. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  142. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  143. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  144. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/index.d.ts +3 -3
  146. package/dist/types/src/components/index.d.ts.map +1 -1
  147. package/dist/types/src/components/testing.d.ts +3 -3
  148. package/dist/types/src/components/testing.d.ts.map +1 -1
  149. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  150. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  151. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  152. package/dist/types/src/functions/index.d.ts +2 -0
  153. package/dist/types/src/functions/index.d.ts.map +1 -0
  154. package/dist/types/src/hooks/analytics.d.ts +2 -2
  155. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  156. package/dist/types/src/hooks/index.d.ts +2 -2
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  159. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  160. package/dist/types/src/meta.d.ts +1 -2
  161. package/dist/types/src/meta.d.ts.map +1 -1
  162. package/dist/types/src/testing/stories.d.ts.map +1 -1
  163. package/dist/types/src/translations.d.ts +74 -7
  164. package/dist/types/src/translations.d.ts.map +1 -1
  165. package/dist/types/src/types/Channel.d.ts +16 -0
  166. package/dist/types/src/types/Channel.d.ts.map +1 -0
  167. package/dist/types/src/types/{schema.d.ts → Thread.d.ts} +18 -28
  168. package/dist/types/src/types/Thread.d.ts.map +1 -0
  169. package/dist/types/src/types/index.d.ts +2 -1
  170. package/dist/types/src/types/index.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +31 -117
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/tsconfig.tsbuildinfo +1 -1
  174. package/package.json +64 -60
  175. package/src/ThreadPlugin.tsx +139 -132
  176. package/src/calls/call-manager.ts +1 -1
  177. package/src/calls/media-manager.ts +11 -7
  178. package/src/calls/types.ts +7 -3
  179. package/src/calls/util/calls-service.ts +12 -7
  180. package/src/calls/util/stub-media-streams.ts +61 -3
  181. package/src/calls-service.stories.tsx +2 -5
  182. package/src/capabilities/app-graph-builder.ts +41 -30
  183. package/src/capabilities/blueprint-definition.ts +38 -0
  184. package/src/capabilities/capabilities.ts +7 -7
  185. package/src/capabilities/index.ts +1 -1
  186. package/src/capabilities/intent-resolver.ts +22 -60
  187. package/src/capabilities/markdown.ts +5 -3
  188. package/src/capabilities/react-root.tsx +2 -2
  189. package/src/capabilities/react-surface.tsx +24 -23
  190. package/src/components/Call/Call.tsx +1 -1
  191. package/src/components/Call/Toolbar.tsx +9 -9
  192. package/src/components/CallDebugPanel.tsx +112 -55
  193. package/src/components/CallSidebar.tsx +1 -1
  194. package/src/components/ChannelContainer.stories.tsx +10 -10
  195. package/src/components/ChannelContainer.tsx +19 -15
  196. package/src/components/Chat.stories.tsx +14 -19
  197. package/src/components/ChatContainer.tsx +30 -21
  198. package/src/components/Comments.stories.tsx +12 -17
  199. package/src/components/CommentsContainer.tsx +6 -7
  200. package/src/components/CommentsThreadContainer.tsx +32 -27
  201. package/src/components/Lobby/Lobby.tsx +1 -1
  202. package/src/components/Media/VideoObject.stories.tsx +12 -7
  203. package/src/components/Media/VideoObject.tsx +1 -1
  204. package/src/components/MessageContainer.tsx +6 -6
  205. package/src/components/Participant/Participant.tsx +1 -1
  206. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  207. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  208. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  209. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  210. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  211. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  212. package/src/components/ThreadSettings.tsx +4 -5
  213. package/src/components/index.ts +4 -4
  214. package/src/components/testing.ts +8 -8
  215. package/src/extensions/threads.ts +25 -16
  216. package/src/functions/create-proposals.ts +58 -0
  217. package/src/functions/index.ts +5 -0
  218. package/src/hooks/analytics.ts +4 -7
  219. package/src/hooks/index.ts +3 -2
  220. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  221. package/src/meta.ts +9 -5
  222. package/src/testing/stories.ts +3 -6
  223. package/src/translations.ts +6 -4
  224. package/src/types/Channel.ts +27 -0
  225. package/src/types/Thread.ts +26 -0
  226. package/src/types/index.ts +2 -1
  227. package/src/types/types.ts +19 -27
  228. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  229. package/src/util.ts +1 -1
  230. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
  231. package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
  232. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
  234. package/dist/lib/browser/chunk-2I277V52.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-2P3GVRHP.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  237. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  239. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-KTWYVC5X.mjs +0 -147
  245. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
  248. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
  249. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  250. package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
  251. package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
  252. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
  253. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  254. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  255. package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
  256. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  261. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-P6E247RF.mjs +0 -148
  265. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  267. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
  269. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
  271. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs.map +0 -7
  272. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
  273. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  274. package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
  275. package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
  276. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
  277. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  278. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  279. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  280. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  281. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  282. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  283. package/dist/types/src/types/schema.d.ts.map +0 -1
  284. package/src/capabilities/toolkit.ts +0 -78
  285. package/src/types/schema.ts +0 -33
  286. /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-MX5ABVGC.mjs.map} +0 -0
  287. /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-7F5Y6GXJ.mjs.map} +0 -0
  288. /package/dist/lib/node-esm/{ChannelContainer-D5E2S6AI.mjs.map → ChannelContainer-2JJJ3IDK.mjs.map} +0 -0
  289. /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChatContainer-C526R4DI.mjs.map} +0 -0
@@ -1,55 +1,63 @@
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-INQVAYPN.mjs";
4
+ import {
5
+ ThreadAction,
6
+ Thread_exports
7
+ } from "./chunk-NMJEVD36.mjs";
8
8
  import {
9
9
  ThreadCapabilities
10
- } from "./chunk-4APCDRSH.mjs";
10
+ } from "./chunk-BBTXGRIR.mjs";
11
11
  import {
12
12
  MessageContainer,
13
13
  buttonClassNames,
14
14
  buttonGroupClassNames,
15
15
  command
16
- } from "./chunk-H63NDV62.mjs";
16
+ } from "./chunk-FR6MEAZI.mjs";
17
17
  import {
18
18
  useStatus
19
- } from "./chunk-2P3GVRHP.mjs";
19
+ } from "./chunk-KOBXMDCI.mjs";
20
20
  import {
21
21
  getMessageMetadata
22
- } from "./chunk-GERVMFQW.mjs";
22
+ } from "./chunk-CP7E2HRE.mjs";
23
23
  import {
24
24
  meta
25
- } from "./chunk-EV4JWI7L.mjs";
25
+ } from "./chunk-K2DUJRFJ.mjs";
26
26
 
27
27
  // src/components/CallDebugPanel.tsx
28
28
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
29
29
  import { WebRTCStats } from "@peermetrics/webrtc-stats";
30
30
  import React, { useEffect, useMemo, useState } from "react";
31
- import { Panel } from "@dxos/devtools";
31
+ import { truncateKey } from "@dxos/debug";
32
+ import { JsonView, Panel } from "@dxos/devtools";
32
33
  import { log } from "@dxos/log";
33
- import { Input, useTranslation } from "@dxos/react-ui";
34
- import { Json } from "@dxos/react-ui-syntax-highlighter";
34
+ import { IconButton, Input, useTranslation } from "@dxos/react-ui";
35
35
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
36
36
  var CallDebugPanel = ({ state }) => {
37
37
  var _effect = _useSignals();
38
38
  try {
39
39
  const { t } = useTranslation(meta.id);
40
- const users = state?.call?.users;
41
- const self = state?.call?.self;
42
40
  const [open, setOpen] = useState(false);
43
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
+ };
44
50
  const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);
45
51
  const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);
46
52
  const webrtcStats = useMemo(() => new WebRTCStats({
47
53
  getStatsInterval: 1e3
48
54
  }), []);
49
- const [stats, setStats] = useState({});
55
+ const [stats, setStats] = useState();
50
56
  useEffect(() => {
51
57
  const pc = state?.media.peer?.session?.peerConnection;
52
- const handleStats = (stats2) => setStats(stats2.data);
58
+ const handleStats = (stats2) => {
59
+ setStats(stats2.data);
60
+ };
53
61
  let added = false;
54
62
  if (pc && showDetailedWebRTCStats) {
55
63
  webrtcStats.addConnection({
@@ -76,7 +84,7 @@ var CallDebugPanel = ({ state }) => {
76
84
  connectionId: "1"
77
85
  }, {
78
86
  F: __dxlog_file,
79
- L: 55,
87
+ L: 60,
80
88
  S: void 0,
81
89
  C: (f, a) => f(...a)
82
90
  });
@@ -86,65 +94,122 @@ var CallDebugPanel = ({ state }) => {
86
94
  state?.media.peer?.session?.peerConnection,
87
95
  showDetailedWebRTCStats
88
96
  ]);
97
+ const rows = useMemo(() => getCallStatusTable(state), [
98
+ state?.call.users,
99
+ state?.media.pulledAudioTracks
100
+ ]);
89
101
  return /* @__PURE__ */ React.createElement(Panel, {
90
102
  id: "meeting-status",
91
103
  icon: "ph--video-conference--regular",
92
104
  open,
93
105
  onToggle: handleToggle,
94
106
  title: t("meeting status title"),
95
- maxHeight: false,
96
107
  info: /* @__PURE__ */ React.createElement("div", {
97
108
  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)"))
109
+ }, " ", state?.call.joined ? "Active" : "Inactive"),
110
+ maxHeight: 0
103
111
  }, /* @__PURE__ */ React.createElement("div", {
104
- className: "flex flex-col gap-2 overflow-y-auto"
112
+ className: "flex flex-col is-full text-xs"
105
113
  }, /* @__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, {
114
+ className: "flex items-center gap-2 items-center"
115
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
110
116
  checked: showDetailedWebRTCStats,
111
117
  onCheckedChange: handleShowDetailedWebRTCStats
112
- }))), /* @__PURE__ */ React.createElement(Json, {
113
- classNames: "text-sm",
118
+ }), /* @__PURE__ */ React.createElement(Input.Label, null, t("show webrtc stats title")))), /* @__PURE__ */ React.createElement("div", {
119
+ className: "flex items-center gap-2 items-center"
120
+ }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Switch, {
121
+ checked: showServiceHistory,
122
+ onCheckedChange: handleToggleServiceHistory
123
+ }), /* @__PURE__ */ React.createElement(Input.Label, null, t("show calls history title")))), /* @__PURE__ */ React.createElement("div", {
124
+ className: "flex items-center gap-2 items-center"
125
+ }, /* @__PURE__ */ React.createElement(IconButton, {
126
+ icon: "ph--copy--regular",
127
+ label: "copy raw",
128
+ onClick: handleCopyRaw
129
+ })), /* @__PURE__ */ React.createElement(Table, {
130
+ rows
131
+ }), showDetailedWebRTCStats && /* @__PURE__ */ React.createElement(JsonView, {
114
132
  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()
133
+ stats
134
+ }
135
+ }), showServiceHistory && /* @__PURE__ */ React.createElement(JsonView, {
136
+ data: {
137
+ history: state?.media.peer?.history.get()
137
138
  }
138
139
  })));
139
140
  } finally {
140
141
  _effect.f();
141
142
  }
142
143
  };
144
+ var getCallStatusTable = (state) => {
145
+ if (!state || !state.call?.users) {
146
+ return [];
147
+ }
148
+ const self = state.call.self;
149
+ const users = state.call.users.filter((user) => user.id !== self.id).map((user) => {
150
+ const isOk = {
151
+ audio: user.tracks?.audio && state.media.pulledAudioTracks[user.tracks?.audio]?.ctx.disposed === false,
152
+ video: user.tracks?.video && state.media.pulledVideoStreams[user.tracks?.video]?.ctx.disposed === false,
153
+ screenshare: user.tracks?.screenshare && state.media.pulledVideoStreams[user.tracks?.screenshare]?.ctx.disposed === false
154
+ };
155
+ return {
156
+ ...user,
157
+ isOk
158
+ };
159
+ });
160
+ return [
161
+ [
162
+ "users",
163
+ state.call.users.length ?? 0
164
+ ],
165
+ [
166
+ "*self* " + (self?.name ?? truncateKey(self.id, 8)),
167
+ self?.tracks?.audio && state.media.pushedAudioTrack ? "AUD \u2705" : "AUD \u274C",
168
+ self?.tracks?.video && state.media.pushedVideoTrack ? "VID \u2705" : "VID \u274C",
169
+ self?.tracks?.screenshareEnabled ? self.tracks.screenshareEnabled && state.media.pushedScreenshareTrack ? "SCR \u2705" : "SCR \u274C" : void 0
170
+ ],
171
+ ...users.map((user) => [
172
+ user.name ?? truncateKey(user.id, 8),
173
+ user.isOk.audio ? "AUD \u2705" : "AUD \u274C",
174
+ user.isOk.video ? "VID \u2705" : "VID \u274C",
175
+ user.tracks?.screenshareEnabled ? user.isOk.screenshare ? "SCR \u2705" : "SCR \u274C" : void 0
176
+ ]),
177
+ [
178
+ "ICE",
179
+ state.media.peer?.session?.peerConnection.iceConnectionState ?? "no connection"
180
+ ]
181
+ ];
182
+ };
183
+ (function(Unit2) {
184
+ Unit2.KB = (n) => ((n ?? 0) / 1e3).toFixed(2);
185
+ })(Unit || (Unit = {}));
186
+ var Table = ({ rows }) => {
187
+ var _effect = _useSignals();
188
+ try {
189
+ return /* @__PURE__ */ React.createElement("div", {
190
+ className: "is-full text-xs font-mono"
191
+ }, rows.map(([prefix, label, value, unit], i) => /* @__PURE__ */ React.createElement("div", {
192
+ key: i,
193
+ className: "grid grid-cols-[3fr_1fr_1fr_1fr]"
194
+ }, /* @__PURE__ */ React.createElement("div", {
195
+ className: "p-1"
196
+ }, prefix), /* @__PURE__ */ React.createElement("div", {
197
+ className: "p-1"
198
+ }, label), /* @__PURE__ */ React.createElement("div", {
199
+ className: "p-1"
200
+ }, value), /* @__PURE__ */ React.createElement("div", {
201
+ className: "p-1"
202
+ }, unit))));
203
+ } finally {
204
+ _effect.f();
205
+ }
206
+ };
207
+ var Unit;
143
208
 
144
209
  // src/components/CallSidebar.tsx
145
210
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
146
211
  import React2 from "react";
147
- import { useCapability } from "@dxos/app-framework";
212
+ import { useCapability } from "@dxos/app-framework/react";
148
213
  var CallSidebar = () => {
149
214
  var _effect = _useSignals2();
150
215
  try {
@@ -157,19 +222,20 @@ var CallSidebar = () => {
157
222
  }
158
223
  };
159
224
 
160
- // src/components/ThreadComplementary.tsx
225
+ // src/components/ThreadCompanion.tsx
161
226
  import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
162
227
  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";
228
+ import { Capabilities, CollaborationActions, LayoutAction, createIntent } from "@dxos/app-framework";
229
+ import { useCapabilities, useCapability as useCapability2, useIntentDispatcher } from "@dxos/app-framework/react";
230
+ import { Filter, Obj as Obj3, Query, Relation as Relation3 } from "@dxos/echo";
231
+ import { Ref as Ref2, getSpace as getSpace2, useQuery } from "@dxos/react-client/echo";
166
232
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
167
- import { useThemeContext as useThemeContext2, useTranslation as useTranslation4 } from "@dxos/react-ui";
233
+ import { useTranslation as useTranslation5 } from "@dxos/react-ui";
168
234
  import { useAttended } from "@dxos/react-ui-attention";
169
235
  import { StackItem } from "@dxos/react-ui-stack";
170
236
  import { Tabs } from "@dxos/react-ui-tabs";
171
237
  import { mx as mx2 } from "@dxos/react-ui-theme";
172
- import { AnchoredTo } from "@dxos/schema";
238
+ import { AnchoredTo } from "@dxos/types";
173
239
 
174
240
  // src/components/index.ts
175
241
  import { lazy } from "react";
@@ -177,36 +243,34 @@ import { lazy } from "react";
177
243
  // src/components/CommentsContainer.tsx
178
244
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
179
245
  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";
246
+ import { Obj as Obj2, Relation as Relation2 } from "@dxos/echo";
182
247
  import { Callout, Icon, Trans, useTranslation as useTranslation3 } from "@dxos/react-ui";
183
248
 
184
249
  // src/components/CommentsThreadContainer.tsx
185
250
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
186
251
  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";
252
+ import { Obj, Ref, Relation } from "@dxos/echo";
253
+ import { getSpace, useMembers } from "@dxos/react-client/echo";
189
254
  import { useIdentity } from "@dxos/react-client/halo";
190
- import { IconButton, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
255
+ import { IconButton as IconButton2, Tag, Tooltip, useThemeContext, useTranslation as useTranslation2 } from "@dxos/react-ui";
191
256
  import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
192
257
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/react-ui-theme";
193
- import { MessageTextbox, Thread } from "@dxos/react-ui-thread";
258
+ import { MessageTextbox, Thread as ThreadComponent } from "@dxos/react-ui-thread";
194
259
  import { isNonNullable } from "@dxos/util";
195
260
  var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
196
261
  var _effect = _useSignals3();
197
262
  try {
263
+ const { themeMode } = useThemeContext();
198
264
  const { t } = useTranslation2(meta.id);
199
265
  const identity = useIdentity();
200
266
  const space = getSpace(anchor);
201
267
  const members = useMembers(space?.key);
202
268
  const detached = !anchor.anchor;
203
269
  const thread = Relation.getSource(anchor);
204
- const activity = useStatus(space, fullyQualifiedId(thread));
270
+ const activity = useStatus(space, Obj.getDXN(thread).toString());
205
271
  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);
272
+ const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);
273
+ const [state, setState] = useState2({});
210
274
  const messageRef = useRef("");
211
275
  const extensions = useMemo2(() => [
212
276
  createBasicExtensions({
@@ -216,11 +280,11 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
216
280
  themeMode
217
281
  }),
218
282
  listener({
219
- onChange: (text) => messageRef.current = text
283
+ onChange: ({ text }) => messageRef.current = text
220
284
  }),
221
285
  command
222
286
  ], [
223
- _count
287
+ state
224
288
  ]);
225
289
  const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
226
290
  behavior,
@@ -253,14 +317,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
253
317
  onComment?.(anchor, messageRef.current);
254
318
  messageRef.current = "";
255
319
  scrollToEnd("instant");
256
- rerenderEditor();
320
+ setState({});
257
321
  return true;
258
322
  }, [
259
323
  anchor,
260
324
  identity
261
325
  ]);
262
- return /* @__PURE__ */ React3.createElement(Thread.Root, {
263
- id: fullyQualifiedId(thread),
326
+ return /* @__PURE__ */ React3.createElement(ThreadComponent.Root, {
327
+ id: Obj.getDXN(thread).toString(),
264
328
  classNames: "pbs-2 border-be border-subduedSeparator last:border-none",
265
329
  current,
266
330
  onClickCapture: handleAttend,
@@ -272,14 +336,14 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
272
336
  asChild: true,
273
337
  content: t("detached thread label"),
274
338
  side: "top"
275
- }, /* @__PURE__ */ React3.createElement(Thread.Header, {
339
+ }, /* @__PURE__ */ React3.createElement(ThreadComponent.Header, {
276
340
  detached: true
277
- }, thread.name)) : /* @__PURE__ */ React3.createElement(Thread.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
341
+ }, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadComponent.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
278
342
  role: "none",
279
343
  className: buttonGroupClassNames
280
344
  }, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
281
345
  palette: "neutral"
282
- }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton, {
346
+ }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
283
347
  "data-testid": "thread.resolve",
284
348
  variant: "ghost",
285
349
  icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
@@ -290,7 +354,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
290
354
  thread?.status !== "resolved" && hoverableControlItem
291
355
  ],
292
356
  onClick: handleResolve
293
- }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton, {
357
+ }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
294
358
  "data-testid": "thread.delete",
295
359
  variant: "ghost",
296
360
  icon: "ph--x--regular",
@@ -312,7 +376,7 @@ var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve
312
376
  extensions,
313
377
  onSend: handleComment,
314
378
  ...textboxMetadata
315
- }), /* @__PURE__ */ React3.createElement(Thread.Status, {
379
+ }), /* @__PURE__ */ React3.createElement(ThreadComponent.Status, {
316
380
  activity
317
381
  }, t("activity message")), /* @__PURE__ */ React3.createElement("div", {
318
382
  role: "none",
@@ -361,7 +425,7 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
361
425
  }
362
426
  return /* @__PURE__ */ React4.createElement("div", null, filteredAnchors.map((anchor) => {
363
427
  const thread = Relation2.getSource(anchor);
364
- const threadId = fullyQualifiedId2(thread);
428
+ const threadId = Obj2.getDXN(thread).toString();
365
429
  return /* @__PURE__ */ React4.createElement(CommentsThreadContainer, {
366
430
  key: threadId,
367
431
  anchor,
@@ -377,10 +441,12 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
377
441
  // src/components/ThreadSettings.tsx
378
442
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
379
443
  import React5 from "react";
444
+ import { useTranslation as useTranslation4 } from "@dxos/react-ui";
380
445
  import { ControlPage } from "@dxos/react-ui-form";
381
- var ThreadSettings = ({ settings }) => {
446
+ var ThreadSettings = ({ settings: _settings }) => {
382
447
  var _effect = _useSignals5();
383
448
  try {
449
+ const { t: _t } = useTranslation4(meta.id);
384
450
  return /* @__PURE__ */ React5.createElement(ControlPage, null);
385
451
  } finally {
386
452
  _effect.f();
@@ -388,18 +454,17 @@ var ThreadSettings = ({ settings }) => {
388
454
  };
389
455
 
390
456
  // src/components/index.ts
391
- var ChannelContainer2 = lazy(() => import("./ChannelContainer-GHDNEZT2.mjs"));
392
- var ChatContainer = lazy(() => import("./ChatContainer-42ALOWUA.mjs"));
457
+ var ChannelContainer2 = lazy(() => import("./ChannelContainer-MX5ABVGC.mjs"));
458
+ var ChatContainer = lazy(() => import("./ChatContainer-7F5Y6GXJ.mjs"));
393
459
 
394
- // src/components/ThreadComplementary.tsx
395
- var ThreadComplementary = ({ subject }) => {
460
+ // src/components/ThreadCompanion.tsx
461
+ var ThreadCompanion = ({ subject }) => {
396
462
  var _effect = _useSignals6();
397
463
  try {
398
- const { t } = useTranslation4(meta.id);
464
+ const { t } = useTranslation5(meta.id);
399
465
  const { dispatchPromise: dispatch } = useIntentDispatcher();
400
466
  const identity = useIdentity2();
401
- const { tx } = useThemeContext2();
402
- const subjectId = fullyQualifiedId3(subject);
467
+ const subjectId = Obj3.getDXN(subject).toString();
403
468
  const { state, getViewState } = useCapability2(ThreadCapabilities.MutableState);
404
469
  const drafts = state.drafts[subjectId];
405
470
  const viewState = useMemo3(() => getViewState(subjectId), [
@@ -413,22 +478,22 @@ var ThreadComplementary = ({ subject }) => {
413
478
  viewState
414
479
  ]);
415
480
  const anchorSorts = useCapabilities(Capabilities.AnchorSort);
416
- const sort = useMemo3(() => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort, [
481
+ const sort = useMemo3(() => anchorSorts.find(({ key }) => key === Obj3.getTypename(subject))?.sort, [
417
482
  anchorSorts,
418
483
  subject
419
484
  ]);
420
485
  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 ?? []);
486
+ const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
487
+ const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => Obj3.instanceOf(Thread_exports.Thread, Relation3.getSource(anchor))).concat(drafts ?? []);
423
488
  const attended = useAttended();
424
489
  const handleAttend = useCallback2((anchor) => {
425
490
  const thread = Relation3.getSource(anchor);
426
- const threadId = fullyQualifiedId3(thread);
491
+ const threadId = Obj3.getDXN(thread).toString();
427
492
  if (state.current !== threadId) {
428
493
  state.current = threadId;
429
494
  void dispatch(createIntent(LayoutAction.ScrollIntoView, {
430
495
  part: "current",
431
- subject: fullyQualifiedId3(subject),
496
+ subject: Obj3.getDXN(subject).toString(),
432
497
  options: {
433
498
  cursor: anchor.anchor,
434
499
  ref: threadId
@@ -450,7 +515,7 @@ var ThreadComplementary = ({ subject }) => {
450
515
  text
451
516
  }));
452
517
  const thread = Relation3.getSource(anchor);
453
- state.current = fullyQualifiedId3(thread);
518
+ state.current = Obj3.getDXN(thread).toString();
454
519
  }, [
455
520
  dispatch,
456
521
  identity,
@@ -508,8 +573,7 @@ var ThreadComplementary = ({ subject }) => {
508
573
  onAcceptProposal: handleAcceptProposal
509
574
  });
510
575
  return /* @__PURE__ */ React6.createElement(StackItem.Content, {
511
- toolbar: true,
512
- classNames: "overflow-hidden"
576
+ toolbar: true
513
577
  }, /* @__PURE__ */ React6.createElement(Tabs.Root, {
514
578
  value: showResolvedThreads ? "all" : "unresolved",
515
579
  orientation: "horizontal",
@@ -518,7 +582,7 @@ var ThreadComplementary = ({ subject }) => {
518
582
  ],
519
583
  onValueChange: onChangeViewState
520
584
  }, /* @__PURE__ */ React6.createElement(Tabs.Tablist, {
521
- classNames: mx2("bg-toolbarSurface border-b border-subduedSeparator")
585
+ classNames: mx2("bg-toolbarSurface border-be border-subduedSeparator")
522
586
  }, /* @__PURE__ */ React6.createElement(Tabs.Tab, {
523
587
  value: "unresolved",
524
588
  classNames: "text-sm"
@@ -540,9 +604,9 @@ var ThreadComplementary = ({ subject }) => {
540
604
  export {
541
605
  CallDebugPanel,
542
606
  CallSidebar,
543
- ThreadComplementary,
607
+ ThreadCompanion,
544
608
  ThreadSettings,
545
609
  ChannelContainer2 as ChannelContainer,
546
610
  ChatContainer
547
611
  };
548
- //# sourceMappingURL=chunk-J26C57ZY.mjs.map
612
+ //# sourceMappingURL=chunk-BQWQFTWT.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 } from '@dxos/types';\n\nimport { ThreadCapabilities } from '../capabilities';\nimport { CommentsContainer, type CommentsContainerProps } from '../components';\nimport { meta } from '../meta';\nimport { Thread, 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 } from '@dxos/types';\n\nimport { meta } from '../meta';\nimport { type Thread } from '../types';\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 } from '@dxos/types';\nimport { isNonNullable } from '@dxos/util';\n\nimport { useStatus } from '../hooks';\nimport { meta } from '../meta';\nimport { type Thread } from '../types';\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,mBAA0C;AACnD,OAAOC,SAASC,WAAWC,SAASC,gBAAgB;AAEpD,SAASC,mBAAmB;AAC5B,SAASC,UAAUC,aAAa;AAChC,SAASC,WAAW;AACpB,SAASC,YAAYC,OAA6BC,sBAAsB;;AAOjE,IAAMC,iBAAiB,CAAC,EAAEC,MAAK,MAAuB;;;AAC3D,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AAEpC,UAAM,CAACC,MAAMC,OAAAA,IAAWC,SAAS,KAAA;AACjC,UAAMC,eAAe,MAAMF,QAAQ,CAACD,IAAAA;AACpC,UAAM,CAACI,oBAAoBC,qBAAAA,IAAyBH,SAAS,KAAA;AAC7D,UAAMI,6BAA6B,MAAMD,sBAAsB,CAACD,kBAAAA;AAEhE,UAAMG,gBAAgB,YAAA;AACpB,YAAMC,UAAUC,UAAUC,UAAUC,KAAKC,UAAU;QAAEC,OAAOlB,OAAOmB,MAAMD;QAAOE;MAAM,GAAG,MAAM,CAAA,CAAA;IACjG;AAEA,UAAM,CAACC,yBAAyBC,0BAAAA,IAA8Bf,SAAS,KAAA;AACvE,UAAMgB,gCAAgC,MAAMD,2BAA2B,CAACD,uBAAAA;AAExE,UAAMG,cAAcC,QAClB,MACE,IAAIC,YAAY;MACdC,kBAAkB;IACpB,CAAA,GACF,CAAA,CAAE;AAEJ,UAAM,CAACP,OAAOQ,QAAAA,IAAYrB,SAAAA;AAE1BsB,cAAU,MAAA;AACR,YAAMC,KAAK9B,OAAO+B,MAAMC,MAAMC,SAASC;AACvC,YAAMC,cAAc,CAACf,WAAAA;AACnBQ,iBAASR,OAAMgB,IAAI;MACrB;AACA,UAAIC,QAAQ;AACZ,UAAIP,MAAMT,yBAAyB;AACjCG,oBAAYc,cAAc;UAAER;UAAIS,QAAQ;UAAGC,cAAc;QAAI,CAAA;AAC7DhB,oBAAYiB,GAAG,SAASN,WAAAA;AACxBE,gBAAQ;MACV;AACA,aAAO,MAAA;AACL,YAAI;AACF,cAAIP,MAAMO,OAAO;AACfb,wBAAYkB,iBAAiB;cAAEZ;YAAG,CAAA;AAClCN,wBAAYmB,eAAe,SAASR,WAAAA;UACtC;QACF,SAASS,OAAO;AACdC,cAAID,MAAM,+BAA+B;YAAEA;YAAOd;YAAIS,QAAQ;YAAGC,cAAc;UAAI,GAAA;;;;;;QACrF;MACF;IACF,GAAG;MAACxC,OAAO+B,MAAMC,MAAMC,SAASC;MAAgBb;KAAwB;AAExE,UAAMyB,OAAOrB,QAAQ,MAAMsB,mBAAmB/C,KAAAA,GAAQ;MAACA,OAAOmB,KAAKD;MAAOlB,OAAO+B,MAAMiB;KAAkB;AAEzG,WACE,sBAAA,cAACC,OAAAA;MACC7C,IAAG;MACH8C,MAAK;MACL7C;MACA8C,UAAU3C;MACV4C,OAAOnD,EAAE,sBAAA;MACToD,MAAM,sBAAA,cAACC,OAAAA;QAAIC,WAAU;SAA0B,KAAEvD,OAAOmB,KAAKqC,SAAS,WAAW,UAAA;MACjFC,WAAW;OAEX,sBAAA,cAACH,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACD,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACG,MAAMC,MAAI,MACT,sBAAA,cAACD,MAAME,QAAM;MAACC,SAASxC;MAAyByC,iBAAiBvC;QACjE,sBAAA,cAACmC,MAAMK,OAAK,MAAE9D,EAAE,yBAAA,CAAA,CAAA,CAAA,GAGpB,sBAAA,cAACqD,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACG,MAAMC,MAAI,MACT,sBAAA,cAACD,MAAME,QAAM;MAACC,SAASpD;MAAoBqD,iBAAiBnD;QAC5D,sBAAA,cAAC+C,MAAMK,OAAK,MAAE9D,EAAE,0BAAA,CAAA,CAAA,CAAA,GAGpB,sBAAA,cAACqD,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACS,YAAAA;MAAWd,MAAK;MAAoBe,OAAO;MAAYC,SAAStD;SAEnE,sBAAA,cAACuD,OAAAA;MAAMrB;QACNzB,2BAA2B,sBAAA,cAAC+C,UAAAA;MAAShC,MAAM;QAAEhB;MAAM;QACnDX,sBAAsB,sBAAA,cAAC2D,UAAAA;MAAShC,MAAM;QAAEiC,SAASrE,OAAO+B,MAAMC,MAAMqC,QAAQC,IAAAA;MAAM;;;;;AAI3F;AAEA,IAAMvB,qBAAqB,CAAC/C,UAAAA;AAC1B,MAAI,CAACA,SAAS,CAACA,MAAMmB,MAAMD,OAAO;AAChC,WAAO,CAAA;EACT;AAEA,QAAMqD,OAAOvE,MAAMmB,KAAKoD;AACxB,QAAMrD,QAAQlB,MAAMmB,KAAKD,MACtBsD,OAAO,CAACC,SAASA,KAAKrE,OAAOmE,KAAMnE,EAAE,EACrCsE,IAAI,CAACD,SAAAA;AACJ,UAAME,OAAO;MACXC,OACEH,KAAKI,QAAQD,SACb5E,MAAM+B,MAAMiB,kBAAkByB,KAAKI,QAAQD,KAAAA,GAA4BE,IAAIC,aAAa;MAC1FC,OACEP,KAAKI,QAAQG,SACbhF,MAAM+B,MAAMkD,mBAAmBR,KAAKI,QAAQG,KAAAA,GAA4BF,IAAIC,aAAa;MAC3FG,aACET,KAAKI,QAAQK,eACblF,MAAM+B,MAAMkD,mBAAmBR,KAAKI,QAAQK,WAAAA,GAAkCJ,IAAIC,aAAa;IACnG;AAEA,WAAO;MACL,GAAGN;MACHE;IACF;EACF,CAAA;AAEF,SAAO;IACL;MAAC;MAAS3E,MAAMmB,KAAKD,MAAMiE,UAAU;;IACrC;MACE,aAAaZ,MAAMa,QAAQC,YAAYd,KAAMnE,IAAI,CAAA;MACjDmE,MAAMM,QAAQD,SAAS5E,MAAM+B,MAAMuD,mBAAmB,eAAU;MAChEf,MAAMM,QAAQG,SAAShF,MAAM+B,MAAMwD,mBAAmB,eAAU;MAChEhB,MAAMM,QAAQW,qBACVjB,KAAKM,OAAOW,sBAAsBxF,MAAM+B,MAAM0D,yBAC5C,eACA,eACFC;;OAGHxE,MAAMwD,IAAI,CAACD,SAAS;MACrBA,KAAKW,QAAQC,YAAYZ,KAAKrE,IAAI,CAAA;MAClCqE,KAAKE,KAAKC,QAAQ,eAAU;MAC5BH,KAAKE,KAAKK,QAAQ,eAAU;MAC5BP,KAAKI,QAAQW,qBAAsBf,KAAKE,KAAKO,cAAc,eAAU,eAAWQ;KACjF;IACD;MAAC;MAAO1F,MAAM+B,MAAMC,MAAMC,SAASC,eAAeyD,sBAAsB;;;AAE5E;UAEiBC,OAAAA;QACFC,KAAK,CAACC,QAAiBA,KAAK,KAAK,KAAOC,QAAQ,CAAA;AAC/D,GAFiBH,SAAAA,OAAAA,CAAAA,EAAAA;AAQV,IAAMzB,QAAQ,CAAC,EAAErB,KAAI,MAAc;;;AACxC,WACE,sBAAA,cAACQ,OAAAA;MAAIC,WAAU;OACZT,KAAK4B,IAAI,CAAC,CAACsB,QAAQ/B,OAAOgC,OAAOC,IAAAA,GAAOC,MACvC,sBAAA,cAAC7C,OAAAA;MAAI8C,KAAKD;MAAG5C,WAAU;OACrB,sBAAA,cAACD,OAAAA;MAAIC,WAAU;OAAOyC,MAAAA,GACtB,sBAAA,cAAC1C,OAAAA;MAAIC,WAAU;OAAOU,KAAAA,GACtB,sBAAA,cAACX,OAAAA;MAAIC,WAAU;OAAO0C,KAAAA,GACtB,sBAAA,cAAC3C,OAAAA;MAAIC,WAAU;OAAO2C,IAAAA,CAAAA,CAAAA,CAAAA;;;;AAKhC;;;;;ACvKA,OAAOG,YAAW;AAElB,SAASC,qBAAqB;AAMvB,IAAMC,cAAc,MAAA;;;AACzB,UAAMC,OAAOC,cAAcC,mBAAmBC,WAAW;AACzD,WAAO,gBAAAC,OAAA,cAACC,kBAAAA;MAAiBC,QAAQN,KAAKM;;;;;AACxC;;;;ACXA,OAAOC,UAASC,eAAAA,cAAaC,WAAAA,gBAAe;AAE5C,SAASC,cAAcC,sBAAsBC,cAAcC,oBAAoB;AAC/E,SAASC,iBAAiBC,iBAAAA,gBAAeC,2BAA2B;AACpE,SAASC,QAAQC,OAAAA,MAAKC,OAAOC,YAAAA,iBAAgB;AAC7C,SAASC,OAAAA,MAAKC,YAAAA,WAAUC,gBAAgB;AACxC,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,mBAAmB;AAC5B,SAASC,iBAAiB;AAC1B,SAASC,YAAY;AACrB,SAASC,MAAAA,WAAU;AACnB,SAASC,kBAAkB;;;ACZ3B,SAASC,YAAY;;;;ACArB,OAAOC,UAASC,aAAAA,kBAAiB;AAEjC,SAASC,OAAAA,MAAKC,YAAAA,iBAAgB;AAC9B,SAASC,SAASC,MAAMC,OAAOC,kBAAAA,uBAAsB;;;;ACHrD,OAAOC,UAASC,aAAaC,WAAAA,UAASC,QAAQC,YAAAA,iBAAgB;AAE9D,SAASC,KAAKC,KAAKC,gBAAgB;AACnC,SAASC,UAAUC,kBAAkB;AACrC,SAASC,mBAAmB;AAC5B,SAASC,cAAAA,aAAYC,KAAKC,SAASC,iBAAiBC,kBAAAA,uBAAsB;AAC1E,SAASC,uBAAuBC,uBAAuBC,gBAAgB;AACvE,SAASC,sBAAsBC,mBAAmBC,gCAAgCC,UAAU;AAC5F,SACEC,gBAEAC,UAAUC,uBAEL;AAEP,SAASC,qBAAqB;AAoBvB,IAAMC,0BAA0B,CAAC,EACtCC,QACAC,SACAC,UACAC,WACAC,WACAC,iBACAC,gBACAC,iBAAgB,MACa;;;AAC7B,UAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAMC,WAAWC,YAAAA;AACjB,UAAMC,QAAQC,SAASjB,MAAAA;AACvB,UAAMkB,UAAUC,WAAWH,OAAOI,GAAAA;AAClC,UAAMC,WAAW,CAACrB,OAAOA;AACzB,UAAMsB,SAASC,SAASC,UAAUxB,MAAAA;AAClC,UAAMyB,WAAWC,UAAUV,OAAOW,IAAIC,OAAON,MAAAA,EAAQO,SAAQ,CAAA;AAC7D,UAAMC,kBAAkBC,OAA8B,IAAA;AAEtD,UAAMC,kBAAkBC,mBAAmBN,IAAIC,OAAON,MAAAA,EAAQO,SAAQ,GAAIf,QAAAA;AAG1E,UAAM,CAACoB,OAAOC,QAAAA,IAAYC,UAAS,CAAC,CAAA;AACpC,UAAMC,aAAaN,OAAO,EAAA;AAC1B,UAAMO,aAAaC,SACjB,MAAM;MACJC,sBAAsB;QAAEC,aAAa/B,EAAE,qBAAA;MAAuB,CAAA;MAC9DgC,sBAAsB;QAAElC;MAAU,CAAA;MAClCmC,SAAS;QAAEC,UAAU,CAAC,EAAEC,KAAI,MAAQR,WAAWpC,UAAU4C;MAAM,CAAA;MAC/DC;OAEF;MAACZ;KAAM;AAIT,UAAMa,cAAc,CAACC,aACnBC,WAAW,MAAMnB,gBAAgB7B,SAASiD,eAAe;MAAEF;MAAUG,OAAO;IAAM,CAAA,GAAI,EAAA;AAExF,UAAMC,eAAeC,YAAY,MAAMnD,WAAWF,MAAAA,GAAS;MAACE;MAAUF;KAAO;AAC7E,UAAMsD,gBAAgBD,YAAY,MAAMjD,YAAYJ,MAAAA,GAAS;MAACI;MAAWJ;KAAO;AAChF,UAAMuD,sBAAsBF,YAAY,CAACxC,OAAeR,kBAAkBL,QAAQa,EAAAA,GAAK;MAACR;MAAiBL;KAAO;AAChH,UAAMwD,qBAAqBH,YAAY,MAAM/C,iBAAiBN,MAAAA,GAAS;MAACM;MAAgBN;KAAO;AAC/F,UAAMyD,uBAAuBJ,YAAY,CAACxC,OAAeN,mBAAmBP,QAAQa,EAAAA,GAAK;MAACN;MAAkBP;KAAO;AAEnH,UAAM0D,gBAA+CL,YAAY,MAAA;AAC/D,UAAI,CAAChB,WAAWpC,SAAS;AACvB,eAAO;MACT;AAEAE,kBAAYH,QAAQqC,WAAWpC,OAAO;AACtCoC,iBAAWpC,UAAU;AACrB8C,kBAAY,SAAA;AACZZ,eAAS,CAAC,CAAA;AAEV,aAAO;IACT,GAAG;MAACnC;MAAQc;KAAS;AAErB,WACE,gBAAA6C,OAAA,cAACC,gBAAgBC,MAAI;MACnBhD,IAAIc,IAAIC,OAAON,MAAAA,EAAQO,SAAQ;MAC/BiC,YAAW;MACX7D;MACA8D,gBAAgBX;MAChBY,gBAAgBZ;OAEhB,gBAAAO,OAAA,cAACM,OAAAA;MACCC,MAAK;MACLC,WAAWC,GACT,gEACAC,mBACAC,8BAAAA;OAGDjD,WACC,gBAAAsC,OAAA,cAACY,QAAQC,SAAO;MAACC,SAAAA;MAAQC,SAAShE,EAAE,uBAAA;MAA0BiE,MAAK;OACjE,gBAAAhB,OAAA,cAACC,gBAAgBgB,QAAM;MAACvD,UAAAA;OAAUC,OAAOuD,IAAI,CAAA,IAG/C,gBAAAlB,OAAA,cAACC,gBAAgBgB,QAAM,MAAEtD,OAAOuD,IAAI,GAEtC,gBAAAlB,OAAA,cAACM,OAAAA;MAAIC,MAAK;MAAOC,WAAWW;OACzBxD,OAAOyD,WAAW,YAAY,gBAAApB,OAAA,cAACqB,KAAAA;MAAIC,SAAQ;OAAWvE,EAAE,cAAA,CAAA,GACxDN,aAAa,EAAEkB,QAAQyD,WAAW,aACjC,gBAAApB,OAAA,cAACuB,aAAAA;MACCC,eAAY;MACZC,SAAQ;MACRC,MAAM/D,QAAQyD,WAAW,aAAa,oBAAoB;MAC1DO,UAAAA;MACAC,OAAO7E,EAAE,sBAAA;MACToD,YAAY;QAAC0B;QAAkBlE,QAAQyD,WAAW,cAAcU;;MAChEC,SAASpC;QAGZhD,kBACC,gBAAAqD,OAAA,cAACuB,aAAAA;MACCC,eAAY;MACZC,SAAQ;MACRC,MAAK;MACLC,UAAAA;MACAC,OAAO7E,EAAE,qBAAA;MACToD,YAAY;QAAC0B;QAAkBC;;MAC/BC,SAASlC;UAOhBmC,IAAIC,MAAMC,QAAQvE,OAAOwE,UAAUC,OAAOC,aAAAA,KAAkB,CAAA,CAAE,EAAEC,IAAI,CAACC,YACpE,gBAAAvC,OAAA,cAACwC,kBAAAA;MACC/E,KAAK8E,QAAQrF;MACbuF,UAAAA;MACAF;MACAhF;MACAmF,UAAU9C;MACVhD,kBAAkBkD;SAUtB,gBAAAE,OAAA,cAAC2C,gBAAAA;MAAehE;MAAwBiE,QAAQ7C;MAAgB,GAAG1B;QAEnE,gBAAA2B,OAAA,cAACC,gBAAgB4C,QAAM;MAAC/E;OAAqBf,EAAE,kBAAA,CAAA,GAG/C,gBAAAiD,OAAA,cAACM,OAAAA;MAAIC,MAAK;MAAOC,WAAU;MAAgBsC,KAAK3E;;;;;AAGtD;;;ADrJO,IAAM4E,oBAAoB,CAAC,EAAEC,SAASC,WAAWC,qBAAqB,GAAGC,MAAAA,MAA+B;;;AAC7G,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AAGpC,UAAMC,kBAAkBN,sBACpBF,QAAQS,OAAO,CAACC,WAAW,CAAC,CAACC,UAASC,UAAUF,MAAAA,CAAAA,IAChDV,QAAQS,OAAO,CAACC,WAAAA;AACd,YAAMG,SAASF,UAASC,UAAUF,MAAAA;AAClC,aAAOG,UAAUA,OAAOC,WAAW;IACrC,CAAA;AAEJC,IAAAA,WAAU,MAAA;AACR,UAAId,WAAW;AACbe,iBAASC,eAAehB,SAAAA,GAAYiB,eAAe;UAAEC,UAAU;UAAUC,OAAO;QAAM,CAAA;MACxF;IACF,GAAG;MAACnB;KAAU;AAEd,QAAIO,gBAAgBa,WAAW,GAAG;AAChC,aACE,gBAAAC,OAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SACzB,gBAAAH,OAAA,cAACI,QAAQC,MAAI,MACX,gBAAAL,OAAA,cAACI,QAAQE,OAAK,MACZ,gBAAAN,OAAA,cAACO,OACK;QACFzB;QACA0B,SAAS;QACTC,YAAY;UACVC,aAAa,gBAAAV,OAAA,cAACW,MAAAA;YAAKC,MAAK;YAAyBC,MAAM;YAAGC,YAAW;;QACvE;MACF,CAAA,CAAA,CAAA,CAAA;IAMZ;AAEA,WACE,gBAAAd,OAAA,cAACC,OAAAA,MACEf,gBAAgB6B,IAAI,CAAC3B,WAAAA;AACpB,YAAMG,SAASF,UAASC,UAAUF,MAAAA;AAClC,YAAM4B,WAAWC,KAAIC,OAAO3B,MAAAA,EAAQ4B,SAAQ;AAC5C,aAAO,gBAAAnB,OAAA,cAACoB,yBAAAA;QAAwBC,KAAKL;QAAU5B;QAAgBkC,SAAS3C,cAAcqC;QAAW,GAAGnC;;IACtG,CAAA,CAAA;;;;AAGN;;;;AElEA,OAAO0C,YAAW;AAElB,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,mBAAmB;AAKrB,IAAMC,iBAAiB,CAAC,EAAEC,UAAUC,UAAS,MAAqC;;;AACvF,UAAM,EAAEC,GAAGC,GAAE,IAAKC,gBAAeC,KAAKC,EAAE;AACxC,WAAO,gBAAAC,OAAA,cAACC,aAAAA,IAAAA;;;;AACV;;;AHCO,IAAMC,oBAAmBC,KAAK,MAAM,OAAO,iCAAA,CAAA;AAC3C,IAAMC,gBAAgBD,KAAK,MAAM,OAAO,8BAAA,CAAA;;;ADMxC,IAAME,kBAAkB,CAAC,EAAEC,QAAO,MAAoB;;;AAC3D,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AACtC,UAAMC,WAAWC,aAAAA;AACjB,UAAMC,YAAYC,KAAIC,OAAOZ,OAAAA,EAASa,SAAQ;AAE9C,UAAM,EAAEC,OAAOC,aAAY,IAAKC,eAAcC,mBAAmBC,YAAY;AAC7E,UAAMC,SAASL,MAAMK,OAAOT,SAAAA;AAC5B,UAAMU,YAAYC,SAAQ,MAAMN,aAAaL,SAAAA,GAAY;MAACK;MAAcL;KAAU;AAClF,UAAM,EAAEY,oBAAmB,IAAKF;AAChC,UAAMG,oBAAoBC,aACxB,CAACC,cAAAA;AACCL,gBAAUE,sBAAsBG,cAAc;IAChD,GACA;MAACL;KAAU;AAGb,UAAMM,cAAcC,gBAAgBC,aAAaC,UAAU;AAC3D,UAAMC,OAAOT,SACX,MAAMK,YAAYK,KAAK,CAAC,EAAEC,IAAG,MAAOA,QAAQrB,KAAIsB,YAAYjC,OAAAA,CAAAA,GAAW8B,MACvE;MAACJ;MAAa1B;KAAQ;AAGxB,UAAMkC,QAAQC,UAASnC,OAAAA;AACvB,UAAMoC,oBAAoBC,SAASH,OAAOI,MAAMC,OAAOC,OAAOC,IAAIzC,QAAQI,EAAE,CAAA,EAAGsC,SAASC,WAAWA,UAAU,CAAA;AAC7G,UAAMC,UAAUR,kBACbS,SAAS,CAACC,GAAGC,MAAMjB,OAAOgB,GAAGC,CAAAA,KAAM,CAAA,EACnCC,OAAO,CAACC,WAAWtC,KAAIuC,WAAWC,eAAOA,QAAQC,UAASC,UAAUJ,MAAAA,CAAAA,CAAAA,EACpEK,OAAOnC,UAAU,CAAA,CAAE;AAEtB,UAAMoC,WAAWC,YAAAA;AAEjB,UAAMC,eAAejC,aACnB,CAACyB,WAAAA;AACC,YAAMS,SAASN,UAASC,UAAUJ,MAAAA;AAClC,YAAMU,WAAWhD,KAAIC,OAAO8C,MAAAA,EAAQ7C,SAAQ;AAE5C,UAAIC,MAAM8C,YAAYD,UAAU;AAC9B7C,cAAM8C,UAAUD;AAKhB,aAAKrD,SACHuD,aAAaC,aAAaC,gBAAgB;UACxCC,MAAM;UACNhE,SAASW,KAAIC,OAAOZ,OAAAA,EAASa,SAAQ;UACrCoD,SAAS;YACPC,QAAQjB,OAAOA;YACfkB,KAAKR;UACP;QACF,CAAA,CAAA;MAEJ;IACF,GACA;MAAC7C,MAAM8C;MAAStD;MAAUN;KAAQ;AAGpC,UAAMoE,gBAAgB5C,aACpB,OAAOyB,QAA+BoB,SAAAA;AACpC,YAAM/D,SACJuD,aAAaS,aAAaC,YAAY;QACpCtB;QACAjD;QACAwE,QAAQ;UAAEC,aAAajE,UAAUkE;QAAI;QACrCL;MACF,CAAA,CAAA;AAGF,YAAMX,SAASN,UAASC,UAAUJ,MAAAA;AAClCnC,YAAM8C,UAAUjD,KAAIC,OAAO8C,MAAAA,EAAQ7C,SAAQ;IAC7C,GACA;MAACP;MAAUE;MAAUR;KAAQ;AAG/B,UAAM2E,gBAAgBnD,aACpB,CAACyB,WACC3C,SACEuD,aAAaS,aAAaM,gBAAgB;MACxClB,QAAQN,UAASC,UAAUJ,MAAAA;IAC7B,CAAA,CAAA,GAEJ;MAAC3C;KAAS;AAGZ,UAAMuE,qBAAqBrD,aACzB,CAACyB,WAAkC3C,SAASuD,aAAaS,aAAaQ,QAAQ;MAAE7B;MAAQjD;IAAQ,CAAA,CAAA,GAChG;MAACM;MAAUN;KAAQ;AAGrB,UAAM+E,sBAAsBvD,aAC1B,CAACyB,QAA+B+B,cAC9B1E,SACEuD,aAAaS,aAAaW,eAAe;MACvChC;MACAjD;MACAgF;IACF,CAAA,CAAA,GAEJ;MAAC1E;MAAUN;KAAQ;AAGrB,UAAMkF,uBAAuB1D,aAC3B,OAAOyB,QAAQ+B,cAAAA;AACb,YAAMtB,SAASN,UAASC,UAAUJ,MAAAA;AAClC,YAAMkC,eAAezB,OAAO0B,SAASC,UAAUC,KAAIC,YAAYP,SAAAA,CAAAA;AAC/D,YAAMQ,UAAU9B,OAAO0B,SAASD,YAAAA,GAAeM;AAC/C,YAAMC,WAAWF,SAASG,OAAO5D,KAAK,CAAC6D,UAAUA,MAAMC,SAAS,UAAA;AAChE,UAAI,CAACH,YAAY,CAACzC,OAAOA,QAAQ;AAC/B;MACF;AAEA,YAAM3C,SACJuD,aAAaiC,qBAAqBC,gBAAgB;QAChD/F;QACAiD,QAAQA,OAAOA;QACfyC;MACF,CAAA,CAAA;AAEF,YAAMpF,SAASuD,aAAaS,aAAaM,gBAAgB;QAAElB;MAAO,CAAA,CAAA;IACpE,GACA;MAACpD;MAAUN;KAAQ;AAGrB,UAAMgG,WACJ,gBAAAC,OAAA,cAACC,mBAAAA;MACCtD;MACAuD,WAAW5C,SAAS6C,SAAS1F,SAAAA,IAAaI,MAAM8C,UAAUyC;MAC1D/E;MACAgF,UAAU7C;MACV8C,WAAWnC;MACXoC,WAAW7B;MACX8B,iBAAiB1B;MACjB2B,gBAAgB7B;MAChB8B,kBAAkBzB;;AAItB,WACE,gBAAAe,OAAA,cAACW,UAAUC,SAAO;MAACC,SAAAA;OACjB,gBAAAb,OAAA,cAACc,KAAKC,MAAI;MACRC,OAAO3F,sBAAsB,QAAQ;MACrC4F,aAAY;MACZC,YAAY;QACV;;MAEFC,eAAe7F;OAGf,gBAAA0E,OAAA,cAACc,KAAKM,SAAO;MAACF,YAAYG,IAAG,qDAAA;OAC3B,gBAAArB,OAAA,cAACc,KAAKQ,KAAG;MAACN,OAAM;MAAaE,YAAW;OACrClH,EAAE,uBAAA,CAAA,GAEL,gBAAAgG,OAAA,cAACc,KAAKQ,KAAG;MAACN,OAAM;MAAME,YAAW;OAC9BlH,EAAE,gBAAA,CAAA,CAAA,GAGP,gBAAAgG,OAAA,cAACuB,OAAAA;MAAIC,WAAU;OACb,gBAAAxB,OAAA,cAACc,KAAKW,UAAQ;MAACT,OAAM;OAAO3F,uBAAuB0E,QAAAA,GACnD,gBAAAC,OAAA,cAACc,KAAKW,UAAQ;MAACT,OAAM;OAAc,CAAC3F,uBAAuB0E,QAAAA,CAAAA,CAAAA,CAAAA;;;;AAKrE;",
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", "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
+ }
@@ -1,5 +1,5 @@
1
1
  // src/util.ts
2
- import { Match } from "effect";
2
+ import * as Match from "effect/Match";
3
3
  import { generateName } from "@dxos/display-name";
4
4
  import { hexToFallback } from "@dxos/util";
5
5
  var getMessageMetadata = (id, identity) => {
@@ -28,4 +28,4 @@ export {
28
28
  getMessageMetadata,
29
29
  getAnchor
30
30
  };
31
- //# sourceMappingURL=chunk-GERVMFQW.mjs.map
31
+ //# sourceMappingURL=chunk-CP7E2HRE.mjs.map