@dxos/plugin-thread 0.8.4-main.fcfe5033a5 → 0.8.4-staging.60fe92afc8

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 (522) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +75 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs +57 -0
  5. package/dist/lib/neutral/ChannelArticle-H633OM3U.mjs.map +7 -0
  6. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs +38 -0
  7. package/dist/lib/neutral/ChannelCreatePanel-NUXXKHZQ.mjs.map +7 -0
  8. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs +57 -0
  9. package/dist/lib/neutral/ThreadArticle-ROQXQLEZ.mjs.map +7 -0
  10. package/dist/lib/neutral/ThreadPlugin.mjs +67 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  12. package/dist/lib/neutral/ThreadPlugin.node.mjs +29 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  14. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +27 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  16. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs +50 -0
  17. package/dist/lib/neutral/app-graph-builder-OLKN3VTB.mjs.map +7 -0
  18. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs +34 -0
  19. package/dist/lib/neutral/append-channel-message-J6DXDPBH.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +19 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs +58 -0
  23. package/dist/lib/neutral/channel-backend-feed-FCXGAIEC.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-AWAQTEU6.mjs +10 -0
  25. package/dist/lib/neutral/chunk-AWAQTEU6.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-HJHK5O6F.mjs +109 -0
  27. package/dist/lib/neutral/chunk-HJHK5O6F.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs +36 -0
  29. package/dist/lib/neutral/chunk-OOC6EQ7X.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-P4RSGFS4.mjs +69 -0
  31. package/dist/lib/neutral/chunk-P4RSGFS4.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-SZXFLBZL.mjs +8 -0
  33. package/dist/lib/neutral/chunk-SZXFLBZL.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +93 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/containers/index.mjs +13 -0
  37. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  38. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs +41 -0
  39. package/dist/lib/neutral/create-channel-UW2LSL4G.mjs.map +7 -0
  40. package/dist/lib/neutral/create-object-RLCOUVAW.mjs +46 -0
  41. package/dist/lib/neutral/create-object-RLCOUVAW.mjs.map +7 -0
  42. package/dist/lib/neutral/hooks/index.mjs +11 -0
  43. package/dist/lib/neutral/index.mjs +34 -0
  44. package/dist/lib/neutral/meta.json +1 -0
  45. package/dist/lib/neutral/meta.mjs +10 -0
  46. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs +14 -0
  47. package/dist/lib/neutral/navigation-resolver-4X4HCQYX.mjs.map +7 -0
  48. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  49. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  50. package/dist/lib/neutral/operations/index.mjs +8 -0
  51. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  52. package/dist/lib/neutral/plugin.mjs +16 -0
  53. package/dist/lib/neutral/plugin.mjs.map +7 -0
  54. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs +48 -0
  55. package/dist/lib/neutral/react-surface-G6KT7TSU.mjs.map +7 -0
  56. package/dist/lib/neutral/translations.mjs +91 -0
  57. package/dist/lib/neutral/translations.mjs.map +7 -0
  58. package/dist/lib/neutral/types/index.mjs +16 -0
  59. package/dist/lib/neutral/types/index.mjs.map +7 -0
  60. package/dist/types/src/ThreadPlugin.d.ts +1 -0
  61. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  62. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  63. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  64. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  65. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  66. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  67. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/channel-backend-feed.d.ts +13 -0
  71. package/dist/types/src/capabilities/channel-backend-feed.d.ts.map +1 -0
  72. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  73. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/index.d.ts +8 -10
  75. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/navigation-resolver.d.ts +6 -0
  77. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  79. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/Chat/Chat.d.ts +43 -0
  82. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat/index.d.ts +2 -0
  84. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  85. package/dist/types/src/components/index.d.ts +1 -5
  86. package/dist/types/src/components/index.d.ts.map +1 -1
  87. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +19 -0
  88. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  89. package/dist/types/src/{components/CommentsPanel/CommentsPanel.stories.d.ts → containers/ChannelArticle/ChannelArticle.stories.d.ts} +74 -72
  90. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  91. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  92. package/dist/types/src/{components/ThreadSettings → containers/ChannelArticle}/index.d.ts.map +1 -1
  93. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts +11 -0
  94. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts.map +1 -0
  95. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts +2 -0
  96. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts.map +1 -0
  97. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts +20 -0
  98. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts.map +1 -0
  99. package/dist/types/src/containers/{ChatContainer/ChatContainer.stories.d.ts → ThreadArticle/ThreadArticle.stories.d.ts} +71 -71
  100. package/dist/types/src/containers/ThreadArticle/ThreadArticle.stories.d.ts.map +1 -0
  101. package/dist/types/src/containers/ThreadArticle/index.d.ts +2 -0
  102. package/dist/types/src/containers/ThreadArticle/index.d.ts.map +1 -0
  103. package/dist/types/src/containers/index.d.ts +3 -5
  104. package/dist/types/src/containers/index.d.ts.map +1 -1
  105. package/dist/types/src/hooks/index.d.ts +1 -5
  106. package/dist/types/src/hooks/index.d.ts.map +1 -1
  107. package/dist/types/src/hooks/useMessages.d.ts +4 -0
  108. package/dist/types/src/hooks/useMessages.d.ts.map +1 -0
  109. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  110. package/dist/types/src/index.d.ts +2 -3
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +1 -1
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  115. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  116. package/dist/types/src/operations/create-channel.d.ts +3 -3
  117. package/dist/types/src/operations/create-channel.d.ts.map +1 -1
  118. package/dist/types/src/operations/index.d.ts +1 -2
  119. package/dist/types/src/operations/index.d.ts.map +1 -1
  120. package/dist/types/src/paths.d.ts +3 -0
  121. package/dist/types/src/paths.d.ts.map +1 -0
  122. package/dist/types/src/plugin.d.ts +4 -0
  123. package/dist/types/src/plugin.d.ts.map +1 -0
  124. package/dist/types/src/translations.d.ts +70 -70
  125. package/dist/types/src/translations.d.ts.map +1 -1
  126. package/dist/types/src/types/ThreadCapabilities.d.ts +37 -0
  127. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  128. package/dist/types/src/types/ThreadOperation.d.ts +91 -0
  129. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  130. package/dist/types/src/types/channel-backend.d.ts +16 -0
  131. package/dist/types/src/types/channel-backend.d.ts.map +1 -0
  132. package/dist/types/src/types/channel-backend.test.d.ts +2 -0
  133. package/dist/types/src/types/channel-backend.test.d.ts.map +1 -0
  134. package/dist/types/src/types/index.d.ts +3 -3
  135. package/dist/types/src/types/index.d.ts.map +1 -1
  136. package/dist/types/src/util.d.ts +4 -20
  137. package/dist/types/src/util.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +96 -114
  140. package/src/ThreadPlugin.node.ts +26 -0
  141. package/src/ThreadPlugin.test.ts +27 -0
  142. package/src/ThreadPlugin.tsx +23 -105
  143. package/src/ThreadPlugin.workerd.ts +25 -0
  144. package/src/capabilities/app-graph-builder.ts +25 -167
  145. package/src/capabilities/channel-backend-feed.ts +60 -0
  146. package/src/capabilities/create-object.ts +46 -0
  147. package/src/capabilities/index.ts +4 -8
  148. package/src/capabilities/navigation-resolver.ts +18 -0
  149. package/src/capabilities/operation-handler.ts +1 -1
  150. package/src/capabilities/react-surface.tsx +8 -50
  151. package/src/components/Chat/Chat.tsx +119 -0
  152. package/src/components/Chat/index.ts +5 -0
  153. package/src/components/index.ts +1 -7
  154. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +108 -0
  155. package/src/containers/ChannelArticle/ChannelArticle.tsx +83 -0
  156. package/src/containers/ChannelArticle/index.ts +5 -0
  157. package/src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx +52 -0
  158. package/src/containers/ChannelCreatePanel/index.ts +5 -0
  159. package/src/containers/{ChatContainer/ChatContainer.stories.tsx → ThreadArticle/ThreadArticle.stories.tsx} +11 -12
  160. package/src/containers/ThreadArticle/ThreadArticle.tsx +75 -0
  161. package/src/containers/ThreadArticle/index.ts +5 -0
  162. package/src/containers/index.ts +3 -5
  163. package/src/hooks/index.ts +1 -6
  164. package/src/hooks/useMessages.ts +37 -0
  165. package/src/index.ts +4 -4
  166. package/src/meta.ts +22 -8
  167. package/src/operations/append-channel-message.ts +31 -0
  168. package/src/operations/create-channel.ts +18 -8
  169. package/src/operations/index.ts +2 -14
  170. package/src/paths.ts +10 -0
  171. package/src/plugin.ts +11 -0
  172. package/src/translations.ts +2 -1
  173. package/src/types/ThreadCapabilities.ts +47 -0
  174. package/src/types/ThreadOperation.ts +49 -0
  175. package/src/types/channel-backend.test.ts +48 -0
  176. package/src/types/channel-backend.ts +54 -0
  177. package/src/types/index.ts +3 -3
  178. package/src/util.ts +35 -18
  179. package/src/vite-env.d.ts +10 -0
  180. package/dist/lib/browser/add-message-VPPFFLFL.mjs +0 -97
  181. package/dist/lib/browser/add-message-VPPFFLFL.mjs.map +0 -7
  182. package/dist/lib/browser/blueprints/index.mjs +0 -37
  183. package/dist/lib/browser/blueprints/index.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-MESW3R4Q.mjs +0 -61
  185. package/dist/lib/browser/chunk-MESW3R4Q.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-VPM44Z35.mjs +0 -259
  187. package/dist/lib/browser/chunk-VPM44Z35.mjs.map +0 -7
  188. package/dist/lib/browser/create-OQKG4S47.mjs +0 -55
  189. package/dist/lib/browser/create-OQKG4S47.mjs.map +0 -7
  190. package/dist/lib/browser/create-channel-EF67LCS6.mjs +0 -21
  191. package/dist/lib/browser/create-channel-EF67LCS6.mjs.map +0 -7
  192. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs +0 -28
  193. package/dist/lib/browser/create-channel-thread-CCZTSWQ6.mjs.map +0 -7
  194. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs +0 -57
  195. package/dist/lib/browser/create-proposals-CMK7S7VS.mjs.map +0 -7
  196. package/dist/lib/browser/delete-FSFVU6ZA.mjs +0 -59
  197. package/dist/lib/browser/delete-FSFVU6ZA.mjs.map +0 -7
  198. package/dist/lib/browser/delete-message-XL5M5J33.mjs +0 -64
  199. package/dist/lib/browser/delete-message-XL5M5J33.mjs.map +0 -7
  200. package/dist/lib/browser/index.mjs +0 -2334
  201. package/dist/lib/browser/index.mjs.map +0 -7
  202. package/dist/lib/browser/meta.json +0 -1
  203. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs +0 -25
  204. package/dist/lib/browser/on-create-space-VYS2JGVT.mjs.map +0 -7
  205. package/dist/lib/browser/operations/index.mjs +0 -14
  206. package/dist/lib/browser/operations/index.mjs.map +0 -7
  207. package/dist/lib/browser/restore-2ZGMKUSD.mjs +0 -33
  208. package/dist/lib/browser/restore-2ZGMKUSD.mjs.map +0 -7
  209. package/dist/lib/browser/restore-message-OYEGWPII.mjs +0 -42
  210. package/dist/lib/browser/restore-message-OYEGWPII.mjs.map +0 -7
  211. package/dist/lib/browser/select-VG2XLULE.mjs +0 -26
  212. package/dist/lib/browser/select-VG2XLULE.mjs.map +0 -7
  213. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs +0 -45
  214. package/dist/lib/browser/toggle-resolved-MM6YC5BU.mjs.map +0 -7
  215. package/dist/lib/browser/types/index.mjs +0 -12
  216. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs +0 -98
  217. package/dist/lib/node-esm/add-message-XWKHLNS6.mjs.map +0 -7
  218. package/dist/lib/node-esm/blueprints/index.mjs +0 -38
  219. package/dist/lib/node-esm/blueprints/index.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  221. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs +0 -260
  222. package/dist/lib/node-esm/chunk-JTHXNWKJ.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs +0 -62
  224. package/dist/lib/node-esm/chunk-SDRAQNSQ.mjs.map +0 -7
  225. package/dist/lib/node-esm/create-6ZOFMMYA.mjs +0 -56
  226. package/dist/lib/node-esm/create-6ZOFMMYA.mjs.map +0 -7
  227. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs +0 -22
  228. package/dist/lib/node-esm/create-channel-UYWUNB3L.mjs.map +0 -7
  229. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs +0 -29
  230. package/dist/lib/node-esm/create-channel-thread-UQF2SBHS.mjs.map +0 -7
  231. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs +0 -58
  232. package/dist/lib/node-esm/create-proposals-5FJNURKH.mjs.map +0 -7
  233. package/dist/lib/node-esm/delete-WRODXR3E.mjs +0 -60
  234. package/dist/lib/node-esm/delete-WRODXR3E.mjs.map +0 -7
  235. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs +0 -65
  236. package/dist/lib/node-esm/delete-message-TAHCYTW2.mjs.map +0 -7
  237. package/dist/lib/node-esm/index.mjs +0 -2335
  238. package/dist/lib/node-esm/index.mjs.map +0 -7
  239. package/dist/lib/node-esm/meta.json +0 -1
  240. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs +0 -26
  241. package/dist/lib/node-esm/on-create-space-XDY2YXPV.mjs.map +0 -7
  242. package/dist/lib/node-esm/operations/index.mjs +0 -15
  243. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  244. package/dist/lib/node-esm/restore-T3QA7TSL.mjs +0 -34
  245. package/dist/lib/node-esm/restore-T3QA7TSL.mjs.map +0 -7
  246. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs +0 -43
  247. package/dist/lib/node-esm/restore-message-WFTEVBEV.mjs.map +0 -7
  248. package/dist/lib/node-esm/select-Q4UDWJJF.mjs +0 -27
  249. package/dist/lib/node-esm/select-Q4UDWJJF.mjs.map +0 -7
  250. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs +0 -46
  251. package/dist/lib/node-esm/toggle-resolved-33XTAK2H.mjs.map +0 -7
  252. package/dist/lib/node-esm/types/index.mjs +0 -13
  253. package/dist/types/src/blueprints/index.d.ts +0 -2
  254. package/dist/types/src/blueprints/index.d.ts.map +0 -1
  255. package/dist/types/src/blueprints/thread-blueprint.d.ts +0 -4
  256. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +0 -1
  257. package/dist/types/src/calls/call-manager.d.ts +0 -87
  258. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  259. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  260. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  261. package/dist/types/src/calls/index.d.ts +0 -7
  262. package/dist/types/src/calls/index.d.ts.map +0 -1
  263. package/dist/types/src/calls/media-manager.d.ts +0 -60
  264. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  265. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  266. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  267. package/dist/types/src/calls/types.d.ts +0 -45
  268. package/dist/types/src/calls/types.d.ts.map +0 -1
  269. package/dist/types/src/calls/util/audio.d.ts +0 -6
  270. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  271. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  272. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  273. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  274. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  275. package/dist/types/src/calls/util/index.d.ts +0 -5
  276. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  277. package/dist/types/src/calls/util/media.d.ts +0 -6
  278. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  279. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  280. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  281. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  282. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  283. package/dist/types/src/calls-service.stories.d.ts +0 -23
  284. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  285. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
  286. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  287. package/dist/types/src/capabilities/call-manager.d.ts +0 -6
  288. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  289. package/dist/types/src/capabilities/markdown.d.ts +0 -5
  290. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  291. package/dist/types/src/capabilities/react-root.d.ts +0 -9
  292. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/settings.d.ts +0 -7
  294. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/state.d.ts +0 -7
  296. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/undo-mappings.d.ts +0 -5
  298. package/dist/types/src/capabilities/undo-mappings.d.ts.map +0 -1
  299. package/dist/types/src/components/Call/Call.d.ts +0 -17
  300. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  301. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  302. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  303. package/dist/types/src/components/Call/index.d.ts +0 -3
  304. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  305. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +0 -13
  306. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +0 -1
  307. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +0 -1
  308. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts +0 -14
  309. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +0 -1
  310. package/dist/types/src/components/CommentsPanel/index.d.ts +0 -3
  311. package/dist/types/src/components/CommentsPanel/index.d.ts.map +0 -1
  312. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  313. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  314. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  315. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  316. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  317. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  318. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  319. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  320. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  321. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  322. package/dist/types/src/components/Media/index.d.ts +0 -3
  323. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  324. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +0 -15
  325. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +0 -1
  326. package/dist/types/src/components/MessagePanel/index.d.ts +0 -2
  327. package/dist/types/src/components/MessagePanel/index.d.ts.map +0 -1
  328. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  329. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  330. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  331. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  332. package/dist/types/src/components/Participant/index.d.ts +0 -3
  333. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  334. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  335. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  336. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -178
  337. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  338. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  339. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  340. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts +0 -12
  341. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +0 -1
  342. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts +0 -164
  343. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +0 -1
  344. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  345. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  346. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +0 -6
  347. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +0 -1
  348. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +0 -161
  349. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +0 -1
  350. package/dist/types/src/components/ThreadSettings/index.d.ts +0 -2
  351. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts +0 -15
  352. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +0 -1
  353. package/dist/types/src/containers/CallDebugPanel/index.d.ts +0 -2
  354. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +0 -1
  355. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts +0 -3
  356. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +0 -1
  357. package/dist/types/src/containers/CallSidebar/index.d.ts +0 -2
  358. package/dist/types/src/containers/CallSidebar/index.d.ts.map +0 -1
  359. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +0 -12
  360. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +0 -1
  361. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts +0 -162
  362. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +0 -1
  363. package/dist/types/src/containers/ChannelContainer/index.d.ts +0 -2
  364. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +0 -1
  365. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts +0 -16
  366. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +0 -1
  367. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +0 -1
  368. package/dist/types/src/containers/ChatContainer/index.d.ts +0 -4
  369. package/dist/types/src/containers/ChatContainer/index.d.ts.map +0 -1
  370. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +0 -8
  371. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +0 -1
  372. package/dist/types/src/containers/ThreadCompanion/index.d.ts +0 -2
  373. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +0 -1
  374. package/dist/types/src/extensions/command.d.ts +0 -3
  375. package/dist/types/src/extensions/command.d.ts.map +0 -1
  376. package/dist/types/src/extensions/index.d.ts +0 -3
  377. package/dist/types/src/extensions/index.d.ts.map +0 -1
  378. package/dist/types/src/extensions/threads.d.ts +0 -14
  379. package/dist/types/src/extensions/threads.d.ts.map +0 -1
  380. package/dist/types/src/hooks/analytics.d.ts +0 -3
  381. package/dist/types/src/hooks/analytics.d.ts.map +0 -1
  382. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  383. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  384. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  385. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  386. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  387. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  388. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  389. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  390. package/dist/types/src/operations/add-message.d.ts +0 -5
  391. package/dist/types/src/operations/add-message.d.ts.map +0 -1
  392. package/dist/types/src/operations/create-channel-thread.d.ts +0 -5
  393. package/dist/types/src/operations/create-channel-thread.d.ts.map +0 -1
  394. package/dist/types/src/operations/create-proposals.d.ts +0 -5
  395. package/dist/types/src/operations/create-proposals.d.ts.map +0 -1
  396. package/dist/types/src/operations/create.d.ts +0 -5
  397. package/dist/types/src/operations/create.d.ts.map +0 -1
  398. package/dist/types/src/operations/definitions.d.ts +0 -2804
  399. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  400. package/dist/types/src/operations/delete-message.d.ts +0 -5
  401. package/dist/types/src/operations/delete-message.d.ts.map +0 -1
  402. package/dist/types/src/operations/delete.d.ts +0 -5
  403. package/dist/types/src/operations/delete.d.ts.map +0 -1
  404. package/dist/types/src/operations/on-create-space.d.ts +0 -5
  405. package/dist/types/src/operations/on-create-space.d.ts.map +0 -1
  406. package/dist/types/src/operations/restore-message.d.ts +0 -5
  407. package/dist/types/src/operations/restore-message.d.ts.map +0 -1
  408. package/dist/types/src/operations/restore.d.ts +0 -5
  409. package/dist/types/src/operations/restore.d.ts.map +0 -1
  410. package/dist/types/src/operations/select.d.ts +0 -5
  411. package/dist/types/src/operations/select.d.ts.map +0 -1
  412. package/dist/types/src/operations/toggle-resolved.d.ts +0 -5
  413. package/dist/types/src/operations/toggle-resolved.d.ts.map +0 -1
  414. package/dist/types/src/testing/data.d.ts +0 -5
  415. package/dist/types/src/testing/data.d.ts.map +0 -1
  416. package/dist/types/src/testing/index.d.ts +0 -2
  417. package/dist/types/src/testing/index.d.ts.map +0 -1
  418. package/dist/types/src/testing/stories.d.ts +0 -3
  419. package/dist/types/src/testing/stories.d.ts.map +0 -1
  420. package/dist/types/src/types/Channel.d.ts +0 -715
  421. package/dist/types/src/types/Channel.d.ts.map +0 -1
  422. package/dist/types/src/types/Settings.d.ts +0 -5
  423. package/dist/types/src/types/Settings.d.ts.map +0 -1
  424. package/dist/types/src/types/capabilities.d.ts +0 -24
  425. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/types/types.d.ts +0 -18
  427. package/dist/types/src/types/types.d.ts.map +0 -1
  428. package/src/blueprints/index.ts +0 -5
  429. package/src/blueprints/thread-blueprint.ts +0 -37
  430. package/src/calls/call-manager.ts +0 -270
  431. package/src/calls/call-swarm-synchronizer.ts +0 -350
  432. package/src/calls/index.ts +0 -10
  433. package/src/calls/media-manager.ts +0 -378
  434. package/src/calls/speaking-monitor.ts +0 -85
  435. package/src/calls/types.ts +0 -74
  436. package/src/calls/util/audio.ts +0 -58
  437. package/src/calls/util/calls-service.ts +0 -580
  438. package/src/calls/util/history-cache.ts +0 -27
  439. package/src/calls/util/index.ts +0 -8
  440. package/src/calls/util/media.ts +0 -52
  441. package/src/calls/util/stub-media-streams.ts +0 -127
  442. package/src/calls/util/task-scheduling.ts +0 -92
  443. package/src/calls-service.stories.tsx +0 -230
  444. package/src/capabilities/blueprint-definition.ts +0 -17
  445. package/src/capabilities/call-manager.ts +0 -27
  446. package/src/capabilities/markdown.ts +0 -82
  447. package/src/capabilities/react-root.tsx +0 -20
  448. package/src/capabilities/settings.ts +0 -35
  449. package/src/capabilities/state.ts +0 -22
  450. package/src/capabilities/undo-mappings.ts +0 -46
  451. package/src/components/Call/Call.tsx +0 -93
  452. package/src/components/Call/Toolbar.tsx +0 -199
  453. package/src/components/Call/index.ts +0 -6
  454. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +0 -93
  455. package/src/components/CommentsPanel/CommentsPanel.tsx +0 -71
  456. package/src/components/CommentsPanel/CommentsThread.tsx +0 -172
  457. package/src/components/CommentsPanel/index.ts +0 -6
  458. package/src/components/Lobby/Lobby.tsx +0 -122
  459. package/src/components/Lobby/index.ts +0 -5
  460. package/src/components/Media/AudioStream.tsx +0 -67
  461. package/src/components/Media/VideoObject.stories.tsx +0 -59
  462. package/src/components/Media/VideoObject.tsx +0 -58
  463. package/src/components/Media/index.ts +0 -6
  464. package/src/components/MessagePanel/MessagePanel.tsx +0 -222
  465. package/src/components/MessagePanel/index.ts +0 -5
  466. package/src/components/Participant/Participant.tsx +0 -77
  467. package/src/components/Participant/ParticipantGrid.tsx +0 -88
  468. package/src/components/Participant/index.ts +0 -6
  469. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -157
  470. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  471. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  472. package/src/components/ResponsiveGrid/ResponsivePanel.stories.tsx +0 -53
  473. package/src/components/ResponsiveGrid/ResponsivePanel.tsx +0 -31
  474. package/src/components/ResponsiveGrid/index.ts +0 -7
  475. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +0 -31
  476. package/src/components/ThreadSettings/ThreadSettings.tsx +0 -20
  477. package/src/components/ThreadSettings/index.ts +0 -5
  478. package/src/containers/CallDebugPanel/CallDebugPanel.tsx +0 -173
  479. package/src/containers/CallDebugPanel/index.ts +0 -5
  480. package/src/containers/CallSidebar/CallSidebar.tsx +0 -18
  481. package/src/containers/CallSidebar/index.ts +0 -5
  482. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +0 -61
  483. package/src/containers/ChannelContainer/ChannelContainer.tsx +0 -223
  484. package/src/containers/ChannelContainer/index.ts +0 -5
  485. package/src/containers/ChatContainer/ChatContainer.tsx +0 -131
  486. package/src/containers/ChatContainer/index.ts +0 -8
  487. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +0 -217
  488. package/src/containers/ThreadCompanion/index.ts +0 -5
  489. package/src/extensions/command.ts +0 -36
  490. package/src/extensions/index.ts +0 -6
  491. package/src/extensions/threads.ts +0 -171
  492. package/src/hooks/analytics.ts +0 -41
  493. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  494. package/src/hooks/useDebugMode.ts +0 -25
  495. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  496. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  497. package/src/operations/add-message.ts +0 -81
  498. package/src/operations/create-channel-thread.ts +0 -26
  499. package/src/operations/create-proposals.ts +0 -49
  500. package/src/operations/create.ts +0 -48
  501. package/src/operations/definitions.ts +0 -177
  502. package/src/operations/delete-message.ts +0 -53
  503. package/src/operations/delete.ts +0 -63
  504. package/src/operations/on-create-space.ts +0 -27
  505. package/src/operations/restore-message.ts +0 -38
  506. package/src/operations/restore.ts +0 -38
  507. package/src/operations/select.ts +0 -24
  508. package/src/operations/toggle-resolved.ts +0 -41
  509. package/src/testing/data.ts +0 -49
  510. package/src/testing/index.ts +0 -5
  511. package/src/testing/stories.ts +0 -51
  512. package/src/types/Channel.ts +0 -37
  513. package/src/types/Settings.ts +0 -10
  514. package/src/types/capabilities.ts +0 -36
  515. package/src/types/types.ts +0 -24
  516. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  517. package/src/typings.d.ts +0 -8
  518. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  519. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  520. /package/dist/lib/{browser/types → neutral/hooks}/index.mjs.map +0 -0
  521. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  522. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,34 @@
1
+ import {
2
+ ThreadCapabilities_exports,
3
+ ThreadOperation_exports,
4
+ resolveProvider
5
+ } from "./chunk-HJHK5O6F.mjs";
6
+ import "./chunk-J5LGTIGS.mjs";
7
+
8
+ // src/operations/append-channel-message.ts
9
+ import * as Effect from "effect/Effect";
10
+ import { Capability } from "@dxos/app-framework";
11
+ import { Operation } from "@dxos/compute";
12
+ import { invariant } from "@dxos/invariant";
13
+ import { Message } from "@dxos/types";
14
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/operations/append-channel-message.ts";
15
+ var handler = ThreadOperation_exports.AppendChannelMessage.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ channel, sender, text }) {
16
+ const providers = yield* Capability.getAll(ThreadCapabilities_exports.ChannelBackend);
17
+ const provider = resolveProvider(providers, channel.backend.kind);
18
+ invariant(provider, `No channel backend for kind: ${channel.backend.kind}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 13, S: this, A: ["provider", "`No channel backend for kind: ${channel.backend.kind}`"] });
19
+ const message = Message.make({
20
+ sender,
21
+ blocks: [
22
+ {
23
+ _tag: "text",
24
+ text
25
+ }
26
+ ]
27
+ });
28
+ yield* provider.send(channel, message);
29
+ })));
30
+ var append_channel_message_default = handler;
31
+ export {
32
+ append_channel_message_default as default
33
+ };
34
+ //# sourceMappingURL=append-channel-message-J6DXDPBH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/append-channel-message.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { Message } from '@dxos/types';\n\nimport { ThreadCapabilities, ThreadOperation, resolveProvider } from '../types';\n\nconst handler: Operation.WithHandler<typeof ThreadOperation.AppendChannelMessage> =\n ThreadOperation.AppendChannelMessage.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ channel, sender, text }) {\n const providers = yield* Capability.getAll(ThreadCapabilities.ChannelBackend);\n const provider = resolveProvider(providers, channel.backend.kind);\n invariant(provider, `No channel backend for kind: ${channel.backend.kind}`);\n\n const message = Message.make({\n sender,\n blocks: [{ _tag: 'text', text }],\n });\n yield* provider.send(channel, message);\n }),\n ),\n );\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,eAAe;AAIxB,IAAA,eACEC;IAIM,UAAMC,wBAAWC,qBAA2BC,KAAQC,UAAY,YAAA,kBAAA,WAAA,EAAA,SAAA,QAAA,KAAA,GAAA;AAChEC,QAAAA,YAAUJ,OAAW,WAAA,OAAA,2BAAuCG,cAAc;AAE1E,QAAME,WAAUC,gBAAa,WAAA,QAAA,QAAA,IAAA;YAC3BC,UAAAA,gCAAAA,QAAAA,QAAAA,IAAAA,IAAAA,EAAAA,YAAAA,YAAAA,GAAAA,cAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,YAAAA,wDAAAA,EAAAA,CAAAA;QACAC,UAAQ,QAAA,KAAA;;YAAGC;;QAAmB,MAAA;QAAE;MAClC;IACA;EACF,CAAA;AAIN,SAAA,SAAeC,KAAQ,SAAA,OAAA;;;",
6
+ "names": ["Effect", "Capability", "Operation", "invariant", "Message", "ThreadOperation", "provider", "resolveProvider", "channel", "backend", "invariant", "message", "Message", "sender", "blocks", "_tag", "handler"]
7
+ }
@@ -0,0 +1,19 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/index.ts
4
+ import { Capability } from "@dxos/app-framework";
5
+ var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-OLKN3VTB.mjs"));
6
+ var NavigationResolver = Capability.lazy("NavigationResolver", () => import("../navigation-resolver-4X4HCQYX.mjs"));
7
+ var ChannelBackendFeed = Capability.lazy("ChannelBackendFeed", () => import("../channel-backend-feed-FCXGAIEC.mjs"));
8
+ var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-RLCOUVAW.mjs"));
9
+ var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-RU6K2S4L.mjs"));
10
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-G6KT7TSU.mjs"));
11
+ export {
12
+ AppGraphBuilder,
13
+ ChannelBackendFeed,
14
+ CreateObject,
15
+ NavigationResolver,
16
+ OperationHandler,
17
+ ReactSurface
18
+ };
19
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\nexport const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));\nexport const ChannelBackendFeed = Capability.lazy('ChannelBackendFeed', () => import('./channel-backend-feed'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;AACxE,IAAMC,qBAAqBH,WAAWE,KAAK,sBAAsB,MAAM,OAAO,qCAAA,CAAA;AAC9E,IAAME,qBAAqBJ,WAAWE,KAAK,sBAAsB,MAAM,OAAO,sCAAA,CAAA;AAC9E,IAAMG,eAAeL,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMI,mBAAmBN,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMK,eAAeP,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["Capability", "AppGraphBuilder", "lazy", "NavigationResolver", "ChannelBackendFeed", "CreateObject", "OperationHandler", "ReactSurface"]
7
+ }
@@ -0,0 +1,58 @@
1
+ import {
2
+ ThreadCapabilities_exports
3
+ } from "./chunk-HJHK5O6F.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/capabilities/channel-backend-feed.ts
7
+ import * as Effect from "effect/Effect";
8
+ import * as Schema from "effect/Schema";
9
+ import { Capability } from "@dxos/app-framework";
10
+ import { Feed, Filter, Obj, Query } from "@dxos/echo";
11
+ import { createFeedServiceLayer } from "@dxos/echo-client";
12
+ import { invariant } from "@dxos/invariant";
13
+ import { ClientCapabilities } from "@dxos/plugin-client";
14
+ import { Channel, Message } from "@dxos/types";
15
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/capabilities/channel-backend-feed.ts";
16
+ var feedChannelBackend = {
17
+ kind: Channel.FeedBackendKind,
18
+ label: "Feed",
19
+ icon: "ph--rows--regular",
20
+ createFields: Schema.Struct({}),
21
+ makeConfig: () => Feed.make(),
22
+ subscribe: (channel, onMessages) => {
23
+ const feed = Channel.getFeed(channel);
24
+ const db = Obj.getDatabase(channel);
25
+ if (!feed || !db) {
26
+ onMessages([]);
27
+ return () => {
28
+ };
29
+ }
30
+ const result = db.query(Query.select(Filter.type(Message.Message)).from(feed));
31
+ return result.subscribe(() => onMessages(result.results), {
32
+ fire: true
33
+ });
34
+ },
35
+ send: (channel, message) => Effect.gen(function* () {
36
+ const db = Obj.getDatabase(channel);
37
+ invariant(db, "Database not found", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 37, S: this, A: ["db", "'Database not found'"] });
38
+ const client = yield* Capability.get(ClientCapabilities.Client);
39
+ const space = client.spaces.get(db.spaceId);
40
+ invariant(space, "Space not found", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 40, S: this, A: ["space", "'Space not found'"] });
41
+ const feed = Channel.getFeed(channel);
42
+ invariant(feed, "Channel is not feed-backed", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 42, S: this, A: ["feed", "'Channel is not feed-backed'"] });
43
+ yield* Feed.append(feed, [
44
+ message
45
+ ]).pipe(Effect.provide(createFeedServiceLayer(space.queues)));
46
+ }),
47
+ readOnly: (channel) => Obj.getMeta(channel).keys.length > 0
48
+ };
49
+ var ChannelBackendFeed = Capability.makeModule(Effect.fnUntraced(function* () {
50
+ return Capability.contributes(ThreadCapabilities_exports.ChannelBackend, feedChannelBackend);
51
+ }));
52
+ var channel_backend_feed_default = ChannelBackendFeed;
53
+ export {
54
+ ChannelBackendFeed,
55
+ channel_backend_feed_default as default,
56
+ feedChannelBackend
57
+ };
58
+ //# sourceMappingURL=channel-backend-feed-FCXGAIEC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/channel-backend-feed.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Feed, Filter, Obj, Query } from '@dxos/echo';\nimport { createFeedServiceLayer } from '@dxos/echo-client';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { Channel, Message } from '@dxos/types';\n\nimport { ThreadCapabilities } from '../types';\n\n/**\n * Default local ECHO-feed-backed channel provider. Stores messages in a `Feed`\n * (`makeConfig` → `Feed.make()`), reads them via a reactive database query, and\n * writes via `Feed.append`. This is the backend `Channel.make()` defaults to.\n */\nexport const feedChannelBackend: ThreadCapabilities.ChannelBackendProvider = {\n kind: Channel.FeedBackendKind,\n label: 'Feed',\n icon: 'ph--rows--regular',\n createFields: Schema.Struct({}),\n makeConfig: () => Feed.make(),\n subscribe: (channel, onMessages) => {\n const feed = Channel.getFeed(channel);\n const db = Obj.getDatabase(channel);\n if (!feed || !db) {\n onMessages([]);\n return () => {};\n }\n\n const result = db.query(Query.select(Filter.type(Message.Message)).from(feed));\n return result.subscribe(() => onMessages(result.results), { fire: true });\n },\n send: (channel, message) =>\n Effect.gen(function* () {\n const db = Obj.getDatabase(channel);\n invariant(db, 'Database not found');\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = client.spaces.get(db.spaceId);\n invariant(space, 'Space not found');\n const feed = Channel.getFeed(channel);\n invariant(feed, 'Channel is not feed-backed');\n yield* Feed.append(feed, [message]).pipe(Effect.provide(createFeedServiceLayer(space.queues)));\n }),\n readOnly: (channel) => Obj.getMeta(channel).keys.length > 0,\n};\n\n/** Contributes the default feed-backed channel provider. */\nexport const ChannelBackendFeed = Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(ThreadCapabilities.ChannelBackend, feedChannelBackend);\n }),\n);\n\nexport default ChannelBackendFeed;\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,MAAMC,QAAQC,KAAKC,aAAa;AACzC,SAASC,8BAA8B;AACvC,SAASC,iBAAiB;AAC1B,SAASC,0BAA0B;AACnC,SAASC,SAASC,eAAe;AAIjC,IAAA,eAAA;AAOS,IAAA,qBAAA;EACPC,MAAM,QAAA;EACNC,OAAAA;EACAC,MAAAA;EACAC,cAAqBC,cAAAA,CAAAA,CAAAA;cACbC,MAAAA,KAAOC,KAAQC;aACfC,CAAAA,SAASC,eAAYC;AAC3B,UAAKL,OAAQ,QAAK,QAAA,OAAA;UAChBD,KAAAA,IAAW,YAAE,OAAA;QACb,CAAA,QAAO,CAAA,IAAO;AAChB,iBAAA,CAAA,CAAA;AAEA,aAAMO,MAASH;MAAAA;IACf;UAA4DI,SAAM,GAAA,MAAA,MAAA,OAAA,OAAA,KAAA,QAAA,OAAA,CAAA,EAAA,KAAA,IAAA,CAAA;AAAK,WAAA,OAAA,UAAA,MAAA,WAAA,OAAA,OAAA,GAAA;MACzE,MAAA;IACAC,CAAAA;;kBAGIC,YAAc,WAAA,aAAA;AACd,UAAMC,KAAAA,IAAS,YAAOC,OAAWC;AACjC,cAAMC,IAAQH,sBAAqBI,EAAAA,YAAO,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,MAAA,sBAAA,EAAA,CAAA;AAC1CL,UAAAA,SAAUI,OAAO,WAAA,IAAA,mBAAA,MAAA;AACjB,UAAMb,QAAOC,OAAQC,OAAO,IAACG,GAAAA,OAAAA;AAC7BI,cAAUT,OAAM,mBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,SAAA,mBAAA,EAAA,CAAA;AAChB,UAAA,OAAYe,QAAOf,QAAM,OAAA;cAACgB,MAAAA,8BAAAA,EAAAA,YAAAA,YAAAA,GAAAA,cAAAA,GAAAA,IAAAA,GAAAA,MAAAA,GAAAA,CAAAA,QAAAA,8BAAAA,EAAAA,CAAAA;WAAc,KAACC,OAAOC,MAAQC;MAC1D;IACFC,CAAAA,EAAWf,KAAYgB,eAAIC,uBAA4B,MAAG,MAAA,CAAA,CAAA;EAC1D,CAAA;EAEF,UAAA,CAAA,YAAA,IAAA,QAAA,OAAA,EAAA,KAAA,SAA0D;;AAKxD,IAAA,qBAAA,WAAA,WAAA,kBAAA,aAAA;AAEF,SAAA,WAAeC,YAAmB,2BAAA,gBAAA,kBAAA;;;",
6
+ "names": ["Effect", "Schema", "Capability", "Feed", "Filter", "Obj", "Query", "createFeedServiceLayer", "invariant", "ClientCapabilities", "Channel", "Message", "icon", "createFields", "makeConfig", "subscribe", "onMessages", "feed", "Channel", "getFeed", "db", "getDatabase", "channel", "result", "fire", "send", "invariant", "client", "Capability", "get", "space", "spaceId", "append", "message", "Effect", "provide", "createFeedServiceLayer", "readOnly", "Obj", "getMeta", "ChannelBackendFeed"]
7
+ }
@@ -0,0 +1,10 @@
1
+ // src/paths.ts
2
+ import { createTypeSectionPaths } from "@dxos/app-toolkit";
3
+ import { Channel } from "@dxos/types";
4
+ var { getSectionPath: getChannelsPath, getObjectPath: getChannelPath } = createTypeSectionPaths(Channel.Channel);
5
+
6
+ export {
7
+ getChannelsPath,
8
+ getChannelPath
9
+ };
10
+ //# sourceMappingURL=chunk-AWAQTEU6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/paths.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createTypeSectionPaths } from '@dxos/app-toolkit';\nimport { Channel } from '@dxos/types';\n\nconst { getSectionPath: getChannelsPath, getObjectPath: getChannelPath } = createTypeSectionPaths(Channel.Channel);\n\nexport { getChannelsPath, getChannelPath };\n"],
5
+ "mappings": ";AAIA,SAASA,8BAA8B;AACvC,SAASC,eAAe;AAExB,IAAM,EAAEC,gBAAgBC,iBAAiBC,eAAeC,eAAc,IAAKL,uBAAuBC,QAAQA,OAAO;",
6
+ "names": ["createTypeSectionPaths", "Channel", "getSectionPath", "getChannelsPath", "getObjectPath", "getChannelPath"]
7
+ }
@@ -0,0 +1,109 @@
1
+ import {
2
+ __export
3
+ } from "./chunk-J5LGTIGS.mjs";
4
+
5
+ // src/types/channel-backend.ts
6
+ import * as Schema from "effect/Schema";
7
+ import * as SchemaAST from "effect/SchemaAST";
8
+ var resolveProvider = (providers, kind) => providers.find((provider) => provider.kind === kind);
9
+ var assertUniqueKinds = (providers) => {
10
+ const seen = /* @__PURE__ */ new Set();
11
+ for (const provider of providers) {
12
+ if (seen.has(provider.kind)) {
13
+ throw new Error(`Duplicate channel backend kind: ${provider.kind}`);
14
+ }
15
+ seen.add(provider.kind);
16
+ }
17
+ };
18
+ var buildChannelFormSchema = (providers) => {
19
+ assertUniqueKinds(providers);
20
+ const needsSelector = providers.length > 1 || providers.some((provider) => fieldCount(provider.createFields) > 0);
21
+ if (!needsSelector) {
22
+ return Schema.Struct({
23
+ name: Schema.optional(Schema.String)
24
+ });
25
+ }
26
+ const branches = providers.map((provider) => Schema.extend(Schema.Struct({
27
+ kind: Schema.Literal(provider.kind)
28
+ }), provider.createFields));
29
+ const backend = branches.length === 1 ? branches[0] : Schema.Union(...branches);
30
+ return Schema.Struct({
31
+ name: Schema.optional(Schema.String),
32
+ backend
33
+ });
34
+ };
35
+ var fieldCount = (schema) => SchemaAST.getPropertySignatures(schema.ast).length;
36
+
37
+ // src/types/ThreadCapabilities.ts
38
+ var ThreadCapabilities_exports = {};
39
+ __export(ThreadCapabilities_exports, {
40
+ ChannelBackend: () => ChannelBackend
41
+ });
42
+ import { Capability } from "@dxos/app-framework";
43
+ import { meta } from "#meta";
44
+ var ChannelBackend = Capability.make(`${meta.id}.capability.channel-backend`);
45
+
46
+ // src/types/ThreadOperation.ts
47
+ var ThreadOperation_exports = {};
48
+ __export(ThreadOperation_exports, {
49
+ AppendChannelMessage: () => AppendChannelMessage,
50
+ CreateChannel: () => CreateChannel
51
+ });
52
+ import * as Schema2 from "effect/Schema";
53
+ import { Capability as Capability2 } from "@dxos/app-framework";
54
+ import { Operation } from "@dxos/compute";
55
+ import { Key, Type, DXN } from "@dxos/echo";
56
+ import { Actor, Channel } from "@dxos/types";
57
+ import { meta as meta2 } from "#meta";
58
+ var makeKey = (name) => DXN.make(`${meta2.id}.operation.${name}`);
59
+ var CreateChannel = Operation.make({
60
+ meta: {
61
+ key: makeKey("createChannel"),
62
+ name: "Create Channel",
63
+ icon: "ph--hash--regular"
64
+ },
65
+ services: [
66
+ Capability2.Service
67
+ ],
68
+ input: Schema2.Struct({
69
+ spaceId: Key.SpaceId,
70
+ name: Schema2.optional(Schema2.String),
71
+ /** Backend provider id; defaults to the local feed backend. */
72
+ kind: Schema2.optional(Schema2.String),
73
+ /** Per-backend create options passed to the provider's makeConfig. */
74
+ options: Schema2.optional(Schema2.Record({
75
+ key: Schema2.String,
76
+ value: Schema2.Any
77
+ }))
78
+ }),
79
+ output: Schema2.Struct({
80
+ object: Type.getSchema(Channel.Channel)
81
+ })
82
+ });
83
+ var AppendChannelMessage = Operation.make({
84
+ meta: {
85
+ key: makeKey("appendChannelMessage"),
86
+ name: "Append Channel Message",
87
+ icon: "ph--chat-text--regular"
88
+ },
89
+ // Note: Feed.FeedService is provided inside the handler from space.queues, not at the
90
+ // operation level — the runtime can't fulfill it without a space context.
91
+ services: [
92
+ Capability2.Service
93
+ ],
94
+ input: Schema2.Struct({
95
+ channel: Type.getSchema(Channel.Channel),
96
+ sender: Actor.Actor,
97
+ text: Schema2.String
98
+ }),
99
+ output: Schema2.Void
100
+ });
101
+
102
+ export {
103
+ resolveProvider,
104
+ assertUniqueKinds,
105
+ buildChannelFormSchema,
106
+ ThreadCapabilities_exports,
107
+ ThreadOperation_exports
108
+ };
109
+ //# sourceMappingURL=chunk-HJHK5O6F.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/channel-backend.ts", "../../../src/types/ThreadCapabilities.ts", "../../../src/types/ThreadOperation.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport * as ThreadCapabilities from './ThreadCapabilities';\n\n/** Finds the provider matching a `Channel.backend.kind`. */\nexport const resolveProvider = (\n providers: readonly ThreadCapabilities.ChannelBackendProvider[],\n kind: string,\n): ThreadCapabilities.ChannelBackendProvider | undefined => providers.find((provider) => provider.kind === kind);\n\n/** Throws if two providers share a `kind` (which would make resolution order-dependent). */\nexport const assertUniqueKinds = (providers: readonly ThreadCapabilities.ChannelBackendProvider[]): void => {\n const seen = new Set<string>();\n for (const provider of providers) {\n if (seen.has(provider.kind)) {\n throw new Error(`Duplicate channel backend kind: ${provider.kind}`);\n }\n seen.add(provider.kind);\n }\n};\n\n/**\n * Builds the create-channel form schema from the registered providers.\n *\n * With a single provider whose create-fields are empty the form is just a\n * `name` field (today's behaviour). With multiple providers (or extra fields)\n * it becomes `{ name?, backend: Union(<{ kind: Literal(p.kind) } & p.createFields>) }`,\n * which react-ui-form renders as a `kind` Select plus the selected branch's fields.\n */\nexport const buildChannelFormSchema = (\n providers: readonly ThreadCapabilities.ChannelBackendProvider[],\n): Schema.Schema.AnyNoContext => {\n assertUniqueKinds(providers);\n const needsSelector = providers.length > 1 || providers.some((provider) => fieldCount(provider.createFields) > 0);\n if (!needsSelector) {\n return Schema.Struct({ name: Schema.optional(Schema.String) });\n }\n\n const branches = providers.map((provider) =>\n Schema.extend(Schema.Struct({ kind: Schema.Literal(provider.kind) }), provider.createFields),\n );\n const backend = branches.length === 1 ? branches[0] : Schema.Union(...branches);\n return Schema.Struct({\n name: Schema.optional(Schema.String),\n backend,\n });\n};\n\nconst fieldCount = (schema: Schema.Schema.AnyNoContext): number => SchemaAST.getPropertySignatures(schema.ast).length;\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Effect from 'effect/Effect';\nimport type * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { type Obj } from '@dxos/echo';\nimport { type Channel, type Message } from '@dxos/types';\n\nimport { meta } from '#meta';\n\n/**\n * A pluggable message backend for a `Channel`. Providers are contributed by\n * plugins and resolved by `Channel.backend.kind`.\n */\nexport interface ChannelBackendProvider {\n /** Stable backend id; matches `Channel.backend.kind`. */\n kind: string;\n /** Human-readable label shown in the create-channel form. */\n label: string;\n /** Icon name (phosphor) for the create-channel form. */\n icon?: string;\n /**\n * Per-backend create-form inputs (a struct; excludes the `kind` discriminant\n * and the channel `name`, which the panel adds). Empty struct when the backend\n * needs no extra input (e.g. the local feed).\n */\n createFields: Schema.Schema.AnyNoContext;\n /** Builds the provider's config object from the collected create-form inputs. */\n makeConfig: (options: Record<string, unknown>) => Obj.Any;\n /**\n * Subscribes to the channel's messages. Invokes `onMessages` with the current\n * list immediately and on every change. Returns an unsubscribe function.\n */\n subscribe: (channel: Channel.Channel, onMessages: (messages: readonly Message.Message[]) => void) => () => void;\n /** Sends a message through the backend. */\n send: (channel: Channel.Channel, message: Message.Message) => Effect.Effect<void, Error, Capability.Service>;\n /** Whether the channel is read-only. Defaults to \"channel has foreign-key Obj.Meta\". */\n readOnly?: (channel: Channel.Channel) => boolean;\n}\n\n/** Registry of channel-message backends. Collect with `Capability.getAll`. */\nexport const ChannelBackend = Capability.make<ChannelBackendProvider>(`${meta.id}.capability.channel-backend`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Key, Type, DXN } from '@dxos/echo';\nimport { Actor, Channel } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nconst makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);\n\nexport const CreateChannel = Operation.make({\n meta: { key: makeKey('createChannel'), name: 'Create Channel', icon: 'ph--hash--regular' },\n services: [Capability.Service],\n input: Schema.Struct({\n spaceId: Key.SpaceId,\n name: Schema.optional(Schema.String),\n /** Backend provider id; defaults to the local feed backend. */\n kind: Schema.optional(Schema.String),\n /** Per-backend create options passed to the provider's makeConfig. */\n options: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n }),\n output: Schema.Struct({\n object: Type.getSchema(Channel.Channel),\n }),\n});\n\nexport const AppendChannelMessage = Operation.make({\n meta: {\n key: makeKey('appendChannelMessage'),\n name: 'Append Channel Message',\n icon: 'ph--chat-text--regular',\n },\n // Note: Feed.FeedService is provided inside the handler from space.queues, not at the\n // operation level — the runtime can't fulfill it without a space context.\n services: [Capability.Service],\n input: Schema.Struct({\n channel: Type.getSchema(Channel.Channel),\n sender: Actor.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n});\n"],
5
+ "mappings": ";;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,eAAe;AAKpB,IAAMC,kBAAkB,CAC7BC,WACAC,SAC0DD,UAAUE,KAAK,CAACC,aAAaA,SAASF,SAASA,IAAAA;AAGpG,IAAMG,oBAAoB,CAACJ,cAAAA;AAChC,QAAMK,OAAO,oBAAIC,IAAAA;AACjB,aAAWH,YAAYH,WAAW;AAChC,QAAIK,KAAKE,IAAIJ,SAASF,IAAI,GAAG;AAC3B,YAAM,IAAIO,MAAM,mCAAmCL,SAASF,IAAI,EAAE;IACpE;AACAI,SAAKI,IAAIN,SAASF,IAAI;EACxB;AACF;AAUO,IAAMS,yBAAyB,CACpCV,cAAAA;AAEAI,oBAAkBJ,SAAAA;AAClB,QAAMW,gBAAgBX,UAAUY,SAAS,KAAKZ,UAAUa,KAAK,CAACV,aAAaW,WAAWX,SAASY,YAAY,IAAI,CAAA;AAC/G,MAAI,CAACJ,eAAe;AAClB,WAAcK,cAAO;MAAEC,MAAaC,gBAAgBC,aAAM;IAAE,CAAA;EAC9D;AAEA,QAAMC,WAAWpB,UAAUqB,IAAI,CAAClB,aACvBmB,cAAcN,cAAO;IAAEf,MAAasB,eAAQpB,SAASF,IAAI;EAAE,CAAA,GAAIE,SAASY,YAAY,CAAA;AAE7F,QAAMS,UAAUJ,SAASR,WAAW,IAAIQ,SAAS,CAAA,IAAYK,aAAK,GAAIL,QAAAA;AACtE,SAAcJ,cAAO;IACnBC,MAAaC,gBAAgBC,aAAM;IACnCK;EACF,CAAA;AACF;AAEA,IAAMV,aAAa,CAACY,WAAyDC,gCAAsBD,OAAOE,GAAG,EAAEhB;;;ACrD/G;;;;AASA,SAASiB,kBAAkB;AAI3B,SAASC,YAAY;AAiCd,IAAMC,iBAAiBF,WAAWG,KAA6B,GAAGF,KAAKG,EAAE,6BAA6B;;;AC9C7G;;;;;AAMA,YAAYC,aAAY;AAExB,SAASC,cAAAA,mBAAkB;AAC3B,SAASC,iBAAiB;AAC1B,SAASC,KAAKC,MAAMC,WAAW;AAC/B,SAASC,OAAOC,eAAe;AAE/B,SAASC,QAAAA,aAAY;AAErB,IAAMC,UAAU,CAACC,SAAiBL,IAAIM,KAAK,GAAGH,MAAKI,EAAE,cAAcF,IAAAA,EAAM;AAElE,IAAMG,gBAAgBX,UAAUS,KAAK;EAC1CH,MAAM;IAAEM,KAAKL,QAAQ,eAAA;IAAkBC,MAAM;IAAkBK,MAAM;EAAoB;EACzFC,UAAU;IAACf,YAAWgB;;EACtBC,OAAcC,eAAO;IACnBC,SAASjB,IAAIkB;IACbX,MAAaY,iBAAgBC,cAAM;;IAEnCC,MAAaF,iBAAgBC,cAAM;;IAEnCE,SAAgBH,iBAAgBI,eAAO;MAAEZ,KAAYS;MAAQI,OAAcC;IAAI,CAAA,CAAA;EACjF,CAAA;EACAC,QAAeV,eAAO;IACpBW,QAAQ1B,KAAK2B,UAAUxB,QAAQA,OAAO;EACxC,CAAA;AACF,CAAA;AAEO,IAAMyB,uBAAuB9B,UAAUS,KAAK;EACjDH,MAAM;IACJM,KAAKL,QAAQ,sBAAA;IACbC,MAAM;IACNK,MAAM;EACR;;;EAGAC,UAAU;IAACf,YAAWgB;;EACtBC,OAAcC,eAAO;IACnBc,SAAS7B,KAAK2B,UAAUxB,QAAQA,OAAO;IACvC2B,QAAQ5B,MAAMA;IACd6B,MAAaZ;EACf,CAAA;EACAM,QAAeO;AACjB,CAAA;",
6
+ "names": ["Schema", "SchemaAST", "resolveProvider", "providers", "kind", "find", "provider", "assertUniqueKinds", "seen", "Set", "has", "Error", "add", "buildChannelFormSchema", "needsSelector", "length", "some", "fieldCount", "createFields", "Struct", "name", "optional", "String", "branches", "map", "extend", "Literal", "backend", "Union", "schema", "getPropertySignatures", "ast", "Capability", "meta", "ChannelBackend", "make", "id", "Schema", "Capability", "Operation", "Key", "Type", "DXN", "Actor", "Channel", "meta", "makeKey", "name", "make", "id", "CreateChannel", "key", "icon", "services", "Service", "input", "Struct", "spaceId", "SpaceId", "optional", "String", "kind", "options", "Record", "value", "Any", "output", "object", "getSchema", "AppendChannelMessage", "channel", "sender", "text", "Void"]
7
+ }
@@ -0,0 +1,36 @@
1
+ // src/meta.ts
2
+ import { Plugin } from "@dxos/app-framework";
3
+ import { DXN } from "@dxos/keys";
4
+ import { trim } from "@dxos/util";
5
+ var meta = Plugin.makeMeta({
6
+ key: DXN.make("org.dxos.plugin.thread"),
7
+ name: "Threads",
8
+ author: "DXOS",
9
+ description: trim`
10
+ ThreadPlugin provides chat: channels backed by an ECHO feed and free-standing
11
+ message threads. It renders the channel article and companion surfaces plus a
12
+ thread surface, and contributes the operations that create a default channel on
13
+ space creation, create new channels, and append messages.
14
+
15
+ Channel messages are stored in the channel's feed queue and rendered newest-last
16
+ with a pinned composer; externally-synced channels (carrying foreign-key
17
+ metadata, e.g. Slack/Discord-sourced rooms) render read-only because there is no
18
+ local-write path back to the source. Free-standing threads render their messages
19
+ and append by pushing onto the thread's message list.
20
+
21
+ The shared message and thread UI comes from @dxos/react-ui-thread; the Channel,
22
+ Message, and Thread schema come from @dxos/types. Document comments and the
23
+ comment-thread AI agent live in the @dxos/plugin-comments plugin.
24
+ `,
25
+ icon: "ph--video-conference--regular",
26
+ iconHue: "rose",
27
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread",
28
+ spec: "PLUGIN.mdl"
29
+ });
30
+ var THREAD_ITEM = `${meta.id}.item`;
31
+
32
+ export {
33
+ meta,
34
+ THREAD_ITEM
35
+ };
36
+ //# sourceMappingURL=chunk-OOC6EQ7X.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nexport const meta = Plugin.makeMeta({\n key: DXN.make('org.dxos.plugin.thread'),\n name: 'Threads',\n author: 'DXOS',\n description: trim`\n ThreadPlugin provides chat: channels backed by an ECHO feed and free-standing\n message threads. It renders the channel article and companion surfaces plus a\n thread surface, and contributes the operations that create a default channel on\n space creation, create new channels, and append messages.\n\n Channel messages are stored in the channel's feed queue and rendered newest-last\n with a pinned composer; externally-synced channels (carrying foreign-key\n metadata, e.g. Slack/Discord-sourced rooms) render read-only because there is no\n local-write path back to the source. Free-standing threads render their messages\n and append by pushing onto the thread's message list.\n\n The shared message and thread UI comes from @dxos/react-ui-thread; the Channel,\n Message, and Thread schema come from @dxos/types. Document comments and the\n comment-thread AI agent live in the @dxos/plugin-comments plugin.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n spec: 'PLUGIN.mdl',\n});\n\nexport const THREAD_ITEM = `${meta.id}.item`;\n"],
5
+ "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;AACpB,SAASC,YAAY;AAEd,IAAMC,OAAOH,OAAOI,SAAS;EAClCC,KAAKJ,IAAIK,KAAK,wBAAA;EACdC,MAAM;EACNC,QAAQ;EACRC,aAAaP;;;;;;;;;;;;;;;;EAgBbQ,MAAM;EACNC,SAAS;EACTC,QAAQ;EACRC,MAAM;AACR,CAAA;AAEO,IAAMC,cAAc,GAAGX,KAAKY,EAAE;",
6
+ "names": ["Plugin", "DXN", "trim", "meta", "makeMeta", "key", "make", "name", "author", "description", "icon", "iconHue", "source", "spec", "THREAD_ITEM", "id"]
7
+ }
@@ -0,0 +1,69 @@
1
+ import {
2
+ ThreadCapabilities_exports,
3
+ resolveProvider
4
+ } from "./chunk-HJHK5O6F.mjs";
5
+
6
+ // src/hooks/useMessages.ts
7
+ import { useCallback, useMemo, useRef, useSyncExternalStore } from "react";
8
+ import { useCapabilities } from "@dxos/app-framework/ui";
9
+ var EMPTY = [];
10
+ var useMessages = (channel) => {
11
+ const providers = useCapabilities(ThreadCapabilities_exports.ChannelBackend);
12
+ const provider = useMemo(() => channel ? resolveProvider(providers, channel.backend.kind) : void 0, [
13
+ providers,
14
+ channel
15
+ ]);
16
+ const ref = useRef(EMPTY);
17
+ const subscribe = useCallback((onChange) => {
18
+ if (!provider || !channel) {
19
+ return () => {
20
+ };
21
+ }
22
+ return provider.subscribe(channel, (messages) => {
23
+ ref.current = messages;
24
+ onChange();
25
+ });
26
+ }, [
27
+ provider,
28
+ channel
29
+ ]);
30
+ return useSyncExternalStore(subscribe, () => ref.current);
31
+ };
32
+
33
+ // src/hooks/useStatus.ts
34
+ import { useEffect, useState } from "react";
35
+ var useStatus = (space, channel) => {
36
+ const [processing, setProcessing] = useState(false);
37
+ useEffect(() => {
38
+ if (!space || !channel) {
39
+ return;
40
+ }
41
+ const unsubscribe = space.listen(`status/${channel}`, (status) => {
42
+ const { event } = status.payload ?? {};
43
+ setProcessing(event === "processing");
44
+ });
45
+ const t = setInterval(() => {
46
+ setProcessing((prev) => {
47
+ if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
48
+ return void 0;
49
+ } else {
50
+ return prev;
51
+ }
52
+ });
53
+ }, 1e3);
54
+ return () => {
55
+ unsubscribe();
56
+ clearInterval(t);
57
+ };
58
+ }, [
59
+ space,
60
+ channel
61
+ ]);
62
+ return processing;
63
+ };
64
+
65
+ export {
66
+ useMessages,
67
+ useStatus
68
+ };
69
+ //# sourceMappingURL=chunk-P4RSGFS4.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useMessages.ts", "../../../src/hooks/useStatus.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\nimport { type Channel, type Message } from '@dxos/types';\n\nimport { ThreadCapabilities, resolveProvider } from '../types';\n\nconst EMPTY: readonly Message.Message[] = [];\n\n/** Reactive message list for a channel, resolved through its backend provider. */\nexport const useMessages = (channel: Channel.Channel | undefined): readonly Message.Message[] => {\n const providers = useCapabilities(ThreadCapabilities.ChannelBackend);\n const provider = useMemo(\n () => (channel ? resolveProvider(providers, channel.backend.kind) : undefined),\n [providers, channel],\n );\n\n const ref = useRef<readonly Message.Message[]>(EMPTY);\n const subscribe = useCallback(\n (onChange: () => void) => {\n if (!provider || !channel) {\n return () => {};\n }\n return provider.subscribe(channel, (messages) => {\n ref.current = messages;\n onChange();\n });\n },\n [provider, channel],\n );\n\n return useSyncExternalStore(subscribe, () => ref.current);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,aAAaC,SAASC,QAAQC,4BAA4B;AAEnE,SAASC,uBAAuB;AAKhC,IAAMC,QAAoC,CAAA;AAGnC,IAAMC,cAAc,CAACC,YAAAA;AAC1B,QAAMC,YAAYC,gBAAgBC,2BAAmBC,cAAc;AACnE,QAAMC,WAAWC,QACf,MAAON,UAAUO,gBAAgBN,WAAWD,QAAQQ,QAAQC,IAAI,IAAIC,QACpE;IAACT;IAAWD;GAAQ;AAGtB,QAAMW,MAAMC,OAAmCd,KAAAA;AAC/C,QAAMe,YAAYC,YAChB,CAACC,aAAAA;AACC,QAAI,CAACV,YAAY,CAACL,SAAS;AACzB,aAAO,MAAA;MAAO;IAChB;AACA,WAAOK,SAASQ,UAAUb,SAAS,CAACgB,aAAAA;AAClCL,UAAIM,UAAUD;AACdD,eAAAA;IACF,CAAA;EACF,GACA;IAACV;IAAUL;GAAQ;AAGrB,SAAOkB,qBAAqBL,WAAW,MAAMF,IAAIM,OAAO;AAC1D;;;AChCA,SAASE,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBL,SAAS,KAAA;AAC7CD,YAAU,MAAA;AACR,QAAI,CAACG,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMG,cAAcJ,MAAMK,OAAO,UAAUJ,OAAAA,IAAW,CAACK,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCL,oBAAcI,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBP,oBAAc,CAACQ,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACT;IAAOC;GAAQ;AAEnB,SAAOC;AACT;",
6
+ "names": ["useCallback", "useMemo", "useRef", "useSyncExternalStore", "useCapabilities", "EMPTY", "useMessages", "channel", "providers", "useCapabilities", "ThreadCapabilities", "ChannelBackend", "provider", "useMemo", "resolveProvider", "backend", "kind", "undefined", "ref", "useRef", "subscribe", "useCallback", "onChange", "messages", "current", "useSyncExternalStore", "useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval"]
7
+ }
@@ -0,0 +1,8 @@
1
+ // src/operations/index.ts
2
+ import { OperationHandlerSet } from "@dxos/compute";
3
+ var ThreadOperationHandlerSet = OperationHandlerSet.lazy(() => import("./append-channel-message-J6DXDPBH.mjs"), () => import("./create-channel-UW2LSL4G.mjs"));
4
+
5
+ export {
6
+ ThreadOperationHandlerSet
7
+ };
8
+ //# sourceMappingURL=chunk-SZXFLBZL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const ThreadOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./append-channel-message'),\n () => import('./create-channel'),\n);\n"],
5
+ "mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,4BAA4BD,oBAAoBE,KAC3D,MAAM,OAAO,uCAAA,GACb,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["OperationHandlerSet", "ThreadOperationHandlerSet", "lazy"]
7
+ }
@@ -0,0 +1,93 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/Chat/Chat.tsx
4
+ import React, { useCallback, useMemo } from "react";
5
+ import { Surface } from "@dxos/app-framework/ui";
6
+ import { AppSurface } from "@dxos/app-toolkit/ui";
7
+ import { PublicKey } from "@dxos/react-client";
8
+ import { composable, Card, useTranslation } from "@dxos/react-ui";
9
+ import { Thread } from "@dxos/react-ui-thread";
10
+ import { hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/ui-theme";
11
+ import { meta } from "#meta";
12
+
13
+ // src/util.ts
14
+ import { generateName } from "@dxos/display-name";
15
+ import { hexToFallback, toFallback } from "@dxos/util";
16
+ var hashString = (s) => {
17
+ let h = 0;
18
+ for (let i = 0; i < s.length; i++) {
19
+ h = h * 31 + s.charCodeAt(i) | 0;
20
+ }
21
+ return h >>> 0;
22
+ };
23
+ var getMessageMetadata = (id, identity, fallbackSender) => {
24
+ const fallback = identity?.identityKey ? hexToFallback(identity.identityKey.toHex()) : toFallback(hashString(fallbackSender?.name ?? fallbackSender?.email ?? "0"));
25
+ return {
26
+ id,
27
+ authorId: identity?.did,
28
+ authorName: identity?.profile?.displayName ?? (identity?.identityKey ? generateName(identity.identityKey.toHex()) : void 0) ?? fallbackSender?.name ?? fallbackSender?.email,
29
+ authorAvatarProps: {
30
+ hue: identity?.profile?.data?.hue ?? fallback.hue,
31
+ emoji: identity?.profile?.data?.emoji ?? fallback.emoji
32
+ }
33
+ };
34
+ };
35
+
36
+ // src/components/Chat/Chat.tsx
37
+ var Chat = composable(({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly }, forwardedRef) => {
38
+ const { t } = useTranslation(meta.id);
39
+ const components = useMemo(() => ({
40
+ Object: ObjectTile
41
+ }), []);
42
+ const textboxMetadata = useMemo(() => getMessageMetadata(id, identity), [
43
+ id,
44
+ identity
45
+ ]);
46
+ const getMetadata = useCallback((message) => {
47
+ const sender = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey));
48
+ return getMessageMetadata(message.id, sender?.identity, message.sender);
49
+ }, [
50
+ members
51
+ ]);
52
+ return /* @__PURE__ */ React.createElement(Thread.Root, {
53
+ getMetadata,
54
+ components,
55
+ identityDid: identity?.did,
56
+ editable: false
57
+ }, /* @__PURE__ */ React.createElement(Thread.Content, {
58
+ id,
59
+ current,
60
+ classNames: "dx-container",
61
+ ref: forwardedRef
62
+ }, /* @__PURE__ */ React.createElement(Thread.Messages, {
63
+ messages
64
+ }), !readOnly && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Thread.Textbox, {
65
+ ...textboxMetadata,
66
+ autoFocus,
67
+ placeholder: t("message.placeholder"),
68
+ onSend
69
+ }), /* @__PURE__ */ React.createElement(Thread.Status, {
70
+ activity
71
+ }, t("activity.message")))));
72
+ });
73
+ var ObjectTile = ({ subject }) => {
74
+ const Fallback = useCallback(() => /* @__PURE__ */ React.createElement("span", {
75
+ className: "p-1 text-sm text-description"
76
+ }, subject.id), [
77
+ subject
78
+ ]);
79
+ return /* @__PURE__ */ React.createElement(Card.Root, {
80
+ className: mx("grid col-span-3 py-1 pr-4", hoverableControls, hoverableFocusedWithinControls)
81
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
82
+ type: AppSurface.Card,
83
+ limit: 1,
84
+ data: {
85
+ subject
86
+ },
87
+ fallback: Fallback
88
+ }));
89
+ };
90
+ export {
91
+ Chat
92
+ };
93
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/Chat/Chat.tsx", "../../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { composable, Card, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { type ObjectTileComponent, Thread } from '@dxos/react-ui-thread';\nimport { type Message } from '@dxos/types';\nimport { hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { getMessageMetadata } from '../../util';\n\nexport type ChatProps = ThemedClassName<{\n /** Stable id used for the underlying thread root and message metadata. */\n id: string;\n /** Identity used to attribute outgoing messages in the textbox metadata. */\n identity?: Identity;\n /** Space members for rendering sender names/avatars on incoming messages. */\n members: SpaceMember[];\n /** Messages to render in order. */\n messages: readonly Message.Message[];\n /** Activity indicator (e.g. processing) shown beneath the textbox. */\n activity?: boolean;\n /** Autofocus textbox */\n autoFocus?: boolean;\n /** Marks the thread as the current/attended one. */\n current?: boolean | string;\n /**\n * When true, hide the composer textbox and activity indicator. Used for\n * channels whose source-of-truth lives elsewhere (e.g. externally-synced\n * Slack/Discord channels keyed by a foreign id) — sending isn't meaningful\n * because there is no local-write path back to the source.\n */\n readOnly?: boolean;\n /**\n * Called with the user's textbox content when they press send.\n * Returning `true` signals the message was accepted; the textbox is then cleared.\n */\n onSend: (text: string) => boolean;\n}>;\n\n/**\n * Pure chat UI: message list + composer textbox + activity indicator, built on\n * the `@dxos/react-ui-thread` primitives. Does not load data or invoke\n * operations — the caller passes messages and an `onSend` callback. Used by\n * `ChannelArticle` and `ThreadArticle`.\n */\nexport const Chat = composable<HTMLDivElement, ChatProps>(\n ({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n\n const components = useMemo(() => ({ Object: ObjectTile }), []);\n\n const textboxMetadata = useMemo(() => getMessageMetadata(id, identity), [id, identity]);\n\n const getMetadata = useCallback(\n (message: Message.Message) => {\n // TODO(burdon): Factor out.\n const sender = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n );\n\n // Pass `message.sender` as the fallback so externally-synced messages\n // (Slack, etc.) display the source-side sender name instead of \"Anonymous\"\n // when no DXOS identity matches.\n return getMessageMetadata(message.id, sender?.identity, message.sender);\n },\n [members],\n );\n\n return (\n <Thread.Root getMetadata={getMetadata} components={components} identityDid={identity?.did} editable={false}>\n <Thread.Content id={id} current={current} classNames='dx-container' ref={forwardedRef}>\n <Thread.Messages messages={messages} />\n {!readOnly && (\n <>\n <Thread.Textbox\n {...textboxMetadata}\n autoFocus={autoFocus}\n placeholder={t('message.placeholder')}\n onSend={onSend}\n />\n <Thread.Status activity={activity}>{t('activity.message')}</Thread.Status>\n </>\n )}\n </Thread.Content>\n </Thread.Root>\n );\n },\n);\n\n/**\n * Object/reference message-block tile, injected into `Thread.Root` so that\n * `@dxos/react-ui-thread` stays free of `@dxos/app-framework`. Renders the\n * referenced subject via an app-framework `Surface` (the card role).\n */\nconst ObjectTile: ObjectTileComponent = ({ subject }) => {\n const Fallback = useCallback(() => <span className='p-1 text-sm text-description'>{subject.id}</span>, [subject]);\n return (\n <Card.Root className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}>\n <Surface.Surface\n type={AppSurface.Card}\n limit={1}\n data={{ subject } satisfies AppSurface.ObjectCardData}\n fallback={Fallback}\n />\n </Card.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback, toFallback } from '@dxos/util';\n\n/**\n * Stable hash for an arbitrary string — used as the avatar-fallback seed for\n * external senders who have no DXOS identity (e.g. Slack/Discord-synced\n * messages). djb2-ish, only stability matters.\n *\n * Coerced to unsigned 32-bit via `>>> 0` because `toFallback` does a plain\n * modulo against `idEmoji.length * idHue.length` and JavaScript's `%`\n * preserves the sign of the dividend — a negative hash would index\n * `idEmoji[-x]` and `idHue[-x]` to `undefined`, causing the avatar to fall\n * through to `Avatar.Content`'s default red/ghost.\n */\nconst hashString = (s: string): number => {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return h >>> 0;\n};\n\nexport const getMessageMetadata = (\n id: string,\n identity?: Identity,\n /**\n * Externally-sourced sender info (Slack/Discord/etc). Used only when no\n * matching DXOS `identity` is available — provides `name`/`email` for the\n * author label and a stable seed for the avatar fallback.\n */\n fallbackSender?: { name?: string; email?: string },\n): MessageMetadata => {\n const fallback = identity?.identityKey\n ? hexToFallback(identity.identityKey.toHex())\n : toFallback(hashString(fallbackSender?.name ?? fallbackSender?.email ?? '0'));\n return {\n id,\n authorId: identity?.did,\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined) ??\n fallbackSender?.name ??\n fallbackSender?.email,\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,aAAaC,eAAe;AAE5C,SAASC,eAAe;AACxB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiB;AAG1B,SAASC,YAAYC,MAA4BC,sBAAsB;AACvE,SAAmCC,cAAc;AAEjD,SAASC,mBAAmBC,gCAAgCC,UAAU;AAEtE,SAASC,YAAY;;;ACZrB,SAASC,oBAAoB;AAG7B,SAASC,eAAeC,kBAAkB;AAa1C,IAAMC,aAAa,CAACC,MAAAA;AAClB,MAAIC,IAAI;AACR,WAASC,IAAI,GAAGA,IAAIF,EAAEG,QAAQD,KAAK;AACjCD,QAAKA,IAAI,KAAKD,EAAEI,WAAWF,CAAAA,IAAM;EACnC;AACA,SAAOD,MAAM;AACf;AAEO,IAAMI,qBAAqB,CAChCC,IACAC,UAMAC,mBAAAA;AAEA,QAAMC,WAAWF,UAAUG,cACvBb,cAAcU,SAASG,YAAYC,MAAK,CAAA,IACxCb,WAAWC,WAAWS,gBAAgBI,QAAQJ,gBAAgBK,SAAS,GAAA,CAAA;AAC3E,SAAO;IACLP;IACAQ,UAAUP,UAAUQ;IACpBC,YACET,UAAUU,SAASC,gBAClBX,UAAUG,cAAcd,aAAaW,SAASG,YAAYC,MAAK,CAAA,IAAMQ,WACtEX,gBAAgBI,QAChBJ,gBAAgBK;IAClBO,mBAAmB;MACjBC,KAAKd,UAAUU,SAASK,MAAMD,OAAOZ,SAASY;MAC9CE,OAAOhB,UAAUU,SAASK,MAAMC,SAASd,SAASc;IACpD;EACF;AACF;;;ADCO,IAAMC,OAAOC,WAClB,CAAC,EAAEC,IAAIC,UAAUC,SAASC,UAAUC,UAAUC,QAAQC,WAAWC,SAASC,SAAQ,GAAIC,iBAAAA;AACpF,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKZ,EAAE;AAEpC,QAAMa,aAAaC,QAAQ,OAAO;IAAEC,QAAQC;EAAW,IAAI,CAAA,CAAE;AAE7D,QAAMC,kBAAkBH,QAAQ,MAAMI,mBAAmBlB,IAAIC,QAAAA,GAAW;IAACD;IAAIC;GAAS;AAEtF,QAAMkB,cAAcC,YAClB,CAACC,YAAAA;AAEC,UAAMC,SAASpB,QAAQqB,KACrB,CAACC,WACEH,QAAQC,OAAOG,eAAeD,OAAOvB,SAASyB,QAAQL,QAAQC,OAAOG,eACrEJ,QAAQC,OAAOK,eAAeC,UAAUC,OAAOL,OAAOvB,SAAS0B,aAAaN,QAAQC,OAAOK,WAAW,CAAA;AAM3G,WAAOT,mBAAmBG,QAAQrB,IAAIsB,QAAQrB,UAAUoB,QAAQC,MAAM;EACxE,GACA;IAACpB;GAAQ;AAGX,SACE,sBAAA,cAAC4B,OAAOC,MAAI;IAACZ;IAA0BN;IAAwBY,aAAaxB,UAAUyB;IAAKM,UAAU;KACnG,sBAAA,cAACF,OAAOG,SAAO;IAACjC;IAAQO;IAAkB2B,YAAW;IAAeC,KAAK1B;KACvE,sBAAA,cAACqB,OAAOM,UAAQ;IAACjC;MAChB,CAACK,YACA,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACsB,OAAOO,SAAO;IACZ,GAAGpB;IACJX;IACAgC,aAAa5B,EAAE,qBAAA;IACfL;MAEF,sBAAA,cAACyB,OAAOS,QAAM;IAACnC;KAAqBM,EAAE,kBAAA,CAAA,CAAA,CAAA,CAAA;AAMlD,CAAA;AAQF,IAAMM,aAAkC,CAAC,EAAEwB,QAAO,MAAE;AAClD,QAAMC,WAAWrB,YAAY,MAAM,sBAAA,cAACsB,QAAAA;IAAKC,WAAU;KAAgCH,QAAQxC,EAAE,GAAU;IAACwC;GAAQ;AAChH,SACE,sBAAA,cAACI,KAAKb,MAAI;IAACY,WAAWE,GAAG,6BAA6BC,mBAAmBC,8BAAAA;KACvE,sBAAA,cAACC,QAAQA,SAAO;IACdC,MAAMC,WAAWN;IACjBO,OAAO;IACPC,MAAM;MAAEZ;IAAQ;IAChBa,UAAUZ;;AAIlB;",
6
+ "names": ["React", "useCallback", "useMemo", "Surface", "AppSurface", "PublicKey", "composable", "Card", "useTranslation", "Thread", "hoverableControls", "hoverableFocusedWithinControls", "mx", "meta", "generateName", "hexToFallback", "toFallback", "hashString", "s", "h", "i", "length", "charCodeAt", "getMessageMetadata", "id", "identity", "fallbackSender", "fallback", "identityKey", "toHex", "name", "email", "authorId", "did", "authorName", "profile", "displayName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "Chat", "composable", "id", "identity", "members", "messages", "activity", "onSend", "autoFocus", "current", "readOnly", "forwardedRef", "t", "useTranslation", "meta", "components", "useMemo", "Object", "ObjectTile", "textboxMetadata", "getMessageMetadata", "getMetadata", "useCallback", "message", "sender", "find", "member", "identityDid", "did", "identityKey", "PublicKey", "equals", "Thread", "Root", "editable", "Content", "classNames", "ref", "Messages", "Textbox", "placeholder", "Status", "subject", "Fallback", "span", "className", "Card", "mx", "hoverableControls", "hoverableFocusedWithinControls", "Surface", "type", "AppSurface", "limit", "data", "fallback"]
7
+ }
@@ -0,0 +1,13 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/index.ts
4
+ import { lazy } from "react";
5
+ var ChannelCreatePanel = lazy(() => import("../ChannelCreatePanel-NUXXKHZQ.mjs"));
6
+ var ChannelArticle = lazy(() => import("../ChannelArticle-H633OM3U.mjs"));
7
+ var ThreadArticle = lazy(() => import("../ThreadArticle-ROQXQLEZ.mjs"));
8
+ export {
9
+ ChannelArticle,
10
+ ChannelCreatePanel,
11
+ ThreadArticle
12
+ };
13
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/containers/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const ChannelCreatePanel: ComponentType<any> = lazy(() => import('./ChannelCreatePanel'));\nexport const ChannelArticle: ComponentType<any> = lazy(() => import('./ChannelArticle'));\nexport const ThreadArticle: ComponentType<any> = lazy(() => import('./ThreadArticle'));\n"],
5
+ "mappings": ";;;AAIA,SAA6BA,YAAY;AAElC,IAAMC,qBAAyCD,KAAK,MAAM,OAAO,oCAAA,CAAA;AACjE,IAAME,iBAAqCF,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC7D,IAAMG,gBAAoCH,KAAK,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["lazy", "ChannelCreatePanel", "ChannelArticle", "ThreadArticle"]
7
+ }