@dxos/plugin-thread 0.8.4-main.e8ec1fe → 0.8.4-main.effb148878

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 (599) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs +28 -0
  4. package/dist/lib/neutral/ChannelArticle-UJHPOUWA.mjs.map +7 -0
  5. package/dist/lib/neutral/ChannelChat-LZEDFJVD.mjs +10 -0
  6. package/dist/lib/neutral/CommentsCompanion-3H3ZVIBH.mjs +208 -0
  7. package/dist/lib/neutral/CommentsCompanion-3H3ZVIBH.mjs.map +7 -0
  8. package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs +61 -0
  9. package/dist/lib/neutral/ThreadContainer-QWB6WRMI.mjs.map +7 -0
  10. package/dist/lib/neutral/ThreadPlugin.mjs +96 -0
  11. package/dist/lib/neutral/ThreadPlugin.mjs.map +7 -0
  12. package/dist/lib/neutral/ThreadPlugin.node.mjs +40 -0
  13. package/dist/lib/neutral/ThreadPlugin.node.mjs.map +7 -0
  14. package/dist/lib/neutral/ThreadPlugin.workerd.mjs +24 -0
  15. package/dist/lib/neutral/ThreadPlugin.workerd.mjs.map +7 -0
  16. package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs +15 -0
  17. package/dist/lib/neutral/ThreadSettings-5MKTDK3A.mjs.map +7 -0
  18. package/dist/lib/neutral/add-message-DATVSMVU.mjs +122 -0
  19. package/dist/lib/neutral/add-message-DATVSMVU.mjs.map +7 -0
  20. package/dist/lib/neutral/agent-runner-JK2Y4RU3.mjs +244 -0
  21. package/dist/lib/neutral/agent-runner-JK2Y4RU3.mjs.map +7 -0
  22. package/dist/lib/neutral/app-graph-builder-ACCHZXZA.mjs +120 -0
  23. package/dist/lib/neutral/app-graph-builder-ACCHZXZA.mjs.map +7 -0
  24. package/dist/lib/neutral/append-channel-message-4ACLATZY.mjs +40 -0
  25. package/dist/lib/neutral/append-channel-message-4ACLATZY.mjs.map +7 -0
  26. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs +15 -0
  27. package/dist/lib/neutral/blueprint-definition-S3EBOH4R.mjs.map +7 -0
  28. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  29. package/dist/lib/neutral/capabilities/index.mjs +27 -0
  30. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-5T5LPLBN.mjs +36 -0
  32. package/dist/lib/neutral/chunk-5T5LPLBN.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-6HC3NAXD.mjs +164 -0
  34. package/dist/lib/neutral/chunk-6HC3NAXD.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-BHEZLLXG.mjs +55 -0
  36. package/dist/lib/neutral/chunk-BHEZLLXG.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-D3SCNWLT.mjs +335 -0
  38. package/dist/lib/neutral/chunk-D3SCNWLT.mjs.map +7 -0
  39. package/dist/lib/{browser/chunk-CP7E2HRE.mjs → neutral/chunk-JLY4NVTA.mjs} +12 -5
  40. package/dist/lib/neutral/chunk-JLY4NVTA.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-QFDT33VT.mjs +69 -0
  42. package/dist/lib/neutral/chunk-QFDT33VT.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-TT6PWRR5.mjs +8 -0
  44. package/dist/lib/neutral/chunk-TT6PWRR5.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-WMP3QCOR.mjs +46 -0
  46. package/dist/lib/neutral/chunk-WMP3QCOR.mjs.map +7 -0
  47. package/dist/lib/neutral/components/index.mjs +541 -0
  48. package/dist/lib/neutral/components/index.mjs.map +7 -0
  49. package/dist/lib/neutral/containers/index.mjs +15 -0
  50. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  51. package/dist/lib/neutral/create-2NJDD73M.mjs +61 -0
  52. package/dist/lib/neutral/create-2NJDD73M.mjs.map +7 -0
  53. package/dist/lib/neutral/create-channel-RYSV44N3.mjs +19 -0
  54. package/dist/lib/neutral/create-channel-RYSV44N3.mjs.map +7 -0
  55. package/dist/lib/neutral/create-object-D5XEG7MQ.mjs +28 -0
  56. package/dist/lib/neutral/create-object-D5XEG7MQ.mjs.map +7 -0
  57. package/dist/lib/neutral/create-proposals-7UZYZ32V.mjs +56 -0
  58. package/dist/lib/neutral/create-proposals-7UZYZ32V.mjs.map +7 -0
  59. package/dist/lib/neutral/delete-JVGAPD46.mjs +57 -0
  60. package/dist/lib/neutral/delete-JVGAPD46.mjs.map +7 -0
  61. package/dist/lib/neutral/delete-message-5EGR3HWH.mjs +54 -0
  62. package/dist/lib/neutral/delete-message-5EGR3HWH.mjs.map +7 -0
  63. package/dist/lib/neutral/hooks/index.mjs +10 -0
  64. package/dist/lib/neutral/index.mjs +32 -0
  65. package/dist/lib/neutral/markdown-B6RNVR2H.mjs +83 -0
  66. package/dist/lib/neutral/markdown-B6RNVR2H.mjs.map +7 -0
  67. package/dist/lib/neutral/meta.json +1 -0
  68. package/dist/lib/neutral/meta.mjs +10 -0
  69. package/dist/lib/neutral/on-create-space-ZQF55KSO.mjs +23 -0
  70. package/dist/lib/neutral/on-create-space-ZQF55KSO.mjs.map +7 -0
  71. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs +13 -0
  72. package/dist/lib/neutral/operation-handler-RU6K2S4L.mjs.map +7 -0
  73. package/dist/lib/neutral/operations/index.mjs +8 -0
  74. package/dist/lib/neutral/plugin.mjs +16 -0
  75. package/dist/lib/neutral/plugin.mjs.map +7 -0
  76. package/dist/lib/neutral/react-surface-ZSIQHN5P.mjs +76 -0
  77. package/dist/lib/neutral/react-surface-ZSIQHN5P.mjs.map +7 -0
  78. package/dist/lib/neutral/respond-to-thread-LVLDZON3.mjs +32 -0
  79. package/dist/lib/neutral/respond-to-thread-LVLDZON3.mjs.map +7 -0
  80. package/dist/lib/neutral/restore-Z5PYV7I2.mjs +32 -0
  81. package/dist/lib/neutral/restore-Z5PYV7I2.mjs.map +7 -0
  82. package/dist/lib/neutral/restore-message-B263PLUH.mjs +33 -0
  83. package/dist/lib/neutral/restore-message-B263PLUH.mjs.map +7 -0
  84. package/dist/lib/neutral/select-GXDEAH5D.mjs +24 -0
  85. package/dist/lib/neutral/select-GXDEAH5D.mjs.map +7 -0
  86. package/dist/lib/neutral/set-agent-config-7HHS6KZZ.mjs +20 -0
  87. package/dist/lib/neutral/set-agent-config-7HHS6KZZ.mjs.map +7 -0
  88. package/dist/lib/neutral/settings-HK4EB6TF.mjs +30 -0
  89. package/dist/lib/neutral/settings-HK4EB6TF.mjs.map +7 -0
  90. package/dist/lib/neutral/state-UU7VEAKV.mjs +22 -0
  91. package/dist/lib/neutral/state-UU7VEAKV.mjs.map +7 -0
  92. package/dist/lib/neutral/testing/index.mjs +58 -0
  93. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  94. package/dist/lib/neutral/toggle-resolved-LBVNAVVF.mjs +36 -0
  95. package/dist/lib/neutral/toggle-resolved-LBVNAVVF.mjs.map +7 -0
  96. package/dist/lib/neutral/translations.mjs +91 -0
  97. package/dist/lib/neutral/translations.mjs.map +7 -0
  98. package/dist/lib/neutral/types/index.mjs +16 -0
  99. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs +54 -0
  100. package/dist/lib/neutral/undo-mappings-HOKL2L3M.mjs.map +7 -0
  101. package/dist/types/src/ThreadPlugin.d.ts +3 -1
  102. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  103. package/dist/types/src/ThreadPlugin.node.d.ts +4 -0
  104. package/dist/types/src/ThreadPlugin.node.d.ts.map +1 -0
  105. package/dist/types/src/ThreadPlugin.test.d.ts +2 -0
  106. package/dist/types/src/ThreadPlugin.test.d.ts.map +1 -0
  107. package/dist/types/src/ThreadPlugin.workerd.d.ts +4 -0
  108. package/dist/types/src/ThreadPlugin.workerd.d.ts.map +1 -0
  109. package/dist/types/src/blueprints/index.d.ts +2 -0
  110. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  111. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  112. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/agent-runner.d.ts +22 -0
  114. package/dist/types/src/capabilities/agent-runner.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  116. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  118. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  120. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/index.d.ts +16 -15
  122. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/markdown.d.ts +3 -2
  124. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  126. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  128. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  129. package/dist/types/src/capabilities/settings.d.ts +5 -2
  130. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  131. package/dist/types/src/capabilities/state.d.ts +5 -5
  132. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  133. package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
  134. package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
  135. package/dist/types/src/components/Chat/Chat.d.ts +51 -0
  136. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -0
  137. package/dist/types/src/components/Chat/index.d.ts +2 -0
  138. package/dist/types/src/components/Chat/index.d.ts.map +1 -0
  139. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +13 -0
  140. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
  141. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts +160 -0
  142. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
  143. package/dist/types/src/components/{CommentsThreadContainer.d.ts → CommentsPanel/CommentsThread.d.ts} +3 -3
  144. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
  145. package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
  146. package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
  147. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
  148. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  149. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  150. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  151. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts +6 -0
  152. package/dist/types/src/components/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  153. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts +161 -0
  154. package/dist/types/src/components/ThreadSettings/ThreadSettings.stories.d.ts.map +1 -0
  155. package/dist/types/src/components/ThreadSettings/index.d.ts +2 -0
  156. package/dist/types/src/components/ThreadSettings/index.d.ts.map +1 -0
  157. package/dist/types/src/components/index.d.ts +5 -10
  158. package/dist/types/src/components/index.d.ts.map +1 -1
  159. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +13 -0
  160. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -0
  161. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts +162 -0
  162. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -0
  163. package/dist/types/src/containers/ChannelArticle/index.d.ts +2 -0
  164. package/dist/types/src/containers/ChannelArticle/index.d.ts.map +1 -0
  165. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts +20 -0
  166. package/dist/types/src/containers/ChannelChat/ChannelChat.d.ts.map +1 -0
  167. package/dist/types/src/containers/ChannelChat/index.d.ts +4 -0
  168. package/dist/types/src/containers/ChannelChat/index.d.ts.map +1 -0
  169. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts +11 -0
  170. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.d.ts.map +1 -0
  171. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts +198 -0
  172. package/dist/types/src/containers/CommentsCompanion/CommentsCompanion.stories.d.ts.map +1 -0
  173. package/dist/types/src/containers/CommentsCompanion/index.d.ts +2 -0
  174. package/dist/types/src/containers/CommentsCompanion/index.d.ts.map +1 -0
  175. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts +20 -0
  176. package/dist/types/src/containers/ThreadContainer/ThreadContainer.d.ts.map +1 -0
  177. package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts +162 -0
  178. package/dist/types/src/containers/ThreadContainer/ThreadContainer.stories.d.ts.map +1 -0
  179. package/dist/types/src/containers/ThreadContainer/index.d.ts +4 -0
  180. package/dist/types/src/containers/ThreadContainer/index.d.ts.map +1 -0
  181. package/dist/types/src/containers/index.d.ts +6 -0
  182. package/dist/types/src/containers/index.d.ts.map +1 -0
  183. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  184. package/dist/types/src/extensions/command.d.ts.map +1 -0
  185. package/dist/types/src/extensions/index.d.ts +1 -0
  186. package/dist/types/src/extensions/index.d.ts.map +1 -1
  187. package/dist/types/src/extensions/threads.d.ts +9 -4
  188. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  189. package/dist/types/src/hooks/analytics.d.ts +1 -2
  190. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  191. package/dist/types/src/hooks/index.d.ts +0 -4
  192. package/dist/types/src/hooks/index.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  194. package/dist/types/src/index.d.ts +2 -3
  195. package/dist/types/src/index.d.ts.map +1 -1
  196. package/dist/types/src/meta.d.ts +2 -2
  197. package/dist/types/src/meta.d.ts.map +1 -1
  198. package/dist/types/src/operations/add-message.d.ts +5 -0
  199. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  200. package/dist/types/src/operations/append-channel-message.d.ts +5 -0
  201. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -0
  202. package/dist/types/src/operations/create-channel.d.ts +5 -0
  203. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  204. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  205. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  206. package/dist/types/src/operations/create.d.ts +5 -0
  207. package/dist/types/src/operations/create.d.ts.map +1 -0
  208. package/dist/types/src/operations/delete-message.d.ts +5 -0
  209. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  210. package/dist/types/src/operations/delete.d.ts +5 -0
  211. package/dist/types/src/operations/delete.d.ts.map +1 -0
  212. package/dist/types/src/operations/index.d.ts +3 -0
  213. package/dist/types/src/operations/index.d.ts.map +1 -0
  214. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  215. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  216. package/dist/types/src/operations/respond-to-thread.d.ts +5 -0
  217. package/dist/types/src/operations/respond-to-thread.d.ts.map +1 -0
  218. package/dist/types/src/operations/restore-message.d.ts +5 -0
  219. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  220. package/dist/types/src/operations/restore.d.ts +5 -0
  221. package/dist/types/src/operations/restore.d.ts.map +1 -0
  222. package/dist/types/src/operations/select.d.ts +5 -0
  223. package/dist/types/src/operations/select.d.ts.map +1 -0
  224. package/dist/types/src/operations/set-agent-config.d.ts +5 -0
  225. package/dist/types/src/operations/set-agent-config.d.ts.map +1 -0
  226. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  227. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  228. package/dist/types/src/plugin.d.ts +4 -0
  229. package/dist/types/src/plugin.d.ts.map +1 -0
  230. package/dist/types/src/should-trigger-agent.d.ts +22 -0
  231. package/dist/types/src/should-trigger-agent.d.ts.map +1 -0
  232. package/dist/types/src/should-trigger-agent.test.d.ts +2 -0
  233. package/dist/types/src/should-trigger-agent.test.d.ts.map +1 -0
  234. package/dist/types/src/{components/testing.d.ts → testing/data.d.ts} +1 -1
  235. package/dist/types/src/testing/data.d.ts.map +1 -0
  236. package/dist/types/src/testing/index.d.ts +1 -1
  237. package/dist/types/src/testing/index.d.ts.map +1 -1
  238. package/dist/types/src/translations.d.ts +140 -138
  239. package/dist/types/src/translations.d.ts.map +1 -1
  240. package/dist/types/src/types/AgentIdentity.d.ts +27 -0
  241. package/dist/types/src/types/AgentIdentity.d.ts.map +1 -0
  242. package/dist/types/src/types/Settings.d.ts +5 -0
  243. package/dist/types/src/types/Settings.d.ts.map +1 -0
  244. package/dist/types/src/types/ThreadCapabilities.d.ts +34 -0
  245. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -0
  246. package/dist/types/src/types/ThreadOperation.d.ts +2409 -0
  247. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -0
  248. package/dist/types/src/types/index.d.ts +4 -1
  249. package/dist/types/src/types/index.d.ts.map +1 -1
  250. package/dist/types/src/types/types.d.ts +0 -366
  251. package/dist/types/src/types/types.d.ts.map +1 -1
  252. package/dist/types/src/util.d.ts +6 -3
  253. package/dist/types/src/util.d.ts.map +1 -1
  254. package/dist/types/tsconfig.tsbuildinfo +1 -1
  255. package/package.json +156 -89
  256. package/src/ThreadPlugin.node.ts +39 -0
  257. package/src/ThreadPlugin.test.ts +37 -0
  258. package/src/ThreadPlugin.tsx +57 -131
  259. package/src/ThreadPlugin.workerd.ts +20 -0
  260. package/src/blueprints/index.ts +5 -0
  261. package/src/blueprints/thread-blueprint.ts +36 -0
  262. package/src/capabilities/agent-runner.ts +291 -0
  263. package/src/capabilities/app-graph-builder.ts +123 -174
  264. package/src/capabilities/blueprint-definition.ts +11 -30
  265. package/src/capabilities/create-object.ts +30 -0
  266. package/src/capabilities/index.ts +16 -12
  267. package/src/capabilities/markdown.ts +53 -38
  268. package/src/capabilities/operation-handler.ts +16 -0
  269. package/src/capabilities/react-surface.tsx +64 -80
  270. package/src/capabilities/settings.ts +26 -12
  271. package/src/capabilities/state.ts +14 -18
  272. package/src/capabilities/undo-mappings.ts +46 -0
  273. package/src/components/Chat/Chat.tsx +259 -0
  274. package/src/components/Chat/index.ts +5 -0
  275. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +94 -0
  276. package/src/components/{CommentsContainer.tsx → CommentsPanel/CommentsPanel.tsx} +16 -15
  277. package/src/components/{CommentsThreadContainer.tsx → CommentsPanel/CommentsThread.tsx} +42 -39
  278. package/src/components/CommentsPanel/index.ts +6 -0
  279. package/src/components/{MessageContainer.tsx → MessagePanel/MessagePanel.tsx} +81 -45
  280. package/src/components/MessagePanel/index.ts +5 -0
  281. package/src/components/ThreadSettings/ThreadSettings.stories.tsx +32 -0
  282. package/src/components/ThreadSettings/ThreadSettings.tsx +19 -0
  283. package/src/components/ThreadSettings/index.ts +5 -0
  284. package/src/components/index.ts +5 -12
  285. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +105 -0
  286. package/src/containers/ChannelArticle/ChannelArticle.tsx +42 -0
  287. package/src/containers/ChannelArticle/index.ts +5 -0
  288. package/src/containers/ChannelChat/ChannelChat.tsx +75 -0
  289. package/src/containers/ChannelChat/index.ts +8 -0
  290. package/src/containers/CommentsCompanion/CommentsCompanion.stories.tsx +339 -0
  291. package/src/containers/CommentsCompanion/CommentsCompanion.tsx +216 -0
  292. package/src/containers/CommentsCompanion/index.ts +5 -0
  293. package/src/{components/Chat.stories.tsx → containers/ThreadContainer/ThreadContainer.stories.tsx} +26 -25
  294. package/src/containers/ThreadContainer/ThreadContainer.tsx +75 -0
  295. package/src/containers/ThreadContainer/index.ts +8 -0
  296. package/src/containers/index.ts +10 -0
  297. package/src/{components/command-extension.ts → extensions/command.ts} +3 -3
  298. package/src/extensions/index.ts +1 -0
  299. package/src/extensions/threads.ts +80 -44
  300. package/src/hooks/analytics.ts +24 -20
  301. package/src/hooks/index.ts +0 -5
  302. package/src/index.ts +4 -4
  303. package/src/meta.ts +33 -8
  304. package/src/operations/add-message.ts +94 -0
  305. package/src/operations/append-channel-message.ts +37 -0
  306. package/src/operations/create-channel.ts +20 -0
  307. package/src/operations/create-proposals.ts +49 -0
  308. package/src/operations/create.ts +63 -0
  309. package/src/operations/delete-message.ts +53 -0
  310. package/src/operations/delete.ts +63 -0
  311. package/src/operations/index.ts +22 -0
  312. package/src/operations/on-create-space.ts +27 -0
  313. package/src/operations/respond-to-thread.ts +32 -0
  314. package/src/operations/restore-message.ts +38 -0
  315. package/src/operations/restore.ts +38 -0
  316. package/src/operations/select.ts +24 -0
  317. package/src/operations/set-agent-config.ts +24 -0
  318. package/src/operations/toggle-resolved.ts +41 -0
  319. package/src/plugin.ts +11 -0
  320. package/src/should-trigger-agent.test.ts +72 -0
  321. package/src/should-trigger-agent.ts +50 -0
  322. package/src/{components/testing.ts → testing/data.ts} +7 -7
  323. package/src/testing/index.ts +1 -1
  324. package/src/translations.ts +73 -74
  325. package/src/types/AgentIdentity.ts +35 -0
  326. package/src/types/Settings.ts +10 -0
  327. package/src/types/ThreadCapabilities.ts +46 -0
  328. package/src/types/ThreadOperation.ts +217 -0
  329. package/src/types/index.ts +5 -1
  330. package/src/types/types.ts +2 -98
  331. package/src/util.ts +37 -5
  332. package/dist/lib/browser/ChannelContainer-NDIH62Q4.mjs +0 -17
  333. package/dist/lib/browser/ChatContainer-6FVFME3R.mjs +0 -16
  334. package/dist/lib/browser/app-graph-builder-URVQHGMR.mjs +0 -171
  335. package/dist/lib/browser/app-graph-builder-URVQHGMR.mjs.map +0 -7
  336. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +0 -101
  337. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +0 -7
  338. package/dist/lib/browser/call-manager-4YFT4XA6.mjs +0 -25
  339. package/dist/lib/browser/call-manager-4YFT4XA6.mjs.map +0 -7
  340. package/dist/lib/browser/chunk-6LWKNZUV.mjs +0 -377
  341. package/dist/lib/browser/chunk-6LWKNZUV.mjs.map +0 -7
  342. package/dist/lib/browser/chunk-CFC7LEPD.mjs +0 -18
  343. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +0 -7
  344. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +0 -7
  345. package/dist/lib/browser/chunk-F36NHPJG.mjs +0 -989
  346. package/dist/lib/browser/chunk-F36NHPJG.mjs.map +0 -7
  347. package/dist/lib/browser/chunk-HKI7FUMB.mjs +0 -611
  348. package/dist/lib/browser/chunk-HKI7FUMB.mjs.map +0 -7
  349. package/dist/lib/browser/chunk-ISCHODBV.mjs +0 -106
  350. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +0 -7
  351. package/dist/lib/browser/chunk-JDFDDUTH.mjs +0 -23
  352. package/dist/lib/browser/chunk-JDFDDUTH.mjs.map +0 -7
  353. package/dist/lib/browser/chunk-KOBXMDCI.mjs +0 -182
  354. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +0 -7
  355. package/dist/lib/browser/chunk-QM34EZQK.mjs +0 -20
  356. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +0 -7
  357. package/dist/lib/browser/chunk-R5UOPOO7.mjs +0 -142
  358. package/dist/lib/browser/chunk-R5UOPOO7.mjs.map +0 -7
  359. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs +0 -1793
  360. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +0 -7
  361. package/dist/lib/browser/index.mjs +0 -312
  362. package/dist/lib/browser/index.mjs.map +0 -7
  363. package/dist/lib/browser/intent-resolver-S3F7DVFM.mjs +0 -361
  364. package/dist/lib/browser/intent-resolver-S3F7DVFM.mjs.map +0 -7
  365. package/dist/lib/browser/markdown-454GFKEZ.mjs +0 -171
  366. package/dist/lib/browser/markdown-454GFKEZ.mjs.map +0 -7
  367. package/dist/lib/browser/meta.json +0 -1
  368. package/dist/lib/browser/react-root-ZB5ZA4I6.mjs +0 -29
  369. package/dist/lib/browser/react-root-ZB5ZA4I6.mjs.map +0 -7
  370. package/dist/lib/browser/react-surface-MBLTXSOC.mjs +0 -111
  371. package/dist/lib/browser/react-surface-MBLTXSOC.mjs.map +0 -7
  372. package/dist/lib/browser/settings-JN2HHORY.mjs +0 -23
  373. package/dist/lib/browser/settings-JN2HHORY.mjs.map +0 -7
  374. package/dist/lib/browser/state-UYPLBGZJ.mjs +0 -35
  375. package/dist/lib/browser/state-UYPLBGZJ.mjs.map +0 -7
  376. package/dist/lib/browser/types/index.mjs +0 -13
  377. package/dist/lib/node-esm/ChannelContainer-NGSDMNEE.mjs +0 -18
  378. package/dist/lib/node-esm/ChatContainer-KWNON7EN.mjs +0 -17
  379. package/dist/lib/node-esm/app-graph-builder-2IH5RPR7.mjs +0 -172
  380. package/dist/lib/node-esm/app-graph-builder-2IH5RPR7.mjs.map +0 -7
  381. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +0 -102
  382. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +0 -7
  383. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs +0 -26
  384. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs.map +0 -7
  385. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs +0 -22
  386. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +0 -7
  387. package/dist/lib/node-esm/chunk-3VRYXHKX.mjs +0 -25
  388. package/dist/lib/node-esm/chunk-3VRYXHKX.mjs.map +0 -7
  389. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs +0 -1794
  390. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +0 -7
  391. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs +0 -33
  392. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +0 -7
  393. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  394. package/dist/lib/node-esm/chunk-MEIWWPR2.mjs +0 -143
  395. package/dist/lib/node-esm/chunk-MEIWWPR2.mjs.map +0 -7
  396. package/dist/lib/node-esm/chunk-MM6HOX5W.mjs +0 -612
  397. package/dist/lib/node-esm/chunk-MM6HOX5W.mjs.map +0 -7
  398. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs +0 -183
  399. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +0 -7
  400. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +0 -19
  401. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +0 -7
  402. package/dist/lib/node-esm/chunk-VBI32FGI.mjs +0 -108
  403. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +0 -7
  404. package/dist/lib/node-esm/chunk-Y3F2SGNH.mjs +0 -990
  405. package/dist/lib/node-esm/chunk-Y3F2SGNH.mjs.map +0 -7
  406. package/dist/lib/node-esm/chunk-Z4GUSLWL.mjs +0 -378
  407. package/dist/lib/node-esm/chunk-Z4GUSLWL.mjs.map +0 -7
  408. package/dist/lib/node-esm/index.mjs +0 -313
  409. package/dist/lib/node-esm/index.mjs.map +0 -7
  410. package/dist/lib/node-esm/intent-resolver-UES35EMJ.mjs +0 -362
  411. package/dist/lib/node-esm/intent-resolver-UES35EMJ.mjs.map +0 -7
  412. package/dist/lib/node-esm/markdown-7JUG6J7B.mjs +0 -172
  413. package/dist/lib/node-esm/markdown-7JUG6J7B.mjs.map +0 -7
  414. package/dist/lib/node-esm/meta.json +0 -1
  415. package/dist/lib/node-esm/react-root-3XXULWUN.mjs +0 -30
  416. package/dist/lib/node-esm/react-root-3XXULWUN.mjs.map +0 -7
  417. package/dist/lib/node-esm/react-surface-DCF4DD7B.mjs +0 -112
  418. package/dist/lib/node-esm/react-surface-DCF4DD7B.mjs.map +0 -7
  419. package/dist/lib/node-esm/settings-VSPM3BIM.mjs +0 -24
  420. package/dist/lib/node-esm/settings-VSPM3BIM.mjs.map +0 -7
  421. package/dist/lib/node-esm/state-XNWOLBNE.mjs +0 -36
  422. package/dist/lib/node-esm/state-XNWOLBNE.mjs.map +0 -7
  423. package/dist/lib/node-esm/types/index.mjs +0 -14
  424. package/dist/types/src/calls/call-manager.d.ts +0 -77
  425. package/dist/types/src/calls/call-manager.d.ts.map +0 -1
  426. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +0 -66
  427. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +0 -1
  428. package/dist/types/src/calls/index.d.ts +0 -7
  429. package/dist/types/src/calls/index.d.ts.map +0 -1
  430. package/dist/types/src/calls/media-manager.d.ts +0 -60
  431. package/dist/types/src/calls/media-manager.d.ts.map +0 -1
  432. package/dist/types/src/calls/speaking-monitor.d.ts +0 -24
  433. package/dist/types/src/calls/speaking-monitor.d.ts.map +0 -1
  434. package/dist/types/src/calls/types.d.ts +0 -45
  435. package/dist/types/src/calls/types.d.ts.map +0 -1
  436. package/dist/types/src/calls/util/audio.d.ts +0 -6
  437. package/dist/types/src/calls/util/audio.d.ts.map +0 -1
  438. package/dist/types/src/calls/util/calls-service.d.ts +0 -77
  439. package/dist/types/src/calls/util/calls-service.d.ts.map +0 -1
  440. package/dist/types/src/calls/util/history-cache.d.ts +0 -11
  441. package/dist/types/src/calls/util/history-cache.d.ts.map +0 -1
  442. package/dist/types/src/calls/util/index.d.ts +0 -5
  443. package/dist/types/src/calls/util/index.d.ts.map +0 -1
  444. package/dist/types/src/calls/util/media.d.ts +0 -6
  445. package/dist/types/src/calls/util/media.d.ts.map +0 -1
  446. package/dist/types/src/calls/util/stub-media-streams.d.ts +0 -18
  447. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +0 -1
  448. package/dist/types/src/calls/util/task-scheduling.d.ts +0 -17
  449. package/dist/types/src/calls/util/task-scheduling.d.ts.map +0 -1
  450. package/dist/types/src/calls-service.stories.d.ts +0 -23
  451. package/dist/types/src/calls-service.stories.d.ts.map +0 -1
  452. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  453. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  454. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  455. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  456. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  457. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  458. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  459. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  460. package/dist/types/src/components/Call/Call.d.ts +0 -17
  461. package/dist/types/src/components/Call/Call.d.ts.map +0 -1
  462. package/dist/types/src/components/Call/Toolbar.d.ts +0 -16
  463. package/dist/types/src/components/Call/Toolbar.d.ts.map +0 -1
  464. package/dist/types/src/components/Call/index.d.ts +0 -3
  465. package/dist/types/src/components/Call/index.d.ts.map +0 -1
  466. package/dist/types/src/components/CallDebugPanel.d.ts +0 -15
  467. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  468. package/dist/types/src/components/CallSidebar.d.ts +0 -4
  469. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  470. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  471. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  472. package/dist/types/src/components/ChannelContainer.stories.d.ts +0 -160
  473. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  474. package/dist/types/src/components/Chat.stories.d.ts +0 -160
  475. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  476. package/dist/types/src/components/ChatContainer.d.ts +0 -18
  477. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  478. package/dist/types/src/components/Comments.stories.d.ts +0 -158
  479. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  480. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  481. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  482. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +0 -1
  483. package/dist/types/src/components/Lobby/Lobby.d.ts +0 -15
  484. package/dist/types/src/components/Lobby/Lobby.d.ts.map +0 -1
  485. package/dist/types/src/components/Lobby/index.d.ts +0 -2
  486. package/dist/types/src/components/Lobby/index.d.ts.map +0 -1
  487. package/dist/types/src/components/Media/AudioStream.d.ts +0 -6
  488. package/dist/types/src/components/Media/AudioStream.d.ts.map +0 -1
  489. package/dist/types/src/components/Media/VideoObject.d.ts +0 -15
  490. package/dist/types/src/components/Media/VideoObject.d.ts.map +0 -1
  491. package/dist/types/src/components/Media/VideoObject.stories.d.ts +0 -22
  492. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +0 -1
  493. package/dist/types/src/components/Media/index.d.ts +0 -3
  494. package/dist/types/src/components/Media/index.d.ts.map +0 -1
  495. package/dist/types/src/components/MessageContainer.d.ts +0 -14
  496. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  497. package/dist/types/src/components/Participant/Participant.d.ts +0 -6
  498. package/dist/types/src/components/Participant/Participant.d.ts.map +0 -1
  499. package/dist/types/src/components/Participant/ParticipantGrid.d.ts +0 -11
  500. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +0 -1
  501. package/dist/types/src/components/Participant/index.d.ts +0 -3
  502. package/dist/types/src/components/Participant/index.d.ts.map +0 -1
  503. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts +0 -12
  504. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  505. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +0 -162
  506. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  507. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts +0 -32
  508. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.d.ts.map +0 -1
  509. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +0 -176
  510. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +0 -1
  511. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts +0 -21
  512. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +0 -1
  513. package/dist/types/src/components/ResponsiveGrid/index.d.ts +0 -4
  514. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +0 -1
  515. package/dist/types/src/components/ThreadCompanion.d.ts +0 -5
  516. package/dist/types/src/components/ThreadCompanion.d.ts.map +0 -1
  517. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  518. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  519. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  520. package/dist/types/src/components/testing.d.ts.map +0 -1
  521. package/dist/types/src/functions/create-proposals.d.ts +0 -6
  522. package/dist/types/src/functions/create-proposals.d.ts.map +0 -1
  523. package/dist/types/src/functions/index.d.ts +0 -2
  524. package/dist/types/src/functions/index.d.ts.map +0 -1
  525. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts +0 -2
  526. package/dist/types/src/hooks/useBlackCanvasStreamTrack.d.ts.map +0 -1
  527. package/dist/types/src/hooks/useDebugMode.d.ts +0 -2
  528. package/dist/types/src/hooks/useDebugMode.d.ts.map +0 -1
  529. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts +0 -2
  530. package/dist/types/src/hooks/useInaudibleAudioStreamTrack.d.ts.map +0 -1
  531. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +0 -3
  532. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +0 -1
  533. package/dist/types/src/testing/stories.d.ts +0 -2
  534. package/dist/types/src/testing/stories.d.ts.map +0 -1
  535. package/dist/types/src/types/Channel.d.ts +0 -16
  536. package/dist/types/src/types/Channel.d.ts.map +0 -1
  537. package/src/calls/call-manager.ts +0 -246
  538. package/src/calls/call-swarm-synchronizer.ts +0 -350
  539. package/src/calls/index.ts +0 -10
  540. package/src/calls/media-manager.ts +0 -378
  541. package/src/calls/speaking-monitor.ts +0 -85
  542. package/src/calls/types.ts +0 -74
  543. package/src/calls/util/audio.ts +0 -58
  544. package/src/calls/util/calls-service.ts +0 -581
  545. package/src/calls/util/history-cache.ts +0 -27
  546. package/src/calls/util/index.ts +0 -8
  547. package/src/calls/util/media.ts +0 -52
  548. package/src/calls/util/stub-media-streams.ts +0 -127
  549. package/src/calls/util/task-scheduling.ts +0 -92
  550. package/src/calls-service.stories.tsx +0 -229
  551. package/src/capabilities/call-manager.ts +0 -20
  552. package/src/capabilities/capabilities.ts +0 -33
  553. package/src/capabilities/intent-resolver.ts +0 -311
  554. package/src/capabilities/react-root.tsx +0 -17
  555. package/src/components/Call/Call.tsx +0 -89
  556. package/src/components/Call/Toolbar.tsx +0 -182
  557. package/src/components/Call/index.ts +0 -6
  558. package/src/components/CallDebugPanel.tsx +0 -172
  559. package/src/components/CallSidebar.tsx +0 -18
  560. package/src/components/ChannelContainer.stories.tsx +0 -59
  561. package/src/components/ChannelContainer.tsx +0 -205
  562. package/src/components/ChatContainer.tsx +0 -153
  563. package/src/components/Comments.stories.tsx +0 -90
  564. package/src/components/Lobby/Lobby.tsx +0 -119
  565. package/src/components/Lobby/index.ts +0 -5
  566. package/src/components/Media/AudioStream.tsx +0 -67
  567. package/src/components/Media/VideoObject.stories.tsx +0 -60
  568. package/src/components/Media/VideoObject.tsx +0 -58
  569. package/src/components/Media/index.ts +0 -6
  570. package/src/components/Participant/Participant.tsx +0 -63
  571. package/src/components/Participant/ParticipantGrid.tsx +0 -89
  572. package/src/components/Participant/index.ts +0 -6
  573. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +0 -54
  574. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +0 -31
  575. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +0 -158
  576. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +0 -341
  577. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +0 -134
  578. package/src/components/ResponsiveGrid/index.ts +0 -7
  579. package/src/components/ThreadCompanion.tsx +0 -188
  580. package/src/components/ThreadSettings.tsx +0 -16
  581. package/src/functions/create-proposals.ts +0 -56
  582. package/src/functions/index.ts +0 -5
  583. package/src/hooks/useBlackCanvasStreamTrack.tsx +0 -27
  584. package/src/hooks/useDebugMode.ts +0 -25
  585. package/src/hooks/useInaudibleAudioStreamTrack.tsx +0 -27
  586. package/src/hooks/useVideoStreamTrack.tsx +0 -36
  587. package/src/testing/stories.ts +0 -51
  588. package/src/types/Channel.ts +0 -26
  589. package/src/typings/peermetrics-webrtc-stats.d.ts +0 -46
  590. package/src/typings.d.ts +0 -8
  591. /package/dist/lib/{browser/ChannelContainer-NDIH62Q4.mjs.map → neutral/ChannelChat-LZEDFJVD.mjs.map} +0 -0
  592. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  593. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  594. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs.map +0 -0
  595. /package/dist/lib/{node-esm/types → neutral/hooks}/index.mjs.map +0 -0
  596. /package/dist/lib/{browser/ChatContainer-6FVFME3R.mjs.map → neutral/index.mjs.map} +0 -0
  597. /package/dist/lib/{node-esm/ChannelContainer-NGSDMNEE.mjs.map → neutral/meta.mjs.map} +0 -0
  598. /package/dist/lib/{node-esm/ChatContainer-KWNON7EN.mjs.map → neutral/operations/index.mjs.map} +0 -0
  599. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/types/index.mjs.map} +0 -0
@@ -0,0 +1,541 @@
1
+ import {
2
+ getMessageMetadata
3
+ } from "../chunk-JLY4NVTA.mjs";
4
+ import {
5
+ command
6
+ } from "../chunk-6HC3NAXD.mjs";
7
+ import "../chunk-J5LGTIGS.mjs";
8
+
9
+ // src/components/index.ts
10
+ import { lazy } from "react";
11
+
12
+ // src/components/Chat/Chat.tsx
13
+ import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
14
+ import { ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
15
+ import { composable, composableProps } from "@dxos/react-ui";
16
+ import { MessageTextbox, Thread as ThreadComponent, threadLayout } from "@dxos/react-ui-thread";
17
+ import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/ui-editor";
18
+ import { mx as mx2 } from "@dxos/ui-theme";
19
+ import { isNonNullable } from "@dxos/util";
20
+ import { meta as meta2 } from "#meta";
21
+
22
+ // src/components/MessagePanel/MessagePanel.tsx
23
+ import { EditorView } from "@codemirror/view";
24
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
25
+ import { Surface } from "@dxos/app-framework/ui";
26
+ import { AppSurface } from "@dxos/app-toolkit/ui";
27
+ import { Ref } from "@dxos/echo";
28
+ import { useObject } from "@dxos/echo-react";
29
+ import { PublicKey } from "@dxos/react-client";
30
+ import { useIdentity } from "@dxos/react-client/halo";
31
+ import { IconButton, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
32
+ import { Card } from "@dxos/react-ui";
33
+ import { useTextEditor } from "@dxos/react-ui-editor";
34
+ import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
35
+ import { createBasicExtensions, createThemeExtensions } from "@dxos/ui-editor";
36
+ import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/ui-theme";
37
+ import { useOnEditAnalytics } from "#hooks";
38
+ import { meta } from "#meta";
39
+ var buttonGroupClassNames = "flex flex-row items-center gap-0.5 pe-2";
40
+ var buttonClassNames = "p-1! transition-opacity";
41
+ var MessagePanel = ({ message: messageOrRef, members, editable = false, onDelete, onAcceptProposal }) => {
42
+ const { t } = useTranslation(meta.id);
43
+ const [message, updateMessage] = useObject(messageOrRef);
44
+ const identity = useIdentity();
45
+ const [editing, setEditing] = useState(false);
46
+ const textBlockIndex = message?.blocks.findIndex((block) => block._tag === "text") ?? -1;
47
+ const handleEdit = useCallback(() => setEditing((editing2) => !editing2), []);
48
+ const handleDelete = useCallback(() => message && onDelete?.(message.id), [
49
+ message,
50
+ onDelete
51
+ ]);
52
+ const handleAcceptProposal = useCallback(() => message && onAcceptProposal?.(message.id), [
53
+ message,
54
+ onAcceptProposal
55
+ ]);
56
+ const handleTextBlockChange = useCallback((newText) => {
57
+ updateMessage((m) => {
58
+ const targetBlock = m.blocks[textBlockIndex];
59
+ if (targetBlock && targetBlock._tag === "text") {
60
+ targetBlock.text = newText;
61
+ }
62
+ });
63
+ }, [
64
+ updateMessage,
65
+ textBlockIndex
66
+ ]);
67
+ const textBlock = message && textBlockIndex !== -1 ? message.blocks[textBlockIndex] : void 0;
68
+ useOnEditAnalytics(message, textBlock, !!editing);
69
+ if (!message) {
70
+ return null;
71
+ }
72
+ const senderIdentity = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
73
+ const messageMetadata = getMessageMetadata(message.id, senderIdentity, message.sender);
74
+ const userIsAuthor = identity?.did === messageMetadata.authorId;
75
+ const proposalBlock = message.blocks.find((block) => block._tag === "proposal");
76
+ const references = message.blocks.filter((block) => block._tag === "reference").map((block) => block.reference);
77
+ return /* @__PURE__ */ React.createElement(MessageRoot, {
78
+ ...messageMetadata,
79
+ classNames: [
80
+ hoverableControls,
81
+ hoverableFocusedWithinControls
82
+ ]
83
+ }, /* @__PURE__ */ React.createElement(MessageHeading, {
84
+ authorName: messageMetadata.authorName,
85
+ timestamp: messageMetadata.timestamp
86
+ }, /* @__PURE__ */ React.createElement("div", {
87
+ className: buttonGroupClassNames
88
+ }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(IconButton, {
89
+ "data-testid": editing ? "thread.message.save" : "thread.message.edit",
90
+ variant: "ghost",
91
+ icon: editing ? "ph--check--regular" : "ph--pencil-simple--regular",
92
+ iconOnly: true,
93
+ label: t(editing ? "save-message.label" : "edit-message.label"),
94
+ classNames: [
95
+ buttonClassNames,
96
+ hoverableControlItem
97
+ ],
98
+ onClick: handleEdit
99
+ }), proposalBlock && onAcceptProposal && /* @__PURE__ */ React.createElement(IconButton, {
100
+ "data-testid": "thread.message.accept",
101
+ variant: "ghost",
102
+ icon: "ph--check--regular",
103
+ iconOnly: true,
104
+ label: t("accept-proposal.label"),
105
+ classNames: [
106
+ buttonClassNames,
107
+ hoverableControlItem
108
+ ],
109
+ onClick: handleAcceptProposal
110
+ }), onDelete && /* @__PURE__ */ React.createElement(IconButton, {
111
+ "data-testid": "thread.message.delete",
112
+ variant: "ghost",
113
+ icon: "ph--x--regular",
114
+ iconOnly: true,
115
+ label: t("delete-message.label"),
116
+ classNames: [
117
+ buttonClassNames,
118
+ hoverableControlItem
119
+ ],
120
+ onClick: handleDelete
121
+ }))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
122
+ block: textBlock,
123
+ isAuthor: userIsAuthor,
124
+ editing,
125
+ onSave: handleTextBlockChange
126
+ }), proposalBlock && /* @__PURE__ */ React.createElement(ProposalBlock, {
127
+ block: proposalBlock
128
+ }), Ref.Array.targets(references).map((reference, index) => /* @__PURE__ */ React.createElement(MessagePart, {
129
+ key: index,
130
+ part: reference
131
+ })));
132
+ };
133
+ var MessagePart = ({ part }) => {
134
+ return /* @__PURE__ */ React.createElement(MessageBlockObjectTile, {
135
+ subject: part
136
+ });
137
+ };
138
+ var TextboxBlock = ({ block, isAuthor, editing, onSave }) => {
139
+ const { themeMode } = useThemeContext();
140
+ const inMemoryContentRef = useRef(block.text);
141
+ const handleDocumentChange = useCallback((newState) => {
142
+ inMemoryContentRef.current = newState;
143
+ }, []);
144
+ const saveDocumentChange = useCallback(() => {
145
+ onSave?.(inMemoryContentRef.current);
146
+ }, [
147
+ onSave
148
+ ]);
149
+ useOnTransition(editing, true, false, saveDocumentChange);
150
+ const { parentRef, focusAttributes, view } = useTextEditor(() => ({
151
+ initialValue: block.text,
152
+ extensions: [
153
+ createBasicExtensions({
154
+ readOnly: !isAuthor || !editing
155
+ }),
156
+ createThemeExtensions({
157
+ themeMode
158
+ }),
159
+ command,
160
+ EditorView.updateListener.of((update) => {
161
+ if (update.docChanged) {
162
+ handleDocumentChange(update.state.doc.toString());
163
+ }
164
+ })
165
+ ]
166
+ }), [
167
+ block.text,
168
+ editing,
169
+ isAuthor,
170
+ themeMode,
171
+ handleDocumentChange
172
+ ]);
173
+ useEffect(() => {
174
+ editing && view?.focus();
175
+ }, [
176
+ editing,
177
+ view
178
+ ]);
179
+ return /* @__PURE__ */ React.createElement("div", {
180
+ ref: parentRef,
181
+ className: "me-4",
182
+ ...focusAttributes
183
+ });
184
+ };
185
+ var ProposalBlock = ({ block }) => {
186
+ return /* @__PURE__ */ React.createElement("div", {
187
+ className: "me-4 italic"
188
+ }, block.text);
189
+ };
190
+ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedRef) => {
191
+ let title = subject.name ?? subject.title ?? subject.type ?? "Object";
192
+ if (typeof title !== "string") {
193
+ title = title?.content ?? "";
194
+ }
195
+ return /* @__PURE__ */ React.createElement(Card.Root, {
196
+ className: mx("grid col-span-3 py-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
197
+ ref: forwardedRef
198
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
199
+ type: AppSurface.Card,
200
+ limit: 1,
201
+ data: {
202
+ subject
203
+ },
204
+ fallback: title
205
+ }));
206
+ });
207
+
208
+ // src/components/Chat/Chat.tsx
209
+ var Chat = composable(({ id, identity, members, messages, activity, onSend, autoFocusTextbox, current, orientation = "top", readOnly, ...props }, forwardedRef) => {
210
+ const { t } = useTranslation2(meta2.id);
211
+ const { themeMode } = useThemeContext2();
212
+ const scrollRef = useRef2(null);
213
+ const sentinelRef = useRef2(null);
214
+ const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
215
+ const [_count, _setCount] = useState2(0);
216
+ const textboxMetadata = getMessageMetadata(id, identity);
217
+ const messageRef = useRef2("");
218
+ const extensions = useMemo(() => [
219
+ createBasicExtensions2({
220
+ placeholder: t("message.placeholder")
221
+ }),
222
+ createThemeExtensions2({
223
+ themeMode
224
+ }),
225
+ listener({
226
+ onChange: ({ text }) => messageRef.current = text
227
+ }),
228
+ command
229
+ ], [
230
+ themeMode,
231
+ _count
232
+ ]);
233
+ const scrollToEnd = (behavior) => setTimeout(() => sentinelRef.current?.scrollIntoView({
234
+ behavior,
235
+ block: "end"
236
+ }), 10);
237
+ useLayoutEffect(() => {
238
+ scrollToEnd("instant");
239
+ }, []);
240
+ const handleSend = () => {
241
+ const text = messageRef.current;
242
+ if (!text?.length) {
243
+ return false;
244
+ }
245
+ const accepted = onSend(text);
246
+ if (!accepted) {
247
+ return false;
248
+ }
249
+ messageRef.current = "";
250
+ setAutoFocus(true);
251
+ scrollToEnd("smooth");
252
+ _setCount((count) => count + 1);
253
+ return true;
254
+ };
255
+ const filteredMessages = messages.filter(isNonNullable);
256
+ const renderState = {
257
+ messages: filteredMessages,
258
+ members,
259
+ activity,
260
+ extensions,
261
+ autoFocus,
262
+ handleSend,
263
+ textboxMetadata,
264
+ scrollRef,
265
+ sentinelRef,
266
+ readOnly
267
+ };
268
+ return orientation === "bottom" ? /* @__PURE__ */ React2.createElement(ChannelLayout, {
269
+ ...composableProps(props, {
270
+ classNames: "flex flex-col h-full min-h-0"
271
+ }),
272
+ id,
273
+ ref: forwardedRef,
274
+ state: renderState
275
+ }) : /* @__PURE__ */ React2.createElement(ThreadLayout, {
276
+ ...composableProps(props, {
277
+ classNames: "dx-container grid-rows-[1fr_min-content_min-content]"
278
+ }),
279
+ id,
280
+ current,
281
+ ref: forwardedRef,
282
+ state: renderState
283
+ });
284
+ });
285
+ var ThreadLayout = /* @__PURE__ */ React2.forwardRef(({ id, current, state, ...props }, ref) => {
286
+ const { t } = useTranslation2(meta2.id);
287
+ const { messages, members, activity, extensions, autoFocus, handleSend, textboxMetadata, sentinelRef, readOnly } = state;
288
+ return /* @__PURE__ */ React2.createElement(ThreadComponent.Root, {
289
+ ...props,
290
+ id,
291
+ current,
292
+ ref
293
+ }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
294
+ classNames: "col-span-2",
295
+ orientation: "vertical"
296
+ }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, {
297
+ ref: sentinelRef
298
+ }, /* @__PURE__ */ React2.createElement("div", {
299
+ className: mx2(threadLayout, "place-self-end")
300
+ }, messages.map((message) => /* @__PURE__ */ React2.createElement(MessagePanel, {
301
+ key: message.id,
302
+ message,
303
+ members
304
+ }))))), !readOnly && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(MessageTextbox, {
305
+ extensions,
306
+ autoFocus,
307
+ onSend: handleSend,
308
+ ...textboxMetadata
309
+ }), /* @__PURE__ */ React2.createElement(ThreadComponent.Status, {
310
+ activity
311
+ }, t("activity.message"))));
312
+ });
313
+ var ChannelLayout = /* @__PURE__ */ React2.forwardRef(({ id, state, ...props }, ref) => {
314
+ const { t } = useTranslation2(meta2.id);
315
+ const { messages, members, activity, extensions, autoFocus, handleSend, textboxMetadata, scrollRef, sentinelRef, readOnly } = state;
316
+ return /* @__PURE__ */ React2.createElement("div", {
317
+ ...props,
318
+ id,
319
+ ref
320
+ }, /* @__PURE__ */ React2.createElement("div", {
321
+ ref: scrollRef,
322
+ className: "flex-1 min-h-0 overflow-y-auto"
323
+ }, messages.map((message) => /* @__PURE__ */ React2.createElement("div", {
324
+ key: message.id,
325
+ className: "grid grid-cols-[var(--dx-rail-size)_1fr] w-full"
326
+ }, /* @__PURE__ */ React2.createElement(MessagePanel, {
327
+ message,
328
+ members
329
+ }))), /* @__PURE__ */ React2.createElement("div", {
330
+ ref: sentinelRef
331
+ })), !readOnly && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("div", {
332
+ className: "shrink-0 grid grid-cols-[var(--dx-rail-size)_1fr]"
333
+ }, /* @__PURE__ */ React2.createElement(MessageTextbox, {
334
+ extensions,
335
+ autoFocus,
336
+ onSend: handleSend,
337
+ ...textboxMetadata
338
+ })), /* @__PURE__ */ React2.createElement("div", {
339
+ className: "shrink-0 px-2 pb-1 text-xs text-description"
340
+ }, activity ? t("activity.message") : null)));
341
+ });
342
+
343
+ // src/components/CommentsPanel/CommentsPanel.tsx
344
+ import React4, { useEffect as useEffect2 } from "react";
345
+ import { Obj as Obj2, Relation as Relation2 } from "@dxos/echo";
346
+ import { Icon, Message, Trans, useTranslation as useTranslation4 } from "@dxos/react-ui";
347
+ import { meta as meta4 } from "#meta";
348
+
349
+ // src/components/CommentsPanel/CommentsThread.tsx
350
+ import React3, { useCallback as useCallback2, useMemo as useMemo2, useRef as useRef3, useState as useState3 } from "react";
351
+ import { Obj, Relation } from "@dxos/echo";
352
+ import { useObject as useObject2 } from "@dxos/echo-react";
353
+ import { getSpace, useMembers } from "@dxos/react-client/echo";
354
+ import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
355
+ import { IconButton as IconButton2, Tag, Tooltip, useThemeContext as useThemeContext3, useTranslation as useTranslation3 } from "@dxos/react-ui";
356
+ import { MessageTextbox as MessageTextbox2, Thread as ThreadComponent2 } from "@dxos/react-ui-thread";
357
+ import { createBasicExtensions as createBasicExtensions3, createThemeExtensions as createThemeExtensions3, listener as listener2 } from "@dxos/ui-editor";
358
+ import { hoverableControlItem as hoverableControlItem2, hoverableControls as hoverableControls2, hoverableFocusedWithinControls as hoverableFocusedWithinControls2, mx as mx3 } from "@dxos/ui-theme";
359
+ import { useStatus } from "#hooks";
360
+ import { meta as meta3 } from "#meta";
361
+ var CommentsThread = ({ anchor, current, onAttend, onComment, onResolve, onMessageDelete, onThreadDelete, onAcceptProposal }) => {
362
+ const { themeMode } = useThemeContext3();
363
+ const { t } = useTranslation3(meta3.id);
364
+ const identity = useIdentity2();
365
+ const space = getSpace(anchor);
366
+ const members = useMembers(space?.id);
367
+ const detached = !anchor.anchor;
368
+ const thread = Relation.getSource(anchor);
369
+ const [messages] = useObject2(thread, "messages");
370
+ const activity = useStatus(space, Obj.getURI(thread));
371
+ const threadScrollRef = useRef3(null);
372
+ const textboxMetadata = getMessageMetadata(Obj.getURI(thread), identity);
373
+ const [state, setState] = useState3({});
374
+ const messageRef = useRef3("");
375
+ const extensions = useMemo2(() => [
376
+ createBasicExtensions3({
377
+ placeholder: t("message.placeholder")
378
+ }),
379
+ createThemeExtensions3({
380
+ themeMode
381
+ }),
382
+ listener2({
383
+ onChange: ({ text }) => messageRef.current = text
384
+ }),
385
+ command
386
+ ], [
387
+ state
388
+ ]);
389
+ const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
390
+ behavior,
391
+ block: "end"
392
+ }), 10);
393
+ const handleAttend = useCallback2(() => onAttend?.(anchor), [
394
+ onAttend,
395
+ anchor
396
+ ]);
397
+ const handleResolve = useCallback2(() => onResolve?.(anchor), [
398
+ onResolve,
399
+ anchor
400
+ ]);
401
+ const handleMessageDelete = useCallback2((id) => onMessageDelete?.(anchor, id), [
402
+ onMessageDelete,
403
+ anchor
404
+ ]);
405
+ const handleThreadDelete = useCallback2(() => onThreadDelete?.(anchor), [
406
+ onThreadDelete,
407
+ anchor
408
+ ]);
409
+ const handleAcceptProposal = useCallback2((id) => onAcceptProposal?.(anchor, id), [
410
+ onAcceptProposal,
411
+ anchor
412
+ ]);
413
+ const handleComment = useCallback2(() => {
414
+ if (!messageRef.current) {
415
+ return false;
416
+ }
417
+ onComment?.(anchor, messageRef.current);
418
+ messageRef.current = "";
419
+ scrollToEnd("instant");
420
+ setState({});
421
+ return true;
422
+ }, [
423
+ anchor,
424
+ identity
425
+ ]);
426
+ return /* @__PURE__ */ React3.createElement(ThreadComponent2.Root, {
427
+ id: Obj.getURI(thread),
428
+ classNames: "pt-2 border-b border-subdued-separator last:border-none",
429
+ current,
430
+ onClickCapture: handleAttend,
431
+ onFocusCapture: handleAttend
432
+ }, /* @__PURE__ */ React3.createElement("div", {
433
+ className: mx3("col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]", hoverableControls2, hoverableFocusedWithinControls2)
434
+ }, detached ? /* @__PURE__ */ React3.createElement(Tooltip.Trigger, {
435
+ asChild: true,
436
+ content: t("detached-thread.label"),
437
+ side: "top"
438
+ }, /* @__PURE__ */ React3.createElement(ThreadComponent2.Header, {
439
+ detached: true
440
+ }, thread.name)) : /* @__PURE__ */ React3.createElement(ThreadComponent2.Header, null, thread.name), /* @__PURE__ */ React3.createElement("div", {
441
+ className: buttonGroupClassNames
442
+ }, thread.status === "staged" && /* @__PURE__ */ React3.createElement(Tag, {
443
+ palette: "neutral"
444
+ }, t("draft.button")), onResolve && !(thread?.status === "staged") && /* @__PURE__ */ React3.createElement(IconButton2, {
445
+ "data-testid": "thread.resolve",
446
+ variant: "ghost",
447
+ icon: thread?.status === "resolved" ? "ph--check--fill" : "ph--check--regular",
448
+ iconOnly: true,
449
+ label: t("resolve-thread.label"),
450
+ classNames: [
451
+ buttonClassNames,
452
+ thread?.status !== "resolved" && hoverableControlItem2
453
+ ],
454
+ onClick: handleResolve
455
+ }), onThreadDelete && /* @__PURE__ */ React3.createElement(IconButton2, {
456
+ "data-testid": "thread.delete",
457
+ variant: "ghost",
458
+ icon: "ph--x--regular",
459
+ iconOnly: true,
460
+ label: t("delete-thread.label"),
461
+ classNames: [
462
+ buttonClassNames,
463
+ hoverableControlItem2
464
+ ],
465
+ onClick: handleThreadDelete
466
+ }))), messages?.map((ref) => /* @__PURE__ */ React3.createElement(MessagePanel, {
467
+ key: ref.uri,
468
+ editable: true,
469
+ message: ref,
470
+ members,
471
+ onDelete: handleMessageDelete,
472
+ onAcceptProposal: handleAcceptProposal
473
+ })), /* @__PURE__ */ React3.createElement(MessageTextbox2, {
474
+ autoFocus: thread.status === "staged",
475
+ extensions,
476
+ onSend: handleComment,
477
+ ...textboxMetadata
478
+ }), /* @__PURE__ */ React3.createElement(ThreadComponent2.Status, {
479
+ activity
480
+ }, t("activity.message")), /* @__PURE__ */ React3.createElement("div", {
481
+ className: "h-px -mt-px",
482
+ ref: threadScrollRef
483
+ }));
484
+ };
485
+
486
+ // src/components/CommentsPanel/CommentsPanel.tsx
487
+ var CommentsPanel = ({ anchors, currentId, showResolvedThreads, ...props }) => {
488
+ const { t } = useTranslation4(meta4.id);
489
+ const filteredAnchors = showResolvedThreads ? anchors.filter((anchor) => !!Relation2.getSource(anchor)) : anchors.filter((anchor) => {
490
+ const thread = Relation2.getSource(anchor);
491
+ return thread && thread.status !== "resolved";
492
+ });
493
+ useEffect2(() => {
494
+ if (currentId) {
495
+ document.getElementById(currentId)?.scrollIntoView({
496
+ behavior: "smooth",
497
+ block: "end"
498
+ });
499
+ }
500
+ }, [
501
+ currentId
502
+ ]);
503
+ if (filteredAnchors.length === 0) {
504
+ return /* @__PURE__ */ React4.createElement("div", {
505
+ className: "p-form-padding"
506
+ }, /* @__PURE__ */ React4.createElement(Message.Root, null, /* @__PURE__ */ React4.createElement(Message.Content, null, /* @__PURE__ */ React4.createElement(Trans, {
507
+ t,
508
+ i18nKey: "no-comments.message",
509
+ components: {
510
+ commentIcon: /* @__PURE__ */ React4.createElement(Icon, {
511
+ icon: "ph--chat-text--regular",
512
+ size: 4,
513
+ classNames: "dx-icon-inline"
514
+ })
515
+ }
516
+ }))));
517
+ }
518
+ return /* @__PURE__ */ React4.createElement("div", null, filteredAnchors.map((anchor) => {
519
+ const thread = Relation2.getSource(anchor);
520
+ const threadId = Obj2.getURI(thread);
521
+ return /* @__PURE__ */ React4.createElement(CommentsThread, {
522
+ key: threadId,
523
+ anchor,
524
+ current: currentId === threadId,
525
+ ...props
526
+ });
527
+ }));
528
+ };
529
+
530
+ // src/components/index.ts
531
+ var ThreadSettings = lazy(() => import("../ThreadSettings-5MKTDK3A.mjs"));
532
+ export {
533
+ Chat,
534
+ CommentsPanel,
535
+ CommentsThread,
536
+ MessagePanel,
537
+ ThreadSettings,
538
+ buttonClassNames,
539
+ buttonGroupClassNames
540
+ };
541
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/index.ts", "../../../../src/components/Chat/Chat.tsx", "../../../../src/components/MessagePanel/MessagePanel.tsx", "../../../../src/components/CommentsPanel/CommentsPanel.tsx", "../../../../src/components/CommentsPanel/CommentsThread.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport * from './Chat';\nexport * from './CommentsPanel';\nexport * from './MessagePanel';\n\nexport const ThreadSettings: ComponentType<any> = lazy(() => import('./ThreadSettings'));\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { type RefObject, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { type SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport {\n type MessageMetadata,\n MessageTextbox,\n Thread as ThreadComponent,\n type ThreadRootProps,\n threadLayout,\n} from '@dxos/react-ui-thread';\nimport { type Message } from '@dxos/types';\nimport { createBasicExtensions, createThemeExtensions, listener, type Extension } from '@dxos/ui-editor';\nimport { mx } from '@dxos/ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nimport { command } from '../../extensions';\nimport { getMessageMetadata } from '../../util';\nimport { MessagePanel } from '../MessagePanel';\n\nexport type ChatProps = ThemedClassName<\n {\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 /**\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 autoFocusTextbox?: boolean;\n /**\n * Where the composer sits relative to the messages.\n * - `'top'` (default) — composer follows the messages at intrinsic height,\n * suitable for inline comment threads.\n * - `'bottom'` — composer pinned to the bottom of the panel, messages\n * scrolling above it. Suitable for full-panel multi-party chat.\n */\n orientation?: ChatOrientation;\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 } & Pick<ThreadRootProps, 'current'>\n>;\n\nexport type ChatOrientation = 'top' | 'bottom';\n\n/**\n * Pure chat UI: scrollable message list + composer textbox + activity indicator.\n * Owns its own UI state (textbox content, scroll position, editor extensions) but\n * does not load data or invoke operations — the caller passes messages and an\n * `onSend` callback. Used by both `ThreadContainer` (AutoMerge `Thread`) and\n * `ChannelArticle`'s feed-backed channel chat.\n */\nexport const Chat = composable<HTMLDivElement, ChatProps>(\n (\n {\n id,\n identity,\n members,\n messages,\n activity,\n onSend,\n autoFocusTextbox,\n current,\n orientation = 'top',\n readOnly,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n\n // Force the editor to remount after a successful send so its content resets.\n const [_count, _setCount] = useState(0);\n\n const textboxMetadata = getMessageMetadata(id, identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message.placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: ({ text }) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => sentinelRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n // NOTE: Auto-scroll on new messages is intentionally not implemented here. Smooth-scroll\n // animations were causing ResizeObserver feedback loops with CodeMirror/ScrollArea. The\n // proper fix is \"scroll only if user is already at the bottom\" — deferred to a follow-up.\n\n const handleSend = () => {\n const text = messageRef.current;\n if (!text?.length) {\n return false;\n }\n\n const accepted = onSend(text);\n if (!accepted) {\n return false;\n }\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n _setCount((count) => count + 1);\n return true;\n };\n\n const filteredMessages = messages.filter(isNonNullable);\n const renderState: ChatRenderState = {\n messages: filteredMessages,\n members,\n activity,\n extensions,\n autoFocus,\n handleSend,\n textboxMetadata,\n scrollRef,\n sentinelRef,\n readOnly,\n };\n\n return orientation === 'bottom' ? (\n <ChannelLayout\n {...composableProps(props, { classNames: 'flex flex-col h-full min-h-0' })}\n id={id}\n ref={forwardedRef}\n state={renderState}\n />\n ) : (\n <ThreadLayout\n {...composableProps(props, { classNames: 'dx-container grid-rows-[1fr_min-content_min-content]' })}\n id={id}\n current={current}\n ref={forwardedRef}\n state={renderState}\n />\n );\n },\n);\n\n//\n// Internal layout helpers — share state via the ChatRenderState bag.\n//\n\ntype ChatRenderState = {\n messages: Message.Message[];\n members: SpaceMember[];\n activity?: boolean;\n extensions: Extension[];\n autoFocus?: boolean;\n handleSend: () => boolean;\n textboxMetadata: MessageMetadata;\n scrollRef: RefObject<HTMLDivElement | null>;\n sentinelRef: RefObject<HTMLDivElement | null>;\n readOnly?: boolean;\n};\n\ntype LayoutProps = React.HTMLAttributes<HTMLDivElement> & {\n id: string;\n state: ChatRenderState;\n};\n\n/** Thread layout — composer follows messages at intrinsic height. */\nconst ThreadLayout = React.forwardRef<HTMLDivElement, LayoutProps & Pick<ThreadRootProps, 'current'>>(\n ({ id, current, state, ...props }, ref) => {\n const { t } = useTranslation(meta.id);\n const { messages, members, activity, extensions, autoFocus, handleSend, textboxMetadata, sentinelRef, readOnly } =\n state;\n return (\n <ThreadComponent.Root {...props} id={id} current={current} ref={ref}>\n <ScrollArea.Root classNames='col-span-2' orientation='vertical'>\n <ScrollArea.Viewport ref={sentinelRef}>\n <div className={mx(threadLayout, 'place-self-end')}>\n {messages.map((message) => (\n <MessagePanel key={message.id} message={message} members={members} />\n ))}\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n {!readOnly && (\n <>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleSend} {...textboxMetadata} />\n <ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>\n </>\n )}\n </ThreadComponent.Root>\n );\n },\n);\n\n/** Channel layout — composer pinned to the bottom, messages scroll above it. */\nconst ChannelLayout = React.forwardRef<HTMLDivElement, LayoutProps>(({ id, state, ...props }, ref) => {\n const { t } = useTranslation(meta.id);\n const {\n messages,\n members,\n activity,\n extensions,\n autoFocus,\n handleSend,\n textboxMetadata,\n scrollRef,\n sentinelRef,\n readOnly,\n } = state;\n return (\n <div {...props} id={id} ref={ref}>\n <div ref={scrollRef} className='flex-1 min-h-0 overflow-y-auto'>\n {messages.map((message) => (\n <div key={message.id} className='grid grid-cols-[var(--dx-rail-size)_1fr] w-full'>\n <MessagePanel message={message} members={members} />\n </div>\n ))}\n <div ref={sentinelRef} />\n </div>\n {!readOnly && (\n <>\n <div className='shrink-0 grid grid-cols-[var(--dx-rail-size)_1fr]'>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleSend} {...textboxMetadata} />\n </div>\n <div className='shrink-0 px-2 pb-1 text-xs text-description'>{activity ? t('activity.message') : null}</div>\n </>\n )}\n </div>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Obj, Ref } from '@dxos/echo';\nimport { useObject } from '@dxos/echo-react';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport { IconButton, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui';\nimport { useTextEditor } from '@dxos/react-ui-editor';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { type ContentBlock, type Message } from '@dxos/types';\nimport { createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';\nimport { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';\n\nimport { useOnEditAnalytics } from '#hooks';\nimport { meta } from '#meta';\n\nimport { command } from '../../extensions/command';\nimport { getMessageMetadata } from '../../util';\n\nexport const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pe-2';\nexport const buttonClassNames = 'p-1! transition-opacity';\n\nexport type MessagePanelProps = {\n message: Obj.OfShape<Message.Message> | Ref.Ref<Obj.OfShape<Message.Message>>;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n onAcceptProposal?: (id: string) => void;\n};\n\nexport const MessagePanel = ({\n message: messageOrRef,\n members,\n editable = false,\n onDelete,\n onAcceptProposal,\n}: MessagePanelProps) => {\n const { t } = useTranslation(meta.id);\n const [message, updateMessage] = useObject(messageOrRef);\n const identity = useIdentity();\n const [editing, setEditing] = useState(false);\n\n const textBlockIndex = message?.blocks.findIndex((block) => block._tag === 'text') ?? -1;\n\n const handleEdit = useCallback(() => setEditing((editing) => !editing), []);\n const handleDelete = useCallback(() => message && onDelete?.(message.id), [message, onDelete]);\n const handleAcceptProposal = useCallback(\n () => message && onAcceptProposal?.(message.id),\n [message, onAcceptProposal],\n );\n const handleTextBlockChange = useCallback(\n (newText: string) => {\n updateMessage((m) => {\n const targetBlock = m.blocks[textBlockIndex];\n if (targetBlock && targetBlock._tag === 'text') {\n targetBlock.text = newText;\n }\n });\n },\n [updateMessage, textBlockIndex],\n );\n\n const textBlock =\n message && textBlockIndex !== -1 ? (message.blocks[textBlockIndex] as ContentBlock.Text) : undefined;\n useOnEditAnalytics(message, textBlock, !!editing);\n\n if (!message) {\n return null;\n }\n\n const senderIdentity = 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 )?.identity;\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 const messageMetadata = getMessageMetadata(message.id, senderIdentity, message.sender);\n const userIsAuthor = identity?.did === messageMetadata.authorId;\n const proposalBlock = message.blocks.find((block) => block._tag === 'proposal');\n const references = message.blocks.filter((block) => block._tag === 'reference').map((block) => block.reference);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <div className={buttonGroupClassNames}>\n {userIsAuthor && editable && (\n <IconButton\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n variant='ghost'\n icon={editing ? 'ph--check--regular' : 'ph--pencil-simple--regular'}\n iconOnly\n label={t(editing ? 'save-message.label' : 'edit-message.label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleEdit}\n />\n )}\n {/* TODO(wittjosiah): Proposal controls should probably be hoisted to thread level. */}\n {proposalBlock && onAcceptProposal && (\n <IconButton\n data-testid='thread.message.accept'\n variant='ghost'\n icon='ph--check--regular'\n iconOnly\n label={t('accept-proposal.label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleAcceptProposal}\n />\n )}\n {onDelete && (\n <IconButton\n data-testid='thread.message.delete'\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('delete-message.label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleDelete}\n />\n )}\n </div>\n </MessageHeading>\n {textBlock && (\n <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} onSave={handleTextBlockChange} />\n )}\n {proposalBlock && <ProposalBlock block={proposalBlock} />}\n {Ref.Array.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference as Obj.Unknown} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Obj.Unknown }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n onSave,\n}: {\n block: ContentBlock.Text;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n onSave?: (newText: string) => void;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n onSave?.(inMemoryContentRef.current);\n }, [onSave]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.text,\n extensions: [\n createBasicExtensions({ readOnly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div ref={parentRef} className='me-4' {...focusAttributes} />;\n};\n\nconst ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {\n return <div className='me-4 italic'>{block.text}</div>;\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Unknown }>(({ subject }, forwardedRef) => {\n // TODO(burdon): Use annotation to get title.\n let title = (subject as any).name ?? (subject as any).title ?? (subject as any).type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <Card.Root\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n ref={forwardedRef}\n >\n <Surface.Surface\n type={AppSurface.Card}\n limit={1}\n data={{ subject } satisfies AppSurface.ObjectCardData}\n fallback={title}\n />\n </Card.Root>\n );\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect } from 'react';\n\nimport { Obj, Relation } from '@dxos/echo';\nimport { Icon, Message, Trans, useTranslation } from '@dxos/react-ui';\nimport { type AnchoredTo, type Thread } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nimport { CommentsThread, type CommentsThreadProps } from './CommentsThread';\n\nexport type CommentsPanelProps = Omit<CommentsThreadProps, 'anchor' | 'current'> & {\n anchors: AnchoredTo.AnchoredTo[];\n currentId?: string;\n showResolvedThreads?: boolean;\n};\n\n/**\n * Root container for collection of comment threads.\n */\nexport const CommentsPanel = ({ anchors, currentId, showResolvedThreads, ...props }: CommentsPanelProps) => {\n const { t } = useTranslation(meta.id);\n\n // TODO(wittjosiah): There seems to be a race between thread and anchor being deleted.\n const filteredAnchors = showResolvedThreads\n ? anchors.filter((anchor) => !!Relation.getSource(anchor))\n : anchors.filter((anchor) => {\n const thread = Relation.getSource(anchor);\n // TODO(dmaretskyi): Do Obj.instanceOf check instead.\n return thread && (thread as any).status !== 'resolved';\n });\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n if (filteredAnchors.length === 0) {\n return (\n <div className='p-form-padding'>\n <Message.Root>\n <Message.Content>\n <Trans\n {...{\n t,\n i18nKey: 'no-comments.message',\n components: {\n commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='dx-icon-inline' />,\n },\n }}\n />\n </Message.Content>\n </Message.Root>\n </div>\n );\n }\n\n return (\n <div>\n {filteredAnchors.map((anchor) => {\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const threadId = Obj.getURI(thread);\n return <CommentsThread key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;\n })}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Obj, Relation } from '@dxos/echo';\nimport { useObject } from '@dxos/echo-react';\nimport { getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport {\n MessageTextbox,\n type MessageTextboxProps,\n Thread as ThreadComponent,\n type ThreadRootProps,\n} from '@dxos/react-ui-thread';\nimport { type AnchoredTo, type Thread } from '@dxos/types';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui-editor';\nimport { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';\n\nimport { useStatus } from '#hooks';\nimport { meta } from '#meta';\n\nimport { command } from '../../extensions/command';\nimport { getMessageMetadata } from '../../util';\nimport { MessagePanel, buttonClassNames, buttonGroupClassNames } from '../MessagePanel';\n\nexport type CommentsThreadProps = {\n anchor: AnchoredTo.AnchoredTo;\n onAttend?: (anchor: AnchoredTo.AnchoredTo) => void;\n onComment?: (anchor: AnchoredTo.AnchoredTo, message: string) => void;\n onResolve?: (anchor: AnchoredTo.AnchoredTo) => void;\n onMessageDelete?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;\n onThreadDelete?: (anchor: AnchoredTo.AnchoredTo) => void;\n onAcceptProposal?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;\n} & Pick<ThreadRootProps, 'current'>;\n\nexport const CommentsThread = ({\n anchor,\n current,\n onAttend,\n onComment,\n onResolve,\n onMessageDelete,\n onThreadDelete,\n onAcceptProposal,\n}: CommentsThreadProps) => {\n const { themeMode } = useThemeContext();\n const { t } = useTranslation(meta.id);\n const identity = useIdentity()!;\n const space = getSpace(anchor);\n const members = useMembers(space?.id);\n const detached = !anchor.anchor;\n const thread = Relation.getSource(anchor) as Thread.Thread;\n const [messages] = useObject(thread, 'messages');\n const activity = useStatus(space, Obj.getURI(thread));\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n\n const textboxMetadata = getMessageMetadata(Obj.getURI(thread), identity);\n\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [state, setState] = useState({});\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message.placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: ({ text }) => (messageRef.current = text) }),\n command,\n ],\n [state],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleAttend = useCallback(() => onAttend?.(anchor), [onAttend, anchor]);\n const handleResolve = useCallback(() => onResolve?.(anchor), [onResolve, anchor]);\n const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(anchor, id), [onMessageDelete, anchor]);\n const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);\n const handleAcceptProposal = useCallback((id: string) => onAcceptProposal?.(anchor, id), [onAcceptProposal, anchor]);\n\n const handleComment = useCallback<NonNullable<MessageTextboxProps['onSend']>>(() => {\n if (!messageRef.current) {\n return false;\n }\n\n onComment?.(anchor, messageRef.current);\n messageRef.current = '';\n scrollToEnd('instant');\n setState({});\n\n return true;\n }, [anchor, identity]);\n\n return (\n <ThreadComponent.Root\n id={Obj.getURI(thread)}\n classNames='pt-2 border-b border-subdued-separator last:border-none'\n current={current}\n onClickCapture={handleAttend}\n onFocusCapture={handleAttend}\n >\n <div\n className={mx(\n 'col-span-2 grid grid-cols-[var(--dx-rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Trigger asChild content={t('detached-thread.label')} side='top'>\n <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>\n </Tooltip.Trigger>\n ) : (\n <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>\n )}\n <div className={buttonGroupClassNames}>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft.button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <IconButton\n data-testid='thread.resolve'\n variant='ghost'\n icon={thread?.status === 'resolved' ? 'ph--check--fill' : 'ph--check--regular'}\n iconOnly\n label={t('resolve-thread.label')}\n classNames={[buttonClassNames, thread?.status !== 'resolved' && hoverableControlItem]}\n onClick={handleResolve}\n />\n )}\n {onThreadDelete && (\n <IconButton\n data-testid='thread.delete'\n variant='ghost'\n icon='ph--x--regular'\n iconOnly\n label={t('delete-thread.label')}\n classNames={[buttonClassNames, hoverableControlItem]}\n onClick={handleThreadDelete}\n />\n )}\n </div>\n </div>\n\n {messages?.map((ref) => (\n <MessagePanel\n key={ref.uri}\n editable\n message={ref}\n members={members}\n onDelete={handleMessageDelete}\n onAcceptProposal={handleAcceptProposal}\n />\n ))}\n\n {/*\n Autofocus only newly-created (draft) threads. Once the first message is\n posted the thread transitions from 'staged' → 'active' and stops stealing\n focus, satisfying the \"one scenario only\" constraint flagged in the\n previous TODO (multiple active threads no longer fight for focus).\n */}\n <MessageTextbox\n autoFocus={thread.status === 'staged'}\n extensions={extensions}\n onSend={handleComment}\n {...textboxMetadata}\n />\n\n <ThreadComponent.Status activity={activity}>{t('activity.message')}</ThreadComponent.Status>\n\n <div className='h-px -mt-px' ref={threadScrollRef} />\n </ThreadComponent.Root>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["lazy", "React", "useLayoutEffect", "useMemo", "useRef", "useState", "ScrollArea", "useThemeContext", "useTranslation", "composable", "composableProps", "MessageTextbox", "Thread", "ThreadComponent", "threadLayout", "createBasicExtensions", "createThemeExtensions", "listener", "mx", "isNonNullable", "meta", "EditorView", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "AppSurface", "Ref", "useObject", "PublicKey", "useIdentity", "IconButton", "useOnTransition", "useThemeContext", "useTranslation", "Card", "useTextEditor", "MessageHeading", "MessageRoot", "createBasicExtensions", "createThemeExtensions", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "useOnEditAnalytics", "meta", "buttonGroupClassNames", "buttonClassNames", "MessagePanel", "message", "messageOrRef", "members", "editable", "onDelete", "onAcceptProposal", "t", "useTranslation", "meta", "id", "updateMessage", "useObject", "identity", "useIdentity", "editing", "setEditing", "useState", "textBlockIndex", "blocks", "findIndex", "block", "_tag", "handleEdit", "useCallback", "handleDelete", "handleAcceptProposal", "handleTextBlockChange", "newText", "m", "targetBlock", "text", "textBlock", "undefined", "useOnEditAnalytics", "senderIdentity", "find", "member", "sender", "identityDid", "did", "identityKey", "PublicKey", "equals", "messageMetadata", "getMessageMetadata", "userIsAuthor", "authorId", "proposalBlock", "references", "filter", "map", "reference", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "div", "className", "IconButton", "data-testid", "variant", "icon", "iconOnly", "label", "hoverableControlItem", "onClick", "TextboxBlock", "isAuthor", "onSave", "ProposalBlock", "Ref", "Array", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "ref", "forwardRef", "forwardedRef", "title", "name", "type", "content", "Card", "Root", "mx", "Surface", "AppSurface", "limit", "data", "fallback", "Chat", "composable", "id", "identity", "members", "messages", "activity", "onSend", "autoFocusTextbox", "current", "orientation", "readOnly", "props", "forwardedRef", "t", "useTranslation", "meta", "themeMode", "useThemeContext", "scrollRef", "useRef", "sentinelRef", "autoFocus", "setAutoFocus", "useState", "_count", "_setCount", "textboxMetadata", "getMessageMetadata", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleSend", "length", "accepted", "count", "filteredMessages", "filter", "isNonNullable", "renderState", "React", "ChannelLayout", "composableProps", "classNames", "ref", "state", "ThreadLayout", "forwardRef", "ThreadComponent", "Root", "ScrollArea", "Viewport", "div", "className", "mx", "threadLayout", "map", "message", "MessagePanel", "key", "MessageTextbox", "Status", "React", "useEffect", "Obj", "Relation", "Icon", "Message", "Trans", "useTranslation", "meta", "React", "useCallback", "useMemo", "useRef", "useState", "Obj", "Relation", "useObject", "getSpace", "useMembers", "useIdentity", "IconButton", "Tag", "Tooltip", "useThemeContext", "useTranslation", "MessageTextbox", "Thread", "ThreadComponent", "createBasicExtensions", "createThemeExtensions", "listener", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "useStatus", "meta", "CommentsThread", "anchor", "current", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "onAcceptProposal", "themeMode", "useThemeContext", "t", "useTranslation", "meta", "id", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "detached", "thread", "Relation", "getSource", "messages", "useObject", "activity", "useStatus", "Obj", "getURI", "threadScrollRef", "useRef", "textboxMetadata", "getMessageMetadata", "state", "setState", "useState", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "handleAttend", "useCallback", "handleResolve", "handleMessageDelete", "handleThreadDelete", "handleAcceptProposal", "handleComment", "React", "ThreadComponent", "Root", "classNames", "onClickCapture", "onFocusCapture", "div", "className", "mx", "hoverableControls", "hoverableFocusedWithinControls", "Tooltip", "Trigger", "asChild", "content", "side", "Header", "name", "buttonGroupClassNames", "status", "Tag", "palette", "IconButton", "data-testid", "variant", "icon", "iconOnly", "label", "buttonClassNames", "hoverableControlItem", "onClick", "map", "ref", "MessagePanel", "key", "uri", "editable", "message", "onDelete", "MessageTextbox", "autoFocus", "onSend", "Status", "CommentsPanel", "anchors", "currentId", "showResolvedThreads", "props", "t", "useTranslation", "meta", "id", "filteredAnchors", "filter", "anchor", "Relation", "getSource", "thread", "status", "useEffect", "document", "getElementById", "scrollIntoView", "behavior", "block", "length", "React", "div", "className", "Message", "Root", "Content", "Trans", "i18nKey", "components", "commentIcon", "Icon", "icon", "size", "classNames", "map", "threadId", "Obj", "getURI", "CommentsThread", "key", "current", "ThreadSettings", "lazy"]
7
+ }