@dxos/plugin-thread 0.8.4-main.70d3990 → 0.8.4-main.74a063c4e0

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 (459) hide show
  1. package/dist/lib/browser/add-message-MJDIN4K4.mjs +97 -0
  2. package/dist/lib/browser/add-message-MJDIN4K4.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +37 -0
  4. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2QNKWX4H.mjs +259 -0
  6. package/dist/lib/browser/chunk-2QNKWX4H.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-7T7J6ZR6.mjs +61 -0
  8. package/dist/lib/browser/chunk-7T7J6ZR6.mjs.map +7 -0
  9. package/dist/lib/browser/create-N2ZVTONJ.mjs +55 -0
  10. package/dist/lib/browser/create-N2ZVTONJ.mjs.map +7 -0
  11. package/dist/lib/browser/create-channel-Y4H3535D.mjs +21 -0
  12. package/dist/lib/browser/create-channel-Y4H3535D.mjs.map +7 -0
  13. package/dist/lib/browser/create-channel-thread-6N7TKEAW.mjs +28 -0
  14. package/dist/lib/browser/create-channel-thread-6N7TKEAW.mjs.map +7 -0
  15. package/dist/lib/browser/create-proposals-VTOSWUOX.mjs +57 -0
  16. package/dist/lib/browser/create-proposals-VTOSWUOX.mjs.map +7 -0
  17. package/dist/lib/browser/delete-QZZE655Y.mjs +59 -0
  18. package/dist/lib/browser/delete-QZZE655Y.mjs.map +7 -0
  19. package/dist/lib/browser/delete-message-JTBPACDE.mjs +64 -0
  20. package/dist/lib/browser/delete-message-JTBPACDE.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +2245 -221
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/on-create-space-2UGS234J.mjs +25 -0
  25. package/dist/lib/browser/on-create-space-2UGS234J.mjs.map +7 -0
  26. package/dist/lib/browser/operations/index.mjs +14 -0
  27. package/dist/lib/browser/operations/index.mjs.map +7 -0
  28. package/dist/lib/browser/restore-KKQHFLYO.mjs +33 -0
  29. package/dist/lib/browser/restore-KKQHFLYO.mjs.map +7 -0
  30. package/dist/lib/browser/restore-message-YN4BJQIZ.mjs +42 -0
  31. package/dist/lib/browser/restore-message-YN4BJQIZ.mjs.map +7 -0
  32. package/dist/lib/browser/select-VBJ3MBLN.mjs +26 -0
  33. package/dist/lib/browser/select-VBJ3MBLN.mjs.map +7 -0
  34. package/dist/lib/browser/toggle-resolved-OX7UEZG5.mjs +45 -0
  35. package/dist/lib/browser/toggle-resolved-OX7UEZG5.mjs.map +7 -0
  36. package/dist/lib/browser/types/index.mjs +5 -6
  37. package/dist/lib/node-esm/add-message-X6IRTANN.mjs +98 -0
  38. package/dist/lib/node-esm/add-message-X6IRTANN.mjs.map +7 -0
  39. package/dist/lib/node-esm/blueprints/index.mjs +38 -0
  40. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  41. package/dist/lib/node-esm/chunk-I6LAZYVU.mjs +260 -0
  42. package/dist/lib/node-esm/chunk-I6LAZYVU.mjs.map +7 -0
  43. package/dist/lib/node-esm/chunk-UGSMYQLZ.mjs +62 -0
  44. package/dist/lib/node-esm/chunk-UGSMYQLZ.mjs.map +7 -0
  45. package/dist/lib/node-esm/create-A6XQZR7M.mjs +56 -0
  46. package/dist/lib/node-esm/create-A6XQZR7M.mjs.map +7 -0
  47. package/dist/lib/node-esm/create-channel-KA5T23ZS.mjs +22 -0
  48. package/dist/lib/node-esm/create-channel-KA5T23ZS.mjs.map +7 -0
  49. package/dist/lib/node-esm/create-channel-thread-44PXAPGM.mjs +29 -0
  50. package/dist/lib/node-esm/create-channel-thread-44PXAPGM.mjs.map +7 -0
  51. package/dist/lib/node-esm/create-proposals-HDBVDNUX.mjs +58 -0
  52. package/dist/lib/node-esm/create-proposals-HDBVDNUX.mjs.map +7 -0
  53. package/dist/lib/node-esm/delete-3RAWD5GG.mjs +60 -0
  54. package/dist/lib/node-esm/delete-3RAWD5GG.mjs.map +7 -0
  55. package/dist/lib/node-esm/delete-message-QQHNJBHY.mjs +65 -0
  56. package/dist/lib/node-esm/delete-message-QQHNJBHY.mjs.map +7 -0
  57. package/dist/lib/node-esm/index.mjs +2245 -221
  58. package/dist/lib/node-esm/index.mjs.map +4 -4
  59. package/dist/lib/node-esm/meta.json +1 -1
  60. package/dist/lib/node-esm/on-create-space-ZURB6UKR.mjs +26 -0
  61. package/dist/lib/node-esm/on-create-space-ZURB6UKR.mjs.map +7 -0
  62. package/dist/lib/node-esm/operations/index.mjs +15 -0
  63. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  64. package/dist/lib/node-esm/restore-PDYEKDE3.mjs +34 -0
  65. package/dist/lib/node-esm/restore-PDYEKDE3.mjs.map +7 -0
  66. package/dist/lib/node-esm/restore-message-OB32YYKF.mjs +43 -0
  67. package/dist/lib/node-esm/restore-message-OB32YYKF.mjs.map +7 -0
  68. package/dist/lib/node-esm/select-6KETLVWY.mjs +27 -0
  69. package/dist/lib/node-esm/select-6KETLVWY.mjs.map +7 -0
  70. package/dist/lib/node-esm/toggle-resolved-V74EBRQZ.mjs +46 -0
  71. package/dist/lib/node-esm/toggle-resolved-V74EBRQZ.mjs.map +7 -0
  72. package/dist/lib/node-esm/types/index.mjs +5 -6
  73. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  74. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  75. package/dist/types/src/blueprints/index.d.ts +2 -0
  76. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  77. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  78. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  79. package/dist/types/src/calls/call-manager.d.ts +40 -30
  80. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  81. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  82. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  83. package/dist/types/src/calls/media-manager.d.ts +1 -1
  84. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  85. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  86. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  87. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  88. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  89. package/dist/types/src/calls-service.stories.d.ts +2 -2
  90. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  94. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/call-manager.d.ts +3 -2
  96. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/index.d.ts +13 -15
  98. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  100. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  102. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  104. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  106. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/settings.d.ts +4 -2
  108. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/state.d.ts +5 -5
  110. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  112. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  113. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  114. package/dist/types/src/components/Call/Toolbar.d.ts +1 -1
  115. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  116. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +13 -0
  117. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
  118. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +160 -0
  119. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/{CommentsThreadContainer.d.ts → CommentsPanel/CommentsThread.d.ts} +3 -3
  121. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
  122. package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
  123. package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
  124. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  125. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  126. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  127. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
  129. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  130. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  131. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  132. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  133. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  134. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
  135. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +142 -144
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
  138. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
  139. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +164 -0
  140. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
  141. package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
  142. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
  143. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
  144. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  145. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
  146. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
  147. package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
  148. package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
  149. package/dist/types/src/components/index.d.ts +4 -9
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
  152. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  153. package/dist/types/src/containers/CallDebugPanel/index.d.ts +2 -0
  154. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  155. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  156. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  157. package/dist/types/src/containers/CallSidebar/index.d.ts +2 -0
  158. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  159. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +12 -0
  160. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  161. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +162 -0
  162. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  163. package/dist/types/src/containers/ChannelContainer/index.d.ts +2 -0
  164. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  165. package/dist/types/src/{components → containers/ChatContainer}/ChatContainer.d.ts +8 -6
  166. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  167. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts +162 -0
  168. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
  169. package/dist/types/src/containers/ChatContainer/index.d.ts +4 -0
  170. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  171. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +8 -0
  172. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  173. package/dist/types/src/containers/ThreadCompanion/index.d.ts +2 -0
  174. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  175. package/dist/types/src/containers/index.d.ts +7 -0
  176. package/dist/types/src/containers/index.d.ts.map +1 -0
  177. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  178. package/dist/types/src/extensions/command.d.ts.map +1 -0
  179. package/dist/types/src/extensions/index.d.ts +1 -0
  180. package/dist/types/src/extensions/index.d.ts.map +1 -1
  181. package/dist/types/src/extensions/threads.d.ts +8 -3
  182. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  183. package/dist/types/src/hooks/analytics.d.ts +1 -2
  184. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  185. package/dist/types/src/index.d.ts +1 -1
  186. package/dist/types/src/index.d.ts.map +1 -1
  187. package/dist/types/src/meta.d.ts +2 -2
  188. package/dist/types/src/meta.d.ts.map +1 -1
  189. package/dist/types/src/operations/add-message.d.ts +5 -0
  190. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  191. package/dist/types/src/operations/create-channel-thread.d.ts +5 -0
  192. package/dist/types/src/operations/create-channel-thread.d.ts.map +1 -0
  193. package/dist/types/src/operations/create-channel.d.ts +5 -0
  194. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  195. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  196. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  197. package/dist/types/src/operations/create.d.ts +5 -0
  198. package/dist/types/src/operations/create.d.ts.map +1 -0
  199. package/dist/types/src/operations/definitions.d.ts +2789 -0
  200. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  201. package/dist/types/src/operations/delete-message.d.ts +5 -0
  202. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  203. package/dist/types/src/operations/delete.d.ts +5 -0
  204. package/dist/types/src/operations/delete.d.ts.map +1 -0
  205. package/dist/types/src/operations/index.d.ts +4 -0
  206. package/dist/types/src/operations/index.d.ts.map +1 -0
  207. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  208. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  209. package/dist/types/src/operations/restore-message.d.ts +5 -0
  210. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  211. package/dist/types/src/operations/restore.d.ts +5 -0
  212. package/dist/types/src/operations/restore.d.ts.map +1 -0
  213. package/dist/types/src/operations/select.d.ts +5 -0
  214. package/dist/types/src/operations/select.d.ts.map +1 -0
  215. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  216. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  217. package/dist/types/src/{components/testing.d.ts → testing/data.d.ts} +1 -1
  218. package/dist/types/src/testing/data.d.ts.map +1 -0
  219. package/dist/types/src/testing/stories.d.ts +2 -1
  220. package/dist/types/src/testing/stories.d.ts.map +1 -1
  221. package/dist/types/src/translations.d.ts +140 -142
  222. package/dist/types/src/translations.d.ts.map +1 -1
  223. package/dist/types/src/types/Channel.d.ts +707 -12
  224. package/dist/types/src/types/Channel.d.ts.map +1 -1
  225. package/dist/types/src/types/Settings.d.ts +4 -0
  226. package/dist/types/src/types/Settings.d.ts.map +1 -0
  227. package/dist/types/src/types/capabilities.d.ts +23 -0
  228. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  229. package/dist/types/src/types/index.d.ts +1 -0
  230. package/dist/types/src/types/index.d.ts.map +1 -1
  231. package/dist/types/src/types/types.d.ts +1 -340
  232. package/dist/types/src/types/types.d.ts.map +1 -1
  233. package/dist/types/src/util.d.ts.map +1 -1
  234. package/dist/types/tsconfig.tsbuildinfo +1 -1
  235. package/package.json +108 -69
  236. package/src/ThreadPlugin.tsx +77 -109
  237. package/src/blueprints/index.ts +5 -0
  238. package/src/blueprints/thread-blueprint.ts +37 -0
  239. package/src/calls/call-manager.ts +76 -52
  240. package/src/calls/call-swarm-synchronizer.ts +2 -2
  241. package/src/calls/media-manager.ts +1 -1
  242. package/src/calls/util/calls-service.ts +1 -2
  243. package/src/calls/util/task-scheduling.ts +4 -4
  244. package/src/calls-service.stories.tsx +10 -9
  245. package/src/capabilities/app-graph-builder.ts +171 -172
  246. package/src/capabilities/blueprint-definition.ts +9 -30
  247. package/src/capabilities/call-manager.ts +19 -12
  248. package/src/capabilities/index.ts +15 -13
  249. package/src/capabilities/markdown.ts +50 -39
  250. package/src/capabilities/operation-handler.ts +16 -0
  251. package/src/capabilities/react-root.tsx +12 -9
  252. package/src/capabilities/react-surface.tsx +78 -79
  253. package/src/capabilities/settings.ts +28 -12
  254. package/src/capabilities/state.ts +14 -18
  255. package/src/capabilities/undo-mappings.ts +46 -0
  256. package/src/components/Call/Call.tsx +11 -7
  257. package/src/components/Call/Toolbar.tsx +55 -38
  258. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +93 -0
  259. package/src/components/{CommentsContainer.tsx → CommentsPanel/CommentsPanel.tsx} +15 -14
  260. package/src/components/{CommentsThreadContainer.tsx → CommentsPanel/CommentsThread.tsx} +28 -29
  261. package/src/components/CommentsPanel/index.ts +6 -0
  262. package/src/components/Lobby/Lobby.tsx +15 -12
  263. package/src/components/Media/AudioStream.tsx +2 -2
  264. package/src/components/Media/VideoObject.stories.tsx +6 -7
  265. package/src/components/Media/VideoObject.tsx +2 -2
  266. package/src/components/{MessageContainer.tsx → MessagePanel/MessagePanel.tsx} +74 -39
  267. package/src/components/MessagePanel/index.ts +5 -0
  268. package/src/components/Participant/Participant.tsx +33 -19
  269. package/src/components/Participant/ParticipantGrid.tsx +0 -1
  270. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +10 -11
  271. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +9 -9
  272. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +10 -10
  273. package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +7 -8
  274. package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +6 -6
  275. package/src/components/ResponsiveGrid/index.ts +1 -1
  276. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +31 -0
  277. package/src/components/ThreadSettings/ThreadSettings.tsx +20 -0
  278. package/src/components/ThreadSettings/index.ts +5 -0
  279. package/src/components/index.ts +4 -11
  280. package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +8 -7
  281. package/src/containers/CallDebugPanel/index.ts +5 -0
  282. package/src/containers/CallSidebar/CallSidebar.tsx +18 -0
  283. package/src/containers/CallSidebar/index.ts +5 -0
  284. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +61 -0
  285. package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +90 -72
  286. package/src/containers/ChannelContainer/index.ts +5 -0
  287. package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +22 -20
  288. package/src/containers/ChatContainer/ChatContainer.tsx +131 -0
  289. package/src/containers/ChatContainer/index.ts +8 -0
  290. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +217 -0
  291. package/src/containers/ThreadCompanion/index.ts +5 -0
  292. package/src/containers/index.ts +11 -0
  293. package/src/{components/command-extension.ts → extensions/command.ts} +3 -3
  294. package/src/extensions/index.ts +1 -0
  295. package/src/extensions/threads.ts +76 -41
  296. package/src/hooks/analytics.ts +24 -20
  297. package/src/index.ts +1 -1
  298. package/src/meta.ts +4 -4
  299. package/src/operations/add-message.ts +81 -0
  300. package/src/operations/create-channel-thread.ts +26 -0
  301. package/src/operations/create-channel.ts +20 -0
  302. package/src/operations/create-proposals.ts +49 -0
  303. package/src/operations/create.ts +48 -0
  304. package/src/operations/definitions.ts +177 -0
  305. package/src/operations/delete-message.ts +53 -0
  306. package/src/operations/delete.ts +63 -0
  307. package/src/operations/index.ts +22 -0
  308. package/src/operations/on-create-space.ts +27 -0
  309. package/src/operations/restore-message.ts +38 -0
  310. package/src/operations/restore.ts +38 -0
  311. package/src/operations/select.ts +24 -0
  312. package/src/operations/toggle-resolved.ts +41 -0
  313. package/src/{components/testing.ts → testing/data.ts} +7 -7
  314. package/src/testing/stories.ts +17 -17
  315. package/src/translations.ts +72 -76
  316. package/src/types/Channel.ts +19 -8
  317. package/src/types/Settings.ts +10 -0
  318. package/src/types/capabilities.ts +36 -0
  319. package/src/types/index.ts +1 -0
  320. package/src/types/types.ts +3 -98
  321. package/src/util.ts +1 -1
  322. package/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs +0 -17
  323. package/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs.map +0 -7
  324. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +0 -16
  325. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs.map +0 -7
  326. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs +0 -171
  327. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +0 -7
  328. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +0 -101
  329. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +0 -7
  330. package/dist/lib/browser/call-manager-4YFT4XA6.mjs +0 -25
  331. package/dist/lib/browser/call-manager-4YFT4XA6.mjs.map +0 -7
  332. package/dist/lib/browser/chunk-ALZKJOZK.mjs +0 -989
  333. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +0 -7
  334. package/dist/lib/browser/chunk-ANTFU4JB.mjs +0 -25
  335. package/dist/lib/browser/chunk-ANTFU4JB.mjs.map +0 -7
  336. package/dist/lib/browser/chunk-CFC7LEPD.mjs +0 -18
  337. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +0 -7
  338. package/dist/lib/browser/chunk-CP7E2HRE.mjs +0 -31
  339. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +0 -7
  340. package/dist/lib/browser/chunk-ISCHODBV.mjs +0 -106
  341. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +0 -7
  342. package/dist/lib/browser/chunk-JDJPMI7V.mjs +0 -143
  343. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +0 -7
  344. package/dist/lib/browser/chunk-KOBXMDCI.mjs +0 -182
  345. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +0 -7
  346. package/dist/lib/browser/chunk-NPT5S6N4.mjs +0 -611
  347. package/dist/lib/browser/chunk-NPT5S6N4.mjs.map +0 -7
  348. package/dist/lib/browser/chunk-QM34EZQK.mjs +0 -20
  349. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +0 -7
  350. package/dist/lib/browser/chunk-TLOOZTRD.mjs +0 -377
  351. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +0 -7
  352. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs +0 -1793
  353. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +0 -7
  354. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs +0 -355
  355. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +0 -7
  356. package/dist/lib/browser/markdown-WFZFYJBQ.mjs +0 -172
  357. package/dist/lib/browser/markdown-WFZFYJBQ.mjs.map +0 -7
  358. package/dist/lib/browser/react-root-ED7PHA44.mjs +0 -29
  359. package/dist/lib/browser/react-root-ED7PHA44.mjs.map +0 -7
  360. package/dist/lib/browser/react-surface-AUQQSQQC.mjs +0 -111
  361. package/dist/lib/browser/react-surface-AUQQSQQC.mjs.map +0 -7
  362. package/dist/lib/browser/repair-JFJLEM2O.mjs +0 -35
  363. package/dist/lib/browser/repair-JFJLEM2O.mjs.map +0 -7
  364. package/dist/lib/browser/settings-E6IOLK46.mjs +0 -23
  365. package/dist/lib/browser/settings-E6IOLK46.mjs.map +0 -7
  366. package/dist/lib/browser/state-UYPLBGZJ.mjs +0 -35
  367. package/dist/lib/browser/state-UYPLBGZJ.mjs.map +0 -7
  368. package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.mjs +0 -18
  369. package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.mjs.map +0 -7
  370. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +0 -17
  371. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs.map +0 -7
  372. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs +0 -172
  373. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +0 -7
  374. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +0 -102
  375. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +0 -7
  376. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs +0 -26
  377. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs.map +0 -7
  378. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +0 -22
  379. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +0 -7
  380. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs +0 -1794
  381. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +0 -7
  382. package/dist/lib/node-esm/chunk-AB42KYF3.mjs +0 -990
  383. package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +0 -7
  384. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs +0 -33
  385. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +0 -7
  386. package/dist/lib/node-esm/chunk-ATNY37UV.mjs +0 -27
  387. package/dist/lib/node-esm/chunk-ATNY37UV.mjs.map +0 -7
  388. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs +0 -378
  389. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +0 -7
  390. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs +0 -612
  391. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs.map +0 -7
  392. package/dist/lib/node-esm/chunk-P2M364TO.mjs +0 -144
  393. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +0 -7
  394. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs +0 -183
  395. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +0 -7
  396. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +0 -19
  397. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +0 -7
  398. package/dist/lib/node-esm/chunk-VBI32FGI.mjs +0 -108
  399. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +0 -7
  400. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs +0 -356
  401. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +0 -7
  402. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs +0 -173
  403. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs.map +0 -7
  404. package/dist/lib/node-esm/react-root-DZN324JA.mjs +0 -30
  405. package/dist/lib/node-esm/react-root-DZN324JA.mjs.map +0 -7
  406. package/dist/lib/node-esm/react-surface-AMVESEF4.mjs +0 -112
  407. package/dist/lib/node-esm/react-surface-AMVESEF4.mjs.map +0 -7
  408. package/dist/lib/node-esm/repair-RMLR24YR.mjs +0 -36
  409. package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +0 -7
  410. package/dist/lib/node-esm/settings-RGZHWDSO.mjs +0 -24
  411. package/dist/lib/node-esm/settings-RGZHWDSO.mjs.map +0 -7
  412. package/dist/lib/node-esm/state-XNWOLBNE.mjs +0 -36
  413. package/dist/lib/node-esm/state-XNWOLBNE.mjs.map +0 -7
  414. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  415. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  416. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  417. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  418. package/dist/types/src/capabilities/repair.d.ts +0 -4
  419. package/dist/types/src/capabilities/repair.d.ts.map +0 -1
  420. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  421. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  422. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  423. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  424. package/dist/types/src/components/ChannelContainer.stories.d.ts +0 -164
  425. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  426. package/dist/types/src/components/Chat.stories.d.ts +0 -164
  427. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  428. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  429. package/dist/types/src/components/Comments.stories.d.ts +0 -162
  430. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  431. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  432. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  433. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +0 -1
  434. package/dist/types/src/components/MessageContainer.d.ts +0 -16
  435. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  436. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  437. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -166
  438. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  439. package/dist/types/src/components/ThreadCompanion.d.ts +0 -5
  440. package/dist/types/src/components/ThreadCompanion.d.ts.map +0 -1
  441. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  442. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  443. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  444. package/dist/types/src/components/testing.d.ts.map +0 -1
  445. package/dist/types/src/functions/create-proposals.d.ts +0 -6
  446. package/dist/types/src/functions/create-proposals.d.ts.map +0 -1
  447. package/dist/types/src/functions/index.d.ts +0 -2
  448. package/dist/types/src/functions/index.d.ts.map +0 -1
  449. package/src/capabilities/capabilities.ts +0 -33
  450. package/src/capabilities/intent-resolver.ts +0 -311
  451. package/src/capabilities/repair.ts +0 -40
  452. package/src/components/CallSidebar.tsx +0 -18
  453. package/src/components/ChannelContainer.stories.tsx +0 -59
  454. package/src/components/ChatContainer.tsx +0 -153
  455. package/src/components/Comments.stories.tsx +0 -90
  456. package/src/components/ThreadCompanion.tsx +0 -188
  457. package/src/components/ThreadSettings.tsx +0 -16
  458. package/src/functions/create-proposals.ts +0 -56
  459. package/src/functions/index.ts +0 -5
@@ -5,14 +5,14 @@
5
5
  import React, { useEffect } from 'react';
6
6
 
7
7
  import { Obj, Relation } from '@dxos/echo';
8
- import { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';
8
+ import { Icon, Message, Trans, useTranslation } from '@dxos/react-ui';
9
9
  import { type AnchoredTo, type Thread } from '@dxos/types';
10
10
 
11
- import { meta } from '../meta';
11
+ import { meta } from '#meta';
12
12
 
13
- import { CommentsThreadContainer, type CommentsThreadContainerProps } from './CommentsThreadContainer';
13
+ import { CommentsThread, type CommentsThreadProps } from './CommentsThread';
14
14
 
15
- export type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor' | 'current'> & {
15
+ export type CommentsPanelProps = Omit<CommentsThreadProps, 'anchor' | 'current'> & {
16
16
  anchors: AnchoredTo.AnchoredTo[];
17
17
  currentId?: string;
18
18
  showResolvedThreads?: boolean;
@@ -21,7 +21,7 @@ export type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor'
21
21
  /**
22
22
  * Root container for collection of comment threads.
23
23
  */
24
- export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }: CommentsContainerProps) => {
24
+ export const CommentsPanel = ({ anchors, currentId, showResolvedThreads, ...props }: CommentsPanelProps) => {
25
25
  const { t } = useTranslation(meta.id);
26
26
 
27
27
  // TODO(wittjosiah): There seems to be a race between thread and anchor being deleted.
@@ -29,7 +29,8 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
29
29
  ? anchors.filter((anchor) => !!Relation.getSource(anchor))
30
30
  : anchors.filter((anchor) => {
31
31
  const thread = Relation.getSource(anchor);
32
- return thread && thread.status !== 'resolved';
32
+ // TODO(dmaretskyi): Do Obj.instanceOf check instead.
33
+ return thread && (thread as any).status !== 'resolved';
33
34
  });
34
35
 
35
36
  useEffect(() => {
@@ -40,20 +41,20 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
40
41
 
41
42
  if (filteredAnchors.length === 0) {
42
43
  return (
43
- <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>
44
- <Callout.Root>
45
- <Callout.Title>
44
+ <div role='none' className='p-form-padding'>
45
+ <Message.Root>
46
+ <Message.Title>
46
47
  <Trans
47
48
  {...{
48
49
  t,
49
- i18nKey: 'no comments message',
50
+ i18nKey: 'no-comments.message',
50
51
  components: {
51
- commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='inline-block' />,
52
+ commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='w-block' />,
52
53
  },
53
54
  }}
54
55
  />
55
- </Callout.Title>
56
- </Callout.Root>
56
+ </Message.Title>
57
+ </Message.Root>
57
58
  </div>
58
59
  );
59
60
  }
@@ -63,7 +64,7 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
63
64
  {filteredAnchors.map((anchor) => {
64
65
  const thread = Relation.getSource(anchor) as Thread.Thread;
65
66
  const threadId = Obj.getDXN(thread).toString();
66
- return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;
67
+ return <CommentsThread key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;
67
68
  })}
68
69
  </div>
69
70
  );
@@ -4,12 +4,11 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useRef, useState } from 'react';
6
6
 
7
- import { Obj, Ref, Relation } from '@dxos/echo';
7
+ import { Obj, Relation } from '@dxos/echo';
8
+ import { useObject } from '@dxos/echo-react';
8
9
  import { getSpace, useMembers } from '@dxos/react-client/echo';
9
10
  import { useIdentity } from '@dxos/react-client/halo';
10
11
  import { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';
11
- import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
- import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
13
12
  import {
14
13
  MessageTextbox,
15
14
  type MessageTextboxProps,
@@ -17,16 +16,17 @@ import {
17
16
  type ThreadRootProps,
18
17
  } from '@dxos/react-ui-thread';
19
18
  import { type AnchoredTo, type Thread } from '@dxos/types';
20
- import { isNonNullable } from '@dxos/util';
19
+ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui-editor';
20
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';
21
21
 
22
- import { useStatus } from '../hooks';
23
- import { meta } from '../meta';
24
- import { getMessageMetadata } from '../util';
22
+ import { useStatus } from '#hooks';
23
+ import { meta } from '#meta';
25
24
 
26
- import { command } from './command-extension';
27
- import { MessageContainer, buttonClassNames, buttonGroupClassNames } from './MessageContainer';
25
+ import { command } from '../../extensions/command';
26
+ import { getMessageMetadata } from '../../util';
27
+ import { MessagePanel, buttonClassNames, buttonGroupClassNames } from '../MessagePanel';
28
28
 
29
- export type CommentsThreadContainerProps = {
29
+ export type CommentsThreadProps = {
30
30
  anchor: AnchoredTo.AnchoredTo;
31
31
  onAttend?: (anchor: AnchoredTo.AnchoredTo) => void;
32
32
  onComment?: (anchor: AnchoredTo.AnchoredTo, message: string) => void;
@@ -36,7 +36,7 @@ export type CommentsThreadContainerProps = {
36
36
  onAcceptProposal?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;
37
37
  } & Pick<ThreadRootProps, 'current'>;
38
38
 
39
- export const CommentsThreadContainer = ({
39
+ export const CommentsThread = ({
40
40
  anchor,
41
41
  current,
42
42
  onAttend,
@@ -45,14 +45,15 @@ export const CommentsThreadContainer = ({
45
45
  onMessageDelete,
46
46
  onThreadDelete,
47
47
  onAcceptProposal,
48
- }: CommentsThreadContainerProps) => {
48
+ }: CommentsThreadProps) => {
49
49
  const { themeMode } = useThemeContext();
50
50
  const { t } = useTranslation(meta.id);
51
51
  const identity = useIdentity()!;
52
52
  const space = getSpace(anchor);
53
- const members = useMembers(space?.key);
53
+ const members = useMembers(space?.id);
54
54
  const detached = !anchor.anchor;
55
55
  const thread = Relation.getSource(anchor) as Thread.Thread;
56
+ const [messages] = useObject(thread, 'messages');
56
57
  const activity = useStatus(space, Obj.getDXN(thread).toString());
57
58
  const threadScrollRef = useRef<HTMLDivElement | null>(null);
58
59
 
@@ -63,7 +64,7 @@ export const CommentsThreadContainer = ({
63
64
  const messageRef = useRef('');
64
65
  const extensions = useMemo(
65
66
  () => [
66
- createBasicExtensions({ placeholder: t('message placeholder') }),
67
+ createBasicExtensions({ placeholder: t('message.placeholder') }),
67
68
  createThemeExtensions({ themeMode }),
68
69
  listener({ onChange: ({ text }) => (messageRef.current = text) }),
69
70
  command,
@@ -81,7 +82,7 @@ export const CommentsThreadContainer = ({
81
82
  const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);
82
83
  const handleAcceptProposal = useCallback((id: string) => onAcceptProposal?.(anchor, id), [onAcceptProposal, anchor]);
83
84
 
84
- const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {
85
+ const handleComment = useCallback<NonNullable<MessageTextboxProps['onSend']>>(() => {
85
86
  if (!messageRef.current) {
86
87
  return false;
87
88
  }
@@ -97,7 +98,7 @@ export const CommentsThreadContainer = ({
97
98
  return (
98
99
  <ThreadComponent.Root
99
100
  id={Obj.getDXN(thread).toString()}
100
- classNames='pbs-2 border-be border-subduedSeparator last:border-none'
101
+ classNames='pt-2 border-b border-subdued-separator last:border-none'
101
102
  current={current}
102
103
  onClickCapture={handleAttend}
103
104
  onFocusCapture={handleAttend}
@@ -105,27 +106,27 @@ export const CommentsThreadContainer = ({
105
106
  <div
106
107
  role='none'
107
108
  className={mx(
108
- 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',
109
+ 'col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]',
109
110
  hoverableControls,
110
111
  hoverableFocusedWithinControls,
111
112
  )}
112
113
  >
113
114
  {detached ? (
114
- <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
115
+ <Tooltip.Trigger asChild content={t('detached-thread.label')} side='top'>
115
116
  <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>
116
117
  </Tooltip.Trigger>
117
118
  ) : (
118
119
  <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>
119
120
  )}
120
121
  <div role='none' className={buttonGroupClassNames}>
121
- {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}
122
+ {thread.status === 'staged' && <Tag palette='neutral'>{t('draft.button')}</Tag>}
122
123
  {onResolve && !(thread?.status === 'staged') && (
123
124
  <IconButton
124
125
  data-testid='thread.resolve'
125
126
  variant='ghost'
126
127
  icon={thread?.status === 'resolved' ? 'ph--check--fill' : 'ph--check--regular'}
127
128
  iconOnly
128
- label={t('resolve thread label')}
129
+ label={t('resolve-thread.label')}
129
130
  classNames={[buttonClassNames, thread?.status !== 'resolved' && hoverableControlItem]}
130
131
  onClick={handleResolve}
131
132
  />
@@ -136,7 +137,7 @@ export const CommentsThreadContainer = ({
136
137
  variant='ghost'
137
138
  icon='ph--x--regular'
138
139
  iconOnly
139
- label={t('delete thread label')}
140
+ label={t('delete-thread.label')}
140
141
  classNames={[buttonClassNames, hoverableControlItem]}
141
142
  onClick={handleThreadDelete}
142
143
  />
@@ -144,12 +145,11 @@ export const CommentsThreadContainer = ({
144
145
  </div>
145
146
  </div>
146
147
 
147
- {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}
148
- {Ref.Array.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (
149
- <MessageContainer
150
- key={message.id}
148
+ {messages?.map((ref) => (
149
+ <MessagePanel
150
+ key={ref.dxn.toString()}
151
151
  editable
152
- message={message}
152
+ message={ref}
153
153
  members={members}
154
154
  onDelete={handleMessageDelete}
155
155
  onAcceptProposal={handleAcceptProposal}
@@ -164,10 +164,9 @@ export const CommentsThreadContainer = ({
164
164
  */}
165
165
  <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />
166
166
 
167
- <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>
167
+ <ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>
168
168
 
169
- {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
170
- <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
169
+ <div role='none' className='h-px -mt-px' ref={threadScrollRef} />
171
170
  </ThreadComponent.Root>
172
171
  );
173
172
  };
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './CommentsPanel';
6
+ export * from './CommentsThread';
@@ -2,17 +2,19 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React, { type FC, type PropsWithChildren, useEffect, useState } from 'react';
6
7
 
7
- import { useCapability } from '@dxos/app-framework/react';
8
+ import { useCapability } from '@dxos/app-framework/ui';
8
9
  import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
- import { mx } from '@dxos/react-ui-theme';
10
+ import { mx } from '@dxos/ui-theme';
11
+
12
+ import { meta } from '#meta';
13
+ import { ThreadCapabilities } from '#types';
10
14
 
11
- import { ThreadCapabilities } from '../../capabilities';
12
- import { meta } from '../../meta';
13
15
  import { Toolbar, type ToolbarProps } from '../Call';
14
16
  import { VideoObject } from '../Media';
15
- import { ResponsiveContainer } from '../ResponsiveGrid';
17
+ import { ResponsivePanel } from '../ResponsiveGrid';
16
18
 
17
19
  // TODO(wittjosiah): Repurpose lobby for preview.
18
20
 
@@ -39,9 +41,10 @@ type LobbyPreviewProps = {};
39
41
  const LobbyPreview: FC<LobbyPreviewProps> = () => {
40
42
  const { t } = useTranslation(meta.id);
41
43
  const call = useCapability(ThreadCapabilities.CallManager);
44
+ const media = useAtomValue(call.mediaAtom);
42
45
  const [classNames, setClassNames] = useState('');
43
46
  useEffect(() => {
44
- if (!call.media.videoEnabled) {
47
+ if (!media.videoEnabled) {
45
48
  setClassNames('');
46
49
  return;
47
50
  }
@@ -52,14 +55,14 @@ const LobbyPreview: FC<LobbyPreviewProps> = () => {
52
55
  }, 500);
53
56
 
54
57
  return () => clearTimeout(timeout);
55
- }, [call.media.videoEnabled]);
58
+ }, [media.videoEnabled]);
56
59
 
57
60
  return (
58
61
  <div className='grid grow p-4'>
59
- <ResponsiveContainer>
60
- {(call.media.videoEnabled && (
62
+ <ResponsivePanel>
63
+ {(media.videoEnabled && (
61
64
  <VideoObject
62
- videoStream={call.media.videoStream}
65
+ videoStream={media.videoStream}
63
66
  flip
64
67
  muted
65
68
  classNames={mx(
@@ -67,8 +70,8 @@ const LobbyPreview: FC<LobbyPreviewProps> = () => {
67
70
  classNames,
68
71
  )}
69
72
  />
70
- )) || <div className='p-4 outline outline-separator rounded-md'>{t('camera off label')}</div>}
71
- </ResponsiveContainer>
73
+ )) || <div className='p-4 outline outline-separator rounded-md'>{t('camera-off.label')}</div>}
74
+ </ResponsivePanel>
72
75
  </div>
73
76
  );
74
77
  };
@@ -46,13 +46,13 @@ export const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {
46
46
  );
47
47
  };
48
48
 
49
- type AudioTrackProps = {
49
+ type AudioTrackParams = {
50
50
  track: MediaStreamTrack;
51
51
  mediaStream: MediaStream;
52
52
  resetSrcObject: () => void;
53
53
  };
54
54
 
55
- const AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {
55
+ const AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackParams) => {
56
56
  useEffect(() => {
57
57
  const currentTrack = track;
58
58
  mediaStream.addTrack(currentTrack);
@@ -8,11 +8,10 @@ import React, { useEffect, useState } from 'react';
8
8
  import { scheduleTask } from '@dxos/async';
9
9
  import { Context } from '@dxos/context';
10
10
  import { log } from '@dxos/log';
11
- import { withTheme } from '@dxos/react-ui/testing';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
12
 
13
13
  import { getUserMediaTrack } from '../../calls';
14
- import { ResponsiveContainer } from '../ResponsiveGrid';
15
-
14
+ import { ResponsivePanel } from '../ResponsiveGrid';
16
15
  import { VideoObject, type VideoObjectProps } from './VideoObject';
17
16
 
18
17
  const DefaultStory = (props: VideoObjectProps) => {
@@ -37,17 +36,17 @@ const DefaultStory = (props: VideoObjectProps) => {
37
36
  }, []);
38
37
 
39
38
  return (
40
- <ResponsiveContainer>
39
+ <ResponsivePanel>
41
40
  <VideoObject videoStream={videoStream} flip {...props} />
42
- </ResponsiveContainer>
41
+ </ResponsivePanel>
43
42
  );
44
43
  };
45
44
 
46
45
  const meta = {
47
- title: 'plugins/plugin-thread/VideoObject',
46
+ title: 'plugins/plugin-thread/components/VideoObject',
48
47
  component: VideoObject,
49
48
  render: DefaultStory,
50
- decorators: [withTheme],
49
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
51
50
  parameters: {
52
51
  layout: 'fullscreen',
53
52
  },
@@ -5,7 +5,7 @@
5
5
  import React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';
6
6
 
7
7
  import { type ThemedClassName } from '@dxos/react-ui';
8
- import { mx } from '@dxos/react-ui-theme';
8
+ import { mx } from '@dxos/ui-theme';
9
9
 
10
10
  export type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &
11
11
  ThemedClassName<{
@@ -32,7 +32,7 @@ export const VideoObject = memo(
32
32
  return (
33
33
  <video
34
34
  className={mx(
35
- 'is-full aspect-video',
35
+ 'w-full aspect-video',
36
36
  flip && 'scale-x-[-1]',
37
37
  contain ? 'object-contain' : 'object-cover',
38
38
  classNames,
@@ -3,63 +3,90 @@
3
3
  //
4
4
 
5
5
  import { EditorView } from '@codemirror/view';
6
- import type * as Schema from 'effect/Schema';
7
6
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
8
7
 
9
- import { Surface } from '@dxos/app-framework/react';
8
+ import { Surface } from '@dxos/app-framework/ui';
9
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
10
10
  import { type Obj, Ref } from '@dxos/echo';
11
+ import { useObject } from '@dxos/echo-react';
11
12
  import { PublicKey } from '@dxos/react-client';
12
13
  import { type SpaceMember } from '@dxos/react-client/echo';
13
14
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
14
15
  import { IconButton, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';
15
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
16
- import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
16
+ import { Card } from '@dxos/react-ui';
17
+ import { useTextEditor } from '@dxos/react-ui-editor';
17
18
  import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
18
19
  import { type ContentBlock, type Message } from '@dxos/types';
20
+ import { createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';
21
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';
19
22
 
20
- import { useOnEditAnalytics } from '../hooks';
21
- import { meta } from '../meta';
22
- import { getMessageMetadata } from '../util';
23
+ import { useOnEditAnalytics } from '#hooks';
24
+ import { meta } from '#meta';
23
25
 
24
- import { command } from './command-extension';
26
+ import { command } from '../../extensions/command';
27
+ import { getMessageMetadata } from '../../util';
25
28
 
26
- export const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pie-2';
27
- export const buttonClassNames = '!p-1 transition-opacity';
29
+ export const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pe-2';
30
+ export const buttonClassNames = 'p-1! transition-opacity';
28
31
 
29
- export type MessageContainerProps = {
30
- // TODO(wittjosiah): Find a simpler way to define this type.
31
- message: Obj.Obj<Schema.Schema.Type<typeof Message.Message>>;
32
+ export type MessagePanelProps = {
33
+ message: Obj.OfShape<Message.Message> | Ref.Ref<Obj.OfShape<Message.Message>>;
32
34
  members: SpaceMember[];
33
35
  editable?: boolean;
34
36
  onDelete?: (id: string) => void;
35
37
  onAcceptProposal?: (id: string) => void;
36
38
  };
37
39
 
38
- export const MessageContainer = ({
39
- message,
40
+ export const MessagePanel = ({
41
+ message: messageOrRef,
40
42
  members,
41
43
  editable = false,
42
44
  onDelete,
43
45
  onAcceptProposal,
44
- }: MessageContainerProps) => {
46
+ }: MessagePanelProps) => {
45
47
  const { t } = useTranslation(meta.id);
48
+ const [message, updateMessage] = useObject(messageOrRef);
49
+ const identity = useIdentity();
50
+ const [editing, setEditing] = useState(false);
51
+
52
+ const textBlockIndex = message?.blocks.findIndex((block) => block._tag === 'text') ?? -1;
53
+
54
+ const handleEdit = useCallback(() => setEditing((editing) => !editing), []);
55
+ const handleDelete = useCallback(() => message && onDelete?.(message.id), [message, onDelete]);
56
+ const handleAcceptProposal = useCallback(
57
+ () => message && onAcceptProposal?.(message.id),
58
+ [message, onAcceptProposal],
59
+ );
60
+ const handleTextBlockChange = useCallback(
61
+ (newText: string) => {
62
+ updateMessage((m) => {
63
+ const targetBlock = m.blocks[textBlockIndex];
64
+ if (targetBlock && targetBlock._tag === 'text') {
65
+ targetBlock.text = newText;
66
+ }
67
+ });
68
+ },
69
+ [updateMessage, textBlockIndex],
70
+ );
71
+
72
+ const textBlock =
73
+ message && textBlockIndex !== -1 ? (message.blocks[textBlockIndex] as ContentBlock.Text) : undefined;
74
+ useOnEditAnalytics(message, textBlock, !!editing);
75
+
76
+ if (!message) {
77
+ return null;
78
+ }
79
+
46
80
  const senderIdentity = members.find(
47
81
  (member) =>
48
82
  (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
49
83
  (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),
50
84
  )?.identity;
51
85
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
52
- const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
53
- const [editing, setEditing] = useState(false);
54
- const handleEdit = useCallback(() => setEditing((editing) => !editing), []);
55
- const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);
56
- const handleAcceptProposal = useCallback(() => onAcceptProposal?.(message.id), [message, onAcceptProposal]);
57
- const textBlock = message.blocks.find((block) => block._tag === 'text');
86
+ const userIsAuthor = identity?.did === messageMetadata.authorId;
58
87
  const proposalBlock = message.blocks.find((block) => block._tag === 'proposal');
59
88
  const references = message.blocks.filter((block) => block._tag === 'reference').map((block) => block.reference);
60
89
 
61
- useOnEditAnalytics(message, textBlock, !!editing);
62
-
63
90
  return (
64
91
  <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>
65
92
  <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>
@@ -82,7 +109,7 @@ export const MessageContainer = ({
82
109
  variant='ghost'
83
110
  icon='ph--check--regular'
84
111
  iconOnly
85
- label={t('accept proposal label')}
112
+ label={t('accept-proposal.label')}
86
113
  classNames={[buttonClassNames, hoverableControlItem]}
87
114
  onClick={handleAcceptProposal}
88
115
  />
@@ -93,23 +120,25 @@ export const MessageContainer = ({
93
120
  variant='ghost'
94
121
  icon='ph--x--regular'
95
122
  iconOnly
96
- label={t('delete message label')}
123
+ label={t('delete-message.label')}
97
124
  classNames={[buttonClassNames, hoverableControlItem]}
98
125
  onClick={handleDelete}
99
126
  />
100
127
  )}
101
128
  </div>
102
129
  </MessageHeading>
103
- {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}
130
+ {textBlock && (
131
+ <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} onSave={handleTextBlockChange} />
132
+ )}
104
133
  {proposalBlock && <ProposalBlock block={proposalBlock} />}
105
134
  {Ref.Array.targets(references).map((reference, index) => (
106
- <MessagePart key={index} part={reference as Obj.Any} />
135
+ <MessagePart key={index} part={reference as Obj.Unknown} />
107
136
  ))}
108
137
  </MessageRoot>
109
138
  );
110
139
  };
111
140
 
112
- const MessagePart = ({ part }: { part: Obj.Any }) => {
141
+ const MessagePart = ({ part }: { part: Obj.Unknown }) => {
113
142
  return <MessageBlockObjectTile subject={part} />;
114
143
  };
115
144
 
@@ -117,11 +146,13 @@ const TextboxBlock = ({
117
146
  block,
118
147
  isAuthor,
119
148
  editing,
149
+ onSave,
120
150
  }: {
121
151
  block: ContentBlock.Text;
122
152
  editing?: boolean;
123
153
  isAuthor?: boolean;
124
154
  identity?: Identity;
155
+ onSave?: (newText: string) => void;
125
156
  }) => {
126
157
  const { themeMode } = useThemeContext();
127
158
  const inMemoryContentRef = useRef(block.text);
@@ -131,8 +162,8 @@ const TextboxBlock = ({
131
162
  }, []);
132
163
 
133
164
  const saveDocumentChange = useCallback(() => {
134
- block.text = inMemoryContentRef.current;
135
- }, [block]);
165
+ onSave?.(inMemoryContentRef.current);
166
+ }, [onSave]);
136
167
 
137
168
  useOnTransition(editing, true, false, saveDocumentChange);
138
169
 
@@ -157,18 +188,18 @@ const TextboxBlock = ({
157
188
  editing && view?.focus();
158
189
  }, [editing, view]);
159
190
 
160
- return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
191
+ return <div role='none' ref={parentRef} className='me-4' {...focusAttributes} />;
161
192
  };
162
193
 
163
194
  const ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {
164
195
  return (
165
- <div role='none' className='mie-4 italic'>
196
+ <div role='none' className='me-4 italic'>
166
197
  {block.text}
167
198
  </div>
168
199
  );
169
200
  };
170
201
 
171
- const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(({ subject }, forwardedRef) => {
202
+ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Unknown }>(({ subject }, forwardedRef) => {
172
203
  // TODO(burdon): Use annotation to get title.
173
204
  let title = (subject as any).name ?? (subject as any).title ?? (subject as any).type ?? 'Object';
174
205
  if (typeof title !== 'string') {
@@ -176,12 +207,16 @@ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(
176
207
  }
177
208
 
178
209
  return (
179
- <div
180
- role='group'
181
- className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
210
+ <Card.Root
211
+ className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
182
212
  ref={forwardedRef}
183
213
  >
184
- <Surface role='card' limit={1} data={{ subject }} fallback={title} />
185
- </div>
214
+ <Surface.Surface
215
+ role='card--content'
216
+ limit={1}
217
+ data={{ subject } satisfies AppSurface.ObjectCardData}
218
+ fallback={title}
219
+ />
220
+ </Card.Root>
186
221
  );
187
222
  });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './MessagePanel';