@dxos/plugin-thread 0.8.4-main.72ec0f3 → 0.8.4-main.937b3ca

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 (353) hide show
  1. package/dist/lib/browser/app-graph-builder-SPAZN5XL.mjs +188 -0
  2. package/dist/lib/browser/app-graph-builder-SPAZN5XL.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs +17 -0
  4. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +8 -0
  6. package/dist/lib/browser/call-manager-YBRTG6T3.mjs +26 -0
  7. package/dist/lib/browser/call-manager-YBRTG6T3.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-KOBXMDCI.mjs → chunk-DLO2G3DM.mjs} +14 -12
  9. package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-ZCW3NSDZ.mjs → chunk-ERK254BS.mjs} +68 -51
  11. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  13. package/dist/lib/browser/chunk-TAWDJPMD.mjs +293 -0
  14. package/dist/lib/browser/chunk-TAWDJPMD.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-VZICDGBW.mjs +1813 -0
  16. package/dist/lib/browser/chunk-VZICDGBW.mjs.map +7 -0
  17. package/dist/lib/browser/{blueprint-definition-6BKYTMJS.mjs → chunk-ZFLSTQSE.mjs} +40 -38
  18. package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +113 -105
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/markdown-TSXOA3GV.mjs +210 -0
  22. package/dist/lib/browser/markdown-TSXOA3GV.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/operation-resolver-MDMEBYH2.mjs +441 -0
  25. package/dist/lib/browser/operation-resolver-MDMEBYH2.mjs.map +7 -0
  26. package/dist/lib/browser/react-root-Q7U5D3DA.mjs +25 -0
  27. package/dist/lib/browser/react-root-Q7U5D3DA.mjs.map +7 -0
  28. package/dist/lib/browser/{react-surface-BCD5ODQ6.mjs → react-surface-WDZQSDWH.mjs} +35 -35
  29. package/dist/lib/browser/react-surface-WDZQSDWH.mjs.map +7 -0
  30. package/dist/lib/browser/repair-TDKAFAGH.mjs +38 -0
  31. package/dist/lib/browser/repair-TDKAFAGH.mjs.map +7 -0
  32. package/dist/lib/browser/settings-OOKKVXV7.mjs +32 -0
  33. package/dist/lib/browser/settings-OOKKVXV7.mjs.map +7 -0
  34. package/dist/lib/browser/state-3LKZHDRI.mjs +24 -0
  35. package/dist/lib/browser/state-3LKZHDRI.mjs.map +7 -0
  36. package/dist/lib/browser/types/index.mjs +7 -7
  37. package/dist/lib/node-esm/app-graph-builder-3LJAPDUW.mjs +189 -0
  38. package/dist/lib/node-esm/app-graph-builder-3LJAPDUW.mjs.map +7 -0
  39. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs +18 -0
  40. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +7 -0
  41. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  42. package/dist/lib/node-esm/call-manager-MMCTNFOH.mjs +27 -0
  43. package/dist/lib/node-esm/call-manager-MMCTNFOH.mjs.map +7 -0
  44. package/dist/lib/node-esm/chunk-3RD3IVVD.mjs +1814 -0
  45. package/dist/lib/node-esm/chunk-3RD3IVVD.mjs.map +7 -0
  46. package/dist/lib/node-esm/{blueprint-definition-6LEAWSC7.mjs → chunk-AQHPP6ZX.mjs} +40 -38
  47. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +7 -0
  48. package/dist/lib/node-esm/chunk-ARTUUKTM.mjs +294 -0
  49. package/dist/lib/node-esm/chunk-ARTUUKTM.mjs.map +7 -0
  50. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  51. package/dist/lib/node-esm/{chunk-PZH2EDU5.mjs → chunk-KRBZBJRI.mjs} +14 -12
  52. package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-7KZWZS2U.mjs → chunk-QP3KQOPQ.mjs} +68 -51
  54. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  55. package/dist/lib/node-esm/index.mjs +113 -105
  56. package/dist/lib/node-esm/index.mjs.map +4 -4
  57. package/dist/lib/node-esm/markdown-N2UJ3D6L.mjs +211 -0
  58. package/dist/lib/node-esm/markdown-N2UJ3D6L.mjs.map +7 -0
  59. package/dist/lib/node-esm/meta.json +1 -1
  60. package/dist/lib/node-esm/operation-resolver-7PHDJZA2.mjs +442 -0
  61. package/dist/lib/node-esm/operation-resolver-7PHDJZA2.mjs.map +7 -0
  62. package/dist/lib/node-esm/react-root-SZIGQRDZ.mjs +26 -0
  63. package/dist/lib/node-esm/react-root-SZIGQRDZ.mjs.map +7 -0
  64. package/dist/lib/node-esm/{react-surface-WZH7OAO3.mjs → react-surface-24PNWUDX.mjs} +35 -35
  65. package/dist/lib/node-esm/react-surface-24PNWUDX.mjs.map +7 -0
  66. package/dist/lib/node-esm/repair-LHLLGXKF.mjs +39 -0
  67. package/dist/lib/node-esm/repair-LHLLGXKF.mjs.map +7 -0
  68. package/dist/lib/node-esm/settings-LXZQXSPL.mjs +33 -0
  69. package/dist/lib/node-esm/settings-LXZQXSPL.mjs.map +7 -0
  70. package/dist/lib/node-esm/state-YYAK5ENM.mjs +25 -0
  71. package/dist/lib/node-esm/state-YYAK5ENM.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +7 -7
  73. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  74. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  75. package/dist/types/src/blueprints/index.d.ts +2 -0
  76. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  77. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  78. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  79. package/dist/types/src/calls/call-manager.d.ts +40 -30
  80. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  81. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  82. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  83. package/dist/types/src/calls/media-manager.d.ts +1 -1
  84. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  85. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  86. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  87. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  88. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  90. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  92. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +9 -0
  94. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  96. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  98. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  100. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/index.d.ts +10 -16
  102. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  104. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  106. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  108. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  110. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  112. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  114. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  116. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  118. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  120. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  122. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  124. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/settings.d.ts +5 -0
  126. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  128. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  130. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  131. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  132. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  133. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  134. package/dist/types/src/components/ChannelContainer.d.ts +4 -5
  135. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/ChannelContainer.stories.d.ts +5 -1
  137. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/Chat.stories.d.ts +4 -0
  139. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ChatContainer.d.ts +2 -2
  141. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  142. package/dist/types/src/components/Comments.stories.d.ts +4 -0
  143. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  147. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  148. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  149. package/dist/types/src/components/MessageContainer.d.ts +3 -2
  150. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  151. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  152. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +4 -0
  153. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +4 -0
  155. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -1
  157. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  158. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/index.d.ts +2 -2
  160. package/dist/types/src/components/index.d.ts.map +1 -1
  161. package/dist/types/src/components/testing.d.ts +1 -1
  162. package/dist/types/src/components/testing.d.ts.map +1 -1
  163. package/dist/types/src/extensions/threads.d.ts +7 -2
  164. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  165. package/dist/types/src/functions/create-proposals.d.ts.map +1 -1
  166. package/dist/types/src/hooks/analytics.d.ts +1 -2
  167. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  168. package/dist/types/src/index.d.ts +1 -1
  169. package/dist/types/src/index.d.ts.map +1 -1
  170. package/dist/types/src/meta.d.ts +2 -2
  171. package/dist/types/src/meta.d.ts.map +1 -1
  172. package/dist/types/src/testing/stories.d.ts +2 -1
  173. package/dist/types/src/testing/stories.d.ts.map +1 -1
  174. package/dist/types/src/translations.d.ts +4 -0
  175. package/dist/types/src/translations.d.ts.map +1 -1
  176. package/dist/types/src/types/Channel.d.ts +691 -12
  177. package/dist/types/src/types/Channel.d.ts.map +1 -1
  178. package/dist/types/src/types/capabilities.d.ts +23 -0
  179. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  180. package/dist/types/src/types/index.d.ts +1 -1
  181. package/dist/types/src/types/index.d.ts.map +1 -1
  182. package/dist/types/src/types/types.d.ts +3213 -354
  183. package/dist/types/src/types/types.d.ts.map +1 -1
  184. package/dist/types/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +86 -69
  186. package/src/ThreadPlugin.tsx +54 -90
  187. package/src/blueprints/index.ts +5 -0
  188. package/src/blueprints/thread-blueprint.ts +32 -0
  189. package/src/calls/call-manager.ts +76 -52
  190. package/src/calls/call-swarm-synchronizer.ts +2 -2
  191. package/src/calls/media-manager.ts +1 -1
  192. package/src/calls/util/calls-service.ts +1 -1
  193. package/src/calls/util/task-scheduling.ts +4 -4
  194. package/src/capabilities/app-graph-builder/app-graph-builder.ts +201 -0
  195. package/src/capabilities/app-graph-builder/index.ts +7 -0
  196. package/src/capabilities/blueprint-definition/blueprint-definition.ts +23 -0
  197. package/src/capabilities/blueprint-definition/index.ts +7 -0
  198. package/src/capabilities/call-manager/call-manager.ts +26 -0
  199. package/src/capabilities/call-manager/index.ts +7 -0
  200. package/src/capabilities/index.ts +10 -13
  201. package/src/capabilities/markdown/index.ts +7 -0
  202. package/src/capabilities/markdown/markdown.ts +83 -0
  203. package/src/capabilities/operation-resolver/index.ts +7 -0
  204. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  205. package/src/capabilities/react-root/index.ts +7 -0
  206. package/src/capabilities/react-root/react-root.tsx +20 -0
  207. package/src/capabilities/react-surface/index.ts +7 -0
  208. package/src/capabilities/react-surface/react-surface.tsx +97 -0
  209. package/src/capabilities/repair/index.ts +7 -0
  210. package/src/capabilities/repair/repair.ts +51 -0
  211. package/src/capabilities/settings/index.ts +7 -0
  212. package/src/capabilities/settings/settings.ts +33 -0
  213. package/src/capabilities/state/index.ts +7 -0
  214. package/src/capabilities/state/state.ts +22 -0
  215. package/src/components/Call/Call.tsx +7 -3
  216. package/src/components/Call/Toolbar.tsx +28 -20
  217. package/src/components/CallSidebar.tsx +4 -2
  218. package/src/components/ChannelContainer.stories.tsx +12 -10
  219. package/src/components/ChannelContainer.tsx +18 -16
  220. package/src/components/Chat.stories.tsx +8 -8
  221. package/src/components/ChatContainer.tsx +8 -9
  222. package/src/components/Comments.stories.tsx +22 -20
  223. package/src/components/CommentsContainer.tsx +1 -2
  224. package/src/components/CommentsThreadContainer.tsx +10 -11
  225. package/src/components/Lobby/Lobby.tsx +8 -6
  226. package/src/components/Media/AudioStream.tsx +2 -2
  227. package/src/components/Media/VideoObject.tsx +1 -1
  228. package/src/components/MessageContainer.tsx +54 -23
  229. package/src/components/Participant/Participant.tsx +31 -18
  230. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +1 -1
  231. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  232. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +1 -1
  233. package/src/components/ThreadCompanion.tsx +70 -65
  234. package/src/components/ThreadSettings.tsx +6 -1
  235. package/src/components/command-extension.ts +2 -2
  236. package/src/components/index.ts +2 -5
  237. package/src/components/testing.ts +1 -3
  238. package/src/extensions/threads.ts +78 -43
  239. package/src/functions/create-proposals.ts +6 -7
  240. package/src/hooks/analytics.ts +23 -20
  241. package/src/index.ts +1 -1
  242. package/src/meta.ts +2 -2
  243. package/src/testing/stories.ts +15 -11
  244. package/src/translations.ts +2 -0
  245. package/src/types/Channel.ts +13 -10
  246. package/src/types/capabilities.ts +34 -0
  247. package/src/types/index.ts +1 -1
  248. package/src/types/types.ts +161 -74
  249. package/dist/lib/browser/ChannelContainer-MX5ABVGC.mjs +0 -16
  250. package/dist/lib/browser/ChatContainer-7F5Y6GXJ.mjs +0 -15
  251. package/dist/lib/browser/app-graph-builder-HNYLII5E.mjs +0 -170
  252. package/dist/lib/browser/app-graph-builder-HNYLII5E.mjs.map +0 -7
  253. package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs.map +0 -7
  254. package/dist/lib/browser/call-manager-MAXQLMMS.mjs +0 -24
  255. package/dist/lib/browser/call-manager-MAXQLMMS.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-BBTXGRIR.mjs +0 -18
  257. package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-BQWQFTWT.mjs +0 -612
  259. package/dist/lib/browser/chunk-BQWQFTWT.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-FR6MEAZI.mjs +0 -377
  261. package/dist/lib/browser/chunk-FR6MEAZI.mjs.map +0 -7
  262. package/dist/lib/browser/chunk-INQVAYPN.mjs +0 -989
  263. package/dist/lib/browser/chunk-INQVAYPN.mjs.map +0 -7
  264. package/dist/lib/browser/chunk-K2DUJRFJ.mjs +0 -27
  265. package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +0 -7
  266. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-NMJEVD36.mjs +0 -168
  268. package/dist/lib/browser/chunk-NMJEVD36.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-OOUDK7Q7.mjs +0 -23
  270. package/dist/lib/browser/chunk-OOUDK7Q7.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +0 -7
  272. package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs +0 -361
  273. package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs.map +0 -7
  274. package/dist/lib/browser/markdown-74EUSQGV.mjs +0 -171
  275. package/dist/lib/browser/markdown-74EUSQGV.mjs.map +0 -7
  276. package/dist/lib/browser/react-root-BVG7B2LW.mjs +0 -28
  277. package/dist/lib/browser/react-root-BVG7B2LW.mjs.map +0 -7
  278. package/dist/lib/browser/react-surface-BCD5ODQ6.mjs.map +0 -7
  279. package/dist/lib/browser/settings-LGQUZITB.mjs +0 -22
  280. package/dist/lib/browser/settings-LGQUZITB.mjs.map +0 -7
  281. package/dist/lib/browser/state-36REWXO5.mjs +0 -34
  282. package/dist/lib/browser/state-36REWXO5.mjs.map +0 -7
  283. package/dist/lib/node-esm/ChannelContainer-2JJJ3IDK.mjs +0 -17
  284. package/dist/lib/node-esm/ChatContainer-C526R4DI.mjs +0 -16
  285. package/dist/lib/node-esm/app-graph-builder-SOCKP4ST.mjs +0 -171
  286. package/dist/lib/node-esm/app-graph-builder-SOCKP4ST.mjs.map +0 -7
  287. package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs.map +0 -7
  288. package/dist/lib/node-esm/call-manager-LC4OS2KD.mjs +0 -25
  289. package/dist/lib/node-esm/call-manager-LC4OS2KD.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs +0 -25
  291. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-JF7THR7F.mjs +0 -990
  294. package/dist/lib/node-esm/chunk-JF7THR7F.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-JJW6YMLC.mjs +0 -613
  296. package/dist/lib/node-esm/chunk-JJW6YMLC.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +0 -7
  298. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs +0 -169
  299. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-TWKGDFCS.mjs +0 -378
  301. package/dist/lib/node-esm/chunk-TWKGDFCS.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-XI45H4IV.mjs +0 -28
  303. package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +0 -19
  305. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +0 -7
  306. package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs +0 -362
  307. package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs.map +0 -7
  308. package/dist/lib/node-esm/markdown-566XXB55.mjs +0 -172
  309. package/dist/lib/node-esm/markdown-566XXB55.mjs.map +0 -7
  310. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs +0 -29
  311. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs.map +0 -7
  312. package/dist/lib/node-esm/react-surface-WZH7OAO3.mjs.map +0 -7
  313. package/dist/lib/node-esm/settings-WKLJSP6R.mjs +0 -23
  314. package/dist/lib/node-esm/settings-WKLJSP6R.mjs.map +0 -7
  315. package/dist/lib/node-esm/state-X3W67GTL.mjs +0 -35
  316. package/dist/lib/node-esm/state-X3W67GTL.mjs.map +0 -7
  317. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  318. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  319. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  320. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  321. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  322. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  323. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  324. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  325. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  326. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  327. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  328. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  329. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  330. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  331. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  332. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  333. package/dist/types/src/capabilities/settings.d.ts +0 -4
  334. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  335. package/dist/types/src/capabilities/state.d.ts +0 -7
  336. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  337. package/dist/types/src/types/Thread.d.ts +0 -167
  338. package/dist/types/src/types/Thread.d.ts.map +0 -1
  339. package/src/capabilities/app-graph-builder.ts +0 -194
  340. package/src/capabilities/blueprint-definition.ts +0 -38
  341. package/src/capabilities/call-manager.ts +0 -20
  342. package/src/capabilities/capabilities.ts +0 -33
  343. package/src/capabilities/intent-resolver.ts +0 -311
  344. package/src/capabilities/markdown.ts +0 -71
  345. package/src/capabilities/react-root.tsx +0 -17
  346. package/src/capabilities/react-surface.tsx +0 -90
  347. package/src/capabilities/settings.ts +0 -19
  348. package/src/capabilities/state.ts +0 -26
  349. package/src/types/Thread.ts +0 -26
  350. /package/dist/lib/browser/{ChannelContainer-MX5ABVGC.mjs.map → blueprints/index.mjs.map} +0 -0
  351. /package/dist/lib/browser/{ChatContainer-7F5Y6GXJ.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  352. /package/dist/lib/node-esm/{ChannelContainer-2JJJ3IDK.mjs.map → blueprints/index.mjs.map} +0 -0
  353. /package/dist/lib/node-esm/{ChatContainer-C526R4DI.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
@@ -46,13 +46,13 @@ export const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {
46
46
  );
47
47
  };
48
48
 
49
- type AudioTrackProps = {
49
+ type AudioTrackParams = {
50
50
  track: MediaStreamTrack;
51
51
  mediaStream: MediaStream;
52
52
  resetSrcObject: () => void;
53
53
  };
54
54
 
55
- const AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {
55
+ const AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackParams) => {
56
56
  useEffect(() => {
57
57
  const currentTrack = track;
58
58
  mediaStream.addTrack(currentTrack);
@@ -5,7 +5,7 @@
5
5
  import React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';
6
6
 
7
7
  import { type ThemedClassName } from '@dxos/react-ui';
8
- import { mx } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
9
9
 
10
10
  export type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &
11
11
  ThemedClassName<{
@@ -6,15 +6,18 @@ import { EditorView } from '@codemirror/view';
6
6
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
7
7
 
8
8
  import { Surface } from '@dxos/app-framework/react';
9
- import { type Obj, Ref, type Type } from '@dxos/echo';
9
+ import { type Obj, Ref } from '@dxos/echo';
10
+ import { useObject } from '@dxos/echo-react';
10
11
  import { PublicKey } from '@dxos/react-client';
11
12
  import { type SpaceMember } from '@dxos/react-client/echo';
12
13
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
13
14
  import { IconButton, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';
14
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
15
- import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
15
+ import { useTextEditor } from '@dxos/react-ui-editor';
16
+ import { Card } from '@dxos/react-ui-mosaic';
16
17
  import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
17
18
  import { type ContentBlock, type Message } from '@dxos/types';
19
+ import { createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';
20
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';
18
21
 
19
22
  import { useOnEditAnalytics } from '../hooks';
20
23
  import { meta } from '../meta';
@@ -26,7 +29,7 @@ export const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pie-2';
26
29
  export const buttonClassNames = '!p-1 transition-opacity';
27
30
 
28
31
  export type MessageContainerProps = {
29
- message: Message.Message;
32
+ message: Obj.Obj<Message.Message> | Ref.Ref<Obj.Obj<Message.Message>>;
30
33
  members: SpaceMember[];
31
34
  editable?: boolean;
32
35
  onDelete?: (id: string) => void;
@@ -34,30 +37,55 @@ export type MessageContainerProps = {
34
37
  };
35
38
 
36
39
  export const MessageContainer = ({
37
- message,
40
+ message: messageOrRef,
38
41
  members,
39
42
  editable = false,
40
43
  onDelete,
41
44
  onAcceptProposal,
42
45
  }: MessageContainerProps) => {
43
46
  const { t } = useTranslation(meta.id);
47
+ const [message, updateMessage] = useObject(messageOrRef);
48
+ const identity = useIdentity();
49
+ const [editing, setEditing] = useState(false);
50
+
51
+ const textBlockIndex = message?.blocks.findIndex((block) => block._tag === 'text') ?? -1;
52
+
53
+ const handleEdit = useCallback(() => setEditing((editing) => !editing), []);
54
+ const handleDelete = useCallback(() => message && onDelete?.(message.id), [message, onDelete]);
55
+ const handleAcceptProposal = useCallback(
56
+ () => message && onAcceptProposal?.(message.id),
57
+ [message, onAcceptProposal],
58
+ );
59
+ const handleTextBlockChange = useCallback(
60
+ (newText: string) => {
61
+ updateMessage((m) => {
62
+ const targetBlock = m.blocks[textBlockIndex];
63
+ if (targetBlock && targetBlock._tag === 'text') {
64
+ targetBlock.text = newText;
65
+ }
66
+ });
67
+ },
68
+ [updateMessage, textBlockIndex],
69
+ );
70
+
71
+ const textBlock =
72
+ message && textBlockIndex !== -1 ? (message.blocks[textBlockIndex] as ContentBlock.Text) : undefined;
73
+ useOnEditAnalytics(message, textBlock, !!editing);
74
+
75
+ if (!message) {
76
+ return null;
77
+ }
78
+
44
79
  const senderIdentity = members.find(
45
80
  (member) =>
46
81
  (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
47
82
  (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),
48
83
  )?.identity;
49
84
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
50
- const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
51
- const [editing, setEditing] = useState(false);
52
- const handleEdit = useCallback(() => setEditing((editing) => !editing), []);
53
- const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);
54
- const handleAcceptProposal = useCallback(() => onAcceptProposal?.(message.id), [message, onAcceptProposal]);
55
- const textBlock = message.blocks.find((block) => block._tag === 'text');
85
+ const userIsAuthor = identity?.did === messageMetadata.authorId;
56
86
  const proposalBlock = message.blocks.find((block) => block._tag === 'proposal');
57
87
  const references = message.blocks.filter((block) => block._tag === 'reference').map((block) => block.reference);
58
88
 
59
- useOnEditAnalytics(message, textBlock, !!editing);
60
-
61
89
  return (
62
90
  <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>
63
91
  <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>
@@ -98,16 +126,18 @@ export const MessageContainer = ({
98
126
  )}
99
127
  </div>
100
128
  </MessageHeading>
101
- {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}
129
+ {textBlock && (
130
+ <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} onSave={handleTextBlockChange} />
131
+ )}
102
132
  {proposalBlock && <ProposalBlock block={proposalBlock} />}
103
133
  {Ref.Array.targets(references).map((reference, index) => (
104
- <MessagePart key={index} part={reference} />
134
+ <MessagePart key={index} part={reference as Obj.Unknown} />
105
135
  ))}
106
136
  </MessageRoot>
107
137
  );
108
138
  };
109
139
 
110
- const MessagePart = ({ part }: { part: Type.Expando }) => {
140
+ const MessagePart = ({ part }: { part: Obj.Unknown }) => {
111
141
  return <MessageBlockObjectTile subject={part} />;
112
142
  };
113
143
 
@@ -115,11 +145,13 @@ const TextboxBlock = ({
115
145
  block,
116
146
  isAuthor,
117
147
  editing,
148
+ onSave,
118
149
  }: {
119
150
  block: ContentBlock.Text;
120
151
  editing?: boolean;
121
152
  isAuthor?: boolean;
122
153
  identity?: Identity;
154
+ onSave?: (newText: string) => void;
123
155
  }) => {
124
156
  const { themeMode } = useThemeContext();
125
157
  const inMemoryContentRef = useRef(block.text);
@@ -129,8 +161,8 @@ const TextboxBlock = ({
129
161
  }, []);
130
162
 
131
163
  const saveDocumentChange = useCallback(() => {
132
- block.text = inMemoryContentRef.current;
133
- }, [block]);
164
+ onSave?.(inMemoryContentRef.current);
165
+ }, [onSave]);
134
166
 
135
167
  useOnTransition(editing, true, false, saveDocumentChange);
136
168
 
@@ -166,7 +198,7 @@ const ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {
166
198
  );
167
199
  };
168
200
 
169
- const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(({ subject }, forwardedRef) => {
201
+ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Unknown }>(({ subject }, forwardedRef) => {
170
202
  // TODO(burdon): Use annotation to get title.
171
203
  let title = (subject as any).name ?? (subject as any).title ?? (subject as any).type ?? 'Object';
172
204
  if (typeof title !== 'string') {
@@ -174,12 +206,11 @@ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(
174
206
  }
175
207
 
176
208
  return (
177
- <div
178
- role='group'
209
+ <Card.Root
179
210
  className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
180
211
  ref={forwardedRef}
181
212
  >
182
- <Surface role='card' limit={1} data={{ subject }} fallback={title} />
183
- </div>
213
+ <Surface role='card-content' limit={1} data={{ subject }} fallback={title} />
214
+ </Card.Root>
184
215
  );
185
216
  });
@@ -2,12 +2,13 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React, { memo, useMemo } from 'react';
6
7
 
7
8
  import { useCapability } from '@dxos/app-framework/react';
8
9
 
9
10
  import { type EncodedTrackName, type UserState } from '../../calls';
10
- import { ThreadCapabilities } from '../../capabilities';
11
+ import { ThreadCapabilities } from '../../types';
11
12
  import { VideoObject } from '../Media';
12
13
  import { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';
13
14
 
@@ -15,27 +16,39 @@ export const SCREENSHARE_SUFFIX = '_screenshare';
15
16
 
16
17
  export const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {
17
18
  const call = useCapability(ThreadCapabilities.CallManager);
18
- const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);
19
+ const self = useAtomValue(call.selfAtom);
20
+ const media = useAtomValue(call.mediaAtom);
21
+ const isSelf: boolean = self.id !== undefined && user.id !== undefined && user.id.startsWith(self.id);
19
22
  const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
20
23
 
21
- const pulledVideoStream =
22
- !isSelf && isScreenshare && user.tracks?.screenshareEnabled
23
- ? call.getVideoStream(user.tracks?.screenshare as EncodedTrackName)
24
- : !isSelf && !isScreenshare && user.tracks?.videoEnabled
25
- ? call.getVideoStream(user.tracks?.video as EncodedTrackName)
26
- : undefined;
24
+ // Get pulled video stream for non-self users.
25
+ const pulledVideoStream = useMemo<MediaStream | undefined>(() => {
26
+ if (isSelf) {
27
+ return undefined;
28
+ }
29
+ const trackName =
30
+ isScreenshare && user.tracks?.screenshareEnabled
31
+ ? (user.tracks?.screenshare as EncodedTrackName)
32
+ : !isScreenshare && user.tracks?.videoEnabled
33
+ ? (user.tracks?.video as EncodedTrackName)
34
+ : undefined;
35
+ return trackName ? media.pulledVideoStreams[trackName]?.stream : undefined;
36
+ }, [
37
+ isSelf,
38
+ isScreenshare,
39
+ media.pulledVideoStreams,
40
+ user.tracks?.screenshare,
41
+ user.tracks?.video,
42
+ user.tracks?.screenshareEnabled,
43
+ user.tracks?.videoEnabled,
44
+ ]);
27
45
 
28
46
  const videoStream = useMemo<MediaStream | undefined>(() => {
29
47
  if (isSelf) {
30
- if (isScreenshare) {
31
- return call.media.screenshareVideoStream;
32
- } else if (!isScreenshare) {
33
- return call.media.videoStream;
34
- }
35
- } else if (!isSelf) {
36
- return pulledVideoStream;
48
+ return isScreenshare ? media.screenshareVideoStream : media.videoStream;
37
49
  }
38
- }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);
50
+ return pulledVideoStream;
51
+ }, [isSelf, isScreenshare, media.videoStream, media.screenshareVideoStream, pulledVideoStream]);
39
52
 
40
53
  return (
41
54
  <ResponsiveGridItem
@@ -43,8 +56,8 @@ export const Participant = memo(({ item: user, debug, ...props }: ResponsiveGrid
43
56
  item={user}
44
57
  name={user.name}
45
58
  self={isSelf}
46
- screenshare={!!call.media.screenshareVideoStream}
47
- video={call.media.videoEnabled}
59
+ screenshare={!!media.screenshareVideoStream}
60
+ video={media.videoEnabled}
48
61
  mute={user ? !user.tracks?.audioEnabled : false}
49
62
  wave={user.raisedHand}
50
63
  speaking={user.speaking}
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { type PropsWithChildren } from 'react';
6
6
 
7
- import { mx } from '@dxos/react-ui-theme';
7
+ import { mx } from '@dxos/ui-theme';
8
8
 
9
9
  /**
10
10
  * A container component that maintains the child's aspect ratio while centering its content.
@@ -8,7 +8,7 @@ import { useResizeDetector } from 'react-resize-detector';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { type ThemedClassName } from '@dxos/react-ui';
10
10
  import { type Size } from '@dxos/react-ui-dnd';
11
- import { mx } from '@dxos/react-ui-theme';
11
+ import { mx } from '@dxos/ui-theme';
12
12
 
13
13
  import { ResponsiveContainer } from './ResponsiveContainer';
14
14
  import { type ResponsiveGridItemProps } from './ResponsiveGridItem';
@@ -6,7 +6,7 @@ import React, { type CSSProperties, type PropsWithChildren, useEffect, useState
6
6
 
7
7
  import { Icon, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
8
8
  import { Waveform } from '@dxos/react-ui-sfx';
9
- import { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';
9
+ import { groupHoverControlItemWithTransition, mx } from '@dxos/ui-theme';
10
10
 
11
11
  import { meta } from '../../meta';
12
12
 
@@ -2,50 +2,68 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React, { useCallback, useMemo } from 'react';
6
7
 
7
- import { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';
8
- import { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
8
+ import { Common } from '@dxos/app-framework';
9
+ import { useCapabilities, useCapability, useOperationInvoker } from '@dxos/app-framework/react';
9
10
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
10
- import { Ref, getSpace, useQuery } from '@dxos/react-client/echo';
11
+ import { Ref, useQuery } from '@dxos/react-client/echo';
11
12
  import { useIdentity } from '@dxos/react-client/halo';
12
13
  import { useTranslation } from '@dxos/react-ui';
13
14
  import { useAttended } from '@dxos/react-ui-attention';
14
- import { StackItem } from '@dxos/react-ui-stack';
15
+ import { Layout } from '@dxos/react-ui-mosaic';
15
16
  import { Tabs } from '@dxos/react-ui-tabs';
16
- import { mx } from '@dxos/react-ui-theme';
17
- import { AnchoredTo } from '@dxos/types';
17
+ import { AnchoredTo, Thread } from '@dxos/types';
18
+ import { mx } from '@dxos/ui-theme';
18
19
 
19
- import { ThreadCapabilities } from '../capabilities';
20
20
  import { CommentsContainer, type CommentsContainerProps } from '../components';
21
21
  import { meta } from '../meta';
22
- import { Thread, ThreadAction } from '../types';
22
+ import { ThreadCapabilities, ThreadOperation, type ViewState } from '../types';
23
+
24
+ const initialViewState: ViewState = { showResolvedThreads: false };
23
25
 
24
26
  export const ThreadCompanion = ({ subject }: { subject: any }) => {
25
27
  const { t } = useTranslation(meta.id);
26
- const { dispatchPromise: dispatch } = useIntentDispatcher();
28
+ const { invokePromise } = useOperationInvoker();
27
29
  const identity = useIdentity();
28
30
  const subjectId = Obj.getDXN(subject).toString();
31
+ const registry = useCapability(Common.Capability.AtomRegistry);
29
32
 
30
- const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
33
+ const stateAtom = useCapability(ThreadCapabilities.State);
34
+ const viewStoreAtom = useCapability(ThreadCapabilities.ViewState);
35
+ const state = useAtomValue(stateAtom);
36
+ const viewStore = useAtomValue(viewStoreAtom);
31
37
  const drafts = state.drafts[subjectId];
32
- const viewState = useMemo(() => getViewState(subjectId), [getViewState, subjectId]);
38
+
39
+ // Get or initialize view state for this subject.
40
+ const viewState = useMemo(() => {
41
+ if (!viewStore[subjectId]) {
42
+ registry.set(viewStoreAtom, { ...viewStore, [subjectId]: { ...initialViewState } });
43
+ return initialViewState;
44
+ }
45
+ return viewStore[subjectId];
46
+ }, [viewStore, subjectId, registry, viewStoreAtom]);
33
47
  const { showResolvedThreads } = viewState;
48
+
34
49
  const onChangeViewState = useCallback(
35
50
  (nextValue: string) => {
36
- viewState.showResolvedThreads = nextValue === 'all';
51
+ registry.set(viewStoreAtom, {
52
+ ...registry.get(viewStoreAtom),
53
+ [subjectId]: { ...registry.get(viewStoreAtom)[subjectId], showResolvedThreads: nextValue === 'all' },
54
+ });
37
55
  },
38
- [viewState],
56
+ [registry, viewStoreAtom, subjectId],
39
57
  );
40
58
 
41
- const anchorSorts = useCapabilities(Capabilities.AnchorSort);
59
+ const anchorSorts = useCapabilities(Common.Capability.AnchorSort);
42
60
  const sort = useMemo(
43
61
  () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
44
62
  [anchorSorts, subject],
45
63
  );
46
64
 
47
- const space = getSpace(subject);
48
- const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
65
+ const db = Obj.getDatabase(subject);
66
+ const objectsAnchoredTo = useQuery(db, Query.select(Filter.id(subject.id)).targetOf(AnchoredTo.AnchoredTo));
49
67
  const anchors = objectsAnchoredTo
50
68
  .toSorted((a, b) => sort?.(a, b) ?? 0)
51
69
  .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
@@ -59,68 +77,57 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
59
77
  const threadId = Obj.getDXN(thread).toString();
60
78
 
61
79
  if (state.current !== threadId) {
62
- state.current = threadId;
80
+ registry.set(stateAtom, { ...registry.get(stateAtom), current: threadId });
63
81
 
64
82
  // TODO(wittjosiah): Should this be a thread-specific intent?
65
83
  // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.
66
84
  // This may be overloading this intent or highjacking its intended purpose.
67
- void dispatch(
68
- createIntent(LayoutAction.ScrollIntoView, {
69
- part: 'current',
70
- subject: Obj.getDXN(subject).toString(),
71
- options: {
72
- cursor: anchor.anchor,
73
- ref: threadId,
74
- },
75
- }),
76
- );
85
+ void invokePromise(Common.LayoutOperation.ScrollIntoView, {
86
+ subject: Obj.getDXN(subject).toString(),
87
+ cursor: anchor.anchor,
88
+ ref: threadId,
89
+ });
77
90
  }
78
91
  },
79
- [state.current, dispatch, subject],
92
+ [state.current, invokePromise, subject, registry, stateAtom],
80
93
  );
81
94
 
82
95
  const handleComment = useCallback(
83
96
  async (anchor: AnchoredTo.AnchoredTo, text: string) => {
84
- await dispatch(
85
- createIntent(ThreadAction.AddMessage, {
86
- anchor,
87
- subject,
88
- sender: { identityDid: identity?.did },
89
- text,
90
- }),
91
- );
97
+ await invokePromise(ThreadOperation.AddMessage, {
98
+ anchor,
99
+ subject,
100
+ sender: { identityDid: identity?.did },
101
+ text,
102
+ });
92
103
 
93
104
  const thread = Relation.getSource(anchor) as Thread.Thread;
94
- state.current = Obj.getDXN(thread).toString();
105
+ registry.set(stateAtom, { ...registry.get(stateAtom), current: Obj.getDXN(thread).toString() });
95
106
  },
96
- [dispatch, identity, subject],
107
+ [invokePromise, identity, subject, registry, stateAtom],
97
108
  );
98
109
 
99
110
  const handleResolve = useCallback(
100
111
  (anchor: AnchoredTo.AnchoredTo) =>
101
- dispatch(
102
- createIntent(ThreadAction.ToggleResolved, {
103
- thread: Relation.getSource(anchor) as Thread.Thread,
104
- }),
105
- ),
106
- [dispatch],
112
+ invokePromise(ThreadOperation.ToggleResolved, {
113
+ thread: Relation.getSource(anchor) as Thread.Thread,
114
+ }),
115
+ [invokePromise],
107
116
  );
108
117
 
109
118
  const handleThreadDelete = useCallback(
110
- (anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
111
- [dispatch, subject],
119
+ (anchor: AnchoredTo.AnchoredTo) => invokePromise(ThreadOperation.Delete, { anchor, subject }),
120
+ [invokePromise, subject],
112
121
  );
113
122
 
114
123
  const handleMessageDelete = useCallback(
115
124
  (anchor: AnchoredTo.AnchoredTo, messageId: string) =>
116
- dispatch(
117
- createIntent(ThreadAction.DeleteMessage, {
118
- anchor,
119
- subject,
120
- messageId,
121
- }),
122
- ),
123
- [dispatch, subject],
125
+ invokePromise(ThreadOperation.DeleteMessage, {
126
+ anchor,
127
+ subject,
128
+ messageId,
129
+ }),
130
+ [invokePromise, subject],
124
131
  );
125
132
 
126
133
  const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
@@ -133,16 +140,14 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
133
140
  return;
134
141
  }
135
142
 
136
- await dispatch(
137
- createIntent(CollaborationActions.AcceptProposal, {
138
- subject,
139
- anchor: anchor.anchor,
140
- proposal,
141
- }),
142
- );
143
- await dispatch(createIntent(ThreadAction.ToggleResolved, { thread }));
143
+ await invokePromise(Common.CollaborationOperation.AcceptProposal, {
144
+ subject,
145
+ anchor: anchor.anchor,
146
+ proposal,
147
+ });
148
+ await invokePromise(ThreadOperation.ToggleResolved, { thread });
144
149
  },
145
- [dispatch, subject],
150
+ [invokePromise, subject],
146
151
  );
147
152
 
148
153
  const comments = (
@@ -160,7 +165,7 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
160
165
  );
161
166
 
162
167
  return (
163
- <StackItem.Content toolbar>
168
+ <Layout.Main toolbar>
164
169
  <Tabs.Root
165
170
  value={showResolvedThreads ? 'all' : 'unresolved'}
166
171
  orientation='horizontal'
@@ -183,6 +188,6 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
183
188
  <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
184
189
  </div>
185
190
  </Tabs.Root>
186
- </StackItem.Content>
191
+ </Layout.Main>
187
192
  );
188
193
  };
@@ -10,7 +10,12 @@ import { ControlPage } from '@dxos/react-ui-form';
10
10
  import { meta } from '../meta';
11
11
  import type { ThreadSettingsProps } from '../types';
12
12
 
13
- export const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {
13
+ export type ThreadSettingsComponentProps = {
14
+ settings: ThreadSettingsProps;
15
+ onSettingsChange: (fn: (current: ThreadSettingsProps) => ThreadSettingsProps) => void;
16
+ };
17
+
18
+ export const ThreadSettings = ({ settings: _settings }: ThreadSettingsComponentProps) => {
14
19
  const { t: _t } = useTranslation(meta.id);
15
20
  return <ControlPage></ControlPage>;
16
21
  };
@@ -5,8 +5,8 @@
5
5
  import { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';
6
6
  import { type Extension } from '@codemirror/state';
7
7
 
8
- import { tags } from '@dxos/react-ui-editor';
9
- import { mx } from '@dxos/react-ui-theme';
8
+ import { tags } from '@dxos/ui-editor';
9
+ import { mx } from '@dxos/ui-theme';
10
10
 
11
11
  /**
12
12
  * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts
@@ -2,9 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
6
-
7
- // TODO(wittjosiah): Suspense boundary for sidebar?
8
5
  export * from './Call';
9
6
  export * from './CallDebugPanel';
10
7
  export * from './CallSidebar';
@@ -14,5 +11,5 @@ export * from './MessageContainer';
14
11
  export * from './ThreadCompanion';
15
12
  export * from './ThreadSettings';
16
13
 
17
- export const ChannelContainer = lazy(() => import('./ChannelContainer'));
18
- export const ChatContainer = lazy(() => import('./ChatContainer'));
14
+ export { ChannelContainer } from './ChannelContainer';
15
+ export { ChatContainer } from './ChatContainer';
@@ -6,9 +6,7 @@ import { Obj, Ref } from '@dxos/echo';
6
6
  import { IdentityDid } from '@dxos/keys';
7
7
  import { faker } from '@dxos/random';
8
8
  import { type Identity } from '@dxos/react-client/halo';
9
- import { Message } from '@dxos/types';
10
-
11
- import { Thread } from '../types';
9
+ import { Message, Thread } from '@dxos/types';
12
10
 
13
11
  export const createCommentThread = (identity: Identity): Thread.Thread => {
14
12
  return Thread.make({