@dxos/plugin-thread 0.8.4-main.67995b8 → 0.8.4-main.69d29f4

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 (406) hide show
  1. package/dist/lib/browser/app-graph-builder-7C2QW32W.mjs +188 -0
  2. package/dist/lib/browser/app-graph-builder-7C2QW32W.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-4P536YNX.mjs +26 -0
  7. package/dist/lib/browser/call-manager-4P536YNX.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-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  11. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-DLO2G3DM.mjs} +85 -50
  13. package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-ERK254BS.mjs} +381 -240
  15. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-ISCHODBV.mjs} +55 -5
  17. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  19. package/dist/lib/browser/chunk-YSHXWAL3.mjs +1815 -0
  20. package/dist/lib/browser/chunk-YSHXWAL3.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-ZFLSTQSE.mjs +106 -0
  22. package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +7 -0
  23. package/dist/lib/browser/index.mjs +132 -114
  24. package/dist/lib/browser/index.mjs.map +4 -4
  25. package/dist/lib/browser/markdown-QMJLRR6R.mjs +210 -0
  26. package/dist/lib/browser/markdown-QMJLRR6R.mjs.map +7 -0
  27. package/dist/lib/browser/meta.json +1 -1
  28. package/dist/lib/browser/operation-resolver-T63EP5TY.mjs +441 -0
  29. package/dist/lib/browser/operation-resolver-T63EP5TY.mjs.map +7 -0
  30. package/dist/lib/browser/react-root-56MJI77R.mjs +25 -0
  31. package/dist/lib/browser/react-root-56MJI77R.mjs.map +7 -0
  32. package/dist/lib/browser/react-surface-DMBHQOXJ.mjs +110 -0
  33. package/dist/lib/browser/react-surface-DMBHQOXJ.mjs.map +7 -0
  34. package/dist/lib/browser/repair-6OZ75AUU.mjs +38 -0
  35. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
  36. package/dist/lib/browser/settings-WZMJMML3.mjs +32 -0
  37. package/dist/lib/browser/settings-WZMJMML3.mjs.map +7 -0
  38. package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
  39. package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +10 -12
  41. package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs +189 -0
  42. package/dist/lib/node-esm/app-graph-builder-JCSVFRVY.mjs.map +7 -0
  43. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs +18 -0
  44. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +7 -0
  45. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  46. package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs +27 -0
  47. package/dist/lib/node-esm/call-manager-FMLRR5S5.mjs.map +7 -0
  48. package/dist/lib/node-esm/chunk-7XQLXMX7.mjs +1816 -0
  49. package/dist/lib/node-esm/chunk-7XQLXMX7.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  51. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  52. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs +107 -0
  53. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +7 -0
  54. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  55. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-KRBZBJRI.mjs} +85 -50
  56. package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-QP3KQOPQ.mjs} +381 -240
  58. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-VBI32FGI.mjs} +55 -5
  60. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
  62. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +132 -114
  64. package/dist/lib/node-esm/index.mjs.map +4 -4
  65. package/dist/lib/node-esm/markdown-L6LLQLIN.mjs +211 -0
  66. package/dist/lib/node-esm/markdown-L6LLQLIN.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs +442 -0
  69. package/dist/lib/node-esm/operation-resolver-G6GZPBRP.mjs.map +7 -0
  70. package/dist/lib/node-esm/react-root-V4W4X5GL.mjs +26 -0
  71. package/dist/lib/node-esm/react-root-V4W4X5GL.mjs.map +7 -0
  72. package/dist/lib/node-esm/react-surface-ELDSTUA3.mjs +111 -0
  73. package/dist/lib/node-esm/react-surface-ELDSTUA3.mjs.map +7 -0
  74. package/dist/lib/node-esm/repair-6777EPOM.mjs +39 -0
  75. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
  76. package/dist/lib/node-esm/settings-37CO3SNR.mjs +33 -0
  77. package/dist/lib/node-esm/settings-37CO3SNR.mjs.map +7 -0
  78. package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
  79. package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +10 -12
  81. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  82. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/index.d.ts +2 -0
  84. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  86. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  87. package/dist/types/src/calls/call-manager.d.ts +40 -30
  88. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  90. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  91. package/dist/types/src/calls/media-manager.d.ts +2 -2
  92. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  93. package/dist/types/src/calls/types.d.ts +1 -1
  94. package/dist/types/src/calls/types.d.ts.map +1 -1
  95. package/dist/types/src/calls/util/calls-service.d.ts +5 -3
  96. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  97. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  98. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  99. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  100. package/dist/types/src/calls-service.stories.d.ts +10 -9
  101. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  103. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  105. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +9 -0
  107. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  109. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  111. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  113. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/index.d.ts +10 -15
  115. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  117. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  119. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  121. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  123. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  125. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  127. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  128. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  129. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  130. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  131. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  132. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  133. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  134. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  135. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  136. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  137. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  138. package/dist/types/src/capabilities/settings/settings.d.ts +5 -0
  139. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  140. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  141. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  142. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  143. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  144. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  145. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  146. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  147. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  148. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  149. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  150. package/dist/types/src/components/ChannelContainer.d.ts +5 -6
  151. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  152. package/dist/types/src/components/ChannelContainer.stories.d.ts +159 -5
  153. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Chat.stories.d.ts +162 -5
  155. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/ChatContainer.d.ts +7 -6
  157. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/Comments.stories.d.ts +160 -4
  159. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  161. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/CommentsThreadContainer.d.ts +9 -9
  163. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  164. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  165. package/dist/types/src/components/Media/VideoObject.d.ts +3 -3
  166. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  167. package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
  168. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/MessageContainer.d.ts +7 -3
  170. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  171. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  172. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  173. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +159 -3
  174. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +161 -4
  176. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  178. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  179. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  180. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  181. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  182. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  183. package/dist/types/src/components/index.d.ts +3 -3
  184. package/dist/types/src/components/index.d.ts.map +1 -1
  185. package/dist/types/src/components/testing.d.ts +3 -2
  186. package/dist/types/src/components/testing.d.ts.map +1 -1
  187. package/dist/types/src/extensions/threads.d.ts +7 -2
  188. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  189. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  190. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  191. package/dist/types/src/functions/index.d.ts +2 -0
  192. package/dist/types/src/functions/index.d.ts.map +1 -0
  193. package/dist/types/src/hooks/analytics.d.ts +2 -3
  194. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  195. package/dist/types/src/hooks/index.d.ts +2 -1
  196. package/dist/types/src/hooks/index.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  198. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  199. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  200. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  201. package/dist/types/src/index.d.ts +1 -1
  202. package/dist/types/src/index.d.ts.map +1 -1
  203. package/dist/types/src/meta.d.ts +3 -4
  204. package/dist/types/src/meta.d.ts.map +1 -1
  205. package/dist/types/src/testing/stories.d.ts +2 -1
  206. package/dist/types/src/testing/stories.d.ts.map +1 -1
  207. package/dist/types/src/translations.d.ts +79 -7
  208. package/dist/types/src/translations.d.ts.map +1 -1
  209. package/dist/types/src/types/Channel.d.ts +695 -0
  210. package/dist/types/src/types/Channel.d.ts.map +1 -0
  211. package/dist/types/src/types/capabilities.d.ts +23 -0
  212. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  213. package/dist/types/src/types/index.d.ts +2 -1
  214. package/dist/types/src/types/index.d.ts.map +1 -1
  215. package/dist/types/src/types/types.d.ts +3223 -365
  216. package/dist/types/src/types/types.d.ts.map +1 -1
  217. package/dist/types/tsconfig.tsbuildinfo +1 -1
  218. package/package.json +89 -66
  219. package/src/ThreadPlugin.tsx +107 -129
  220. package/src/blueprints/index.ts +5 -0
  221. package/src/blueprints/thread-blueprint.ts +32 -0
  222. package/src/calls/call-manager.ts +78 -54
  223. package/src/calls/call-swarm-synchronizer.ts +3 -3
  224. package/src/calls/media-manager.ts +67 -38
  225. package/src/calls/types.ts +8 -4
  226. package/src/calls/util/calls-service.ts +66 -15
  227. package/src/calls/util/stub-media-streams.ts +64 -7
  228. package/src/calls/util/task-scheduling.ts +4 -4
  229. package/src/calls-service.stories.tsx +78 -65
  230. package/src/capabilities/app-graph-builder/app-graph-builder.ts +201 -0
  231. package/src/capabilities/app-graph-builder/index.ts +7 -0
  232. package/src/capabilities/blueprint-definition/blueprint-definition.ts +23 -0
  233. package/src/capabilities/blueprint-definition/index.ts +7 -0
  234. package/src/capabilities/call-manager/call-manager.ts +26 -0
  235. package/src/capabilities/call-manager/index.ts +7 -0
  236. package/src/capabilities/index.ts +10 -12
  237. package/src/capabilities/markdown/index.ts +7 -0
  238. package/src/capabilities/markdown/markdown.ts +83 -0
  239. package/src/capabilities/operation-resolver/index.ts +7 -0
  240. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  241. package/src/capabilities/react-root/index.ts +7 -0
  242. package/src/capabilities/react-root/react-root.tsx +20 -0
  243. package/src/capabilities/react-surface/index.ts +7 -0
  244. package/src/capabilities/react-surface/react-surface.tsx +97 -0
  245. package/src/capabilities/repair/index.ts +7 -0
  246. package/src/capabilities/repair/repair.ts +51 -0
  247. package/src/capabilities/settings/index.ts +7 -0
  248. package/src/capabilities/settings/settings.ts +33 -0
  249. package/src/capabilities/state/index.ts +7 -0
  250. package/src/capabilities/state/state.ts +22 -0
  251. package/src/components/Call/Call.tsx +11 -6
  252. package/src/components/Call/Toolbar.tsx +38 -30
  253. package/src/components/CallDebugPanel.tsx +112 -55
  254. package/src/components/CallSidebar.tsx +6 -3
  255. package/src/components/ChannelContainer.stories.tsx +22 -19
  256. package/src/components/ChannelContainer.tsx +36 -29
  257. package/src/components/Chat.stories.tsx +37 -40
  258. package/src/components/ChatContainer.tsx +52 -38
  259. package/src/components/Comments.stories.tsx +52 -51
  260. package/src/components/CommentsContainer.tsx +7 -8
  261. package/src/components/CommentsThreadContainer.tsx +47 -41
  262. package/src/components/Lobby/Lobby.tsx +10 -8
  263. package/src/components/Media/AudioStream.tsx +2 -2
  264. package/src/components/Media/VideoObject.stories.tsx +36 -28
  265. package/src/components/Media/VideoObject.tsx +2 -2
  266. package/src/components/MessageContainer.tsx +98 -33
  267. package/src/components/Participant/Participant.tsx +34 -15
  268. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  269. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +8 -8
  270. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +3 -3
  271. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +45 -43
  272. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +7 -7
  273. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +8 -5
  274. package/src/components/ThreadCompanion.tsx +193 -0
  275. package/src/components/ThreadSettings.tsx +10 -6
  276. package/src/components/command-extension.ts +7 -4
  277. package/src/components/index.ts +4 -7
  278. package/src/components/testing.ts +26 -6
  279. package/src/extensions/threads.ts +86 -42
  280. package/src/functions/create-proposals.ts +57 -0
  281. package/src/functions/index.ts +5 -0
  282. package/src/hooks/analytics.ts +21 -21
  283. package/src/hooks/index.ts +3 -1
  284. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  285. package/src/hooks/useDebugMode.ts +1 -1
  286. package/src/hooks/useVideoStreamTrack.tsx +6 -3
  287. package/src/index.ts +1 -1
  288. package/src/meta.ts +11 -7
  289. package/src/testing/stories.ts +17 -16
  290. package/src/translations.ts +9 -4
  291. package/src/types/Channel.ts +30 -0
  292. package/src/types/capabilities.ts +34 -0
  293. package/src/types/index.ts +2 -1
  294. package/src/types/types.ts +170 -82
  295. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  296. package/src/typings.d.ts +8 -0
  297. package/src/util.ts +1 -1
  298. package/dist/lib/browser/ChannelContainer-3GIE7ASU.mjs +0 -16
  299. package/dist/lib/browser/ChatContainer-AIGIWAUG.mjs +0 -15
  300. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs +0 -171
  301. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  302. package/dist/lib/browser/call-manager-NIPDYUVD.mjs +0 -24
  303. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  304. package/dist/lib/browser/chunk-3SGRT4NM.mjs +0 -367
  305. package/dist/lib/browser/chunk-3SGRT4NM.mjs.map +0 -7
  306. package/dist/lib/browser/chunk-6NSMBO3B.mjs.map +0 -7
  307. package/dist/lib/browser/chunk-ERWASUQK.mjs.map +0 -7
  308. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  309. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  310. package/dist/lib/browser/chunk-FR7KJPNY.mjs +0 -21
  311. package/dist/lib/browser/chunk-FR7KJPNY.mjs.map +0 -7
  312. package/dist/lib/browser/chunk-GCLD5ESP.mjs +0 -137
  313. package/dist/lib/browser/chunk-GCLD5ESP.mjs.map +0 -7
  314. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  315. package/dist/lib/browser/chunk-KWPRNHTK.mjs +0 -984
  316. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  317. package/dist/lib/browser/chunk-LGSDKXPF.mjs +0 -18
  318. package/dist/lib/browser/chunk-LGSDKXPF.mjs.map +0 -7
  319. package/dist/lib/browser/chunk-VUWC4IJM.mjs +0 -479
  320. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  321. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  322. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs +0 -369
  323. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  324. package/dist/lib/browser/markdown-M3FMR7OD.mjs +0 -169
  325. package/dist/lib/browser/markdown-M3FMR7OD.mjs.map +0 -7
  326. package/dist/lib/browser/react-root-JEUSQXI6.mjs +0 -28
  327. package/dist/lib/browser/react-root-JEUSQXI6.mjs.map +0 -7
  328. package/dist/lib/browser/react-surface-XWS6GIZY.mjs +0 -109
  329. package/dist/lib/browser/react-surface-XWS6GIZY.mjs.map +0 -7
  330. package/dist/lib/browser/settings-E32MTL7A.mjs +0 -22
  331. package/dist/lib/browser/settings-E32MTL7A.mjs.map +0 -7
  332. package/dist/lib/browser/state-H6CYONWE.mjs +0 -34
  333. package/dist/lib/browser/state-H6CYONWE.mjs.map +0 -7
  334. package/dist/lib/node-esm/ChannelContainer-7FXCKO7X.mjs +0 -17
  335. package/dist/lib/node-esm/ChatContainer-IQUWU426.mjs +0 -16
  336. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs +0 -172
  337. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  338. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs +0 -25
  339. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  340. package/dist/lib/node-esm/chunk-25ABSYP2.mjs.map +0 -7
  341. package/dist/lib/node-esm/chunk-2CXOK2TD.mjs +0 -23
  342. package/dist/lib/node-esm/chunk-2CXOK2TD.mjs.map +0 -7
  343. package/dist/lib/node-esm/chunk-2MFNK53T.mjs +0 -480
  344. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  345. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  346. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs +0 -19
  347. package/dist/lib/node-esm/chunk-75RJ5DJI.mjs.map +0 -7
  348. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs +0 -985
  349. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  350. package/dist/lib/node-esm/chunk-FLBFYGBK.mjs +0 -368
  351. package/dist/lib/node-esm/chunk-FLBFYGBK.mjs.map +0 -7
  352. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  353. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  354. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  355. package/dist/lib/node-esm/chunk-OU5BYIDO.mjs.map +0 -7
  356. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs +0 -138
  357. package/dist/lib/node-esm/chunk-TDFHTCZZ.mjs.map +0 -7
  358. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs +0 -370
  359. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  360. package/dist/lib/node-esm/markdown-INKTE4MH.mjs +0 -170
  361. package/dist/lib/node-esm/markdown-INKTE4MH.mjs.map +0 -7
  362. package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs +0 -29
  363. package/dist/lib/node-esm/react-root-XYYY2JXZ.mjs.map +0 -7
  364. package/dist/lib/node-esm/react-surface-MJ33KPYE.mjs +0 -110
  365. package/dist/lib/node-esm/react-surface-MJ33KPYE.mjs.map +0 -7
  366. package/dist/lib/node-esm/settings-SJ24YG7M.mjs +0 -23
  367. package/dist/lib/node-esm/settings-SJ24YG7M.mjs.map +0 -7
  368. package/dist/lib/node-esm/state-D7WNDT3N.mjs +0 -35
  369. package/dist/lib/node-esm/state-D7WNDT3N.mjs.map +0 -7
  370. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  371. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  372. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  373. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  374. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  375. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  376. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  377. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  378. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  379. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  380. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  381. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  382. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  383. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  384. package/dist/types/src/capabilities/settings.d.ts +0 -4
  385. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  386. package/dist/types/src/capabilities/state.d.ts +0 -7
  387. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  388. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  389. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  390. package/dist/types/src/types/schema.d.ts +0 -162
  391. package/dist/types/src/types/schema.d.ts.map +0 -1
  392. package/src/capabilities/app-graph-builder.ts +0 -180
  393. package/src/capabilities/call-manager.ts +0 -19
  394. package/src/capabilities/capabilities.ts +0 -33
  395. package/src/capabilities/intent-resolver.ts +0 -314
  396. package/src/capabilities/markdown.ts +0 -68
  397. package/src/capabilities/react-root.tsx +0 -17
  398. package/src/capabilities/react-surface.tsx +0 -88
  399. package/src/capabilities/settings.ts +0 -19
  400. package/src/capabilities/state.ts +0 -25
  401. package/src/components/ThreadComplementary.tsx +0 -151
  402. package/src/types/schema.ts +0 -33
  403. /package/dist/lib/browser/{ChannelContainer-3GIE7ASU.mjs.map → blueprints/index.mjs.map} +0 -0
  404. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  405. /package/dist/lib/node-esm/{ChannelContainer-7FXCKO7X.mjs.map → blueprints/index.mjs.map} +0 -0
  406. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
@@ -2,13 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { type ComponentType, type FC, useLayoutEffect, useState, useEffect, useMemo, useCallback } from 'react';
5
+ import React, { type ComponentType, type FC, useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';
6
6
  import { useResizeDetector } from 'react-resize-detector';
7
7
 
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';
@@ -18,7 +18,7 @@ const MIN_GALLERY_HEIGHT = 250;
18
18
 
19
19
  const DEFAULT_GAP = 8;
20
20
 
21
- const maxImageSize = 'w-[2560px] h-[1440px]';
21
+ const maxImageSize = 'is-[2560px] bs-[1440px]';
22
22
 
23
23
  /**
24
24
  * Props for the ResponsiveGrid component.
@@ -136,13 +136,13 @@ export const ResponsiveGrid = <T extends object = any>({
136
136
  );
137
137
 
138
138
  return (
139
- <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>
139
+ <div ref={containerRef} className={mx('relative is-full bs-full', classNames)}>
140
140
  {/* Placeholder elements to calculate layout. */}
141
141
  <div className='absolute inset-0 flex flex-col grow gap-2'>
142
142
  {/* Pinned item. */}
143
143
  {pinnedItem && (
144
144
  <div
145
- className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}
145
+ className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'bs-full')}
146
146
  style={hideGallery ? {} : { height: dividerHeight }}
147
147
  >
148
148
  <SoloItem id={getId(pinnedItem)} debug={debug} />
@@ -157,7 +157,7 @@ export const ResponsiveGrid = <T extends object = any>({
157
157
  style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}
158
158
  >
159
159
  {mainItems.length === 1 && (
160
- <div style={{ width: cellWidth }} className='flex h-full'>
160
+ <div style={{ width: cellWidth }} className='flex bs-full'>
161
161
  <SoloItem id={getId(mainItems[0])} debug={debug} />
162
162
  </div>
163
163
  )}
@@ -176,7 +176,7 @@ export const ResponsiveGrid = <T extends object = any>({
176
176
  key={getId(item)}
177
177
  {...{ 'data-grid-item': getId(item) }}
178
178
  className={mx(
179
- 'aspect-video max-h-full max-w-full w-auto h-auto',
179
+ 'aspect-video max-bs-full max-is-full is-auto bs-auto',
180
180
  debug && 'border border-primary-500',
181
181
  )}
182
182
  />
@@ -2,11 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { useEffect, useState, type CSSProperties, type PropsWithChildren } from 'react';
5
+ import React, { type CSSProperties, type PropsWithChildren, useEffect, useState } from 'react';
6
6
 
7
- import { Icon, IconButton, useTranslation, type ThemedClassName } from '@dxos/react-ui';
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
 
@@ -76,7 +76,7 @@ export const ResponsiveGridItem = <T extends object = any>({
76
76
  return (
77
77
  <div
78
78
  className={mx(
79
- 'relative w-full h-full group',
79
+ 'relative is-full bs-full group',
80
80
  'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',
81
81
  speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',
82
82
  classNames,
@@ -106,7 +106,10 @@ export const ResponsiveGridItem = <T extends object = any>({
106
106
  {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}
107
107
  {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
108
108
  <div
109
- className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}
109
+ className={mx(
110
+ 'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',
111
+ pinned ? 'pli-2' : 'pli-1 text-xs',
112
+ )}
110
113
  >
111
114
  {name}
112
115
  </div>
@@ -0,0 +1,193 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { useAtomValue } from '@effect-atom/atom-react';
6
+ import React, { useCallback, useMemo } from 'react';
7
+
8
+ import { Common } from '@dxos/app-framework';
9
+ import { useCapabilities, useCapability, useOperationInvoker } from '@dxos/app-framework/react';
10
+ import { Filter, Obj, Query, Relation } from '@dxos/echo';
11
+ import { Ref, useQuery } from '@dxos/react-client/echo';
12
+ import { useIdentity } from '@dxos/react-client/halo';
13
+ import { useTranslation } from '@dxos/react-ui';
14
+ import { useAttended } from '@dxos/react-ui-attention';
15
+ import { Layout } from '@dxos/react-ui-mosaic';
16
+ import { Tabs } from '@dxos/react-ui-tabs';
17
+ import { AnchoredTo, Thread } from '@dxos/types';
18
+ import { mx } from '@dxos/ui-theme';
19
+
20
+ import { CommentsContainer, type CommentsContainerProps } from '../components';
21
+ import { meta } from '../meta';
22
+ import { ThreadCapabilities, ThreadOperation, type ViewState } from '../types';
23
+
24
+ const initialViewState: ViewState = { showResolvedThreads: false };
25
+
26
+ export const ThreadCompanion = ({ subject }: { subject: any }) => {
27
+ const { t } = useTranslation(meta.id);
28
+ const { invokePromise } = useOperationInvoker();
29
+ const identity = useIdentity();
30
+ const subjectId = Obj.getDXN(subject).toString();
31
+ const registry = useCapability(Common.Capability.AtomRegistry);
32
+
33
+ const stateAtom = useCapability(ThreadCapabilities.State);
34
+ const viewStoreAtom = useCapability(ThreadCapabilities.ViewState);
35
+ const state = useAtomValue(stateAtom);
36
+ const viewStore = useAtomValue(viewStoreAtom);
37
+ const drafts = state.drafts[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]);
47
+ const { showResolvedThreads } = viewState;
48
+
49
+ const onChangeViewState = useCallback(
50
+ (nextValue: string) => {
51
+ registry.set(viewStoreAtom, {
52
+ ...registry.get(viewStoreAtom),
53
+ [subjectId]: { ...registry.get(viewStoreAtom)[subjectId], showResolvedThreads: nextValue === 'all' },
54
+ });
55
+ },
56
+ [registry, viewStoreAtom, subjectId],
57
+ );
58
+
59
+ const anchorSorts = useCapabilities(Common.Capability.AnchorSort);
60
+ const sort = useMemo(
61
+ () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
62
+ [anchorSorts, subject],
63
+ );
64
+
65
+ const db = Obj.getDatabase(subject);
66
+ const objectsAnchoredTo = useQuery(db, Query.select(Filter.id(subject.id)).targetOf(AnchoredTo.AnchoredTo));
67
+ const anchors = objectsAnchoredTo
68
+ .toSorted((a, b) => sort?.(a, b) ?? 0)
69
+ .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
70
+ .concat(drafts ?? []);
71
+
72
+ const attended = useAttended();
73
+
74
+ const handleAttend = useCallback(
75
+ (anchor: AnchoredTo.AnchoredTo) => {
76
+ const thread = Relation.getSource(anchor) as Thread.Thread;
77
+ const threadId = Obj.getDXN(thread).toString();
78
+
79
+ if (state.current !== threadId) {
80
+ registry.set(stateAtom, { ...registry.get(stateAtom), current: threadId });
81
+
82
+ // TODO(wittjosiah): Should this be a thread-specific intent?
83
+ // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.
84
+ // This may be overloading this intent or highjacking its intended purpose.
85
+ void invokePromise(Common.LayoutOperation.ScrollIntoView, {
86
+ subject: Obj.getDXN(subject).toString(),
87
+ cursor: anchor.anchor,
88
+ ref: threadId,
89
+ });
90
+ }
91
+ },
92
+ [state.current, invokePromise, subject, registry, stateAtom],
93
+ );
94
+
95
+ const handleComment = useCallback(
96
+ async (anchor: AnchoredTo.AnchoredTo, text: string) => {
97
+ await invokePromise(ThreadOperation.AddMessage, {
98
+ anchor,
99
+ subject,
100
+ sender: { identityDid: identity?.did },
101
+ text,
102
+ });
103
+
104
+ const thread = Relation.getSource(anchor) as Thread.Thread;
105
+ registry.set(stateAtom, { ...registry.get(stateAtom), current: Obj.getDXN(thread).toString() });
106
+ },
107
+ [invokePromise, identity, subject, registry, stateAtom],
108
+ );
109
+
110
+ const handleResolve = useCallback(
111
+ (anchor: AnchoredTo.AnchoredTo) =>
112
+ invokePromise(ThreadOperation.ToggleResolved, {
113
+ thread: Relation.getSource(anchor) as Thread.Thread,
114
+ }),
115
+ [invokePromise],
116
+ );
117
+
118
+ const handleThreadDelete = useCallback(
119
+ (anchor: AnchoredTo.AnchoredTo) => invokePromise(ThreadOperation.Delete, { anchor, subject }),
120
+ [invokePromise, subject],
121
+ );
122
+
123
+ const handleMessageDelete = useCallback(
124
+ (anchor: AnchoredTo.AnchoredTo, messageId: string) =>
125
+ invokePromise(ThreadOperation.DeleteMessage, {
126
+ anchor,
127
+ subject,
128
+ messageId,
129
+ }),
130
+ [invokePromise, subject],
131
+ );
132
+
133
+ const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
134
+ async (anchor, messageId) => {
135
+ const thread = Relation.getSource(anchor) as Thread.Thread;
136
+ const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
137
+ const message = thread.messages[messageIndex]?.target;
138
+ const proposal = message?.blocks.find((block) => block._tag === 'proposal');
139
+ if (!proposal || !anchor.anchor) {
140
+ return;
141
+ }
142
+
143
+ await invokePromise(Common.CollaborationOperation.AcceptProposal, {
144
+ subject,
145
+ anchor: anchor.anchor,
146
+ proposal,
147
+ });
148
+ await invokePromise(ThreadOperation.ToggleResolved, { thread });
149
+ },
150
+ [invokePromise, subject],
151
+ );
152
+
153
+ const comments = (
154
+ <CommentsContainer
155
+ anchors={anchors}
156
+ currentId={attended.includes(subjectId) ? state.current : undefined}
157
+ showResolvedThreads={showResolvedThreads}
158
+ onAttend={handleAttend}
159
+ onComment={handleComment}
160
+ onResolve={handleResolve}
161
+ onMessageDelete={handleMessageDelete}
162
+ onThreadDelete={handleThreadDelete}
163
+ onAcceptProposal={handleAcceptProposal}
164
+ />
165
+ );
166
+
167
+ return (
168
+ <Layout.Main toolbar>
169
+ <Tabs.Root
170
+ value={showResolvedThreads ? 'all' : 'unresolved'}
171
+ orientation='horizontal'
172
+ classNames={[
173
+ 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin',
174
+ ]}
175
+ onValueChange={onChangeViewState}
176
+ >
177
+ {/* TODO(burdon): Standardize (like Tollbar). */}
178
+ <Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
179
+ <Tabs.Tab value='unresolved' classNames='text-sm'>
180
+ {t('show unresolved label')}
181
+ </Tabs.Tab>
182
+ <Tabs.Tab value='all' classNames='text-sm'>
183
+ {t('show all label')}
184
+ </Tabs.Tab>
185
+ </Tabs.Tablist>
186
+ <div className='overflow-y-auto'>
187
+ <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
188
+ <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
189
+ </div>
190
+ </Tabs.Root>
191
+ </Layout.Main>
192
+ );
193
+ };
@@ -4,14 +4,18 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- // import { useTranslation } from '@dxos/react-ui';
8
- import { DeprecatedFormContainer } from '@dxos/react-ui-form';
7
+ import { useTranslation } from '@dxos/react-ui';
8
+ import { ControlPage } from '@dxos/react-ui-form';
9
9
 
10
- // import { meta } from '../meta';
10
+ import { meta } from '../meta';
11
11
  import type { ThreadSettingsProps } from '../types';
12
12
 
13
- export const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {
14
- // const { t } = useTranslation(meta.id);
13
+ export type ThreadSettingsComponentProps = {
14
+ settings: ThreadSettingsProps;
15
+ onSettingsChange: (fn: (current: ThreadSettingsProps) => ThreadSettingsProps) => void;
16
+ };
15
17
 
16
- return <DeprecatedFormContainer></DeprecatedFormContainer>;
18
+ export const ThreadSettings = ({ settings: _settings }: ThreadSettingsComponentProps) => {
19
+ const { t: _t } = useTranslation(meta.id);
20
+ return <ControlPage></ControlPage>;
17
21
  };
@@ -2,11 +2,11 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';
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
@@ -27,7 +27,10 @@ const parser = StreamLanguage.define<{ count: number }>({
27
27
  });
28
28
 
29
29
  const styles = HighlightStyle.define([
30
- { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },
30
+ {
31
+ tag: tags.tagName,
32
+ class: mx('dx-tag dx-tag--indigo text-baseText font-medium'),
33
+ },
31
34
  ]);
32
35
 
33
36
  export const command: Extension = [parser, syntaxHighlighting(styles)];
@@ -2,17 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
6
-
7
- export const ChannelContainer = lazy(() => import('./ChannelContainer'));
8
- export const ChatContainer = lazy(() => import('./ChatContainer'));
9
-
10
- // TODO(wittjosiah): Suspense boundary for sidebar?
11
5
  export * from './Call';
12
6
  export * from './CallDebugPanel';
13
7
  export * from './CallSidebar';
14
8
  export * from './CommentsContainer';
15
9
  export * from './CommentsThreadContainer';
16
10
  export * from './MessageContainer';
17
- export * from './ThreadComplementary';
11
+ export * from './ThreadCompanion';
18
12
  export * from './ThreadSettings';
13
+
14
+ export { ChannelContainer } from './ChannelContainer';
15
+ export { ChatContainer } from './ChatContainer';
@@ -6,16 +6,15 @@ 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 { DataType } from '@dxos/schema';
9
+ import { Message, Thread } from '@dxos/types';
10
10
 
11
- import { ThreadType } from '../types';
12
-
13
- export const createCommentThread = (identity: Identity): ThreadType => {
14
- return Obj.make(ThreadType, {
11
+ export const createCommentThread = (identity: Identity): Thread.Thread => {
12
+ return Thread.make({
13
+ name: 'Comment',
15
14
  messages: faker.helpers.multiple(
16
15
  () =>
17
16
  Ref.make(
18
- Obj.make(DataType.Message, {
17
+ Obj.make(Message.Message, {
19
18
  created: new Date().toISOString(),
20
19
  sender: {
21
20
  identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
@@ -25,5 +24,26 @@ export const createCommentThread = (identity: Identity): ThreadType => {
25
24
  ),
26
25
  { count: { min: 2, max: 3 } },
27
26
  ),
27
+ status: 'active',
28
+ });
29
+ };
30
+
31
+ export const createProposalThread = (identity: Identity): Thread.Thread => {
32
+ return Thread.make({
33
+ name: 'Proposal',
34
+ messages: faker.helpers.multiple(
35
+ () =>
36
+ Ref.make(
37
+ Obj.make(Message.Message, {
38
+ created: new Date().toISOString(),
39
+ sender: {
40
+ identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
41
+ },
42
+ blocks: [{ _tag: 'proposal', text: faker.lorem.sentences(3) }],
43
+ }),
44
+ ),
45
+ { count: { min: 1, max: 1 } },
46
+ ),
47
+ status: 'active',
28
48
  });
29
49
  };
@@ -4,16 +4,16 @@
4
4
 
5
5
  import { type Extension } from '@codemirror/state';
6
6
  import { EditorView } from '@codemirror/view';
7
- import { computed, effect } from '@preact/signals-core';
7
+ import { type Atom, type Registry } from '@effect-atom/atom-react';
8
8
 
9
- import { createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';
10
9
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
10
+ import { createDocAccessor, getTextInRange } from '@dxos/echo-db';
11
+ import { type OperationInvoker } from '@dxos/operation';
11
12
  import { type Markdown } from '@dxos/plugin-markdown/types';
12
- import { getSpace, getTextInRange, createDocAccessor, fullyQualifiedId, getSource } from '@dxos/react-client/echo';
13
- import { comments, createExternalCommentSync } from '@dxos/react-ui-editor';
14
- import { AnchoredTo } from '@dxos/schema';
13
+ import { AnchoredTo, Thread } from '@dxos/types';
14
+ import { comments, createExternalCommentSync } from '@dxos/ui-editor';
15
15
 
16
- import { ThreadAction, ThreadType, type ThreadState } from '../types';
16
+ import { ThreadOperation, type ThreadState } from '../types';
17
17
 
18
18
  // TODO(burdon): Factor out.
19
19
  const getName = (doc: Markdown.Document, anchor: string): string | undefined => {
@@ -23,46 +23,58 @@ const getName = (doc: Markdown.Document, anchor: string): string | undefined =>
23
23
  }
24
24
  };
25
25
 
26
+ export type ThreadStore = {
27
+ registry: Registry.Registry;
28
+ stateAtom: Atom.Writable<ThreadState>;
29
+ };
30
+
26
31
  /**
27
32
  * Construct plugins.
28
33
  */
29
- export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?: PromiseIntentDispatcher): Extension => {
30
- const space = doc && getSpace(doc);
31
- if (!doc || !space || !dispatch) {
34
+ export const threads = (
35
+ store: ThreadStore,
36
+ doc?: Markdown.Document,
37
+ invokePromise?: OperationInvoker.OperationInvoker['invokePromise'],
38
+ ): Extension => {
39
+ const db = doc && Obj.getDatabase(doc);
40
+ if (!doc || !db || !invokePromise) {
32
41
  // Include no-op comments extension here to ensure that the facets are always present when they are expected.
33
42
  // TODO(wittjosiah): The Editor should only look for these facets when comments are available.
34
43
  return [comments()];
35
44
  }
36
45
 
37
- const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));
38
- const unsubscribe = query.subscribe();
46
+ const { registry, stateAtom } = store;
47
+ const objectId = Obj.getDXN(doc).toString();
48
+ const query = db.query(Query.select(Filter.id(doc.id)).targetOf(AnchoredTo.AnchoredTo));
39
49
 
40
- const anchors = computed(() =>
41
- query.objects
50
+ // Get current anchors by combining query results with store drafts.
51
+ const getAnchors = () =>
52
+ query.results
42
53
  .filter((anchor) => {
43
54
  const thread = Relation.getSource(anchor);
44
- return Obj.instanceOf(ThreadType, thread) && thread.status !== 'resolved';
55
+ return Obj.instanceOf(Thread.Thread, thread) && thread.status !== 'resolved';
45
56
  })
46
- .concat(state.drafts[fullyQualifiedId(doc)] ?? []),
47
- );
57
+ .concat(registry.get(stateAtom).drafts[objectId] ?? []);
48
58
 
49
59
  return [
50
60
  EditorView.domEventHandlers({
51
61
  destroy: () => {
52
- unsubscribe();
62
+ // Note: cleanup functions for subscriptions are handled by createExternalCommentSync.
53
63
  },
54
64
  }),
55
65
 
56
66
  EditorView.updateListener.of((update) => {
57
67
  if (update.docChanged) {
58
- anchors.value.forEach((anchor) => {
68
+ getAnchors().forEach((anchor) => {
59
69
  if (anchor.anchor) {
60
70
  // Only update if the name has changed, otherwise this will cause an infinite loop.
61
71
  // Skip if the name is empty; this means comment text was deleted, but thread name should remain.
62
72
  const name = getName(doc, anchor.anchor);
63
- const thread = Relation.getSource(anchor) as ThreadType;
73
+ const thread = Relation.getSource(anchor) as Thread.Thread;
64
74
  if (name && name !== thread.name) {
65
- thread.name = name;
75
+ Obj.change(thread, (t) => {
76
+ t.name = name;
77
+ });
66
78
  }
67
79
  }
68
80
  });
@@ -70,55 +82,87 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
70
82
  }),
71
83
 
72
84
  createExternalCommentSync(
73
- fullyQualifiedId(doc),
74
- (sink) => effect(() => sink()),
85
+ objectId,
86
+ (sink) => {
87
+ // Subscribe to both query changes and store state changes.
88
+ const unsubQuery = query.subscribe(sink);
89
+ const unsubStore = registry.subscribe(stateAtom, sink);
90
+ return () => {
91
+ unsubQuery();
92
+ unsubStore();
93
+ };
94
+ },
75
95
  () =>
76
- anchors.value
96
+ getAnchors()
77
97
  .filter((anchor) => anchor.anchor)
78
- .map((anchor) => ({ id: fullyQualifiedId(Relation.getSource(anchor)), cursor: anchor.anchor })),
98
+ .map((anchor) => ({
99
+ id: Obj.getDXN(Relation.getSource(anchor)).toString(),
100
+ cursor: anchor.anchor,
101
+ })),
79
102
  ),
80
103
 
81
104
  comments({
82
- id: fullyQualifiedId(doc),
105
+ id: objectId,
83
106
  onCreate: ({ cursor }) => {
84
107
  const name = getName(doc, cursor);
85
- void dispatch(createIntent(ThreadAction.Create, { anchor: cursor, name, subject: doc }));
108
+ void invokePromise(ThreadOperation.Create, {
109
+ anchor: cursor,
110
+ name,
111
+ subject: doc,
112
+ });
86
113
  },
87
114
  onDelete: ({ id }) => {
88
- const draft = state.drafts[fullyQualifiedId(doc)];
89
- if (draft) {
90
- const index = draft.findIndex((thread) => fullyQualifiedId(thread) === id);
115
+ const drafts = registry.get(stateAtom).drafts[objectId];
116
+ if (drafts) {
117
+ const index = drafts.findIndex((draft) => Relation.getDXN(draft).toString() === id);
91
118
  if (index !== -1) {
92
- draft.splice(index, 1);
119
+ const current = registry.get(stateAtom);
120
+ registry.set(stateAtom, {
121
+ ...current,
122
+ drafts: {
123
+ ...current.drafts,
124
+ [objectId]: current.drafts[objectId]?.filter((_, i) => i !== index),
125
+ },
126
+ });
93
127
  }
94
128
  }
95
129
 
96
- const thread = query.objects.find((object) => getSource(object).id === id);
130
+ const thread = query.results.find((object) => Relation.getSource(object).id === id);
97
131
  if (thread) {
98
- thread.anchor = undefined;
132
+ Relation.change(thread, (t) => {
133
+ t.anchor = undefined;
134
+ });
99
135
  }
100
136
  },
101
137
  onUpdate: ({ id, cursor }) => {
102
- const draft = state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id);
138
+ const draft = registry.get(stateAtom).drafts[objectId]?.find((d) => Relation.getDXN(d).toString() === id);
103
139
  if (draft) {
104
- const thread = Relation.getSource(draft) as ThreadType;
105
- thread.name = getName(doc, cursor);
106
- draft.anchor = cursor;
140
+ const thread = Relation.getSource(draft) as Thread.Thread;
141
+ Obj.change(thread, (t) => {
142
+ t.name = getName(doc, cursor);
143
+ });
144
+ Relation.change(draft, (d) => {
145
+ d.anchor = cursor;
146
+ });
107
147
  }
108
148
 
109
- const relation = query.objects.find((object) => getSource(object).id === id);
149
+ const relation = query.results.find((object) => Relation.getSource(object).id === id);
110
150
  if (relation) {
111
- const thread = getSource(relation);
112
- if (Obj.instanceOf(ThreadType, thread)) {
113
- thread.name = getName(doc, cursor);
114
- relation.anchor = cursor;
151
+ const thread = Relation.getSource(relation);
152
+ if (Obj.instanceOf(Thread.Thread, thread)) {
153
+ Obj.change(thread, (t) => {
154
+ t.name = getName(doc, cursor);
155
+ });
156
+ Relation.change(relation, (r) => {
157
+ r.anchor = cursor;
158
+ });
115
159
  }
116
160
  }
117
161
  },
118
162
  onSelect: ({ selection }) => {
119
163
  const current = selection.current ?? selection.closest;
120
164
  if (current) {
121
- void dispatch(createIntent(ThreadAction.Select, { current }));
165
+ void invokePromise(ThreadOperation.Select, { current });
122
166
  }
123
167
  },
124
168
  }),