@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d

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 (297) hide show
  1. package/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs +17 -0
  2. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +16 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-TWJ2UCOZ.mjs} +32 -32
  4. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +101 -0
  6. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-4YFT4XA6.mjs} +8 -7
  8. package/dist/lib/{node-esm/call-manager-N3KASRDQ.mjs.map → browser/call-manager-4YFT4XA6.mjs.map} +1 -1
  9. package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-ALZKJOZK.mjs} +40 -37
  10. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-ANTFU4JB.mjs +25 -0
  12. package/dist/lib/browser/chunk-ANTFU4JB.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-CFC7LEPD.mjs +18 -0
  14. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  16. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-ISCHODBV.mjs} +53 -3
  18. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  20. package/dist/lib/browser/{chunk-KTWYVC5X.mjs → chunk-JDJPMI7V.mjs} +47 -51
  21. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-KOBXMDCI.mjs} +68 -67
  23. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-NPT5S6N4.mjs} +164 -101
  25. package/dist/lib/browser/chunk-NPT5S6N4.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-QM34EZQK.mjs +20 -0
  27. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +7 -0
  28. package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-TLOOZTRD.mjs} +18 -17
  29. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +7 -0
  30. package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-ZCW3NSDZ.mjs} +274 -374
  31. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  32. package/dist/lib/browser/index.mjs +55 -57
  33. package/dist/lib/browser/index.mjs.map +3 -3
  34. package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-G33FT3NO.mjs} +40 -113
  35. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +7 -0
  36. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-WFZFYJBQ.mjs} +30 -27
  37. package/dist/lib/browser/markdown-WFZFYJBQ.mjs.map +7 -0
  38. package/dist/lib/browser/meta.json +1 -1
  39. package/dist/lib/browser/react-root-ED7PHA44.mjs +29 -0
  40. package/dist/lib/browser/react-root-ED7PHA44.mjs.map +7 -0
  41. package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-AUQQSQQC.mjs} +38 -36
  42. package/dist/lib/browser/react-surface-AUQQSQQC.mjs.map +7 -0
  43. package/dist/lib/browser/repair-JFJLEM2O.mjs +35 -0
  44. package/dist/lib/browser/repair-JFJLEM2O.mjs.map +7 -0
  45. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-E6IOLK46.mjs} +6 -5
  46. package/dist/lib/{node-esm/settings-F2ODVNNW.mjs.map → browser/settings-E6IOLK46.mjs.map} +1 -1
  47. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-UYPLBGZJ.mjs} +6 -5
  48. package/dist/lib/{node-esm/state-62TQKQVB.mjs.map → browser/state-UYPLBGZJ.mjs.map} +1 -1
  49. package/dist/lib/browser/types/index.mjs +7 -10
  50. package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.mjs +18 -0
  51. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +17 -0
  52. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-VD6I2V5H.mjs} +32 -32
  54. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +7 -0
  55. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +102 -0
  56. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +7 -0
  57. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-UMUXEYH5.mjs} +8 -7
  58. package/dist/lib/{browser/call-manager-EW2QC6Q4.mjs.map → node-esm/call-manager-UMUXEYH5.mjs.map} +1 -1
  59. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +22 -0
  60. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-7KZWZS2U.mjs} +274 -374
  62. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-AB42KYF3.mjs} +40 -37
  64. package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  66. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-ATNY37UV.mjs +27 -0
  68. package/dist/lib/node-esm/chunk-ATNY37UV.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-E5HNHFYH.mjs} +18 -17
  70. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-FF3QVPY4.mjs} +164 -101
  72. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  74. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  75. package/dist/lib/node-esm/{chunk-P6E247RF.mjs → chunk-P2M364TO.mjs} +47 -51
  76. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +7 -0
  77. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-PZH2EDU5.mjs} +68 -67
  78. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  79. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +19 -0
  80. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-VBI32FGI.mjs} +53 -3
  82. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  83. package/dist/lib/node-esm/index.mjs +55 -57
  84. package/dist/lib/node-esm/index.mjs.map +3 -3
  85. package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-4PX3WXQG.mjs} +40 -113
  86. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +7 -0
  87. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-CSR5MAPZ.mjs} +30 -27
  88. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs.map +7 -0
  89. package/dist/lib/node-esm/meta.json +1 -1
  90. package/dist/lib/node-esm/react-root-DZN324JA.mjs +30 -0
  91. package/dist/lib/node-esm/react-root-DZN324JA.mjs.map +7 -0
  92. package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-AMVESEF4.mjs} +38 -36
  93. package/dist/lib/node-esm/react-surface-AMVESEF4.mjs.map +7 -0
  94. package/dist/lib/node-esm/repair-RMLR24YR.mjs +36 -0
  95. package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +7 -0
  96. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-RGZHWDSO.mjs} +6 -5
  97. package/dist/lib/{browser/settings-GRKEID73.mjs.map → node-esm/settings-RGZHWDSO.mjs.map} +1 -1
  98. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-XNWOLBNE.mjs} +6 -5
  99. package/dist/lib/{browser/state-2T4KDWBX.mjs.map → node-esm/state-XNWOLBNE.mjs.map} +1 -1
  100. package/dist/lib/node-esm/types/index.mjs +7 -10
  101. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  102. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  103. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  104. package/dist/types/src/calls/types.d.ts.map +1 -1
  105. package/dist/types/src/calls/util/calls-service.d.ts +2 -0
  106. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  107. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  108. package/dist/types/src/calls-service.stories.d.ts +0 -1
  109. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  112. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  114. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/index.d.ts +2 -1
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/repair.d.ts +4 -0
  121. package/dist/types/src/capabilities/repair.d.ts.map +1 -0
  122. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  123. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  124. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  125. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  126. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  127. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/ChannelContainer.stories.d.ts +79 -9
  129. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  130. package/dist/types/src/components/Chat.stories.d.ts +79 -7
  131. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  132. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  133. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/Comments.stories.d.ts +8 -3
  135. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  137. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  138. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  139. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  140. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  141. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  142. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  143. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  144. package/dist/types/src/components/MessageContainer.d.ts +4 -2
  145. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  146. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +9 -3
  147. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +9 -3
  149. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  150. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  151. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  152. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  153. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  154. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  155. package/dist/types/src/components/index.d.ts +3 -3
  156. package/dist/types/src/components/index.d.ts.map +1 -1
  157. package/dist/types/src/components/testing.d.ts +3 -3
  158. package/dist/types/src/components/testing.d.ts.map +1 -1
  159. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  160. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  161. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  162. package/dist/types/src/functions/index.d.ts +2 -0
  163. package/dist/types/src/functions/index.d.ts.map +1 -0
  164. package/dist/types/src/hooks/analytics.d.ts +2 -2
  165. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  166. package/dist/types/src/hooks/index.d.ts +2 -2
  167. package/dist/types/src/hooks/index.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  169. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  170. package/dist/types/src/meta.d.ts +1 -2
  171. package/dist/types/src/meta.d.ts.map +1 -1
  172. package/dist/types/src/testing/stories.d.ts.map +1 -1
  173. package/dist/types/src/translations.d.ts +78 -7
  174. package/dist/types/src/translations.d.ts.map +1 -1
  175. package/dist/types/src/types/Channel.d.ts +16 -0
  176. package/dist/types/src/types/Channel.d.ts.map +1 -0
  177. package/dist/types/src/types/index.d.ts +1 -1
  178. package/dist/types/src/types/index.d.ts.map +1 -1
  179. package/dist/types/src/types/types.d.ts +130 -244
  180. package/dist/types/src/types/types.d.ts.map +1 -1
  181. package/dist/types/tsconfig.tsbuildinfo +1 -1
  182. package/package.json +64 -60
  183. package/src/ThreadPlugin.tsx +135 -134
  184. package/src/calls/call-manager.ts +1 -1
  185. package/src/calls/media-manager.ts +11 -7
  186. package/src/calls/types.ts +7 -3
  187. package/src/calls/util/calls-service.ts +12 -7
  188. package/src/calls/util/stub-media-streams.ts +61 -3
  189. package/src/calls-service.stories.tsx +2 -5
  190. package/src/capabilities/app-graph-builder.ts +41 -30
  191. package/src/capabilities/blueprint-definition.ts +38 -0
  192. package/src/capabilities/capabilities.ts +7 -7
  193. package/src/capabilities/index.ts +2 -1
  194. package/src/capabilities/intent-resolver.ts +29 -67
  195. package/src/capabilities/markdown.ts +5 -3
  196. package/src/capabilities/react-root.tsx +2 -2
  197. package/src/capabilities/react-surface.tsx +25 -23
  198. package/src/capabilities/repair.ts +40 -0
  199. package/src/components/Call/Call.tsx +1 -1
  200. package/src/components/Call/Toolbar.tsx +9 -9
  201. package/src/components/CallDebugPanel.tsx +112 -55
  202. package/src/components/CallSidebar.tsx +1 -1
  203. package/src/components/ChannelContainer.stories.tsx +10 -10
  204. package/src/components/ChannelContainer.tsx +19 -15
  205. package/src/components/Chat.stories.tsx +14 -19
  206. package/src/components/ChatContainer.tsx +29 -21
  207. package/src/components/Comments.stories.tsx +11 -17
  208. package/src/components/CommentsContainer.tsx +5 -7
  209. package/src/components/CommentsThreadContainer.tsx +31 -27
  210. package/src/components/Lobby/Lobby.tsx +1 -1
  211. package/src/components/Media/VideoObject.stories.tsx +12 -7
  212. package/src/components/Media/VideoObject.tsx +1 -1
  213. package/src/components/MessageContainer.tsx +11 -9
  214. package/src/components/Participant/Participant.tsx +1 -1
  215. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  216. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  217. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  218. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  219. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  220. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  221. package/src/components/ThreadSettings.tsx +4 -5
  222. package/src/components/index.ts +4 -4
  223. package/src/components/testing.ts +7 -9
  224. package/src/extensions/threads.ts +30 -20
  225. package/src/functions/create-proposals.ts +56 -0
  226. package/src/functions/index.ts +5 -0
  227. package/src/hooks/analytics.ts +4 -7
  228. package/src/hooks/index.ts +3 -2
  229. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  230. package/src/meta.ts +9 -5
  231. package/src/testing/stories.ts +3 -6
  232. package/src/translations.ts +8 -4
  233. package/src/types/Channel.ts +26 -0
  234. package/src/types/index.ts +1 -1
  235. package/src/types/types.ts +21 -29
  236. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  237. package/src/util.ts +1 -1
  238. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
  239. package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
  240. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
  242. package/dist/lib/browser/chunk-2I277V52.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-2P3GVRHP.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  245. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  247. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
  252. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
  255. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
  256. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  257. package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
  258. package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
  259. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
  260. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  261. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  262. package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
  263. package/dist/lib/node-esm/ChatContainer-4EGHKHIU.mjs +0 -16
  264. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  269. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
  271. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  273. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  274. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  275. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
  277. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
  278. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs.map +0 -7
  279. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
  280. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  281. package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
  282. package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
  283. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
  284. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  285. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  286. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  287. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  288. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  289. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  290. package/dist/types/src/types/schema.d.ts +0 -177
  291. package/dist/types/src/types/schema.d.ts.map +0 -1
  292. package/src/capabilities/toolkit.ts +0 -78
  293. package/src/types/schema.ts +0 -33
  294. /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-L7MKV7DS.mjs.map} +0 -0
  295. /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-KPY4BAUE.mjs.map} +0 -0
  296. /package/dist/lib/{node-esm/ChannelContainer-D5E2S6AI.mjs.map → browser/chunk-J5LGTIGS.mjs.map} +0 -0
  297. /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChannelContainer-FYONOOZ6.mjs.map} +0 -0
@@ -18,7 +18,7 @@ const MIN_GALLERY_HEIGHT = 250;
18
18
 
19
19
  const DEFAULT_GAP = 8;
20
20
 
21
- const maxImageSize = 'w-[2560px] h-[1440px]';
21
+ const maxImageSize = 'is-[2560px] bs-[1440px]';
22
22
 
23
23
  /**
24
24
  * Props for the ResponsiveGrid component.
@@ -136,13 +136,13 @@ export const ResponsiveGrid = <T extends object = any>({
136
136
  );
137
137
 
138
138
  return (
139
- <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>
139
+ <div ref={containerRef} className={mx('relative is-full bs-full', classNames)}>
140
140
  {/* Placeholder elements to calculate layout. */}
141
141
  <div className='absolute inset-0 flex flex-col grow gap-2'>
142
142
  {/* Pinned item. */}
143
143
  {pinnedItem && (
144
144
  <div
145
- className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}
145
+ className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'bs-full')}
146
146
  style={hideGallery ? {} : { height: dividerHeight }}
147
147
  >
148
148
  <SoloItem id={getId(pinnedItem)} debug={debug} />
@@ -157,7 +157,7 @@ export const ResponsiveGrid = <T extends object = any>({
157
157
  style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}
158
158
  >
159
159
  {mainItems.length === 1 && (
160
- <div style={{ width: cellWidth }} className='flex h-full'>
160
+ <div style={{ width: cellWidth }} className='flex bs-full'>
161
161
  <SoloItem id={getId(mainItems[0])} debug={debug} />
162
162
  </div>
163
163
  )}
@@ -176,7 +176,7 @@ export const ResponsiveGrid = <T extends object = any>({
176
176
  key={getId(item)}
177
177
  {...{ 'data-grid-item': getId(item) }}
178
178
  className={mx(
179
- 'aspect-video max-h-full max-w-full w-auto h-auto',
179
+ 'aspect-video max-bs-full max-is-full is-auto bs-auto',
180
180
  debug && 'border border-primary-500',
181
181
  )}
182
182
  />
@@ -76,7 +76,7 @@ export const ResponsiveGridItem = <T extends object = any>({
76
76
  return (
77
77
  <div
78
78
  className={mx(
79
- 'relative w-full h-full group',
79
+ 'relative is-full bs-full group',
80
80
  'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',
81
81
  speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',
82
82
  classNames,
@@ -106,7 +106,10 @@ export const ResponsiveGridItem = <T extends object = any>({
106
106
  {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}
107
107
  {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
108
108
  <div
109
- className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}
109
+ className={mx(
110
+ 'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',
111
+ pinned ? 'pli-2' : 'pli-1 text-xs',
112
+ )}
110
113
  >
111
114
  {name}
112
115
  </div>
@@ -4,36 +4,28 @@
4
4
 
5
5
  import React, { useCallback, useMemo } from 'react';
6
6
 
7
- import {
8
- Capabilities,
9
- CollaborationActions,
10
- LayoutAction,
11
- createIntent,
12
- useCapabilities,
13
- useCapability,
14
- useIntentDispatcher,
15
- } from '@dxos/app-framework';
7
+ import { Capabilities, CollaborationActions, LayoutAction, createIntent } from '@dxos/app-framework';
8
+ import { useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework/react';
16
9
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
17
- import { Ref, fullyQualifiedId, getSpace, useQuery } from '@dxos/react-client/echo';
10
+ import { Ref, getSpace, useQuery } from '@dxos/react-client/echo';
18
11
  import { useIdentity } from '@dxos/react-client/halo';
19
- import { useThemeContext, useTranslation } from '@dxos/react-ui';
12
+ import { useTranslation } from '@dxos/react-ui';
20
13
  import { useAttended } from '@dxos/react-ui-attention';
21
14
  import { StackItem } from '@dxos/react-ui-stack';
22
15
  import { Tabs } from '@dxos/react-ui-tabs';
23
16
  import { mx } from '@dxos/react-ui-theme';
24
- import { AnchoredTo } from '@dxos/schema';
17
+ import { AnchoredTo, Thread } from '@dxos/types';
25
18
 
26
19
  import { ThreadCapabilities } from '../capabilities';
27
20
  import { CommentsContainer, type CommentsContainerProps } from '../components';
28
21
  import { meta } from '../meta';
29
- import { ThreadAction, ThreadType } from '../types';
22
+ import { ThreadAction } from '../types';
30
23
 
31
- export const ThreadComplementary = ({ subject }: { subject: any }) => {
24
+ export const ThreadCompanion = ({ subject }: { subject: any }) => {
32
25
  const { t } = useTranslation(meta.id);
33
26
  const { dispatchPromise: dispatch } = useIntentDispatcher();
34
27
  const identity = useIdentity();
35
- const { tx } = useThemeContext();
36
- const subjectId = fullyQualifiedId(subject);
28
+ const subjectId = Obj.getDXN(subject).toString();
37
29
 
38
30
  const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);
39
31
  const drafts = state.drafts[subjectId];
@@ -53,18 +45,18 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
53
45
  );
54
46
 
55
47
  const space = getSpace(subject);
56
- const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));
48
+ const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo.AnchoredTo));
57
49
  const anchors = objectsAnchoredTo
58
50
  .toSorted((a, b) => sort?.(a, b) ?? 0)
59
- .filter((anchor) => Obj.instanceOf(ThreadType, Relation.getSource(anchor)))
51
+ .filter((anchor) => Obj.instanceOf(Thread.Thread, Relation.getSource(anchor)))
60
52
  .concat(drafts ?? []);
61
53
 
62
54
  const attended = useAttended();
63
55
 
64
56
  const handleAttend = useCallback(
65
- (anchor: AnchoredTo) => {
66
- const thread = Relation.getSource(anchor) as ThreadType;
67
- const threadId = fullyQualifiedId(thread);
57
+ (anchor: AnchoredTo.AnchoredTo) => {
58
+ const thread = Relation.getSource(anchor) as Thread.Thread;
59
+ const threadId = Obj.getDXN(thread).toString();
68
60
 
69
61
  if (state.current !== threadId) {
70
62
  state.current = threadId;
@@ -75,7 +67,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
75
67
  void dispatch(
76
68
  createIntent(LayoutAction.ScrollIntoView, {
77
69
  part: 'current',
78
- subject: fullyQualifiedId(subject),
70
+ subject: Obj.getDXN(subject).toString(),
79
71
  options: {
80
72
  cursor: anchor.anchor,
81
73
  ref: threadId,
@@ -88,37 +80,52 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
88
80
  );
89
81
 
90
82
  const handleComment = useCallback(
91
- async (anchor: AnchoredTo, text: string) => {
83
+ async (anchor: AnchoredTo.AnchoredTo, text: string) => {
92
84
  await dispatch(
93
- createIntent(ThreadAction.AddMessage, { anchor, subject, sender: { identityDid: identity?.did }, text }),
85
+ createIntent(ThreadAction.AddMessage, {
86
+ anchor,
87
+ subject,
88
+ sender: { identityDid: identity?.did },
89
+ text,
90
+ }),
94
91
  );
95
92
 
96
- const thread = Relation.getSource(anchor) as ThreadType;
97
- state.current = fullyQualifiedId(thread);
93
+ const thread = Relation.getSource(anchor) as Thread.Thread;
94
+ state.current = Obj.getDXN(thread).toString();
98
95
  },
99
96
  [dispatch, identity, subject],
100
97
  );
101
98
 
102
99
  const handleResolve = useCallback(
103
- (anchor: AnchoredTo) =>
104
- dispatch(createIntent(ThreadAction.ToggleResolved, { thread: Relation.getSource(anchor) as ThreadType })),
100
+ (anchor: AnchoredTo.AnchoredTo) =>
101
+ dispatch(
102
+ createIntent(ThreadAction.ToggleResolved, {
103
+ thread: Relation.getSource(anchor) as Thread.Thread,
104
+ }),
105
+ ),
105
106
  [dispatch],
106
107
  );
107
108
 
108
109
  const handleThreadDelete = useCallback(
109
- (anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
110
+ (anchor: AnchoredTo.AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),
110
111
  [dispatch, subject],
111
112
  );
112
113
 
113
114
  const handleMessageDelete = useCallback(
114
- (anchor: AnchoredTo, messageId: string) =>
115
- dispatch(createIntent(ThreadAction.DeleteMessage, { anchor, subject, messageId })),
115
+ (anchor: AnchoredTo.AnchoredTo, messageId: string) =>
116
+ dispatch(
117
+ createIntent(ThreadAction.DeleteMessage, {
118
+ anchor,
119
+ subject,
120
+ messageId,
121
+ }),
122
+ ),
116
123
  [dispatch, subject],
117
124
  );
118
125
 
119
126
  const handleAcceptProposal = useCallback<NonNullable<CommentsContainerProps['onAcceptProposal']>>(
120
127
  async (anchor, messageId) => {
121
- const thread = Relation.getSource(anchor) as ThreadType;
128
+ const thread = Relation.getSource(anchor) as Thread.Thread;
122
129
  const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));
123
130
  const message = thread.messages[messageIndex]?.target;
124
131
  const proposal = message?.blocks.find((block) => block._tag === 'proposal');
@@ -153,7 +160,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
153
160
  );
154
161
 
155
162
  return (
156
- <StackItem.Content toolbar classNames='overflow-hidden'>
163
+ <StackItem.Content toolbar>
157
164
  <Tabs.Root
158
165
  value={showResolvedThreads ? 'all' : 'unresolved'}
159
166
  orientation='horizontal'
@@ -163,7 +170,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
163
170
  onValueChange={onChangeViewState}
164
171
  >
165
172
  {/* TODO(burdon): Standardize (like Tollbar). */}
166
- <Tabs.Tablist classNames={mx('bg-toolbarSurface border-b border-subduedSeparator')}>
173
+ <Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
167
174
  <Tabs.Tab value='unresolved' classNames='text-sm'>
168
175
  {t('show unresolved label')}
169
176
  </Tabs.Tab>
@@ -4,14 +4,13 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- // import { useTranslation } from '@dxos/react-ui';
7
+ import { useTranslation } from '@dxos/react-ui';
8
8
  import { ControlPage } from '@dxos/react-ui-form';
9
9
 
10
- // import { meta } from '../meta';
10
+ import { meta } from '../meta';
11
11
  import type { ThreadSettingsProps } from '../types';
12
12
 
13
- export const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {
14
- // const { t } = useTranslation(meta.id);
15
-
13
+ export const ThreadSettings = ({ settings: _settings }: { settings: ThreadSettingsProps }) => {
14
+ const { t: _t } = useTranslation(meta.id);
16
15
  return <ControlPage></ControlPage>;
17
16
  };
@@ -4,9 +4,6 @@
4
4
 
5
5
  import { lazy } from 'react';
6
6
 
7
- export const ChannelContainer = lazy(() => import('./ChannelContainer'));
8
- export const ChatContainer = lazy(() => import('./ChatContainer'));
9
-
10
7
  // TODO(wittjosiah): Suspense boundary for sidebar?
11
8
  export * from './Call';
12
9
  export * from './CallDebugPanel';
@@ -14,5 +11,8 @@ export * from './CallSidebar';
14
11
  export * from './CommentsContainer';
15
12
  export * from './CommentsThreadContainer';
16
13
  export * from './MessageContainer';
17
- export * from './ThreadComplementary';
14
+ export * from './ThreadCompanion';
18
15
  export * from './ThreadSettings';
16
+
17
+ export const ChannelContainer = lazy(() => import('./ChannelContainer'));
18
+ export const ChatContainer = lazy(() => import('./ChatContainer'));
@@ -6,17 +6,15 @@ import { Obj, Ref } from '@dxos/echo';
6
6
  import { IdentityDid } from '@dxos/keys';
7
7
  import { faker } from '@dxos/random';
8
8
  import { type Identity } from '@dxos/react-client/halo';
9
- import { DataType } from '@dxos/schema';
9
+ import { Message, Thread } from '@dxos/types';
10
10
 
11
- import { ThreadType } from '../types';
12
-
13
- export const createCommentThread = (identity: Identity): ThreadType => {
14
- return Obj.make(ThreadType, {
11
+ export const createCommentThread = (identity: Identity): Thread.Thread => {
12
+ return Thread.make({
15
13
  name: 'Comment',
16
14
  messages: faker.helpers.multiple(
17
15
  () =>
18
16
  Ref.make(
19
- Obj.make(DataType.Message, {
17
+ Obj.make(Message.Message, {
20
18
  created: new Date().toISOString(),
21
19
  sender: {
22
20
  identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
@@ -30,13 +28,13 @@ export const createCommentThread = (identity: Identity): ThreadType => {
30
28
  });
31
29
  };
32
30
 
33
- export const createProposalThread = (identity: Identity): ThreadType => {
34
- return Obj.make(ThreadType, {
31
+ export const createProposalThread = (identity: Identity): Thread.Thread => {
32
+ return Thread.make({
35
33
  name: 'Proposal',
36
34
  messages: faker.helpers.multiple(
37
35
  () =>
38
36
  Ref.make(
39
- Obj.make(DataType.Message, {
37
+ Obj.make(Message.Message, {
40
38
  created: new Date().toISOString(),
41
39
  sender: {
42
40
  identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
@@ -8,12 +8,13 @@ import { computed, effect } from '@preact/signals-core';
8
8
 
9
9
  import { type PromiseIntentDispatcher, createIntent } from '@dxos/app-framework';
10
10
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
11
+ import { createDocAccessor, getTextInRange } from '@dxos/echo-db';
11
12
  import { type Markdown } from '@dxos/plugin-markdown/types';
12
- import { createDocAccessor, fullyQualifiedId, getSource, getSpace, getTextInRange } from '@dxos/react-client/echo';
13
+ import { getSpace } from '@dxos/react-client/echo';
13
14
  import { comments, createExternalCommentSync } from '@dxos/react-ui-editor';
14
- import { AnchoredTo } from '@dxos/schema';
15
+ import { AnchoredTo, Thread } from '@dxos/types';
15
16
 
16
- import { ThreadAction, type ThreadState, ThreadType } from '../types';
17
+ import { ThreadAction, type ThreadState } from '../types';
17
18
 
18
19
  // TODO(burdon): Factor out.
19
20
  const getName = (doc: Markdown.Document, anchor: string): string | undefined => {
@@ -27,23 +28,23 @@ const getName = (doc: Markdown.Document, anchor: string): string | undefined =>
27
28
  * Construct plugins.
28
29
  */
29
30
  export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?: PromiseIntentDispatcher): Extension => {
30
- const space = doc && getSpace(doc);
31
+ const space = getSpace(doc);
31
32
  if (!doc || !space || !dispatch) {
32
33
  // Include no-op comments extension here to ensure that the facets are always present when they are expected.
33
34
  // TODO(wittjosiah): The Editor should only look for these facets when comments are available.
34
35
  return [comments()];
35
36
  }
36
37
 
37
- const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));
38
+ const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo.AnchoredTo));
38
39
  const unsubscribe = query.subscribe();
39
40
 
40
41
  const anchors = computed(() =>
41
42
  query.objects
42
43
  .filter((anchor) => {
43
44
  const thread = Relation.getSource(anchor);
44
- return Obj.instanceOf(ThreadType, thread) && thread.status !== 'resolved';
45
+ return Obj.instanceOf(Thread.Thread, thread) && thread.status !== 'resolved';
45
46
  })
46
- .concat(state.drafts[fullyQualifiedId(doc)] ?? []),
47
+ .concat(state.drafts[Obj.getDXN(doc).toString()] ?? []),
47
48
  );
48
49
 
49
50
  return [
@@ -60,7 +61,7 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
60
61
  // Only update if the name has changed, otherwise this will cause an infinite loop.
61
62
  // Skip if the name is empty; this means comment text was deleted, but thread name should remain.
62
63
  const name = getName(doc, anchor.anchor);
63
- const thread = Relation.getSource(anchor) as ThreadType;
64
+ const thread = Relation.getSource(anchor) as Thread.Thread;
64
65
  if (name && name !== thread.name) {
65
66
  thread.name = name;
66
67
  }
@@ -70,46 +71,55 @@ export const threads = (state: ThreadState, doc?: Markdown.Document, dispatch?:
70
71
  }),
71
72
 
72
73
  createExternalCommentSync(
73
- fullyQualifiedId(doc),
74
+ Obj.getDXN(doc).toString(),
74
75
  (sink) => effect(() => sink()),
75
76
  () =>
76
77
  anchors.value
77
78
  .filter((anchor) => anchor.anchor)
78
- .map((anchor) => ({ id: fullyQualifiedId(Relation.getSource(anchor)), cursor: anchor.anchor })),
79
+ .map((anchor) => ({
80
+ id: Obj.getDXN(Relation.getSource(anchor)).toString(),
81
+ cursor: anchor.anchor,
82
+ })),
79
83
  ),
80
84
 
81
85
  comments({
82
- id: fullyQualifiedId(doc),
86
+ id: Obj.getDXN(doc).toString(),
83
87
  onCreate: ({ cursor }) => {
84
88
  const name = getName(doc, cursor);
85
- void dispatch(createIntent(ThreadAction.Create, { anchor: cursor, name, subject: doc }));
89
+ void dispatch(
90
+ createIntent(ThreadAction.Create, {
91
+ anchor: cursor,
92
+ name,
93
+ subject: doc,
94
+ }),
95
+ );
86
96
  },
87
97
  onDelete: ({ id }) => {
88
- const draft = state.drafts[fullyQualifiedId(doc)];
98
+ const draft = state.drafts[Obj.getDXN(doc).toString()];
89
99
  if (draft) {
90
- const index = draft.findIndex((thread) => fullyQualifiedId(thread) === id);
100
+ const index = draft.findIndex((thread) => Obj.getDXN(thread).toString() === id);
91
101
  if (index !== -1) {
92
102
  draft.splice(index, 1);
93
103
  }
94
104
  }
95
105
 
96
- const thread = query.objects.find((object) => getSource(object).id === id);
106
+ const thread = query.objects.find((object) => Relation.getSource(object).id === id);
97
107
  if (thread) {
98
108
  thread.anchor = undefined;
99
109
  }
100
110
  },
101
111
  onUpdate: ({ id, cursor }) => {
102
- const draft = state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id);
112
+ const draft = state.drafts[Obj.getDXN(doc).toString()]?.find((thread) => Obj.getDXN(thread).toString() === id);
103
113
  if (draft) {
104
- const thread = Relation.getSource(draft) as ThreadType;
114
+ const thread = Relation.getSource(draft) as Thread.Thread;
105
115
  thread.name = getName(doc, cursor);
106
116
  draft.anchor = cursor;
107
117
  }
108
118
 
109
- const relation = query.objects.find((object) => getSource(object).id === id);
119
+ const relation = query.objects.find((object) => Relation.getSource(object).id === id);
110
120
  if (relation) {
111
- const thread = getSource(relation);
112
- if (Obj.instanceOf(ThreadType, thread)) {
121
+ const thread = Relation.getSource(relation);
122
+ if (Obj.instanceOf(Thread.Thread, thread)) {
113
123
  thread.name = getName(doc, cursor);
114
124
  relation.anchor = cursor;
115
125
  }
@@ -0,0 +1,56 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Array from 'effect/Array';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Function from 'effect/Function';
8
+ import * as Schema from 'effect/Schema';
9
+
10
+ import { ArtifactId, computeDiffsWithCursors } from '@dxos/assistant';
11
+ import { Obj, Ref, Relation } from '@dxos/echo';
12
+ import { createDocAccessor } from '@dxos/echo-db';
13
+ import { DatabaseService, defineFunction } from '@dxos/functions';
14
+ import { DXN } from '@dxos/keys';
15
+ import { Markdown } from '@dxos/plugin-markdown/types';
16
+ import { AnchoredTo, Message, Thread } from '@dxos/types';
17
+
18
+ export default defineFunction({
19
+ key: 'dxos.org/function/thread/create-proposals',
20
+ name: 'Create Proposals',
21
+ description: 'Proposes a set of changes to a document.',
22
+ inputSchema: Schema.Struct({
23
+ id: ArtifactId,
24
+ diffs: Schema.Array(Schema.String).annotations({
25
+ description: 'The diffs to propose for the document.',
26
+ }),
27
+ }),
28
+ outputSchema: Schema.Void,
29
+ handler: Effect.fn(function* ({ data: { id, diffs: _diffs } }) {
30
+ const object = yield* DatabaseService.resolve(DXN.parse(id), Markdown.Document);
31
+ const content = yield* Effect.promise(() => object.content.load());
32
+ const accessor = createDocAccessor(content, ['content']);
33
+
34
+ yield* Function.pipe(
35
+ computeDiffsWithCursors(accessor, _diffs),
36
+ Array.map(
37
+ Effect.fnUntraced(function* ({ cursor, text }) {
38
+ const proposal = Obj.make(Message.Message, {
39
+ created: new Date().toISOString(),
40
+ sender: { role: 'assistant' },
41
+ blocks: [{ _tag: 'proposal', text }],
42
+ });
43
+ const thread = Thread.make({ name: 'Proposal', messages: [Ref.make(proposal)], status: 'active' });
44
+ const relation = Relation.make(AnchoredTo.AnchoredTo, {
45
+ [Relation.Source]: thread,
46
+ [Relation.Target]: object,
47
+ anchor: cursor,
48
+ });
49
+ yield* DatabaseService.add(thread);
50
+ yield* DatabaseService.add(relation);
51
+ }),
52
+ ),
53
+ Effect.allWith({ concurrency: 'unbounded' }),
54
+ );
55
+ }),
56
+ });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export { default as createProposals } from './create-proposals';
@@ -4,18 +4,15 @@
4
4
 
5
5
  import { useCallback } from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { createIntent } from '@dxos/app-framework';
8
+ import { useIntentDispatcher } from '@dxos/app-framework/react';
8
9
  import { type Live } from '@dxos/live-object';
9
10
  import { ObservabilityAction } from '@dxos/plugin-observability/types';
10
11
  import { getSpace } from '@dxos/react-client/echo';
11
12
  import { useOnTransition } from '@dxos/react-ui';
12
- import { type DataType } from '@dxos/schema';
13
+ import { type ContentBlock } from '@dxos/types';
13
14
 
14
- export const useOnEditAnalytics = (
15
- message: Live<any>,
16
- textBlock: DataType.MessageBlock.Text | undefined,
17
- editing: boolean,
18
- ) => {
15
+ export const useOnEditAnalytics = (message: Live<any>, textBlock: ContentBlock.Text | undefined, editing: boolean) => {
19
16
  const { dispatchPromise: dispatch } = useIntentDispatcher();
20
17
 
21
18
  const onEdit = useCallback(() => {
@@ -3,8 +3,9 @@
3
3
  //
4
4
 
5
5
  export * from './analytics';
6
+
7
+ export * from './useBlackCanvasStreamTrack';
6
8
  export * from './useDebugMode';
9
+ export * from './useInaudibleAudioStreamTrack';
7
10
  export * from './useStatus';
8
11
  export * from './useVideoStreamTrack';
9
- export * from './useInaudibleAudioStreamTrack';
10
- export * from './useBlackCanvasStreamTrack';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { type RefObject, useEffect, useRef, useState } from 'react';
6
6
 
7
- export const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement>, videoSrc: string) => {
7
+ export const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement | null>, videoSrc: string) => {
8
8
  // Get video stream track.
9
9
  const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);
10
10
  const hadRun = useRef(false);
package/src/meta.ts CHANGED
@@ -3,15 +3,19 @@
3
3
  //
4
4
 
5
5
  import { type PluginMeta } from '@dxos/app-framework';
6
-
7
- export const THREAD_PLUGIN = 'dxos.org/plugin/thread';
8
- export const THREAD_ITEM = `${THREAD_PLUGIN}/item`;
6
+ import { trim } from '@dxos/util';
9
7
 
10
8
  // TODO(wittjosiah): Needs screenshots.
11
9
  export const meta: PluginMeta = {
12
- id: THREAD_PLUGIN,
10
+ id: 'dxos.org/plugin/thread',
13
11
  name: 'Chat',
14
- description: 'Chat via text, voice, and video in channels or create comment threads on objects.',
12
+ description: trim`
13
+ Multi-modal communication platform supporting text chat, voice, and video conferencing.
14
+ Create threaded conversations and add contextual comments directly on any workspace object.
15
+ `,
15
16
  icon: 'ph--video-conference--regular',
17
+ iconHue: 'rose',
16
18
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',
17
19
  };
20
+
21
+ export const THREAD_ITEM = `${meta.id}/item`;
@@ -3,17 +3,15 @@
3
3
  //
4
4
 
5
5
  import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
6
- import { Obj } from '@dxos/echo';
7
6
  import { ClientPlugin } from '@dxos/plugin-client';
8
7
  import { GraphPlugin } from '@dxos/plugin-graph';
9
8
  import { SpacePlugin } from '@dxos/plugin-space';
10
9
  import { ThemePlugin } from '@dxos/plugin-theme';
11
10
  import { Config } from '@dxos/react-client';
12
- import { Ref } from '@dxos/react-client/echo';
13
11
  import { defaultTx } from '@dxos/react-ui-theme';
14
12
 
15
13
  import { ThreadPlugin } from '../ThreadPlugin';
16
- import { ChannelType, ThreadType } from '../types';
14
+ import { Channel } from '../types';
17
15
 
18
16
  export const createThreadPlugins = async () => [
19
17
  ThemePlugin({ tx: defaultTx }),
@@ -23,8 +21,7 @@ export const createThreadPlugins = async () => [
23
21
  },
24
22
  onSpacesReady: async ({ client }) => {
25
23
  await client.spaces.default.waitUntilReady();
26
- const thread = Obj.make(ThreadType, { messages: [] });
27
- client.spaces.default.db.add(Obj.make(ChannelType, { defaultThread: Ref.make(thread), threads: [] }));
24
+ client.spaces.default.db.add(Channel.make());
28
25
  },
29
26
  config: new Config({
30
27
  runtime: {
@@ -46,7 +43,7 @@ export const createThreadPlugins = async () => [
46
43
  },
47
44
  }),
48
45
  }),
49
- SpacePlugin(),
46
+ SpacePlugin({}),
50
47
  IntentPlugin(),
51
48
  SettingsPlugin(),
52
49
  GraphPlugin(),
@@ -2,15 +2,16 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { Type } from '@dxos/echo';
5
6
  import { type Resource } from '@dxos/react-ui';
6
7
 
7
8
  import { meta } from './meta';
8
- import { ChannelType } from './types';
9
+ import { Channel } from './types';
9
10
 
10
11
  export const translations = [
11
12
  {
12
13
  'en-US': {
13
- [ChannelType.typename]: {
14
+ [Type.getTypename(Channel.Channel)]: {
14
15
  'typename label': 'Channel',
15
16
  'typename label_zero': 'Channels',
16
17
  'typename label_one': 'Channel',
@@ -18,6 +19,7 @@ export const translations = [
18
19
  'object name placeholder': 'New channel',
19
20
  'rename object label': 'Rename channel',
20
21
  'delete object label': 'Delete channel',
22
+ 'object deleted label': 'Channel deleted',
21
23
  },
22
24
  [meta.id]: {
23
25
  'plugin name': 'Chat',
@@ -49,6 +51,7 @@ export const translations = [
49
51
  'comments label': 'Comments',
50
52
  'show all label': 'All comments',
51
53
  'show unresolved label': 'Unresolved comments',
54
+ 'add comment label': 'Add comment',
52
55
 
53
56
  'channel companion label': 'Channel',
54
57
  'call panel label': 'Active Call',
@@ -59,9 +62,10 @@ export const translations = [
59
62
  'set display name label': 'Continue',
60
63
 
61
64
  'call tab label': 'Call',
62
- 'meeting status title': 'Meeting',
65
+ 'meeting status title': 'Calls',
63
66
  'share meeting link label': 'Share meeting',
64
- 'show webrtc stats title': 'Detailed WebRTC Stats',
67
+ 'show webrtc stats title': 'WebRTC Stats',
68
+ 'show calls history title': 'Service History',
65
69
 
66
70
  'meeting summary label': 'Summary',
67
71
  'summarize label': 'Summarize',