@dxos/plugin-thread 0.8.3 → 0.8.4-main.1068cf700f

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 (462) hide show
  1. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs +189 -0
  2. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs +18 -0
  4. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +8 -0
  6. package/dist/lib/browser/call-manager-GDGIKJKN.mjs +26 -0
  7. package/dist/lib/browser/call-manager-GDGIKJKN.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-2FIHSX35.mjs +293 -0
  9. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-4EUEMHNI.mjs +1817 -0
  11. package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-JKQUJOTX.mjs → chunk-CP7E2HRE.mjs} +3 -3
  13. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-4H4A264L.mjs → chunk-ERK254BS.mjs} +407 -305
  15. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  16. package/dist/lib/browser/chunk-ISCHODBV.mjs +106 -0
  17. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  19. package/dist/lib/browser/chunk-JBB73URQ.mjs +184 -0
  20. package/dist/lib/browser/chunk-JBB73URQ.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-RH7XTXSR.mjs +106 -0
  22. package/dist/lib/browser/chunk-RH7XTXSR.mjs.map +7 -0
  23. package/dist/lib/browser/index.mjs +164 -151
  24. package/dist/lib/browser/index.mjs.map +4 -4
  25. package/dist/lib/browser/markdown-YJCSOWXX.mjs +210 -0
  26. package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +7 -0
  27. package/dist/lib/browser/meta.json +1 -1
  28. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs +441 -0
  29. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +7 -0
  30. package/dist/lib/browser/react-root-FHK2SVPU.mjs +25 -0
  31. package/dist/lib/browser/react-root-FHK2SVPU.mjs.map +7 -0
  32. package/dist/lib/browser/react-surface-7MQA6VSH.mjs +111 -0
  33. package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +7 -0
  34. package/dist/lib/browser/repair-6OZ75AUU.mjs +38 -0
  35. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +7 -0
  36. package/dist/lib/browser/settings-TWKOTGSU.mjs +33 -0
  37. package/dist/lib/browser/settings-TWKOTGSU.mjs.map +7 -0
  38. package/dist/lib/browser/state-SJR2GL5G.mjs +24 -0
  39. package/dist/lib/browser/state-SJR2GL5G.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +10 -12
  41. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs +190 -0
  42. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs.map +7 -0
  43. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs +19 -0
  44. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs.map +7 -0
  45. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  46. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs +27 -0
  47. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-PGRP3O4O.mjs → chunk-ABUFOZVX.mjs} +3 -3
  49. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  50. package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs +185 -0
  51. package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs.map +7 -0
  52. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  53. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs +107 -0
  54. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-WXNPD542.mjs → chunk-QP3KQOPQ.mjs} +406 -305
  56. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs +1818 -0
  58. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-VBI32FGI.mjs +108 -0
  60. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs +294 -0
  62. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  63. package/dist/lib/node-esm/index.mjs +164 -151
  64. package/dist/lib/node-esm/index.mjs.map +4 -4
  65. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs +211 -0
  66. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs +442 -0
  69. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +7 -0
  70. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs +26 -0
  71. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs.map +7 -0
  72. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs +112 -0
  73. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +7 -0
  74. package/dist/lib/node-esm/repair-6777EPOM.mjs +39 -0
  75. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +7 -0
  76. package/dist/lib/node-esm/settings-5O254B3Z.mjs +34 -0
  77. package/dist/lib/node-esm/settings-5O254B3Z.mjs.map +7 -0
  78. package/dist/lib/node-esm/state-5R3TZJQE.mjs +25 -0
  79. package/dist/lib/node-esm/state-5R3TZJQE.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +10 -12
  81. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  82. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/index.d.ts +2 -0
  84. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/thread-blueprint.d.ts +21 -0
  86. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  87. package/dist/types/src/calls/call-manager.d.ts +40 -30
  88. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  89. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  90. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  91. package/dist/types/src/calls/media-manager.d.ts +2 -2
  92. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  93. package/dist/types/src/calls/types.d.ts +1 -1
  94. package/dist/types/src/calls/types.d.ts.map +1 -1
  95. package/dist/types/src/calls/util/calls-service.d.ts +9 -4
  96. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  97. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  98. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  99. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  100. package/dist/types/src/calls-service.stories.d.ts +23 -0
  101. package/dist/types/src/calls-service.stories.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  103. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  105. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +10 -0
  107. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  109. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  111. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  113. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/index.d.ts +10 -15
  115. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  117. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  119. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  121. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  123. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  125. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  127. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  128. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  129. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  130. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  131. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  132. package/dist/types/src/capabilities/repair/index.d.ts +3 -0
  133. package/dist/types/src/capabilities/repair/index.d.ts.map +1 -0
  134. package/dist/types/src/capabilities/repair/repair.d.ts +6 -0
  135. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -0
  136. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  137. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  138. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  139. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  140. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  141. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  142. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  143. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  144. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  145. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  146. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  147. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  148. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  149. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  150. package/dist/types/src/components/ChannelContainer.d.ts +5 -6
  151. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  152. package/dist/types/src/components/ChannelContainer.stories.d.ts +159 -5
  153. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  154. package/dist/types/src/components/Chat.stories.d.ts +162 -4
  155. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  156. package/dist/types/src/components/ChatContainer.d.ts +8 -7
  157. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  158. package/dist/types/src/components/Comments.stories.d.ts +160 -4
  159. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  160. package/dist/types/src/components/CommentsContainer.d.ts +6 -6
  161. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  162. package/dist/types/src/components/CommentsThreadContainer.d.ts +14 -0
  163. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -0
  164. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  165. package/dist/types/src/components/Media/VideoObject.d.ts +3 -3
  166. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  167. package/dist/types/src/components/Media/VideoObject.stories.d.ts +18 -4
  168. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  169. package/dist/types/src/components/MessageContainer.d.ts +7 -3
  170. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  171. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  172. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  173. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +159 -3
  174. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  175. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +161 -4
  176. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  177. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  178. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  179. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  180. package/dist/types/src/components/ThreadSettings.d.ts +4 -2
  181. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  182. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  183. package/dist/types/src/components/index.d.ts +4 -4
  184. package/dist/types/src/components/index.d.ts.map +1 -1
  185. package/dist/types/src/components/testing.d.ts +3 -2
  186. package/dist/types/src/components/testing.d.ts.map +1 -1
  187. package/dist/types/src/extensions/threads.d.ts +8 -3
  188. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  189. package/dist/types/src/functions/create-proposals.d.ts +13 -0
  190. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  191. package/dist/types/src/functions/index.d.ts +2 -0
  192. package/dist/types/src/functions/index.d.ts.map +1 -0
  193. package/dist/types/src/hooks/analytics.d.ts +2 -3
  194. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  195. package/dist/types/src/hooks/index.d.ts +3 -0
  196. package/dist/types/src/hooks/index.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +2 -0
  198. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +1 -0
  199. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +2 -0
  200. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +1 -0
  201. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +3 -0
  202. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -0
  203. package/dist/types/src/index.d.ts +1 -1
  204. package/dist/types/src/index.d.ts.map +1 -1
  205. package/dist/types/src/meta.d.ts +3 -4
  206. package/dist/types/src/meta.d.ts.map +1 -1
  207. package/dist/types/src/testing/stories.d.ts +2 -1
  208. package/dist/types/src/testing/stories.d.ts.map +1 -1
  209. package/dist/types/src/translations.d.ts +146 -194
  210. package/dist/types/src/translations.d.ts.map +1 -1
  211. package/dist/types/src/types/Channel.d.ts +695 -0
  212. package/dist/types/src/types/Channel.d.ts.map +1 -0
  213. package/dist/types/src/types/capabilities.d.ts +23 -0
  214. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  215. package/dist/types/src/types/index.d.ts +2 -1
  216. package/dist/types/src/types/index.d.ts.map +1 -1
  217. package/dist/types/src/types/types.d.ts +3224 -320
  218. package/dist/types/src/types/types.d.ts.map +1 -1
  219. package/dist/types/src/util.d.ts +17 -2
  220. package/dist/types/src/util.d.ts.map +1 -1
  221. package/dist/types/tsconfig.tsbuildinfo +1 -1
  222. package/package.json +93 -67
  223. package/src/ThreadPlugin.tsx +107 -143
  224. package/src/blueprints/index.ts +5 -0
  225. package/src/blueprints/thread-blueprint.ts +32 -0
  226. package/src/calls/call-manager.ts +78 -50
  227. package/src/calls/call-swarm-synchronizer.ts +3 -3
  228. package/src/calls/media-manager.ts +77 -41
  229. package/src/calls/types.ts +8 -4
  230. package/src/calls/util/calls-service.ts +73 -19
  231. package/src/calls/util/stub-media-streams.ts +63 -9
  232. package/src/calls/util/task-scheduling.ts +4 -4
  233. package/src/calls-service.stories.tsx +229 -0
  234. package/src/capabilities/app-graph-builder/app-graph-builder.ts +202 -0
  235. package/src/capabilities/app-graph-builder/index.ts +7 -0
  236. package/src/capabilities/blueprint-definition/blueprint-definition.ts +24 -0
  237. package/src/capabilities/blueprint-definition/index.ts +7 -0
  238. package/src/capabilities/call-manager/call-manager.ts +26 -0
  239. package/src/capabilities/call-manager/index.ts +7 -0
  240. package/src/capabilities/index.ts +10 -12
  241. package/src/capabilities/markdown/index.ts +7 -0
  242. package/src/capabilities/markdown/markdown.ts +83 -0
  243. package/src/capabilities/operation-resolver/index.ts +7 -0
  244. package/src/capabilities/operation-resolver/operation-resolver.ts +400 -0
  245. package/src/capabilities/react-root/index.ts +7 -0
  246. package/src/capabilities/react-root/react-root.tsx +20 -0
  247. package/src/capabilities/react-surface/index.ts +7 -0
  248. package/src/capabilities/react-surface/react-surface.tsx +98 -0
  249. package/src/capabilities/repair/index.ts +7 -0
  250. package/src/capabilities/repair/repair.ts +51 -0
  251. package/src/capabilities/settings/index.ts +7 -0
  252. package/src/capabilities/settings/settings.ts +34 -0
  253. package/src/capabilities/state/index.ts +7 -0
  254. package/src/capabilities/state/state.ts +22 -0
  255. package/src/components/Call/Call.tsx +11 -6
  256. package/src/components/Call/Toolbar.tsx +42 -33
  257. package/src/components/CallDebugPanel.tsx +114 -57
  258. package/src/components/CallSidebar.tsx +6 -3
  259. package/src/components/ChannelContainer.stories.tsx +23 -21
  260. package/src/components/ChannelContainer.tsx +47 -38
  261. package/src/components/Chat.stories.tsx +37 -39
  262. package/src/components/ChatContainer.tsx +56 -44
  263. package/src/components/Comments.stories.tsx +63 -55
  264. package/src/components/CommentsContainer.tsx +20 -16
  265. package/src/components/CommentsThreadContainer.tsx +173 -0
  266. package/src/components/Lobby/Lobby.tsx +10 -8
  267. package/src/components/Media/AudioStream.tsx +2 -2
  268. package/src/components/Media/VideoObject.stories.tsx +36 -28
  269. package/src/components/Media/VideoObject.tsx +2 -2
  270. package/src/components/MessageContainer.tsx +117 -68
  271. package/src/components/Participant/Participant.tsx +34 -15
  272. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  273. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +9 -9
  274. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +3 -3
  275. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +45 -43
  276. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +7 -7
  277. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +10 -7
  278. package/src/components/ThreadCompanion.tsx +194 -0
  279. package/src/components/ThreadSettings.tsx +11 -6
  280. package/src/components/command-extension.ts +7 -4
  281. package/src/components/index.ts +5 -8
  282. package/src/components/testing.ts +28 -8
  283. package/src/extensions/threads.ts +88 -44
  284. package/src/functions/create-proposals.ts +57 -0
  285. package/src/functions/index.ts +5 -0
  286. package/src/hooks/analytics.ts +21 -21
  287. package/src/hooks/index.ts +4 -0
  288. package/src/hooks/useBlackCanvasStreamTrack.tsx +27 -0
  289. package/src/hooks/useDebugMode.ts +1 -1
  290. package/src/hooks/useInaudibleAudioStreamTrack.tsx +27 -0
  291. package/src/hooks/useVideoStreamTrack.tsx +36 -0
  292. package/src/index.ts +1 -1
  293. package/src/meta.ts +11 -7
  294. package/src/testing/stories.ts +23 -17
  295. package/src/translations.ts +18 -10
  296. package/src/types/Channel.ts +30 -0
  297. package/src/types/capabilities.ts +34 -0
  298. package/src/types/index.ts +2 -1
  299. package/src/types/types.ts +171 -75
  300. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  301. package/src/typings.d.ts +8 -0
  302. package/src/util.ts +1 -1
  303. package/dist/lib/browser/ChannelContainer-PKFBVENP.mjs +0 -15
  304. package/dist/lib/browser/ChatContainer-RSOKYAMK.mjs +0 -14
  305. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs +0 -171
  306. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +0 -7
  307. package/dist/lib/browser/call-manager-APQAZWHT.mjs +0 -23
  308. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +0 -7
  309. package/dist/lib/browser/chunk-4H4A264L.mjs.map +0 -7
  310. package/dist/lib/browser/chunk-5P5BH5GE.mjs +0 -88
  311. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +0 -7
  312. package/dist/lib/browser/chunk-6NBVNXTM.mjs +0 -21
  313. package/dist/lib/browser/chunk-6NBVNXTM.mjs.map +0 -7
  314. package/dist/lib/browser/chunk-AEXWNS6Z.mjs +0 -128
  315. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +0 -7
  316. package/dist/lib/browser/chunk-IIUTBDVB.mjs +0 -17
  317. package/dist/lib/browser/chunk-IIUTBDVB.mjs.map +0 -7
  318. package/dist/lib/browser/chunk-JKQUJOTX.mjs.map +0 -7
  319. package/dist/lib/browser/chunk-PG5CTFKK.mjs +0 -550
  320. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +0 -7
  321. package/dist/lib/browser/chunk-R5MDLUPC.mjs +0 -18
  322. package/dist/lib/browser/chunk-R5MDLUPC.mjs.map +0 -7
  323. package/dist/lib/browser/chunk-TAFSCSUR.mjs +0 -351
  324. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +0 -7
  325. package/dist/lib/browser/chunk-XZKBN3NS.mjs +0 -983
  326. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +0 -7
  327. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs +0 -353
  328. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +0 -7
  329. package/dist/lib/browser/markdown-TE5SWWNJ.mjs +0 -169
  330. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +0 -7
  331. package/dist/lib/browser/react-root-NK3A4VG7.mjs +0 -27
  332. package/dist/lib/browser/react-root-NK3A4VG7.mjs.map +0 -7
  333. package/dist/lib/browser/react-surface-VXUJKSOG.mjs +0 -108
  334. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +0 -7
  335. package/dist/lib/browser/settings-RB2RSLXV.mjs +0 -22
  336. package/dist/lib/browser/settings-RB2RSLXV.mjs.map +0 -7
  337. package/dist/lib/browser/state-RKL5MSDP.mjs +0 -34
  338. package/dist/lib/browser/state-RKL5MSDP.mjs.map +0 -7
  339. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs +0 -36
  340. package/dist/lib/node/ChannelContainer-YS5YT2ML.cjs.map +0 -7
  341. package/dist/lib/node/ChatContainer-GCOM3M56.cjs +0 -35
  342. package/dist/lib/node/ChatContainer-GCOM3M56.cjs.map +0 -7
  343. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs +0 -179
  344. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +0 -7
  345. package/dist/lib/node/call-manager-HV2XJW5O.cjs +0 -37
  346. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +0 -7
  347. package/dist/lib/node/chunk-44I33JDT.cjs +0 -1731
  348. package/dist/lib/node/chunk-44I33JDT.cjs.map +0 -7
  349. package/dist/lib/node/chunk-4YSNVPWU.cjs +0 -37
  350. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +0 -7
  351. package/dist/lib/node/chunk-E3WBZTTI.cjs +0 -371
  352. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +0 -7
  353. package/dist/lib/node/chunk-ERG7G6FF.cjs +0 -59
  354. package/dist/lib/node/chunk-ERG7G6FF.cjs.map +0 -7
  355. package/dist/lib/node/chunk-FUXJAVFZ.cjs +0 -108
  356. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +0 -7
  357. package/dist/lib/node/chunk-HLMCEE5K.cjs +0 -41
  358. package/dist/lib/node/chunk-HLMCEE5K.cjs.map +0 -7
  359. package/dist/lib/node/chunk-IP533AMV.cjs +0 -554
  360. package/dist/lib/node/chunk-IP533AMV.cjs.map +0 -7
  361. package/dist/lib/node/chunk-LR5NENBE.cjs +0 -54
  362. package/dist/lib/node/chunk-LR5NENBE.cjs.map +0 -7
  363. package/dist/lib/node/chunk-UM36TPCT.cjs +0 -984
  364. package/dist/lib/node/chunk-UM36TPCT.cjs.map +0 -7
  365. package/dist/lib/node/chunk-ZGDN3XBR.cjs +0 -149
  366. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +0 -7
  367. package/dist/lib/node/index.cjs +0 -310
  368. package/dist/lib/node/index.cjs.map +0 -7
  369. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs +0 -363
  370. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +0 -7
  371. package/dist/lib/node/markdown-GQIPJS2F.cjs +0 -178
  372. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +0 -7
  373. package/dist/lib/node/meta.json +0 -1
  374. package/dist/lib/node/react-root-6HHDMULJ.cjs +0 -51
  375. package/dist/lib/node/react-root-6HHDMULJ.cjs.map +0 -7
  376. package/dist/lib/node/react-surface-NBH42NN2.cjs +0 -122
  377. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +0 -7
  378. package/dist/lib/node/settings-4LQSFEDK.cjs +0 -36
  379. package/dist/lib/node/settings-4LQSFEDK.cjs.map +0 -7
  380. package/dist/lib/node/state-IY5XX3H2.cjs +0 -50
  381. package/dist/lib/node/state-IY5XX3H2.cjs.map +0 -7
  382. package/dist/lib/node/types/index.cjs +0 -38
  383. package/dist/lib/node/types/index.cjs.map +0 -7
  384. package/dist/lib/node-esm/ChannelContainer-O4QJII2P.mjs +0 -16
  385. package/dist/lib/node-esm/ChatContainer-F6CSADV7.mjs +0 -15
  386. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs +0 -172
  387. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +0 -7
  388. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs +0 -24
  389. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +0 -7
  390. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs +0 -984
  391. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +0 -7
  392. package/dist/lib/node-esm/chunk-ESQC6SYE.mjs +0 -19
  393. package/dist/lib/node-esm/chunk-ESQC6SYE.mjs.map +0 -7
  394. package/dist/lib/node-esm/chunk-K4KAUOKT.mjs +0 -19
  395. package/dist/lib/node-esm/chunk-K4KAUOKT.mjs.map +0 -7
  396. package/dist/lib/node-esm/chunk-O3V45YJP.mjs +0 -90
  397. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +0 -7
  398. package/dist/lib/node-esm/chunk-O63QJPQX.mjs +0 -23
  399. package/dist/lib/node-esm/chunk-O63QJPQX.mjs.map +0 -7
  400. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs +0 -352
  401. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +0 -7
  402. package/dist/lib/node-esm/chunk-PGRP3O4O.mjs.map +0 -7
  403. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs +0 -129
  404. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +0 -7
  405. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs +0 -551
  406. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +0 -7
  407. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +0 -7
  408. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs +0 -354
  409. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +0 -7
  410. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs +0 -170
  411. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +0 -7
  412. package/dist/lib/node-esm/react-root-RUXOAQNW.mjs +0 -28
  413. package/dist/lib/node-esm/react-root-RUXOAQNW.mjs.map +0 -7
  414. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs +0 -109
  415. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +0 -7
  416. package/dist/lib/node-esm/settings-EA7DFSM6.mjs +0 -23
  417. package/dist/lib/node-esm/settings-EA7DFSM6.mjs.map +0 -7
  418. package/dist/lib/node-esm/state-6AUTNROZ.mjs +0 -35
  419. package/dist/lib/node-esm/state-6AUTNROZ.mjs.map +0 -7
  420. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  421. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  422. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  423. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  424. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  425. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  427. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  428. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  429. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  430. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  431. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  432. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  433. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  434. package/dist/types/src/capabilities/settings.d.ts +0 -4
  435. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  436. package/dist/types/src/capabilities/state.d.ts +0 -7
  437. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  438. package/dist/types/src/components/CommentContainer.d.ts +0 -13
  439. package/dist/types/src/components/CommentContainer.d.ts.map +0 -1
  440. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  441. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  442. package/dist/types/src/peers.stories.d.ts +0 -11
  443. package/dist/types/src/peers.stories.d.ts.map +0 -1
  444. package/dist/types/src/types/schema.d.ts +0 -133
  445. package/dist/types/src/types/schema.d.ts.map +0 -1
  446. package/src/capabilities/app-graph-builder.ts +0 -180
  447. package/src/capabilities/call-manager.ts +0 -19
  448. package/src/capabilities/capabilities.ts +0 -33
  449. package/src/capabilities/intent-resolver.ts +0 -296
  450. package/src/capabilities/markdown.ts +0 -68
  451. package/src/capabilities/react-root.tsx +0 -17
  452. package/src/capabilities/react-surface.tsx +0 -88
  453. package/src/capabilities/settings.ts +0 -19
  454. package/src/capabilities/state.ts +0 -25
  455. package/src/components/CommentContainer.tsx +0 -198
  456. package/src/components/ThreadComplementary.tsx +0 -151
  457. package/src/peers.stories.tsx +0 -189
  458. package/src/types/schema.ts +0 -33
  459. /package/dist/lib/browser/{ChannelContainer-PKFBVENP.mjs.map → blueprints/index.mjs.map} +0 -0
  460. /package/dist/lib/browser/{ChatContainer-RSOKYAMK.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  461. /package/dist/lib/node-esm/{ChannelContainer-O4QJII2P.mjs.map → blueprints/index.mjs.map} +0 -0
  462. /package/dist/lib/node-esm/{ChatContainer-F6CSADV7.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
@@ -1,198 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { CheckCircle, X } from '@phosphor-icons/react';
6
- import React, { useCallback, useMemo, useRef, useState } from 'react';
7
-
8
- import { Relation } from '@dxos/echo';
9
- import { RefArray } from '@dxos/live-object';
10
- import { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';
11
- import { useIdentity } from '@dxos/react-client/halo';
12
- import { Button, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';
13
- import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
14
- import {
15
- getSize,
16
- hoverableControlItem,
17
- hoverableControls,
18
- hoverableFocusedWithinControls,
19
- mx,
20
- } from '@dxos/react-ui-theme';
21
- import {
22
- MessageTextbox,
23
- type MessageTextboxProps,
24
- Thread,
25
- ThreadFooter,
26
- ThreadHeading,
27
- type ThreadProps,
28
- } from '@dxos/react-ui-thread';
29
- import { type AnchoredTo } from '@dxos/schema';
30
- import { isNonNullable } from '@dxos/util';
31
-
32
- import { MessageContainer } from './MessageContainer';
33
- import { command } from './command-extension';
34
- import { useStatus } from '../hooks';
35
- import { THREAD_PLUGIN } from '../meta';
36
- import { type ThreadType } from '../types';
37
- import { getMessageMetadata } from '../util';
38
-
39
- const sizeClass = getSize(4);
40
-
41
- // TODO(thure): #8149
42
- const commentControlClassNames = '!p-1 !min-bs-0 transition-opacity';
43
-
44
- const ToggleResolvedButton = ({
45
- isResolved,
46
- onResolve,
47
- }: {
48
- isResolved: boolean | undefined;
49
- onResolve: () => void;
50
- }) => {
51
- const { t } = useTranslation(THREAD_PLUGIN);
52
- const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');
53
- return (
54
- <Tooltip.Trigger asChild content={label}>
55
- <Button
56
- variant='ghost'
57
- data-testid='thread.toggle-resolved'
58
- onClick={onResolve}
59
- classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}
60
- >
61
- <span className='sr-only'>{label}</span>
62
- {isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}
63
- </Button>
64
- </Tooltip.Trigger>
65
- );
66
- };
67
-
68
- const DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {
69
- const { t } = useTranslation(THREAD_PLUGIN);
70
- const label = t('delete thread label');
71
- return (
72
- <Tooltip.Trigger asChild content={label}>
73
- <Button
74
- variant='ghost'
75
- data-testid='thread.delete'
76
- onClick={onDelete}
77
- classNames={[commentControlClassNames, hoverableControlItem]}
78
- >
79
- <span className='sr-only'>{label}</span>
80
- <X className={sizeClass} />
81
- </Button>
82
- </Tooltip.Trigger>
83
- );
84
- };
85
-
86
- export type CommentContainerProps = {
87
- anchor: AnchoredTo;
88
- onAttend?: (anchor: AnchoredTo) => void;
89
- onComment?: (anchor: AnchoredTo, message: string) => void;
90
- onResolve?: (anchor: AnchoredTo) => void;
91
- onMessageDelete?: (anchor: AnchoredTo, messageId: string) => void;
92
- onThreadDelete?: (anchor: AnchoredTo) => void;
93
- } & Pick<ThreadProps, 'current'>;
94
-
95
- export const CommentContainer = ({
96
- anchor,
97
- current,
98
- onAttend,
99
- onComment,
100
- onResolve,
101
- onMessageDelete,
102
- onThreadDelete,
103
- }: CommentContainerProps) => {
104
- const identity = useIdentity()!;
105
- const space = getSpace(anchor);
106
- const members = useMembers(space?.key);
107
- const detached = !anchor.anchor;
108
- const thread = Relation.getSource(anchor) as ThreadType;
109
- const activity = useStatus(space, fullyQualifiedId(thread));
110
- const { t } = useTranslation(THREAD_PLUGIN);
111
- const threadScrollRef = useRef<HTMLDivElement | null>(null);
112
- const { themeMode } = useThemeContext();
113
-
114
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
115
- // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
116
- const [_count, _setCount] = useState(0);
117
- const rerenderEditor = () => _setCount((count) => count + 1);
118
- const messageRef = useRef('');
119
- const extensions = useMemo(
120
- () => [
121
- createBasicExtensions({ placeholder: t('message placeholder') }),
122
- createThemeExtensions({ themeMode }),
123
- listener({ onChange: (text) => (messageRef.current = text) }),
124
- command,
125
- ],
126
- [_count],
127
- );
128
-
129
- // TODO(thure): Factor out.
130
- const scrollToEnd = (behavior: ScrollBehavior) =>
131
- setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);
132
-
133
- const handleAttend = useCallback(() => onAttend?.(anchor), [onAttend, anchor]);
134
- const handleResolve = useCallback(() => onResolve?.(anchor), [onResolve, anchor]);
135
- const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(anchor, id), [onMessageDelete, anchor]);
136
- const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);
137
-
138
- const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {
139
- if (!messageRef.current) {
140
- return false;
141
- }
142
-
143
- onComment?.(anchor, messageRef.current);
144
- messageRef.current = '';
145
- scrollToEnd('instant');
146
- rerenderEditor();
147
-
148
- return true;
149
- }, [anchor, identity]);
150
-
151
- return (
152
- <Thread onClickCapture={handleAttend} onFocusCapture={handleAttend} current={current} id={fullyQualifiedId(thread)}>
153
- <div
154
- role='none'
155
- className={mx(
156
- 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',
157
- hoverableControls,
158
- hoverableFocusedWithinControls,
159
- )}
160
- >
161
- {detached ? (
162
- <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
163
- <ThreadHeading detached>{thread.name}</ThreadHeading>
164
- </Tooltip.Trigger>
165
- ) : (
166
- <ThreadHeading>{thread.name}</ThreadHeading>
167
- )}
168
- <div className='flex flex-row items-center pli-1'>
169
- {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}
170
- {onResolve && !(thread?.status === 'staged') && (
171
- <ToggleResolvedButton isResolved={thread?.status === 'resolved'} onResolve={handleResolve} />
172
- )}
173
- {onThreadDelete && <DeleteThreadButton onDelete={handleThreadDelete} />}
174
- </div>
175
- </div>
176
- {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}
177
- {RefArray.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (
178
- <MessageContainer
179
- key={message.id}
180
- editable
181
- message={message}
182
- members={members}
183
- onDelete={handleMessageDelete}
184
- />
185
- ))}
186
- {/*
187
- TODO(wittjosiah): Can't autofocus this generally.
188
- There can be multiple threads with inputs and they can't all be focused.
189
- Also, it steals focus from documents when first rendered.
190
- Need to find a way to autofocus in one scenario only: when a new thread is created.
191
- */}
192
- <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />
193
- <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>
194
- {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
195
- <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
196
- </Thread>
197
- );
198
- };
@@ -1,151 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import React, { useCallback, useMemo } from 'react';
6
-
7
- import {
8
- Capabilities,
9
- LayoutAction,
10
- createIntent,
11
- useCapability,
12
- useCapabilities,
13
- useIntentDispatcher,
14
- } from '@dxos/app-framework';
15
- import { Filter, Obj, Query, Relation } from '@dxos/echo';
16
- import { fullyQualifiedId, getSpace, useQuery } from '@dxos/react-client/echo';
17
- import { useIdentity } from '@dxos/react-client/halo';
18
- import { useThemeContext, useTranslation } from '@dxos/react-ui';
19
- import { useAttended } from '@dxos/react-ui-attention';
20
- import { StackItem } from '@dxos/react-ui-stack';
21
- import { Tabs } from '@dxos/react-ui-tabs';
22
- import { AnchoredTo } from '@dxos/schema';
23
-
24
- import { ThreadCapabilities } from '../capabilities';
25
- import { CommentsContainer } from '../components';
26
- import { THREAD_PLUGIN } from '../meta';
27
- import { ThreadAction, ThreadType } from '../types';
28
-
29
- export const ThreadComplementary = ({ subject }: { subject: any }) => {
30
- const { dispatchPromise: dispatch } = useIntentDispatcher();
31
- const identity = useIdentity();
32
- const { t } = useTranslation(THREAD_PLUGIN);
33
- const { tx } = useThemeContext();
34
- const subjectId = fullyQualifiedId(subject);
35
-
36
- const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
37
- const drafts = state.drafts[subjectId];
38
- const viewState = useMemo(() => getViewState(subjectId), [getViewState, subjectId]);
39
- const { showResolvedThreads } = viewState;
40
- const onChangeViewState = useCallback(
41
- (nextValue: string) => {
42
- viewState.showResolvedThreads = nextValue === 'all';
43
- },
44
- [viewState],
45
- );
46
-
47
- const anchorSorts = useCapabilities(Capabilities.AnchorSort);
48
- const sort = useMemo(
49
- () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
50
- [anchorSorts, subject],
51
- );
52
-
53
- const space = getSpace(subject);
54
- const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
55
- const anchors = objectsAnchoredTo
56
- .toSorted((a, b) => sort?.(a, b) ?? 0)
57
- .filter((anchor) => Obj.instanceOf(ThreadType, Relation.getSource(anchor)))
58
- .concat(drafts ?? []);
59
-
60
- const attended = useAttended();
61
-
62
- const handleAttend = useCallback(
63
- (anchor: AnchoredTo) => {
64
- const thread = Relation.getSource(anchor) as ThreadType;
65
- const threadId = fullyQualifiedId(thread);
66
-
67
- if (state.current !== threadId) {
68
- state.current = threadId;
69
-
70
- // TODO(wittjosiah): Should this be a thread-specific intent?
71
- // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.
72
- // This may be overloading this intent or highjacking its intended purpose.
73
- void dispatch(
74
- createIntent(LayoutAction.ScrollIntoView, {
75
- part: 'current',
76
- subject: fullyQualifiedId(subject),
77
- options: {
78
- cursor: anchor.anchor,
79
- ref: threadId,
80
- },
81
- }),
82
- );
83
- }
84
- },
85
- [state.current, dispatch, subject],
86
- );
87
-
88
- const handleComment = useCallback(
89
- async (anchor: AnchoredTo, text: string) => {
90
- await dispatch(
91
- createIntent(ThreadAction.AddMessage, { anchor, subject, sender: { identityDid: identity?.did }, text }),
92
- );
93
-
94
- const thread = Relation.getSource(anchor) as ThreadType;
95
- state.current = fullyQualifiedId(thread);
96
- },
97
- [dispatch, identity, subject],
98
- );
99
-
100
- const handleResolve = useCallback(
101
- (anchor: AnchoredTo) =>
102
- dispatch(createIntent(ThreadAction.ToggleResolved, { thread: Relation.getSource(anchor) as ThreadType })),
103
- [dispatch],
104
- );
105
-
106
- const handleThreadDelete = useCallback(
107
- (anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
108
- [dispatch, subject],
109
- );
110
-
111
- const handleMessageDelete = useCallback(
112
- (anchor: AnchoredTo, messageId: string) =>
113
- dispatch(createIntent(ThreadAction.DeleteMessage, { anchor, subject, messageId })),
114
- [dispatch, subject],
115
- );
116
-
117
- const comments = (
118
- <CommentsContainer
119
- anchors={anchors}
120
- currentId={attended.includes(subjectId) ? state.current : undefined}
121
- showResolvedThreads={showResolvedThreads}
122
- onAttend={handleAttend}
123
- onComment={handleComment}
124
- onResolve={handleResolve}
125
- onMessageDelete={handleMessageDelete}
126
- onThreadDelete={handleThreadDelete}
127
- />
128
- );
129
-
130
- return (
131
- <StackItem.Content toolbar>
132
- <Tabs.Root
133
- value={showResolvedThreads ? 'all' : 'unresolved'}
134
- orientation='horizontal'
135
- classNames='contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin'
136
- onValueChange={onChangeViewState}
137
- >
138
- <Tabs.Tablist classNames={tx('toolbar.root', 'toolbar', {})}>
139
- <Tabs.Tab value='unresolved' classNames='text-sm'>
140
- {t('show unresolved label')}
141
- </Tabs.Tab>
142
- <Tabs.Tab value='all' classNames='text-sm'>
143
- {t('show all label')}
144
- </Tabs.Tab>
145
- </Tabs.Tablist>
146
- <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
147
- <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
148
- </Tabs.Root>
149
- </StackItem.Content>
150
- );
151
- };
@@ -1,189 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react';
8
- import React, { useEffect, useMemo, useRef, useState } from 'react';
9
-
10
- import { scheduleTask, sleep } from '@dxos/async';
11
- import { Context } from '@dxos/context';
12
- import { invariant } from '@dxos/invariant';
13
- import { log } from '@dxos/log';
14
- import { Config, useConfig } from '@dxos/react-client';
15
- import { withClientProvider } from '@dxos/react-client/testing';
16
- import { Button } from '@dxos/react-ui';
17
- import { Json } from '@dxos/react-ui-syntax-highlighter';
18
- import { withLayout, withTheme } from '@dxos/storybook-utils';
19
-
20
- import { type TrackObject, CallsServicePeer, CALLS_URL } from './calls';
21
- // @ts-ignore
22
- import video from '../testing/video.mp4';
23
-
24
- const useVideoStreamTrack = (videoElement: HTMLVideoElement | null) => {
25
- // Get video stream track.
26
- const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);
27
- const hadRun = useRef(false);
28
- useEffect(() => {
29
- // This is done to capture only one video stream.
30
- if (!videoElement || hadRun.current || !video) {
31
- return;
32
- }
33
- hadRun.current = true;
34
-
35
- videoElement.src = video;
36
- videoElement.addEventListener('playing', () => {
37
- const stream = (videoElement as any).captureStream();
38
- log.info('captured stream', { stream });
39
- stream.onaddtrack = (event: MediaStreamTrackEvent) => {
40
- if (event.track.kind === 'video') {
41
- log.info('video stream track state', { state: event.track.readyState });
42
- setVideoStreamTrack(event.track);
43
- }
44
- };
45
- });
46
- }, [videoElement]);
47
-
48
- return videoStreamTrack;
49
- };
50
-
51
- const DefaultStory = ({ videoSrc }: { videoSrc: string }) => {
52
- const config = useConfig();
53
- const callsConfig = {
54
- iceServers: config.get('runtime.services.ice'),
55
- apiBase: `${CALLS_URL}/api/calls`,
56
- };
57
- const peerPush = useMemo(() => new CallsServicePeer(callsConfig), []);
58
- const peerPull = useMemo(() => new CallsServicePeer(callsConfig), []);
59
- const pushVideoElement = useRef<HTMLVideoElement>(null);
60
- const pullVideoElement = useRef<HTMLVideoElement>(null);
61
- const [metrics, setMetrics] = useState<Record<string, any>>({});
62
- // Get video stream track.
63
- const videoStreamTrack = useVideoStreamTrack(pushVideoElement.current);
64
- const pullCtx = useRef<Context | undefined>(undefined);
65
- const trackInfo = useRef<TrackObject | undefined>(undefined);
66
- const hadRun = useRef(false);
67
-
68
- // Push/pull video stream track to cloudflare.
69
- useEffect(() => {
70
- if (hadRun.current || !videoStreamTrack || !peerPush || !peerPull) {
71
- return;
72
- }
73
- hadRun.current = true;
74
- const ctx = new Context();
75
- scheduleTask(ctx, async () => {
76
- log.info('starting push/pull', { videoStreamTrack });
77
- await peerPush.open();
78
- await peerPull.open();
79
- ctx.onDispose(() => {
80
- void peerPush.close();
81
- void peerPull.close();
82
- });
83
-
84
- // Push track to cloudflare.
85
- performance.mark('push:begin');
86
- const pushedTrack = await peerPush.pushTrack({ track: videoStreamTrack });
87
- trackInfo.current = pushedTrack;
88
- performance.mark('push:end');
89
- const pushTime = performance.measure('push', 'push:begin', 'push:end').duration;
90
- log.info('successfully pushed track', { pushTime, pushedTrack });
91
- setMetrics((prev) => ({ ...prev, 'time to push track [ms]': Math.round(pushTime) }));
92
-
93
- // Wait for cloudflare to process the track.
94
- await sleep(500);
95
-
96
- // Pull track from cloudflare.
97
- performance.mark('pullTrack:begin');
98
- pullCtx.current = new Context();
99
- const pulledTrack = await peerPull.pullTrack({
100
- trackData: { ...pushedTrack, mid: undefined },
101
- ctx: pullCtx.current,
102
- });
103
- performance.mark('pullTrack:end');
104
- const pullTime = performance.measure('pullTrack', 'pullTrack:begin', 'pullTrack:end').duration;
105
- setMetrics((prev) => ({ ...prev, 'time to pull track [ms]': Math.round(pullTime) }));
106
- log.info('successfully pulled track', { pullTime, pulledTrack });
107
-
108
- invariant(pulledTrack);
109
- invariant(pullVideoElement.current);
110
- performance.mark('playVideo:begin');
111
- pullVideoElement.current.srcObject = new MediaStream([pulledTrack]);
112
- await pullVideoElement.current.play();
113
- performance.mark('playVideo:end');
114
- const playTime = performance.measure('playVideo', 'playVideo:begin', 'playVideo:end').duration;
115
- setMetrics((prev) => ({ ...prev, 'time to play pulled video [ms]': Math.round(playTime) }));
116
- });
117
-
118
- return () => {
119
- void ctx.dispose();
120
- };
121
- }, [videoStreamTrack, peerPush, peerPull]);
122
-
123
- const handleRePullVideo = async () => {
124
- performance.mark('rePullVideo:begin');
125
- invariant(pullVideoElement.current);
126
- invariant(pullVideoElement.current.srcObject instanceof MediaStream);
127
- const pulledTrack = pullVideoElement.current.srcObject.getTracks()[0];
128
- invariant(pulledTrack);
129
- pullVideoElement.current.srcObject.removeTrack(pulledTrack);
130
- await pullCtx.current!.dispose();
131
- pulledTrack.stop();
132
- pullCtx.current = new Context();
133
- const newPulledTrack = await peerPull.pullTrack({
134
- trackData: { ...trackInfo.current!, mid: undefined },
135
- ctx: pullCtx.current,
136
- });
137
- invariant(newPulledTrack);
138
- pullVideoElement.current.srcObject.addTrack(newPulledTrack);
139
- performance.mark('rePullVideo:end');
140
- const rePullTime = performance.measure('rePullVideo', 'rePullVideo:begin', 'rePullVideo:end').duration;
141
- setMetrics((prev) => ({ ...prev, 'time to re-pull video [ms]': Math.round(rePullTime) }));
142
- };
143
-
144
- return (
145
- <div className='grid grid-cols-3 gap-4 items-center'>
146
- <video ref={pushVideoElement} muted autoPlay src={video} loop />
147
- <Json data={metrics} />
148
- <div className='flex flex-col gap-4'>
149
- <video ref={pullVideoElement} muted />
150
- <Button
151
- disabled={
152
- !(
153
- pullVideoElement?.current?.srcObject instanceof MediaStream &&
154
- pullVideoElement.current.srcObject.getTracks()[0]
155
- )
156
- }
157
- onClick={handleRePullVideo}
158
- >
159
- Re-pull video
160
- </Button>
161
- </div>
162
- </div>
163
- );
164
- };
165
-
166
- const meta: Meta<typeof DefaultStory> = {
167
- title: 'plugins/plugin-thread/peers',
168
- render: DefaultStory,
169
- decorators: [
170
- withClientProvider({
171
- config: new Config({ runtime: { services: { iceProviders: [{ urls: 'https://edge.dxos.workers.dev/ice' }] } } }),
172
- }),
173
- withTheme,
174
- withLayout(),
175
- ],
176
- parameters: {
177
- layout: 'centered',
178
- },
179
- };
180
-
181
- export default meta;
182
-
183
- type Story = StoryObj<typeof DefaultStory>;
184
-
185
- export const Default: Story = {
186
- args: {
187
- videoSrc: video,
188
- },
189
- };
@@ -1,33 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Schema } from 'effect';
6
-
7
- import { Type } from '@dxos/echo';
8
- import { DataType } from '@dxos/schema';
9
-
10
- export const ThreadStatus = Schema.Union(
11
- Schema.Literal('staged'),
12
- Schema.Literal('active'),
13
- Schema.Literal('resolved'),
14
- );
15
-
16
- const _ThreadType = Schema.Struct({
17
- name: Schema.optional(Schema.String),
18
- status: Schema.optional(ThreadStatus),
19
- messages: Schema.mutable(Schema.Array(Type.Ref(DataType.Message))),
20
- }).pipe(Type.Obj({ typename: 'dxos.org/type/Thread', version: '0.1.0' }));
21
- export interface ThreadType extends Schema.Schema.Type<typeof _ThreadType> {}
22
- export const ThreadType: Type.obj<Schema.Schema<ThreadType, Schema.Schema.Encoded<typeof _ThreadType>, never>> =
23
- _ThreadType;
24
-
25
- const _ChannelType = Schema.Struct({
26
- name: Schema.optional(Schema.String),
27
- defaultThread: Type.Ref(ThreadType),
28
- // TODO(wittjosiah): Should be an "ordered collection".
29
- threads: Schema.mutable(Schema.Array(Type.Ref(ThreadType))),
30
- }).pipe(Type.Obj({ typename: 'dxos.org/type/Channel', version: '0.1.0' }));
31
- export interface ChannelType extends Schema.Schema.Type<typeof _ChannelType> {}
32
- export const ChannelType: Type.obj<Schema.Schema<ChannelType, Schema.Schema.Encoded<typeof _ChannelType>, never>> =
33
- _ChannelType;