@dxos/plugin-thread 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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 (279) hide show
  1. package/dist/lib/browser/ChannelContainer-NDIH62Q4.mjs +17 -0
  2. package/dist/lib/browser/ChatContainer-6FVFME3R.mjs +16 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-URVQHGMR.mjs} +32 -32
  4. package/dist/lib/browser/app-graph-builder-URVQHGMR.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
  6. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-RMPTWSTF.mjs → call-manager-4YFT4XA6.mjs} +8 -7
  8. package/dist/lib/{node-esm/call-manager-QAREJFVX.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-PBMNFG3B.mjs → chunk-6LWKNZUV.mjs} +18 -17
  10. package/dist/lib/browser/chunk-6LWKNZUV.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
  12. package/dist/lib/browser/chunk-CFC7LEPD.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-7W7QK5ZP.mjs → chunk-F36NHPJG.mjs} +37 -34
  16. package/dist/lib/browser/chunk-F36NHPJG.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-ZH2WPTNP.mjs → chunk-HKI7FUMB.mjs} +65 -72
  18. package/dist/lib/browser/chunk-HKI7FUMB.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
  20. package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
  21. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  22. package/dist/lib/browser/chunk-JDFDDUTH.mjs +23 -0
  23. package/dist/lib/browser/chunk-JDFDDUTH.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-RI3Z6MK3.mjs → chunk-KOBXMDCI.mjs} +68 -67
  25. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
  27. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
  28. package/dist/lib/browser/{chunk-KTWYVC5X.mjs → chunk-R5UOPOO7.mjs} +44 -49
  29. package/dist/lib/browser/chunk-R5UOPOO7.mjs.map +7 -0
  30. package/dist/lib/browser/{chunk-ZCEU5K23.mjs → chunk-ZCW3NSDZ.mjs} +139 -236
  31. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +41 -42
  33. package/dist/lib/browser/index.mjs.map +3 -3
  34. package/dist/lib/browser/{intent-resolver-J7OCP2P6.mjs → intent-resolver-S3F7DVFM.mjs} +33 -99
  35. package/dist/lib/browser/intent-resolver-S3F7DVFM.mjs.map +7 -0
  36. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-454GFKEZ.mjs} +25 -23
  37. package/dist/lib/browser/markdown-454GFKEZ.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/react-root-ZB5ZA4I6.mjs +29 -0
  40. package/dist/lib/browser/react-root-ZB5ZA4I6.mjs.map +7 -0
  41. package/dist/lib/browser/{react-surface-GVGZRBDK.mjs → react-surface-MBLTXSOC.mjs} +38 -36
  42. package/dist/lib/browser/react-surface-MBLTXSOC.mjs.map +7 -0
  43. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-JN2HHORY.mjs} +6 -5
  44. package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-JN2HHORY.mjs.map} +1 -1
  45. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
  46. package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
  47. package/dist/lib/browser/types/index.mjs +7 -10
  48. package/dist/lib/node-esm/ChannelContainer-NGSDMNEE.mjs +18 -0
  49. package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs +17 -0
  50. package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-2IH5RPR7.mjs} +32 -32
  52. package/dist/lib/node-esm/app-graph-builder-2IH5RPR7.mjs.map +7 -0
  53. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
  54. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
  55. package/dist/lib/node-esm/{call-manager-QAREJFVX.mjs → call-manager-UMUXEYH5.mjs} +8 -7
  56. package/dist/lib/{browser/call-manager-RMPTWSTF.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
  57. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
  58. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-3VRYXHKX.mjs +25 -0
  60. package/dist/lib/node-esm/chunk-3VRYXHKX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-TIPIOH2J.mjs → chunk-7KZWZS2U.mjs} +139 -236
  62. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  64. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  66. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-MEIWWPR2.mjs} +44 -49
  68. package/dist/lib/node-esm/chunk-MEIWWPR2.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-LE2LIYGX.mjs → chunk-MM6HOX5W.mjs} +65 -72
  70. package/dist/lib/node-esm/chunk-MM6HOX5W.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-JNPKMT7O.mjs → chunk-PZH2EDU5.mjs} +68 -67
  72. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
  74. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
  76. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
  77. package/dist/lib/node-esm/{chunk-SNKFZQST.mjs → chunk-Y3F2SGNH.mjs} +37 -34
  78. package/dist/lib/node-esm/chunk-Y3F2SGNH.mjs.map +7 -0
  79. package/dist/lib/node-esm/{chunk-DKCQCENK.mjs → chunk-Z4GUSLWL.mjs} +18 -17
  80. package/dist/lib/node-esm/chunk-Z4GUSLWL.mjs.map +7 -0
  81. package/dist/lib/node-esm/index.mjs +41 -42
  82. package/dist/lib/node-esm/index.mjs.map +3 -3
  83. package/dist/lib/node-esm/{intent-resolver-SR2LW4HF.mjs → intent-resolver-UES35EMJ.mjs} +33 -99
  84. package/dist/lib/node-esm/intent-resolver-UES35EMJ.mjs.map +7 -0
  85. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-7JUG6J7B.mjs} +25 -23
  86. package/dist/lib/node-esm/markdown-7JUG6J7B.mjs.map +7 -0
  87. package/dist/lib/node-esm/meta.json +1 -1
  88. package/dist/lib/node-esm/react-root-3XXULWUN.mjs +30 -0
  89. package/dist/lib/node-esm/react-root-3XXULWUN.mjs.map +7 -0
  90. package/dist/lib/node-esm/{react-surface-WLQUVRAX.mjs → react-surface-DCF4DD7B.mjs} +38 -36
  91. package/dist/lib/node-esm/react-surface-DCF4DD7B.mjs.map +7 -0
  92. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-VSPM3BIM.mjs} +6 -5
  93. package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-VSPM3BIM.mjs.map} +1 -1
  94. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
  95. package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
  96. package/dist/lib/node-esm/types/index.mjs +7 -10
  97. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  98. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  99. package/dist/types/src/calls/media-manager.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.map +1 -1
  115. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  116. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  117. package/dist/types/src/components/ChannelContainer.stories.d.ts +73 -8
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/Chat.stories.d.ts +73 -6
  120. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  122. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  123. package/dist/types/src/components/Comments.stories.d.ts +1 -2
  124. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  126. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  128. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  129. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  130. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  131. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  132. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  133. package/dist/types/src/components/MessageContainer.d.ts +2 -2
  134. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  135. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +2 -2
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +2 -2
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  140. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  141. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  142. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  143. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  144. package/dist/types/src/components/index.d.ts +3 -3
  145. package/dist/types/src/components/index.d.ts.map +1 -1
  146. package/dist/types/src/components/testing.d.ts +3 -3
  147. package/dist/types/src/components/testing.d.ts.map +1 -1
  148. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  149. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  150. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  151. package/dist/types/src/functions/index.d.ts +2 -0
  152. package/dist/types/src/functions/index.d.ts.map +1 -0
  153. package/dist/types/src/hooks/analytics.d.ts +2 -2
  154. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  155. package/dist/types/src/hooks/index.d.ts +2 -2
  156. package/dist/types/src/hooks/index.d.ts.map +1 -1
  157. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  158. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  159. package/dist/types/src/meta.d.ts +1 -2
  160. package/dist/types/src/meta.d.ts.map +1 -1
  161. package/dist/types/src/testing/stories.d.ts.map +1 -1
  162. package/dist/types/src/translations.d.ts +72 -6
  163. package/dist/types/src/translations.d.ts.map +1 -1
  164. package/dist/types/src/types/Channel.d.ts +16 -0
  165. package/dist/types/src/types/Channel.d.ts.map +1 -0
  166. package/dist/types/src/types/index.d.ts +1 -1
  167. package/dist/types/src/types/index.d.ts.map +1 -1
  168. package/dist/types/src/types/types.d.ts +30 -117
  169. package/dist/types/src/types/types.d.ts.map +1 -1
  170. package/dist/types/tsconfig.tsbuildinfo +1 -1
  171. package/package.json +62 -58
  172. package/src/ThreadPlugin.tsx +139 -132
  173. package/src/calls/media-manager.ts +9 -6
  174. package/src/calls/util/stub-media-streams.ts +2 -2
  175. package/src/calls-service.stories.tsx +2 -5
  176. package/src/capabilities/app-graph-builder.ts +41 -30
  177. package/src/capabilities/blueprint-definition.ts +38 -0
  178. package/src/capabilities/capabilities.ts +7 -7
  179. package/src/capabilities/index.ts +1 -1
  180. package/src/capabilities/intent-resolver.ts +22 -59
  181. package/src/capabilities/markdown.ts +5 -3
  182. package/src/capabilities/react-root.tsx +2 -2
  183. package/src/capabilities/react-surface.tsx +25 -23
  184. package/src/components/Call/Call.tsx +1 -1
  185. package/src/components/Call/Toolbar.tsx +5 -5
  186. package/src/components/CallDebugPanel.tsx +12 -14
  187. package/src/components/CallSidebar.tsx +1 -1
  188. package/src/components/ChannelContainer.stories.tsx +10 -10
  189. package/src/components/ChannelContainer.tsx +19 -15
  190. package/src/components/Chat.stories.tsx +14 -19
  191. package/src/components/ChatContainer.tsx +29 -21
  192. package/src/components/Comments.stories.tsx +11 -17
  193. package/src/components/CommentsContainer.tsx +5 -7
  194. package/src/components/CommentsThreadContainer.tsx +31 -27
  195. package/src/components/Lobby/Lobby.tsx +1 -1
  196. package/src/components/Media/VideoObject.stories.tsx +12 -7
  197. package/src/components/Media/VideoObject.tsx +1 -1
  198. package/src/components/MessageContainer.tsx +6 -6
  199. package/src/components/Participant/Participant.tsx +1 -1
  200. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  201. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  202. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  203. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  204. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  205. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  206. package/src/components/ThreadSettings.tsx +4 -5
  207. package/src/components/index.ts +4 -4
  208. package/src/components/testing.ts +7 -9
  209. package/src/extensions/threads.ts +25 -16
  210. package/src/functions/create-proposals.ts +56 -0
  211. package/src/functions/index.ts +5 -0
  212. package/src/hooks/analytics.ts +4 -7
  213. package/src/hooks/index.ts +3 -2
  214. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  215. package/src/meta.ts +9 -5
  216. package/src/testing/stories.ts +3 -6
  217. package/src/translations.ts +4 -3
  218. package/src/types/Channel.ts +26 -0
  219. package/src/types/index.ts +1 -1
  220. package/src/types/types.ts +18 -27
  221. package/src/util.ts +1 -1
  222. package/dist/lib/browser/ChannelContainer-4PYFOIDK.mjs +0 -16
  223. package/dist/lib/browser/ChatContainer-EXNNREYB.mjs +0 -15
  224. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  225. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  226. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  227. package/dist/lib/browser/chunk-7W7QK5ZP.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  229. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-G4CNILRR.mjs +0 -23
  231. package/dist/lib/browser/chunk-G4CNILRR.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-PBMNFG3B.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-RI3Z6MK3.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-ZH2WPTNP.mjs.map +0 -7
  238. package/dist/lib/browser/intent-resolver-J7OCP2P6.mjs.map +0 -7
  239. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  240. package/dist/lib/browser/react-root-XKOD4KRB.mjs +0 -28
  241. package/dist/lib/browser/react-root-XKOD4KRB.mjs.map +0 -7
  242. package/dist/lib/browser/react-surface-GVGZRBDK.mjs.map +0 -7
  243. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  244. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  245. package/dist/lib/node-esm/ChannelContainer-KQQEZWUN.mjs +0 -17
  246. package/dist/lib/node-esm/ChatContainer-QVQKFBWA.mjs +0 -16
  247. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  248. package/dist/lib/node-esm/chunk-4T45PCKP.mjs +0 -25
  249. package/dist/lib/node-esm/chunk-4T45PCKP.mjs.map +0 -7
  250. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  251. package/dist/lib/node-esm/chunk-DKCQCENK.mjs.map +0 -7
  252. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  253. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  254. package/dist/lib/node-esm/chunk-JNPKMT7O.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-LE2LIYGX.mjs.map +0 -7
  256. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  258. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-SNKFZQST.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
  261. package/dist/lib/node-esm/intent-resolver-SR2LW4HF.mjs.map +0 -7
  262. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  263. package/dist/lib/node-esm/react-root-4JWDRIQB.mjs +0 -29
  264. package/dist/lib/node-esm/react-root-4JWDRIQB.mjs.map +0 -7
  265. package/dist/lib/node-esm/react-surface-WLQUVRAX.mjs.map +0 -7
  266. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  267. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  268. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  269. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  270. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  271. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  272. package/dist/types/src/types/schema.d.ts +0 -177
  273. package/dist/types/src/types/schema.d.ts.map +0 -1
  274. package/src/capabilities/toolkit.ts +0 -78
  275. package/src/types/schema.ts +0 -33
  276. /package/dist/lib/browser/{ChannelContainer-4PYFOIDK.mjs.map → ChannelContainer-NDIH62Q4.mjs.map} +0 -0
  277. /package/dist/lib/browser/{ChatContainer-EXNNREYB.mjs.map → ChatContainer-6FVFME3R.mjs.map} +0 -0
  278. /package/dist/lib/{node-esm/ChannelContainer-KQQEZWUN.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  279. /package/dist/lib/node-esm/{ChatContainer-QVQKFBWA.mjs.map → ChannelContainer-NGSDMNEE.mjs.map} +0 -0
@@ -13,9 +13,7 @@ import { IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/r
13
13
  import { type EncodedTrackName, type GlobalState } from '../calls';
14
14
  import { meta } from '../meta';
15
15
 
16
- export type CallDebugPanelProps = ThemedClassName<{
17
- state?: GlobalState;
18
- }>;
16
+ export type CallDebugPanelProps = ThemedClassName<{ state?: GlobalState }>;
19
17
 
20
18
  export const CallDebugPanel = ({ state }: CallDebugPanelProps) => {
21
19
  const { t } = useTranslation(meta.id);
@@ -73,24 +71,24 @@ export const CallDebugPanel = ({ state }: CallDebugPanelProps) => {
73
71
  open={open}
74
72
  onToggle={handleToggle}
75
73
  title={t('meeting status title')}
76
- maxHeight={false}
77
74
  info={<div className='flex items-center gap-2'> {state?.call.joined ? 'Active' : 'Inactive'}</div>}
75
+ maxHeight={0}
78
76
  >
79
- <div className='flex flex-col w-full gap-2 text-xs'>
80
- <div className='flex items-center gap-2'>
77
+ <div className='flex flex-col is-full text-xs'>
78
+ <div className='flex items-center gap-2 items-center'>
81
79
  <Input.Root>
82
- <Input.Label classNames={'text-sm'}>{t('show webrtc stats title')}</Input.Label>
83
- <Input.Checkbox checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />
80
+ <Input.Switch checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />
81
+ <Input.Label>{t('show webrtc stats title')}</Input.Label>
84
82
  </Input.Root>
85
83
  </div>
86
- <div className='flex items-center gap-2'>
84
+ <div className='flex items-center gap-2 items-center'>
87
85
  <Input.Root>
88
- <Input.Label classNames={'text-sm'}>{t('show calls history title')}</Input.Label>
89
- <Input.Checkbox checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />
86
+ <Input.Switch checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />
87
+ <Input.Label>{t('show calls history title')}</Input.Label>
90
88
  </Input.Root>
91
89
  </div>
92
- <div className='flex items-center gap-2'>
93
- <IconButton classNames={'text-sm'} icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />
90
+ <div className='flex items-center gap-2 items-center'>
91
+ <IconButton icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />
94
92
  </div>
95
93
  <Table rows={rows} />
96
94
  {showDetailedWebRTCStats && <JsonView data={{ stats }} />}
@@ -160,7 +158,7 @@ export type TableProps = {
160
158
 
161
159
  export const Table = ({ rows }: TableProps) => {
162
160
  return (
163
- <div className='w-full text-xs font-mono'>
161
+ <div className='is-full text-xs font-mono'>
164
162
  {rows.map(([prefix, label, value, unit], i) => (
165
163
  <div key={i} className='grid grid-cols-[3fr_1fr_1fr_1fr]'>
166
164
  <div className='p-1'>{prefix}</div>
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { useCapability } from '@dxos/app-framework';
7
+ import { useCapability } from '@dxos/app-framework/react';
8
8
 
9
9
  import { ThreadCapabilities } from '../capabilities';
10
10
 
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
@@ -11,19 +9,20 @@ import { contributes } from '@dxos/app-framework';
11
9
  import { withPluginManager } from '@dxos/app-framework/testing';
12
10
  import { ClientCapabilities } from '@dxos/plugin-client';
13
11
  import { Query, useQuery, useSpace } from '@dxos/react-client/echo';
14
- import { DataType } from '@dxos/schema';
15
- import { ColumnContainer, withLayout } from '@dxos/storybook-utils';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
+ import { render } from '@dxos/storybook-utils';
14
+ import { Message, Thread } from '@dxos/types';
16
15
 
17
16
  import { createThreadPlugins } from '../testing';
18
17
  import { translations } from '../translations';
19
- import { ChannelType, ThreadType } from '../types';
18
+ import { Channel } from '../types';
20
19
 
21
20
  import { ChannelContainer, type ChannelContainerProps } from './ChannelContainer';
22
21
 
23
22
  // TODO(wittjosiah): Channel doesn't render full height.
24
- const Story = ({ roomId }: ChannelContainerProps) => {
23
+ const DefaultStory = ({ roomId }: ChannelContainerProps) => {
25
24
  const space = useSpace();
26
- const [channel] = useQuery(space, Query.type(ChannelType));
25
+ const [channel] = useQuery(space, Query.type(Channel.Channel));
27
26
  if (!channel) {
28
27
  return null;
29
28
  }
@@ -34,13 +33,14 @@ const Story = ({ roomId }: ChannelContainerProps) => {
34
33
  const meta = {
35
34
  title: 'plugins/plugin-thread/ChannelContainer',
36
35
  component: ChannelContainer,
37
- render: (args) => <Story {...args} />,
36
+ render: render(DefaultStory),
38
37
  decorators: [
38
+ withTheme,
39
+ withLayout({ container: 'column' }),
39
40
  withPluginManager({
40
41
  plugins: [...(await createThreadPlugins())],
41
- capabilities: [contributes(ClientCapabilities.Schema, [ChannelType, ThreadType, DataType.Message])],
42
+ capabilities: [contributes(ClientCapabilities.Schema, [Channel.Channel, Thread.Thread, Message.Message])],
42
43
  }),
43
- withLayout({ Container: ColumnContainer, classNames: 'w-[40rem] overflow-hidden' }),
44
44
  ],
45
45
  parameters: {
46
46
  translations,
@@ -2,17 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
5
+ import { Atom } from '@effect-atom/atom-react';
6
6
  import React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';
7
7
 
8
- import { useCapabilities, useCapability } from '@dxos/app-framework';
8
+ import { useCapabilities, useCapability } from '@dxos/app-framework/react';
9
9
  import { Context } from '@dxos/context';
10
10
  import { failUndefined } from '@dxos/debug';
11
+ import { Obj } from '@dxos/echo';
11
12
  import { log } from '@dxos/log';
12
13
  import { useClient } from '@dxos/react-client';
13
- import { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';
14
+ import { getSpace } from '@dxos/react-client/echo';
14
15
  import { useIdentity } from '@dxos/react-client/halo';
15
- import { ElevationProvider, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
16
+ import { ElevationProvider, Input, useTranslation } from '@dxos/react-ui';
16
17
  import { ControlGroup, ControlGroupButton, ControlItemInput } from '@dxos/react-ui-form';
17
18
  import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
18
19
  import { useSoundEffect } from '@dxos/react-ui-sfx';
@@ -20,13 +21,15 @@ import { StackItem } from '@dxos/react-ui-stack';
20
21
 
21
22
  import { ThreadCapabilities } from '../capabilities';
22
23
  import { meta } from '../meta';
23
- import { type ChannelType } from '../types';
24
+ import { type Channel } from '../types';
24
25
 
25
26
  import { Call } from './Call';
26
27
  import ChatContainer from './ChatContainer';
27
28
 
29
+ // TODO(burdon): Create Radix style layout.
30
+
28
31
  export type ChannelContainerProps = {
29
- channel?: ChannelType;
32
+ channel?: Channel.Channel;
30
33
  roomId?: string;
31
34
  role?: string;
32
35
  fullscreen?: boolean;
@@ -38,7 +41,8 @@ export type ChannelContainerProps = {
38
41
  export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {
39
42
  const space = getSpace(channel);
40
43
  const callManager = useCapability(ThreadCapabilities.CallManager);
41
- const roomId = _roomId ?? (channel ? fullyQualifiedId(channel) : failUndefined());
44
+ const attendableId = channel ? Obj.getDXN(channel).toString() : undefined;
45
+ const roomId = _roomId ?? attendableId ?? failUndefined();
42
46
  const identity = useIdentity();
43
47
  const isNamed = !!identity?.profile?.displayName;
44
48
  const joinSound = useSoundEffect('JoinCall');
@@ -114,7 +118,7 @@ export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }:
114
118
  const isJoined = callManager.joined && callManager.roomId === roomId;
115
119
 
116
120
  return (
117
- <StackItem.Content toolbar={!isJoined} classNames={isJoined && 'h-full'}>
121
+ <StackItem.Content classNames={isJoined && 'bs-full'} toolbar={!isJoined}>
118
122
  {isJoined && !isNamed && <DisplayNameMissing />}
119
123
  {isJoined && isNamed && (
120
124
  <Call.Root>
@@ -124,8 +128,8 @@ export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }:
124
128
  )}
125
129
  {!isJoined && channel && channel.defaultThread.target && space && (
126
130
  <>
127
- <ChannelToolbar attendableId={fullyQualifiedId(channel)} role={role} onJoinCall={handleJoin} />
128
- <ChatContainer space={space} thread={channel.defaultThread.target} />
131
+ <ChannelToolbar attendableId={attendableId} role={role} onJoinCall={handleJoin} />
132
+ <ChatContainer space={space} thread={channel.defaultThread.target} classNames='container-max-width' />
129
133
  </>
130
134
  )}
131
135
  </StackItem.Content>
@@ -161,7 +165,7 @@ const DisplayNameMissing = () => {
161
165
  const useChannelToolbarActions = (onJoinCall?: () => void) => {
162
166
  const creator = useMemo(
163
167
  () =>
164
- Rx.make(() => {
168
+ Atom.make(() => {
165
169
  return {
166
170
  nodes: [
167
171
  createMenuItemGroup('root', {
@@ -182,19 +186,19 @@ const useChannelToolbarActions = (onJoinCall?: () => void) => {
182
186
  return useMenuActions(creator);
183
187
  };
184
188
 
185
- type ChannelToolbarProps = ThemedClassName<{
189
+ type ChannelToolbarProps = {
186
190
  attendableId?: string;
187
191
  role?: string;
188
192
  onJoinCall?: () => void;
189
- }>;
193
+ };
190
194
 
191
- const ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }: ChannelToolbarProps) => {
195
+ const ChannelToolbar = ({ attendableId, role, onJoinCall }: ChannelToolbarProps) => {
192
196
  const menuProps = useChannelToolbarActions(onJoinCall);
193
197
 
194
198
  return (
195
199
  <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
196
200
  <MenuProvider {...menuProps} attendableId={attendableId}>
197
- <ToolbarMenu classNames={classNames} />
201
+ <ToolbarMenu textBlockWidth />
198
202
  </MenuProvider>
199
203
  </ElevationProvider>
200
204
  );
@@ -2,26 +2,24 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useState } from 'react';
9
7
 
10
8
  import { Capabilities, IntentPlugin, contributes, createSurface } from '@dxos/app-framework';
11
9
  import { withPluginManager } from '@dxos/app-framework/testing';
12
- import { Obj, Ref } from '@dxos/echo';
13
10
  import { faker } from '@dxos/random';
14
11
  import { useClient } from '@dxos/react-client';
15
12
  import { type Space } from '@dxos/react-client/echo';
16
13
  import { useIdentity } from '@dxos/react-client/halo';
17
14
  import { withClientProvider } from '@dxos/react-client/testing';
18
15
  import { useAsyncEffect } from '@dxos/react-ui';
19
- import { Thread } from '@dxos/react-ui-thread';
20
- import { DataType } from '@dxos/schema';
21
- import { render, withLayout, withTheme } from '@dxos/storybook-utils';
16
+ import { withTheme } from '@dxos/react-ui/testing';
17
+ import { Thread as ThreadComponent } from '@dxos/react-ui-thread';
18
+ import { render } from '@dxos/storybook-utils';
19
+ import { Message, Thread } from '@dxos/types';
22
20
 
23
21
  import { translations } from '../translations';
24
- import { ChannelType, ThreadType } from '../types';
22
+ import { Channel } from '../types';
25
23
 
26
24
  import { ChatContainer } from './ChatContainer';
27
25
 
@@ -31,17 +29,12 @@ const DefaultStory = () => {
31
29
  const client = useClient();
32
30
  const identity = useIdentity();
33
31
  const [space, setSpace] = useState<Space>();
34
- const [channel, setChannel] = useState<ChannelType | null>();
32
+ const [channel, setChannel] = useState<Channel.Channel | null>();
35
33
 
36
34
  useAsyncEffect(async () => {
37
35
  if (identity) {
38
36
  const space = await client.spaces.create();
39
- const channel = space.db.add(
40
- Obj.make(ChannelType, {
41
- defaultThread: Ref.make(Obj.make(ThreadType, { messages: [], status: 'active' })),
42
- threads: [],
43
- }),
44
- );
37
+ const channel = space.db.add(Channel.make());
45
38
  setSpace(space);
46
39
  setChannel(channel);
47
40
  }
@@ -60,9 +53,10 @@ const DefaultStory = () => {
60
53
 
61
54
  const meta = {
62
55
  title: 'plugins/plugin-thread/Chat',
63
- component: Thread.Root as any,
56
+ component: ThreadComponent.Root as any,
64
57
  render: render(DefaultStory),
65
58
  decorators: [
59
+ withTheme,
66
60
  withPluginManager({
67
61
  plugins: [IntentPlugin()],
68
62
  capabilities: [
@@ -76,11 +70,12 @@ const meta = {
76
70
  ),
77
71
  ],
78
72
  }),
79
- withTheme,
80
- withLayout({ fullscreen: true }),
81
- withClientProvider({ createSpace: true, types: [ThreadType, ChannelType, DataType.Message] }),
73
+ withClientProvider({ createSpace: true, types: [Thread.Thread, Channel.Channel, Message.Message] }),
82
74
  ],
83
- parameters: { translations },
75
+ parameters: {
76
+ layout: 'fullscreen',
77
+ translations,
78
+ },
84
79
  } satisfies Meta<typeof DefaultStory>;
85
80
 
86
81
  export default meta;
@@ -5,25 +5,24 @@
5
5
  import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
6
6
 
7
7
  import { Obj, Ref } from '@dxos/echo';
8
- import { type Space, fullyQualifiedId, useMembers } from '@dxos/react-client/echo';
8
+ import { type Space, useMembers } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
- import { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';
10
+ import { Icon, ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
11
11
  import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
12
  import { StackItem } from '@dxos/react-ui-stack';
13
13
  import { mx } from '@dxos/react-ui-theme';
14
14
  import {
15
15
  MessageTextbox,
16
16
  type MessageTextboxProps,
17
- Thread,
17
+ Thread as ThreadComponent,
18
18
  type ThreadRootProps,
19
19
  threadLayout,
20
20
  } from '@dxos/react-ui-thread';
21
- import { DataType } from '@dxos/schema';
21
+ import { Message, type Thread } from '@dxos/types';
22
22
  import { isNonNullable } from '@dxos/util';
23
23
 
24
24
  import { useStatus } from '../hooks';
25
25
  import { meta } from '../meta';
26
- import { type ThreadType } from '../types';
27
26
  import { getMessageMetadata } from '../util';
28
27
 
29
28
  import { command } from './command-extension';
@@ -41,16 +40,25 @@ export const ChatHeading = ({ attendableId }: { attendableId?: string }) => {
41
40
  );
42
41
  };
43
42
 
44
- export type ChatContainerProps = {
45
- space: Space;
46
- thread: ThreadType;
47
- context?: Obj.Any;
48
- autoFocusTextbox?: boolean;
49
- } & Pick<ThreadRootProps, 'current'>;
50
-
51
- export const ChatContainer = ({ space, thread, context, current, autoFocusTextbox }: ChatContainerProps) => {
43
+ export type ChatContainerProps = ThemedClassName<
44
+ {
45
+ space: Space;
46
+ thread: Thread.Thread;
47
+ context?: Obj.Any;
48
+ autoFocusTextbox?: boolean;
49
+ } & Pick<ThreadRootProps, 'current'>
50
+ >;
51
+
52
+ export const ChatContainer = ({
53
+ classNames,
54
+ space,
55
+ thread,
56
+ context,
57
+ current,
58
+ autoFocusTextbox,
59
+ }: ChatContainerProps) => {
52
60
  const { t } = useTranslation(meta.id);
53
- const id = fullyQualifiedId(thread);
61
+ const id = Obj.getDXN(thread).toString();
54
62
  const identity = useIdentity()!;
55
63
  const members = useMembers(space?.key);
56
64
  const activity = useStatus(space, id);
@@ -67,7 +75,7 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
67
75
  () => [
68
76
  createBasicExtensions({ placeholder: t('message placeholder') }),
69
77
  createThemeExtensions({ themeMode }),
70
- listener({ onChange: (text) => (messageRef.current = text) }),
78
+ listener({ onChange: ({ text }) => (messageRef.current = text) }),
71
79
  command,
72
80
  ],
73
81
  [themeMode, _count],
@@ -92,7 +100,7 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
92
100
 
93
101
  thread.messages.push(
94
102
  Ref.make(
95
- Obj.make(DataType.Message, {
103
+ Obj.make(Message.Message, {
96
104
  created: new Date().toISOString(),
97
105
  sender: { identityDid: identity.did },
98
106
  blocks: [{ _tag: 'text', text: messageRef.current }],
@@ -109,12 +117,13 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
109
117
  };
110
118
 
111
119
  return (
112
- <Thread.Root
120
+ <ThreadComponent.Root
113
121
  current={current}
114
122
  id={id}
115
123
  classNames={[
116
- 'bs-full is-full max-is-prose mli-auto grid-rows-[1fr_min-content_min-content] overflow-hidden',
124
+ 'bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden',
117
125
  'transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0',
126
+ classNames,
118
127
  ]}
119
128
  >
120
129
  <ScrollArea.Root classNames='col-span-2'>
@@ -136,9 +145,8 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
136
145
  </ScrollArea.Root>
137
146
 
138
147
  <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />
139
-
140
- <Thread.Status activity={activity}>{t('activity message')}</Thread.Status>
141
- </Thread.Root>
148
+ <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>
149
+ </ThreadComponent.Root>
142
150
  );
143
151
  };
144
152
 
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
@@ -15,11 +13,11 @@ import { faker } from '@dxos/random';
15
13
  import { useQuery, useSpace } from '@dxos/react-client/echo';
16
14
  import { useIdentity } from '@dxos/react-client/halo';
17
15
  import { useAsyncEffect } from '@dxos/react-ui';
18
- import { AnchoredTo, DataType } from '@dxos/schema';
19
- import { layoutCentered, render, withLayout, withTheme } from '@dxos/storybook-utils';
16
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
17
+ import { render } from '@dxos/storybook-utils';
18
+ import { AnchoredTo, Message, Thread } from '@dxos/types';
20
19
 
21
20
  import { translations } from '../translations';
22
- import { ThreadType } from '../types';
23
21
 
24
22
  import { CommentsContainer } from './CommentsContainer';
25
23
  import { createCommentThread, createProposalThread } from './testing';
@@ -29,7 +27,7 @@ faker.seed(1);
29
27
  const DefaultStory = () => {
30
28
  const identity = useIdentity();
31
29
  const space = useSpace();
32
- const anchors = useQuery(space, Query.type(AnchoredTo));
30
+ const anchors = useQuery(space, Query.type(AnchoredTo.AnchoredTo));
33
31
 
34
32
  useAsyncEffect(async () => {
35
33
  if (identity && space) {
@@ -37,14 +35,14 @@ const DefaultStory = () => {
37
35
  const thread1 = space.db.add(createCommentThread(identity));
38
36
  const thread2 = space.db.add(createProposalThread(identity));
39
37
  space.db.add(
40
- Relation.make(AnchoredTo, {
38
+ Relation.make(AnchoredTo.AnchoredTo, {
41
39
  [Relation.Source]: thread1,
42
40
  [Relation.Target]: object,
43
41
  anchor: 'test',
44
42
  }),
45
43
  );
46
44
  space.db.add(
47
- Relation.make(AnchoredTo, {
45
+ Relation.make(AnchoredTo.AnchoredTo, {
48
46
  [Relation.Source]: thread2,
49
47
  [Relation.Target]: object,
50
48
  anchor: 'test',
@@ -57,11 +55,7 @@ const DefaultStory = () => {
57
55
  return null;
58
56
  }
59
57
 
60
- return (
61
- <div className='w-[30rem] overflow-y-auto bg-baseSurface'>
62
- <CommentsContainer anchors={anchors} onThreadDelete={console.log} onAcceptProposal={console.log} />
63
- </div>
64
- );
58
+ return <CommentsContainer anchors={anchors} onThreadDelete={console.log} onAcceptProposal={console.log} />;
65
59
  };
66
60
 
67
61
  const meta = {
@@ -69,14 +63,14 @@ const meta = {
69
63
  render: render(DefaultStory),
70
64
  decorators: [
71
65
  withTheme,
72
- withLayout({ fullscreen: true, classNames: layoutCentered }),
73
- // TODO(wittjosiah): This shouldn't depend on app framework. Should use withClientProvider instead.
74
- // Currently this is required due to useOnEditAnalytics.
66
+ withLayout({ container: 'column', scroll: true }),
67
+ // TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
68
+ // Currently this is required due to useOnEditAnalytics.
75
69
  withPluginManager({
76
70
  plugins: [
77
71
  IntentPlugin(),
78
72
  ClientPlugin({
79
- types: [DataType.Message, ThreadType, AnchoredTo],
73
+ types: [Message.Message, Thread.Thread, AnchoredTo.AnchoredTo],
80
74
  onClientInitialized: async ({ client }) => {
81
75
  await client.halo.createIdentity();
82
76
  },
@@ -4,18 +4,16 @@
4
4
 
5
5
  import React, { useEffect } from 'react';
6
6
 
7
- import { Relation } from '@dxos/echo';
8
- import { fullyQualifiedId } from '@dxos/react-client/echo';
7
+ import { Obj, Relation } from '@dxos/echo';
9
8
  import { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';
10
- import { type AnchoredTo } from '@dxos/schema';
9
+ import { type AnchoredTo, type Thread } from '@dxos/types';
11
10
 
12
11
  import { meta } from '../meta';
13
- import { type ThreadType } from '../types';
14
12
 
15
13
  import { CommentsThreadContainer, type CommentsThreadContainerProps } from './CommentsThreadContainer';
16
14
 
17
15
  export type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor' | 'current'> & {
18
- anchors: AnchoredTo[];
16
+ anchors: AnchoredTo.AnchoredTo[];
19
17
  currentId?: string;
20
18
  showResolvedThreads?: boolean;
21
19
  };
@@ -63,8 +61,8 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
63
61
  return (
64
62
  <div>
65
63
  {filteredAnchors.map((anchor) => {
66
- const thread = Relation.getSource(anchor) as ThreadType;
67
- const threadId = fullyQualifiedId(thread);
64
+ const thread = Relation.getSource(anchor) as Thread.Thread;
65
+ const threadId = Obj.getDXN(thread).toString();
68
66
  return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;
69
67
  })}
70
68
  </div>
@@ -4,32 +4,36 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useRef, useState } from 'react';
6
6
 
7
- import { Ref, Relation } from '@dxos/echo';
8
- import { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';
7
+ import { Obj, Ref, Relation } from '@dxos/echo';
8
+ import { getSpace, useMembers } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
10
  import { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';
11
11
  import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
12
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
13
- import { MessageTextbox, type MessageTextboxProps, Thread, type ThreadRootProps } from '@dxos/react-ui-thread';
14
- import { type AnchoredTo } from '@dxos/schema';
13
+ import {
14
+ MessageTextbox,
15
+ type MessageTextboxProps,
16
+ Thread as ThreadComponent,
17
+ type ThreadRootProps,
18
+ } from '@dxos/react-ui-thread';
19
+ import { type AnchoredTo, type Thread } from '@dxos/types';
15
20
  import { isNonNullable } from '@dxos/util';
16
21
 
17
22
  import { useStatus } from '../hooks';
18
23
  import { meta } from '../meta';
19
- import { type ThreadType } from '../types';
20
24
  import { getMessageMetadata } from '../util';
21
25
 
22
26
  import { command } from './command-extension';
23
27
  import { MessageContainer, buttonClassNames, buttonGroupClassNames } from './MessageContainer';
24
28
 
25
29
  export type CommentsThreadContainerProps = {
26
- anchor: AnchoredTo;
27
- onAttend?: (anchor: AnchoredTo) => void;
28
- onComment?: (anchor: AnchoredTo, message: string) => void;
29
- onResolve?: (anchor: AnchoredTo) => void;
30
- onMessageDelete?: (anchor: AnchoredTo, messageId: string) => void;
31
- onThreadDelete?: (anchor: AnchoredTo) => void;
32
- onAcceptProposal?: (anchor: AnchoredTo, messageId: string) => void;
30
+ anchor: AnchoredTo.AnchoredTo;
31
+ onAttend?: (anchor: AnchoredTo.AnchoredTo) => void;
32
+ onComment?: (anchor: AnchoredTo.AnchoredTo, message: string) => void;
33
+ onResolve?: (anchor: AnchoredTo.AnchoredTo) => void;
34
+ onMessageDelete?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;
35
+ onThreadDelete?: (anchor: AnchoredTo.AnchoredTo) => void;
36
+ onAcceptProposal?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;
33
37
  } & Pick<ThreadRootProps, 'current'>;
34
38
 
35
39
  export const CommentsThreadContainer = ({
@@ -42,29 +46,29 @@ export const CommentsThreadContainer = ({
42
46
  onThreadDelete,
43
47
  onAcceptProposal,
44
48
  }: CommentsThreadContainerProps) => {
49
+ const { themeMode } = useThemeContext();
45
50
  const { t } = useTranslation(meta.id);
46
51
  const identity = useIdentity()!;
47
52
  const space = getSpace(anchor);
48
53
  const members = useMembers(space?.key);
49
54
  const detached = !anchor.anchor;
50
- const thread = Relation.getSource(anchor) as ThreadType;
51
- const activity = useStatus(space, fullyQualifiedId(thread));
55
+ const thread = Relation.getSource(anchor) as Thread.Thread;
56
+ const activity = useStatus(space, Obj.getDXN(thread).toString());
52
57
  const threadScrollRef = useRef<HTMLDivElement | null>(null);
53
- const { themeMode } = useThemeContext();
54
58
 
55
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
59
+ const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);
60
+
56
61
  // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
57
- const [_count, _setCount] = useState(0);
58
- const rerenderEditor = () => _setCount((count) => count + 1);
62
+ const [state, setState] = useState({});
59
63
  const messageRef = useRef('');
60
64
  const extensions = useMemo(
61
65
  () => [
62
66
  createBasicExtensions({ placeholder: t('message placeholder') }),
63
67
  createThemeExtensions({ themeMode }),
64
- listener({ onChange: (text) => (messageRef.current = text) }),
68
+ listener({ onChange: ({ text }) => (messageRef.current = text) }),
65
69
  command,
66
70
  ],
67
- [_count],
71
+ [state],
68
72
  );
69
73
 
70
74
  // TODO(thure): Factor out.
@@ -85,14 +89,14 @@ export const CommentsThreadContainer = ({
85
89
  onComment?.(anchor, messageRef.current);
86
90
  messageRef.current = '';
87
91
  scrollToEnd('instant');
88
- rerenderEditor();
92
+ setState({});
89
93
 
90
94
  return true;
91
95
  }, [anchor, identity]);
92
96
 
93
97
  return (
94
- <Thread.Root
95
- id={fullyQualifiedId(thread)}
98
+ <ThreadComponent.Root
99
+ id={Obj.getDXN(thread).toString()}
96
100
  classNames='pbs-2 border-be border-subduedSeparator last:border-none'
97
101
  current={current}
98
102
  onClickCapture={handleAttend}
@@ -108,10 +112,10 @@ export const CommentsThreadContainer = ({
108
112
  >
109
113
  {detached ? (
110
114
  <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
111
- <Thread.Header detached>{thread.name}</Thread.Header>
115
+ <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>
112
116
  </Tooltip.Trigger>
113
117
  ) : (
114
- <Thread.Header>{thread.name}</Thread.Header>
118
+ <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>
115
119
  )}
116
120
  <div role='none' className={buttonGroupClassNames}>
117
121
  {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}
@@ -160,10 +164,10 @@ export const CommentsThreadContainer = ({
160
164
  */}
161
165
  <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />
162
166
 
163
- <Thread.Status activity={activity}>{t('activity message')}</Thread.Status>
167
+ <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>
164
168
 
165
169
  {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
166
170
  <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
167
- </Thread.Root>
171
+ </ThreadComponent.Root>
168
172
  );
169
173
  };