@dxos/plugin-thread 0.8.4-main.3c1ae3b → 0.8.4-main.3eb6e50203

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 (343) hide show
  1. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs +189 -0
  2. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs +18 -0
  4. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +8 -0
  6. package/dist/lib/browser/call-manager-GDGIKJKN.mjs +26 -0
  7. package/dist/lib/browser/call-manager-GDGIKJKN.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-2FIHSX35.mjs +293 -0
  9. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-4EUEMHNI.mjs +1817 -0
  11. package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-ZCW3NSDZ.mjs → chunk-ERK254BS.mjs} +68 -51
  13. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-KOBXMDCI.mjs → chunk-JBB73URQ.mjs} +14 -12
  15. package/dist/lib/browser/chunk-JBB73URQ.mjs.map +7 -0
  16. package/dist/lib/browser/{blueprint-definition-UO43FHAE.mjs → chunk-RH7XTXSR.mjs} +43 -39
  17. package/dist/lib/browser/chunk-RH7XTXSR.mjs.map +7 -0
  18. package/dist/lib/browser/index.mjs +122 -111
  19. package/dist/lib/browser/index.mjs.map +4 -4
  20. package/dist/lib/browser/markdown-YJCSOWXX.mjs +210 -0
  21. package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs +441 -0
  24. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +7 -0
  25. package/dist/lib/browser/react-root-FHK2SVPU.mjs +25 -0
  26. package/dist/lib/browser/react-root-FHK2SVPU.mjs.map +7 -0
  27. package/dist/lib/browser/{react-surface-C2OIZGFN.mjs → react-surface-7MQA6VSH.mjs} +33 -33
  28. package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +7 -0
  29. package/dist/lib/browser/{repair-JFJLEM2O.mjs → repair-6OZ75AUU.mjs} +12 -9
  30. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
  31. package/dist/lib/browser/settings-TWKOTGSU.mjs +33 -0
  32. package/dist/lib/browser/settings-TWKOTGSU.mjs.map +7 -0
  33. package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
  34. package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
  35. package/dist/lib/browser/types/index.mjs +5 -4
  36. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs +190 -0
  37. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs.map +7 -0
  38. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs +19 -0
  39. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs.map +7 -0
  40. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  41. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs +27 -0
  42. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-PZH2EDU5.mjs → chunk-G7PZNN3Z.mjs} +14 -12
  44. package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs.map +7 -0
  45. package/dist/lib/node-esm/{blueprint-definition-WANHWSF5.mjs → chunk-OKVE6CLS.mjs} +43 -39
  46. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-7KZWZS2U.mjs → chunk-QP3KQOPQ.mjs} +68 -51
  48. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs +1818 -0
  50. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
  52. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  53. package/dist/lib/node-esm/index.mjs +122 -111
  54. package/dist/lib/node-esm/index.mjs.map +4 -4
  55. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs +211 -0
  56. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs.map +7 -0
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs +442 -0
  59. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +7 -0
  60. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs +26 -0
  61. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs.map +7 -0
  62. package/dist/lib/node-esm/{react-surface-GWBXMENS.mjs → react-surface-M7VI5XG2.mjs} +33 -33
  63. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +7 -0
  64. package/dist/lib/node-esm/{repair-RMLR24YR.mjs → repair-6777EPOM.mjs} +12 -9
  65. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
  66. package/dist/lib/node-esm/settings-5O254B3Z.mjs +34 -0
  67. package/dist/lib/node-esm/settings-5O254B3Z.mjs.map +7 -0
  68. package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
  69. package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
  70. package/dist/lib/node-esm/types/index.mjs +5 -4
  71. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  72. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  73. package/dist/types/src/blueprints/index.d.ts +2 -0
  74. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  75. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  76. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  77. package/dist/types/src/calls/call-manager.d.ts +40 -30
  78. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  79. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  80. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  81. package/dist/types/src/calls/media-manager.d.ts +1 -1
  82. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  83. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  84. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  85. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  86. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  88. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  90. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  92. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  94. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  96. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  98. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/index.d.ts +10 -17
  100. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  102. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  104. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  108. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  110. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  112. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  116. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  120. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  122. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  124. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  126. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  128. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  129. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  130. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  131. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  132. package/dist/types/src/components/ChannelContainer.d.ts +4 -5
  133. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/ChannelContainer.stories.d.ts +1 -1
  135. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/ChatContainer.d.ts +1 -1
  138. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  139. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  141. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  142. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  143. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  144. package/dist/types/src/components/MessageContainer.d.ts +3 -4
  145. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  147. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -1
  148. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  149. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  150. package/dist/types/src/components/index.d.ts +2 -2
  151. package/dist/types/src/components/index.d.ts.map +1 -1
  152. package/dist/types/src/extensions/threads.d.ts +7 -2
  153. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  154. package/dist/types/src/functions/create-proposals.d.ts +8 -1
  155. package/dist/types/src/functions/create-proposals.d.ts.map +1 -1
  156. package/dist/types/src/hooks/analytics.d.ts +1 -2
  157. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  158. package/dist/types/src/index.d.ts +1 -1
  159. package/dist/types/src/index.d.ts.map +1 -1
  160. package/dist/types/src/meta.d.ts +2 -2
  161. package/dist/types/src/meta.d.ts.map +1 -1
  162. package/dist/types/src/testing/stories.d.ts +2 -1
  163. package/dist/types/src/testing/stories.d.ts.map +1 -1
  164. package/dist/types/src/types/Channel.d.ts +691 -12
  165. package/dist/types/src/types/Channel.d.ts.map +1 -1
  166. package/dist/types/src/types/capabilities.d.ts +23 -0
  167. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  168. package/dist/types/src/types/index.d.ts +1 -0
  169. package/dist/types/src/types/index.d.ts.map +1 -1
  170. package/dist/types/src/types/types.d.ts +3182 -295
  171. package/dist/types/src/types/types.d.ts.map +1 -1
  172. package/dist/types/tsconfig.tsbuildinfo +1 -1
  173. package/package.json +88 -69
  174. package/src/ThreadPlugin.tsx +63 -92
  175. package/src/blueprints/index.ts +5 -0
  176. package/src/blueprints/thread-blueprint.ts +32 -0
  177. package/src/calls/call-manager.ts +76 -52
  178. package/src/calls/call-swarm-synchronizer.ts +2 -2
  179. package/src/calls/media-manager.ts +1 -1
  180. package/src/calls/util/calls-service.ts +1 -1
  181. package/src/calls/util/task-scheduling.ts +4 -4
  182. package/src/calls-service.stories.tsx +1 -1
  183. package/src/capabilities/app-graph-builder/app-graph-builder.ts +202 -0
  184. package/src/capabilities/app-graph-builder/index.ts +7 -0
  185. package/src/capabilities/blueprint-definition/blueprint-definition.ts +24 -0
  186. package/src/capabilities/blueprint-definition/index.ts +7 -0
  187. package/src/capabilities/call-manager/call-manager.ts +26 -0
  188. package/src/capabilities/call-manager/index.ts +7 -0
  189. package/src/capabilities/index.ts +10 -14
  190. package/src/capabilities/markdown/index.ts +7 -0
  191. package/src/capabilities/markdown/markdown.ts +83 -0
  192. package/src/capabilities/operation-resolver/index.ts +7 -0
  193. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  194. package/src/capabilities/react-root/index.ts +7 -0
  195. package/src/capabilities/react-root/react-root.tsx +20 -0
  196. package/src/capabilities/react-surface/index.ts +7 -0
  197. package/src/capabilities/react-surface/react-surface.tsx +98 -0
  198. package/src/capabilities/repair/index.ts +7 -0
  199. package/src/capabilities/{repair.ts → repair/repair.ts} +21 -10
  200. package/src/capabilities/settings/index.ts +7 -0
  201. package/src/capabilities/settings/settings.ts +34 -0
  202. package/src/capabilities/state/index.ts +7 -0
  203. package/src/capabilities/state/state.ts +22 -0
  204. package/src/components/Call/Call.tsx +8 -4
  205. package/src/components/Call/Toolbar.tsx +30 -21
  206. package/src/components/CallSidebar.tsx +5 -3
  207. package/src/components/ChannelContainer.stories.tsx +10 -9
  208. package/src/components/ChannelContainer.tsx +26 -23
  209. package/src/components/Chat.stories.tsx +7 -6
  210. package/src/components/ChatContainer.tsx +19 -20
  211. package/src/components/Comments.stories.tsx +22 -19
  212. package/src/components/CommentsThreadContainer.tsx +9 -9
  213. package/src/components/Lobby/Lobby.tsx +9 -7
  214. package/src/components/Media/AudioStream.tsx +2 -2
  215. package/src/components/Media/VideoObject.stories.tsx +1 -1
  216. package/src/components/Media/VideoObject.tsx +1 -1
  217. package/src/components/MessageContainer.tsx +54 -25
  218. package/src/components/Participant/Participant.tsx +32 -19
  219. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +1 -1
  220. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +1 -1
  221. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +1 -1
  222. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  223. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +1 -1
  224. package/src/components/ThreadCompanion.tsx +70 -64
  225. package/src/components/ThreadSettings.tsx +9 -3
  226. package/src/components/command-extension.ts +2 -2
  227. package/src/components/index.ts +2 -5
  228. package/src/extensions/threads.ts +72 -38
  229. package/src/functions/create-proposals.ts +9 -9
  230. package/src/hooks/analytics.ts +23 -20
  231. package/src/index.ts +1 -1
  232. package/src/meta.ts +2 -2
  233. package/src/testing/stories.ts +16 -11
  234. package/src/types/Channel.ts +10 -6
  235. package/src/types/capabilities.ts +34 -0
  236. package/src/types/index.ts +1 -0
  237. package/src/types/types.ts +160 -73
  238. package/dist/lib/browser/ChannelContainer-3BKLNZ4D.mjs +0 -17
  239. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +0 -16
  240. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs +0 -171
  241. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +0 -7
  242. package/dist/lib/browser/blueprint-definition-UO43FHAE.mjs.map +0 -7
  243. package/dist/lib/browser/call-manager-4YFT4XA6.mjs +0 -25
  244. package/dist/lib/browser/call-manager-4YFT4XA6.mjs.map +0 -7
  245. package/dist/lib/browser/chunk-6E6VNV6V.mjs +0 -25
  246. package/dist/lib/browser/chunk-6E6VNV6V.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-ALZKJOZK.mjs +0 -989
  248. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-CFC7LEPD.mjs +0 -18
  250. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-JDJPMI7V.mjs +0 -143
  252. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-QM34EZQK.mjs +0 -20
  255. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +0 -7
  256. package/dist/lib/browser/chunk-SS3O5SOQ.mjs +0 -611
  257. package/dist/lib/browser/chunk-SS3O5SOQ.mjs.map +0 -7
  258. package/dist/lib/browser/chunk-TLOOZTRD.mjs +0 -377
  259. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +0 -7
  260. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +0 -7
  261. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs +0 -355
  262. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +0 -7
  263. package/dist/lib/browser/markdown-GSTZY2JL.mjs +0 -172
  264. package/dist/lib/browser/markdown-GSTZY2JL.mjs.map +0 -7
  265. package/dist/lib/browser/react-root-GRZVEGGE.mjs +0 -29
  266. package/dist/lib/browser/react-root-GRZVEGGE.mjs.map +0 -7
  267. package/dist/lib/browser/react-surface-C2OIZGFN.mjs.map +0 -7
  268. package/dist/lib/browser/repair-JFJLEM2O.mjs.map +0 -7
  269. package/dist/lib/browser/settings-E6IOLK46.mjs +0 -23
  270. package/dist/lib/browser/settings-E6IOLK46.mjs.map +0 -7
  271. package/dist/lib/browser/state-UYPLBGZJ.mjs +0 -35
  272. package/dist/lib/browser/state-UYPLBGZJ.mjs.map +0 -7
  273. package/dist/lib/node-esm/ChannelContainer-I4U4TEEY.mjs +0 -18
  274. package/dist/lib/node-esm/ChannelContainer-I4U4TEEY.mjs.map +0 -7
  275. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +0 -17
  276. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs.map +0 -7
  277. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs +0 -172
  278. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +0 -7
  279. package/dist/lib/node-esm/blueprint-definition-WANHWSF5.mjs.map +0 -7
  280. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs +0 -26
  281. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs.map +0 -7
  282. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +0 -22
  283. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +0 -7
  284. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +0 -7
  285. package/dist/lib/node-esm/chunk-AB42KYF3.mjs +0 -990
  286. package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +0 -7
  287. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs +0 -378
  288. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +0 -7
  289. package/dist/lib/node-esm/chunk-P2M364TO.mjs +0 -144
  290. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +0 -7
  292. package/dist/lib/node-esm/chunk-RDD44HYY.mjs +0 -612
  293. package/dist/lib/node-esm/chunk-RDD44HYY.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +0 -19
  295. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +0 -7
  296. package/dist/lib/node-esm/chunk-UPA2Q5YI.mjs +0 -27
  297. package/dist/lib/node-esm/chunk-UPA2Q5YI.mjs.map +0 -7
  298. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs +0 -356
  299. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +0 -7
  300. package/dist/lib/node-esm/markdown-MC5OP2UR.mjs +0 -173
  301. package/dist/lib/node-esm/markdown-MC5OP2UR.mjs.map +0 -7
  302. package/dist/lib/node-esm/react-root-5IYK7CTL.mjs +0 -30
  303. package/dist/lib/node-esm/react-root-5IYK7CTL.mjs.map +0 -7
  304. package/dist/lib/node-esm/react-surface-GWBXMENS.mjs.map +0 -7
  305. package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +0 -7
  306. package/dist/lib/node-esm/settings-RGZHWDSO.mjs +0 -24
  307. package/dist/lib/node-esm/settings-RGZHWDSO.mjs.map +0 -7
  308. package/dist/lib/node-esm/state-XNWOLBNE.mjs +0 -36
  309. package/dist/lib/node-esm/state-XNWOLBNE.mjs.map +0 -7
  310. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  311. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  312. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  313. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  314. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  315. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  316. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  317. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  318. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  319. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  320. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  321. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  322. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  323. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  324. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  325. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  326. package/dist/types/src/capabilities/repair.d.ts +0 -4
  327. package/dist/types/src/capabilities/repair.d.ts.map +0 -1
  328. package/dist/types/src/capabilities/settings.d.ts +0 -4
  329. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  330. package/dist/types/src/capabilities/state.d.ts +0 -7
  331. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  332. package/src/capabilities/app-graph-builder.ts +0 -194
  333. package/src/capabilities/blueprint-definition.ts +0 -38
  334. package/src/capabilities/call-manager.ts +0 -20
  335. package/src/capabilities/capabilities.ts +0 -33
  336. package/src/capabilities/intent-resolver.ts +0 -311
  337. package/src/capabilities/markdown.ts +0 -71
  338. package/src/capabilities/react-root.tsx +0 -17
  339. package/src/capabilities/react-surface.tsx +0 -91
  340. package/src/capabilities/settings.ts +0 -19
  341. package/src/capabilities/state.ts +0 -26
  342. /package/dist/lib/browser/{ChannelContainer-3BKLNZ4D.mjs.map → blueprints/index.mjs.map} +0 -0
  343. /package/dist/lib/{browser/ChatContainer-KPY4BAUE.mjs.map → node-esm/blueprints/index.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/react';
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,10 +2,13 @@
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/react';
8
+ import { useCapability } from '@dxos/app-framework/ui';
9
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
8
10
  import { Obj } from '@dxos/echo';
11
+ import { Node, useActionRunner } from '@dxos/plugin-graph';
9
12
  import { useActions, useNode } from '@dxos/plugin-graph';
10
13
  import {
11
14
  Icon,
@@ -16,10 +19,10 @@ 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';
25
+ import { ThreadCapabilities } from '../../types';
23
26
  import { type Channel } from '../../types';
24
27
 
25
28
  export type ToolbarProps = ThemedClassName<{
@@ -42,14 +45,18 @@ 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
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
 
@@ -58,7 +65,7 @@ export const Toolbar = ({
58
65
  <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>
59
66
  <NaturalToolbar.Root classNames={['p-2 bg-modalSurface 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',
@@ -70,12 +77,12 @@ export const Toolbar = ({
70
77
  icon: 'ph--microphone-slash--duotone',
71
78
  label: t('mic on'),
72
79
  onClick: () => call.turnAudioOn(),
73
- classNames: [call.joined && 'bg-callAlert'],
80
+ classNames: [joined && 'bg-callAlert'],
74
81
  },
75
82
  }}
76
83
  />
77
84
  <ToggleButton
78
- active={call.media.videoEnabled}
85
+ active={media.videoEnabled}
79
86
  state={{
80
87
  on: {
81
88
  icon: 'ph--video-camera--regular',
@@ -97,7 +104,7 @@ export const Toolbar = ({
97
104
  </div>
98
105
  )) || <NaturalToolbar.Separator variant='gap' />}
99
106
 
100
- {call.joined && (
107
+ {joined && (
101
108
  <>
102
109
  <ToggleButton
103
110
  disabled={!canSharescreen}
@@ -117,25 +124,27 @@ export const Toolbar = ({
117
124
  />
118
125
 
119
126
  {/* 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
- ))}
127
+ {actions
128
+ .filter((action): action is Node.Action => Node.isAction(action))
129
+ .map((action) => (
130
+ <IconButton
131
+ key={action.id}
132
+ {...defaultButtonProps}
133
+ icon={action.properties.icon}
134
+ label={toLocalizedString(action.properties.label, t)}
135
+ classNames={action.properties.classNames}
136
+ onClick={() => node && void runAction(action, { parent: node })}
137
+ />
138
+ ))}
130
139
 
131
140
  <ToggleButton
132
- active={call.raisedHand}
141
+ active={raisedHand}
133
142
  state={{
134
143
  on: {
135
144
  icon: 'ph--hand-waving--regular',
136
145
  label: t('lower hand'),
137
146
  onClick: () => call.setRaisedHand(false),
138
- classNames: [call.joined && 'bg-callAlert'],
147
+ classNames: [joined && 'bg-callAlert'],
139
148
  },
140
149
  off: {
141
150
  icon: 'ph--hand-palm--duotone',
@@ -146,7 +155,7 @@ export const Toolbar = ({
146
155
  />
147
156
  </>
148
157
  )}
149
- {call.joined ? (
158
+ {joined ? (
150
159
  <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />
151
160
  ) : (
152
161
  <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />
@@ -2,17 +2,19 @@
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 { useCapability } from '@dxos/app-framework/react';
8
+ import { useCapability } from '@dxos/app-framework/ui';
8
9
 
9
- import { ThreadCapabilities } from '../capabilities';
10
+ import { ThreadCapabilities } from '../types';
10
11
 
11
12
  import { ChannelContainer } from './ChannelContainer';
12
13
 
13
14
  export const CallSidebar = () => {
14
15
  const call = useCapability(ThreadCapabilities.CallManager);
15
- return <ChannelContainer roomId={call.roomId} />;
16
+ const roomId = useAtomValue(call.roomIdAtom);
17
+ return <ChannelContainer subject={undefined} roomId={roomId} />;
16
18
  };
17
19
 
18
20
  export default CallSidebar;
@@ -5,10 +5,10 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { contributes } from '@dxos/app-framework';
8
+ import { Capability } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { ClientCapabilities } from '@dxos/plugin-client';
11
- import { Query, useQuery, useSpace } from '@dxos/react-client/echo';
10
+ import { AppCapabilities } from '@dxos/app-toolkit';
11
+ import { Query, useDatabase, useQuery } from '@dxos/react-client/echo';
12
12
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
13
  import { render } from '@dxos/storybook-utils';
14
14
  import { Message, Thread } from '@dxos/types';
@@ -21,13 +21,13 @@ import { ChannelContainer, type ChannelContainerProps } from './ChannelContainer
21
21
 
22
22
  // TODO(wittjosiah): Channel doesn't render full height.
23
23
  const DefaultStory = ({ roomId }: ChannelContainerProps) => {
24
- const space = useSpace();
25
- const [channel] = useQuery(space, Query.type(Channel.Channel));
24
+ const db = useDatabase();
25
+ const [channel] = useQuery(db, Query.type(Channel.Channel));
26
26
  if (!channel) {
27
27
  return null;
28
28
  }
29
29
 
30
- return <ChannelContainer channel={channel} roomId={roomId} />;
30
+ return <ChannelContainer subject={channel} roomId={roomId} />;
31
31
  };
32
32
 
33
33
  const meta = {
@@ -35,11 +35,11 @@ const meta = {
35
35
  component: ChannelContainer,
36
36
  render: render(DefaultStory),
37
37
  decorators: [
38
- withTheme,
39
- withLayout({ container: 'column' }),
38
+ withTheme(),
39
+ withLayout({ layout: 'column' }),
40
40
  withPluginManager({
41
41
  plugins: [...(await createThreadPlugins())],
42
- capabilities: [contributes(ClientCapabilities.Schema, [Channel.Channel, Thread.Thread, Message.Message])],
42
+ capabilities: [Capability.contributes(AppCapabilities.Schema, [Channel.Channel, Thread.Thread, Message.Message])],
43
43
  }),
44
44
  ],
45
45
  parameters: {
@@ -54,6 +54,7 @@ type Story = StoryObj<typeof meta>;
54
54
  export const Default: Story = {
55
55
  args: {
56
56
  // Fixed room for testing.
57
+ subject: undefined,
57
58
  roomId: '04a1d1911703b8e929d0649021a965',
58
59
  },
59
60
  };
@@ -2,10 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Atom } from '@effect-atom/atom-react';
5
+ import { Atom, useAtomValue } from '@effect-atom/atom-react';
6
6
  import React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';
7
7
 
8
- import { useCapabilities, useCapability } from '@dxos/app-framework/react';
8
+ import { useCapabilities, useCapability } from '@dxos/app-framework/ui';
9
+ import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
9
10
  import { Context } from '@dxos/context';
10
11
  import { failUndefined } from '@dxos/debug';
11
12
  import { Obj } from '@dxos/echo';
@@ -14,35 +15,37 @@ import { useClient } from '@dxos/react-client';
14
15
  import { getSpace } from '@dxos/react-client/echo';
15
16
  import { useIdentity } from '@dxos/react-client/halo';
16
17
  import { ElevationProvider, Input, useTranslation } from '@dxos/react-ui';
17
- import { ControlGroup, ControlGroupButton, ControlItemInput } from '@dxos/react-ui-form';
18
+ import { Settings } from '@dxos/react-ui-form';
18
19
  import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
19
20
  import { useSoundEffect } from '@dxos/react-ui-sfx';
20
21
  import { StackItem } from '@dxos/react-ui-stack';
21
22
 
22
- import { ThreadCapabilities } from '../capabilities';
23
23
  import { meta } from '../meta';
24
+ import { ThreadCapabilities } from '../types';
24
25
  import { type Channel } from '../types';
25
26
 
26
27
  import { Call } from './Call';
27
28
  import ChatContainer from './ChatContainer';
28
29
 
29
- // TODO(burdon): Create Radix style layout.
30
-
31
- export type ChannelContainerProps = {
32
- channel?: Channel.Channel;
33
- roomId?: string;
34
- role?: string;
35
- fullscreen?: boolean;
36
- };
30
+ export type ChannelContainerProps = SurfaceComponentProps<
31
+ Channel.Channel | undefined,
32
+ {
33
+ roomId?: string;
34
+ fullscreen?: boolean;
35
+ }
36
+ >;
37
37
 
38
38
  /**
39
39
  * Renders a call when active, otherwise renders the channel chat.
40
40
  */
41
- export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {
41
+ // TODO(burdon): Create Radix style layout.
42
+ export const ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, fullscreen }: ChannelContainerProps) => {
42
43
  const space = getSpace(channel);
43
44
  const callManager = useCapability(ThreadCapabilities.CallManager);
45
+ const joined = useAtomValue(callManager.joinedAtom);
46
+ const currentRoomId = useAtomValue(callManager.roomIdAtom);
44
47
  const attendableId = channel ? Obj.getDXN(channel).toString() : undefined;
45
- const roomId = _roomId ?? attendableId ?? failUndefined();
48
+ const roomId = roomIdProp ?? attendableId ?? failUndefined();
46
49
  const identity = useIdentity();
47
50
  const isNamed = !!identity?.profile?.displayName;
48
51
  const joinSound = useSoundEffect('JoinCall');
@@ -83,7 +86,7 @@ export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }:
83
86
  return;
84
87
  }
85
88
 
86
- if (callManager.joined) {
89
+ if (joined) {
87
90
  await callManager.leave();
88
91
  }
89
92
 
@@ -96,7 +99,7 @@ export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }:
96
99
  // TODO(burdon): Error sound.
97
100
  log.catch(err);
98
101
  }
99
- }, [extensions, channel, roomId]);
102
+ }, [extensions, channel, roomId, joined]);
100
103
 
101
104
  /**
102
105
  * Leave the call.
@@ -115,7 +118,7 @@ export const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }:
115
118
  }
116
119
  }, [extensions, roomId]);
117
120
 
118
- const isJoined = callManager.joined && callManager.roomId === roomId;
121
+ const isJoined = joined && currentRoomId === roomId;
119
122
 
120
123
  return (
121
124
  <StackItem.Content classNames={isJoined && 'bs-full'} toolbar={!isJoined}>
@@ -146,19 +149,19 @@ const DisplayNameMissing = () => {
146
149
  const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);
147
150
 
148
151
  return (
149
- <ControlGroup classNames='p-4 place-content-center'>
150
- <ControlItemInput title={t('display name label')} description={t('display name description')}>
152
+ <Settings.Group classNames='p-4 place-content-center'>
153
+ <Settings.ItemInput title={t('display name label')} description={t('display name description')}>
151
154
  <Input.TextInput
152
155
  value={displayName}
153
156
  onChange={handleChange}
154
157
  placeholder={t('display name input placeholder')}
155
158
  classNames='md:min-is-64'
156
159
  />
157
- </ControlItemInput>
158
- <ControlGroupButton disabled={!displayName} onClick={handleSave}>
160
+ </Settings.ItemInput>
161
+ <Settings.GroupButton disabled={!displayName} onClick={handleSave}>
159
162
  {t('set display name label')}
160
- </ControlGroupButton>
161
- </ControlGroup>
163
+ </Settings.GroupButton>
164
+ </Settings.Group>
162
165
  );
163
166
  };
164
167
 
@@ -5,8 +5,9 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useState } from 'react';
7
7
 
8
- import { Capabilities, IntentPlugin, contributes, createSurface } from '@dxos/app-framework';
8
+ import { Capabilities, Capability, OperationPlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { Surface } from '@dxos/app-framework/ui';
10
11
  import { faker } from '@dxos/random';
11
12
  import { useClient } from '@dxos/react-client';
12
13
  import { type Space } from '@dxos/react-client/echo';
@@ -45,7 +46,7 @@ const DefaultStory = () => {
45
46
  }
46
47
 
47
48
  return (
48
- <main className='is-full max-is-prose mli-auto bs-dvh overflow-hidden'>
49
+ <main className='is-full max-is-proseMaxWidth mli-auto bs-full overflow-hidden'>
49
50
  <ChatContainer space={space} thread={channel.defaultThread.target} />
50
51
  </main>
51
52
  );
@@ -56,13 +57,13 @@ const meta = {
56
57
  component: ThreadComponent.Root as any,
57
58
  render: render(DefaultStory),
58
59
  decorators: [
59
- withTheme,
60
+ withTheme(),
60
61
  withPluginManager({
61
- plugins: [IntentPlugin()],
62
+ plugins: [OperationPlugin()],
62
63
  capabilities: [
63
- contributes(
64
+ Capability.contributes(
64
65
  Capabilities.ReactSurface,
65
- createSurface({
66
+ Surface.create({
66
67
  id: 'test',
67
68
  role: 'card',
68
69
  component: ({ role }) => <span>{JSON.stringify({ role })}</span>,
@@ -8,9 +8,7 @@ import { Obj, Ref } from '@dxos/echo';
8
8
  import { type Space, useMembers } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
10
  import { Icon, ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
11
- import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
11
  import { StackItem } from '@dxos/react-ui-stack';
13
- import { mx } from '@dxos/react-ui-theme';
14
12
  import {
15
13
  MessageTextbox,
16
14
  type MessageTextboxProps,
@@ -19,6 +17,8 @@ import {
19
17
  threadLayout,
20
18
  } from '@dxos/react-ui-thread';
21
19
  import { Message, type Thread } from '@dxos/types';
20
+ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui-editor';
21
+ import { mx } from '@dxos/ui-theme';
22
22
  import { isNonNullable } from '@dxos/util';
23
23
 
24
24
  import { useStatus } from '../hooks';
@@ -44,7 +44,7 @@ export type ChatContainerProps = ThemedClassName<
44
44
  {
45
45
  space: Space;
46
46
  thread: Thread.Thread;
47
- context?: Obj.Any;
47
+ context?: Obj.Unknown;
48
48
  autoFocusTextbox?: boolean;
49
49
  } & Pick<ThreadRootProps, 'current'>
50
50
  >;
@@ -60,7 +60,7 @@ export const ChatContainer = ({
60
60
  const { t } = useTranslation(meta.id);
61
61
  const id = Obj.getDXN(thread).toString();
62
62
  const identity = useIdentity()!;
63
- const members = useMembers(space?.key);
63
+ const members = useMembers(space?.id);
64
64
  const activity = useStatus(space, id);
65
65
  // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
66
66
  const [_count, _setCount] = useState(0);
@@ -98,16 +98,18 @@ export const ChatContainer = ({
98
98
  return false;
99
99
  }
100
100
 
101
- thread.messages.push(
102
- Ref.make(
103
- Obj.make(Message.Message, {
104
- created: new Date().toISOString(),
105
- sender: { identityDid: identity.did },
106
- blocks: [{ _tag: 'text', text: messageRef.current }],
107
- properties: context ? { context: Ref.make(context) } : undefined,
108
- }),
109
- ),
110
- );
101
+ Obj.change(thread, (t) => {
102
+ t.messages.push(
103
+ Ref.make(
104
+ Obj.make(Message.Message, {
105
+ created: new Date().toISOString(),
106
+ sender: { identityDid: identity.did },
107
+ blocks: [{ _tag: 'text', text: messageRef.current }],
108
+ properties: context ? { context: Ref.make(context) } : undefined,
109
+ }),
110
+ ),
111
+ );
112
+ });
111
113
 
112
114
  messageRef.current = '';
113
115
  setAutoFocus(true);
@@ -126,8 +128,8 @@ export const ChatContainer = ({
126
128
  classNames,
127
129
  ]}
128
130
  >
129
- <ScrollArea.Root classNames='col-span-2'>
130
- <ScrollArea.Viewport classNames='overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]'>
131
+ <ScrollArea.Root orientation='vertical'>
132
+ <ScrollArea.Viewport classNames='col-span-2'>
131
133
  <div role='none' className={mx(threadLayout, 'place-self-end')}>
132
134
  {thread.messages
133
135
  .map((message) => message.target)
@@ -136,11 +138,8 @@ export const ChatContainer = ({
136
138
  <MessageContainer key={message.id} message={message} members={members} />
137
139
  ))}
138
140
  </div>
139
- {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
141
+ {/* NOTE(thure): This can't also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref'd element. */}
140
142
  <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
141
- <ScrollArea.Scrollbar>
142
- <ScrollArea.Thumb />
143
- </ScrollArea.Scrollbar>
144
143
  </ScrollArea.Viewport>
145
144
  </ScrollArea.Root>
146
145
 
@@ -3,14 +3,16 @@
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 } 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
18
  import { withLayout, withTheme } from '@dxos/react-ui/testing';
@@ -26,22 +28,22 @@ faker.seed(1);
26
28
 
27
29
  const DefaultStory = () => {
28
30
  const identity = useIdentity();
29
- const space = useSpace();
30
- const anchors = useQuery(space, Query.type(AnchoredTo.AnchoredTo));
31
+ const db = useDatabase();
32
+ const anchors = useQuery(db, Query.type(AnchoredTo.AnchoredTo));
31
33
 
32
34
  useAsyncEffect(async () => {
33
- if (identity && space) {
34
- const object = space.db.add(Obj.make(Type.Expando, {}));
35
- const thread1 = space.db.add(createCommentThread(identity));
36
- const thread2 = space.db.add(createProposalThread(identity));
37
- space.db.add(
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(
38
40
  Relation.make(AnchoredTo.AnchoredTo, {
39
41
  [Relation.Source]: thread1,
40
42
  [Relation.Target]: object,
41
43
  anchor: 'test',
42
44
  }),
43
45
  );
44
- space.db.add(
46
+ db.add(
45
47
  Relation.make(AnchoredTo.AnchoredTo, {
46
48
  [Relation.Source]: thread2,
47
49
  [Relation.Target]: object,
@@ -49,9 +51,9 @@ const DefaultStory = () => {
49
51
  }),
50
52
  );
51
53
  }
52
- }, [identity, space]);
54
+ }, [identity, db]);
53
55
 
54
- if (!identity || !space || !anchors) {
56
+ if (!identity || !db || !anchors) {
55
57
  return null;
56
58
  }
57
59
 
@@ -62,18 +64,19 @@ const meta = {
62
64
  title: 'plugins/plugin-thread/Comments',
63
65
  render: render(DefaultStory),
64
66
  decorators: [
65
- withTheme,
66
- withLayout({ container: 'column', scroll: true }),
67
+ withTheme(),
68
+ withLayout({ layout: 'column', scroll: true }),
67
69
  // TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
68
70
  // Currently this is required due to useOnEditAnalytics.
69
71
  withPluginManager({
70
72
  plugins: [
71
- IntentPlugin(),
73
+ OperationPlugin(),
72
74
  ClientPlugin({
73
75
  types: [Message.Message, Thread.Thread, AnchoredTo.AnchoredTo],
74
- onClientInitialized: async ({ client }) => {
75
- await client.halo.createIdentity();
76
- },
76
+ onClientInitialized: ({ client }) =>
77
+ Effect.gen(function* () {
78
+ yield* Effect.promise(() => client.halo.createIdentity());
79
+ }),
77
80
  }),
78
81
  ],
79
82
  }),