@dxos/plugin-thread 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879

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 (463) hide show
  1. package/dist/lib/browser/add-message-VPPFFLFL.mjs +97 -0
  2. package/dist/lib/browser/add-message-VPPFFLFL.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-J5LGTIGS.mjs +10 -0
  6. package/dist/lib/browser/chunk-MESW3R4Q.mjs +61 -0
  7. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-VPM44Z35.mjs +259 -0
  9. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +7 -0
  10. package/dist/lib/browser/create-UGT7V733.mjs +55 -0
  11. package/dist/lib/browser/create-UGT7V733.mjs.map +7 -0
  12. package/dist/lib/browser/create-channel-EF67LCS6.mjs +21 -0
  13. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +7 -0
  14. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +28 -0
  15. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +7 -0
  16. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs +57 -0
  17. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +7 -0
  18. package/dist/lib/browser/delete-FSFVU6ZA.mjs +59 -0
  19. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +7 -0
  20. package/dist/lib/browser/delete-message-XL5M5J33.mjs +64 -0
  21. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +7 -0
  22. package/dist/lib/browser/index.mjs +2251 -228
  23. package/dist/lib/browser/index.mjs.map +4 -4
  24. package/dist/lib/browser/meta.json +1 -1
  25. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +25 -0
  26. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +7 -0
  27. package/dist/lib/browser/operations/index.mjs +14 -0
  28. package/dist/lib/browser/operations/index.mjs.map +7 -0
  29. package/dist/lib/browser/restore-2ZGMKUSD.mjs +33 -0
  30. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +7 -0
  31. package/dist/lib/browser/restore-message-OYEGWPII.mjs +42 -0
  32. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +7 -0
  33. package/dist/lib/browser/select-VG2XLULE.mjs +26 -0
  34. package/dist/lib/browser/select-VG2XLULE.mjs.map +7 -0
  35. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs +45 -0
  36. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +7 -0
  37. package/dist/lib/browser/types/index.mjs +8 -12
  38. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +98 -0
  39. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +7 -0
  40. package/dist/lib/node-esm/blueprints/index.mjs +38 -0
  41. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  43. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +260 -0
  44. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +62 -0
  46. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +7 -0
  47. package/dist/lib/node-esm/create-XAYNDVU2.mjs +56 -0
  48. package/dist/lib/node-esm/create-XAYNDVU2.mjs.map +7 -0
  49. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +22 -0
  50. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +7 -0
  51. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +29 -0
  52. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +7 -0
  53. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +58 -0
  54. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +7 -0
  55. package/dist/lib/node-esm/delete-WRODXR3E.mjs +60 -0
  56. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +7 -0
  57. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +65 -0
  58. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +2251 -228
  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-XDY2YXPV.mjs +26 -0
  63. package/dist/lib/node-esm/on-create-space-XDY2YXPV.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-T3QA7TSL.mjs +34 -0
  67. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +7 -0
  68. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +43 -0
  69. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +7 -0
  70. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +27 -0
  71. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +7 -0
  72. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +46 -0
  73. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +7 -0
  74. package/dist/lib/node-esm/types/index.mjs +8 -12
  75. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  76. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  77. package/dist/types/src/blueprints/index.d.ts +2 -0
  78. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  79. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  80. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  81. package/dist/types/src/calls/call-manager.d.ts +40 -30
  82. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  83. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  84. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  85. package/dist/types/src/calls/media-manager.d.ts +1 -1
  86. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  87. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  88. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  89. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  90. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  91. package/dist/types/src/calls-service.stories.d.ts +2 -2
  92. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/blueprint-definition.d.ts +6 -0
  96. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/call-manager.d.ts +3 -2
  98. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/index.d.ts +13 -14
  100. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  102. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  104. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  106. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  108. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/settings.d.ts +5 -2
  110. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/state.d.ts +5 -5
  112. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  114. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  115. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  116. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  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/CommentsPanel/CommentsThread.d.ts +14 -0
  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.map +1 -1
  127. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  128. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  129. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
  131. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  132. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  133. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  134. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  135. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -1
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +142 -140
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
  141. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
  142. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +164 -0
  143. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
  145. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
  146. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
  147. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  148. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
  149. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
  150. package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
  151. package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
  152. package/dist/types/src/components/index.d.ts +4 -9
  153. package/dist/types/src/components/index.d.ts.map +1 -1
  154. package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
  155. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  156. package/dist/types/src/containers/CallDebugPanel/index.d.ts +2 -0
  157. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  158. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  159. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  160. package/dist/types/src/containers/CallSidebar/index.d.ts +2 -0
  161. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  162. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +12 -0
  163. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  164. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +162 -0
  165. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  166. package/dist/types/src/containers/ChannelContainer/index.d.ts +2 -0
  167. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  168. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +16 -0
  169. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  170. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts +162 -0
  171. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
  172. package/dist/types/src/containers/ChatContainer/index.d.ts +4 -0
  173. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  174. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +8 -0
  175. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  176. package/dist/types/src/containers/ThreadCompanion/index.d.ts +2 -0
  177. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  178. package/dist/types/src/containers/index.d.ts +7 -0
  179. package/dist/types/src/containers/index.d.ts.map +1 -0
  180. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  181. package/dist/types/src/extensions/command.d.ts.map +1 -0
  182. package/dist/types/src/extensions/index.d.ts +1 -0
  183. package/dist/types/src/extensions/index.d.ts.map +1 -1
  184. package/dist/types/src/extensions/threads.d.ts +8 -3
  185. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  186. package/dist/types/src/hooks/analytics.d.ts +2 -3
  187. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  188. package/dist/types/src/hooks/index.d.ts +2 -2
  189. package/dist/types/src/hooks/index.d.ts.map +1 -1
  190. package/dist/types/src/index.d.ts +1 -1
  191. package/dist/types/src/index.d.ts.map +1 -1
  192. package/dist/types/src/meta.d.ts +2 -2
  193. package/dist/types/src/meta.d.ts.map +1 -1
  194. package/dist/types/src/operations/add-message.d.ts +5 -0
  195. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  196. package/dist/types/src/operations/create-channel-thread.d.ts +5 -0
  197. package/dist/types/src/operations/create-channel-thread.d.ts.map +1 -0
  198. package/dist/types/src/operations/create-channel.d.ts +5 -0
  199. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  200. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  201. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  202. package/dist/types/src/operations/create.d.ts +5 -0
  203. package/dist/types/src/operations/create.d.ts.map +1 -0
  204. package/dist/types/src/operations/definitions.d.ts +2804 -0
  205. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  206. package/dist/types/src/operations/delete-message.d.ts +5 -0
  207. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  208. package/dist/types/src/operations/delete.d.ts +5 -0
  209. package/dist/types/src/operations/delete.d.ts.map +1 -0
  210. package/dist/types/src/operations/index.d.ts +4 -0
  211. package/dist/types/src/operations/index.d.ts.map +1 -0
  212. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  213. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  214. package/dist/types/src/operations/restore-message.d.ts +5 -0
  215. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  216. package/dist/types/src/operations/restore.d.ts +5 -0
  217. package/dist/types/src/operations/restore.d.ts.map +1 -0
  218. package/dist/types/src/operations/select.d.ts +5 -0
  219. package/dist/types/src/operations/select.d.ts.map +1 -0
  220. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  221. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  222. package/dist/types/src/{components/testing.d.ts → testing/data.d.ts} +4 -4
  223. package/dist/types/src/testing/data.d.ts.map +1 -0
  224. package/dist/types/src/testing/stories.d.ts +2 -1
  225. package/dist/types/src/testing/stories.d.ts.map +1 -1
  226. package/dist/types/src/translations.d.ts +142 -74
  227. package/dist/types/src/translations.d.ts.map +1 -1
  228. package/dist/types/src/types/Channel.d.ts +715 -0
  229. package/dist/types/src/types/Channel.d.ts.map +1 -0
  230. package/dist/types/src/types/Settings.d.ts +5 -0
  231. package/dist/types/src/types/Settings.d.ts.map +1 -0
  232. package/dist/types/src/types/capabilities.d.ts +24 -0
  233. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  234. package/dist/types/src/types/index.d.ts +2 -1
  235. package/dist/types/src/types/index.d.ts.map +1 -1
  236. package/dist/types/src/types/types.d.ts +4 -459
  237. package/dist/types/src/types/types.d.ts.map +1 -1
  238. package/dist/types/src/util.d.ts.map +1 -1
  239. package/dist/types/tsconfig.tsbuildinfo +1 -1
  240. package/package.json +102 -72
  241. package/src/ThreadPlugin.tsx +81 -111
  242. package/src/blueprints/index.ts +5 -0
  243. package/src/blueprints/thread-blueprint.ts +37 -0
  244. package/src/calls/call-manager.ts +76 -52
  245. package/src/calls/call-swarm-synchronizer.ts +2 -2
  246. package/src/calls/media-manager.ts +10 -7
  247. package/src/calls/util/calls-service.ts +1 -2
  248. package/src/calls/util/stub-media-streams.ts +2 -2
  249. package/src/calls/util/task-scheduling.ts +4 -4
  250. package/src/calls-service.stories.tsx +10 -9
  251. package/src/capabilities/app-graph-builder.ts +172 -163
  252. package/src/capabilities/blueprint-definition.ts +17 -0
  253. package/src/capabilities/call-manager.ts +19 -12
  254. package/src/capabilities/index.ts +15 -12
  255. package/src/capabilities/markdown.ts +50 -37
  256. package/src/capabilities/operation-handler.ts +16 -0
  257. package/src/capabilities/react-root.tsx +12 -9
  258. package/src/capabilities/react-surface.tsx +80 -78
  259. package/src/capabilities/settings.ts +28 -12
  260. package/src/capabilities/state.ts +14 -18
  261. package/src/capabilities/undo-mappings.ts +46 -0
  262. package/src/components/Call/Call.tsx +11 -7
  263. package/src/components/Call/Toolbar.tsx +58 -41
  264. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +93 -0
  265. package/src/components/CommentsPanel/CommentsPanel.tsx +71 -0
  266. package/src/components/{CommentsThreadContainer.tsx → CommentsPanel/CommentsThread.tsx} +60 -57
  267. package/src/components/CommentsPanel/index.ts +6 -0
  268. package/src/components/Lobby/Lobby.tsx +15 -12
  269. package/src/components/Media/AudioStream.tsx +2 -2
  270. package/src/components/Media/VideoObject.stories.tsx +6 -7
  271. package/src/components/Media/VideoObject.tsx +1 -1
  272. package/src/components/{MessageContainer.tsx → MessagePanel/MessagePanel.tsx} +77 -40
  273. package/src/components/MessagePanel/index.ts +5 -0
  274. package/src/components/Participant/Participant.tsx +33 -19
  275. package/src/components/Participant/ParticipantGrid.tsx +0 -1
  276. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +9 -10
  277. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  278. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +12 -9
  279. package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +7 -8
  280. package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +5 -5
  281. package/src/components/ResponsiveGrid/index.ts +1 -1
  282. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +31 -0
  283. package/src/components/ThreadSettings/ThreadSettings.tsx +20 -0
  284. package/src/components/ThreadSettings/index.ts +5 -0
  285. package/src/components/index.ts +5 -12
  286. package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +15 -16
  287. package/src/containers/CallDebugPanel/index.ts +5 -0
  288. package/src/containers/CallSidebar/CallSidebar.tsx +18 -0
  289. package/src/containers/CallSidebar/index.ts +5 -0
  290. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +61 -0
  291. package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +93 -71
  292. package/src/containers/ChannelContainer/index.ts +5 -0
  293. package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +27 -31
  294. package/src/containers/ChatContainer/ChatContainer.tsx +131 -0
  295. package/src/containers/ChatContainer/index.ts +8 -0
  296. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +217 -0
  297. package/src/containers/ThreadCompanion/index.ts +5 -0
  298. package/src/containers/index.ts +11 -0
  299. package/src/{components/command-extension.ts → extensions/command.ts} +3 -3
  300. package/src/extensions/index.ts +1 -0
  301. package/src/extensions/threads.ts +87 -42
  302. package/src/hooks/analytics.ts +22 -21
  303. package/src/hooks/index.ts +3 -2
  304. package/src/index.ts +1 -1
  305. package/src/meta.ts +10 -5
  306. package/src/operations/add-message.ts +81 -0
  307. package/src/operations/create-channel-thread.ts +26 -0
  308. package/src/operations/create-channel.ts +20 -0
  309. package/src/operations/create-proposals.ts +49 -0
  310. package/src/operations/create.ts +48 -0
  311. package/src/operations/definitions.ts +177 -0
  312. package/src/operations/delete-message.ts +53 -0
  313. package/src/operations/delete.ts +63 -0
  314. package/src/operations/index.ts +22 -0
  315. package/src/operations/on-create-space.ts +27 -0
  316. package/src/operations/restore-message.ts +38 -0
  317. package/src/operations/restore.ts +38 -0
  318. package/src/operations/select.ts +24 -0
  319. package/src/operations/toggle-resolved.ts +41 -0
  320. package/src/testing/data.ts +49 -0
  321. package/src/testing/stories.ts +17 -20
  322. package/src/translations.ts +74 -75
  323. package/src/types/Channel.ts +37 -0
  324. package/src/types/Settings.ts +10 -0
  325. package/src/types/capabilities.ts +36 -0
  326. package/src/types/index.ts +2 -1
  327. package/src/types/types.ts +5 -108
  328. package/src/util.ts +1 -1
  329. package/dist/lib/browser/ChannelContainer-BGDGZHV4.mjs +0 -16
  330. package/dist/lib/browser/ChatContainer-75KJZ4XR.mjs +0 -15
  331. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs +0 -171
  332. package/dist/lib/browser/app-graph-builder-ODKIAXR7.mjs.map +0 -7
  333. package/dist/lib/browser/call-manager-BCKLI4QD.mjs +0 -24
  334. package/dist/lib/browser/call-manager-BCKLI4QD.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-2MUYQOQE.mjs +0 -23
  336. package/dist/lib/browser/chunk-2MUYQOQE.mjs.map +0 -7
  337. package/dist/lib/browser/chunk-B7YQ7QR2.mjs +0 -376
  338. package/dist/lib/browser/chunk-B7YQ7QR2.mjs.map +0 -7
  339. package/dist/lib/browser/chunk-CMCVHULC.mjs +0 -986
  340. package/dist/lib/browser/chunk-CMCVHULC.mjs.map +0 -7
  341. package/dist/lib/browser/chunk-CP7E2HRE.mjs +0 -31
  342. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-HDEQRBOC.mjs +0 -181
  344. package/dist/lib/browser/chunk-HDEQRBOC.mjs.map +0 -7
  345. package/dist/lib/browser/chunk-L326LSNS.mjs +0 -18
  346. package/dist/lib/browser/chunk-L326LSNS.mjs.map +0 -7
  347. package/dist/lib/browser/chunk-T4KJ5JR4.mjs +0 -15
  348. package/dist/lib/browser/chunk-T4KJ5JR4.mjs.map +0 -7
  349. package/dist/lib/browser/chunk-VJMKS4CZ.mjs +0 -619
  350. package/dist/lib/browser/chunk-VJMKS4CZ.mjs.map +0 -7
  351. package/dist/lib/browser/chunk-VTYX3SIM.mjs +0 -147
  352. package/dist/lib/browser/chunk-VTYX3SIM.mjs.map +0 -7
  353. package/dist/lib/browser/chunk-XYUJXHYV.mjs +0 -106
  354. package/dist/lib/browser/chunk-XYUJXHYV.mjs.map +0 -7
  355. package/dist/lib/browser/chunk-ZCEU5K23.mjs +0 -1890
  356. package/dist/lib/browser/chunk-ZCEU5K23.mjs.map +0 -7
  357. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs +0 -427
  358. package/dist/lib/browser/intent-resolver-VOQD3TQ2.mjs.map +0 -7
  359. package/dist/lib/browser/markdown-R6MGRIA6.mjs +0 -169
  360. package/dist/lib/browser/markdown-R6MGRIA6.mjs.map +0 -7
  361. package/dist/lib/browser/react-root-UMSBTN6H.mjs +0 -28
  362. package/dist/lib/browser/react-root-UMSBTN6H.mjs.map +0 -7
  363. package/dist/lib/browser/react-surface-SXMQEWKE.mjs +0 -109
  364. package/dist/lib/browser/react-surface-SXMQEWKE.mjs.map +0 -7
  365. package/dist/lib/browser/settings-TCNF54PN.mjs +0 -22
  366. package/dist/lib/browser/settings-TCNF54PN.mjs.map +0 -7
  367. package/dist/lib/browser/state-ZQ4IPOJT.mjs +0 -34
  368. package/dist/lib/browser/state-ZQ4IPOJT.mjs.map +0 -7
  369. package/dist/lib/browser/toolkit-JF4B4QIO.mjs +0 -84
  370. package/dist/lib/browser/toolkit-JF4B4QIO.mjs.map +0 -7
  371. package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs +0 -17
  372. package/dist/lib/node-esm/ChannelContainer-OXC6BTU7.mjs.map +0 -7
  373. package/dist/lib/node-esm/ChatContainer-SH6LTFQL.mjs +0 -16
  374. package/dist/lib/node-esm/ChatContainer-SH6LTFQL.mjs.map +0 -7
  375. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs +0 -172
  376. package/dist/lib/node-esm/app-graph-builder-DMPT3MY6.mjs.map +0 -7
  377. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs +0 -25
  378. package/dist/lib/node-esm/call-manager-Q7RY2YP4.mjs.map +0 -7
  379. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs +0 -987
  380. package/dist/lib/node-esm/chunk-2KZ4ODHU.mjs.map +0 -7
  381. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs +0 -182
  382. package/dist/lib/node-esm/chunk-2MMJF7DW.mjs.map +0 -7
  383. package/dist/lib/node-esm/chunk-2V3WSLUZ.mjs +0 -108
  384. package/dist/lib/node-esm/chunk-2V3WSLUZ.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-BAMZXJS4.mjs +0 -148
  388. package/dist/lib/node-esm/chunk-BAMZXJS4.mjs.map +0 -7
  389. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs +0 -377
  390. package/dist/lib/node-esm/chunk-BTGKI5IK.mjs.map +0 -7
  391. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs +0 -25
  392. package/dist/lib/node-esm/chunk-GZ4WL2IS.mjs.map +0 -7
  393. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs +0 -19
  394. package/dist/lib/node-esm/chunk-LCHTNRK7.mjs.map +0 -7
  395. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs +0 -620
  396. package/dist/lib/node-esm/chunk-NHSIAEDW.mjs.map +0 -7
  397. package/dist/lib/node-esm/chunk-OBVAURUU.mjs +0 -17
  398. package/dist/lib/node-esm/chunk-OBVAURUU.mjs.map +0 -7
  399. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs +0 -1891
  400. package/dist/lib/node-esm/chunk-TIPIOH2J.mjs.map +0 -7
  401. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs +0 -428
  402. package/dist/lib/node-esm/intent-resolver-AKVH66PH.mjs.map +0 -7
  403. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs +0 -170
  404. package/dist/lib/node-esm/markdown-MYGTDXT6.mjs.map +0 -7
  405. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs +0 -29
  406. package/dist/lib/node-esm/react-root-W6AVTL5M.mjs.map +0 -7
  407. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs +0 -110
  408. package/dist/lib/node-esm/react-surface-NLSZJGMO.mjs.map +0 -7
  409. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs +0 -23
  410. package/dist/lib/node-esm/settings-ZQHGVFBY.mjs.map +0 -7
  411. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs +0 -35
  412. package/dist/lib/node-esm/state-FSLLJ5TZ.mjs.map +0 -7
  413. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs +0 -85
  414. package/dist/lib/node-esm/toolkit-DHPKJITO.mjs.map +0 -7
  415. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  416. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  417. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  418. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  419. package/dist/types/src/capabilities/toolkit.d.ts +0 -6
  420. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  421. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  422. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  423. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  424. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  425. package/dist/types/src/components/ChannelContainer.stories.d.ts +0 -94
  426. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  427. package/dist/types/src/components/Chat.stories.d.ts +0 -93
  428. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  429. package/dist/types/src/components/ChatContainer.d.ts +0 -17
  430. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  431. package/dist/types/src/components/Comments.stories.d.ts +0 -158
  432. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  433. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  434. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  435. package/dist/types/src/components/CommentsThreadContainer.d.ts +0 -14
  436. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +0 -1
  437. package/dist/types/src/components/MessageContainer.d.ts +0 -14
  438. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  439. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  440. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -162
  441. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  442. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  443. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  444. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  445. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  446. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  447. package/dist/types/src/components/testing.d.ts.map +0 -1
  448. package/dist/types/src/types/schema.d.ts +0 -179
  449. package/dist/types/src/types/schema.d.ts.map +0 -1
  450. package/src/capabilities/capabilities.ts +0 -33
  451. package/src/capabilities/intent-resolver.ts +0 -348
  452. package/src/capabilities/toolkit.ts +0 -82
  453. package/src/components/CallSidebar.tsx +0 -18
  454. package/src/components/ChannelContainer.stories.tsx +0 -59
  455. package/src/components/ChatContainer.tsx +0 -145
  456. package/src/components/Comments.stories.tsx +0 -91
  457. package/src/components/CommentsContainer.tsx +0 -72
  458. package/src/components/ThreadComplementary.tsx +0 -181
  459. package/src/components/ThreadSettings.tsx +0 -16
  460. package/src/components/testing.ts +0 -51
  461. package/src/types/schema.ts +0 -33
  462. /package/dist/lib/browser/{ChannelContainer-BGDGZHV4.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  463. /package/dist/lib/{browser/ChatContainer-75KJZ4XR.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
@@ -2,12 +2,14 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { useAtomValue } from '@effect-atom/atom-react';
5
6
  import React, { memo, useMemo } from 'react';
6
7
 
7
- import { useCapability } from '@dxos/app-framework';
8
+ import { useCapability } from '@dxos/app-framework/ui';
9
+
10
+ import { ThreadCapabilities } from '#types';
8
11
 
9
12
  import { type EncodedTrackName, type UserState } from '../../calls';
10
- import { ThreadCapabilities } from '../../capabilities';
11
13
  import { VideoObject } from '../Media';
12
14
  import { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';
13
15
 
@@ -15,27 +17,39 @@ export const SCREENSHARE_SUFFIX = '_screenshare';
15
17
 
16
18
  export const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {
17
19
  const call = useCapability(ThreadCapabilities.CallManager);
18
- const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);
20
+ const self = useAtomValue(call.selfAtom);
21
+ const media = useAtomValue(call.mediaAtom);
22
+ const isSelf: boolean = self.id !== undefined && user.id !== undefined && user.id.startsWith(self.id);
19
23
  const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
20
24
 
21
- const pulledVideoStream =
22
- !isSelf && isScreenshare && user.tracks?.screenshareEnabled
23
- ? call.getVideoStream(user.tracks?.screenshare as EncodedTrackName)
24
- : !isSelf && !isScreenshare && user.tracks?.videoEnabled
25
- ? call.getVideoStream(user.tracks?.video as EncodedTrackName)
26
- : undefined;
25
+ // Get pulled video stream for non-self users.
26
+ const pulledVideoStream = useMemo<MediaStream | undefined>(() => {
27
+ if (isSelf) {
28
+ return undefined;
29
+ }
30
+ const trackName =
31
+ isScreenshare && user.tracks?.screenshareEnabled
32
+ ? (user.tracks?.screenshare as EncodedTrackName)
33
+ : !isScreenshare && user.tracks?.videoEnabled
34
+ ? (user.tracks?.video as EncodedTrackName)
35
+ : undefined;
36
+ return trackName ? media.pulledVideoStreams[trackName]?.stream : undefined;
37
+ }, [
38
+ isSelf,
39
+ isScreenshare,
40
+ media.pulledVideoStreams,
41
+ user.tracks?.screenshare,
42
+ user.tracks?.video,
43
+ user.tracks?.screenshareEnabled,
44
+ user.tracks?.videoEnabled,
45
+ ]);
27
46
 
28
47
  const videoStream = useMemo<MediaStream | undefined>(() => {
29
48
  if (isSelf) {
30
- if (isScreenshare) {
31
- return call.media.screenshareVideoStream;
32
- } else if (!isScreenshare) {
33
- return call.media.videoStream;
34
- }
35
- } else if (!isSelf) {
36
- return pulledVideoStream;
49
+ return isScreenshare ? media.screenshareVideoStream : media.videoStream;
37
50
  }
38
- }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);
51
+ return pulledVideoStream;
52
+ }, [isSelf, isScreenshare, media.videoStream, media.screenshareVideoStream, pulledVideoStream]);
39
53
 
40
54
  return (
41
55
  <ResponsiveGridItem
@@ -43,8 +57,8 @@ export const Participant = memo(({ item: user, debug, ...props }: ResponsiveGrid
43
57
  item={user}
44
58
  name={user.name}
45
59
  self={isSelf}
46
- screenshare={!!call.media.screenshareVideoStream}
47
- video={call.media.videoEnabled}
60
+ screenshare={!!media.screenshareVideoStream}
61
+ video={media.videoEnabled}
48
62
  mute={user ? !user.tracks?.audioEnabled : false}
49
63
  wave={user.raisedHand}
50
64
  speaking={user.speaking}
@@ -8,7 +8,6 @@ import { type ThemedClassName } from '@dxos/react-ui';
8
8
 
9
9
  import { type UserState } from '../../calls';
10
10
  import { ResponsiveGrid } from '../ResponsiveGrid';
11
-
12
11
  import { Participant, SCREENSHARE_SUFFIX } from './Participant';
13
12
 
14
13
  const getId = (user: UserState): string => user.id!;
@@ -5,11 +5,10 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useEffect, useState } from 'react';
7
7
 
8
- import { faker } from '@dxos/random';
9
- import { withTheme } from '@dxos/react-ui/testing';
8
+ import { random } from '@dxos/random';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
10
 
11
11
  import { translations } from '../../translations';
12
-
13
12
  import { ResponsiveGrid, type ResponsiveGridProps } from './ResponsiveGrid';
14
13
  import { ResponsiveGridItem, type ResponsiveGridItemProps } from './ResponsiveGridItem';
15
14
 
@@ -53,9 +52,9 @@ const TestCell = ({ item, ...props }: ResponsiveGridItemProps<TestItem>) => {
53
52
  );
54
53
  };
55
54
 
56
- type StoryProps = ResponsiveGridProps<TestItem> & { random?: boolean; autoHideGallery?: boolean };
55
+ type DefaultStoryProps = ResponsiveGridProps<TestItem> & { random?: boolean; autoHideGallery?: boolean };
57
56
 
58
- const DefaultStory = (props: StoryProps) => {
57
+ const DefaultStory = (props: DefaultStoryProps) => {
59
58
  const [pinned, setPinned] = useState<string | undefined>(
60
59
  (props.pinned ?? props.items.length > 1) ? props.items[0]?.id : undefined,
61
60
  );
@@ -89,10 +88,10 @@ const DefaultStory = (props: StoryProps) => {
89
88
  };
90
89
 
91
90
  const meta = {
92
- title: 'plugins/plugin-thread/ResponsiveGrid',
91
+ title: 'plugins/plugin-thread/components/ResponsiveGrid',
93
92
  component: ResponsiveGrid as any,
94
93
  render: DefaultStory,
95
- decorators: [withTheme],
94
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
96
95
  parameters: {
97
96
  layout: 'fullscreen',
98
97
  translations,
@@ -107,13 +106,13 @@ const videoUrls = [
107
106
  ];
108
107
 
109
108
  const createItem = (type?: 'image' | 'video') => {
110
- const id = faker.string.uuid();
109
+ const id = random.string.uuid();
111
110
  return {
112
111
  id,
113
112
  type,
114
- name: faker.person.fullName(),
113
+ name: random.person.fullName(),
115
114
  imageUrl: `https://placehold.co/3200x1800/333/999?font=roboto&text=${id.slice(0, 2)}`,
116
- videoUrl: faker.helpers.arrayElement(videoUrls),
115
+ videoUrl: random.helpers.arrayElement(videoUrls),
117
116
  };
118
117
  };
119
118
 
@@ -8,10 +8,10 @@ import { useResizeDetector } from 'react-resize-detector';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { type ThemedClassName } from '@dxos/react-ui';
10
10
  import { type Size } from '@dxos/react-ui-dnd';
11
- import { mx } from '@dxos/react-ui-theme';
11
+ import { mx } from '@dxos/ui-theme';
12
12
 
13
- import { ResponsiveContainer } from './ResponsiveContainer';
14
13
  import { type ResponsiveGridItemProps } from './ResponsiveGridItem';
14
+ import { ResponsivePanel } from './ResponsivePanel';
15
15
 
16
16
  const ASPECT_RATIO = 16 / 9;
17
17
  const MIN_GALLERY_HEIGHT = 250;
@@ -136,7 +136,7 @@ export const ResponsiveGrid = <T extends object = any>({
136
136
  );
137
137
 
138
138
  return (
139
- <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>
139
+ <div ref={containerRef} className={mx('dx-expander relative', classNames)}>
140
140
  {/* Placeholder elements to calculate layout. */}
141
141
  <div className='absolute inset-0 flex flex-col grow gap-2'>
142
142
  {/* Pinned item. */}
@@ -206,7 +206,7 @@ export const ResponsiveGrid = <T extends object = any>({
206
206
 
207
207
  const SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ debug, id }) => {
208
208
  return (
209
- <ResponsiveContainer>
209
+ <ResponsivePanel>
210
210
  <div
211
211
  {...{ 'data-grid-item': id }}
212
212
  className={mx('aspect-video overflow-hidden', debug && 'z-20 border-2 border-primary-500')}
@@ -214,7 +214,7 @@ const SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ deb
214
214
  {/* Maximum size placeholder image forces aspect ratio. */}
215
215
  <img alt='placeholder video' className={mx('opacity-0', maxImageSize)} />
216
216
  </div>
217
- </ResponsiveContainer>
217
+ </ResponsivePanel>
218
218
  );
219
219
  };
220
220
 
@@ -6,9 +6,9 @@ import React, { type CSSProperties, type PropsWithChildren, useEffect, useState
6
6
 
7
7
  import { Icon, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';
8
8
  import { Waveform } from '@dxos/react-ui-sfx';
9
- import { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';
9
+ import { groupHoverControlItemWithTransition, mx } from '@dxos/ui-theme';
10
10
 
11
- import { meta } from '../../meta';
11
+ import { meta } from '#meta';
12
12
 
13
13
  export type ResponsiveGridItemProps<T extends object = any> = PropsWithChildren<
14
14
  ThemedClassName<{
@@ -49,12 +49,12 @@ export const ResponsiveGridItem = <T extends object = any>({
49
49
  const iconProps: Record<string, { icon: string; label: string; classNames?: string }> = {
50
50
  wave: {
51
51
  icon: 'ph--hand-waving--duotone',
52
- label: t('icon wave'),
52
+ label: t('icon-wave.label'),
53
53
  classNames: 'animate-pulse bg-orange-500',
54
54
  },
55
55
  mute: {
56
56
  icon: 'ph--microphone-slash--regular',
57
- label: t('icon muted'),
57
+ label: t('icon-muted.label'),
58
58
  },
59
59
  };
60
60
 
@@ -76,7 +76,7 @@ export const ResponsiveGridItem = <T extends object = any>({
76
76
  return (
77
77
  <div
78
78
  className={mx(
79
- 'relative w-full h-full group',
79
+ 'dx-expander relative group',
80
80
  'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',
81
81
  speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',
82
82
  classNames,
@@ -89,11 +89,11 @@ export const ResponsiveGridItem = <T extends object = any>({
89
89
  {onClick && (
90
90
  <div className='z-10 absolute top-1 right-1 flex'>
91
91
  <IconButton
92
- classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}
92
+ classNames={mx('p-1 min-h-1 rounded-sm', groupHoverControlItemWithTransition)}
93
93
  iconOnly
94
94
  icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}
95
95
  size={pinned ? 5 : 4}
96
- label={pinned ? t('icon unpin') : t('icon pin')}
96
+ label={pinned ? t('icon-unpin.label') : t('icon-pin.label')}
97
97
  onClick={() => onClick?.(item)}
98
98
  />
99
99
  </div>
@@ -106,7 +106,10 @@ export const ResponsiveGridItem = <T extends object = any>({
106
106
  {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}
107
107
  {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
108
108
  <div
109
- className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}
109
+ className={mx(
110
+ 'bg-neutral-800 text-neutral-100 py-0.5 truncate rounded-sm',
111
+ pinned ? 'px-2' : 'px-1 text-xs',
112
+ )}
110
113
  >
111
114
  {name}
112
115
  </div>
@@ -118,7 +121,7 @@ export const ResponsiveGridItem = <T extends object = any>({
118
121
  {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||
119
122
  (props && (
120
123
  <IconButton
121
- classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}
124
+ classNames={mx('p-1 min-h-1 rounded-sm', props?.classNames)}
122
125
  icon={props?.icon}
123
126
  label={props?.label}
124
127
  size={pinned ? 5 : 4}
@@ -5,26 +5,25 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { withTheme } from '@dxos/react-ui/testing';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
9
9
 
10
10
  import { translations } from '../../translations';
11
11
  import { VideoObject as VideoObjectComponent } from '../Media';
12
-
13
- import { ResponsiveContainer } from './ResponsiveContainer';
12
+ import { ResponsivePanel } from './ResponsivePanel';
14
13
 
15
14
  const meta = {
16
- title: 'plugins/plugin-thread/ResponsiveContainer',
17
- component: ResponsiveContainer,
18
- decorators: [withTheme],
15
+ title: 'plugins/plugin-thread/components/ResponsivePanel',
16
+ component: ResponsivePanel,
17
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
19
18
  parameters: {
20
19
  layout: 'fullscreen',
21
20
  translations,
22
21
  },
23
- } satisfies Meta<typeof ResponsiveContainer>;
22
+ } satisfies Meta<typeof ResponsivePanel>;
24
23
 
25
24
  export default meta;
26
25
 
27
- type Story = StoryObj<typeof ResponsiveContainer>;
26
+ type Story = StoryObj<typeof ResponsivePanel>;
28
27
 
29
28
  export const Image: Story = {
30
29
  args: {
@@ -4,21 +4,21 @@
4
4
 
5
5
  import React, { type PropsWithChildren } from 'react';
6
6
 
7
- import { mx } from '@dxos/react-ui-theme';
7
+ import { mx } from '@dxos/ui-theme';
8
8
 
9
9
  /**
10
10
  * A container component that maintains the child's aspect ratio while centering its content.
11
11
  * The container will scale to fit within its parent's bounds while preserving the aspect ratio.
12
12
  *
13
13
  * @example
14
- * <ResponsiveContainer>
14
+ * <ResponsivePanel>
15
15
  * <VideoObject />
16
- * </ResponsiveContainer>
16
+ * </ResponsivePanel>
17
17
  */
18
- export const ResponsiveContainer = ({ children }: PropsWithChildren) => {
18
+ export const ResponsivePanel = ({ children }: PropsWithChildren) => {
19
19
  return (
20
20
  // Outer container that takes full size of parent.
21
- <div role='none' className='relative flex w-full h-full'>
21
+ <div role='none' className='dx-expander relative flex'>
22
22
  {/* Absolute positioning layer for centering content. */}
23
23
  <div role='none' className='absolute inset-0 flex justify-center items-center'>
24
24
  {/* Content container that maintains given aspect ratio and proper scaling. */}
@@ -2,6 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './ResponsiveContainer';
5
+ export * from './ResponsivePanel';
6
6
  export * from './ResponsiveGrid';
7
7
  export * from './ResponsiveGridItem';
@@ -0,0 +1,31 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+
7
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
8
+
9
+ import { translations } from '../../translations';
10
+ import { ThreadSettings } from './ThreadSettings';
11
+
12
+ const meta = {
13
+ title: 'plugins/plugin-thread/components/ThreadSettings',
14
+ component: ThreadSettings,
15
+ tags: ['settings'],
16
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
17
+ parameters: {
18
+ layout: 'fullscreen',
19
+ translations,
20
+ },
21
+ } satisfies Meta<typeof ThreadSettings>;
22
+
23
+ export default meta;
24
+
25
+ type Story = StoryObj<typeof meta>;
26
+
27
+ export const Default: Story = {
28
+ args: {
29
+ settings: {},
30
+ },
31
+ };
@@ -0,0 +1,20 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import React from 'react';
6
+
7
+ import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { useTranslation } from '@dxos/react-ui';
9
+ import { Settings as SettingsForm } from '@dxos/react-ui-form';
10
+
11
+ import { meta } from '#meta';
12
+ import { type Settings } from '#types';
13
+
14
+ export type ThreadSettingsProps = AppSurface.SettingsArticleProps<Settings.Settings>;
15
+
16
+ // TODO(burdon): Settings.
17
+ export const ThreadSettings = ({ settings: _settings }: ThreadSettingsProps) => {
18
+ const { t: _t } = useTranslation(meta.id);
19
+ return <SettingsForm.Viewport></SettingsForm.Viewport>;
20
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ export { ThreadSettings as default } from './ThreadSettings';
@@ -2,17 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from 'react';
5
+ import { type ComponentType, lazy } from 'react';
6
6
 
7
- export const ChannelContainer = lazy(() => import('./ChannelContainer'));
8
- export const ChatContainer = lazy(() => import('./ChatContainer'));
9
-
10
- // TODO(wittjosiah): Suspense boundary for sidebar?
11
7
  export * from './Call';
12
- export * from './CallDebugPanel';
13
- export * from './CallSidebar';
14
- export * from './CommentsContainer';
15
- export * from './CommentsThreadContainer';
16
- export * from './MessageContainer';
17
- export * from './ThreadComplementary';
18
- export * from './ThreadSettings';
8
+ export * from './CommentsPanel';
9
+ export * from './MessagePanel';
10
+
11
+ export const ThreadSettings: ComponentType<any> = lazy(() => import('./ThreadSettings'));
@@ -10,12 +10,11 @@ import { JsonView, Panel } from '@dxos/devtools';
10
10
  import { log } from '@dxos/log';
11
11
  import { IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
12
12
 
13
- import { type EncodedTrackName, type GlobalState } from '../calls';
14
- import { meta } from '../meta';
13
+ import { meta } from '#meta';
15
14
 
16
- export type CallDebugPanelProps = ThemedClassName<{
17
- state?: GlobalState;
18
- }>;
15
+ import { type EncodedTrackName, type GlobalState } from '../../calls';
16
+
17
+ export type CallDebugPanelProps = ThemedClassName<{ state?: GlobalState }>;
19
18
 
20
19
  export const CallDebugPanel = ({ state }: CallDebugPanelProps) => {
21
20
  const { t } = useTranslation(meta.id);
@@ -72,25 +71,25 @@ export const CallDebugPanel = ({ state }: CallDebugPanelProps) => {
72
71
  icon='ph--video-conference--regular'
73
72
  open={open}
74
73
  onToggle={handleToggle}
75
- title={t('meeting status title')}
76
- maxHeight={false}
74
+ title={t('meeting-status.title')}
77
75
  info={<div className='flex items-center gap-2'> {state?.call.joined ? 'Active' : 'Inactive'}</div>}
76
+ maxHeight={0}
78
77
  >
79
- <div className='flex flex-col w-full gap-2 text-xs'>
80
- <div className='flex items-center gap-2'>
78
+ <div className='flex flex-col w-full text-xs'>
79
+ <div className='flex items-center gap-2 items-center'>
81
80
  <Input.Root>
82
- <Input.Label classNames={'text-sm'}>{t('show webrtc stats title')}</Input.Label>
83
- <Input.Checkbox checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />
81
+ <Input.Switch checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />
82
+ <Input.Label>{t('show-webrtc-stats.title')}</Input.Label>
84
83
  </Input.Root>
85
84
  </div>
86
- <div className='flex items-center gap-2'>
85
+ <div className='flex items-center gap-2 items-center'>
87
86
  <Input.Root>
88
- <Input.Label classNames={'text-sm'}>{t('show calls history title')}</Input.Label>
89
- <Input.Checkbox checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />
87
+ <Input.Switch checked={showServiceHistory} onCheckedChange={handleToggleServiceHistory} />
88
+ <Input.Label>{t('show-calls-history.title')}</Input.Label>
90
89
  </Input.Root>
91
90
  </div>
92
- <div className='flex items-center gap-2'>
93
- <IconButton classNames={'text-sm'} icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />
91
+ <div className='flex items-center gap-2 items-center'>
92
+ <IconButton icon='ph--copy--regular' label={'copy raw'} onClick={handleCopyRaw} />
94
93
  </div>
95
94
  <Table rows={rows} />
96
95
  {showDetailedWebRTCStats && <JsonView data={{ stats }} />}
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { CallDebugPanel as default } from './CallDebugPanel';
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { useAtomValue } from '@effect-atom/atom-react';
6
+ import React from 'react';
7
+
8
+ import { useCapability } from '@dxos/app-framework/ui';
9
+
10
+ import { ThreadCapabilities } from '#types';
11
+
12
+ import ChannelContainer from '../ChannelContainer';
13
+
14
+ export const CallSidebar = () => {
15
+ const call = useCapability(ThreadCapabilities.CallManager);
16
+ const roomId = useAtomValue(call.roomIdAtom);
17
+ return <ChannelContainer subject={undefined} attendableId={roomId ?? ''} roomId={roomId} role='article' />;
18
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { CallSidebar as default } from './CallSidebar';
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React from 'react';
7
+
8
+ import { Capability } from '@dxos/app-framework';
9
+ import { withPluginManager } from '@dxos/app-framework/testing';
10
+ import { AppCapabilities } from '@dxos/app-toolkit';
11
+ import { Query, useDatabase, useQuery } from '@dxos/react-client/echo';
12
+ import { withLayout, withTheme, Loading } from '@dxos/react-ui/testing';
13
+ import { Message, Thread } from '@dxos/types';
14
+
15
+ import { createThreadPlugins } from '#testing';
16
+ import { Channel } from '#types';
17
+
18
+ import { translations } from '../../translations';
19
+ import { ChannelContainer, type ChannelContainerProps } from './ChannelContainer';
20
+
21
+ // TODO(wittjosiah): Channel doesn't render full height.
22
+ const DefaultStory = ({ roomId }: ChannelContainerProps) => {
23
+ const db = useDatabase();
24
+ const [channel] = useQuery(db, Query.type(Channel.Channel));
25
+ if (!channel) {
26
+ return <Loading data={{ db: !!db, channel: !!channel }} />;
27
+ }
28
+
29
+ return <ChannelContainer subject={channel} attendableId='story' roomId={roomId} role='article' />;
30
+ };
31
+
32
+ const meta = {
33
+ title: 'plugins/plugin-thread/containers/ChannelContainer',
34
+ component: ChannelContainer,
35
+ render: DefaultStory,
36
+ decorators: [
37
+ withTheme(),
38
+ withLayout({ layout: 'column' }),
39
+ withPluginManager({
40
+ plugins: [...(await createThreadPlugins())],
41
+ capabilities: [Capability.contributes(AppCapabilities.Schema, [Channel.Channel, Thread.Thread, Message.Message])],
42
+ }),
43
+ ],
44
+ parameters: {
45
+ translations,
46
+ },
47
+ } satisfies Meta<typeof ChannelContainer>;
48
+
49
+ export default meta;
50
+
51
+ type Story = StoryObj<typeof meta>;
52
+
53
+ export const Default: Story = {
54
+ args: {
55
+ // Fixed room for testing.
56
+ subject: undefined,
57
+ attendableId: 'story',
58
+ role: 'article',
59
+ roomId: '04a1d1911703b8e929d0649021a965',
60
+ },
61
+ };