@dxos/plugin-thread 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (400) hide show
  1. package/dist/lib/browser/ChannelContainer-LGYSQMC7.mjs +15 -0
  2. package/dist/lib/browser/ChatContainer-JWRI73OG.mjs +14 -0
  3. package/dist/lib/browser/app-graph-builder-K3CFBN7V.mjs +171 -0
  4. package/dist/lib/browser/app-graph-builder-K3CFBN7V.mjs.map +7 -0
  5. package/dist/lib/browser/call-manager-APQAZWHT.mjs +23 -0
  6. package/dist/lib/browser/call-manager-APQAZWHT.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-4H4A264L.mjs +1708 -0
  8. package/dist/lib/browser/chunk-4H4A264L.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-AYNXYEKP.mjs → chunk-5P5BH5GE.mjs} +57 -35
  10. package/dist/lib/browser/chunk-5P5BH5GE.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-5PGLGDIP.mjs +983 -0
  12. package/dist/lib/browser/chunk-5PGLGDIP.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-CF2MXRCH.mjs +21 -0
  14. package/dist/lib/browser/chunk-CF2MXRCH.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-G3TS64FP.mjs +351 -0
  16. package/dist/lib/browser/chunk-G3TS64FP.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-WBJLUUOK.mjs → chunk-IIUTBDVB.mjs} +4 -4
  18. package/dist/lib/browser/chunk-IIUTBDVB.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-JKQUJOTX.mjs +31 -0
  20. package/dist/lib/browser/chunk-JKQUJOTX.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-KMVGJG23.mjs +545 -0
  22. package/dist/lib/browser/chunk-KMVGJG23.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-EP6MRLY7.mjs → chunk-R5MDLUPC.mjs} +5 -3
  24. package/dist/lib/browser/chunk-R5MDLUPC.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-WDOQXTI2.mjs +126 -0
  26. package/dist/lib/browser/chunk-WDOQXTI2.mjs.map +7 -0
  27. package/dist/lib/browser/index.mjs +107 -41
  28. package/dist/lib/browser/index.mjs.map +4 -4
  29. package/dist/lib/browser/{intent-resolver-3UW6ROYT.mjs → intent-resolver-YUYZCTLF.mjs} +100 -72
  30. package/dist/lib/browser/intent-resolver-YUYZCTLF.mjs.map +7 -0
  31. package/dist/lib/browser/markdown-4EC3OCF2.mjs +169 -0
  32. package/dist/lib/browser/markdown-4EC3OCF2.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/react-root-EECCWHCW.mjs +27 -0
  35. package/dist/lib/browser/react-root-EECCWHCW.mjs.map +7 -0
  36. package/dist/lib/browser/react-surface-5QLZAFDL.mjs +108 -0
  37. package/dist/lib/browser/react-surface-5QLZAFDL.mjs.map +7 -0
  38. package/dist/lib/browser/{settings-2VZ7S4SK.mjs → settings-KVBQQSO5.mjs} +3 -3
  39. package/dist/lib/browser/{state-KBGI3QTR.mjs → state-RKL5MSDP.mjs} +4 -4
  40. package/dist/lib/browser/{state-KBGI3QTR.mjs.map → state-RKL5MSDP.mjs.map} +3 -3
  41. package/dist/lib/browser/types/index.mjs +16 -0
  42. package/dist/lib/browser/types/index.mjs.map +7 -0
  43. package/dist/lib/node/ChannelContainer-5EKNEH56.cjs +36 -0
  44. package/dist/lib/node/ChannelContainer-5EKNEH56.cjs.map +7 -0
  45. package/dist/lib/node/ChatContainer-EE3FPSYO.cjs +35 -0
  46. package/dist/lib/node/ChatContainer-EE3FPSYO.cjs.map +7 -0
  47. package/dist/lib/node/app-graph-builder-IRE3GYKE.cjs +179 -0
  48. package/dist/lib/node/app-graph-builder-IRE3GYKE.cjs.map +7 -0
  49. package/dist/lib/node/call-manager-HV2XJW5O.cjs +37 -0
  50. package/dist/lib/node/call-manager-HV2XJW5O.cjs.map +7 -0
  51. package/dist/lib/node/chunk-44I33JDT.cjs +1731 -0
  52. package/dist/lib/node/chunk-44I33JDT.cjs.map +7 -0
  53. package/dist/lib/node/chunk-4B3PPXA6.cjs +371 -0
  54. package/dist/lib/node/chunk-4B3PPXA6.cjs.map +7 -0
  55. package/dist/lib/node/{chunk-NQ5DTPOY.cjs → chunk-4YSNVPWU.cjs} +10 -8
  56. package/dist/lib/node/chunk-4YSNVPWU.cjs.map +7 -0
  57. package/dist/lib/node/chunk-6B3M6XRE.cjs +984 -0
  58. package/dist/lib/node/chunk-6B3M6XRE.cjs.map +7 -0
  59. package/dist/lib/node/{chunk-W25MBII2.cjs → chunk-FUXJAVFZ.cjs} +50 -29
  60. package/dist/lib/node/chunk-FUXJAVFZ.cjs.map +7 -0
  61. package/dist/lib/node/{chunk-ONLWOUYZ.cjs → chunk-HLMCEE5K.cjs} +7 -7
  62. package/dist/lib/node/{chunk-ONLWOUYZ.cjs.map → chunk-HLMCEE5K.cjs.map} +2 -2
  63. package/dist/lib/node/chunk-JLHENFGK.cjs +549 -0
  64. package/dist/lib/node/chunk-JLHENFGK.cjs.map +7 -0
  65. package/dist/lib/node/chunk-LR5NENBE.cjs +54 -0
  66. package/dist/lib/node/chunk-LR5NENBE.cjs.map +7 -0
  67. package/dist/lib/node/chunk-TKHJVC2C.cjs +147 -0
  68. package/dist/lib/node/chunk-TKHJVC2C.cjs.map +7 -0
  69. package/dist/lib/node/{chunk-IX63EKGL.cjs → chunk-U7NOIXN6.cjs} +16 -10
  70. package/dist/lib/node/chunk-U7NOIXN6.cjs.map +7 -0
  71. package/dist/lib/node/index.cjs +142 -80
  72. package/dist/lib/node/index.cjs.map +4 -4
  73. package/dist/lib/node/{intent-resolver-DC6HDNTX.cjs → intent-resolver-MZ3HADNY.cjs} +108 -82
  74. package/dist/lib/node/intent-resolver-MZ3HADNY.cjs.map +7 -0
  75. package/dist/lib/node/markdown-NJDPXIKD.cjs +178 -0
  76. package/dist/lib/node/markdown-NJDPXIKD.cjs.map +7 -0
  77. package/dist/lib/node/meta.json +1 -1
  78. package/dist/lib/node/react-root-IAYQ2DBO.cjs +51 -0
  79. package/dist/lib/node/react-root-IAYQ2DBO.cjs.map +7 -0
  80. package/dist/lib/node/react-surface-AVC5VVIS.cjs +122 -0
  81. package/dist/lib/node/react-surface-AVC5VVIS.cjs.map +7 -0
  82. package/dist/lib/node/{settings-7MGTJ46L.cjs → settings-H45P5YO2.cjs} +8 -8
  83. package/dist/lib/node/{state-FOHMAVSU.cjs → state-IY5XX3H2.cjs} +8 -8
  84. package/dist/lib/node/{state-FOHMAVSU.cjs.map → state-IY5XX3H2.cjs.map} +3 -3
  85. package/dist/lib/node/{types.cjs → types/index.cjs} +12 -6
  86. package/dist/lib/node/types/index.cjs.map +7 -0
  87. package/dist/lib/node-esm/ChannelContainer-KFS2RWWW.mjs +16 -0
  88. package/dist/lib/node-esm/ChannelContainer-KFS2RWWW.mjs.map +7 -0
  89. package/dist/lib/node-esm/ChatContainer-UJYPQMLV.mjs +15 -0
  90. package/dist/lib/node-esm/ChatContainer-UJYPQMLV.mjs.map +7 -0
  91. package/dist/lib/node-esm/app-graph-builder-I5VMPLE4.mjs +172 -0
  92. package/dist/lib/node-esm/app-graph-builder-I5VMPLE4.mjs.map +7 -0
  93. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs +24 -0
  94. package/dist/lib/node-esm/call-manager-UUYXLF4T.mjs.map +7 -0
  95. package/dist/lib/node-esm/{chunk-42F2DTMM.mjs → chunk-ESQC6SYE.mjs} +4 -4
  96. package/dist/lib/node-esm/chunk-ESQC6SYE.mjs.map +7 -0
  97. package/dist/lib/node-esm/chunk-J323VQ4P.mjs +127 -0
  98. package/dist/lib/node-esm/chunk-J323VQ4P.mjs.map +7 -0
  99. package/dist/lib/node-esm/{chunk-WLY2HMDB.mjs → chunk-K4KAUOKT.mjs} +5 -3
  100. package/dist/lib/node-esm/chunk-K4KAUOKT.mjs.map +7 -0
  101. package/dist/lib/node-esm/chunk-MNJ3V4XM.mjs +546 -0
  102. package/dist/lib/node-esm/chunk-MNJ3V4XM.mjs.map +7 -0
  103. package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs → chunk-O3V45YJP.mjs} +57 -35
  104. package/dist/lib/node-esm/chunk-O3V45YJP.mjs.map +7 -0
  105. package/dist/lib/node-esm/chunk-ODUB4GAB.mjs +23 -0
  106. package/dist/lib/node-esm/chunk-ODUB4GAB.mjs.map +7 -0
  107. package/dist/lib/node-esm/chunk-PGRP3O4O.mjs +33 -0
  108. package/dist/lib/node-esm/chunk-PGRP3O4O.mjs.map +7 -0
  109. package/dist/lib/node-esm/chunk-POKXRTII.mjs +352 -0
  110. package/dist/lib/node-esm/chunk-POKXRTII.mjs.map +7 -0
  111. package/dist/lib/node-esm/chunk-WXNPD542.mjs +1710 -0
  112. package/dist/lib/node-esm/chunk-WXNPD542.mjs.map +7 -0
  113. package/dist/lib/node-esm/chunk-X6AUQDTE.mjs +984 -0
  114. package/dist/lib/node-esm/chunk-X6AUQDTE.mjs.map +7 -0
  115. package/dist/lib/node-esm/index.mjs +107 -41
  116. package/dist/lib/node-esm/index.mjs.map +4 -4
  117. package/dist/lib/node-esm/{intent-resolver-OAMDKGAA.mjs → intent-resolver-CU22OPAH.mjs} +100 -72
  118. package/dist/lib/node-esm/intent-resolver-CU22OPAH.mjs.map +7 -0
  119. package/dist/lib/node-esm/markdown-HRGGO7IA.mjs +170 -0
  120. package/dist/lib/node-esm/markdown-HRGGO7IA.mjs.map +7 -0
  121. package/dist/lib/node-esm/meta.json +1 -1
  122. package/dist/lib/node-esm/react-root-NQMUEI6Z.mjs +28 -0
  123. package/dist/lib/node-esm/react-root-NQMUEI6Z.mjs.map +7 -0
  124. package/dist/lib/node-esm/react-surface-Z4X5VLMY.mjs +109 -0
  125. package/dist/lib/node-esm/react-surface-Z4X5VLMY.mjs.map +7 -0
  126. package/dist/lib/node-esm/{settings-AJAZ3O47.mjs → settings-IJGUOU3F.mjs} +3 -3
  127. package/dist/lib/node-esm/{state-IRLEO2SB.mjs → state-6AUTNROZ.mjs} +4 -4
  128. package/dist/lib/node-esm/{state-IRLEO2SB.mjs.map → state-6AUTNROZ.mjs.map} +3 -3
  129. package/dist/lib/node-esm/types/index.mjs +17 -0
  130. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  131. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  132. package/dist/types/src/calls/call-manager.d.ts +77 -0
  133. package/dist/types/src/calls/call-manager.d.ts.map +1 -0
  134. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +66 -0
  135. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -0
  136. package/dist/types/src/calls/index.d.ts +7 -0
  137. package/dist/types/src/calls/index.d.ts.map +1 -0
  138. package/dist/types/src/calls/media-manager.d.ts +60 -0
  139. package/dist/types/src/calls/media-manager.d.ts.map +1 -0
  140. package/dist/types/src/calls/speaking-monitor.d.ts +24 -0
  141. package/dist/types/src/calls/speaking-monitor.d.ts.map +1 -0
  142. package/dist/types/src/calls/types.d.ts +45 -0
  143. package/dist/types/src/calls/types.d.ts.map +1 -0
  144. package/dist/types/src/calls/util/audio.d.ts +6 -0
  145. package/dist/types/src/calls/util/audio.d.ts.map +1 -0
  146. package/dist/types/src/calls/util/calls-service.d.ts +72 -0
  147. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -0
  148. package/dist/types/src/calls/util/history-cache.d.ts +11 -0
  149. package/dist/types/src/calls/util/history-cache.d.ts.map +1 -0
  150. package/dist/types/src/calls/util/index.d.ts +5 -0
  151. package/dist/types/src/calls/util/index.d.ts.map +1 -0
  152. package/dist/types/src/calls/util/media.d.ts +6 -0
  153. package/dist/types/src/calls/util/media.d.ts.map +1 -0
  154. package/dist/types/src/calls/util/stub-media-streams.d.ts +18 -0
  155. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -0
  156. package/dist/types/src/calls/util/task-scheduling.d.ts +17 -0
  157. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -0
  158. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  159. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  160. package/dist/types/src/capabilities/call-manager.d.ts +5 -0
  161. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -0
  162. package/dist/types/src/capabilities/capabilities.d.ts +13 -1
  163. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  164. package/dist/types/src/capabilities/index.d.ts +8 -179
  165. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  166. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  167. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  168. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  169. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  170. package/dist/types/src/capabilities/react-root.d.ts +7 -0
  171. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  172. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  173. package/dist/types/src/components/Call/Call.d.ts +17 -0
  174. package/dist/types/src/components/Call/Call.d.ts.map +1 -0
  175. package/dist/types/src/components/Call/Toolbar.d.ts +16 -0
  176. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -0
  177. package/dist/types/src/components/Call/index.d.ts +3 -0
  178. package/dist/types/src/components/Call/index.d.ts.map +1 -0
  179. package/dist/types/src/components/CallDebugPanel.d.ts +8 -0
  180. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -0
  181. package/dist/types/src/components/CallSidebar.d.ts +4 -0
  182. package/dist/types/src/components/CallSidebar.d.ts.map +1 -0
  183. package/dist/types/src/components/ChannelContainer.d.ts +14 -0
  184. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
  185. package/dist/types/src/components/ChannelContainer.stories.d.ts +10 -0
  186. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -0
  187. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  188. package/dist/types/src/components/ChatContainer.d.ts +9 -7
  189. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  190. package/dist/types/src/components/CommentContainer.d.ts +11 -2
  191. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  192. package/dist/types/src/components/Comments.stories.d.ts +1 -1
  193. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  194. package/dist/types/src/components/CommentsContainer.d.ts +5 -9
  195. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  196. package/dist/types/src/components/Lobby/Lobby.d.ts +15 -0
  197. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -0
  198. package/dist/types/src/components/Lobby/index.d.ts +2 -0
  199. package/dist/types/src/components/Lobby/index.d.ts.map +1 -0
  200. package/dist/types/src/components/Media/AudioStream.d.ts +6 -0
  201. package/dist/types/src/components/Media/AudioStream.d.ts.map +1 -0
  202. package/dist/types/src/components/Media/VideoObject.d.ts +15 -0
  203. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -0
  204. package/dist/types/src/components/Media/VideoObject.stories.d.ts +8 -0
  205. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -0
  206. package/dist/types/src/components/Media/index.d.ts +3 -0
  207. package/dist/types/src/components/Media/index.d.ts.map +1 -0
  208. package/dist/types/src/components/MessageContainer.d.ts +5 -4
  209. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  210. package/dist/types/src/components/Participant/Participant.d.ts +6 -0
  211. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -0
  212. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +11 -0
  213. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -0
  214. package/dist/types/src/components/Participant/index.d.ts +3 -0
  215. package/dist/types/src/components/Participant/index.d.ts.map +1 -0
  216. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts +12 -0
  217. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +1 -0
  218. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +10 -0
  219. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -0
  220. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +32 -0
  221. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +1 -0
  222. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +23 -0
  223. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -0
  224. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +21 -0
  225. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -0
  226. package/dist/types/src/components/ResponsiveGrid/index.d.ts +4 -0
  227. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -0
  228. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  229. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  230. package/dist/types/src/components/index.d.ts +5 -1
  231. package/dist/types/src/components/index.d.ts.map +1 -1
  232. package/dist/types/src/components/testing.d.ts +54 -119
  233. package/dist/types/src/components/testing.d.ts.map +1 -1
  234. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  235. package/dist/types/src/hooks/analytics.d.ts +2 -2
  236. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  237. package/dist/types/src/hooks/index.d.ts +2 -1
  238. package/dist/types/src/hooks/index.d.ts.map +1 -1
  239. package/dist/types/src/hooks/useDebugMode.d.ts +2 -0
  240. package/dist/types/src/hooks/useDebugMode.d.ts.map +1 -0
  241. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  242. package/dist/types/src/index.d.ts +1 -1
  243. package/dist/types/src/index.d.ts.map +1 -1
  244. package/dist/types/src/meta.d.ts.map +1 -1
  245. package/dist/types/src/peers.stories.d.ts +11 -0
  246. package/dist/types/src/peers.stories.d.ts.map +1 -0
  247. package/dist/types/src/testing/index.d.ts +2 -0
  248. package/dist/types/src/testing/index.d.ts.map +1 -0
  249. package/dist/types/src/testing/stories.d.ts +2 -0
  250. package/dist/types/src/testing/stories.d.ts.map +1 -0
  251. package/dist/types/src/translations.d.ts +35 -56
  252. package/dist/types/src/translations.d.ts.map +1 -1
  253. package/dist/types/src/types/index.d.ts +3 -0
  254. package/dist/types/src/types/index.d.ts.map +1 -0
  255. package/dist/types/src/types/schema.d.ts +317 -0
  256. package/dist/types/src/types/schema.d.ts.map +1 -0
  257. package/dist/types/src/types/types.d.ts +1015 -0
  258. package/dist/types/src/types/types.d.ts.map +1 -0
  259. package/dist/types/src/util.d.ts +2 -0
  260. package/dist/types/src/util.d.ts.map +1 -1
  261. package/dist/types/tsconfig.tsbuildinfo +1 -1
  262. package/package.json +60 -40
  263. package/src/ThreadPlugin.tsx +33 -14
  264. package/src/calls/call-manager.ts +242 -0
  265. package/src/calls/call-swarm-synchronizer.ts +350 -0
  266. package/src/calls/index.ts +10 -0
  267. package/src/calls/media-manager.ts +342 -0
  268. package/src/calls/speaking-monitor.ts +85 -0
  269. package/src/calls/types.ts +70 -0
  270. package/src/calls/util/audio.ts +58 -0
  271. package/src/calls/util/calls-service.ts +527 -0
  272. package/src/calls/util/history-cache.ts +27 -0
  273. package/src/calls/util/index.ts +8 -0
  274. package/src/calls/util/media.ts +52 -0
  275. package/src/calls/util/stub-media-streams.ts +73 -0
  276. package/src/calls/util/task-scheduling.ts +92 -0
  277. package/src/capabilities/app-graph-builder.ts +171 -25
  278. package/src/capabilities/call-manager.ts +19 -0
  279. package/src/capabilities/capabilities.ts +15 -1
  280. package/src/capabilities/index.ts +2 -0
  281. package/src/capabilities/intent-resolver.ts +76 -55
  282. package/src/capabilities/markdown.ts +54 -4
  283. package/src/capabilities/react-root.tsx +17 -0
  284. package/src/capabilities/react-surface.tsx +52 -27
  285. package/src/capabilities/state.ts +1 -1
  286. package/src/components/Call/Call.tsx +88 -0
  287. package/src/components/Call/Toolbar.tsx +182 -0
  288. package/src/components/Call/index.ts +6 -0
  289. package/src/components/CallDebugPanel.tsx +115 -0
  290. package/src/components/CallSidebar.tsx +17 -0
  291. package/src/components/ChannelContainer.stories.tsx +58 -0
  292. package/src/components/ChannelContainer.tsx +203 -0
  293. package/src/components/Chat.stories.tsx +9 -10
  294. package/src/components/ChatContainer.tsx +37 -25
  295. package/src/components/CommentContainer.tsx +56 -61
  296. package/src/components/Comments.stories.tsx +20 -16
  297. package/src/components/CommentsContainer.tsx +18 -28
  298. package/src/components/Lobby/Lobby.tsx +119 -0
  299. package/src/components/Lobby/index.ts +5 -0
  300. package/src/components/Media/AudioStream.tsx +67 -0
  301. package/src/components/Media/VideoObject.stories.tsx +52 -0
  302. package/src/components/Media/VideoObject.tsx +58 -0
  303. package/src/components/Media/index.ts +6 -0
  304. package/src/components/MessageContainer.tsx +31 -50
  305. package/src/components/Participant/Participant.tsx +57 -0
  306. package/src/components/Participant/ParticipantGrid.tsx +88 -0
  307. package/src/components/Participant/index.ts +6 -0
  308. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +54 -0
  309. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +31 -0
  310. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +156 -0
  311. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +341 -0
  312. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +131 -0
  313. package/src/components/ResponsiveGrid/index.ts +7 -0
  314. package/src/components/ThreadComplementary.tsx +37 -42
  315. package/src/components/index.ts +4 -0
  316. package/src/components/testing.ts +4 -3
  317. package/src/extensions/threads.ts +42 -24
  318. package/src/hooks/analytics.ts +6 -2
  319. package/src/hooks/index.ts +2 -1
  320. package/src/hooks/useDebugMode.ts +25 -0
  321. package/src/index.ts +1 -1
  322. package/src/meta.ts +4 -3
  323. package/src/peers.stories.tsx +189 -0
  324. package/src/testing/index.ts +5 -0
  325. package/src/testing/stories.ts +50 -0
  326. package/src/translations.ts +46 -5
  327. package/src/types/index.ts +6 -0
  328. package/src/types/schema.ts +29 -0
  329. package/src/types/types.ts +110 -0
  330. package/src/typings/peermetrics-webrtc-stats.d.ts +30 -0
  331. package/src/util.ts +12 -0
  332. package/dist/lib/browser/ChatContainer-WC6KQDDU.mjs +0 -138
  333. package/dist/lib/browser/ChatContainer-WC6KQDDU.mjs.map +0 -7
  334. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs +0 -41
  335. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +0 -7
  336. package/dist/lib/browser/chunk-AYNXYEKP.mjs.map +0 -7
  337. package/dist/lib/browser/chunk-EP6MRLY7.mjs.map +0 -7
  338. package/dist/lib/browser/chunk-FY5OCUP6.mjs +0 -207
  339. package/dist/lib/browser/chunk-FY5OCUP6.mjs.map +0 -7
  340. package/dist/lib/browser/chunk-Q66FBBJD.mjs +0 -17
  341. package/dist/lib/browser/chunk-Q66FBBJD.mjs.map +0 -7
  342. package/dist/lib/browser/chunk-WBJLUUOK.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-WOG72DWE.mjs +0 -93
  344. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +0 -7
  345. package/dist/lib/browser/intent-resolver-3UW6ROYT.mjs.map +0 -7
  346. package/dist/lib/browser/markdown-7KXBXCUS.mjs +0 -111
  347. package/dist/lib/browser/markdown-7KXBXCUS.mjs.map +0 -7
  348. package/dist/lib/browser/react-surface-F2AIYIUH.mjs +0 -437
  349. package/dist/lib/browser/react-surface-F2AIYIUH.mjs.map +0 -7
  350. package/dist/lib/browser/types.mjs +0 -10
  351. package/dist/lib/node/ChatContainer-LVYQ67PJ.cjs +0 -163
  352. package/dist/lib/node/ChatContainer-LVYQ67PJ.cjs.map +0 -7
  353. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs +0 -57
  354. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +0 -7
  355. package/dist/lib/node/chunk-46BSFPBV.cjs +0 -113
  356. package/dist/lib/node/chunk-46BSFPBV.cjs.map +0 -7
  357. package/dist/lib/node/chunk-IX63EKGL.cjs.map +0 -7
  358. package/dist/lib/node/chunk-NQ5DTPOY.cjs.map +0 -7
  359. package/dist/lib/node/chunk-RIYLEDQ7.cjs +0 -232
  360. package/dist/lib/node/chunk-RIYLEDQ7.cjs.map +0 -7
  361. package/dist/lib/node/chunk-W25MBII2.cjs.map +0 -7
  362. package/dist/lib/node/intent-resolver-DC6HDNTX.cjs.map +0 -7
  363. package/dist/lib/node/markdown-L2WMCQKM.cjs +0 -121
  364. package/dist/lib/node/markdown-L2WMCQKM.cjs.map +0 -7
  365. package/dist/lib/node/react-surface-GP5IH5LN.cjs +0 -439
  366. package/dist/lib/node/react-surface-GP5IH5LN.cjs.map +0 -7
  367. package/dist/lib/node/types.cjs.map +0 -7
  368. package/dist/lib/node-esm/ChatContainer-WMOPMK5H.mjs +0 -139
  369. package/dist/lib/node-esm/ChatContainer-WMOPMK5H.mjs.map +0 -7
  370. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs +0 -42
  371. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +0 -7
  372. package/dist/lib/node-esm/chunk-42F2DTMM.mjs.map +0 -7
  373. package/dist/lib/node-esm/chunk-7DOPZH6Y.mjs +0 -208
  374. package/dist/lib/node-esm/chunk-7DOPZH6Y.mjs.map +0 -7
  375. package/dist/lib/node-esm/chunk-E446MGLP.mjs +0 -94
  376. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +0 -7
  377. package/dist/lib/node-esm/chunk-QUTIMZJ4.mjs +0 -19
  378. package/dist/lib/node-esm/chunk-QUTIMZJ4.mjs.map +0 -7
  379. package/dist/lib/node-esm/chunk-T6E5EY7Z.mjs.map +0 -7
  380. package/dist/lib/node-esm/chunk-WLY2HMDB.mjs.map +0 -7
  381. package/dist/lib/node-esm/intent-resolver-OAMDKGAA.mjs.map +0 -7
  382. package/dist/lib/node-esm/markdown-ZKU23UVD.mjs +0 -112
  383. package/dist/lib/node-esm/markdown-ZKU23UVD.mjs.map +0 -7
  384. package/dist/lib/node-esm/react-surface-45GRKLWG.mjs +0 -438
  385. package/dist/lib/node-esm/react-surface-45GRKLWG.mjs.map +0 -7
  386. package/dist/lib/node-esm/types.mjs +0 -11
  387. package/dist/types/src/components/types.d.ts +0 -28
  388. package/dist/types/src/components/types.d.ts.map +0 -1
  389. package/dist/types/src/events.d.ts +0 -4
  390. package/dist/types/src/events.d.ts.map +0 -1
  391. package/dist/types/src/types.d.ts +0 -231
  392. package/dist/types/src/types.d.ts.map +0 -1
  393. package/src/components/types.ts +0 -32
  394. package/src/events.ts +0 -11
  395. package/src/types.ts +0 -100
  396. /package/dist/lib/browser/{types.mjs.map → ChannelContainer-LGYSQMC7.mjs.map} +0 -0
  397. /package/dist/lib/{node-esm/types.mjs.map → browser/ChatContainer-JWRI73OG.mjs.map} +0 -0
  398. /package/dist/lib/browser/{settings-2VZ7S4SK.mjs.map → settings-KVBQQSO5.mjs.map} +0 -0
  399. /package/dist/lib/node/{settings-7MGTJ46L.cjs.map → settings-H45P5YO2.cjs.map} +0 -0
  400. /package/dist/lib/node-esm/{settings-AJAZ3O47.mjs.map → settings-IJGUOU3F.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/events.ts", "../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadEvents {\n export const SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';\nimport { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';\n\nimport { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { ThreadEvents as LocalThreadEvents } from './events';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--hash--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: MessageType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType, MessageTypeV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
5
- "mappings": "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",
6
- "names": ["Events", "ThreadEvents", "SetupActivity", "Events", "createStateEvent", "THREAD_PLUGIN", "Capabilities", "contributes", "createIntent", "defineModule", "definePlugin", "Events", "ClientCapabilities", "ClientEvents", "MarkdownEvents", "SpaceCapabilities", "ThreadEvents", "ChannelType", "defineObjectForm", "ThreadType", "RefArray", "translations", "threadTranslations", "MessageType", "MessageTypeV1", "MessageTypeV1ToV2", "ChannelType", "ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "ChannelType", "typename", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "MessageType", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "MessageTypeV1", "SetupMigration", "Migration", "MessageTypeV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "ThreadEvents", "SetupThread", "LocalThreadEvents", "SetupActivity", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
3
+ "sources": ["../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { defineObjectForm } from '@dxos/plugin-space/types';\nimport { type AnyLiveObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport {\n AppGraphBuilder,\n CallManager,\n IntentResolver,\n Markdown,\n ReactRoot,\n ReactSurface,\n ThreadState,\n} from './capabilities';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ChannelType, ThreadAction, ThreadType } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\n\n// TODO(wittjosiah): Rename to ChatPlugin.\n// TODO(wittjosiah): Enabling comments should likely be factored out of this plugin but depend on it's capabilities.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/call-manager`,\n activatesOn: ClientEvents.ClientReady,\n activate: CallManager,\n }),\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--hash--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: DataType.Message.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: AnyLiveObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(ClientCapabilities.Schema, [AnchoredTo, ThreadType, DataType.Message, DataType.MessageV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-root`,\n activatesOn: Events.Startup,\n activate: ReactRoot,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { THREAD_PLUGIN } from './meta';\nimport { ChannelType } from './types';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Chat',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'Comments',\n 'no comments message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n\n 'channel companion label': 'Channel',\n 'call panel label': 'Active Call',\n\n 'display name label': 'Display name',\n 'display name description': 'Set your display name before joining a meeting.',\n 'display name input placeholder': 'Enter your name',\n 'set display name label': 'Continue',\n\n 'call tab label': 'Call',\n 'meeting status title': 'Meeting',\n 'share meeting link label': 'Share meeting',\n 'show webrtc stats title': 'Detailed WebRTC Stats',\n\n 'meeting summary label': 'Summary',\n 'summarize label': 'Summarize',\n 'summarizing label': 'Creating summary...',\n 'create summary message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'join call': 'Join',\n 'leave call': 'Leave',\n\n 'lobby participants_zero': 'No participants',\n 'lobby participants_one': '1 participant',\n 'lobby participants_other': '{{count}} participants',\n\n 'icon pin': 'Pin video',\n 'icon unpin': 'Unpin video',\n 'icon wave': 'Waving',\n 'icon muted': 'Muted',\n 'icon speaking': 'Speaking',\n\n 'mic on': 'Unmute',\n 'mic off': 'Mute',\n 'camera on': 'Turn camera on',\n 'camera off': 'Turn camera off',\n 'camera off label': 'Camera off',\n\n 'raise hand': 'Raise hand',\n 'lower hand': 'Lower hand',\n 'screenshare on': 'Share screen',\n 'screenshare off': 'Stop streaming',\n },\n },\n },\n];\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,cAAcC,aAAaC,cAAcC,cAAcC,cAAcC,cAAc;AAC5F,SAASC,oBAAoBC,oBAAoB;AACjD,SAASC,sBAAsB;AAC/B,SAASC,yBAAyB;AAClC,SAASC,wBAAwB;AACjC,SAA6BC,gBAAgB;AAC7C,SAASC,gBAAgBC,0BAA0B;AACnD,SAASC,YAAYC,gBAAgB;;;ACJrC,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,YAAYC,QAAQ,GAAG;QACtB,kBAAkB;QAClB,2BAA2B;MAC7B;MACA,CAACC,aAAAA,GAAgB;QACf,eAAe;QACf,uBAAuB;QACvB,uBAAuB;QACvB,oBAAoB;QACpB,mBAAmB;QACnB,8BAA8B;QAC9B,yBAAyB;QACzB,uBAAuB;QACvB,wBAAwB;QACxB,yBAAyB;QACzB,oBAAoB;QACpB,gBAAgB;QAChB,gBAAgB;QAChB,qBAAqB;QACrB,uBACE;QACF,wBAAwB;QACxB,gCAAgC;QAChC,0BAA0B;QAC1B,4BAA4B;QAC5B,sBAAsB;QACtB,sBAAsB;QACtB,wBAAwB;QACxB,6BAA6B;QAC7B,kBAAkB;QAClB,kBAAkB;QAClB,yBAAyB;QAEzB,2BAA2B;QAC3B,oBAAoB;QAEpB,sBAAsB;QACtB,4BAA4B;QAC5B,kCAAkC;QAClC,0BAA0B;QAE1B,kBAAkB;QAClB,wBAAwB;QACxB,4BAA4B;QAC5B,2BAA2B;QAE3B,yBAAyB;QACzB,mBAAmB;QACnB,qBAAqB;QACrB,0BAA0B;QAE1B,aAAa;QACb,cAAc;QAEd,2BAA2B;QAC3B,0BAA0B;QAC1B,4BAA4B;QAE5B,YAAY;QACZ,cAAc;QACd,aAAa;QACb,cAAc;QACd,iBAAiB;QAEjB,UAAU;QACV,WAAW;QACX,aAAa;QACb,cAAc;QACd,oBAAoB;QAEpB,cAAc;QACd,cAAc;QACd,kBAAkB;QAClB,mBAAmB;MACrB;IACF;EACF;;;;ADvDK,IAAMC,eAAe,MAC1BC,aAAaC,MAAM;EACjBC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,aAAaC;IAC1BC,UAAUC;EACZ,CAAA;;;;;;;EAOAN,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;;;;IAIdC,aAAaK,OAAOC;IACpBH,UAAUI;EACZ,CAAA;EACAT,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAOG;IACpBL,UAAU,MAAMM,YAAYC,aAAaC,cAAc;SAAIC;SAAiBC;KAAmB;EACjG,CAAA;EACAf,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAOS;IACpBX,UAAU,MAAM;MACdM,YAAYC,aAAaK,UAAU;QACjChB,IAAIiB,YAAYC;QAChBC,UAAU;UACRC,MAAM;QACR;MACF,CAAA;MACAV,YAAYC,aAAaK,UAAU;QACjChB,IAAIqB,WAAWH;QACfC,UAAU;;UAERG,gBAAgB,OAAOC,WAAuB,MAAMC,SAASC,QAAQF,OAAOG,YAAY,CAAA,CAAE;QAC5F;MACF,CAAA;MACAhB,YAAYC,aAAaK,UAAU;QACjChB,IAAI2B,SAASC,QAAQV;QACrBC,UAAU;;UAERG,gBAAgB,CAACO,YAA8B,CAAA;QACjD;MACF,CAAA;MACAnB,YAAYC,aAAaK,UAAU;QACjChB,IAAI8B;QACJX,UAAU;UACRY,OAAO,CAACC,MAA0BC,SAAAA;AAChC,oBAAQA,MAAAA;cACN,KAAK;AACH,uBAAO;kBAAEjC,IAAIgC,KAAKhC;kBAAIkC,OAAOF,KAAKG;kBAAOC,MAAMJ;gBAAK;cACtD,KAAK;AACH,uBAAOA;cACT,KAAK;AACH,uBAAO;kBAAEhC,IAAI,GAAGgC,KAAKhC,EAAE;kBAASqC,QAAQL;gBAAK;YACjD;UACF;QACF;MACF,CAAA;;EAEJ,CAAA;EACAjC,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,aAAaoC;IAC1BlC,UAAU,MACRM,YACE6B,kBAAkBC,YAClBC,iBAAiB;MACfC,cAAczB;MACd0B,WAAW,CAACC,GAAGC,YAAYC,aAAaC,aAAaC,eAAe;QAAEC,SAASJ,QAAQK,MAAMlD;MAAG,CAAA;IAClG,CAAA,CAAA;EAEN,CAAA;EACAD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,aAAaoC;IAC1BlC,UAAU,MACRM,YAAYyC,mBAAmBC,QAAQ;MAACC;MAAYhC;MAAYM,SAASC;MAASD,SAAS2B;KAAU;EACzG,CAAA;EACAvD,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaC,aAAaqD;IAC1BnD,UAAU,MAAMM,YAAYyC,mBAAmBK,WAAW;MAAC7B,SAAS8B;KAAc;EACpF,CAAA;EACA1D,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAayD,eAAeC;IAC5BvD,UAAUwD;EACZ,CAAA;EACA7D,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAOuD;IACpBzD,UAAU0D;EACZ,CAAA;EACA/D,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAOyD;IACpB3D,UAAU4D;EACZ,CAAA;EACAjE,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAO2D;IACpB7D,UAAU8D;EACZ,CAAA;EACAnE,aAAa;IACXC,IAAI,GAAGF,KAAKE,EAAE;IACdC,aAAaK,OAAO6D;IACpB/D,UAAUgE;EACZ,CAAA;CACD;",
6
+ "names": ["Capabilities", "contributes", "createIntent", "defineModule", "definePlugin", "Events", "ClientCapabilities", "ClientEvents", "MarkdownEvents", "SpaceCapabilities", "defineObjectForm", "RefArray", "translations", "threadTranslations", "AnchoredTo", "DataType", "ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "ClientEvents", "ClientReady", "activate", "CallManager", "Events", "SetupSettings", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "ChannelType", "typename", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "DataType", "Message", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "AnchoredTo", "MessageV1", "SetupMigration", "Migration", "MessageV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "Startup", "ReactRoot", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }
@@ -1,80 +1,92 @@
1
1
  import {
2
- ThreadCapabilities
3
- } from "./chunk-EP6MRLY7.mjs";
2
+ ChannelType,
3
+ ThreadAction,
4
+ ThreadType
5
+ } from "./chunk-WDOQXTI2.mjs";
4
6
  import {
5
- ThreadAction
6
- } from "./chunk-WOG72DWE.mjs";
7
+ ThreadCapabilities
8
+ } from "./chunk-R5MDLUPC.mjs";
7
9
  import {
8
10
  THREAD_PLUGIN
9
- } from "./chunk-WBJLUUOK.mjs";
11
+ } from "./chunk-IIUTBDVB.mjs";
10
12
 
11
13
  // packages/plugins/plugin-thread/src/capabilities/intent-resolver.ts
14
+ import { batch } from "@preact/signals-core";
12
15
  import { Capabilities, contributes, createIntent, createResolver } from "@dxos/app-framework";
13
- import { ObjectId, Ref } from "@dxos/echo-schema";
16
+ import { RelationSourceId, RelationTargetId } from "@dxos/echo-schema";
14
17
  import { invariant } from "@dxos/invariant";
15
- import { DXN, QueueSubspaceTags } from "@dxos/keys";
16
- import { refFromDXN } from "@dxos/live-object";
17
- import { log } from "@dxos/log";
18
18
  import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
19
19
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
20
- import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
21
- import { live, fullyQualifiedId, getSpace, makeRef } from "@dxos/react-client/echo";
22
- import { MessageType } from "@dxos/schema";
20
+ import { SpaceAction } from "@dxos/plugin-space/types";
21
+ import { live, fullyQualifiedId, getSpace, Ref } from "@dxos/react-client/echo";
22
+ import { AnchoredTo, DataType } from "@dxos/schema";
23
23
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/capabilities/intent-resolver.ts";
24
24
  var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, [
25
25
  createResolver({
26
26
  intent: ThreadAction.CreateChannel,
27
- resolve: ({ spaceId, name }) => ({
27
+ resolve: ({ name }) => ({
28
28
  data: {
29
29
  object: live(ChannelType, {
30
30
  name,
31
- queue: refFromDXN(new DXN(DXN.kind.QUEUE, [
32
- QueueSubspaceTags.DATA,
33
- spaceId,
34
- ObjectId.random()
35
- ]))
31
+ defaultThread: Ref.make(live(ThreadType, {
32
+ messages: [],
33
+ status: "active"
34
+ })),
35
+ threads: []
36
36
  })
37
37
  }
38
38
  })
39
39
  }),
40
40
  createResolver({
41
- intent: ThreadAction.Create,
42
- resolve: ({ name, cursor, subject }) => {
43
- if (subject?.threads === void 0) {
44
- try {
45
- subject.threads = [];
46
- } catch (err) {
47
- log.error("Subject does not support threads array", {
48
- typename: subject?.typename
49
- }, {
50
- F: __dxlog_file,
51
- L: 43,
52
- S: void 0,
53
- C: (f, a) => f(...a)
54
- });
55
- return;
41
+ intent: ThreadAction.CreateChannelThread,
42
+ resolve: ({ channel }) => {
43
+ const thread = live(ThreadType, {
44
+ messages: [],
45
+ status: "active"
46
+ });
47
+ channel.threads.push(Ref.make(thread));
48
+ return {
49
+ data: {
50
+ object: thread
56
51
  }
57
- }
58
- const { state } = context.requestCapability(ThreadCapabilities.MutableState);
52
+ };
53
+ }
54
+ }),
55
+ // TODO(wittjosiah): Break this up into more composable pieces.
56
+ createResolver({
57
+ intent: ThreadAction.Create,
58
+ resolve: ({ name, anchor: _anchor, subject }) => {
59
+ const space = getSpace(subject);
60
+ invariant(space, "Space not found", {
61
+ F: __dxlog_file,
62
+ L: 51,
63
+ S: void 0,
64
+ A: [
65
+ "space",
66
+ "'Space not found'"
67
+ ]
68
+ });
69
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
59
70
  const subjectId = fullyQualifiedId(subject);
60
71
  const thread = live(ThreadType, {
61
72
  name,
62
- anchor: cursor,
63
73
  messages: [],
64
74
  status: "staged"
65
75
  });
76
+ const anchor = live(AnchoredTo, {
77
+ [RelationSourceId]: thread,
78
+ [RelationTargetId]: subject,
79
+ anchor: _anchor
80
+ });
66
81
  const draft = state.drafts[subjectId];
67
82
  if (draft) {
68
- draft.push(thread);
83
+ draft.push(anchor);
69
84
  } else {
70
85
  state.drafts[subjectId] = [
71
- thread
86
+ anchor
72
87
  ];
73
88
  }
74
89
  return {
75
- data: {
76
- object: thread
77
- },
78
90
  intents: [
79
91
  createIntent(ThreadAction.Select, {
80
92
  current: fullyQualifiedId(thread)
@@ -90,7 +102,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
90
102
  createResolver({
91
103
  intent: ThreadAction.Select,
92
104
  resolve: ({ current }) => {
93
- const { state } = context.requestCapability(ThreadCapabilities.MutableState);
105
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
94
106
  state.current = current;
95
107
  }
96
108
  }),
@@ -105,7 +117,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
105
117
  const space = getSpace(thread);
106
118
  invariant(space, "Space not found", {
107
119
  F: __dxlog_file,
108
- L: 87,
120
+ L: 96,
109
121
  S: void 0,
110
122
  A: [
111
123
  "space",
@@ -128,28 +140,27 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
128
140
  }),
129
141
  createResolver({
130
142
  intent: ThreadAction.Delete,
131
- resolve: ({ subject, thread }, undo) => {
132
- const { state } = context.requestCapability(ThreadCapabilities.MutableState);
143
+ resolve: ({ subject, anchor, thread: _thread }, undo) => {
144
+ const thread = _thread ?? anchor[RelationSourceId];
145
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
133
146
  const subjectId = fullyQualifiedId(subject);
134
147
  const draft = state.drafts[subjectId];
135
148
  if (draft) {
136
- const index = draft.findIndex((t) => t.id === thread.id);
149
+ const index = draft.findIndex((a) => a.id === anchor.id);
137
150
  if (index !== -1) {
138
151
  draft.splice(index, 1);
139
152
  return;
140
153
  }
141
154
  }
142
- const space = getSpace(thread);
143
- if (!space || !subject.threads) {
155
+ const space = getSpace(anchor);
156
+ if (!space) {
144
157
  return;
145
158
  }
146
159
  if (!undo) {
147
- const index = subject.threads.findIndex((t) => t?.id === thread.id);
148
- const cursor = subject.threads[index]?.anchor;
149
- if (index !== -1) {
150
- subject.threads?.splice(index, 1);
151
- }
152
- space.db.remove(thread);
160
+ batch(() => {
161
+ space.db.remove(thread);
162
+ space.db.remove(anchor);
163
+ });
153
164
  return {
154
165
  undoable: {
155
166
  message: [
@@ -159,7 +170,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
159
170
  }
160
171
  ],
161
172
  data: {
162
- cursor
173
+ thread,
174
+ anchor
163
175
  }
164
176
  },
165
177
  intents: [
@@ -173,8 +185,10 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
173
185
  ]
174
186
  };
175
187
  } else {
176
- const savedThread = space.db.add(thread);
177
- subject.threads.push(savedThread);
188
+ batch(() => {
189
+ space.db.add(thread);
190
+ space.db.add(anchor);
191
+ });
178
192
  return {
179
193
  intents: [
180
194
  createIntent(ObservabilityAction.SendEvent, {
@@ -191,13 +205,14 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
191
205
  }),
192
206
  createResolver({
193
207
  intent: ThreadAction.AddMessage,
194
- resolve: ({ thread, subject, sender, text }) => {
195
- const { state } = context.requestCapability(ThreadCapabilities.MutableState);
208
+ resolve: ({ anchor, subject, sender, text }) => {
209
+ const thread = anchor[RelationSourceId];
210
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
196
211
  const subjectId = fullyQualifiedId(subject);
197
212
  const space = getSpace(subject);
198
213
  invariant(space, "Space not found", {
199
214
  F: __dxlog_file,
200
- L: 172,
215
+ L: 181,
201
216
  S: void 0,
202
217
  A: [
203
218
  "space",
@@ -205,7 +220,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
205
220
  ]
206
221
  });
207
222
  const intents = [];
208
- const message = live(MessageType, {
223
+ const message = live(DataType.Message, {
209
224
  sender,
210
225
  created: (/* @__PURE__ */ new Date()).toISOString(),
211
226
  blocks: [
@@ -215,13 +230,25 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
215
230
  }
216
231
  ]
217
232
  });
218
- thread.messages.push(makeRef(message));
219
- if (state.drafts[subjectId]?.find((t) => t === thread)) {
233
+ thread.messages.push(Ref.make(message));
234
+ const draft = state.drafts[subjectId]?.find((a) => a.id === anchor.id);
235
+ if (draft) {
220
236
  thread.status = "active";
221
- subject.threads ? subject.threads.push(makeRef(thread)) : subject.threads = [
222
- makeRef(thread)
223
- ];
224
- state.drafts[subjectId] = state.drafts[subjectId]?.filter(({ id }) => id !== thread.id);
237
+ state.drafts[subjectId] = state.drafts[subjectId]?.filter((a) => a.id !== anchor.id);
238
+ intents.push(createIntent(SpaceAction.AddObject, {
239
+ object: thread,
240
+ target: space,
241
+ hidden: true
242
+ }));
243
+ intents.push(createIntent(SpaceAction.AddRelation, {
244
+ space,
245
+ schema: AnchoredTo,
246
+ source: thread,
247
+ target: subject,
248
+ fields: {
249
+ anchor: draft.anchor
250
+ }
251
+ }));
225
252
  intents.push(createIntent(ObservabilityAction.SendEvent, {
226
253
  name: "threads.create",
227
254
  properties: {
@@ -247,11 +274,12 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
247
274
  }),
248
275
  createResolver({
249
276
  intent: ThreadAction.DeleteMessage,
250
- resolve: ({ subject, thread, messageId, message, messageIndex }, undo) => {
277
+ resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {
278
+ const thread = anchor[RelationSourceId];
251
279
  const space = getSpace(subject);
252
280
  invariant(space, "Space not found", {
253
281
  F: __dxlog_file,
254
- L: 220,
282
+ L: 241,
255
283
  S: void 0,
256
284
  A: [
257
285
  "space",
@@ -269,7 +297,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
269
297
  intents: [
270
298
  createIntent(ThreadAction.Delete, {
271
299
  subject,
272
- thread
300
+ anchor
273
301
  })
274
302
  ]
275
303
  };
@@ -304,7 +332,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
304
332
  if (messageIndex === void 0 || !message) {
305
333
  return;
306
334
  }
307
- thread.messages.splice(messageIndex, 0, makeRef(message));
335
+ thread.messages.splice(messageIndex, 0, Ref.make(message));
308
336
  return {
309
337
  intents: [
310
338
  createIntent(ObservabilityAction.SendEvent, {
@@ -324,4 +352,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
324
352
  export {
325
353
  intent_resolver_default as default
326
354
  };
327
- //# sourceMappingURL=intent-resolver-3UW6ROYT.mjs.map
355
+ //# sourceMappingURL=intent-resolver-YUYZCTLF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\n\nimport { Capabilities, contributes, createIntent, createResolver, type PluginContext } from '@dxos/app-framework';\nimport { RelationSourceId, RelationTargetId } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { live, fullyQualifiedId, getSpace, Ref } from '@dxos/react-client/echo';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ChannelType, ThreadAction, ThreadType } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: ThreadAction.CreateChannel,\n resolve: ({ name }) => ({\n data: {\n object: live(ChannelType, {\n name,\n defaultThread: Ref.make(live(ThreadType, { messages: [], status: 'active' })),\n threads: [],\n }),\n },\n }),\n }),\n createResolver({\n intent: ThreadAction.CreateChannelThread,\n resolve: ({ channel }) => {\n const thread = live(ThreadType, { messages: [], status: 'active' });\n channel.threads.push(Ref.make(thread));\n return {\n data: {\n object: thread,\n },\n };\n },\n }),\n // TODO(wittjosiah): Break this up into more composable pieces.\n createResolver({\n intent: ThreadAction.Create,\n resolve: ({ name, anchor: _anchor, subject }) => {\n const space = getSpace(subject);\n invariant(space, 'Space not found');\n\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const thread = live(ThreadType, { name, messages: [], status: 'staged' });\n const anchor = live(AnchoredTo, {\n [RelationSourceId]: thread,\n [RelationTargetId]: subject,\n anchor: _anchor,\n });\n const draft = state.drafts[subjectId];\n if (draft) {\n draft.push(anchor);\n } else {\n state.drafts[subjectId] = [anchor];\n }\n\n return {\n intents: [\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),\n createIntent(DeckAction.ChangeCompanion, {\n primary: subjectId,\n companion: `${subjectId}${ATTENDABLE_PATH_SEPARATOR}comments`,\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: ThreadAction.Select,\n resolve: ({ current }) => {\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n state.current = current;\n },\n }),\n createResolver({\n intent: ThreadAction.ToggleResolved,\n resolve: ({ thread }) => {\n if (thread.status === 'active' || thread.status === undefined) {\n thread.status = 'resolved';\n } else if (thread.status === 'resolved') {\n thread.status = 'active';\n }\n\n const space = getSpace(thread);\n invariant(space, 'Space not found');\n const spaceId = space.id;\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-resolved',\n properties: {\n spaceId,\n threadId: thread.id,\n },\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: ThreadAction.Delete,\n resolve: ({ subject, anchor, thread: _thread }, undo) => {\n const thread = _thread ?? (anchor[RelationSourceId] as ThreadType);\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const draft = state.drafts[subjectId];\n if (draft) {\n // Check if we're deleting a draft; if so, remove it.\n const index = draft.findIndex((a) => a.id === anchor.id);\n if (index !== -1) {\n draft.splice(index, 1);\n return;\n }\n }\n\n const space = getSpace(anchor);\n if (!space) {\n return;\n }\n\n if (!undo) {\n batch(() => {\n space.db.remove(thread);\n space.db.remove(anchor);\n });\n\n return {\n undoable: {\n message: ['thread deleted label', { ns: THREAD_PLUGIN }],\n data: { thread, anchor },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n ],\n };\n } else {\n batch(() => {\n space.db.add(thread);\n space.db.add(anchor);\n });\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.undo-delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n ],\n };\n }\n },\n }),\n createResolver({\n intent: ThreadAction.AddMessage,\n resolve: ({ anchor, subject, sender, text }) => {\n const thread = anchor[RelationSourceId] as ThreadType;\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const space = getSpace(subject);\n invariant(space, 'Space not found');\n const intents = [];\n\n const message = live(DataType.Message, {\n sender,\n created: new Date().toISOString(),\n blocks: [{ type: 'text', text }],\n // TODO(wittjosiah): Context based on attention.\n // context: context ? makeRef(context) : undefined,\n });\n thread.messages.push(Ref.make(message));\n\n const draft = state.drafts[subjectId]?.find((a) => a.id === anchor.id);\n if (draft) {\n // Move draft to document.\n thread.status = 'active';\n // TODO(wittjosiah): This causes the thread to flash as it transitions from draft to db.\n state.drafts[subjectId] = state.drafts[subjectId]?.filter((a) => a.id !== anchor.id);\n intents.push(createIntent(SpaceAction.AddObject, { object: thread, target: space, hidden: true }));\n intents.push(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: AnchoredTo,\n source: thread,\n target: subject,\n fields: { anchor: draft.anchor },\n }),\n );\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.create',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n );\n }\n\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.add',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n threadLength: thread.messages.length,\n messageId: message.id,\n messageLength: text.length,\n },\n }),\n );\n\n return { intents };\n },\n }),\n createResolver({\n intent: ThreadAction.DeleteMessage,\n resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {\n const thread = anchor[RelationSourceId] as ThreadType;\n const space = getSpace(subject);\n invariant(space, 'Space not found');\n\n if (!undo) {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));\n const message = thread.messages[messageIndex]?.target;\n if (!message) {\n return;\n }\n\n if (messageIndex === 0 && thread.messages.length === 1) {\n // If the message is the only message in the thread, delete the thread.\n return {\n intents: [createIntent(ThreadAction.Delete, { subject, anchor })],\n };\n } else {\n thread.messages.splice(messageIndex, 1);\n }\n\n return {\n undoable: {\n message: ['message deleted label', { ns: THREAD_PLUGIN }],\n data: { message, messageIndex },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n messageId: message.id,\n },\n }),\n ],\n };\n } else {\n if (messageIndex === undefined || !message) {\n return;\n }\n\n thread.messages.splice(messageIndex, 0, Ref.make(message));\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.undo-delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n messageId: message.id,\n },\n }),\n ],\n };\n }\n },\n }),\n ]);\n"],
5
+ "mappings": "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",
6
+ "names": ["batch", "Capabilities", "contributes", "createIntent", "createResolver", "RelationSourceId", "RelationTargetId", "invariant", "ATTENDABLE_PATH_SEPARATOR", "DeckAction", "ObservabilityAction", "SpaceAction", "live", "fullyQualifiedId", "getSpace", "Ref", "AnchoredTo", "DataType", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "ThreadAction", "CreateChannel", "resolve", "name", "data", "object", "live", "ChannelType", "defaultThread", "Ref", "make", "ThreadType", "messages", "status", "threads", "CreateChannelThread", "channel", "thread", "push", "Create", "anchor", "_anchor", "subject", "space", "getSpace", "invariant", "state", "getCapability", "ThreadCapabilities", "MutableState", "subjectId", "fullyQualifiedId", "AnchoredTo", "RelationSourceId", "RelationTargetId", "draft", "drafts", "intents", "createIntent", "Select", "current", "DeckAction", "ChangeCompanion", "primary", "companion", "ATTENDABLE_PATH_SEPARATOR", "ToggleResolved", "undefined", "spaceId", "id", "ObservabilityAction", "SendEvent", "properties", "threadId", "Delete", "_thread", "undo", "index", "findIndex", "a", "splice", "batch", "db", "remove", "undoable", "message", "ns", "THREAD_PLUGIN", "add", "AddMessage", "sender", "text", "DataType", "Message", "created", "Date", "toISOString", "blocks", "type", "find", "filter", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "source", "fields", "threadLength", "length", "messageId", "messageLength", "DeleteMessage", "messageIndex", "hasObjectId"]
7
+ }
@@ -0,0 +1,169 @@
1
+ import {
2
+ ThreadAction,
3
+ ThreadType
4
+ } from "./chunk-WDOQXTI2.mjs";
5
+ import {
6
+ ThreadCapabilities
7
+ } from "./chunk-R5MDLUPC.mjs";
8
+ import "./chunk-IIUTBDVB.mjs";
9
+
10
+ // packages/plugins/plugin-thread/src/capabilities/markdown.ts
11
+ import { EditorView as EditorView2 } from "@codemirror/view";
12
+ import { Capabilities, contributes, createIntent as createIntent2 } from "@dxos/app-framework";
13
+ import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from "@dxos/plugin-deck/types";
14
+ import { MarkdownCapabilities } from "@dxos/plugin-markdown";
15
+ import { fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
16
+ import { commentClickedEffect, commentsState, overlap } from "@dxos/react-ui-editor";
17
+
18
+ // packages/plugins/plugin-thread/src/extensions/threads.ts
19
+ import { EditorView } from "@codemirror/view";
20
+ import { computed, effect } from "@preact/signals-core";
21
+ import { createIntent } from "@dxos/app-framework";
22
+ import { Filter, isInstanceOf, Query, RelationSourceId } from "@dxos/echo-schema";
23
+ import { getSpace, getTextInRange, createDocAccessor, fullyQualifiedId, getSource } from "@dxos/react-client/echo";
24
+ import { comments, createExternalCommentSync } from "@dxos/react-ui-editor";
25
+ import { AnchoredTo } from "@dxos/schema";
26
+ var getName = (doc, anchor) => {
27
+ if (doc.content) {
28
+ const [start, end] = anchor.split(":");
29
+ return getTextInRange(createDocAccessor(doc.content.target, [
30
+ "content"
31
+ ]), start, end);
32
+ }
33
+ };
34
+ var threads = (state, doc, dispatch) => {
35
+ const space = doc && getSpace(doc);
36
+ if (!doc || !space || !dispatch) {
37
+ return [
38
+ comments()
39
+ ];
40
+ }
41
+ const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));
42
+ const unsubscribe = query.subscribe();
43
+ const anchors = computed(() => query.objects.filter((anchor) => {
44
+ const thread = anchor[RelationSourceId];
45
+ return isInstanceOf(ThreadType, thread) && thread.status !== "resolved";
46
+ }).concat(state.drafts[fullyQualifiedId(doc)] ?? []));
47
+ return [
48
+ EditorView.domEventHandlers({
49
+ destroy: () => {
50
+ unsubscribe();
51
+ }
52
+ }),
53
+ EditorView.updateListener.of((update) => {
54
+ if (update.docChanged) {
55
+ anchors.value.forEach((anchor) => {
56
+ if (anchor.anchor) {
57
+ const name = getName(doc, anchor.anchor);
58
+ const thread = anchor[RelationSourceId];
59
+ if (name && name !== thread.name) {
60
+ thread.name = name;
61
+ }
62
+ }
63
+ });
64
+ }
65
+ }),
66
+ createExternalCommentSync(fullyQualifiedId(doc), (sink) => effect(() => sink()), () => anchors.value.filter((anchor) => anchor.anchor).map((anchor) => ({
67
+ id: fullyQualifiedId(anchor[RelationSourceId]),
68
+ cursor: anchor.anchor
69
+ }))),
70
+ comments({
71
+ id: fullyQualifiedId(doc),
72
+ onCreate: ({ cursor }) => {
73
+ const name = getName(doc, cursor);
74
+ void dispatch(createIntent(ThreadAction.Create, {
75
+ anchor: cursor,
76
+ name,
77
+ subject: doc
78
+ }));
79
+ },
80
+ onDelete: ({ id }) => {
81
+ const draft = state.drafts[fullyQualifiedId(doc)];
82
+ if (draft) {
83
+ const index = draft.findIndex((thread2) => fullyQualifiedId(thread2) === id);
84
+ if (index !== -1) {
85
+ draft.splice(index, 1);
86
+ }
87
+ }
88
+ const thread = query.objects.find((object) => getSource(object).id === id);
89
+ if (thread) {
90
+ thread.anchor = void 0;
91
+ }
92
+ },
93
+ onUpdate: ({ id, cursor }) => {
94
+ const draft = state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id);
95
+ if (draft) {
96
+ const thread = draft[RelationSourceId];
97
+ thread.name = getName(doc, cursor);
98
+ draft.anchor = cursor;
99
+ }
100
+ const relation = query.objects.find((object) => getSource(object).id === id);
101
+ if (relation) {
102
+ const thread = getSource(relation);
103
+ if (isInstanceOf(ThreadType, thread)) {
104
+ thread.name = getName(doc, cursor);
105
+ relation.anchor = cursor;
106
+ }
107
+ }
108
+ },
109
+ onSelect: ({ selection }) => {
110
+ const current = selection.current ?? selection.closest;
111
+ if (current) {
112
+ void dispatch(createIntent(ThreadAction.Select, {
113
+ current
114
+ }));
115
+ }
116
+ }
117
+ })
118
+ ];
119
+ };
120
+
121
+ // packages/plugins/plugin-thread/src/capabilities/markdown.ts
122
+ var markdown_default = (context) => contributes(MarkdownCapabilities.Extensions, [
123
+ ({ document: doc }) => {
124
+ const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
125
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
126
+ return threads(state, doc, dispatch);
127
+ },
128
+ ({ document: doc }) => {
129
+ const { state } = context.getCapability(ThreadCapabilities.MutableState);
130
+ return EditorView2.updateListener.of((update) => {
131
+ if (update.docChanged || update.selectionSet) {
132
+ state.toolbar[fullyQualifiedId2(doc)] = selectionOverlapsComment(update.state);
133
+ }
134
+ });
135
+ },
136
+ ({ document: doc }) => {
137
+ const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
138
+ const id = fullyQualifiedId2(doc);
139
+ return EditorView2.updateListener.of((update) => {
140
+ update.transactions.forEach((transaction) => {
141
+ transaction.effects.forEach(async (effect2) => {
142
+ if (effect2.is(commentClickedEffect)) {
143
+ void dispatch(createIntent2(DeckAction.ChangeCompanion, {
144
+ primary: id,
145
+ companion: `${id}${ATTENDABLE_PATH_SEPARATOR}comments`
146
+ }));
147
+ }
148
+ });
149
+ });
150
+ });
151
+ }
152
+ ]);
153
+ var selectionOverlapsComment = (state) => {
154
+ const commentState = state.field(commentsState, false);
155
+ if (commentState === void 0) {
156
+ return false;
157
+ }
158
+ const { selection } = state;
159
+ for (const range of selection.ranges) {
160
+ if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {
161
+ return true;
162
+ }
163
+ }
164
+ return false;
165
+ };
166
+ export {
167
+ markdown_default as default
168
+ };
169
+ //# sourceMappingURL=markdown-4EC3OCF2.mjs.map