@dxos/plugin-thread 0.8.4-main.fcfe5033a5 → 0.8.4-staging.60fe92afc8

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 (522) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +75 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs +57 -0
  5. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs.map +7 -0
  6. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs +38 -0
  7. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs.map +7 -0
  8. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs +57 -0
  9. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs.map +7 -0
  10. package/dist/lib/neutral/ThreadPlugin.mjs +67 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  12. package/dist/lib/neutral/ThreadPlugin.node.mjs +29 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  14. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +27 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  16. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs +50 -0
  17. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs.map +7 -0
  18. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs +34 -0
  19. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs +58 -0
  23. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-AWAQTEU6.mjs +10 -0
  25. package/dist/lib/neutral/chunk-AWAQTEU6.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-HJHK5O6F.mjs +109 -0
  27. package/dist/lib/neutral/chunk-HJHK5O6F.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs +36 -0
  29. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-P4RSGFS4.mjs +69 -0
  31. package/dist/lib/neutral/chunk-P4RSGFS4.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-SZXFLBZL.mjs +8 -0
  33. package/dist/lib/neutral/chunk-SZXFLBZL.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +93 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/containers/index.mjs +13 -0
  37. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  38. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs +41 -0
  39. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs.map +7 -0
  40. package/dist/lib/neutral/create-object-RLCOUVAW.mjs +46 -0
  41. package/dist/lib/neutral/create-object-RLCOUVAW.mjs.map +7 -0
  42. package/dist/lib/neutral/hooks/index.mjs +11 -0
  43. package/dist/lib/neutral/index.mjs +34 -0
  44. package/dist/lib/neutral/meta.json +1 -0
  45. package/dist/lib/neutral/meta.mjs +10 -0
  46. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs +14 -0
  47. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs.map +7 -0
  48. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  49. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  50. package/dist/lib/neutral/operations/index.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  52. package/dist/lib/neutral/plugin.mjs +16 -0
  53. package/dist/lib/neutral/plugin.mjs.map +7 -0
  54. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs +48 -0
  55. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +91 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +16 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/ThreadPlugin.d.ts +1 -0
  61. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  62. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  63. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  65. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  67. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/channel-backend-feed.d.ts +13 -0
  71. package/dist/types/src/capabilities/channel-backend-feed.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  73. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/index.d.ts +8 -10
  75. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/navigation-resolver.d.ts +6 -0
  77. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  79. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/Chat/Chat.d.ts +43 -0
  82. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat/index.d.ts +2 -0
  84. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  85. package/dist/types/src/components/index.d.ts +1 -5
  86. package/dist/types/src/components/index.d.ts.map +1 -1
  87. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +19 -0
  88. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  89. package/dist/types/src/{components/CommentsPanel/CommentsPanel.stories.d.ts → containers/ChannelArticle/ChannelArticle.stories.d.ts} +74 -72
  90. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  91. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  92. package/dist/types/src/{components/ThreadSettings → containers/ChannelArticle}/index.d.ts.map +1 -1
  93. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts +11 -0
  94. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts.map +1 -0
  95. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts +2 -0
  96. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts.map +1 -0
  97. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts +20 -0
  98. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts.map +1 -0
  99. package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadArticle/ThreadArticle.stories.d.ts} +71 -71
  100. package/dist/types/src/containers/ThreadArticle/ThreadArticle.stories.d.ts.map +1 -0
  101. package/dist/types/src/containers/ThreadArticle/index.d.ts +2 -0
  102. package/dist/types/src/containers/ThreadArticle/index.d.ts.map +1 -0
  103. package/dist/types/src/containers/index.d.ts +3 -5
  104. package/dist/types/src/containers/index.d.ts.map +1 -1
  105. package/dist/types/src/hooks/index.d.ts +1 -5
  106. package/dist/types/src/hooks/index.d.ts.map +1 -1
  107. package/dist/types/src/hooks/useMessages.d.ts +4 -0
  108. package/dist/types/src/hooks/useMessages.d.ts.map +1 -0
  109. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  110. package/dist/types/src/index.d.ts +2 -3
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +1 -1
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  115. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  116. package/dist/types/src/operations/create-channel.d.ts +3 -3
  117. package/dist/types/src/operations/create-channel.d.ts.map +1 -1
  118. package/dist/types/src/operations/index.d.ts +1 -2
  119. package/dist/types/src/operations/index.d.ts.map +1 -1
  120. package/dist/types/src/paths.d.ts +3 -0
  121. package/dist/types/src/paths.d.ts.map +1 -0
  122. package/dist/types/src/plugin.d.ts +4 -0
  123. package/dist/types/src/plugin.d.ts.map +1 -0
  124. package/dist/types/src/translations.d.ts +70 -70
  125. package/dist/types/src/translations.d.ts.map +1 -1
  126. package/dist/types/src/types/ThreadCapabilities.d.ts +37 -0
  127. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  128. package/dist/types/src/types/ThreadOperation.d.ts +91 -0
  129. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  130. package/dist/types/src/types/channel-backend.d.ts +16 -0
  131. package/dist/types/src/types/channel-backend.d.ts.map +1 -0
  132. package/dist/types/src/types/channel-backend.test.d.ts +2 -0
  133. package/dist/types/src/types/channel-backend.test.d.ts.map +1 -0
  134. package/dist/types/src/types/index.d.ts +3 -3
  135. package/dist/types/src/types/index.d.ts.map +1 -1
  136. package/dist/types/src/util.d.ts +4 -20
  137. package/dist/types/src/util.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +96 -114
  140. package/src/ThreadPlugin.node.ts +26 -0
  141. package/src/ThreadPlugin.test.ts +27 -0
  142. package/src/ThreadPlugin.tsx +23 -105
  143. package/src/ThreadPlugin.workerd.ts +25 -0
  144. package/src/capabilities/app-graph-builder.ts +25 -167
  145. package/src/capabilities/channel-backend-feed.ts +60 -0
  146. package/src/capabilities/create-object.ts +46 -0
  147. package/src/capabilities/index.ts +4 -8
  148. package/src/capabilities/navigation-resolver.ts +18 -0
  149. package/src/capabilities/operation-handler.ts +1 -1
  150. package/src/capabilities/react-surface.tsx +8 -50
  151. package/src/components/Chat/Chat.tsx +119 -0
  152. package/src/components/Chat/index.ts +5 -0
  153. package/src/components/index.ts +1 -7
  154. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +108 -0
  155. package/src/containers/ChannelArticle/ChannelArticle.tsx +83 -0
  156. package/src/containers/ChannelArticle/index.ts +5 -0
  157. package/src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx +52 -0
  158. package/src/containers/ChannelCreatePanel/index.ts +5 -0
  159. package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadArticle/ThreadArticle.stories.tsx} +11 -12
  160. package/src/containers/ThreadArticle/ThreadArticle.tsx +75 -0
  161. package/src/containers/ThreadArticle/index.ts +5 -0
  162. package/src/containers/index.ts +3 -5
  163. package/src/hooks/index.ts +1 -6
  164. package/src/hooks/useMessages.ts +37 -0
  165. package/src/index.ts +4 -4
  166. package/src/meta.ts +22 -8
  167. package/src/operations/append-channel-message.ts +31 -0
  168. package/src/operations/create-channel.ts +18 -8
  169. package/src/operations/index.ts +2 -14
  170. package/src/paths.ts +10 -0
  171. package/src/plugin.ts +11 -0
  172. package/src/translations.ts +2 -1
  173. package/src/types/ThreadCapabilities.ts +47 -0
  174. package/src/types/ThreadOperation.ts +49 -0
  175. package/src/types/channel-backend.test.ts +48 -0
  176. package/src/types/channel-backend.ts +54 -0
  177. package/src/types/index.ts +3 -3
  178. package/src/util.ts +35 -18
  179. package/src/vite-env.d.ts +10 -0
  180. package/dist/lib/browser/add-message-VPPFFLFL.mjs +0 -97
  181. package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
  182. package/dist/lib/browser/blueprints/index.mjs +0 -37
  183. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
  185. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
  187. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
  188. package/dist/lib/browser/create-OQKG4S47.mjs +0 -55
  189. package/dist/lib/browser/create-OQKG4S47.mjs.map +0 -7
  190. package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
  191. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
  192. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
  193. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
  194. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs +0 -57
  195. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
  196. package/dist/lib/browser/delete-FSFVU6ZA.mjs +0 -59
  197. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
  198. package/dist/lib/browser/delete-message-XL5M5J33.mjs +0 -64
  199. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
  200. package/dist/lib/browser/index.mjs +0 -2334
  201. package/dist/lib/browser/index.mjs.map +0 -7
  202. package/dist/lib/browser/meta.json +0 -1
  203. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
  204. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
  205. package/dist/lib/browser/operations/index.mjs +0 -14
  206. package/dist/lib/browser/operations/index.mjs.map +0 -7
  207. package/dist/lib/browser/restore-2ZGMKUSD.mjs +0 -33
  208. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
  209. package/dist/lib/browser/restore-message-OYEGWPII.mjs +0 -42
  210. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
  211. package/dist/lib/browser/select-VG2XLULE.mjs +0 -26
  212. package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
  213. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs +0 -45
  214. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
  215. package/dist/lib/browser/types/index.mjs +0 -12
  216. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
  217. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
  218. package/dist/lib/node-esm/blueprints/index.mjs +0 -38
  219. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  221. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
  222. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
  224. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
  225. package/dist/lib/node-esm/create-6ZOFMMYA.mjs +0 -56
  226. package/dist/lib/node-esm/create-6ZOFMMYA.mjs.map +0 -7
  227. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
  228. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
  229. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
  230. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
  231. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
  232. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
  233. package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
  234. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
  235. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
  236. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
  237. package/dist/lib/node-esm/index.mjs +0 -2335
  238. package/dist/lib/node-esm/index.mjs.map +0 -7
  239. package/dist/lib/node-esm/meta.json +0 -1
  240. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
  241. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
  242. package/dist/lib/node-esm/operations/index.mjs +0 -15
  243. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  244. package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
  245. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
  246. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
  247. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
  248. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
  249. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
  250. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
  251. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
  252. package/dist/lib/node-esm/types/index.mjs +0 -13
  253. package/dist/types/src/blueprints/index.d.ts +0 -2
  254. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  255. package/dist/types/src/blueprints/thread-blueprint.d.ts +0 -4
  256. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +0 -1
  257. package/dist/types/src/calls/call-manager.d.ts +0 -87
  258. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  259. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  260. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  261. package/dist/types/src/calls/index.d.ts +0 -7
  262. package/dist/types/src/calls/index.d.ts.map +0 -1
  263. package/dist/types/src/calls/media-manager.d.ts +0 -60
  264. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  265. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  266. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  267. package/dist/types/src/calls/types.d.ts +0 -45
  268. package/dist/types/src/calls/types.d.ts.map +0 -1
  269. package/dist/types/src/calls/util/audio.d.ts +0 -6
  270. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  271. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  272. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  273. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  274. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  275. package/dist/types/src/calls/util/index.d.ts +0 -5
  276. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  277. package/dist/types/src/calls/util/media.d.ts +0 -6
  278. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  279. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  280. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  281. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  282. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  283. package/dist/types/src/calls-service.stories.d.ts +0 -23
  284. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  286. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/call-manager.d.ts +0 -6
  288. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/markdown.d.ts +0 -5
  290. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/react-root.d.ts +0 -9
  292. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/settings.d.ts +0 -7
  294. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/state.d.ts +0 -7
  296. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/undo-mappings.d.ts +0 -5
  298. package/dist/types/src/capabilities/undo-mappings.d.ts.map +0 -1
  299. package/dist/types/src/components/Call/Call.d.ts +0 -17
  300. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  301. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  302. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  303. package/dist/types/src/components/Call/index.d.ts +0 -3
  304. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  305. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +0 -13
  306. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +0 -1
  307. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +0 -1
  308. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +0 -14
  309. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +0 -1
  310. package/dist/types/src/components/CommentsPanel/index.d.ts +0 -3
  311. package/dist/types/src/components/CommentsPanel/index.d.ts.map +0 -1
  312. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  313. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  314. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  315. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  316. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  317. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  318. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  319. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  320. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  321. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  322. package/dist/types/src/components/Media/index.d.ts +0 -3
  323. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  324. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +0 -15
  325. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +0 -1
  326. package/dist/types/src/components/MessagePanel/index.d.ts +0 -2
  327. package/dist/types/src/components/MessagePanel/index.d.ts.map +0 -1
  328. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  329. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  330. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  331. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  332. package/dist/types/src/components/Participant/index.d.ts +0 -3
  333. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  334. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  335. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  336. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
  337. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  338. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  339. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  340. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
  341. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
  342. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
  343. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  345. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  346. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +0 -6
  347. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +0 -1
  348. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +0 -161
  349. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +0 -1
  350. package/dist/types/src/components/ThreadSettings/index.d.ts +0 -2
  351. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
  352. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
  353. package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
  354. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +0 -1
  355. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
  356. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
  357. package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
  358. package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
  359. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
  360. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
  361. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
  362. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
  363. package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
  364. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
  365. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
  366. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  367. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
  368. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
  369. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  370. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
  371. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
  372. package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
  373. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
  374. package/dist/types/src/extensions/command.d.ts +0 -3
  375. package/dist/types/src/extensions/command.d.ts.map +0 -1
  376. package/dist/types/src/extensions/index.d.ts +0 -3
  377. package/dist/types/src/extensions/index.d.ts.map +0 -1
  378. package/dist/types/src/extensions/threads.d.ts +0 -14
  379. package/dist/types/src/extensions/threads.d.ts.map +0 -1
  380. package/dist/types/src/hooks/analytics.d.ts +0 -3
  381. package/dist/types/src/hooks/analytics.d.ts.map +0 -1
  382. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  383. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  385. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  386. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  387. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  388. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  389. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  390. package/dist/types/src/operations/add-message.d.ts +0 -5
  391. package/dist/types/src/operations/add-message.d.ts.map +0 -1
  392. package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
  393. package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
  394. package/dist/types/src/operations/create-proposals.d.ts +0 -5
  395. package/dist/types/src/operations/create-proposals.d.ts.map +0 -1
  396. package/dist/types/src/operations/create.d.ts +0 -5
  397. package/dist/types/src/operations/create.d.ts.map +0 -1
  398. package/dist/types/src/operations/definitions.d.ts +0 -2804
  399. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  400. package/dist/types/src/operations/delete-message.d.ts +0 -5
  401. package/dist/types/src/operations/delete-message.d.ts.map +0 -1
  402. package/dist/types/src/operations/delete.d.ts +0 -5
  403. package/dist/types/src/operations/delete.d.ts.map +0 -1
  404. package/dist/types/src/operations/on-create-space.d.ts +0 -5
  405. package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
  406. package/dist/types/src/operations/restore-message.d.ts +0 -5
  407. package/dist/types/src/operations/restore-message.d.ts.map +0 -1
  408. package/dist/types/src/operations/restore.d.ts +0 -5
  409. package/dist/types/src/operations/restore.d.ts.map +0 -1
  410. package/dist/types/src/operations/select.d.ts +0 -5
  411. package/dist/types/src/operations/select.d.ts.map +0 -1
  412. package/dist/types/src/operations/toggle-resolved.d.ts +0 -5
  413. package/dist/types/src/operations/toggle-resolved.d.ts.map +0 -1
  414. package/dist/types/src/testing/data.d.ts +0 -5
  415. package/dist/types/src/testing/data.d.ts.map +0 -1
  416. package/dist/types/src/testing/index.d.ts +0 -2
  417. package/dist/types/src/testing/index.d.ts.map +0 -1
  418. package/dist/types/src/testing/stories.d.ts +0 -3
  419. package/dist/types/src/testing/stories.d.ts.map +0 -1
  420. package/dist/types/src/types/Channel.d.ts +0 -715
  421. package/dist/types/src/types/Channel.d.ts.map +0 -1
  422. package/dist/types/src/types/Settings.d.ts +0 -5
  423. package/dist/types/src/types/Settings.d.ts.map +0 -1
  424. package/dist/types/src/types/capabilities.d.ts +0 -24
  425. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/types/types.d.ts +0 -18
  427. package/dist/types/src/types/types.d.ts.map +0 -1
  428. package/src/blueprints/index.ts +0 -5
  429. package/src/blueprints/thread-blueprint.ts +0 -37
  430. package/src/calls/call-manager.ts +0 -270
  431. package/src/calls/call-swarm-synchronizer.ts +0 -350
  432. package/src/calls/index.ts +0 -10
  433. package/src/calls/media-manager.ts +0 -378
  434. package/src/calls/speaking-monitor.ts +0 -85
  435. package/src/calls/types.ts +0 -74
  436. package/src/calls/util/audio.ts +0 -58
  437. package/src/calls/util/calls-service.ts +0 -580
  438. package/src/calls/util/history-cache.ts +0 -27
  439. package/src/calls/util/index.ts +0 -8
  440. package/src/calls/util/media.ts +0 -52
  441. package/src/calls/util/stub-media-streams.ts +0 -127
  442. package/src/calls/util/task-scheduling.ts +0 -92
  443. package/src/calls-service.stories.tsx +0 -230
  444. package/src/capabilities/blueprint-definition.ts +0 -17
  445. package/src/capabilities/call-manager.ts +0 -27
  446. package/src/capabilities/markdown.ts +0 -82
  447. package/src/capabilities/react-root.tsx +0 -20
  448. package/src/capabilities/settings.ts +0 -35
  449. package/src/capabilities/state.ts +0 -22
  450. package/src/capabilities/undo-mappings.ts +0 -46
  451. package/src/components/Call/Call.tsx +0 -93
  452. package/src/components/Call/Toolbar.tsx +0 -199
  453. package/src/components/Call/index.ts +0 -6
  454. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +0 -93
  455. package/src/components/CommentsPanel/CommentsPanel.tsx +0 -71
  456. package/src/components/CommentsPanel/CommentsThread.tsx +0 -172
  457. package/src/components/CommentsPanel/index.ts +0 -6
  458. package/src/components/Lobby/Lobby.tsx +0 -122
  459. package/src/components/Lobby/index.ts +0 -5
  460. package/src/components/Media/AudioStream.tsx +0 -67
  461. package/src/components/Media/VideoObject.stories.tsx +0 -59
  462. package/src/components/Media/VideoObject.tsx +0 -58
  463. package/src/components/Media/index.ts +0 -6
  464. package/src/components/MessagePanel/MessagePanel.tsx +0 -222
  465. package/src/components/MessagePanel/index.ts +0 -5
  466. package/src/components/Participant/Participant.tsx +0 -77
  467. package/src/components/Participant/ParticipantGrid.tsx +0 -88
  468. package/src/components/Participant/index.ts +0 -6
  469. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
  470. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  471. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  472. package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
  473. package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
  474. package/src/components/ResponsiveGrid/index.ts +0 -7
  475. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +0 -31
  476. package/src/components/ThreadSettings/ThreadSettings.tsx +0 -20
  477. package/src/components/ThreadSettings/index.ts +0 -5
  478. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
  479. package/src/containers/CallDebugPanel/index.ts +0 -5
  480. package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
  481. package/src/containers/CallSidebar/index.ts +0 -5
  482. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
  483. package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
  484. package/src/containers/ChannelContainer/index.ts +0 -5
  485. package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
  486. package/src/containers/ChatContainer/index.ts +0 -8
  487. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +0 -217
  488. package/src/containers/ThreadCompanion/index.ts +0 -5
  489. package/src/extensions/command.ts +0 -36
  490. package/src/extensions/index.ts +0 -6
  491. package/src/extensions/threads.ts +0 -171
  492. package/src/hooks/analytics.ts +0 -41
  493. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  494. package/src/hooks/useDebugMode.ts +0 -25
  495. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  496. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  497. package/src/operations/add-message.ts +0 -81
  498. package/src/operations/create-channel-thread.ts +0 -26
  499. package/src/operations/create-proposals.ts +0 -49
  500. package/src/operations/create.ts +0 -48
  501. package/src/operations/definitions.ts +0 -177
  502. package/src/operations/delete-message.ts +0 -53
  503. package/src/operations/delete.ts +0 -63
  504. package/src/operations/on-create-space.ts +0 -27
  505. package/src/operations/restore-message.ts +0 -38
  506. package/src/operations/restore.ts +0 -38
  507. package/src/operations/select.ts +0 -24
  508. package/src/operations/toggle-resolved.ts +0 -41
  509. package/src/testing/data.ts +0 -49
  510. package/src/testing/index.ts +0 -5
  511. package/src/testing/stories.ts +0 -51
  512. package/src/types/Channel.ts +0 -37
  513. package/src/types/Settings.ts +0 -10
  514. package/src/types/capabilities.ts +0 -36
  515. package/src/types/types.ts +0 -24
  516. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  517. package/src/typings.d.ts +0 -8
  518. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  519. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  520. /package/dist/lib/{browser/types → neutral/hooks}/index.mjs.map +0 -0
  521. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  522. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -1,223 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Atom, useAtomValue } from '@effect-atom/atom-react';
6
- import React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';
7
-
8
- import { useCapabilities, useCapability } from '@dxos/app-framework/ui';
9
- import { type AppSurface } from '@dxos/app-toolkit/ui';
10
- import { Context } from '@dxos/context';
11
- import { failUndefined } from '@dxos/debug';
12
- import { log } from '@dxos/log';
13
- import { useClient } from '@dxos/react-client';
14
- import { getSpace } from '@dxos/react-client/echo';
15
- import { useIdentity } from '@dxos/react-client/halo';
16
- import { Button, ElevationProvider, Input, Panel, useTranslation } from '@dxos/react-ui';
17
- import { Settings } from '@dxos/react-ui-form';
18
- import { Menu, MenuRootProps, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
19
- import { useSoundEffect } from '@dxos/react-ui-sfx';
20
- import { composable, composableProps } from '@dxos/ui-theme';
21
-
22
- import { Call } from '#components';
23
- import { meta } from '#meta';
24
- import { ThreadCapabilities } from '#types';
25
- import { type Channel } from '#types';
26
-
27
- import { ChatContainer } from '../ChatContainer';
28
-
29
- export type ChannelContainerProps = AppSurface.ObjectArticleProps<
30
- Channel.Channel | undefined,
31
- {
32
- roomId?: string;
33
- fullscreen?: boolean;
34
- }
35
- >;
36
-
37
- /**
38
- * Renders a call when active, otherwise renders the channel chat.
39
- */
40
- // TODO(burdon): Create Radix style layout.
41
- export const ChannelContainer = ({
42
- role,
43
- subject: channel,
44
- attendableId,
45
- roomId: roomIdProp,
46
- fullscreen,
47
- }: ChannelContainerProps) => {
48
- const space = getSpace(channel);
49
- const callManager = useCapability(ThreadCapabilities.CallManager);
50
- const extensions = useCapabilities(ThreadCapabilities.CallExtension);
51
- const joined = useAtomValue(callManager.joinedAtom);
52
- const currentRoomId = useAtomValue(callManager.roomIdAtom);
53
- const roomId = roomIdProp ?? attendableId ?? failUndefined();
54
- const identity = useIdentity();
55
- const isNamed = !!identity?.profile?.displayName;
56
- const joinSound = useSoundEffect('JoinCall');
57
- const leaveSound = useSoundEffect('LeaveCall');
58
-
59
- useEffect(() => {
60
- const ctx = new Context();
61
- callManager.left.on(ctx, (roomId) => {
62
- extensions.forEach((extension) => {
63
- void extension.onLeave?.(roomId);
64
- });
65
- });
66
-
67
- callManager.callStateUpdated.on(ctx, (state) => {
68
- extensions.forEach((extension) => {
69
- void extension.onCallStateUpdated?.(state);
70
- });
71
- });
72
-
73
- callManager.mediaStateUpdated.on(ctx, (state) => {
74
- extensions.forEach((extension) => {
75
- void extension.onMediaStateUpdated?.(state);
76
- });
77
- });
78
-
79
- return () => {
80
- void ctx.dispose();
81
- };
82
- }, [callManager, extensions]);
83
-
84
- /**
85
- * Join the call.
86
- */
87
- // TODO(wittjosiah): Show preview before joining?
88
- const handleJoin = useCallback(async () => {
89
- if (!roomId || !channel) {
90
- return;
91
- }
92
-
93
- if (joined) {
94
- await callManager.leave();
95
- }
96
-
97
- try {
98
- void joinSound.play();
99
- callManager.setRoomId(roomId);
100
- await callManager.join();
101
- await Promise.all(extensions.map((extension) => extension.onJoin?.({ channel, roomId })));
102
- } catch (err) {
103
- // TODO(burdon): Error sound.
104
- log.catch(err);
105
- }
106
- }, [extensions, channel, roomId, joined]);
107
-
108
- /**
109
- * Leave the call.
110
- */
111
- const handleLeave = useCallback(async () => {
112
- try {
113
- void leaveSound.play();
114
- } catch (err) {
115
- // TODO(burdon): Error sound.
116
- log.catch(err);
117
- } finally {
118
- void callManager.turnAudioOff();
119
- void callManager.turnVideoOff();
120
- void callManager.turnScreenshareOff();
121
- void callManager.leave();
122
- }
123
- }, [extensions, roomId]);
124
-
125
- const isJoined = joined && currentRoomId === roomId;
126
- if (isJoined) {
127
- return (
128
- <Panel.Root>
129
- <Panel.Content>
130
- {isNamed ? (
131
- <Call.Root>
132
- <Call.Grid fullscreen={fullscreen} />
133
- <Call.Toolbar channel={channel} onLeave={handleLeave} />
134
- </Call.Root>
135
- ) : (
136
- <DisplayNameMissing />
137
- )}
138
- </Panel.Content>
139
- </Panel.Root>
140
- );
141
- }
142
-
143
- if (channel && channel.defaultThread.target && space) {
144
- return (
145
- <Panel.Root classNames='dx-document'>
146
- <Panel.Toolbar asChild>
147
- <ChannelToolbar attendableId={attendableId} role={role} onJoinCall={handleJoin} />
148
- </Panel.Toolbar>
149
- <Panel.Content asChild>
150
- <ChatContainer space={space} thread={channel.defaultThread.target} />
151
- </Panel.Content>
152
- </Panel.Root>
153
- );
154
- }
155
-
156
- return null;
157
- };
158
-
159
- const DisplayNameMissing = () => {
160
- const { t } = useTranslation(meta.id);
161
- const client = useClient();
162
- const [displayName, setDisplayName] = useState('');
163
- const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value), []);
164
- const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);
165
-
166
- return (
167
- <div className='space-y-trim-md p-4 place-content-center'>
168
- <Settings.Item title={t('display-name.label')} description={t('display-name.description')}>
169
- <Input.TextInput
170
- value={displayName}
171
- onChange={handleChange}
172
- placeholder={t('display-name-input.placeholder')}
173
- classNames='md:min-w-64'
174
- />
175
- </Settings.Item>
176
- <Button classNames='md:col-span-2' disabled={!displayName} onClick={handleSave}>
177
- {t('set-display-name.label')}
178
- </Button>
179
- </div>
180
- );
181
- };
182
-
183
- const useChannelToolbarActions = (onJoinCall?: () => void) => {
184
- const creator = useMemo(
185
- () =>
186
- Atom.make(() => {
187
- return {
188
- nodes: [
189
- createMenuItemGroup('root', {
190
- label: ['channel-toolbar.title', { ns: meta.id }],
191
- }),
192
- createMenuAction('video-call', () => onJoinCall?.(), {
193
- label: ['start-video-call.menu', { ns: meta.id }],
194
- icon: 'ph--video-camera--regular',
195
- type: 'video-call',
196
- }),
197
- ],
198
- edges: [{ source: 'root', target: 'video-call', relation: 'child' }],
199
- };
200
- }),
201
- [],
202
- );
203
-
204
- return useMenuActions(creator);
205
- };
206
-
207
- type ChannelToolbarProps = Pick<MenuRootProps, 'attendableId'> & {
208
- onJoinCall?: () => void;
209
- };
210
-
211
- const ChannelToolbar = composable<HTMLDivElement, ChannelToolbarProps>(
212
- ({ attendableId, role, onJoinCall, ...props }, forwardedRef) => {
213
- const menuActions = useChannelToolbarActions(onJoinCall);
214
-
215
- return (
216
- <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
217
- <Menu.Root {...menuActions} attendableId={attendableId}>
218
- <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />
219
- </Menu.Root>
220
- </ElevationProvider>
221
- );
222
- },
223
- );
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- export { ChannelContainer as default } from './ChannelContainer';
@@ -1,131 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
6
-
7
- import { Obj, Ref } from '@dxos/echo';
8
- import { type Space, useMembers } from '@dxos/react-client/echo';
9
- import { useIdentity } from '@dxos/react-client/halo';
10
- import { ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
11
- import {
12
- MessageTextbox,
13
- type MessageTextboxProps,
14
- Thread as ThreadComponent,
15
- type ThreadRootProps,
16
- threadLayout,
17
- } from '@dxos/react-ui-thread';
18
- import { Message, type Thread } from '@dxos/types';
19
- import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui-editor';
20
- import { composable, composableProps, mx } from '@dxos/ui-theme';
21
- import { isNonNullable } from '@dxos/util';
22
-
23
- import { MessagePanel } from '#components';
24
- import { useStatus } from '#hooks';
25
- import { meta } from '#meta';
26
-
27
- import { command } from '../../extensions';
28
- import { getMessageMetadata } from '../../util';
29
-
30
- export type ChatContainerProps = ThemedClassName<
31
- {
32
- space: Space;
33
- thread: Thread.Thread;
34
- context?: Obj.Unknown;
35
- autoFocusTextbox?: boolean;
36
- } & Pick<ThreadRootProps, 'current'>
37
- >;
38
-
39
- export const ChatContainer = composable<HTMLDivElement, ChatContainerProps>(
40
- ({ space, thread, context, autoFocusTextbox, current, ...props }, forwardedRef) => {
41
- const { t } = useTranslation(meta.id);
42
- const { themeMode } = useThemeContext();
43
-
44
- const id = Obj.getDXN(thread).toString();
45
- const identity = useIdentity()!;
46
- const members = useMembers(space?.id);
47
- const activity = useStatus(space, id);
48
- const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
49
- const threadScrollRef = useRef<HTMLDivElement | null>(null);
50
-
51
- // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
52
- const [_count, _setCount] = useState(0);
53
- const rerenderEditor = () => _setCount((count) => count + 1);
54
-
55
- const textboxMetadata = getMessageMetadata(id, identity);
56
- const messageRef = useRef('');
57
- const extensions = useMemo(
58
- () => [
59
- createBasicExtensions({ placeholder: t('message.placeholder') }),
60
- createThemeExtensions({ themeMode }),
61
- listener({ onChange: ({ text }) => (messageRef.current = text) }),
62
- command,
63
- ],
64
- [themeMode, _count],
65
- );
66
-
67
- // TODO(thure): Factor out.
68
- // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using
69
- // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient
70
- // for the desired effect; this is likely hardware-dependent and should be reevaluated.
71
- const scrollToEnd = (behavior: ScrollBehavior) =>
72
- setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);
73
-
74
- useLayoutEffect(() => {
75
- scrollToEnd('instant');
76
- }, []);
77
-
78
- // TODO(burdon): Change to model.
79
- const handleCreate: MessageTextboxProps['onSend'] = () => {
80
- if (!messageRef.current?.length) {
81
- return false;
82
- }
83
-
84
- Obj.change(thread, (thread) => {
85
- thread.messages.push(
86
- Ref.make(
87
- Obj.make(Message.Message, {
88
- created: new Date().toISOString(),
89
- sender: { identityDid: identity.did },
90
- blocks: [{ _tag: 'text', text: messageRef.current }],
91
- properties: context ? { context: Ref.make(context) } : undefined,
92
- }),
93
- ),
94
- );
95
- });
96
-
97
- messageRef.current = '';
98
- setAutoFocus(true);
99
- scrollToEnd('smooth');
100
- rerenderEditor();
101
- return true;
102
- };
103
-
104
- return (
105
- <ThreadComponent.Root
106
- {...composableProps(props, {
107
- classNames: 'dx-container grid-rows-[1fr_min-content_min-content]',
108
- })}
109
- id={id}
110
- current={current}
111
- ref={forwardedRef}
112
- >
113
- <ScrollArea.Root classNames='col-span-2' orientation='vertical'>
114
- <ScrollArea.Viewport ref={threadScrollRef}>
115
- <div role='none' className={mx(threadLayout, 'place-self-end')}>
116
- {thread.messages
117
- .map((message) => message.target)
118
- .filter(isNonNullable)
119
- .map((message) => (
120
- <MessagePanel key={message.id} message={message} members={members} />
121
- ))}
122
- </div>
123
- </ScrollArea.Viewport>
124
- </ScrollArea.Root>
125
-
126
- <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />
127
- <ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>
128
- </ThreadComponent.Root>
129
- );
130
- },
131
- );
@@ -1,8 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { ChatContainer } from './ChatContainer';
6
-
7
- export { ChatContainer };
8
- export default ChatContainer;
@@ -1,217 +0,0 @@
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 { Capabilities } from '@dxos/app-framework';
9
- import { useCapabilities, useCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';
10
- import { AppCapabilities, CollaborationOperation, LayoutOperation } from '@dxos/app-toolkit';
11
- import { type AppSurface } from '@dxos/app-toolkit/ui';
12
- import { Filter, Obj, Query, Relation } from '@dxos/echo';
13
- import { Ref, useQuery } from '@dxos/react-client/echo';
14
- import { useIdentity } from '@dxos/react-client/halo';
15
- import { Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
16
- import { getParentId, useAttention } from '@dxos/react-ui-attention';
17
- import { Tabs } from '@dxos/react-ui-tabs';
18
- import { AnchoredTo, Thread } from '@dxos/types';
19
-
20
- import { CommentsPanel, type CommentsPanelProps } from '#components';
21
- import { meta } from '#meta';
22
- import { ThreadOperation } from '#operations';
23
- import { ThreadCapabilities, type ViewState } from '#types';
24
-
25
- const initialViewState: ViewState = { showResolvedThreads: false };
26
-
27
- export type ThreadCompanionProps = AppSurface.ObjectArticleProps<
28
- Thread.Thread,
29
- {
30
- attendableId?: string;
31
- }
32
- >;
33
-
34
- export const ThreadCompanion = ({ attendableId, subject }: ThreadCompanionProps) => {
35
- const { t } = useTranslation(meta.id);
36
- const manager = usePluginManager();
37
- const { invokePromise } = useOperationInvoker();
38
- const identity = useIdentity();
39
- const subjectId = Obj.getDXN(subject).toString();
40
- const parentId = attendableId ? getParentId(attendableId) : undefined;
41
- const registry = useCapability(Capabilities.AtomRegistry);
42
-
43
- const stateAtom = useCapability(ThreadCapabilities.State);
44
- const viewStoreAtom = useCapability(ThreadCapabilities.ViewState);
45
- const state = useAtomValue(stateAtom);
46
- const viewStore = useAtomValue(viewStoreAtom);
47
- const drafts = state.drafts[subjectId];
48
-
49
- // Get or initialize view state for this subject.
50
- const viewState = useMemo(() => {
51
- if (!viewStore[subjectId]) {
52
- registry.set(viewStoreAtom, { ...viewStore, [subjectId]: { ...initialViewState } });
53
- return initialViewState;
54
- }
55
- return viewStore[subjectId];
56
- }, [viewStore, subjectId, registry, viewStoreAtom]);
57
- const { showResolvedThreads } = viewState;
58
-
59
- const onChangeViewState = useCallback(
60
- (nextValue: string) => {
61
- registry.set(viewStoreAtom, {
62
- ...registry.get(viewStoreAtom),
63
- [subjectId]: { ...registry.get(viewStoreAtom)[subjectId], showResolvedThreads: nextValue === 'all' },
64
- });
65
- },
66
- [registry, viewStoreAtom, subjectId],
67
- );
68
-
69
- const anchorSorts = useCapabilities(AppCapabilities.AnchorSort);
70
- const sort = useMemo(
71
- () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
72
- [anchorSorts, subject],
73
- );
74
-
75
- const db = Obj.getDatabase(subject);
76
- const objectsAnchoredTo = useQuery(db, Query.select(Filter.id(subject.id)).targetOf(AnchoredTo.AnchoredTo));
77
- const anchors = objectsAnchoredTo
78
- .toSorted((a, b) => sort?.(a, b) ?? 0)
79
- .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
80
- .concat(drafts ?? []);
81
-
82
- const { hasAttention, isAncestor, isRelated } = useAttention(parentId);
83
- const isAttended = hasAttention || isAncestor || isRelated;
84
-
85
- const handleAttend = useCallback(
86
- (anchor: AnchoredTo.AnchoredTo) => {
87
- const thread = Relation.getSource(anchor) as Thread.Thread;
88
- const threadId = Obj.getDXN(thread).toString();
89
-
90
- if (state.current !== threadId) {
91
- registry.set(stateAtom, { ...registry.get(stateAtom), current: threadId });
92
-
93
- // Scroll plank into view (deck handler).
94
- void invokePromise(LayoutOperation.ScrollIntoView, { subject: parentId });
95
-
96
- // Scroll within content to anchor (metadata-driven, per typename).
97
- if (anchor.anchor && parentId) {
98
- const typename = Obj.getTypename(subject);
99
- const metadata = manager.capabilities
100
- .getAll(AppCapabilities.Metadata)
101
- .find(({ id }) => id === typename)?.metadata;
102
- if (metadata?.scrollToAnchor) {
103
- void invokePromise(metadata.scrollToAnchor, {
104
- subject: parentId,
105
- cursor: anchor.anchor,
106
- ref: threadId,
107
- });
108
- }
109
- }
110
- }
111
- },
112
- [state.current, invokePromise, registry, stateAtom, parentId, subject, manager],
113
- );
114
-
115
- const handleComment = useCallback(
116
- async (anchor: AnchoredTo.AnchoredTo, text: string) => {
117
- await invokePromise(ThreadOperation.AddMessage, {
118
- anchor,
119
- subject,
120
- sender: { identityDid: identity?.did },
121
- text,
122
- });
123
-
124
- const thread = Relation.getSource(anchor) as Thread.Thread;
125
- registry.set(stateAtom, { ...registry.get(stateAtom), current: Obj.getDXN(thread).toString() });
126
- },
127
- [invokePromise, identity, subject, registry, stateAtom],
128
- );
129
-
130
- const handleResolve = useCallback(
131
- (anchor: AnchoredTo.AnchoredTo) =>
132
- invokePromise(ThreadOperation.ToggleResolved, {
133
- thread: Relation.getSource(anchor) as Thread.Thread,
134
- }),
135
- [invokePromise],
136
- );
137
-
138
- const handleThreadDelete = useCallback(
139
- (anchor: AnchoredTo.AnchoredTo) => invokePromise(ThreadOperation.Delete, { anchor, subject }),
140
- [invokePromise, subject],
141
- );
142
-
143
- const handleMessageDelete = useCallback(
144
- (anchor: AnchoredTo.AnchoredTo, messageId: string) =>
145
- invokePromise(ThreadOperation.DeleteMessage, {
146
- anchor,
147
- subject,
148
- messageId,
149
- }),
150
- [invokePromise, subject],
151
- );
152
-
153
- const handleAcceptProposal = useCallback<NonNullable<CommentsPanelProps['onAcceptProposal']>>(
154
- async (anchor, messageId) => {
155
- const thread = Relation.getSource(anchor) as Thread.Thread;
156
- const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
157
- const message = thread.messages[messageIndex]?.target;
158
- const proposal = message?.blocks.find((block) => block._tag === 'proposal');
159
- if (!proposal || !anchor.anchor) {
160
- return;
161
- }
162
-
163
- await invokePromise(CollaborationOperation.AcceptProposal, {
164
- subject,
165
- anchor: anchor.anchor,
166
- proposal,
167
- });
168
- await invokePromise(ThreadOperation.ToggleResolved, { thread });
169
- },
170
- [invokePromise, subject],
171
- );
172
-
173
- const comments = (
174
- <CommentsPanel
175
- anchors={anchors}
176
- currentId={isAttended ? state.current : undefined}
177
- showResolvedThreads={showResolvedThreads}
178
- onAttend={handleAttend}
179
- onComment={handleComment}
180
- onResolve={handleResolve}
181
- onMessageDelete={handleMessageDelete}
182
- onThreadDelete={handleThreadDelete}
183
- onAcceptProposal={handleAcceptProposal}
184
- />
185
- );
186
-
187
- return (
188
- <Tabs.Root
189
- orientation='horizontal'
190
- value={showResolvedThreads ? 'all' : 'unresolved'}
191
- onValueChange={onChangeViewState}
192
- >
193
- <Panel.Root>
194
- <Panel.Toolbar asChild>
195
- <Toolbar.Root>
196
- <Tabs.Tablist classNames='p-0'>
197
- <Tabs.Tab classNames='text-sm' value='unresolved'>
198
- {t('show-unresolved.label')}
199
- </Tabs.Tab>
200
- <Tabs.Tab classNames='text-sm' value='all'>
201
- {t('show-all.label')}
202
- </Tabs.Tab>
203
- </Tabs.Tablist>
204
- </Toolbar.Root>
205
- </Panel.Toolbar>
206
- <Panel.Content asChild>
207
- <ScrollArea.Root thin>
208
- <ScrollArea.Viewport>
209
- <Tabs.Panel value='all'>{showResolvedThreads && comments}</Tabs.Panel>
210
- <Tabs.Panel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Panel>
211
- </ScrollArea.Viewport>
212
- </ScrollArea.Root>
213
- </Panel.Content>
214
- </Panel.Root>
215
- </Tabs.Root>
216
- );
217
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export { ThreadCompanion as default } from './ThreadCompanion';
@@ -1,36 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { HighlightStyle, StreamLanguage, syntaxHighlighting } from '@codemirror/language';
6
- import { type Extension } from '@codemirror/state';
7
-
8
- import { tags } from '@dxos/ui-editor';
9
- import { mx } from '@dxos/ui-theme';
10
-
11
- /**
12
- * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts
13
- */
14
- const parser = StreamLanguage.define<{ count: number }>({
15
- startState: () => ({ count: 0 }),
16
- token: (stream, state) => {
17
- state.count++;
18
- if (stream.eatSpace()) {
19
- return null;
20
- }
21
- if (state.count === 1 && stream.match(/^(\/\w+)/)) {
22
- return 'tagName';
23
- }
24
- stream.next();
25
- return null;
26
- },
27
- });
28
-
29
- const styles = HighlightStyle.define([
30
- {
31
- tag: tags.tagName,
32
- class: mx('dx-tag dx-tag--indigo text-base-surface-text font-medium'),
33
- },
34
- ]);
35
-
36
- export const command: Extension = [parser, syntaxHighlighting(styles)];
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './command';
6
- export * from './threads';