@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,13 +2,12 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { computed } from '@preact/signals-core';
5
+ import { Atom, type Registry } from '@effect-atom/atom-react';
6
6
 
7
7
  import { Event, synchronized } from '@dxos/async';
8
8
  import { type Client } from '@dxos/client';
9
9
  import { Resource } from '@dxos/context';
10
10
  import { invariant } from '@dxos/invariant';
11
- import { live } from '@dxos/live-object';
12
11
  import { type Tracks } from '@dxos/protocols/proto/dxos/edge/calls';
13
12
  import { isNonNullable } from '@dxos/util';
14
13
 
@@ -31,84 +30,103 @@ export class CallManager extends Resource {
31
30
  public readonly left = new Event<string>();
32
31
 
33
32
  /**
34
- * Live object state. Is changed on internal events.
33
+ * Atom-based state. Updated via `_updateState()`.
35
34
  * CAUTION: Do not change directly.
36
35
  */
37
- private readonly _state = live<GlobalState>({
36
+ private readonly _stateAtom = Atom.make<GlobalState>({
38
37
  call: {},
39
38
  media: { pulledAudioTracks: {}, pulledVideoStreams: {} },
40
39
  });
41
40
 
42
- // TODO(wittjosiah): This shouldn't be necessary, live-object's signals should be granular.
43
- private readonly _raisedHandSignal = computed(() => this._state.call.raisedHand ?? false);
44
- private readonly _speakingSignal = computed(() => this._state.call.speaking ?? false);
45
- private readonly _joinedSignal = computed(() => this._state.call.joined ?? false);
41
+ // Derived atoms for reactive subscriptions.
42
+ private readonly _roomIdAtom = Atom.make((get) => get(this._stateAtom).call.roomId);
43
+ private readonly _raisedHandAtom = Atom.make((get) => get(this._stateAtom).call.raisedHand ?? false);
44
+ private readonly _speakingAtom = Atom.make((get) => get(this._stateAtom).call.speaking ?? false);
45
+ private readonly _joinedAtom = Atom.make((get) => get(this._stateAtom).call.joined ?? false);
46
+ private readonly _selfAtom = Atom.make((get) => get(this._stateAtom).call.self ?? {});
47
+ private readonly _tracksAtom = Atom.make((get) => get(this._stateAtom).call.tracks ?? {});
48
+ private readonly _usersAtom = Atom.make((get) => get(this._stateAtom).call.users ?? []);
49
+ private readonly _mediaAtom = Atom.make((get) => get(this._stateAtom).media);
50
+ private readonly _audioTracksToPlayAtom = Atom.make((get) => {
51
+ const state = get(this._stateAtom);
52
+ return (state.call.users ?? [])
53
+ .map((user: UserState) => (user.tracks?.audioEnabled ? user.tracks?.audio : undefined))
54
+ .filter(isNonNullable)
55
+ .map((track: string) => state.media.pulledAudioTracks[track as EncodedTrackName]?.track)
56
+ .filter(isNonNullable);
57
+ });
58
+ private readonly _videoStreamAtomFamily = Atom.family<EncodedTrackName, Atom.Atom<MediaStream | undefined>>((name) =>
59
+ Atom.make((get) => get(this._stateAtom).media.pulledVideoStreams[name]?.stream),
60
+ );
61
+ private readonly _activityAtomFamily = Atom.family<string, Atom.Atom<ActivityState | undefined>>((key) =>
62
+ Atom.make((get) => get(this._stateAtom).call.activities?.[key]),
63
+ );
46
64
 
47
65
  private readonly _swarmSynchronizer: CallSwarmSynchronizer;
48
66
  private readonly _mediaManager: MediaManager;
49
67
 
50
- /** @reactive */
51
- get roomId(): string | undefined {
52
- return this._state.call.roomId;
68
+ //
69
+ // Derived atoms for reactive UI subscriptions.
70
+ //
71
+
72
+ /** Derived atom for roomId. */
73
+ get roomIdAtom(): Atom.Atom<string | undefined> {
74
+ return this._roomIdAtom;
53
75
  }
54
76
 
55
- /** @reactive */
56
- get raisedHand(): boolean {
57
- return this._raisedHandSignal.value;
77
+ /** Derived atom for raisedHand. */
78
+ get raisedHandAtom(): Atom.Atom<boolean> {
79
+ return this._raisedHandAtom;
58
80
  }
59
81
 
60
- /** @reactive */
61
- get speaking(): boolean {
62
- return this._speakingSignal.value;
82
+ /** Derived atom for speaking. */
83
+ get speakingAtom(): Atom.Atom<boolean> {
84
+ return this._speakingAtom;
63
85
  }
64
86
 
65
- /** @reactive */
66
- get joined(): boolean {
67
- return this._joinedSignal.value;
87
+ /** Derived atom for joined. */
88
+ get joinedAtom(): Atom.Atom<boolean> {
89
+ return this._joinedAtom;
68
90
  }
69
91
 
70
- /** @reactive */
71
- get self(): UserState {
72
- return this._state.call.self ?? {};
92
+ /** Derived atom for self. */
93
+ get selfAtom(): Atom.Atom<UserState> {
94
+ return this._selfAtom;
73
95
  }
74
96
 
75
- /** @reactive */
76
- get tracks(): Tracks {
77
- return this._state.call.tracks ?? {};
97
+ /** Derived atom for tracks. */
98
+ get tracksAtom(): Atom.Atom<Tracks> {
99
+ return this._tracksAtom;
78
100
  }
79
101
 
80
- /** @reactive */
81
- get users(): UserState[] {
82
- return this._state.call.users ?? [];
102
+ /** Derived atom for users. */
103
+ get usersAtom(): Atom.Atom<UserState[]> {
104
+ return this._usersAtom;
83
105
  }
84
106
 
85
- /** @reactive */
86
- get media() {
87
- return this._state.media;
107
+ /** Derived atom for media. */
108
+ get mediaAtom(): Atom.Atom<MediaState> {
109
+ return this._mediaAtom;
88
110
  }
89
111
 
90
- /** @reactive */
91
- get audioTracksToPlay(): MediaStreamTrack[] {
92
- return (this._state.call.users ?? [])
93
- .map((user) => (user.tracks?.audioEnabled ? user.tracks?.audio : undefined))
94
- .filter(isNonNullable)
95
- .map((track) => this._state.media.pulledAudioTracks[track as EncodedTrackName]?.track)
96
- .filter(isNonNullable);
112
+ /** Derived atom for audioTracksToPlay. */
113
+ get audioTracksToPlayAtom(): Atom.Atom<MediaStreamTrack[]> {
114
+ return this._audioTracksToPlayAtom;
97
115
  }
98
116
 
99
- /** @reactive */
100
- get state() {
101
- return this._state;
117
+ /** Returns the full state atom for reactive subscriptions. */
118
+ get stateAtom(): Atom.Atom<GlobalState> {
119
+ return this._stateAtom;
102
120
  }
103
121
 
104
- /** @reactive */
105
- getVideoStream(name?: EncodedTrackName): MediaStream | undefined {
106
- return name ? this._state.media.pulledVideoStreams[name]?.stream : undefined;
122
+ /** Returns a derived atom for a video stream by name. */
123
+ videoStreamAtom(name: EncodedTrackName): Atom.Atom<MediaStream | undefined> {
124
+ return this._videoStreamAtomFamily(name);
107
125
  }
108
126
 
109
- /** @reactive */
110
- getActivity(key: string): ActivityState | undefined {
111
- return this._state.call.activities?.[key];
127
+ /** Returns a derived atom for an activity by key. */
128
+ activityAtom(key: string): Atom.Atom<ActivityState | undefined> {
129
+ return this._activityAtomFamily(key);
112
130
  }
113
131
 
114
132
  setRoomId(roomId: string): void {
@@ -152,7 +170,10 @@ export class CallManager extends Resource {
152
170
  }
153
171
 
154
172
  // TODO(burdon): Can this be mocked?
155
- constructor(private readonly _client: Client) {
173
+ constructor(
174
+ private readonly _client: Client,
175
+ private readonly _registry: Registry.Registry,
176
+ ) {
156
177
  super();
157
178
  this._client.config.getOrThrow('runtime.services.edge.url');
158
179
  const networkService = this._client.services.services.NetworkService;
@@ -205,7 +226,8 @@ export class CallManager extends Resource {
205
226
  this._swarmSynchronizer.setJoined(false);
206
227
  await this._swarmSynchronizer.leave();
207
228
  await this._mediaManager.leave();
208
- this.roomId && this.left.emit(this.roomId);
229
+ const roomId = this._registry.get(this._roomIdAtom);
230
+ roomId && this.left.emit(roomId);
209
231
  }
210
232
 
211
233
  private _onCallStateUpdated(state: CallState): void {
@@ -240,7 +262,9 @@ export class CallManager extends Resource {
240
262
  * Only this method is allowed to change state.
241
263
  */
242
264
  private _updateState(): void {
243
- this._state.call = this._swarmSynchronizer._getState();
244
- this._state.media = this._mediaManager._getState();
265
+ this._registry.set(this._stateAtom, {
266
+ call: this._swarmSynchronizer._getState(),
267
+ media: this._mediaManager._getState(),
268
+ });
245
269
  }
246
270
  }
@@ -50,7 +50,7 @@ export type CallState = {
50
50
  tracks?: UserState['tracks'];
51
51
  };
52
52
 
53
- export type CallSwarmSynchronizerParams = { networkService: NetworkService };
53
+ export type CallSwarmSynchronizerProps = { networkService: NetworkService };
54
54
 
55
55
  /**
56
56
  * Period for peer to reconnect to the call swarm gracefully if connection was lost abruptly.
@@ -76,7 +76,7 @@ export class CallSwarmSynchronizer extends Resource {
76
76
 
77
77
  private _sendStateTask?: DeferredTask = undefined;
78
78
 
79
- constructor({ networkService }: CallSwarmSynchronizerParams) {
79
+ constructor({ networkService }: CallSwarmSynchronizerProps) {
80
80
  super();
81
81
  this._networkService = networkService;
82
82
  }
@@ -51,7 +51,7 @@ const MAX_WEB_CAM_FRAMERATE = 24;
51
51
  const MAX_WEB_CAM_BITRATE = 120_0000;
52
52
  const RETRY_INTERVAL = 100;
53
53
 
54
- export type MediaManagerParams = {
54
+ export type MediaManagerProps = {
55
55
  serviceConfig: CallsServiceConfig;
56
56
  };
57
57
 
@@ -59,9 +59,13 @@ const USE_INAUDIBLE_AUDIO = true;
59
59
 
60
60
  export class MediaManager extends Resource {
61
61
  public readonly stateUpdated = new Event<MediaState>();
62
- private readonly _state: MediaState = { pulledVideoStreams: {}, pulledAudioTracks: {} };
63
- private _speakingMonitor?: SpeakingMonitor = undefined;
64
62
 
63
+ private readonly _state: MediaState = {
64
+ pulledVideoStreams: {},
65
+ pulledAudioTracks: {},
66
+ };
67
+
68
+ private _speakingMonitor?: SpeakingMonitor = undefined;
65
69
  private _trackToReconcile: EncodedTrackName[] = [];
66
70
  private _blackCanvasStreamTrack?: MediaStreamTrack = undefined;
67
71
  private _inaudibleAudioStreamTrack?: MediaStreamTrack = undefined;
@@ -85,6 +89,7 @@ export class MediaManager extends Resource {
85
89
  width: VIDEO_WIDTH,
86
90
  height: VIDEO_HEIGHT,
87
91
  });
92
+
88
93
  this._state.videoTrack = this._blackCanvasStreamTrack;
89
94
  this._state.videoStream = new MediaStream();
90
95
  this._state.videoStream.addTrack(this._state.videoTrack);
@@ -137,6 +142,7 @@ export class MediaManager extends Resource {
137
142
  this._state.videoStream!.removeTrack(this._state.videoTrack!);
138
143
  this._state.videoTrack = await getUserMediaTrack('videoinput', { width: VIDEO_WIDTH, height: VIDEO_HEIGHT });
139
144
  this._state.videoStream!.addTrack(this._state.videoTrack);
145
+
140
146
  this._state.videoEnabled = true;
141
147
  this.stateUpdated.emit(this._state);
142
148
  this._pushTracksTask!.schedule();
@@ -226,7 +232,6 @@ export class MediaManager extends Resource {
226
232
  // Wait for cloudflare to process the track.
227
233
  await cancelWithContext(this._ctx, sleep(800));
228
234
  const trackNames = this._trackToReconcile;
229
-
230
235
  const tracksToPull = trackNames.filter(
231
236
  (name) => !this._state.pulledAudioTracks[name] && !this._state.pulledVideoStreams[name],
232
237
  );
@@ -258,8 +263,8 @@ export class MediaManager extends Resource {
258
263
  currentAudioTracks: Object.keys(this._state.pulledAudioTracks),
259
264
  currentVideoStreams: Object.keys(this._state.pulledVideoStreams),
260
265
  });
261
- this.stateUpdated.emit(this._state);
262
266
 
267
+ this.stateUpdated.emit(this._state);
263
268
  if (pullResults.some(({ shouldRetry }) => shouldRetry)) {
264
269
  await cancelWithContext(this._ctx, sleep(RETRY_INTERVAL));
265
270
  log.info('retrying pull tracks', { tracksToPull });
@@ -296,7 +301,6 @@ export class MediaManager extends Resource {
296
301
  }
297
302
 
298
303
  const shouldRetry = pushVideoResult.shouldRetry || pushAudioResult.shouldRetry || pushScreenshareResult.shouldRetry;
299
-
300
304
  if (updated) {
301
305
  this.stateUpdated.emit(this._state);
302
306
  }
@@ -356,7 +360,6 @@ export class MediaManager extends Resource {
356
360
  }
357
361
 
358
362
  const ctx = this._ctx.derive();
359
-
360
363
  try {
361
364
  return {
362
365
  track: await this._state.peer!.pushTrack({
@@ -14,7 +14,6 @@ import {
14
14
  type TrackObject,
15
15
  type TracksResponse,
16
16
  } from '../types';
17
-
18
17
  import { HistoryCache } from './history-cache';
19
18
  import { BulkRequestDispatcher, FIFOScheduler } from './task-scheduling';
20
19
 
@@ -27,7 +26,7 @@ export type Session = {
27
26
 
28
27
  export type CallsServiceConfig = {
29
28
  apiBase: string;
30
- apiExtraParams?: string;
29
+ apiExtraProps?: string;
31
30
  iceServers?: RTCIceServer[];
32
31
  };
33
32
 
@@ -60,13 +60,12 @@ const userGestureEvents = [
60
60
  */
61
61
  export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context }): Promise<MediaStreamTrack> => {
62
62
  const audioContext = new window.AudioContext();
63
+
63
64
  const oscillator = audioContext.createOscillator();
64
65
  oscillator.type = 'triangle';
65
- // roughly sounds like a box fan
66
66
  oscillator.frequency.setValueAtTime(20, audioContext.currentTime);
67
67
 
68
68
  const gainNode = audioContext.createGain();
69
- // even w/ gain at 0 some packets are sent
70
69
  gainNode.gain.setValueAtTime(0, audioContext.currentTime);
71
70
  oscillator.connect(gainNode);
72
71
 
@@ -85,6 +84,7 @@ export const createInaudibleAudioStreamTrack = async ({ ctx }: { ctx: Context })
85
84
  audioContextStartedPreviously = true;
86
85
  ensureOscillatorStarted();
87
86
  }
87
+
88
88
  if (audioContext.state === 'suspended' || (audioContext.state as string) === 'interrupted') {
89
89
  resumeAudioContext();
90
90
  }
@@ -27,8 +27,8 @@ export class FIFOScheduler {
27
27
  }
28
28
 
29
29
  // TODO(mykola): Reconcile with @dxos/async task scheduling.
30
- export class BulkRequestDispatcher<RequestEntryParams, BulkResponse> {
31
- #currentBatch: RequestEntryParams[];
30
+ export class BulkRequestDispatcher<RequestEntryProps, BulkResponse> {
31
+ #currentBatch: RequestEntryProps[];
32
32
  #currentBulkResponse: Promise<BulkResponse> | null;
33
33
  #batchSizeLimit: number;
34
34
 
@@ -43,8 +43,8 @@ export class BulkRequestDispatcher<RequestEntryParams, BulkResponse> {
43
43
  * At the event loop iteration end, the accumulated entries will be dispatched as a bulk request.
44
44
  */
45
45
  doBulkRequest(
46
- params: RequestEntryParams,
47
- bulkRequestFunc: (bulkCopy: RequestEntryParams[]) => Promise<BulkResponse>,
46
+ params: RequestEntryProps,
47
+ bulkRequestFunc: (bulkCopy: RequestEntryProps[]) => Promise<BulkResponse>,
48
48
  ): Promise<BulkResponse> {
49
49
  if (this.#currentBatch.length >= this.#batchSizeLimit) {
50
50
  // If it reaches the batch size limit, we make another bulk request.
@@ -12,13 +12,14 @@ import { log } from '@dxos/log';
12
12
  import { Config, useConfig } from '@dxos/react-client';
13
13
  import { withClientProvider } from '@dxos/react-client/testing';
14
14
  import { Button } from '@dxos/react-ui';
15
+ import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
15
16
  import { withTheme } from '@dxos/react-ui/testing';
16
- import { Json } from '@dxos/react-ui-syntax-highlighter';
17
17
 
18
18
  const testVideo = new URL('../testing/video.mp4', import.meta.url).href;
19
19
 
20
+ import { useBlackCanvasStreamTrack, useInaudibleAudioStreamTrack, useVideoStreamTrack } from '#hooks';
21
+
20
22
  import { CALLS_URL, CallsServicePeer, type TrackObject } from './calls';
21
- import { useBlackCanvasStreamTrack, useInaudibleAudioStreamTrack, useVideoStreamTrack } from './hooks';
22
23
 
23
24
  // TODO(burdon): THIS IS TOO COMPLEX FOR A TEST SETUP.
24
25
  const pushAndPullTrack = (mediaStreamTrack?: MediaStreamTrack) => {
@@ -130,9 +131,9 @@ const pushAndPullTrack = (mediaStreamTrack?: MediaStreamTrack) => {
130
131
  };
131
132
  };
132
133
 
133
- type StoryProps = { source: string };
134
+ type DefaultStoryProps = { source: string };
134
135
 
135
- const DefaultStory = ({ source }: StoryProps) => {
136
+ const DefaultStory = ({ source }: DefaultStoryProps) => {
136
137
  const pushVideoElement = useRef<HTMLVideoElement>(null);
137
138
  const pullVideoElement = useRef<HTMLVideoElement>(null);
138
139
  // Get video stream track.
@@ -166,16 +167,16 @@ const DefaultStory = ({ source }: StoryProps) => {
166
167
  Re-pull video
167
168
  </Button>
168
169
  </div>
169
- <Json data={metrics} />
170
+ <JsonHighlighter data={metrics} />
170
171
  </div>
171
172
  );
172
173
  };
173
174
 
174
175
  const meta = {
175
- title: 'plugins/plugin-thread/calls-service',
176
+ title: 'plugins/plugin-thread/experimental/Calls',
176
177
  render: DefaultStory,
177
178
  decorators: [
178
- withTheme,
179
+ withTheme(),
179
180
  withClientProvider({
180
181
  config: new Config({
181
182
  runtime: {
@@ -208,7 +209,7 @@ export const InaudibleAudioStreamTrack = {
208
209
 
209
210
  return (
210
211
  <div className='flex flex-col gap-4 items-center'>
211
- <Json data={metrics} />
212
+ <JsonHighlighter data={metrics} />
212
213
  <Button onClick={rePullTrack}>Re-pull audio</Button>
213
214
  </div>
214
215
  );
@@ -221,7 +222,7 @@ export const BlackVideoStreamTrack = {
221
222
  const { rePullTrack, metrics } = pushAndPullTrack(videoStreamTrack);
222
223
  return (
223
224
  <div className='flex flex-col gap-4 items-center'>
224
- <Json data={metrics} />
225
+ <JsonHighlighter data={metrics} />
225
226
  <Button onClick={rePullTrack}>Re-pull audio</Button>
226
227
  </div>
227
228
  );