@dxos/plugin-thread 0.8.4-main.4a85c3132b → 0.8.4-main.51f1e5ca51

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 (489) hide show
  1. package/dist/lib/browser/add-message-OC4QB4I2.mjs +89 -0
  2. package/dist/lib/browser/add-message-OC4QB4I2.mjs.map +7 -0
  3. package/dist/lib/browser/blueprints/index.mjs +32 -3
  4. package/dist/lib/browser/blueprints/index.mjs.map +4 -4
  5. package/dist/lib/browser/chunk-J67QAUIW.mjs +61 -0
  6. package/dist/lib/browser/chunk-J67QAUIW.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-KCMJ7H7F.mjs +259 -0
  8. package/dist/lib/browser/chunk-KCMJ7H7F.mjs.map +7 -0
  9. package/dist/lib/browser/create-IUWQEW74.mjs +55 -0
  10. package/dist/lib/browser/create-IUWQEW74.mjs.map +7 -0
  11. package/dist/lib/browser/create-channel-CBC5WEFG.mjs +21 -0
  12. package/dist/lib/browser/create-channel-CBC5WEFG.mjs.map +7 -0
  13. package/dist/lib/browser/create-channel-thread-JJ5LQ3OZ.mjs +28 -0
  14. package/dist/lib/browser/create-channel-thread-JJ5LQ3OZ.mjs.map +7 -0
  15. package/dist/lib/browser/create-proposals-RHLVRJZ4.mjs +57 -0
  16. package/dist/lib/browser/create-proposals-RHLVRJZ4.mjs.map +7 -0
  17. package/dist/lib/browser/delete-PVIEGTTY.mjs +59 -0
  18. package/dist/lib/browser/delete-PVIEGTTY.mjs.map +7 -0
  19. package/dist/lib/browser/delete-message-TLVRPLJF.mjs +56 -0
  20. package/dist/lib/browser/delete-message-TLVRPLJF.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +1811 -171
  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-KRTKYRFU.mjs +25 -0
  25. package/dist/lib/browser/on-create-space-KRTKYRFU.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-AVE55SJF.mjs +33 -0
  29. package/dist/lib/browser/restore-AVE55SJF.mjs.map +7 -0
  30. package/dist/lib/browser/restore-message-F57RMGDJ.mjs +34 -0
  31. package/dist/lib/browser/restore-message-F57RMGDJ.mjs.map +7 -0
  32. package/dist/lib/browser/select-BJDZJI64.mjs +26 -0
  33. package/dist/lib/browser/select-BJDZJI64.mjs.map +7 -0
  34. package/dist/lib/browser/toggle-resolved-HQE5P7BV.mjs +37 -0
  35. package/dist/lib/browser/toggle-resolved-HQE5P7BV.mjs.map +7 -0
  36. package/dist/lib/browser/translations.mjs +90 -0
  37. package/dist/lib/browser/translations.mjs.map +7 -0
  38. package/dist/lib/browser/types/index.mjs +5 -8
  39. package/dist/lib/node-esm/add-message-HJXNAILW.mjs +90 -0
  40. package/dist/lib/node-esm/add-message-HJXNAILW.mjs.map +7 -0
  41. package/dist/lib/node-esm/blueprints/index.mjs +32 -3
  42. package/dist/lib/node-esm/blueprints/index.mjs.map +4 -4
  43. package/dist/lib/node-esm/chunk-2Q6V7NGK.mjs +62 -0
  44. package/dist/lib/node-esm/chunk-2Q6V7NGK.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-4KRVIOPC.mjs +260 -0
  46. package/dist/lib/node-esm/chunk-4KRVIOPC.mjs.map +7 -0
  47. package/dist/lib/node-esm/create-NALJT67D.mjs +56 -0
  48. package/dist/lib/node-esm/create-NALJT67D.mjs.map +7 -0
  49. package/dist/lib/node-esm/create-channel-CS2EAYJF.mjs +22 -0
  50. package/dist/lib/node-esm/create-channel-CS2EAYJF.mjs.map +7 -0
  51. package/dist/lib/node-esm/create-channel-thread-KZZFZDTU.mjs +29 -0
  52. package/dist/lib/node-esm/create-channel-thread-KZZFZDTU.mjs.map +7 -0
  53. package/dist/lib/node-esm/create-proposals-AFAYZQBI.mjs +58 -0
  54. package/dist/lib/node-esm/create-proposals-AFAYZQBI.mjs.map +7 -0
  55. package/dist/lib/node-esm/delete-HQJVZY7Q.mjs +60 -0
  56. package/dist/lib/node-esm/delete-HQJVZY7Q.mjs.map +7 -0
  57. package/dist/lib/node-esm/delete-message-VVPEYLV4.mjs +57 -0
  58. package/dist/lib/node-esm/delete-message-VVPEYLV4.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +1811 -171
  60. package/dist/lib/node-esm/index.mjs.map +4 -4
  61. package/dist/lib/node-esm/meta.json +1 -1
  62. package/dist/lib/node-esm/on-create-space-2UX7Z5EQ.mjs +26 -0
  63. package/dist/lib/node-esm/on-create-space-2UX7Z5EQ.mjs.map +7 -0
  64. package/dist/lib/node-esm/operations/index.mjs +15 -0
  65. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  66. package/dist/lib/node-esm/restore-FMIWJR5T.mjs +34 -0
  67. package/dist/lib/node-esm/restore-FMIWJR5T.mjs.map +7 -0
  68. package/dist/lib/node-esm/restore-message-3L7AMQMG.mjs +35 -0
  69. package/dist/lib/node-esm/restore-message-3L7AMQMG.mjs.map +7 -0
  70. package/dist/lib/node-esm/select-VCAFISBK.mjs +27 -0
  71. package/dist/lib/node-esm/select-VCAFISBK.mjs.map +7 -0
  72. package/dist/lib/node-esm/toggle-resolved-JDZZ257P.mjs +38 -0
  73. package/dist/lib/node-esm/toggle-resolved-JDZZ257P.mjs.map +7 -0
  74. package/dist/lib/node-esm/translations.mjs +91 -0
  75. package/dist/lib/node-esm/translations.mjs.map +7 -0
  76. package/dist/lib/node-esm/types/index.mjs +5 -8
  77. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  78. package/dist/types/src/blueprints/thread-blueprint.d.ts +2 -2
  79. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
  80. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  81. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  82. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  83. package/dist/types/src/calls/speaking-monitor.d.ts +0 -3
  84. package/dist/types/src/calls/speaking-monitor.d.ts.map +1 -1
  85. package/dist/types/src/calls/types.d.ts.map +1 -1
  86. package/dist/types/src/calls/util/audio.d.ts.map +1 -1
  87. package/dist/types/src/calls/util/calls-service.d.ts +2 -2
  88. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  89. package/dist/types/src/calls/util/history-cache.d.ts.map +1 -1
  90. package/dist/types/src/calls/util/media.d.ts.map +1 -1
  91. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  92. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  93. package/dist/types/src/calls-service.stories.d.ts +2 -2
  94. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  97. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/{call-manager/call-manager.d.ts → call-manager.d.ts} +1 -1
  99. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/index.d.ts +15 -10
  101. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/{markdown/markdown.d.ts → markdown.d.ts} +1 -1
  103. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  105. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/{settings/settings.d.ts → settings.d.ts} +2 -1
  109. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +1 -1
  111. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  113. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  114. package/dist/types/src/components/Call/Call.d.ts +32 -4
  115. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  116. package/dist/types/src/components/Call/Toolbar.d.ts +5 -5
  117. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  118. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +13 -0
  119. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
  120. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +160 -0
  121. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
  122. package/dist/types/src/components/{CommentsThreadContainer.d.ts → CommentsPanel/CommentsThread.d.ts} +3 -3
  123. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
  124. package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
  125. package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
  126. package/dist/types/src/components/Lobby/Lobby.d.ts +24 -3
  127. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  128. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  129. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  130. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  131. package/dist/types/src/components/{MessageContainer.d.ts → MessagePanel/MessagePanel.d.ts} +3 -3
  132. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  133. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  134. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  135. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  136. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +142 -144
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  141. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
  142. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
  143. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +164 -0
  144. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
  145. package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
  146. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
  147. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
  148. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  149. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
  150. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
  151. package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
  152. package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
  153. package/dist/types/src/components/index.d.ts +4 -3
  154. package/dist/types/src/components/index.d.ts.map +1 -1
  155. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -1
  156. package/dist/types/src/containers/CallDebugPanel/index.d.ts +1 -2
  157. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -1
  158. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -1
  159. package/dist/types/src/containers/CallSidebar/index.d.ts +1 -2
  160. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -1
  161. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +4 -4
  162. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -1
  163. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +142 -144
  164. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -1
  165. package/dist/types/src/containers/ChannelContainer/index.d.ts +1 -2
  166. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -1
  167. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +3 -4
  168. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -1
  169. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts +141 -143
  170. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -1
  171. package/dist/types/src/containers/ChatContainer/index.d.ts +1 -0
  172. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -1
  173. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +6 -3
  174. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -1
  175. package/dist/types/src/containers/ThreadCompanion/index.d.ts +1 -2
  176. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -1
  177. package/dist/types/src/containers/index.d.ts +0 -1
  178. package/dist/types/src/containers/index.d.ts.map +1 -1
  179. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  180. package/dist/types/src/extensions/command.d.ts.map +1 -0
  181. package/dist/types/src/extensions/index.d.ts +1 -0
  182. package/dist/types/src/extensions/index.d.ts.map +1 -1
  183. package/dist/types/src/extensions/threads.d.ts +3 -3
  184. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  185. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  186. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  187. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  188. package/dist/types/src/operations/add-message.d.ts +5 -0
  189. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  190. package/dist/types/src/operations/create-channel-thread.d.ts +5 -0
  191. package/dist/types/src/operations/create-channel-thread.d.ts.map +1 -0
  192. package/dist/types/src/operations/create-channel.d.ts +5 -0
  193. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  194. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  195. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  196. package/dist/types/src/operations/create.d.ts +5 -0
  197. package/dist/types/src/operations/create.d.ts.map +1 -0
  198. package/dist/types/src/operations/definitions.d.ts +2804 -0
  199. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  200. package/dist/types/src/operations/delete-message.d.ts +5 -0
  201. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  202. package/dist/types/src/operations/delete.d.ts +5 -0
  203. package/dist/types/src/operations/delete.d.ts.map +1 -0
  204. package/dist/types/src/operations/index.d.ts +4 -0
  205. package/dist/types/src/operations/index.d.ts.map +1 -0
  206. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  207. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  208. package/dist/types/src/operations/restore-message.d.ts +5 -0
  209. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  210. package/dist/types/src/operations/restore.d.ts +5 -0
  211. package/dist/types/src/operations/restore.d.ts.map +1 -0
  212. package/dist/types/src/operations/select.d.ts +5 -0
  213. package/dist/types/src/operations/select.d.ts.map +1 -0
  214. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  215. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  216. package/dist/types/src/{components/testing.d.ts → testing/data.d.ts} +1 -1
  217. package/dist/types/src/testing/data.d.ts.map +1 -0
  218. package/dist/types/src/testing/index.d.ts +1 -1
  219. package/dist/types/src/testing/index.d.ts.map +1 -1
  220. package/dist/types/src/translations.d.ts +140 -142
  221. package/dist/types/src/translations.d.ts.map +1 -1
  222. package/dist/types/src/types/Channel.d.ts +181 -177
  223. package/dist/types/src/types/Channel.d.ts.map +1 -1
  224. package/dist/types/src/types/Settings.d.ts +5 -0
  225. package/dist/types/src/types/Settings.d.ts.map +1 -0
  226. package/dist/types/src/types/capabilities.d.ts +2 -1
  227. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  228. package/dist/types/src/types/types.d.ts +1 -3304
  229. package/dist/types/src/types/types.d.ts.map +1 -1
  230. package/dist/types/src/util.d.ts +2 -2
  231. package/dist/types/src/util.d.ts.map +1 -1
  232. package/dist/types/tsconfig.tsbuildinfo +1 -1
  233. package/package.json +79 -67
  234. package/src/ThreadPlugin.tsx +30 -22
  235. package/src/blueprints/thread-blueprint.ts +5 -9
  236. package/src/calls/util/calls-service.ts +3 -2
  237. package/src/calls/util/stub-media-streams.ts +3 -1
  238. package/src/calls-service.stories.tsx +8 -7
  239. package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +40 -49
  240. package/src/capabilities/{blueprint-definition/blueprint-definition.ts → blueprint-definition.ts} +1 -1
  241. package/src/capabilities/{call-manager/call-manager.ts → call-manager.ts} +4 -3
  242. package/src/capabilities/index.ts +16 -10
  243. package/src/capabilities/{markdown/markdown.ts → markdown.ts} +17 -13
  244. package/src/capabilities/operation-handler.ts +16 -0
  245. package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +2 -2
  246. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +28 -35
  247. package/src/capabilities/{settings/settings.ts → settings.ts} +6 -5
  248. package/src/capabilities/{state/state.ts → state.ts} +1 -1
  249. package/src/capabilities/undo-mappings.ts +46 -0
  250. package/src/components/Call/Call.tsx +9 -9
  251. package/src/components/Call/Toolbar.tsx +24 -14
  252. package/src/components/{Comments.stories.tsx → CommentsPanel/CommentsPanel.stories.tsx} +14 -13
  253. package/src/components/{CommentsContainer.tsx → CommentsPanel/CommentsPanel.tsx} +6 -6
  254. package/src/components/{CommentsThreadContainer.tsx → CommentsPanel/CommentsThread.tsx} +16 -16
  255. package/src/components/CommentsPanel/index.ts +6 -0
  256. package/src/components/Lobby/Lobby.tsx +12 -10
  257. package/src/components/Media/VideoObject.stories.tsx +3 -4
  258. package/src/components/{MessageContainer.tsx → MessagePanel/MessagePanel.tsx} +16 -10
  259. package/src/components/MessagePanel/index.ts +5 -0
  260. package/src/components/Participant/Participant.tsx +2 -1
  261. package/src/components/Participant/ParticipantGrid.tsx +0 -1
  262. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +7 -7
  263. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +4 -4
  264. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -5
  265. package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +7 -7
  266. package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +4 -4
  267. package/src/components/ResponsiveGrid/index.ts +1 -1
  268. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +32 -0
  269. package/src/components/ThreadSettings/ThreadSettings.tsx +20 -0
  270. package/src/components/ThreadSettings/index.ts +5 -0
  271. package/src/components/index.ts +6 -3
  272. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +5 -4
  273. package/src/containers/CallDebugPanel/index.ts +1 -3
  274. package/src/containers/CallSidebar/CallSidebar.tsx +3 -2
  275. package/src/containers/CallSidebar/index.ts +1 -3
  276. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +45 -12
  277. package/src/containers/ChannelContainer/ChannelContainer.tsx +42 -36
  278. package/src/containers/ChannelContainer/index.ts +1 -3
  279. package/src/containers/ChatContainer/ChatContainer.stories.tsx +10 -11
  280. package/src/containers/ChatContainer/ChatContainer.tsx +95 -118
  281. package/src/containers/ChatContainer/index.ts +1 -0
  282. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +48 -28
  283. package/src/containers/ThreadCompanion/index.ts +1 -3
  284. package/src/containers/index.ts +0 -1
  285. package/src/extensions/index.ts +1 -0
  286. package/src/extensions/threads.ts +15 -14
  287. package/src/hooks/analytics.ts +1 -1
  288. package/src/meta.ts +2 -2
  289. package/src/operations/add-message.ts +81 -0
  290. package/src/operations/create-channel-thread.ts +26 -0
  291. package/src/operations/create-channel.ts +20 -0
  292. package/src/operations/create-proposals.ts +49 -0
  293. package/src/operations/create.ts +48 -0
  294. package/src/operations/definitions.ts +177 -0
  295. package/src/operations/delete-message.ts +53 -0
  296. package/src/operations/delete.ts +63 -0
  297. package/src/operations/index.ts +22 -0
  298. package/src/operations/on-create-space.ts +27 -0
  299. package/src/operations/restore-message.ts +38 -0
  300. package/src/operations/restore.ts +38 -0
  301. package/src/operations/select.ts +24 -0
  302. package/src/operations/toggle-resolved.ts +41 -0
  303. package/src/{components/testing.ts → testing/data.ts} +7 -7
  304. package/src/testing/index.ts +1 -1
  305. package/src/translations.ts +72 -76
  306. package/src/types/Channel.ts +9 -2
  307. package/src/types/Settings.ts +10 -0
  308. package/src/types/capabilities.ts +9 -7
  309. package/src/types/types.ts +2 -184
  310. package/src/util.ts +1 -1
  311. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs +0 -182
  312. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs.map +0 -7
  313. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs +0 -33
  314. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs.map +0 -7
  315. package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs +0 -15
  316. package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs.map +0 -7
  317. package/dist/lib/browser/ChatContainer-2243UD2M.mjs +0 -14
  318. package/dist/lib/browser/ChatContainer-2243UD2M.mjs.map +0 -7
  319. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs +0 -204
  320. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs.map +0 -7
  321. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs +0 -20
  322. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs.map +0 -7
  323. package/dist/lib/browser/app-graph-builder-5LCAM746.mjs +0 -191
  324. package/dist/lib/browser/app-graph-builder-5LCAM746.mjs.map +0 -7
  325. package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs +0 -17
  326. package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs.map +0 -7
  327. package/dist/lib/browser/call-manager-2PRP4QVZ.mjs +0 -27
  328. package/dist/lib/browser/call-manager-2PRP4QVZ.mjs.map +0 -7
  329. package/dist/lib/browser/chunk-CP7E2HRE.mjs +0 -31
  330. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +0 -7
  331. package/dist/lib/browser/chunk-ERK254BS.mjs +0 -1810
  332. package/dist/lib/browser/chunk-ERK254BS.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-G6FJBSXX.mjs +0 -1123
  334. package/dist/lib/browser/chunk-G6FJBSXX.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-HDLDMR54.mjs +0 -184
  336. package/dist/lib/browser/chunk-HDLDMR54.mjs.map +0 -7
  337. package/dist/lib/browser/chunk-ISCHODBV.mjs +0 -106
  338. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +0 -7
  339. package/dist/lib/browser/chunk-LUK4UNFA.mjs +0 -20
  340. package/dist/lib/browser/chunk-LUK4UNFA.mjs.map +0 -7
  341. package/dist/lib/browser/chunk-PDHCY236.mjs +0 -223
  342. package/dist/lib/browser/chunk-PDHCY236.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-PL5LIVP4.mjs +0 -105
  344. package/dist/lib/browser/chunk-PL5LIVP4.mjs.map +0 -7
  345. package/dist/lib/browser/chunk-U32R23JO.mjs +0 -277
  346. package/dist/lib/browser/chunk-U32R23JO.mjs.map +0 -7
  347. package/dist/lib/browser/chunk-UVUCB7QO.mjs +0 -125
  348. package/dist/lib/browser/chunk-UVUCB7QO.mjs.map +0 -7
  349. package/dist/lib/browser/markdown-GRRPCZHJ.mjs +0 -210
  350. package/dist/lib/browser/markdown-GRRPCZHJ.mjs.map +0 -7
  351. package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs +0 -442
  352. package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs.map +0 -7
  353. package/dist/lib/browser/react-root-7UFFPPRD.mjs +0 -26
  354. package/dist/lib/browser/react-root-7UFFPPRD.mjs.map +0 -7
  355. package/dist/lib/browser/react-surface-TIHBSZPD.mjs +0 -113
  356. package/dist/lib/browser/react-surface-TIHBSZPD.mjs.map +0 -7
  357. package/dist/lib/browser/repair-TBU45SBG.mjs +0 -40
  358. package/dist/lib/browser/repair-TBU45SBG.mjs.map +0 -7
  359. package/dist/lib/browser/settings-Y75FG6XR.mjs +0 -35
  360. package/dist/lib/browser/settings-Y75FG6XR.mjs.map +0 -7
  361. package/dist/lib/browser/state-OBTMMEUZ.mjs +0 -25
  362. package/dist/lib/browser/state-OBTMMEUZ.mjs.map +0 -7
  363. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs +0 -183
  364. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs.map +0 -7
  365. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs +0 -34
  366. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs.map +0 -7
  367. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs +0 -16
  368. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs.map +0 -7
  369. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs +0 -15
  370. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs.map +0 -7
  371. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs +0 -205
  372. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs.map +0 -7
  373. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs +0 -21
  374. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs.map +0 -7
  375. package/dist/lib/node-esm/app-graph-builder-VBLHLX75.mjs +0 -192
  376. package/dist/lib/node-esm/app-graph-builder-VBLHLX75.mjs.map +0 -7
  377. package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs +0 -18
  378. package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs.map +0 -7
  379. package/dist/lib/node-esm/call-manager-BLQCEM2F.mjs +0 -28
  380. package/dist/lib/node-esm/call-manager-BLQCEM2F.mjs.map +0 -7
  381. package/dist/lib/node-esm/chunk-6K5ACCGB.mjs +0 -107
  382. package/dist/lib/node-esm/chunk-6K5ACCGB.mjs.map +0 -7
  383. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs +0 -224
  384. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs.map +0 -7
  385. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs +0 -33
  386. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +0 -7
  387. package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs +0 -22
  388. package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs.map +0 -7
  389. package/dist/lib/node-esm/chunk-IQUV7DR6.mjs +0 -1124
  390. package/dist/lib/node-esm/chunk-IQUV7DR6.mjs.map +0 -7
  391. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs +0 -1811
  392. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +0 -7
  393. package/dist/lib/node-esm/chunk-QYAVWNVM.mjs +0 -278
  394. package/dist/lib/node-esm/chunk-QYAVWNVM.mjs.map +0 -7
  395. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs +0 -126
  396. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs.map +0 -7
  397. package/dist/lib/node-esm/chunk-VBI32FGI.mjs +0 -108
  398. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +0 -7
  399. package/dist/lib/node-esm/chunk-YN2Y7GPW.mjs +0 -185
  400. package/dist/lib/node-esm/chunk-YN2Y7GPW.mjs.map +0 -7
  401. package/dist/lib/node-esm/markdown-WHWUESF7.mjs +0 -211
  402. package/dist/lib/node-esm/markdown-WHWUESF7.mjs.map +0 -7
  403. package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs +0 -443
  404. package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs.map +0 -7
  405. package/dist/lib/node-esm/react-root-D7CWS5XP.mjs +0 -27
  406. package/dist/lib/node-esm/react-root-D7CWS5XP.mjs.map +0 -7
  407. package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs +0 -114
  408. package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs.map +0 -7
  409. package/dist/lib/node-esm/repair-7JEKRNR3.mjs +0 -41
  410. package/dist/lib/node-esm/repair-7JEKRNR3.mjs.map +0 -7
  411. package/dist/lib/node-esm/settings-W4JN2YKJ.mjs +0 -36
  412. package/dist/lib/node-esm/settings-W4JN2YKJ.mjs.map +0 -7
  413. package/dist/lib/node-esm/state-7UWCSIWQ.mjs +0 -26
  414. package/dist/lib/node-esm/state-7UWCSIWQ.mjs.map +0 -7
  415. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  416. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  417. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  418. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +0 -6
  419. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +0 -1
  420. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +0 -3
  421. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +0 -1
  422. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +0 -1
  423. package/dist/types/src/capabilities/call-manager/index.d.ts +0 -3
  424. package/dist/types/src/capabilities/call-manager/index.d.ts.map +0 -1
  425. package/dist/types/src/capabilities/markdown/index.d.ts +0 -3
  426. package/dist/types/src/capabilities/markdown/index.d.ts.map +0 -1
  427. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +0 -1
  428. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  429. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  430. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  431. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  432. package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
  433. package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
  434. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
  435. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  436. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  437. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  438. package/dist/types/src/capabilities/repair/index.d.ts +0 -3
  439. package/dist/types/src/capabilities/repair/index.d.ts.map +0 -1
  440. package/dist/types/src/capabilities/repair/repair.d.ts +0 -6
  441. package/dist/types/src/capabilities/repair/repair.d.ts.map +0 -1
  442. package/dist/types/src/capabilities/settings/index.d.ts +0 -3
  443. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  444. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  445. package/dist/types/src/capabilities/state/index.d.ts +0 -3
  446. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  447. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  448. package/dist/types/src/components/Comments.stories.d.ts +0 -162
  449. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  450. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  451. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  452. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +0 -1
  453. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  454. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  455. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -166
  456. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  457. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  458. package/dist/types/src/components/testing.d.ts.map +0 -1
  459. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts +0 -8
  460. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts.map +0 -1
  461. package/dist/types/src/containers/ThreadSettings/index.d.ts +0 -3
  462. package/dist/types/src/containers/ThreadSettings/index.d.ts.map +0 -1
  463. package/dist/types/src/functions/create-proposals.d.ts +0 -13
  464. package/dist/types/src/functions/create-proposals.d.ts.map +0 -1
  465. package/dist/types/src/functions/index.d.ts +0 -14
  466. package/dist/types/src/functions/index.d.ts.map +0 -1
  467. package/dist/types/src/testing/stories.d.ts +0 -3
  468. package/dist/types/src/testing/stories.d.ts.map +0 -1
  469. package/src/capabilities/app-graph-builder/index.ts +0 -7
  470. package/src/capabilities/blueprint-definition/index.ts +0 -7
  471. package/src/capabilities/call-manager/index.ts +0 -7
  472. package/src/capabilities/markdown/index.ts +0 -7
  473. package/src/capabilities/operation-resolver/index.ts +0 -7
  474. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -399
  475. package/src/capabilities/react-root/index.ts +0 -7
  476. package/src/capabilities/react-surface/index.ts +0 -7
  477. package/src/capabilities/repair/index.ts +0 -7
  478. package/src/capabilities/repair/repair.ts +0 -55
  479. package/src/capabilities/settings/index.ts +0 -7
  480. package/src/capabilities/state/index.ts +0 -7
  481. package/src/containers/ThreadSettings/ThreadSettings.tsx +0 -22
  482. package/src/containers/ThreadSettings/index.ts +0 -7
  483. package/src/functions/create-proposals.ts +0 -57
  484. package/src/functions/index.ts +0 -9
  485. package/src/testing/stories.ts +0 -56
  486. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  487. /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
  488. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  489. /package/src/{components/command-extension.ts → extensions/command.ts} +0 -0
@@ -1,1124 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- useDebugMode,
4
- useOnEditAnalytics,
5
- useStatus
6
- } from "./chunk-YN2Y7GPW.mjs";
7
- import {
8
- getMessageMetadata
9
- } from "./chunk-ABUFOZVX.mjs";
10
- import {
11
- ThreadCapabilities
12
- } from "./chunk-QYAVWNVM.mjs";
13
- import {
14
- meta
15
- } from "./chunk-GPPP2MZ3.mjs";
16
-
17
- // src/components/Call/Call.tsx
18
- import { useAtomValue as useAtomValue3 } from "@effect-atom/atom-react";
19
- import React9 from "react";
20
- import { useCapability as useCapability3 } from "@dxos/app-framework/ui";
21
-
22
- // src/components/Media/AudioStream.tsx
23
- import React, { useEffect, useRef } from "react";
24
- var AudioStream = ({ tracks }) => {
25
- const mediaStreamRef = useRef(new MediaStream());
26
- const ref = useRef(null);
27
- useEffect(() => {
28
- const audio = ref.current;
29
- if (!audio) {
30
- return;
31
- }
32
- const mediaStream = mediaStreamRef.current;
33
- audio.srcObject = mediaStream;
34
- }, []);
35
- const resetSrcObject = () => {
36
- const audio = ref.current;
37
- const mediaStream = mediaStreamRef.current;
38
- if (!audio || !mediaStream) {
39
- return;
40
- }
41
- audio.addEventListener("canplay", () => audio.play(), {
42
- once: true
43
- });
44
- audio.srcObject = mediaStream;
45
- };
46
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("audio", {
47
- ref,
48
- autoPlay: true
49
- }), tracks.map((track) => /* @__PURE__ */ React.createElement(AudioTrack, {
50
- key: track.id,
51
- track,
52
- mediaStream: mediaStreamRef.current,
53
- resetSrcObject
54
- })));
55
- };
56
- var AudioTrack = ({ track, mediaStream, resetSrcObject }) => {
57
- useEffect(() => {
58
- const currentTrack = track;
59
- mediaStream.addTrack(currentTrack);
60
- resetSrcObject();
61
- return () => {
62
- mediaStream.removeTrack(currentTrack);
63
- resetSrcObject();
64
- };
65
- }, [
66
- track,
67
- mediaStream
68
- ]);
69
- return null;
70
- };
71
-
72
- // src/components/Media/VideoObject.tsx
73
- import React2, { forwardRef, memo, useEffect as useEffect2, useRef as useRef2 } from "react";
74
- import { mx } from "@dxos/ui-theme";
75
- var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream, classNames, flip, contain, ...rest }, ref) => {
76
- const internalRef = useRef2(null);
77
- useEffect2(() => {
78
- const video = internalRef.current;
79
- if (video && videoStream) {
80
- video.srcObject = videoStream;
81
- video.setAttribute("autoplay", "true");
82
- video.setAttribute("playsinline", "true");
83
- }
84
- }, [
85
- videoStream,
86
- internalRef.current
87
- ]);
88
- return /* @__PURE__ */ React2.createElement("video", {
89
- className: mx("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
90
- ref: (v) => {
91
- internalRef.current = v;
92
- if (ref === null) {
93
- return;
94
- }
95
- if (typeof ref === "function") {
96
- ref(v);
97
- } else {
98
- ref.current = v;
99
- }
100
- },
101
- ...rest
102
- });
103
- }));
104
- VideoObject.displayName = "VideoObject";
105
-
106
- // src/components/Participant/Participant.tsx
107
- import { useAtomValue } from "@effect-atom/atom-react";
108
- import React6, { memo as memo2, useMemo as useMemo2 } from "react";
109
- import { useCapability } from "@dxos/app-framework/ui";
110
-
111
- // src/components/ResponsiveGrid/ResponsiveContainer.tsx
112
- import React3 from "react";
113
- import { mx as mx2 } from "@dxos/ui-theme";
114
- var ResponsiveContainer = ({ children }) => {
115
- return (
116
- // Outer container that takes full size of parent.
117
- /* @__PURE__ */ React3.createElement("div", {
118
- role: "none",
119
- className: "relative flex w-full h-full"
120
- }, /* @__PURE__ */ React3.createElement("div", {
121
- role: "none",
122
- className: "absolute inset-0 flex justify-center items-center"
123
- }, /* @__PURE__ */ React3.createElement("div", {
124
- role: "none",
125
- className: mx2("max-h-full max-w-full w-auto h-auto aspect-video")
126
- }, children)))
127
- );
128
- };
129
-
130
- // src/components/ResponsiveGrid/ResponsiveGrid.tsx
131
- import React4, { useCallback, useEffect as useEffect3, useLayoutEffect, useMemo, useState } from "react";
132
- import { useResizeDetector } from "react-resize-detector";
133
- import { invariant } from "@dxos/invariant";
134
- import { mx as mx3 } from "@dxos/ui-theme";
135
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/ResponsiveGrid/ResponsiveGrid.tsx";
136
- var ASPECT_RATIO = 16 / 9;
137
- var MIN_GALLERY_HEIGHT = 250;
138
- var DEFAULT_GAP = 8;
139
- var maxImageSize = "w-[2560px] h-[1440px]";
140
- var defaultGetId = (item) => item.id;
141
- var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = defaultGetId, items, pinned, autoHideGallery = false, debug, onPinnedChange }) => {
142
- const { width: containerWidth = 0, height: containerHeight = 0, ref: containerRef } = useResizeDetector({
143
- refreshRate: 100
144
- });
145
- const [dividerHeight, setDividerHeight] = useState(0);
146
- useEffect3(() => {
147
- if (containerWidth && containerHeight) {
148
- const { height: height2 } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);
149
- setDividerHeight(Math.min(height2, containerHeight - MIN_GALLERY_HEIGHT));
150
- }
151
- }, [
152
- containerWidth,
153
- containerHeight
154
- ]);
155
- const pinnedItem = useMemo(() => items.find((item) => getId2(item) === pinned), [
156
- items,
157
- pinned
158
- ]);
159
- const mainItems = useMemo(() => items.filter((item) => getId2(item) !== pinned), [
160
- items,
161
- pinned
162
- ]);
163
- const hideGallery = autoHideGallery && pinnedItem !== void 0;
164
- const [{ time, columns, cellWidth }, setLayout] = useState({
165
- time: 0,
166
- columns: 0,
167
- cellWidth: 0
168
- });
169
- const { width = 0, height = 0, ref: gridContainerRef } = useResizeDetector({
170
- refreshRate: 200
171
- });
172
- useEffect3(() => {
173
- if (containerHeight && width && height) {
174
- const layout = calculateLayout(width, height, mainItems.length, gap);
175
- setLayout({
176
- time: Date.now(),
177
- ...layout
178
- });
179
- }
180
- }, [
181
- containerHeight,
182
- width,
183
- height,
184
- mainItems.length,
185
- gap,
186
- pinned
187
- ]);
188
- const [bounds, setBounds] = useState([]);
189
- useLayoutEffect(() => {
190
- if (!hideGallery && !gridContainerRef.current || !containerHeight) {
191
- return;
192
- }
193
- const t = setTimeout(() => {
194
- setBounds(items.filter((item) => !hideGallery || item === pinnedItem).map((item) => {
195
- invariant(containerRef.current, void 0, {
196
- F: __dxlog_file,
197
- L: 117,
198
- S: void 0,
199
- A: [
200
- "containerRef.current",
201
- ""
202
- ]
203
- });
204
- const el = containerRef.current.querySelector(`[data-grid-item="${getId2(item)}"]`);
205
- if (!el) {
206
- return null;
207
- }
208
- const bounds2 = getRelativeBounds(containerRef.current, el);
209
- return [
210
- item,
211
- bounds2
212
- ];
213
- }).filter((item) => item !== null));
214
- });
215
- return () => clearTimeout(t);
216
- }, [
217
- containerHeight,
218
- items,
219
- pinnedItem,
220
- hideGallery,
221
- time
222
- ]);
223
- const handleClick = useCallback((item) => onPinnedChange?.(getId2(item) === pinned ? void 0 : getId2(item)), [
224
- pinned,
225
- onPinnedChange
226
- ]);
227
- return /* @__PURE__ */ React4.createElement("div", {
228
- ref: containerRef,
229
- className: mx3("relative w-full h-full", classNames)
230
- }, /* @__PURE__ */ React4.createElement("div", {
231
- className: "absolute inset-0 flex flex-col grow gap-2"
232
- }, pinnedItem && /* @__PURE__ */ React4.createElement("div", {
233
- className: mx3("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
234
- style: hideGallery ? {} : {
235
- height: dividerHeight
236
- }
237
- }, /* @__PURE__ */ React4.createElement(SoloItem, {
238
- id: getId2(pinnedItem),
239
- debug
240
- })), !hideGallery && /* @__PURE__ */ React4.createElement("div", {
241
- ref: gridContainerRef,
242
- className: "flex grow-[1] overflow-hidden justify-center items-center",
243
- style: hideGallery ? {} : {
244
- minHeight: MIN_GALLERY_HEIGHT
245
- }
246
- }, mainItems.length === 1 && /* @__PURE__ */ React4.createElement("div", {
247
- style: {
248
- width: cellWidth
249
- },
250
- className: "flex h-full"
251
- }, /* @__PURE__ */ React4.createElement(SoloItem, {
252
- id: getId2(mainItems[0]),
253
- debug
254
- })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ React4.createElement("div", {
255
- role: "grid",
256
- style: {
257
- display: "grid",
258
- gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,
259
- gap: `${gap}px`
260
- }
261
- }, mainItems.map((item) => /* @__PURE__ */ React4.createElement("div", {
262
- key: getId2(item),
263
- "data-grid-item": getId2(item),
264
- className: mx3("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
265
- }))))), /* @__PURE__ */ React4.createElement("div", {
266
- className: mx3(debug && "opacity-10")
267
- }, bounds.map(([item, bounds2]) => /* @__PURE__ */ React4.createElement(Cell, {
268
- key: getId2(item),
269
- classNames: "absolute transition-all duration-500",
270
- item,
271
- style: bounds2,
272
- pinned: getId2(item) === pinned,
273
- onClick: items.length > 1 ? handleClick : void 0
274
- }))));
275
- };
276
- var SoloItem = ({ debug, id }) => {
277
- return /* @__PURE__ */ React4.createElement(ResponsiveContainer, null, /* @__PURE__ */ React4.createElement("div", {
278
- "data-grid-item": id,
279
- className: mx3("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
280
- }, /* @__PURE__ */ React4.createElement("img", {
281
- alt: "placeholder video",
282
- className: mx3("opacity-0", maxImageSize)
283
- })));
284
- };
285
- var getRelativeBounds = (container, el) => {
286
- const containerRect = container.getBoundingClientRect();
287
- const elementRect = el.getBoundingClientRect();
288
- return {
289
- top: elementRect.top - containerRect.top,
290
- left: elementRect.left - containerRect.left,
291
- width: elementRect.width,
292
- height: elementRect.height
293
- };
294
- };
295
- var calculateLayout = (containerWidth, containerHeight, count, gap, aspectRatio = ASPECT_RATIO) => {
296
- if (count === 0) {
297
- return {
298
- columns: 1,
299
- cellWidth: 1
300
- };
301
- }
302
- let minWastedSpace = Infinity;
303
- let bestColumns = 1;
304
- let cellWidth = 0;
305
- for (let rows = 1; rows <= count; rows++) {
306
- const cols = Math.ceil(count / rows);
307
- const { width: itemWidth, height: itemHeight } = fitItemsToGrid(containerWidth, containerHeight, cols, rows, aspectRatio, gap);
308
- const usedWidth = itemWidth * cols + gap * cols - 1;
309
- const usedHeight = itemHeight * rows + gap * rows - 1;
310
- const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;
311
- if (wastedSpace < minWastedSpace) {
312
- minWastedSpace = wastedSpace;
313
- bestColumns = cols;
314
- cellWidth = itemWidth;
315
- }
316
- }
317
- return {
318
- columns: bestColumns,
319
- cellWidth
320
- };
321
- };
322
- var fitItemsToGrid = (outerWidth, outerHeight, numCols, numRows, aspectRatio, gap) => {
323
- const availableWidth = outerWidth - gap * (numCols - 1);
324
- const availableHeight = outerHeight - gap * (numRows - 1);
325
- const maxCellWidth = availableWidth / numCols;
326
- const maxCellHeight = availableHeight / numRows;
327
- return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);
328
- };
329
- var fitAspectRatio = (outerWidth, outerHeight, aspectRatio) => {
330
- if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {
331
- return {
332
- width: 0,
333
- height: 0
334
- };
335
- }
336
- let width = outerWidth;
337
- let height = width / aspectRatio;
338
- if (height > outerHeight) {
339
- height = outerHeight;
340
- width = height * aspectRatio;
341
- }
342
- return {
343
- width,
344
- height
345
- };
346
- };
347
-
348
- // src/components/ResponsiveGrid/ResponsiveGridItem.tsx
349
- import React5, { useEffect as useEffect4, useState as useState2 } from "react";
350
- import { Icon, IconButton, useTranslation } from "@dxos/react-ui";
351
- import { Waveform } from "@dxos/react-ui-sfx";
352
- import { groupHoverControlItemWithTransition, mx as mx4 } from "@dxos/ui-theme";
353
- var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinned, screenshare, video, mute, wave, speaking, onClick }) => {
354
- const { t } = useTranslation(meta.id);
355
- const iconProps = {
356
- wave: {
357
- icon: "ph--hand-waving--duotone",
358
- label: t("icon wave"),
359
- classNames: "animate-pulse bg-orange-500"
360
- },
361
- mute: {
362
- icon: "ph--microphone-slash--regular",
363
- label: t("icon muted")
364
- }
365
- };
366
- const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : void 0;
367
- const [speakingIndicator, setSpeakingIndicator] = useState2(speaking);
368
- useEffect4(() => {
369
- if (speaking) {
370
- setSpeakingIndicator(true);
371
- } else {
372
- const timeout = setTimeout(() => {
373
- setSpeakingIndicator(false);
374
- }, 1e3);
375
- return () => clearTimeout(timeout);
376
- }
377
- }, [
378
- speaking
379
- ]);
380
- return /* @__PURE__ */ React5.createElement("div", {
381
- className: mx4("relative w-full h-full group", "rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500", speakingIndicator ? "outline-green-500" : !video && "outline-separator", classNames),
382
- style
383
- }, children, onClick && /* @__PURE__ */ React5.createElement("div", {
384
- className: "z-10 absolute top-1 right-1 flex"
385
- }, /* @__PURE__ */ React5.createElement(IconButton, {
386
- classNames: mx4("p-1 min-h-1 rounded-sm", groupHoverControlItemWithTransition),
387
- iconOnly: true,
388
- icon: pinned ? "ph--x--regular" : "ph--arrows-out--regular",
389
- size: pinned ? 5 : 4,
390
- label: pinned ? t("icon unpin") : t("icon pin"),
391
- onClick: () => onClick?.(item)
392
- })), name && /* @__PURE__ */ React5.createElement("div", {
393
- className: "z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center"
394
- }, screenshare && /* @__PURE__ */ React5.createElement(Icon, {
395
- icon: "ph--broadcast--regular",
396
- size: pinned ? 5 : 4
397
- }), /* @__PURE__ */ React5.createElement("div", {
398
- className: mx4("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded-sm", pinned ? "px-2" : "px-1 text-xs")
399
- }, name)), /* @__PURE__ */ React5.createElement("div", {
400
- className: "z-10 absolute bottom-1 left-1 flex"
401
- }, speaking && /* @__PURE__ */ React5.createElement(Waveform, {
402
- active: true,
403
- size: pinned ? 5 : 4
404
- }) || props && /* @__PURE__ */ React5.createElement(IconButton, {
405
- classNames: mx4("p-1 min-h-1 rounded-sm", props?.classNames),
406
- icon: props?.icon,
407
- label: props?.label,
408
- size: pinned ? 5 : 4,
409
- iconOnly: true
410
- })));
411
- };
412
-
413
- // src/components/Participant/Participant.tsx
414
- var SCREENSHARE_SUFFIX = "_screenshare";
415
- var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
416
- const call = useCapability(ThreadCapabilities.CallManager);
417
- const self = useAtomValue(call.selfAtom);
418
- const media = useAtomValue(call.mediaAtom);
419
- const isSelf = self.id !== void 0 && user.id !== void 0 && user.id.startsWith(self.id);
420
- const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
421
- const pulledVideoStream = useMemo2(() => {
422
- if (isSelf) {
423
- return void 0;
424
- }
425
- const trackName = isScreenshare && user.tracks?.screenshareEnabled ? user.tracks?.screenshare : !isScreenshare && user.tracks?.videoEnabled ? user.tracks?.video : void 0;
426
- return trackName ? media.pulledVideoStreams[trackName]?.stream : void 0;
427
- }, [
428
- isSelf,
429
- isScreenshare,
430
- media.pulledVideoStreams,
431
- user.tracks?.screenshare,
432
- user.tracks?.video,
433
- user.tracks?.screenshareEnabled,
434
- user.tracks?.videoEnabled
435
- ]);
436
- const videoStream = useMemo2(() => {
437
- if (isSelf) {
438
- return isScreenshare ? media.screenshareVideoStream : media.videoStream;
439
- }
440
- return pulledVideoStream;
441
- }, [
442
- isSelf,
443
- isScreenshare,
444
- media.videoStream,
445
- media.screenshareVideoStream,
446
- pulledVideoStream
447
- ]);
448
- return /* @__PURE__ */ React6.createElement(ResponsiveGridItem, {
449
- ...props,
450
- item: user,
451
- name: user.name,
452
- self: isSelf,
453
- screenshare: !!media.screenshareVideoStream,
454
- video: media.videoEnabled,
455
- mute: user ? !user.tracks?.audioEnabled : false,
456
- wave: user.raisedHand,
457
- speaking: user.speaking,
458
- debug
459
- }, /* @__PURE__ */ React6.createElement(VideoObject, {
460
- videoStream,
461
- flip: isSelf && !isScreenshare,
462
- contain: !!isScreenshare,
463
- classNames: "rounded-md"
464
- }));
465
- });
466
- Participant.displayName = "Participant";
467
-
468
- // src/components/Participant/ParticipantGrid.tsx
469
- import React7, { useEffect as useEffect5, useMemo as useMemo3, useState as useState3 } from "react";
470
- var getId = (user) => user.id;
471
- var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
472
- const [pinned, setPinned] = useState3();
473
- const allUsers = useMemo3(() => {
474
- const allUsers2 = [];
475
- users.forEach((user) => {
476
- if (!user.joined) {
477
- return;
478
- }
479
- allUsers2.push({
480
- ...user,
481
- isSelf: user.id === self.id
482
- });
483
- if (user.tracks?.screenshareEnabled) {
484
- const screenshare = {
485
- ...user,
486
- id: user.id + SCREENSHARE_SUFFIX,
487
- tracks: {
488
- ...user.tracks,
489
- video: user.tracks.screenshare,
490
- videoEnabled: user.tracks.screenshareEnabled
491
- }
492
- };
493
- allUsers2.push(screenshare);
494
- }
495
- });
496
- return allUsers2;
497
- }, [
498
- self,
499
- users
500
- ]);
501
- useEffect5(() => {
502
- if (pinned) {
503
- if (!allUsers.find((user) => user.id === pinned)) {
504
- setPinned(void 0);
505
- }
506
- }
507
- }, [
508
- pinned,
509
- allUsers
510
- ]);
511
- const sortedUsers = allUsers.sort((a, b) => {
512
- if (a.isSelf) {
513
- return 1;
514
- } else if (b.isSelf) {
515
- return -1;
516
- } else if (a.tracks?.screenshareEnabled) {
517
- return -1;
518
- } else if (b.tracks?.screenshareEnabled) {
519
- return 1;
520
- } else {
521
- return 0;
522
- }
523
- });
524
- return /* @__PURE__ */ React7.createElement(ResponsiveGrid, {
525
- classNames,
526
- Cell: Participant,
527
- debug,
528
- getId,
529
- items: sortedUsers,
530
- pinned,
531
- autoHideGallery: fullscreen,
532
- onPinnedChange: setPinned
533
- });
534
- };
535
-
536
- // src/components/Call/Toolbar.tsx
537
- import { useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
538
- import React8 from "react";
539
- import { useCapability as useCapability2 } from "@dxos/app-framework/ui";
540
- import { useAppGraph } from "@dxos/app-toolkit/ui";
541
- import { Obj } from "@dxos/echo";
542
- import { Node, useActionRunner } from "@dxos/plugin-graph";
543
- import { useActions, useNode } from "@dxos/plugin-graph";
544
- import { Icon as Icon2, IconButton as IconButton2, Toolbar as NaturalToolbar, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
545
- import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/ui-theme";
546
- var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
547
- const { t } = useTranslation2(meta.id);
548
- const { graph } = useAppGraph();
549
- const runAction = useActionRunner();
550
- const call = useCapability2(ThreadCapabilities.CallManager);
551
- const media = useAtomValue2(call.mediaAtom);
552
- const joined = useAtomValue2(call.joinedAtom);
553
- const raisedHand = useAtomValue2(call.raisedHandAtom);
554
- const node = useNode(graph, channel && Obj.getDXN(channel).toString());
555
- const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
556
- const isScreensharing = media.screenshareTrack !== void 0;
557
- const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
558
- return /* @__PURE__ */ React8.createElement("div", {
559
- className: mx5("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition2)
560
- }, /* @__PURE__ */ React8.createElement(NaturalToolbar.Root, {
561
- classNames: [
562
- "p-2 bg-modal-surface rounded-md shadow-md",
563
- classNames
564
- ]
565
- }, /* @__PURE__ */ React8.createElement(ToggleButton, {
566
- active: media.audioEnabled,
567
- state: {
568
- on: {
569
- icon: "ph--microphone--regular",
570
- label: t("mic off"),
571
- onClick: () => call.turnAudioOff(),
572
- classNames: "bg-call-active"
573
- },
574
- off: {
575
- icon: "ph--microphone-slash--duotone",
576
- label: t("mic on"),
577
- onClick: () => call.turnAudioOn()
578
- }
579
- }
580
- }), /* @__PURE__ */ React8.createElement(ToggleButton, {
581
- active: media.videoEnabled,
582
- state: {
583
- on: {
584
- icon: "ph--video-camera--regular",
585
- label: t("camera off"),
586
- onClick: () => call.turnVideoOff()
587
- },
588
- off: {
589
- icon: "ph--video-camera-slash--duotone",
590
- label: t("camera on"),
591
- onClick: () => call.turnVideoOn()
592
- }
593
- }
594
- }), participants !== void 0 && /* @__PURE__ */ React8.createElement("div", {
595
- className: "flex justify-center items-center gap-2 w-[5rem] text-xs text-subdued"
596
- }, /* @__PURE__ */ React8.createElement(Icon2, {
597
- icon: "ph--users--regular",
598
- size: 4
599
- }), /* @__PURE__ */ React8.createElement("div", null, participants)) || /* @__PURE__ */ React8.createElement(NaturalToolbar.Separator, {
600
- variant: "gap"
601
- }), joined && /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(ToggleButton, {
602
- disabled: !canSharescreen,
603
- active: isScreensharing,
604
- state: {
605
- on: {
606
- icon: "ph--monitor--regular",
607
- label: t("screenshare off"),
608
- onClick: () => call.turnScreenshareOff()
609
- },
610
- off: {
611
- icon: "ph--monitor-arrow-up--duotone",
612
- label: t("screenshare on"),
613
- onClick: () => call.turnScreenshareOn()
614
- }
615
- }
616
- }), actions.filter((action) => Node.isAction(action)).map((action) => /* @__PURE__ */ React8.createElement(IconButton2, {
617
- key: action.id,
618
- ...defaultButtonProps,
619
- icon: action.properties.icon,
620
- label: toLocalizedString(action.properties.label, t),
621
- classNames: action.properties.classNames,
622
- onClick: () => node && void runAction(action, {
623
- parent: node
624
- })
625
- })), /* @__PURE__ */ React8.createElement(ToggleButton, {
626
- active: raisedHand,
627
- state: {
628
- on: {
629
- icon: "ph--hand-waving--regular",
630
- label: t("lower hand"),
631
- onClick: () => call.setRaisedHand(false)
632
- },
633
- off: {
634
- icon: "ph--hand-palm--duotone",
635
- label: t("raise hand"),
636
- onClick: () => call.setRaisedHand(true)
637
- }
638
- }
639
- })), joined ? /* @__PURE__ */ React8.createElement(IconButton2, {
640
- variant: "destructive",
641
- icon: "ph--phone-x--regular",
642
- label: t("leave call"),
643
- onClick: onLeave
644
- }) : /* @__PURE__ */ React8.createElement(IconButton2, {
645
- variant: "primary",
646
- icon: "ph--phone-incoming--regular",
647
- label: t("join call"),
648
- onClick: onJoin
649
- })));
650
- };
651
- Toolbar.displayName = "MeetingToolbar";
652
- var defaultButtonProps = {
653
- size: 5,
654
- iconOnly: true
655
- };
656
- var ToggleButton = ({ active, state }) => /* @__PURE__ */ React8.createElement(IconButton2, {
657
- ...defaultButtonProps,
658
- classNames: [
659
- active ? state.on.classNames ?? "bg-call-active" : state.off.classNames
660
- ],
661
- icon: active ? state.on.icon : state.off.icon,
662
- label: active ? state.on.label : state.off.label,
663
- onClick: active ? state.on.onClick : state.off.onClick
664
- });
665
-
666
- // src/components/Call/Call.tsx
667
- var CallRoot = ({ children }) => {
668
- return /* @__PURE__ */ React9.createElement("div", {
669
- className: "relative flex flex-col grow overflow-hidden"
670
- }, children);
671
- };
672
- CallRoot.displayName = "CallRoot";
673
- var CallAudio = () => {
674
- const call = useCapability3(ThreadCapabilities.CallManager);
675
- const audioTracksToPlay = useAtomValue3(call.audioTracksToPlayAtom);
676
- return /* @__PURE__ */ React9.createElement(AudioStream, {
677
- tracks: audioTracksToPlay
678
- });
679
- };
680
- CallAudio.displayName = "CallAudio";
681
- var CallGrid = ({ fullscreen }) => {
682
- const debug = useDebugMode();
683
- const call = useCapability3(ThreadCapabilities.CallManager);
684
- const self = useAtomValue3(call.selfAtom);
685
- const users = useAtomValue3(call.usersAtom);
686
- return /* @__PURE__ */ React9.createElement("div", {
687
- className: "grid grow p-4 dark:bg-neutral-900"
688
- }, /* @__PURE__ */ React9.createElement(ParticipantGrid, {
689
- self,
690
- users,
691
- debug,
692
- fullscreen
693
- }));
694
- };
695
- CallGrid.displayName = "CallGrid";
696
- var CallToolbar = (props) => {
697
- return /* @__PURE__ */ React9.createElement("div", {
698
- className: "absolute bottom-0 left-0 right-0 flex justify-center"
699
- }, /* @__PURE__ */ React9.createElement(Toolbar, {
700
- isInRoom: true,
701
- ...props
702
- }));
703
- };
704
- CallToolbar.displayName = "CallToolbar";
705
- var Call = {
706
- Root: CallRoot,
707
- Grid: CallGrid,
708
- Audio: CallAudio,
709
- Toolbar: CallToolbar
710
- };
711
-
712
- // src/components/CommentsContainer.tsx
713
- import React12, { useEffect as useEffect7 } from "react";
714
- import { Obj as Obj3, Relation as Relation2 } from "@dxos/echo";
715
- import { Icon as Icon3, Message, Trans, useTranslation as useTranslation5 } from "@dxos/react-ui";
716
-
717
- // src/components/CommentsThreadContainer.tsx
718
- import React11, { useCallback as useCallback3, useMemo as useMemo4, useRef as useRef4, useState as useState5 } from "react";
719
- import { Obj as Obj2, Relation } from "@dxos/echo";
720
- import { useObject as useObject2 } from "@dxos/echo-react";
721
- import { getSpace, useMembers } from "@dxos/react-client/echo";
722
- import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
723
- import { IconButton as IconButton4, Tag, Tooltip, useThemeContext as useThemeContext2, useTranslation as useTranslation4 } from "@dxos/react-ui";
724
- import { MessageTextbox, Thread as ThreadComponent } from "@dxos/react-ui-thread";
725
- import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/ui-editor";
726
- import { hoverableControlItem as hoverableControlItem2, hoverableControls as hoverableControls2, hoverableFocusedWithinControls as hoverableFocusedWithinControls2, mx as mx8 } from "@dxos/ui-theme";
727
-
728
- // src/components/command-extension.ts
729
- import { HighlightStyle, StreamLanguage, syntaxHighlighting } from "@codemirror/language";
730
- import { tags } from "@dxos/ui-editor";
731
- import { mx as mx6 } from "@dxos/ui-theme";
732
- var parser = StreamLanguage.define({
733
- startState: () => ({
734
- count: 0
735
- }),
736
- token: (stream, state) => {
737
- state.count++;
738
- if (stream.eatSpace()) {
739
- return null;
740
- }
741
- if (state.count === 1 && stream.match(/^(\/\w+)/)) {
742
- return "tagName";
743
- }
744
- stream.next();
745
- return null;
746
- }
747
- });
748
- var styles = HighlightStyle.define([
749
- {
750
- tag: tags.tagName,
751
- class: mx6("dx-tag dx-tag--indigo text-base-surface-text font-medium")
752
- }
753
- ]);
754
- var command = [
755
- parser,
756
- syntaxHighlighting(styles)
757
- ];
758
-
759
- // src/components/MessageContainer.tsx
760
- import { EditorView } from "@codemirror/view";
761
- import React10, { forwardRef as forwardRef2, useCallback as useCallback2, useEffect as useEffect6, useRef as useRef3, useState as useState4 } from "react";
762
- import { Surface } from "@dxos/app-framework/ui";
763
- import { Ref } from "@dxos/echo";
764
- import { useObject } from "@dxos/echo-react";
765
- import { PublicKey } from "@dxos/react-client";
766
- import { useIdentity } from "@dxos/react-client/halo";
767
- import { IconButton as IconButton3, useOnTransition, useThemeContext, useTranslation as useTranslation3 } from "@dxos/react-ui";
768
- import { Card } from "@dxos/react-ui";
769
- import { useTextEditor } from "@dxos/react-ui-editor";
770
- import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
771
- import { createBasicExtensions, createThemeExtensions } from "@dxos/ui-editor";
772
- import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx7 } from "@dxos/ui-theme";
773
- var buttonGroupClassNames = "flex flex-row items-center gap-0.5 pe-2";
774
- var buttonClassNames = "p-1! transition-opacity";
775
- var MessageContainer = ({ message: messageOrRef, members, editable = false, onDelete, onAcceptProposal }) => {
776
- const { t } = useTranslation3(meta.id);
777
- const [message, updateMessage] = useObject(messageOrRef);
778
- const identity = useIdentity();
779
- const [editing, setEditing] = useState4(false);
780
- const textBlockIndex = message?.blocks.findIndex((block) => block._tag === "text") ?? -1;
781
- const handleEdit = useCallback2(() => setEditing((editing2) => !editing2), []);
782
- const handleDelete = useCallback2(() => message && onDelete?.(message.id), [
783
- message,
784
- onDelete
785
- ]);
786
- const handleAcceptProposal = useCallback2(() => message && onAcceptProposal?.(message.id), [
787
- message,
788
- onAcceptProposal
789
- ]);
790
- const handleTextBlockChange = useCallback2((newText) => {
791
- updateMessage((m) => {
792
- const targetBlock = m.blocks[textBlockIndex];
793
- if (targetBlock && targetBlock._tag === "text") {
794
- targetBlock.text = newText;
795
- }
796
- });
797
- }, [
798
- updateMessage,
799
- textBlockIndex
800
- ]);
801
- const textBlock = message && textBlockIndex !== -1 ? message.blocks[textBlockIndex] : void 0;
802
- useOnEditAnalytics(message, textBlock, !!editing);
803
- if (!message) {
804
- return null;
805
- }
806
- const senderIdentity = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
807
- const messageMetadata = getMessageMetadata(message.id, senderIdentity);
808
- const userIsAuthor = identity?.did === messageMetadata.authorId;
809
- const proposalBlock = message.blocks.find((block) => block._tag === "proposal");
810
- const references = message.blocks.filter((block) => block._tag === "reference").map((block) => block.reference);
811
- return /* @__PURE__ */ React10.createElement(MessageRoot, {
812
- ...messageMetadata,
813
- classNames: [
814
- hoverableControls,
815
- hoverableFocusedWithinControls
816
- ]
817
- }, /* @__PURE__ */ React10.createElement(MessageHeading, {
818
- authorName: messageMetadata.authorName,
819
- timestamp: messageMetadata.timestamp
820
- }, /* @__PURE__ */ React10.createElement("div", {
821
- role: "none",
822
- className: buttonGroupClassNames
823
- }, userIsAuthor && editable && /* @__PURE__ */ React10.createElement(IconButton3, {
824
- "data-testid": editing ? "thread.message.save" : "thread.message.edit",
825
- variant: "ghost",
826
- icon: editing ? "ph--check--regular" : "ph--pencil-simple--regular",
827
- iconOnly: true,
828
- label: t(editing ? "save message label" : "edit message label"),
829
- classNames: [
830
- buttonClassNames,
831
- hoverableControlItem
832
- ],
833
- onClick: handleEdit
834
- }), proposalBlock && onAcceptProposal && /* @__PURE__ */ React10.createElement(IconButton3, {
835
- "data-testid": "thread.message.accept",
836
- variant: "ghost",
837
- icon: "ph--check--regular",
838
- iconOnly: true,
839
- label: t("accept proposal label"),
840
- classNames: [
841
- buttonClassNames,
842
- hoverableControlItem
843
- ],
844
- onClick: handleAcceptProposal
845
- }), onDelete && /* @__PURE__ */ React10.createElement(IconButton3, {
846
- "data-testid": "thread.message.delete",
847
- variant: "ghost",
848
- icon: "ph--x--regular",
849
- iconOnly: true,
850
- label: t("delete message label"),
851
- classNames: [
852
- buttonClassNames,
853
- hoverableControlItem
854
- ],
855
- onClick: handleDelete
856
- }))), textBlock && /* @__PURE__ */ React10.createElement(TextboxBlock, {
857
- block: textBlock,
858
- isAuthor: userIsAuthor,
859
- editing,
860
- onSave: handleTextBlockChange
861
- }), proposalBlock && /* @__PURE__ */ React10.createElement(ProposalBlock, {
862
- block: proposalBlock
863
- }), Ref.Array.targets(references).map((reference, index) => /* @__PURE__ */ React10.createElement(MessagePart, {
864
- key: index,
865
- part: reference
866
- })));
867
- };
868
- var MessagePart = ({ part }) => {
869
- return /* @__PURE__ */ React10.createElement(MessageBlockObjectTile, {
870
- subject: part
871
- });
872
- };
873
- var TextboxBlock = ({ block, isAuthor, editing, onSave }) => {
874
- const { themeMode } = useThemeContext();
875
- const inMemoryContentRef = useRef3(block.text);
876
- const handleDocumentChange = useCallback2((newState) => {
877
- inMemoryContentRef.current = newState;
878
- }, []);
879
- const saveDocumentChange = useCallback2(() => {
880
- onSave?.(inMemoryContentRef.current);
881
- }, [
882
- onSave
883
- ]);
884
- useOnTransition(editing, true, false, saveDocumentChange);
885
- const { parentRef, focusAttributes, view } = useTextEditor(() => ({
886
- initialValue: block.text,
887
- extensions: [
888
- createBasicExtensions({
889
- readOnly: !isAuthor || !editing
890
- }),
891
- createThemeExtensions({
892
- themeMode
893
- }),
894
- command,
895
- EditorView.updateListener.of((update) => {
896
- if (update.docChanged) {
897
- handleDocumentChange(update.state.doc.toString());
898
- }
899
- })
900
- ]
901
- }), [
902
- block.text,
903
- editing,
904
- isAuthor,
905
- themeMode,
906
- handleDocumentChange
907
- ]);
908
- useEffect6(() => {
909
- editing && view?.focus();
910
- }, [
911
- editing,
912
- view
913
- ]);
914
- return /* @__PURE__ */ React10.createElement("div", {
915
- role: "none",
916
- ref: parentRef,
917
- className: "me-4",
918
- ...focusAttributes
919
- });
920
- };
921
- var ProposalBlock = ({ block }) => {
922
- return /* @__PURE__ */ React10.createElement("div", {
923
- role: "none",
924
- className: "me-4 italic"
925
- }, block.text);
926
- };
927
- var MessageBlockObjectTile = /* @__PURE__ */ forwardRef2(({ subject }, forwardedRef) => {
928
- let title = subject.name ?? subject.title ?? subject.type ?? "Object";
929
- if (typeof title !== "string") {
930
- title = title?.content ?? "";
931
- }
932
- return /* @__PURE__ */ React10.createElement(Card.Root, {
933
- className: mx7("grid col-span-3 py-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
934
- ref: forwardedRef
935
- }, /* @__PURE__ */ React10.createElement(Surface.Surface, {
936
- role: "card--content",
937
- limit: 1,
938
- data: {
939
- subject
940
- },
941
- fallback: title
942
- }));
943
- });
944
-
945
- // src/components/CommentsThreadContainer.tsx
946
- var CommentsThreadContainer = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
947
- const { themeMode } = useThemeContext2();
948
- const { t } = useTranslation4(meta.id);
949
- const identity = useIdentity2();
950
- const space = getSpace(anchor);
951
- const members = useMembers(space?.id);
952
- const detached = !anchor.anchor;
953
- const thread = Relation.getSource(anchor);
954
- const [messages] = useObject2(thread, "messages");
955
- const activity = useStatus(space, Obj2.getDXN(thread).toString());
956
- const threadScrollRef = useRef4(null);
957
- const textboxMetadata = getMessageMetadata(Obj2.getDXN(thread).toString(), identity);
958
- const [state, setState] = useState5({});
959
- const messageRef = useRef4("");
960
- const extensions = useMemo4(() => [
961
- createBasicExtensions2({
962
- placeholder: t("message placeholder")
963
- }),
964
- createThemeExtensions2({
965
- themeMode
966
- }),
967
- listener({
968
- onChange: ({ text }) => messageRef.current = text
969
- }),
970
- command
971
- ], [
972
- state
973
- ]);
974
- const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
975
- behavior,
976
- block: "end"
977
- }), 10);
978
- const handleAttend = useCallback3(() => onAttend?.(anchor), [
979
- onAttend,
980
- anchor
981
- ]);
982
- const handleResolve = useCallback3(() => onResolve?.(anchor), [
983
- onResolve,
984
- anchor
985
- ]);
986
- const handleMessageDelete = useCallback3((id) => onMessageDelete?.(anchor, id), [
987
- onMessageDelete,
988
- anchor
989
- ]);
990
- const handleThreadDelete = useCallback3(() => onThreadDelete?.(anchor), [
991
- onThreadDelete,
992
- anchor
993
- ]);
994
- const handleAcceptProposal = useCallback3((id) => onAcceptProposal?.(anchor, id), [
995
- onAcceptProposal,
996
- anchor
997
- ]);
998
- const handleComment = useCallback3(() => {
999
- if (!messageRef.current) {
1000
- return false;
1001
- }
1002
- onComment?.(anchor, messageRef.current);
1003
- messageRef.current = "";
1004
- scrollToEnd("instant");
1005
- setState({});
1006
- return true;
1007
- }, [
1008
- anchor,
1009
- identity
1010
- ]);
1011
- return /* @__PURE__ */ React11.createElement(ThreadComponent.Root, {
1012
- id: Obj2.getDXN(thread).toString(),
1013
- classNames: "pt-2 border-b border-subdued-separator last:border-none",
1014
- current,
1015
- onClickCapture: handleAttend,
1016
- onFocusCapture: handleAttend
1017
- }, /* @__PURE__ */ React11.createElement("div", {
1018
- role: "none",
1019
- className: mx8("col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]", hoverableControls2, hoverableFocusedWithinControls2)
1020
- }, detached ? /* @__PURE__ */ React11.createElement(Tooltip.Trigger, {
1021
- asChild: true,
1022
- content: t("detached thread label"),
1023
- side: "top"
1024
- }, /* @__PURE__ */ React11.createElement(ThreadComponent.Header, {
1025
- detached: true
1026
- }, thread.name)) : /* @__PURE__ */ React11.createElement(ThreadComponent.Header, null, thread.name), /* @__PURE__ */ React11.createElement("div", {
1027
- role: "none",
1028
- className: buttonGroupClassNames
1029
- }, thread.status === "staged" && /* @__PURE__ */ React11.createElement(Tag, {
1030
- palette: "neutral"
1031
- }, t("draft button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React11.createElement(IconButton4, {
1032
- "data-testid": "thread.resolve",
1033
- variant: "ghost",
1034
- icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
1035
- iconOnly: true,
1036
- label: t("resolve thread label"),
1037
- classNames: [
1038
- buttonClassNames,
1039
- thread?.status !== "resolved" && hoverableControlItem2
1040
- ],
1041
- onClick: handleResolve
1042
- }), onThreadDelete && /* @__PURE__ */ React11.createElement(IconButton4, {
1043
- "data-testid": "thread.delete",
1044
- variant: "ghost",
1045
- icon: "ph--x--regular",
1046
- iconOnly: true,
1047
- label: t("delete thread label"),
1048
- classNames: [
1049
- buttonClassNames,
1050
- hoverableControlItem2
1051
- ],
1052
- onClick: handleThreadDelete
1053
- }))), messages?.map((ref) => /* @__PURE__ */ React11.createElement(MessageContainer, {
1054
- key: ref.dxn.toString(),
1055
- editable: true,
1056
- message: ref,
1057
- members,
1058
- onDelete: handleMessageDelete,
1059
- onAcceptProposal: handleAcceptProposal
1060
- })), /* @__PURE__ */ React11.createElement(MessageTextbox, {
1061
- extensions,
1062
- onSend: handleComment,
1063
- ...textboxMetadata
1064
- }), /* @__PURE__ */ React11.createElement(ThreadComponent.Status, {
1065
- activity
1066
- }, t("activity message")), /* @__PURE__ */ React11.createElement("div", {
1067
- role: "none",
1068
- className: "h-px -mt-px",
1069
- ref: threadScrollRef
1070
- }));
1071
- };
1072
-
1073
- // src/components/CommentsContainer.tsx
1074
- var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }) => {
1075
- const { t } = useTranslation5(meta.id);
1076
- const filteredAnchors = showResolvedThreads ? anchors.filter((anchor) => !!Relation2.getSource(anchor)) : anchors.filter((anchor) => {
1077
- const thread = Relation2.getSource(anchor);
1078
- return thread && thread.status !== "resolved";
1079
- });
1080
- useEffect7(() => {
1081
- if (currentId) {
1082
- document.getElementById(currentId)?.scrollIntoView({
1083
- behavior: "smooth",
1084
- block: "end"
1085
- });
1086
- }
1087
- }, [
1088
- currentId
1089
- ]);
1090
- if (filteredAnchors.length === 0) {
1091
- return /* @__PURE__ */ React12.createElement("div", {
1092
- role: "none",
1093
- className: "p-form-padding"
1094
- }, /* @__PURE__ */ React12.createElement(Message.Root, null, /* @__PURE__ */ React12.createElement(Message.Title, null, /* @__PURE__ */ React12.createElement(Trans, {
1095
- t,
1096
- i18nKey: "no comments message",
1097
- components: {
1098
- commentIcon: /* @__PURE__ */ React12.createElement(Icon3, {
1099
- icon: "ph--chat-text--regular",
1100
- size: 4,
1101
- classNames: "w-block"
1102
- })
1103
- }
1104
- }))));
1105
- }
1106
- return /* @__PURE__ */ React12.createElement("div", null, filteredAnchors.map((anchor) => {
1107
- const thread = Relation2.getSource(anchor);
1108
- const threadId = Obj3.getDXN(thread).toString();
1109
- return /* @__PURE__ */ React12.createElement(CommentsThreadContainer, {
1110
- key: threadId,
1111
- anchor,
1112
- current: currentId === threadId,
1113
- ...props
1114
- });
1115
- }));
1116
- };
1117
-
1118
- export {
1119
- Call,
1120
- command,
1121
- MessageContainer,
1122
- CommentsContainer
1123
- };
1124
- //# sourceMappingURL=chunk-IQUV7DR6.mjs.map