@dxos/plugin-thread 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (453) hide show
  1. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs +182 -0
  2. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs.map +7 -0
  3. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs +33 -0
  4. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs.map +7 -0
  5. package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs +15 -0
  6. package/dist/lib/browser/ChatContainer-2243UD2M.mjs +14 -0
  7. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs +204 -0
  8. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs.map +7 -0
  9. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs +20 -0
  10. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs.map +7 -0
  11. package/dist/lib/browser/app-graph-builder-5LCAM746.mjs +191 -0
  12. package/dist/lib/browser/app-graph-builder-5LCAM746.mjs.map +7 -0
  13. package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs +17 -0
  14. package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs.map +7 -0
  15. package/dist/lib/browser/blueprints/index.mjs +8 -0
  16. package/dist/lib/browser/call-manager-2PRP4QVZ.mjs +27 -0
  17. package/dist/lib/browser/call-manager-2PRP4QVZ.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-ZCEU5K23.mjs → chunk-ERK254BS.mjs} +207 -287
  19. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-G6FJBSXX.mjs +1123 -0
  21. package/dist/lib/browser/chunk-G6FJBSXX.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-HDEQRBOC.mjs → chunk-HDLDMR54.mjs} +79 -76
  23. package/dist/lib/browser/chunk-HDLDMR54.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-XYUJXHYV.mjs → chunk-ISCHODBV.mjs} +1 -1
  25. package/dist/lib/browser/{chunk-XYUJXHYV.mjs.map → chunk-ISCHODBV.mjs.map} +2 -2
  26. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  27. package/dist/lib/browser/chunk-LUK4UNFA.mjs +20 -0
  28. package/dist/lib/browser/chunk-LUK4UNFA.mjs.map +7 -0
  29. package/dist/lib/browser/chunk-PDHCY236.mjs +223 -0
  30. package/dist/lib/browser/chunk-PDHCY236.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-PL5LIVP4.mjs +105 -0
  32. package/dist/lib/browser/chunk-PL5LIVP4.mjs.map +7 -0
  33. package/dist/lib/browser/chunk-U32R23JO.mjs +277 -0
  34. package/dist/lib/browser/chunk-U32R23JO.mjs.map +7 -0
  35. package/dist/lib/browser/chunk-UVUCB7QO.mjs +125 -0
  36. package/dist/lib/browser/chunk-UVUCB7QO.mjs.map +7 -0
  37. package/dist/lib/browser/index.mjs +138 -141
  38. package/dist/lib/browser/index.mjs.map +4 -4
  39. package/dist/lib/browser/markdown-GRRPCZHJ.mjs +210 -0
  40. package/dist/lib/browser/markdown-GRRPCZHJ.mjs.map +7 -0
  41. package/dist/lib/browser/meta.json +1 -1
  42. package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs +442 -0
  43. package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs.map +7 -0
  44. package/dist/lib/browser/react-root-7UFFPPRD.mjs +26 -0
  45. package/dist/lib/browser/react-root-7UFFPPRD.mjs.map +7 -0
  46. package/dist/lib/browser/react-surface-TIHBSZPD.mjs +113 -0
  47. package/dist/lib/browser/react-surface-TIHBSZPD.mjs.map +7 -0
  48. package/dist/lib/browser/repair-TBU45SBG.mjs +40 -0
  49. package/dist/lib/browser/repair-TBU45SBG.mjs.map +7 -0
  50. package/dist/lib/browser/settings-Y75FG6XR.mjs +35 -0
  51. package/dist/lib/browser/settings-Y75FG6XR.mjs.map +7 -0
  52. package/dist/lib/browser/state-OBTMMEUZ.mjs +25 -0
  53. package/dist/lib/browser/state-OBTMMEUZ.mjs.map +7 -0
  54. package/dist/lib/browser/types/index.mjs +11 -12
  55. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs +183 -0
  56. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs.map +7 -0
  57. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs +34 -0
  58. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs.map +7 -0
  59. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs +16 -0
  60. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs.map +7 -0
  61. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs +15 -0
  62. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs.map +7 -0
  63. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs +205 -0
  64. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs.map +7 -0
  65. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs +21 -0
  66. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs.map +7 -0
  67. package/dist/lib/node-esm/app-graph-builder-VBLHLX75.mjs +192 -0
  68. package/dist/lib/node-esm/app-graph-builder-VBLHLX75.mjs.map +7 -0
  69. package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs +18 -0
  70. package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs.map +7 -0
  71. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  72. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  73. package/dist/lib/node-esm/call-manager-BLQCEM2F.mjs +28 -0
  74. package/dist/lib/node-esm/call-manager-BLQCEM2F.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-6K5ACCGB.mjs +107 -0
  76. package/dist/lib/node-esm/chunk-6K5ACCGB.mjs.map +7 -0
  77. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs +224 -0
  78. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs.map +7 -0
  79. package/dist/lib/node-esm/{chunk-OBVAURUU.mjs → chunk-GPPP2MZ3.mjs} +7 -2
  80. package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs.map +7 -0
  81. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  82. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  83. package/dist/lib/node-esm/chunk-IQUV7DR6.mjs +1124 -0
  84. package/dist/lib/node-esm/chunk-IQUV7DR6.mjs.map +7 -0
  85. package/dist/lib/node-esm/{chunk-TIPIOH2J.mjs → chunk-QP3KQOPQ.mjs} +207 -287
  86. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  87. package/dist/lib/node-esm/chunk-QYAVWNVM.mjs +278 -0
  88. package/dist/lib/node-esm/chunk-QYAVWNVM.mjs.map +7 -0
  89. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs +126 -0
  90. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs.map +7 -0
  91. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs → chunk-VBI32FGI.mjs} +1 -1
  92. package/dist/lib/node-esm/{chunk-2V3WSLUZ.mjs.map → chunk-VBI32FGI.mjs.map} +2 -2
  93. package/dist/lib/node-esm/{chunk-2MMJF7DW.mjs → chunk-YN2Y7GPW.mjs} +79 -76
  94. package/dist/lib/node-esm/chunk-YN2Y7GPW.mjs.map +7 -0
  95. package/dist/lib/node-esm/index.mjs +138 -141
  96. package/dist/lib/node-esm/index.mjs.map +4 -4
  97. package/dist/lib/node-esm/markdown-WHWUESF7.mjs +211 -0
  98. package/dist/lib/node-esm/markdown-WHWUESF7.mjs.map +7 -0
  99. package/dist/lib/node-esm/meta.json +1 -1
  100. package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs +443 -0
  101. package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs.map +7 -0
  102. package/dist/lib/node-esm/react-root-D7CWS5XP.mjs +27 -0
  103. package/dist/lib/node-esm/react-root-D7CWS5XP.mjs.map +7 -0
  104. package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs +114 -0
  105. package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs.map +7 -0
  106. package/dist/lib/node-esm/repair-7JEKRNR3.mjs +41 -0
  107. package/dist/lib/node-esm/repair-7JEKRNR3.mjs.map +7 -0
  108. package/dist/lib/node-esm/settings-W4JN2YKJ.mjs +36 -0
  109. package/dist/lib/node-esm/settings-W4JN2YKJ.mjs.map +7 -0
  110. package/dist/lib/node-esm/state-7UWCSIWQ.mjs +26 -0
  111. package/dist/lib/node-esm/state-7UWCSIWQ.mjs.map +7 -0
  112. package/dist/lib/node-esm/types/index.mjs +11 -12
  113. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  114. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  115. package/dist/types/src/blueprints/index.d.ts +2 -0
  116. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  117. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  118. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  119. package/dist/types/src/calls/call-manager.d.ts +40 -30
  120. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  121. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  122. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  123. package/dist/types/src/calls/media-manager.d.ts +1 -1
  124. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  125. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  126. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  127. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  128. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  130. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  132. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  133. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +6 -0
  134. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  135. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  136. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  137. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  138. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  139. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  140. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  141. package/dist/types/src/capabilities/index.d.ts +10 -16
  142. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  143. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  144. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  145. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  146. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  147. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  148. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  149. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  150. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  151. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  152. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  153. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  154. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  155. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  156. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  157. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  158. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  159. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  160. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  161. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  162. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  163. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  164. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  165. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  166. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  167. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  168. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  169. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  170. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  171. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  172. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  173. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  174. package/dist/types/src/components/Comments.stories.d.ts +5 -5
  175. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  176. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  177. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  178. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  179. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  180. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  181. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  182. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  183. package/dist/types/src/components/MessageContainer.d.ts +6 -5
  184. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  185. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  186. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -1
  187. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -1
  189. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  190. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  191. package/dist/types/src/components/index.d.ts +0 -6
  192. package/dist/types/src/components/index.d.ts.map +1 -1
  193. package/dist/types/src/components/testing.d.ts +3 -3
  194. package/dist/types/src/components/testing.d.ts.map +1 -1
  195. package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
  196. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  197. package/dist/types/src/containers/CallDebugPanel/index.d.ts +3 -0
  198. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  199. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  200. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  201. package/dist/types/src/containers/CallSidebar/index.d.ts +3 -0
  202. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  203. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +12 -0
  204. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  205. package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.stories.d.ts +77 -7
  206. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  207. package/dist/types/src/containers/ChannelContainer/index.d.ts +3 -0
  208. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  209. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +17 -0
  210. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  211. package/dist/types/src/{components/Chat.stories.d.ts → containers/ChatContainer/ChatContainer.stories.d.ts} +77 -6
  212. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
  213. package/dist/types/src/containers/ChatContainer/index.d.ts +3 -0
  214. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  215. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +5 -0
  216. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  217. package/dist/types/src/containers/ThreadCompanion/index.d.ts +3 -0
  218. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  219. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts +8 -0
  220. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  221. package/dist/types/src/containers/ThreadSettings/index.d.ts +3 -0
  222. package/dist/types/src/containers/ThreadSettings/index.d.ts.map +1 -0
  223. package/dist/types/src/containers/index.d.ts +8 -0
  224. package/dist/types/src/containers/index.d.ts.map +1 -0
  225. package/dist/types/src/extensions/threads.d.ts +7 -2
  226. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  227. package/dist/types/src/functions/create-proposals.d.ts +13 -0
  228. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  229. package/dist/types/src/functions/index.d.ts +14 -0
  230. package/dist/types/src/functions/index.d.ts.map +1 -0
  231. package/dist/types/src/hooks/analytics.d.ts +2 -3
  232. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  233. package/dist/types/src/hooks/index.d.ts +2 -2
  234. package/dist/types/src/hooks/index.d.ts.map +1 -1
  235. package/dist/types/src/index.d.ts +1 -1
  236. package/dist/types/src/index.d.ts.map +1 -1
  237. package/dist/types/src/meta.d.ts +2 -2
  238. package/dist/types/src/meta.d.ts.map +1 -1
  239. package/dist/types/src/testing/stories.d.ts +2 -1
  240. package/dist/types/src/testing/stories.d.ts.map +1 -1
  241. package/dist/types/src/translations.d.ts +76 -6
  242. package/dist/types/src/translations.d.ts.map +1 -1
  243. package/dist/types/src/types/Channel.d.ts +711 -0
  244. package/dist/types/src/types/Channel.d.ts.map +1 -0
  245. package/dist/types/src/types/capabilities.d.ts +23 -0
  246. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  247. package/dist/types/src/types/index.d.ts +2 -1
  248. package/dist/types/src/types/index.d.ts.map +1 -1
  249. package/dist/types/src/types/types.d.ts +3294 -446
  250. package/dist/types/src/types/types.d.ts.map +1 -1
  251. package/dist/types/tsconfig.tsbuildinfo +1 -1
  252. package/package.json +87 -64
  253. package/src/ThreadPlugin.tsx +68 -107
  254. package/src/blueprints/index.ts +5 -0
  255. package/src/blueprints/thread-blueprint.ts +40 -0
  256. package/src/calls/call-manager.ts +76 -52
  257. package/src/calls/call-swarm-synchronizer.ts +2 -2
  258. package/src/calls/media-manager.ts +10 -7
  259. package/src/calls/util/calls-service.ts +1 -1
  260. package/src/calls/util/stub-media-streams.ts +2 -2
  261. package/src/calls/util/task-scheduling.ts +4 -4
  262. package/src/calls-service.stories.tsx +2 -2
  263. package/src/capabilities/app-graph-builder/app-graph-builder.ts +202 -0
  264. package/src/capabilities/app-graph-builder/index.ts +7 -0
  265. package/src/capabilities/blueprint-definition/blueprint-definition.ts +17 -0
  266. package/src/capabilities/blueprint-definition/index.ts +7 -0
  267. package/src/capabilities/call-manager/call-manager.ts +26 -0
  268. package/src/capabilities/call-manager/index.ts +7 -0
  269. package/src/capabilities/index.ts +10 -13
  270. package/src/capabilities/markdown/index.ts +7 -0
  271. package/src/capabilities/markdown/markdown.ts +82 -0
  272. package/src/capabilities/operation-resolver/index.ts +7 -0
  273. package/src/capabilities/operation-resolver/operation-resolver.ts +399 -0
  274. package/src/capabilities/react-root/index.ts +7 -0
  275. package/src/capabilities/react-root/react-root.tsx +20 -0
  276. package/src/capabilities/react-surface/index.ts +7 -0
  277. package/src/capabilities/react-surface/react-surface.tsx +98 -0
  278. package/src/capabilities/repair/index.ts +7 -0
  279. package/src/capabilities/repair/repair.ts +55 -0
  280. package/src/capabilities/settings/index.ts +7 -0
  281. package/src/capabilities/settings/settings.ts +34 -0
  282. package/src/capabilities/state/index.ts +7 -0
  283. package/src/capabilities/state/state.ts +22 -0
  284. package/src/components/Call/Call.tsx +8 -4
  285. package/src/components/Call/Toolbar.tsx +36 -29
  286. package/src/components/Comments.stories.tsx +31 -30
  287. package/src/components/CommentsContainer.tsx +14 -15
  288. package/src/components/CommentsThreadContainer.tsx +42 -39
  289. package/src/components/Lobby/Lobby.tsx +9 -7
  290. package/src/components/Media/AudioStream.tsx +2 -2
  291. package/src/components/Media/VideoObject.stories.tsx +3 -3
  292. package/src/components/Media/VideoObject.tsx +1 -1
  293. package/src/components/MessageContainer.tsx +62 -31
  294. package/src/components/Participant/Participant.tsx +32 -19
  295. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -3
  296. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +1 -1
  297. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +3 -3
  298. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  299. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +7 -4
  300. package/src/components/command-extension.ts +3 -3
  301. package/src/components/index.ts +0 -10
  302. package/src/components/testing.ts +7 -9
  303. package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +13 -15
  304. package/src/containers/CallDebugPanel/index.ts +7 -0
  305. package/src/containers/CallSidebar/CallSidebar.tsx +17 -0
  306. package/src/containers/CallSidebar/index.ts +7 -0
  307. package/src/{components → containers/ChannelContainer}/ChannelContainer.stories.tsx +16 -15
  308. package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +75 -59
  309. package/src/containers/ChannelContainer/index.ts +7 -0
  310. package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +23 -26
  311. package/src/{components → containers/ChatContainer}/ChatContainer.tsx +56 -52
  312. package/src/containers/ChatContainer/index.ts +7 -0
  313. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +197 -0
  314. package/src/containers/ThreadCompanion/index.ts +7 -0
  315. package/src/containers/ThreadSettings/ThreadSettings.tsx +22 -0
  316. package/src/containers/ThreadSettings/index.ts +7 -0
  317. package/src/containers/index.ts +12 -0
  318. package/src/extensions/threads.ts +86 -42
  319. package/src/functions/create-proposals.ts +57 -0
  320. package/src/functions/index.ts +9 -0
  321. package/src/hooks/analytics.ts +22 -21
  322. package/src/hooks/index.ts +3 -2
  323. package/src/index.ts +1 -1
  324. package/src/meta.ts +8 -3
  325. package/src/testing/stories.ts +17 -15
  326. package/src/translations.ts +6 -3
  327. package/src/types/Channel.ts +30 -0
  328. package/src/types/capabilities.ts +34 -0
  329. package/src/types/index.ts +2 -1
  330. package/src/types/types.ts +167 -88
  331. package/dist/lib/browser/ChannelContainer-BGDGZHV4.mjs +0 -16
  332. package/dist/lib/browser/ChatContainer-75KJZ4XR.mjs +0 -15
  333. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs +0 -171
  334. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +0 -7
  335. package/dist/lib/browser/call-manager-BCKLI4QD.mjs +0 -24
  336. package/dist/lib/browser/call-manager-BCKLI4QD.mjs.map +0 -7
  337. package/dist/lib/browser/chunk-2MUYQOQE.mjs +0 -23
  338. package/dist/lib/browser/chunk-2MUYQOQE.mjs.map +0 -7
  339. package/dist/lib/browser/chunk-B7YQ7QR2.mjs +0 -376
  340. package/dist/lib/browser/chunk-B7YQ7QR2.mjs.map +0 -7
  341. package/dist/lib/browser/chunk-CMCVHULC.mjs +0 -986
  342. package/dist/lib/browser/chunk-CMCVHULC.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-HDEQRBOC.mjs.map +0 -7
  344. package/dist/lib/browser/chunk-L326LSNS.mjs +0 -18
  345. package/dist/lib/browser/chunk-L326LSNS.mjs.map +0 -7
  346. package/dist/lib/browser/chunk-T4KJ5JR4.mjs +0 -15
  347. package/dist/lib/browser/chunk-T4KJ5JR4.mjs.map +0 -7
  348. package/dist/lib/browser/chunk-VJMKS4CZ.mjs +0 -619
  349. package/dist/lib/browser/chunk-VJMKS4CZ.mjs.map +0 -7
  350. package/dist/lib/browser/chunk-VTYX3SIM.mjs +0 -147
  351. package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +0 -7
  352. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
  353. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs +0 -427
  354. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +0 -7
  355. package/dist/lib/browser/markdown-R6MGRIA6.mjs +0 -169
  356. package/dist/lib/browser/markdown-R6MGRIA6.mjs.map +0 -7
  357. package/dist/lib/browser/react-root-UMSBTN6H.mjs +0 -28
  358. package/dist/lib/browser/react-root-UMSBTN6H.mjs.map +0 -7
  359. package/dist/lib/browser/react-surface-SXMQEWKE.mjs +0 -109
  360. package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +0 -7
  361. package/dist/lib/browser/settings-TCNF54PN.mjs +0 -22
  362. package/dist/lib/browser/settings-TCNF54PN.mjs.map +0 -7
  363. package/dist/lib/browser/state-ZQ4IPOJT.mjs +0 -34
  364. package/dist/lib/browser/state-ZQ4IPOJT.mjs.map +0 -7
  365. package/dist/lib/browser/toolkit-JF4B4QIO.mjs +0 -84
  366. package/dist/lib/browser/toolkit-JF4B4QIO.mjs.map +0 -7
  367. package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs +0 -17
  368. package/dist/lib/node-esm/ChatContainer-SH6LTFQL.mjs +0 -16
  369. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs +0 -172
  370. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +0 -7
  371. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs +0 -25
  372. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs.map +0 -7
  373. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs +0 -987
  374. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +0 -7
  375. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +0 -7
  376. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs +0 -148
  377. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs.map +0 -7
  378. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs +0 -377
  379. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs.map +0 -7
  380. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs +0 -25
  381. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs.map +0 -7
  382. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs +0 -19
  383. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs.map +0 -7
  384. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs +0 -620
  385. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs.map +0 -7
  386. package/dist/lib/node-esm/chunk-OBVAURUU.mjs.map +0 -7
  387. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
  388. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs +0 -428
  389. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +0 -7
  390. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs +0 -170
  391. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs.map +0 -7
  392. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs +0 -29
  393. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs.map +0 -7
  394. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs +0 -110
  395. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs.map +0 -7
  396. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs +0 -23
  397. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs.map +0 -7
  398. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs +0 -35
  399. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs.map +0 -7
  400. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs +0 -85
  401. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs.map +0 -7
  402. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  403. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  404. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  405. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  406. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  407. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  408. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  409. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  410. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  411. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  412. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  413. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  414. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  415. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  416. package/dist/types/src/capabilities/settings.d.ts +0 -4
  417. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  418. package/dist/types/src/capabilities/state.d.ts +0 -7
  419. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  420. package/dist/types/src/capabilities/toolkit.d.ts +0 -6
  421. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  422. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  423. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  424. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  425. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  426. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  427. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  428. package/dist/types/src/components/ChatContainer.d.ts +0 -17
  429. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  430. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  431. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  432. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  433. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  434. package/dist/types/src/types/schema.d.ts +0 -179
  435. package/dist/types/src/types/schema.d.ts.map +0 -1
  436. package/src/capabilities/app-graph-builder.ts +0 -184
  437. package/src/capabilities/call-manager.ts +0 -20
  438. package/src/capabilities/capabilities.ts +0 -33
  439. package/src/capabilities/intent-resolver.ts +0 -348
  440. package/src/capabilities/markdown.ts +0 -69
  441. package/src/capabilities/react-root.tsx +0 -17
  442. package/src/capabilities/react-surface.tsx +0 -89
  443. package/src/capabilities/settings.ts +0 -19
  444. package/src/capabilities/state.ts +0 -26
  445. package/src/capabilities/toolkit.ts +0 -82
  446. package/src/components/CallSidebar.tsx +0 -18
  447. package/src/components/ThreadComplementary.tsx +0 -181
  448. package/src/components/ThreadSettings.tsx +0 -16
  449. package/src/types/schema.ts +0 -33
  450. /package/dist/lib/browser/{ChannelContainer-BGDGZHV4.mjs.map → ChannelContainer-EPYG4QAC.mjs.map} +0 -0
  451. /package/dist/lib/browser/{ChatContainer-75KJZ4XR.mjs.map → ChatContainer-2243UD2M.mjs.map} +0 -0
  452. /package/dist/lib/{node-esm/ChannelContainer-OXC6BTU7.mjs.map → browser/blueprints/index.mjs.map} +0 -0
  453. /package/dist/lib/{node-esm/ChatContainer-SH6LTFQL.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ThreadSettings = Capability.lazy('ThreadSettings', () => import('./settings'));
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+ import { createKvsStore } from '@dxos/effect';
10
+
11
+ import { meta } from '../../meta';
12
+ import { ThreadSettingsSchema } from '../../types';
13
+ import { ThreadCapabilities } from '../../types/capabilities';
14
+
15
+ export default Capability.makeModule(() =>
16
+ Effect.sync(() => {
17
+ const settingsAtom = createKvsStore({
18
+ key: meta.id,
19
+ schema: ThreadSettingsSchema,
20
+ defaultValue: () => ({}),
21
+ });
22
+
23
+ return [
24
+ // Expose atom directly for programmatic access.
25
+ Capability.contributes(ThreadCapabilities.Settings, settingsAtom),
26
+ // Contribute to common settings for UI discovery.
27
+ Capability.contributes(AppCapabilities.Settings, {
28
+ prefix: meta.id,
29
+ schema: ThreadSettingsSchema,
30
+ atom: settingsAtom,
31
+ }),
32
+ ];
33
+ }),
34
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ThreadState = Capability.lazy('ThreadState', () => import('./state'));
@@ -0,0 +1,22 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Capability } from '@dxos/app-framework';
9
+
10
+ import { ThreadCapabilities, type ThreadState, type ViewStore } from '../../types';
11
+
12
+ export default Capability.makeModule(
13
+ Effect.fnUntraced(function* () {
14
+ const stateAtom = Atom.make<ThreadState>({ toolbar: {}, drafts: {} }).pipe(Atom.keepAlive);
15
+ const viewStoreAtom = Atom.make<ViewStore>({}).pipe(Atom.keepAlive);
16
+
17
+ return [
18
+ Capability.contributes(ThreadCapabilities.State, stateAtom),
19
+ Capability.contributes(ThreadCapabilities.ViewState, viewStoreAtom),
20
+ ];
21
+ }),
22
+ );
@@ -2,13 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React, { type FC, type PropsWithChildren } from 'react';
6
7
 
7
- import { useCapability } from '@dxos/app-framework';
8
+ import { useCapability } from '@dxos/app-framework/ui';
8
9
  import { type ThemedClassName } from '@dxos/react-ui';
9
10
 
10
- import { ThreadCapabilities } from '../../capabilities';
11
11
  import { useDebugMode } from '../../hooks';
12
+ import { ThreadCapabilities } from '../../types';
12
13
  import { AudioStream } from '../Media';
13
14
  import { ParticipantGrid } from '../Participant';
14
15
 
@@ -34,8 +35,9 @@ type CallAudioProps = {};
34
35
 
35
36
  const CallAudio: FC<CallAudioProps> = () => {
36
37
  const call = useCapability(ThreadCapabilities.CallManager);
38
+ const audioTracksToPlay = useAtomValue(call.audioTracksToPlayAtom);
37
39
 
38
- return <AudioStream tracks={call.audioTracksToPlay} />;
40
+ return <AudioStream tracks={audioTracksToPlay} />;
39
41
  };
40
42
 
41
43
  CallAudio.displayName = 'CallAudio';
@@ -51,10 +53,12 @@ type CallGridProps = {
51
53
  const CallGrid: FC<CallGridProps> = ({ fullscreen }) => {
52
54
  const debug = useDebugMode();
53
55
  const call = useCapability(ThreadCapabilities.CallManager);
56
+ const self = useAtomValue(call.selfAtom);
57
+ const users = useAtomValue(call.usersAtom);
54
58
 
55
59
  return (
56
60
  <div className='grid grow p-4 dark:bg-neutral-900'>
57
- <ParticipantGrid self={call.self} users={call.users} debug={debug} fullscreen={fullscreen} />
61
+ <ParticipantGrid self={self} users={users} debug={debug} fullscreen={fullscreen} />
58
62
  </div>
59
63
  );
60
64
  };
@@ -2,11 +2,14 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React from 'react';
6
7
 
7
- import { useAppGraph, useCapability } from '@dxos/app-framework';
8
+ import { useCapability } from '@dxos/app-framework/ui';
9
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
10
+ import { Obj } from '@dxos/echo';
11
+ import { Node, useActionRunner } from '@dxos/plugin-graph';
8
12
  import { useActions, useNode } from '@dxos/plugin-graph';
9
- import { fullyQualifiedId } from '@dxos/react-client/echo';
10
13
  import {
11
14
  Icon,
12
15
  IconButton,
@@ -16,14 +19,14 @@ import {
16
19
  toLocalizedString,
17
20
  useTranslation,
18
21
  } from '@dxos/react-ui';
19
- import { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';
22
+ import { groupHoverControlItemWithTransition, mx } from '@dxos/ui-theme';
20
23
 
21
- import { ThreadCapabilities } from '../../capabilities';
22
24
  import { meta } from '../../meta';
23
- import { type ChannelType } from '../../types';
25
+ import { ThreadCapabilities } from '../../types';
26
+ import { type Channel } from '../../types';
24
27
 
25
28
  export type ToolbarProps = ThemedClassName<{
26
- channel?: ChannelType;
29
+ channel?: Channel.Channel;
27
30
  participants?: number;
28
31
  autoHideControls?: boolean;
29
32
  isInRoom?: boolean;
@@ -42,40 +45,43 @@ export const Toolbar = ({
42
45
  }: ToolbarProps) => {
43
46
  const { t } = useTranslation(meta.id);
44
47
  const { graph } = useAppGraph();
48
+ const runAction = useActionRunner();
45
49
  const call = useCapability(ThreadCapabilities.CallManager);
50
+ const media = useAtomValue(call.mediaAtom);
51
+ const joined = useAtomValue(call.joinedAtom);
52
+ const raisedHand = useAtomValue(call.raisedHandAtom);
46
53
 
47
54
  // Channel app graph node.
48
- const node = useNode(graph, channel && fullyQualifiedId(channel));
55
+ const node = useNode(graph, channel && Obj.getDXN(channel).toString());
49
56
  const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === 'toolbar');
50
57
 
51
58
  // Screen sharing.
52
- const isScreensharing = call.media.screenshareTrack !== undefined;
59
+ const isScreensharing = media.screenshareTrack !== undefined;
53
60
  const canSharescreen =
54
61
  typeof navigator.mediaDevices !== 'undefined' && navigator.mediaDevices.getDisplayMedia !== undefined;
55
62
 
56
63
  // TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.
57
64
  return (
58
65
  <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>
59
- <NaturalToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>
66
+ <NaturalToolbar.Root classNames={['p-2 bg-modal-surface rounded-md shadow-md', classNames]}>
60
67
  <ToggleButton
61
- active={call.media.audioEnabled}
68
+ active={media.audioEnabled}
62
69
  state={{
63
70
  on: {
64
71
  icon: 'ph--microphone--regular',
65
72
  label: t('mic off'),
66
73
  onClick: () => call.turnAudioOff(),
67
- classNames: 'bg-callActive',
74
+ classNames: 'bg-call-active',
68
75
  },
69
76
  off: {
70
77
  icon: 'ph--microphone-slash--duotone',
71
78
  label: t('mic on'),
72
79
  onClick: () => call.turnAudioOn(),
73
- classNames: [call.joined && 'bg-callAlert'],
74
80
  },
75
81
  }}
76
82
  />
77
83
  <ToggleButton
78
- active={call.media.videoEnabled}
84
+ active={media.videoEnabled}
79
85
  state={{
80
86
  on: {
81
87
  icon: 'ph--video-camera--regular',
@@ -91,13 +97,13 @@ export const Toolbar = ({
91
97
  />
92
98
 
93
99
  {(participants !== undefined && (
94
- <div className='flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued'>
100
+ <div className='flex justify-center items-center gap-2 w-[5rem] text-xs text-subdued'>
95
101
  <Icon icon='ph--users--regular' size={4} />
96
102
  <div>{participants}</div>
97
103
  </div>
98
104
  )) || <NaturalToolbar.Separator variant='gap' />}
99
105
 
100
- {call.joined && (
106
+ {joined && (
101
107
  <>
102
108
  <ToggleButton
103
109
  disabled={!canSharescreen}
@@ -117,25 +123,26 @@ export const Toolbar = ({
117
123
  />
118
124
 
119
125
  {/* Companion actions. */}
120
- {actions.map((action) => (
121
- <IconButton
122
- key={action.id}
123
- {...defaultButtonProps}
124
- icon={action.properties.icon}
125
- label={toLocalizedString(action.properties.label, t)}
126
- classNames={action.properties.classNames}
127
- onClick={() => action.data({ node })}
128
- />
129
- ))}
126
+ {actions
127
+ .filter((action): action is Node.Action => Node.isAction(action))
128
+ .map((action) => (
129
+ <IconButton
130
+ key={action.id}
131
+ {...defaultButtonProps}
132
+ icon={action.properties.icon}
133
+ label={toLocalizedString(action.properties.label, t)}
134
+ classNames={action.properties.classNames}
135
+ onClick={() => node && void runAction(action, { parent: node })}
136
+ />
137
+ ))}
130
138
 
131
139
  <ToggleButton
132
- active={call.raisedHand}
140
+ active={raisedHand}
133
141
  state={{
134
142
  on: {
135
143
  icon: 'ph--hand-waving--regular',
136
144
  label: t('lower hand'),
137
145
  onClick: () => call.setRaisedHand(false),
138
- classNames: [call.joined && 'bg-callAlert'],
139
146
  },
140
147
  off: {
141
148
  icon: 'ph--hand-palm--duotone',
@@ -146,7 +153,7 @@ export const Toolbar = ({
146
153
  />
147
154
  </>
148
155
  )}
149
- {call.joined ? (
156
+ {joined ? (
150
157
  <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />
151
158
  ) : (
152
159
  <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />
@@ -174,7 +181,7 @@ const defaultButtonProps: Partial<IconButtonProps> = {
174
181
  const ToggleButton = ({ active, state }: ToolbarButtonProps) => (
175
182
  <IconButton
176
183
  {...defaultButtonProps}
177
- classNames={[active ? (state.on.classNames ?? 'bg-callActive') : state.off.classNames]}
184
+ classNames={[active ? (state.on.classNames ?? 'bg-call-active') : state.off.classNames]}
178
185
  icon={active ? state.on.icon : state.off.icon}
179
186
  label={active ? state.on.label : state.off.label}
180
187
  onClick={active ? state.on.onClick : state.off.onClick}
@@ -3,22 +3,23 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
  import React from 'react';
7
8
 
8
- import { IntentPlugin } from '@dxos/app-framework';
9
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
9
10
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { Obj, Query, Relation, Type } from '@dxos/echo';
11
+ import { Obj, Query, Relation } from '@dxos/echo';
12
+ import { TestSchema } from '@dxos/echo/testing';
11
13
  import { ClientPlugin } from '@dxos/plugin-client';
12
14
  import { faker } from '@dxos/random';
13
- import { useQuery, useSpace } from '@dxos/react-client/echo';
15
+ import { useDatabase, useQuery } from '@dxos/react-client/echo';
14
16
  import { useIdentity } from '@dxos/react-client/halo';
15
17
  import { useAsyncEffect } from '@dxos/react-ui';
16
- import { withTheme } from '@dxos/react-ui/testing';
17
- import { AnchoredTo, DataType } from '@dxos/schema';
18
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
18
19
  import { render } from '@dxos/storybook-utils';
20
+ import { AnchoredTo, Message, Thread } from '@dxos/types';
19
21
 
20
22
  import { translations } from '../translations';
21
- import { ThreadType } from '../types';
22
23
 
23
24
  import { CommentsContainer } from './CommentsContainer';
24
25
  import { createCommentThread, createProposalThread } from './testing';
@@ -27,32 +28,32 @@ faker.seed(1);
27
28
 
28
29
  const DefaultStory = () => {
29
30
  const identity = useIdentity();
30
- const space = useSpace();
31
- const anchors = useQuery(space, Query.type(AnchoredTo));
31
+ const db = useDatabase();
32
+ const anchors = useQuery(db, Query.type(AnchoredTo.AnchoredTo));
32
33
 
33
34
  useAsyncEffect(async () => {
34
- if (identity && space) {
35
- const object = space.db.add(Obj.make(Type.Expando, {}));
36
- const thread1 = space.db.add(createCommentThread(identity));
37
- const thread2 = space.db.add(createProposalThread(identity));
38
- space.db.add(
39
- Relation.make(AnchoredTo, {
35
+ if (identity && db) {
36
+ const object = db.add(Obj.make(TestSchema.Expando, {}));
37
+ const thread1 = db.add(createCommentThread(identity));
38
+ const thread2 = db.add(createProposalThread(identity));
39
+ db.add(
40
+ Relation.make(AnchoredTo.AnchoredTo, {
40
41
  [Relation.Source]: thread1,
41
42
  [Relation.Target]: object,
42
43
  anchor: 'test',
43
44
  }),
44
45
  );
45
- space.db.add(
46
- Relation.make(AnchoredTo, {
46
+ db.add(
47
+ Relation.make(AnchoredTo.AnchoredTo, {
47
48
  [Relation.Source]: thread2,
48
49
  [Relation.Target]: object,
49
50
  anchor: 'test',
50
51
  }),
51
52
  );
52
53
  }
53
- }, [identity, space]);
54
+ }, [identity, db]);
54
55
 
55
- if (!identity || !space || !anchors) {
56
+ if (!identity || !db || !anchors) {
56
57
  return null;
57
58
  }
58
59
 
@@ -60,28 +61,28 @@ const DefaultStory = () => {
60
61
  };
61
62
 
62
63
  const meta = {
63
- title: 'plugins/plugin-thread/Comments',
64
+ title: 'plugins/plugin-thread/components/Comments',
64
65
  render: render(DefaultStory),
65
66
  decorators: [
66
- withTheme, // TODO(wittjosiah): This shouldn't depend on app framework. Should use withClientProvider instead.
67
- // Currently this is required due to useOnEditAnalytics.
67
+ withTheme(),
68
+ withLayout({ layout: 'column' }),
69
+ // TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
70
+ // Currently this is required due to useOnEditAnalytics.
68
71
  withPluginManager({
69
72
  plugins: [
70
- IntentPlugin(),
73
+ OperationPlugin(),
74
+ RuntimePlugin(),
71
75
  ClientPlugin({
72
- types: [DataType.Message, ThreadType, AnchoredTo],
73
- onClientInitialized: async ({ client }) => {
74
- await client.halo.createIdentity();
75
- },
76
+ types: [Message.Message, Thread.Thread, AnchoredTo.AnchoredTo],
77
+ onClientInitialized: ({ client }) =>
78
+ Effect.gen(function* () {
79
+ yield* Effect.promise(() => client.halo.createIdentity());
80
+ }),
76
81
  }),
77
82
  ],
78
83
  }),
79
84
  ],
80
85
  parameters: {
81
- layout: {
82
- type: 'column',
83
- className: 'overflow-y-scroll',
84
- },
85
86
  translations,
86
87
  },
87
88
  } satisfies Meta<typeof DefaultStory>;
@@ -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';
9
- import { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';
10
- import { type AnchoredTo } from '@dxos/schema';
7
+ import { Obj, Relation } from '@dxos/echo';
8
+ import { Icon, Message, Trans, useTranslation } from '@dxos/react-ui';
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
  };
@@ -31,7 +29,8 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
31
29
  ? anchors.filter((anchor) => !!Relation.getSource(anchor))
32
30
  : anchors.filter((anchor) => {
33
31
  const thread = Relation.getSource(anchor);
34
- return thread && thread.status !== 'resolved';
32
+ // TODO(dmaretskyi): Do Obj.instanceOf check instead.
33
+ return thread && (thread as any).status !== 'resolved';
35
34
  });
36
35
 
37
36
  useEffect(() => {
@@ -42,20 +41,20 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
42
41
 
43
42
  if (filteredAnchors.length === 0) {
44
43
  return (
45
- <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>
46
- <Callout.Root>
47
- <Callout.Title>
44
+ <div role='none' className='p-form-padding'>
45
+ <Message.Root>
46
+ <Message.Title>
48
47
  <Trans
49
48
  {...{
50
49
  t,
51
50
  i18nKey: 'no comments message',
52
51
  components: {
53
- commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='inline-block' />,
52
+ commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='w-block' />,
54
53
  },
55
54
  }}
56
55
  />
57
- </Callout.Title>
58
- </Callout.Root>
56
+ </Message.Title>
57
+ </Message.Root>
59
58
  </div>
60
59
  );
61
60
  }
@@ -63,8 +62,8 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
63
62
  return (
64
63
  <div>
65
64
  {filteredAnchors.map((anchor) => {
66
- const thread = Relation.getSource(anchor) as ThreadType;
67
- const threadId = fullyQualifiedId(thread);
65
+ const thread = Relation.getSource(anchor) as Thread.Thread;
66
+ const threadId = Obj.getDXN(thread).toString();
68
67
  return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;
69
68
  })}
70
69
  </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, Relation } from '@dxos/echo';
8
+ import { useObject } from '@dxos/echo-react';
9
+ import { getSpace, useMembers } from '@dxos/react-client/echo';
9
10
  import { useIdentity } from '@dxos/react-client/halo';
10
11
  import { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';
11
- import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
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';
15
- import { isNonNullable } from '@dxos/util';
12
+ import {
13
+ MessageTextbox,
14
+ type MessageTextboxProps,
15
+ Thread as ThreadComponent,
16
+ type ThreadRootProps,
17
+ } from '@dxos/react-ui-thread';
18
+ import { type AnchoredTo, type Thread } from '@dxos/types';
19
+ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui-editor';
20
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';
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,30 @@ 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
- const members = useMembers(space?.key);
53
+ const members = useMembers(space?.id);
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 [messages] = useObject(thread, 'messages');
57
+ const activity = useStatus(space, Obj.getDXN(thread).toString());
52
58
  const threadScrollRef = useRef<HTMLDivElement | null>(null);
53
- const { themeMode } = useThemeContext();
54
59
 
55
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
60
+ const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);
61
+
56
62
  // 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);
63
+ const [state, setState] = useState({});
59
64
  const messageRef = useRef('');
60
65
  const extensions = useMemo(
61
66
  () => [
62
67
  createBasicExtensions({ placeholder: t('message placeholder') }),
63
68
  createThemeExtensions({ themeMode }),
64
- listener({ onChange: (text) => (messageRef.current = text) }),
69
+ listener({ onChange: ({ text }) => (messageRef.current = text) }),
65
70
  command,
66
71
  ],
67
- [_count],
72
+ [state],
68
73
  );
69
74
 
70
75
  // TODO(thure): Factor out.
@@ -85,15 +90,15 @@ export const CommentsThreadContainer = ({
85
90
  onComment?.(anchor, messageRef.current);
86
91
  messageRef.current = '';
87
92
  scrollToEnd('instant');
88
- rerenderEditor();
93
+ setState({});
89
94
 
90
95
  return true;
91
96
  }, [anchor, identity]);
92
97
 
93
98
  return (
94
- <Thread.Root
95
- id={fullyQualifiedId(thread)}
96
- classNames='pbs-2 border-be border-subduedSeparator last:border-none'
99
+ <ThreadComponent.Root
100
+ id={Obj.getDXN(thread).toString()}
101
+ classNames='pt-2 border-b border-subdued-separator last:border-none'
97
102
  current={current}
98
103
  onClickCapture={handleAttend}
99
104
  onFocusCapture={handleAttend}
@@ -101,17 +106,17 @@ export const CommentsThreadContainer = ({
101
106
  <div
102
107
  role='none'
103
108
  className={mx(
104
- 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',
109
+ 'col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]',
105
110
  hoverableControls,
106
111
  hoverableFocusedWithinControls,
107
112
  )}
108
113
  >
109
114
  {detached ? (
110
115
  <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
111
- <Thread.Header detached>{thread.name}</Thread.Header>
116
+ <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>
112
117
  </Tooltip.Trigger>
113
118
  ) : (
114
- <Thread.Header>{thread.name}</Thread.Header>
119
+ <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>
115
120
  )}
116
121
  <div role='none' className={buttonGroupClassNames}>
117
122
  {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}
@@ -140,12 +145,11 @@ export const CommentsThreadContainer = ({
140
145
  </div>
141
146
  </div>
142
147
 
143
- {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}
144
- {Ref.Array.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (
148
+ {messages?.map((ref) => (
145
149
  <MessageContainer
146
- key={message.id}
150
+ key={ref.dxn.toString()}
147
151
  editable
148
- message={message}
152
+ message={ref}
149
153
  members={members}
150
154
  onDelete={handleMessageDelete}
151
155
  onAcceptProposal={handleAcceptProposal}
@@ -160,10 +164,9 @@ 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
- {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
166
- <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
167
- </Thread.Root>
169
+ <div role='none' className='h-px -mt-px' ref={threadScrollRef} />
170
+ </ThreadComponent.Root>
168
171
  );
169
172
  };