@dxos/plugin-thread 0.8.4-main.70d3990 → 0.8.4-main.7996785055

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 (584) hide show
  1. package/dist/lib/browser/CallDebugPanel-RY6FXDN7.mjs +181 -0
  2. package/dist/lib/browser/CallDebugPanel-RY6FXDN7.mjs.map +7 -0
  3. package/dist/lib/browser/CallSidebar-U3YOKNG6.mjs +37 -0
  4. package/dist/lib/browser/CallSidebar-U3YOKNG6.mjs.map +7 -0
  5. package/dist/lib/browser/ChannelContainer-C25SJD67.mjs +18 -0
  6. package/dist/lib/browser/ChatContainer-VG6JXVMR.mjs +19 -0
  7. package/dist/lib/browser/ThreadCompanion-LHPNPABS.mjs +223 -0
  8. package/dist/lib/browser/ThreadCompanion-LHPNPABS.mjs.map +7 -0
  9. package/dist/lib/browser/ThreadSettings-7WRTSUPH.mjs +19 -0
  10. package/dist/lib/browser/ThreadSettings-7WRTSUPH.mjs.map +7 -0
  11. package/dist/lib/browser/add-message-O3INEWOI.mjs +97 -0
  12. package/dist/lib/browser/add-message-O3INEWOI.mjs.map +7 -0
  13. package/dist/lib/browser/app-graph-builder-NQASP6LK.mjs +191 -0
  14. package/dist/lib/browser/app-graph-builder-NQASP6LK.mjs.map +7 -0
  15. package/dist/lib/browser/blueprint-definition-BVS7F5KD.mjs +20 -0
  16. package/dist/lib/browser/blueprint-definition-BVS7F5KD.mjs.map +7 -0
  17. package/dist/lib/browser/blueprints/index.mjs +11 -0
  18. package/dist/lib/browser/call-manager-HRJSB3NQ.mjs +26 -0
  19. package/dist/lib/browser/call-manager-HRJSB3NQ.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-2M2HV5K4.mjs +35 -0
  21. package/dist/lib/browser/chunk-2M2HV5K4.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-4PJ6SUNH.mjs +8 -0
  23. package/dist/lib/browser/chunk-4PJ6SUNH.mjs.map +7 -0
  24. package/dist/lib/browser/{chunk-ZCW3NSDZ.mjs → chunk-ERK254BS.mjs} +68 -51
  25. package/dist/lib/browser/chunk-ERK254BS.mjs.map +7 -0
  26. package/dist/lib/browser/chunk-GB4CYKEA.mjs +223 -0
  27. package/dist/lib/browser/chunk-GB4CYKEA.mjs.map +7 -0
  28. package/dist/lib/browser/{chunk-KOBXMDCI.mjs → chunk-GYRGZNEC.mjs} +14 -12
  29. package/dist/lib/browser/chunk-GYRGZNEC.mjs.map +7 -0
  30. package/dist/lib/browser/chunk-L7RCZYUB.mjs +39 -0
  31. package/dist/lib/browser/chunk-L7RCZYUB.mjs.map +7 -0
  32. package/dist/lib/browser/chunk-MC6IA6YE.mjs +135 -0
  33. package/dist/lib/browser/chunk-MC6IA6YE.mjs.map +7 -0
  34. package/dist/lib/browser/chunk-NU7YGDHW.mjs +126 -0
  35. package/dist/lib/browser/chunk-NU7YGDHW.mjs.map +7 -0
  36. package/dist/lib/browser/{chunk-QM34EZQK.mjs → chunk-SDMEBXOE.mjs} +10 -3
  37. package/dist/lib/browser/chunk-SDMEBXOE.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-T6FNJOLU.mjs +259 -0
  39. package/dist/lib/browser/chunk-T6FNJOLU.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-TAEJJ3CF.mjs +57 -0
  41. package/dist/lib/browser/chunk-TAEJJ3CF.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-WR6V7S4Q.mjs +1093 -0
  43. package/dist/lib/browser/chunk-WR6V7S4Q.mjs.map +7 -0
  44. package/dist/lib/browser/create-UP6DYIPF.mjs +55 -0
  45. package/dist/lib/browser/create-UP6DYIPF.mjs.map +7 -0
  46. package/dist/lib/browser/create-channel-NHQ3BKJC.mjs +21 -0
  47. package/dist/lib/browser/create-channel-NHQ3BKJC.mjs.map +7 -0
  48. package/dist/lib/browser/create-channel-thread-JJ7ZST67.mjs +28 -0
  49. package/dist/lib/browser/create-channel-thread-JJ7ZST67.mjs.map +7 -0
  50. package/dist/lib/browser/create-proposals-EQQXX7U7.mjs +57 -0
  51. package/dist/lib/browser/create-proposals-EQQXX7U7.mjs.map +7 -0
  52. package/dist/lib/browser/delete-UFRQJ5GV.mjs +59 -0
  53. package/dist/lib/browser/delete-UFRQJ5GV.mjs.map +7 -0
  54. package/dist/lib/browser/delete-message-TR4FW7HR.mjs +64 -0
  55. package/dist/lib/browser/delete-message-TR4FW7HR.mjs.map +7 -0
  56. package/dist/lib/browser/index.mjs +130 -120
  57. package/dist/lib/browser/index.mjs.map +4 -4
  58. package/dist/lib/browser/markdown-ZS2LW3OL.mjs +84 -0
  59. package/dist/lib/browser/markdown-ZS2LW3OL.mjs.map +7 -0
  60. package/dist/lib/browser/meta.json +1 -1
  61. package/dist/lib/browser/on-create-space-KLARW25R.mjs +25 -0
  62. package/dist/lib/browser/on-create-space-KLARW25R.mjs.map +7 -0
  63. package/dist/lib/browser/operation-handler-2PRAMPLT.mjs +17 -0
  64. package/dist/lib/browser/operation-handler-2PRAMPLT.mjs.map +7 -0
  65. package/dist/lib/browser/operations/index.mjs +13 -0
  66. package/dist/lib/browser/react-root-EGOEX44B.mjs +26 -0
  67. package/dist/lib/browser/react-root-EGOEX44B.mjs.map +7 -0
  68. package/dist/lib/browser/react-surface-UFSXNECJ.mjs +114 -0
  69. package/dist/lib/browser/react-surface-UFSXNECJ.mjs.map +7 -0
  70. package/dist/lib/browser/restore-GANFC4M4.mjs +33 -0
  71. package/dist/lib/browser/restore-GANFC4M4.mjs.map +7 -0
  72. package/dist/lib/browser/restore-message-FWGQ4FCN.mjs +42 -0
  73. package/dist/lib/browser/restore-message-FWGQ4FCN.mjs.map +7 -0
  74. package/dist/lib/browser/select-Y4XQX4BS.mjs +26 -0
  75. package/dist/lib/browser/select-Y4XQX4BS.mjs.map +7 -0
  76. package/dist/lib/browser/settings-VOVRRXEK.mjs +34 -0
  77. package/dist/lib/browser/settings-VOVRRXEK.mjs.map +7 -0
  78. package/dist/lib/browser/state-WNYOQCCT.mjs +24 -0
  79. package/dist/lib/browser/state-WNYOQCCT.mjs.map +7 -0
  80. package/dist/lib/browser/toggle-resolved-QVOZGID6.mjs +45 -0
  81. package/dist/lib/browser/toggle-resolved-QVOZGID6.mjs.map +7 -0
  82. package/dist/lib/browser/types/index.mjs +4 -5
  83. package/dist/lib/browser/undo-mappings-BTXCCPUL.mjs +59 -0
  84. package/dist/lib/browser/undo-mappings-BTXCCPUL.mjs.map +7 -0
  85. package/dist/lib/node-esm/CallDebugPanel-CKGXAWG5.mjs +182 -0
  86. package/dist/lib/node-esm/CallDebugPanel-CKGXAWG5.mjs.map +7 -0
  87. package/dist/lib/node-esm/CallSidebar-MSAQRWCO.mjs +38 -0
  88. package/dist/lib/node-esm/CallSidebar-MSAQRWCO.mjs.map +7 -0
  89. package/dist/lib/node-esm/ChannelContainer-R23E4D3N.mjs +19 -0
  90. package/dist/lib/node-esm/ChatContainer-VS2NX3S7.mjs +20 -0
  91. package/dist/lib/node-esm/ThreadCompanion-DIKUNH3P.mjs +224 -0
  92. package/dist/lib/node-esm/ThreadCompanion-DIKUNH3P.mjs.map +7 -0
  93. package/dist/lib/node-esm/ThreadSettings-UJBAAD4J.mjs +20 -0
  94. package/dist/lib/node-esm/ThreadSettings-UJBAAD4J.mjs.map +7 -0
  95. package/dist/lib/node-esm/add-message-GQO7ETY3.mjs +98 -0
  96. package/dist/lib/node-esm/add-message-GQO7ETY3.mjs.map +7 -0
  97. package/dist/lib/node-esm/app-graph-builder-WIYQ3COQ.mjs +192 -0
  98. package/dist/lib/node-esm/app-graph-builder-WIYQ3COQ.mjs.map +7 -0
  99. package/dist/lib/node-esm/blueprint-definition-NXHQAJT7.mjs +21 -0
  100. package/dist/lib/node-esm/blueprint-definition-NXHQAJT7.mjs.map +7 -0
  101. package/dist/lib/node-esm/blueprints/index.mjs +12 -0
  102. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  103. package/dist/lib/node-esm/call-manager-LOWS24PO.mjs +27 -0
  104. package/dist/lib/node-esm/call-manager-LOWS24PO.mjs.map +7 -0
  105. package/dist/lib/node-esm/chunk-6ZJGXE4F.mjs +58 -0
  106. package/dist/lib/node-esm/chunk-6ZJGXE4F.mjs.map +7 -0
  107. package/dist/lib/node-esm/chunk-A3SWGVF3.mjs +37 -0
  108. package/dist/lib/node-esm/chunk-A3SWGVF3.mjs.map +7 -0
  109. package/dist/lib/node-esm/{chunk-PZH2EDU5.mjs → chunk-EYWLIDLC.mjs} +14 -12
  110. package/dist/lib/node-esm/chunk-EYWLIDLC.mjs.map +7 -0
  111. package/dist/lib/node-esm/chunk-GRA2YL5N.mjs +1094 -0
  112. package/dist/lib/node-esm/chunk-GRA2YL5N.mjs.map +7 -0
  113. package/dist/lib/node-esm/chunk-JOAZKE2A.mjs +260 -0
  114. package/dist/lib/node-esm/chunk-JOAZKE2A.mjs.map +7 -0
  115. package/dist/lib/node-esm/chunk-JOIEIY5R.mjs +224 -0
  116. package/dist/lib/node-esm/chunk-JOIEIY5R.mjs.map +7 -0
  117. package/dist/lib/node-esm/{chunk-2AEIN5MI.mjs → chunk-JZI7AFD6.mjs} +9 -3
  118. package/dist/lib/node-esm/chunk-JZI7AFD6.mjs.map +7 -0
  119. package/dist/lib/node-esm/chunk-KCWDGW5M.mjs +127 -0
  120. package/dist/lib/node-esm/chunk-KCWDGW5M.mjs.map +7 -0
  121. package/dist/lib/node-esm/chunk-QFVKK6S6.mjs +10 -0
  122. package/dist/lib/node-esm/chunk-QFVKK6S6.mjs.map +7 -0
  123. package/dist/lib/node-esm/{chunk-7KZWZS2U.mjs → chunk-QP3KQOPQ.mjs} +68 -51
  124. package/dist/lib/node-esm/chunk-QP3KQOPQ.mjs.map +7 -0
  125. package/dist/lib/node-esm/chunk-VRNCL65Y.mjs +40 -0
  126. package/dist/lib/node-esm/chunk-VRNCL65Y.mjs.map +7 -0
  127. package/dist/lib/node-esm/chunk-YGHV23ZD.mjs +136 -0
  128. package/dist/lib/node-esm/chunk-YGHV23ZD.mjs.map +7 -0
  129. package/dist/lib/node-esm/create-DIAK4OFO.mjs +56 -0
  130. package/dist/lib/node-esm/create-DIAK4OFO.mjs.map +7 -0
  131. package/dist/lib/node-esm/create-channel-JHQN2RGK.mjs +22 -0
  132. package/dist/lib/node-esm/create-channel-JHQN2RGK.mjs.map +7 -0
  133. package/dist/lib/node-esm/create-channel-thread-PQKG5VFZ.mjs +29 -0
  134. package/dist/lib/node-esm/create-channel-thread-PQKG5VFZ.mjs.map +7 -0
  135. package/dist/lib/node-esm/create-proposals-JBZLGBSF.mjs +58 -0
  136. package/dist/lib/node-esm/create-proposals-JBZLGBSF.mjs.map +7 -0
  137. package/dist/lib/node-esm/delete-F4NFPLKJ.mjs +60 -0
  138. package/dist/lib/node-esm/delete-F4NFPLKJ.mjs.map +7 -0
  139. package/dist/lib/node-esm/delete-message-QSTGJOL6.mjs +65 -0
  140. package/dist/lib/node-esm/delete-message-QSTGJOL6.mjs.map +7 -0
  141. package/dist/lib/node-esm/index.mjs +130 -120
  142. package/dist/lib/node-esm/index.mjs.map +4 -4
  143. package/dist/lib/node-esm/markdown-YP22U47Q.mjs +85 -0
  144. package/dist/lib/node-esm/markdown-YP22U47Q.mjs.map +7 -0
  145. package/dist/lib/node-esm/meta.json +1 -1
  146. package/dist/lib/node-esm/on-create-space-N7SEMK4L.mjs +26 -0
  147. package/dist/lib/node-esm/on-create-space-N7SEMK4L.mjs.map +7 -0
  148. package/dist/lib/node-esm/operation-handler-S6I62YNM.mjs +18 -0
  149. package/dist/lib/node-esm/operation-handler-S6I62YNM.mjs.map +7 -0
  150. package/dist/lib/node-esm/operations/index.mjs +14 -0
  151. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  152. package/dist/lib/node-esm/react-root-DBJS3JVF.mjs +27 -0
  153. package/dist/lib/node-esm/react-root-DBJS3JVF.mjs.map +7 -0
  154. package/dist/lib/node-esm/react-surface-NOV4MWBJ.mjs +115 -0
  155. package/dist/lib/node-esm/react-surface-NOV4MWBJ.mjs.map +7 -0
  156. package/dist/lib/node-esm/restore-N7MEXVMG.mjs +34 -0
  157. package/dist/lib/node-esm/restore-N7MEXVMG.mjs.map +7 -0
  158. package/dist/lib/node-esm/restore-message-ECWGBHBC.mjs +43 -0
  159. package/dist/lib/node-esm/restore-message-ECWGBHBC.mjs.map +7 -0
  160. package/dist/lib/node-esm/select-GPWM36LA.mjs +27 -0
  161. package/dist/lib/node-esm/select-GPWM36LA.mjs.map +7 -0
  162. package/dist/lib/node-esm/settings-LIZBH7EW.mjs +35 -0
  163. package/dist/lib/node-esm/settings-LIZBH7EW.mjs.map +7 -0
  164. package/dist/lib/node-esm/state-ELJSYGJK.mjs +25 -0
  165. package/dist/lib/node-esm/state-ELJSYGJK.mjs.map +7 -0
  166. package/dist/lib/node-esm/toggle-resolved-EBEJUS66.mjs +46 -0
  167. package/dist/lib/node-esm/toggle-resolved-EBEJUS66.mjs.map +7 -0
  168. package/dist/lib/node-esm/types/index.mjs +4 -5
  169. package/dist/lib/node-esm/undo-mappings-IYTSBZWN.mjs +60 -0
  170. package/dist/lib/node-esm/undo-mappings-IYTSBZWN.mjs.map +7 -0
  171. package/dist/types/src/ThreadPlugin.d.ts +2 -1
  172. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  173. package/dist/types/src/blueprints/index.d.ts +2 -0
  174. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  175. package/dist/types/src/blueprints/thread-blueprint.d.ts +4 -0
  176. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -0
  177. package/dist/types/src/calls/call-manager.d.ts +40 -30
  178. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  179. package/dist/types/src/calls/call-swarm-synchronizer.d.ts +2 -2
  180. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  181. package/dist/types/src/calls/media-manager.d.ts +1 -1
  182. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  183. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  184. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  185. package/dist/types/src/calls/util/task-scheduling.d.ts +2 -2
  186. package/dist/types/src/calls/util/task-scheduling.d.ts.map +1 -1
  187. package/dist/types/src/calls-service.stories.d.ts +2 -2
  188. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  189. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  190. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  191. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  192. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  193. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +6 -0
  194. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  195. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  196. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  197. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +6 -0
  198. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -0
  199. package/dist/types/src/capabilities/call-manager/index.d.ts +3 -0
  200. package/dist/types/src/capabilities/call-manager/index.d.ts.map +1 -0
  201. package/dist/types/src/capabilities/index.d.ts +10 -17
  202. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  203. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  204. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  205. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  206. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  207. package/dist/types/src/capabilities/operation-handler/index.d.ts +4 -0
  208. package/dist/types/src/capabilities/operation-handler/index.d.ts.map +1 -0
  209. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +6 -0
  210. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +1 -0
  211. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  212. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  213. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  214. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  215. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  216. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  217. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  218. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  219. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  220. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  221. package/dist/types/src/capabilities/settings/settings.d.ts +6 -0
  222. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  223. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  224. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  225. package/dist/types/src/capabilities/state/state.d.ts +7 -0
  226. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  227. package/dist/types/src/capabilities/undo-mappings/index.d.ts +3 -0
  228. package/dist/types/src/capabilities/undo-mappings/index.d.ts.map +1 -0
  229. package/dist/types/src/capabilities/undo-mappings/undo-mappings.d.ts +5 -0
  230. package/dist/types/src/capabilities/undo-mappings/undo-mappings.d.ts.map +1 -0
  231. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  232. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  233. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts +13 -0
  234. package/dist/types/src/components/CommentsPanel/CommentsPanel.d.ts.map +1 -0
  235. package/dist/types/src/components/{Comments.stories.d.ts → CommentsPanel/CommentsPanel.stories.d.ts} +4 -2
  236. package/dist/types/src/components/CommentsPanel/CommentsPanel.stories.d.ts.map +1 -0
  237. package/dist/types/src/components/{CommentsThreadContainer.d.ts → CommentsPanel/CommentsThread.d.ts} +3 -3
  238. package/dist/types/src/components/CommentsPanel/CommentsThread.d.ts.map +1 -0
  239. package/dist/types/src/components/CommentsPanel/index.d.ts +3 -0
  240. package/dist/types/src/components/CommentsPanel/index.d.ts.map +1 -0
  241. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  242. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  243. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  244. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts +15 -0
  245. package/dist/types/src/components/MessagePanel/MessagePanel.d.ts.map +1 -0
  246. package/dist/types/src/components/MessagePanel/index.d.ts +2 -0
  247. package/dist/types/src/components/MessagePanel/index.d.ts.map +1 -0
  248. package/dist/types/src/components/Participant/Participant.d.ts.map +1 -1
  249. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +4 -2
  250. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  251. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.d.ts → ResponsivePanel.d.ts} +4 -4
  252. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.d.ts.map +1 -0
  253. package/dist/types/src/components/ResponsiveGrid/{ResponsiveContainer.stories.d.ts → ResponsivePanel.stories.d.ts} +5 -3
  254. package/dist/types/src/components/ResponsiveGrid/ResponsivePanel.stories.d.ts.map +1 -0
  255. package/dist/types/src/components/ResponsiveGrid/index.d.ts +1 -1
  256. package/dist/types/src/components/ResponsiveGrid/index.d.ts.map +1 -1
  257. package/dist/types/src/components/index.d.ts +2 -9
  258. package/dist/types/src/components/index.d.ts.map +1 -1
  259. package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
  260. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  261. package/dist/types/src/containers/CallDebugPanel/index.d.ts +3 -0
  262. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  263. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  264. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  265. package/dist/types/src/containers/CallSidebar/index.d.ts +3 -0
  266. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  267. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts +12 -0
  268. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  269. package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.stories.d.ts +4 -2
  270. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  271. package/dist/types/src/containers/ChannelContainer/index.d.ts +3 -0
  272. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  273. package/dist/types/src/{components → containers/ChatContainer}/ChatContainer.d.ts +8 -6
  274. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  275. package/dist/types/src/{components/Chat.stories.d.ts → containers/ChatContainer/ChatContainer.stories.d.ts} +4 -2
  276. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
  277. package/dist/types/src/containers/ChatContainer/index.d.ts +4 -0
  278. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  279. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts +8 -0
  280. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  281. package/dist/types/src/containers/ThreadCompanion/index.d.ts +3 -0
  282. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  283. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts +8 -0
  284. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  285. package/dist/types/src/containers/ThreadSettings/index.d.ts +3 -0
  286. package/dist/types/src/containers/ThreadSettings/index.d.ts.map +1 -0
  287. package/dist/types/src/containers/index.d.ts +8 -0
  288. package/dist/types/src/containers/index.d.ts.map +1 -0
  289. package/dist/types/src/{components/command-extension.d.ts → extensions/command.d.ts} +1 -1
  290. package/dist/types/src/extensions/command.d.ts.map +1 -0
  291. package/dist/types/src/extensions/index.d.ts +1 -0
  292. package/dist/types/src/extensions/index.d.ts.map +1 -1
  293. package/dist/types/src/extensions/threads.d.ts +7 -2
  294. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  295. package/dist/types/src/hooks/analytics.d.ts +1 -2
  296. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  297. package/dist/types/src/index.d.ts +1 -1
  298. package/dist/types/src/index.d.ts.map +1 -1
  299. package/dist/types/src/meta.d.ts +2 -2
  300. package/dist/types/src/meta.d.ts.map +1 -1
  301. package/dist/types/src/operations/add-message.d.ts +5 -0
  302. package/dist/types/src/operations/add-message.d.ts.map +1 -0
  303. package/dist/types/src/operations/create-channel-thread.d.ts +5 -0
  304. package/dist/types/src/operations/create-channel-thread.d.ts.map +1 -0
  305. package/dist/types/src/operations/create-channel.d.ts +5 -0
  306. package/dist/types/src/operations/create-channel.d.ts.map +1 -0
  307. package/dist/types/src/operations/create-proposals.d.ts +5 -0
  308. package/dist/types/src/operations/create-proposals.d.ts.map +1 -0
  309. package/dist/types/src/operations/create.d.ts +5 -0
  310. package/dist/types/src/operations/create.d.ts.map +1 -0
  311. package/dist/types/src/operations/definitions.d.ts +2788 -0
  312. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  313. package/dist/types/src/operations/delete-message.d.ts +5 -0
  314. package/dist/types/src/operations/delete-message.d.ts.map +1 -0
  315. package/dist/types/src/operations/delete.d.ts +5 -0
  316. package/dist/types/src/operations/delete.d.ts.map +1 -0
  317. package/dist/types/src/operations/index.d.ts +4 -0
  318. package/dist/types/src/operations/index.d.ts.map +1 -0
  319. package/dist/types/src/operations/on-create-space.d.ts +5 -0
  320. package/dist/types/src/operations/on-create-space.d.ts.map +1 -0
  321. package/dist/types/src/operations/restore-message.d.ts +5 -0
  322. package/dist/types/src/operations/restore-message.d.ts.map +1 -0
  323. package/dist/types/src/operations/restore.d.ts +5 -0
  324. package/dist/types/src/operations/restore.d.ts.map +1 -0
  325. package/dist/types/src/operations/select.d.ts +5 -0
  326. package/dist/types/src/operations/select.d.ts.map +1 -0
  327. package/dist/types/src/operations/toggle-resolved.d.ts +5 -0
  328. package/dist/types/src/operations/toggle-resolved.d.ts.map +1 -0
  329. package/dist/types/src/{components/testing.d.ts → testing/data.d.ts} +1 -1
  330. package/dist/types/src/testing/data.d.ts.map +1 -0
  331. package/dist/types/src/testing/stories.d.ts +2 -1
  332. package/dist/types/src/testing/stories.d.ts.map +1 -1
  333. package/dist/types/src/translations.d.ts +2 -0
  334. package/dist/types/src/translations.d.ts.map +1 -1
  335. package/dist/types/src/types/Channel.d.ts +707 -12
  336. package/dist/types/src/types/Channel.d.ts.map +1 -1
  337. package/dist/types/src/types/capabilities.d.ts +23 -0
  338. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  339. package/dist/types/src/types/index.d.ts +1 -0
  340. package/dist/types/src/types/index.d.ts.map +1 -1
  341. package/dist/types/src/types/types.d.ts +0 -336
  342. package/dist/types/src/types/types.d.ts.map +1 -1
  343. package/dist/types/tsconfig.tsbuildinfo +1 -1
  344. package/package.json +96 -68
  345. package/src/ThreadPlugin.tsx +73 -106
  346. package/src/blueprints/index.ts +5 -0
  347. package/src/blueprints/thread-blueprint.ts +37 -0
  348. package/src/calls/call-manager.ts +76 -52
  349. package/src/calls/call-swarm-synchronizer.ts +2 -2
  350. package/src/calls/media-manager.ts +1 -1
  351. package/src/calls/util/calls-service.ts +1 -1
  352. package/src/calls/util/task-scheduling.ts +4 -4
  353. package/src/calls-service.stories.tsx +4 -4
  354. package/src/capabilities/app-graph-builder/app-graph-builder.ts +204 -0
  355. package/src/capabilities/app-graph-builder/index.ts +7 -0
  356. package/src/capabilities/blueprint-definition/blueprint-definition.ts +17 -0
  357. package/src/capabilities/blueprint-definition/index.ts +7 -0
  358. package/src/capabilities/call-manager/call-manager.ts +26 -0
  359. package/src/capabilities/call-manager/index.ts +7 -0
  360. package/src/capabilities/index.ts +10 -14
  361. package/src/capabilities/markdown/index.ts +7 -0
  362. package/src/capabilities/markdown/markdown.ts +81 -0
  363. package/src/capabilities/operation-handler/index.ts +11 -0
  364. package/src/capabilities/operation-handler/operation-handler.ts +16 -0
  365. package/src/capabilities/react-root/index.ts +7 -0
  366. package/src/capabilities/react-root/react-root.tsx +20 -0
  367. package/src/capabilities/react-surface/index.ts +7 -0
  368. package/src/capabilities/react-surface/react-surface.tsx +101 -0
  369. package/src/capabilities/settings/index.ts +7 -0
  370. package/src/capabilities/settings/settings.ts +34 -0
  371. package/src/capabilities/state/index.ts +7 -0
  372. package/src/capabilities/state/state.ts +22 -0
  373. package/src/capabilities/undo-mappings/index.ts +7 -0
  374. package/src/capabilities/undo-mappings/undo-mappings.ts +46 -0
  375. package/src/components/Call/Call.tsx +9 -5
  376. package/src/components/Call/Toolbar.tsx +33 -26
  377. package/src/components/CommentsPanel/CommentsPanel.stories.tsx +94 -0
  378. package/src/components/{CommentsContainer.tsx → CommentsPanel/CommentsPanel.tsx} +14 -13
  379. package/src/components/{CommentsThreadContainer.tsx → CommentsPanel/CommentsThread.tsx} +21 -22
  380. package/src/components/CommentsPanel/index.ts +6 -0
  381. package/src/components/Lobby/Lobby.tsx +12 -10
  382. package/src/components/Media/AudioStream.tsx +2 -2
  383. package/src/components/Media/VideoObject.stories.tsx +6 -6
  384. package/src/components/Media/VideoObject.tsx +2 -2
  385. package/src/components/{MessageContainer.tsx → MessagePanel/MessagePanel.tsx} +66 -37
  386. package/src/components/MessagePanel/index.ts +5 -0
  387. package/src/components/Participant/Participant.tsx +32 -19
  388. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +6 -6
  389. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +9 -9
  390. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +6 -6
  391. package/src/components/ResponsiveGrid/{ResponsiveContainer.stories.tsx → ResponsivePanel.stories.tsx} +7 -7
  392. package/src/components/ResponsiveGrid/{ResponsiveContainer.tsx → ResponsivePanel.tsx} +6 -6
  393. package/src/components/ResponsiveGrid/index.ts +1 -1
  394. package/src/components/index.ts +2 -13
  395. package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +4 -4
  396. package/src/containers/CallDebugPanel/index.ts +7 -0
  397. package/src/containers/CallSidebar/CallSidebar.tsx +17 -0
  398. package/src/containers/CallSidebar/index.ts +7 -0
  399. package/src/containers/ChannelContainer/ChannelContainer.stories.tsx +59 -0
  400. package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +88 -71
  401. package/src/containers/ChannelContainer/index.ts +7 -0
  402. package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +20 -18
  403. package/src/containers/ChatContainer/ChatContainer.tsx +130 -0
  404. package/src/containers/ChatContainer/index.ts +8 -0
  405. package/src/containers/ThreadCompanion/ThreadCompanion.tsx +217 -0
  406. package/src/containers/ThreadCompanion/index.ts +7 -0
  407. package/src/containers/ThreadSettings/ThreadSettings.tsx +22 -0
  408. package/src/containers/ThreadSettings/index.ts +7 -0
  409. package/src/containers/index.ts +12 -0
  410. package/src/{components/command-extension.ts → extensions/command.ts} +3 -3
  411. package/src/extensions/index.ts +1 -0
  412. package/src/extensions/threads.ts +76 -41
  413. package/src/hooks/analytics.ts +24 -20
  414. package/src/index.ts +1 -1
  415. package/src/meta.ts +4 -4
  416. package/src/operations/add-message.ts +82 -0
  417. package/src/operations/create-channel-thread.ts +26 -0
  418. package/src/operations/create-channel.ts +21 -0
  419. package/src/operations/create-proposals.ts +49 -0
  420. package/src/operations/create.ts +49 -0
  421. package/src/operations/definitions.ts +177 -0
  422. package/src/operations/delete-message.ts +53 -0
  423. package/src/operations/delete.ts +64 -0
  424. package/src/operations/index.ts +22 -0
  425. package/src/operations/on-create-space.ts +27 -0
  426. package/src/operations/restore-message.ts +38 -0
  427. package/src/operations/restore.ts +38 -0
  428. package/src/operations/select.ts +25 -0
  429. package/src/operations/toggle-resolved.ts +41 -0
  430. package/src/testing/stories.ts +15 -16
  431. package/src/translations.ts +1 -0
  432. package/src/types/Channel.ts +18 -8
  433. package/src/types/capabilities.ts +34 -0
  434. package/src/types/index.ts +1 -0
  435. package/src/types/types.ts +2 -94
  436. package/dist/lib/browser/ChannelContainer-L7MKV7DS.mjs +0 -17
  437. package/dist/lib/browser/ChatContainer-KPY4BAUE.mjs +0 -16
  438. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs +0 -171
  439. package/dist/lib/browser/app-graph-builder-TWJ2UCOZ.mjs.map +0 -7
  440. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs +0 -101
  441. package/dist/lib/browser/blueprint-definition-TQ4JFMZZ.mjs.map +0 -7
  442. package/dist/lib/browser/call-manager-4YFT4XA6.mjs +0 -25
  443. package/dist/lib/browser/call-manager-4YFT4XA6.mjs.map +0 -7
  444. package/dist/lib/browser/chunk-ALZKJOZK.mjs +0 -989
  445. package/dist/lib/browser/chunk-ALZKJOZK.mjs.map +0 -7
  446. package/dist/lib/browser/chunk-ANTFU4JB.mjs +0 -25
  447. package/dist/lib/browser/chunk-ANTFU4JB.mjs.map +0 -7
  448. package/dist/lib/browser/chunk-CFC7LEPD.mjs +0 -18
  449. package/dist/lib/browser/chunk-CFC7LEPD.mjs.map +0 -7
  450. package/dist/lib/browser/chunk-J5LGTIGS.mjs +0 -10
  451. package/dist/lib/browser/chunk-JDJPMI7V.mjs +0 -143
  452. package/dist/lib/browser/chunk-JDJPMI7V.mjs.map +0 -7
  453. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +0 -7
  454. package/dist/lib/browser/chunk-NPT5S6N4.mjs +0 -611
  455. package/dist/lib/browser/chunk-NPT5S6N4.mjs.map +0 -7
  456. package/dist/lib/browser/chunk-QM34EZQK.mjs.map +0 -7
  457. package/dist/lib/browser/chunk-TLOOZTRD.mjs +0 -377
  458. package/dist/lib/browser/chunk-TLOOZTRD.mjs.map +0 -7
  459. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +0 -7
  460. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs +0 -355
  461. package/dist/lib/browser/intent-resolver-G33FT3NO.mjs.map +0 -7
  462. package/dist/lib/browser/markdown-WFZFYJBQ.mjs +0 -172
  463. package/dist/lib/browser/markdown-WFZFYJBQ.mjs.map +0 -7
  464. package/dist/lib/browser/react-root-ED7PHA44.mjs +0 -29
  465. package/dist/lib/browser/react-root-ED7PHA44.mjs.map +0 -7
  466. package/dist/lib/browser/react-surface-AUQQSQQC.mjs +0 -111
  467. package/dist/lib/browser/react-surface-AUQQSQQC.mjs.map +0 -7
  468. package/dist/lib/browser/repair-JFJLEM2O.mjs +0 -35
  469. package/dist/lib/browser/repair-JFJLEM2O.mjs.map +0 -7
  470. package/dist/lib/browser/settings-E6IOLK46.mjs +0 -23
  471. package/dist/lib/browser/settings-E6IOLK46.mjs.map +0 -7
  472. package/dist/lib/browser/state-UYPLBGZJ.mjs +0 -35
  473. package/dist/lib/browser/state-UYPLBGZJ.mjs.map +0 -7
  474. package/dist/lib/node-esm/ChannelContainer-FYONOOZ6.mjs +0 -18
  475. package/dist/lib/node-esm/ChatContainer-TLQG23K7.mjs +0 -17
  476. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs +0 -172
  477. package/dist/lib/node-esm/app-graph-builder-VD6I2V5H.mjs.map +0 -7
  478. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs +0 -102
  479. package/dist/lib/node-esm/blueprint-definition-TSX5HHW7.mjs.map +0 -7
  480. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs +0 -26
  481. package/dist/lib/node-esm/call-manager-UMUXEYH5.mjs.map +0 -7
  482. package/dist/lib/node-esm/chunk-2AEIN5MI.mjs.map +0 -7
  483. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +0 -7
  484. package/dist/lib/node-esm/chunk-AB42KYF3.mjs +0 -990
  485. package/dist/lib/node-esm/chunk-AB42KYF3.mjs.map +0 -7
  486. package/dist/lib/node-esm/chunk-ATNY37UV.mjs +0 -27
  487. package/dist/lib/node-esm/chunk-ATNY37UV.mjs.map +0 -7
  488. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs +0 -378
  489. package/dist/lib/node-esm/chunk-E5HNHFYH.mjs.map +0 -7
  490. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs +0 -612
  491. package/dist/lib/node-esm/chunk-FF3QVPY4.mjs.map +0 -7
  492. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  493. package/dist/lib/node-esm/chunk-P2M364TO.mjs +0 -144
  494. package/dist/lib/node-esm/chunk-P2M364TO.mjs.map +0 -7
  495. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +0 -7
  496. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs +0 -19
  497. package/dist/lib/node-esm/chunk-RT6NRL2I.mjs.map +0 -7
  498. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs +0 -356
  499. package/dist/lib/node-esm/intent-resolver-4PX3WXQG.mjs.map +0 -7
  500. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs +0 -173
  501. package/dist/lib/node-esm/markdown-CSR5MAPZ.mjs.map +0 -7
  502. package/dist/lib/node-esm/react-root-DZN324JA.mjs +0 -30
  503. package/dist/lib/node-esm/react-root-DZN324JA.mjs.map +0 -7
  504. package/dist/lib/node-esm/react-surface-AMVESEF4.mjs +0 -112
  505. package/dist/lib/node-esm/react-surface-AMVESEF4.mjs.map +0 -7
  506. package/dist/lib/node-esm/repair-RMLR24YR.mjs +0 -36
  507. package/dist/lib/node-esm/repair-RMLR24YR.mjs.map +0 -7
  508. package/dist/lib/node-esm/settings-RGZHWDSO.mjs +0 -24
  509. package/dist/lib/node-esm/settings-RGZHWDSO.mjs.map +0 -7
  510. package/dist/lib/node-esm/state-XNWOLBNE.mjs +0 -36
  511. package/dist/lib/node-esm/state-XNWOLBNE.mjs.map +0 -7
  512. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  513. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  514. package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
  515. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
  516. package/dist/types/src/capabilities/call-manager.d.ts +0 -5
  517. package/dist/types/src/capabilities/call-manager.d.ts.map +0 -1
  518. package/dist/types/src/capabilities/capabilities.d.ts +0 -27
  519. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  520. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  521. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  522. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  523. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  524. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  525. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  526. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  527. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  528. package/dist/types/src/capabilities/repair.d.ts +0 -4
  529. package/dist/types/src/capabilities/repair.d.ts.map +0 -1
  530. package/dist/types/src/capabilities/settings.d.ts +0 -4
  531. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  532. package/dist/types/src/capabilities/state.d.ts +0 -7
  533. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  534. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  535. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  536. package/dist/types/src/components/ChannelContainer.d.ts +0 -14
  537. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  538. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  539. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  540. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  541. package/dist/types/src/components/Comments.stories.d.ts.map +0 -1
  542. package/dist/types/src/components/CommentsContainer.d.ts +0 -13
  543. package/dist/types/src/components/CommentsContainer.d.ts.map +0 -1
  544. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +0 -1
  545. package/dist/types/src/components/MessageContainer.d.ts +0 -16
  546. package/dist/types/src/components/MessageContainer.d.ts.map +0 -1
  547. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.d.ts.map +0 -1
  548. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +0 -1
  549. package/dist/types/src/components/ThreadCompanion.d.ts +0 -5
  550. package/dist/types/src/components/ThreadCompanion.d.ts.map +0 -1
  551. package/dist/types/src/components/ThreadSettings.d.ts +0 -6
  552. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  553. package/dist/types/src/components/command-extension.d.ts.map +0 -1
  554. package/dist/types/src/components/testing.d.ts.map +0 -1
  555. package/dist/types/src/functions/create-proposals.d.ts +0 -6
  556. package/dist/types/src/functions/create-proposals.d.ts.map +0 -1
  557. package/dist/types/src/functions/index.d.ts +0 -2
  558. package/dist/types/src/functions/index.d.ts.map +0 -1
  559. package/src/capabilities/app-graph-builder.ts +0 -194
  560. package/src/capabilities/blueprint-definition.ts +0 -38
  561. package/src/capabilities/call-manager.ts +0 -20
  562. package/src/capabilities/capabilities.ts +0 -33
  563. package/src/capabilities/intent-resolver.ts +0 -311
  564. package/src/capabilities/markdown.ts +0 -71
  565. package/src/capabilities/react-root.tsx +0 -17
  566. package/src/capabilities/react-surface.tsx +0 -91
  567. package/src/capabilities/repair.ts +0 -40
  568. package/src/capabilities/settings.ts +0 -19
  569. package/src/capabilities/state.ts +0 -26
  570. package/src/components/CallSidebar.tsx +0 -18
  571. package/src/components/ChannelContainer.stories.tsx +0 -59
  572. package/src/components/ChatContainer.tsx +0 -153
  573. package/src/components/Comments.stories.tsx +0 -90
  574. package/src/components/ThreadCompanion.tsx +0 -188
  575. package/src/components/ThreadSettings.tsx +0 -16
  576. package/src/functions/create-proposals.ts +0 -56
  577. package/src/functions/index.ts +0 -5
  578. /package/dist/lib/browser/{ChannelContainer-L7MKV7DS.mjs.map → ChannelContainer-C25SJD67.mjs.map} +0 -0
  579. /package/dist/lib/browser/{ChatContainer-KPY4BAUE.mjs.map → ChatContainer-VG6JXVMR.mjs.map} +0 -0
  580. /package/dist/lib/browser/{chunk-J5LGTIGS.mjs.map → blueprints/index.mjs.map} +0 -0
  581. /package/dist/lib/{node-esm/ChannelContainer-FYONOOZ6.mjs.map → browser/operations/index.mjs.map} +0 -0
  582. /package/dist/lib/node-esm/{ChatContainer-TLQG23K7.mjs.map → ChannelContainer-R23E4D3N.mjs.map} +0 -0
  583. /package/dist/lib/node-esm/{chunk-HSLMI22Q.mjs.map → ChatContainer-VS2NX3S7.mjs.map} +0 -0
  584. /package/src/{components/testing.ts → testing/data.ts} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ChannelContainer.tsx", "../../../src/components/Call/Call.tsx", "../../../src/components/Media/AudioStream.tsx", "../../../src/components/Media/VideoObject.tsx", "../../../src/components/Participant/Participant.tsx", "../../../src/components/ResponsiveGrid/ResponsiveContainer.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGrid.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGridItem.tsx", "../../../src/components/Participant/ParticipantGrid.tsx", "../../../src/components/Call/Toolbar.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useCapabilities, useCapability } from '@dxos/app-framework/react';\nimport { Context } from '@dxos/context';\nimport { failUndefined } from '@dxos/debug';\nimport { Obj } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { ElevationProvider, Input, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlGroupButton, ControlItemInput } from '@dxos/react-ui-form';\nimport { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ThreadCapabilities } from '../capabilities';\nimport { meta } from '../meta';\nimport { type Channel } from '../types';\n\nimport { Call } from './Call';\nimport ChatContainer from './ChatContainer';\n\n// TODO(burdon): Create Radix style layout.\n\nexport type ChannelContainerProps = {\n channel?: Channel.Channel;\n roomId?: string;\n role?: string;\n fullscreen?: boolean;\n};\n\n/**\n * Renders a call when active, otherwise renders the channel chat.\n */\nexport const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {\n const space = getSpace(channel);\n const callManager = useCapability(ThreadCapabilities.CallManager);\n const attendableId = channel ? Obj.getDXN(channel).toString() : undefined;\n const roomId = _roomId ?? attendableId ?? failUndefined();\n const identity = useIdentity();\n const isNamed = !!identity?.profile?.displayName;\n const joinSound = useSoundEffect('JoinCall');\n const leaveSound = useSoundEffect('LeaveCall');\n\n const extensions = useCapabilities(ThreadCapabilities.CallExtension);\n useEffect(() => {\n const ctx = new Context();\n callManager.left.on(ctx, (roomId) => {\n extensions.forEach((extension) => {\n void extension.onLeave?.(roomId);\n });\n });\n\n callManager.callStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onCallStateUpdated?.(state);\n });\n });\n\n callManager.mediaStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onMediaStateUpdated?.(state);\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [callManager, extensions]);\n\n /**\n * Join the call.\n */\n // TODO(wittjosiah): Show preview before joining?\n const handleJoin = useCallback(async () => {\n if (!roomId || !channel) {\n return;\n }\n\n if (callManager.joined) {\n await callManager.leave();\n }\n\n try {\n void joinSound.play();\n callManager.setRoomId(roomId);\n await callManager.join();\n await Promise.all(extensions.map((extension) => extension.onJoin?.({ channel, roomId })));\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n }\n }, [extensions, channel, roomId]);\n\n /**\n * Leave the call.\n */\n const handleLeave = useCallback(async () => {\n try {\n void leaveSound.play();\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n } finally {\n void callManager.turnAudioOff();\n void callManager.turnVideoOff();\n void callManager.turnScreenshareOff();\n void callManager.leave();\n }\n }, [extensions, roomId]);\n\n const isJoined = callManager.joined && callManager.roomId === roomId;\n\n return (\n <StackItem.Content classNames={isJoined && 'bs-full'} toolbar={!isJoined}>\n {isJoined && !isNamed && <DisplayNameMissing />}\n {isJoined && isNamed && (\n <Call.Root>\n <Call.Grid fullscreen={fullscreen} />\n <Call.Toolbar channel={channel} onLeave={handleLeave} />\n </Call.Root>\n )}\n {!isJoined && channel && channel.defaultThread.target && space && (\n <>\n <ChannelToolbar attendableId={attendableId} role={role} onJoinCall={handleJoin} />\n <ChatContainer space={space} thread={channel.defaultThread.target} classNames='container-max-width' />\n </>\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n\nconst DisplayNameMissing = () => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const [displayName, setDisplayName] = useState('');\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value), []);\n const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);\n\n return (\n <ControlGroup classNames='p-4 place-content-center'>\n <ControlItemInput title={t('display name label')} description={t('display name description')}>\n <Input.TextInput\n value={displayName}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='md:min-is-64'\n />\n </ControlItemInput>\n <ControlGroupButton disabled={!displayName} onClick={handleSave}>\n {t('set display name label')}\n </ControlGroupButton>\n </ControlGroup>\n );\n};\n\nconst useChannelToolbarActions = (onJoinCall?: () => void) => {\n const creator = useMemo(\n () =>\n Atom.make(() => {\n return {\n nodes: [\n createMenuItemGroup('root', {\n label: ['channel toolbar title', { ns: meta.id }],\n }),\n createMenuAction('video-call', () => onJoinCall?.(), {\n label: ['start video call label', { ns: meta.id }],\n icon: 'ph--video-camera--regular',\n type: 'video-call',\n }),\n ],\n edges: [{ source: 'root', target: 'video-call' }],\n };\n }),\n [],\n );\n\n return useMenuActions(creator);\n};\n\ntype ChannelToolbarProps = {\n attendableId?: string;\n role?: string;\n onJoinCall?: () => void;\n};\n\nconst ChannelToolbar = ({ attendableId, role, onJoinCall }: ChannelToolbarProps) => {\n const menuProps = useChannelToolbarActions(onJoinCall);\n\n return (\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menuProps} attendableId={attendableId}>\n <ToolbarMenu textBlockWidth />\n </MenuProvider>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { useCapability } from '@dxos/app-framework/react';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { ThreadCapabilities } from '../../capabilities';\nimport { useDebugMode } from '../../hooks';\nimport { AudioStream } from '../Media';\nimport { ParticipantGrid } from '../Participant';\n\nimport { Toolbar, type ToolbarProps } from './Toolbar';\n\n//\n// Root\n//\n\ntype CallRootProps = PropsWithChildren<ThemedClassName>;\n\nconst CallRoot: FC<CallRootProps> = ({ children }) => {\n return <div className='relative flex flex-col grow overflow-hidden'>{children}</div>;\n};\n\nCallRoot.displayName = 'CallRoot';\n\n//\n// Audio\n//\n\ntype CallAudioProps = {};\n\nconst CallAudio: FC<CallAudioProps> = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return <AudioStream tracks={call.audioTracksToPlay} />;\n};\n\nCallAudio.displayName = 'CallAudio';\n\n//\n// Room\n//\n\ntype CallGridProps = {\n fullscreen?: boolean;\n};\n\nconst CallGrid: FC<CallGridProps> = ({ fullscreen }) => {\n const debug = useDebugMode();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return (\n <div className='grid grow p-4 dark:bg-neutral-900'>\n <ParticipantGrid self={call.self} users={call.users} debug={debug} fullscreen={fullscreen} />\n </div>\n );\n};\n\nCallGrid.displayName = 'CallGrid';\n\n//\n// Toolbar\n//\n\ntype CallToolbarProps = Pick<ToolbarProps, 'channel' | 'onLeave'>;\n\nconst CallToolbar: FC<CallToolbarProps> = (props) => {\n return (\n <div className='absolute bottom-0 left-0 right-0 flex justify-center'>\n <Toolbar isInRoom {...props} />\n </div>\n );\n};\n\nCallToolbar.displayName = 'CallToolbar';\n\n//\n// Export\n//\n\nexport const Call = {\n Root: CallRoot,\n Grid: CallGrid,\n Audio: CallAudio,\n Toolbar: CallToolbar,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, useEffect, useRef } from 'react';\n\nexport type AudioStreamProps = {\n tracks: MediaStreamTrack[];\n};\n\nexport const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {\n const mediaStreamRef = useRef(new MediaStream());\n const ref = useRef<HTMLAudioElement>(null);\n\n useEffect(() => {\n const audio = ref.current;\n if (!audio) {\n return;\n }\n\n const mediaStream = mediaStreamRef.current;\n audio.srcObject = mediaStream;\n }, []);\n\n const resetSrcObject = () => {\n const audio = ref.current;\n const mediaStream = mediaStreamRef.current;\n if (!audio || !mediaStream) {\n return;\n }\n\n // Need to set srcObject again in Chrome and call play() again for Safari\n // https://www.youtube.com/live/Tkx3OGrwVk8?si=K--P_AzNnAGrjraV&t=2533\n // Calling play() this way to make Chrome happy otherwise it throws an error.\n audio.addEventListener('canplay', () => audio.play(), { once: true });\n audio.srcObject = mediaStream;\n };\n\n return (\n <>\n <audio ref={ref} autoPlay />\n {tracks.map((track) => (\n <AudioTrack key={track.id} track={track} mediaStream={mediaStreamRef.current} resetSrcObject={resetSrcObject} />\n ))}\n </>\n );\n};\n\ntype AudioTrackProps = {\n track: MediaStreamTrack;\n mediaStream: MediaStream;\n resetSrcObject: () => void;\n};\n\nconst AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {\n useEffect(() => {\n const currentTrack = track;\n mediaStream.addTrack(currentTrack);\n resetSrcObject();\n return () => {\n mediaStream.removeTrack(currentTrack);\n resetSrcObject();\n };\n }, [track, mediaStream]);\n\n return null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &\n ThemedClassName<{\n videoStream?: MediaStream;\n flip?: boolean;\n // TODO(burdon): If screenshare then contain.\n contain?: boolean;\n }>;\n\nexport const VideoObject = memo(\n forwardRef<HTMLVideoElement, VideoObjectProps>(({ videoStream, classNames, flip, contain, ...rest }, ref) => {\n const internalRef = useRef<HTMLVideoElement | null>(null);\n\n useEffect(() => {\n const video = internalRef.current;\n if (video && videoStream) {\n video.srcObject = videoStream;\n video.setAttribute('autoplay', 'true');\n video.setAttribute('playsinline', 'true');\n }\n }, [videoStream, internalRef.current]);\n\n // NOTE: The video element typically has a max size of 1280x720.\n return (\n <video\n className={mx(\n 'is-full aspect-video',\n flip && 'scale-x-[-1]',\n contain ? 'object-contain' : 'object-cover',\n classNames,\n )}\n ref={(v) => {\n internalRef.current = v;\n if (ref === null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(v);\n } else {\n ref.current = v;\n }\n }}\n {...rest}\n />\n );\n }),\n);\n\nVideoObject.displayName = 'VideoObject';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { memo, useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework/react';\n\nimport { type EncodedTrackName, type UserState } from '../../calls';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { VideoObject } from '../Media';\nimport { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';\n\nexport const SCREENSHARE_SUFFIX = '_screenshare';\n\nexport const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {\n const call = useCapability(ThreadCapabilities.CallManager);\n const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);\n const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);\n\n const pulledVideoStream =\n !isSelf && isScreenshare && user.tracks?.screenshareEnabled\n ? call.getVideoStream(user.tracks?.screenshare as EncodedTrackName)\n : !isSelf && !isScreenshare && user.tracks?.videoEnabled\n ? call.getVideoStream(user.tracks?.video as EncodedTrackName)\n : undefined;\n\n const videoStream = useMemo<MediaStream | undefined>(() => {\n if (isSelf) {\n if (isScreenshare) {\n return call.media.screenshareVideoStream;\n } else if (!isScreenshare) {\n return call.media.videoStream;\n }\n } else if (!isSelf) {\n return pulledVideoStream;\n }\n }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);\n\n return (\n <ResponsiveGridItem\n {...props}\n item={user}\n name={user.name}\n self={isSelf}\n screenshare={!!call.media.screenshareVideoStream}\n video={call.media.videoEnabled}\n mute={user ? !user.tracks?.audioEnabled : false}\n wave={user.raisedHand}\n speaking={user.speaking}\n debug={debug}\n >\n <VideoObject\n videoStream={videoStream}\n flip={isSelf && !isScreenshare}\n contain={!!isScreenshare}\n classNames='rounded-md'\n />\n </ResponsiveGridItem>\n );\n});\n\nParticipant.displayName = 'Participant';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * A container component that maintains the child's aspect ratio while centering its content.\n * The container will scale to fit within its parent's bounds while preserving the aspect ratio.\n *\n * @example\n * <ResponsiveContainer>\n * <VideoObject />\n * </ResponsiveContainer>\n */\nexport const ResponsiveContainer = ({ children }: PropsWithChildren) => {\n return (\n // Outer container that takes full size of parent.\n <div role='none' className='relative flex is-full bs-full'>\n {/* Absolute positioning layer for centering content. */}\n <div role='none' className='absolute inset-0 flex justify-center items-center'>\n {/* Content container that maintains given aspect ratio and proper scaling. */}\n <div role='none' className={mx('max-bs-full max-is-full is-auto bs-auto aspect-video')}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentType, type FC, useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { type Size } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ResponsiveContainer } from './ResponsiveContainer';\nimport { type ResponsiveGridItemProps } from './ResponsiveGridItem';\n\nconst ASPECT_RATIO = 16 / 9;\nconst MIN_GALLERY_HEIGHT = 250;\n\nconst DEFAULT_GAP = 8;\n\nconst maxImageSize = 'is-[2560px] bs-[1440px]';\n\n/**\n * Props for the ResponsiveGrid component.\n */\nexport type ResponsiveGridProps<T extends object = any> = ThemedClassName<{\n /** Cell component. */\n Cell: ComponentType<ResponsiveGridItemProps<T>>;\n\n /** Space between grid items in pixels. */\n gap?: number;\n\n /** Function to get the ID of an item. */\n getId?: (item: T) => string;\n\n /** Array of items to display in the grid. */\n items: T[];\n\n /** ID of the pinned item. */\n pinned?: string;\n\n /** Whether to hide the gallery (unpinned items) when an item is pinned. */\n autoHideGallery?: boolean;\n\n /** Whether the divider is resizable. */\n resizable?: boolean;\n\n /** Debug mode. */\n debug?: boolean;\n\n /** Callback when the pinned item changes. */\n onPinnedChange?: (pinned: string | undefined) => void;\n}>;\n\nconst defaultGetId: ResponsiveGridProps<any>['getId'] = (item: any) => item.id;\n\n/**\n * A responsive grid component that automatically adjusts its layout to optimize space usage.\n * Maintains aspect ratio of items while ensuring uniform gaps between them.\n */\nexport const ResponsiveGrid = <T extends object = any>({\n classNames,\n Cell,\n gap = DEFAULT_GAP,\n getId = defaultGetId,\n items,\n pinned,\n autoHideGallery = false,\n debug,\n onPinnedChange,\n}: ResponsiveGridProps<T>) => {\n const {\n width: containerWidth = 0,\n height: containerHeight = 0,\n ref: containerRef,\n } = useResizeDetector<HTMLDivElement>({ refreshRate: 100 });\n const [dividerHeight, setDividerHeight] = useState<Size>(0);\n useEffect(() => {\n if (containerWidth && containerHeight) {\n const { height } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);\n setDividerHeight(Math.min(height, containerHeight - MIN_GALLERY_HEIGHT));\n }\n }, [containerWidth, containerHeight]);\n\n const pinnedItem = useMemo(() => items.find((item) => getId(item) === pinned), [items, pinned]);\n const mainItems = useMemo(() => items.filter((item) => getId(item) !== pinned), [items, pinned]);\n const hideGallery = autoHideGallery && pinnedItem !== undefined;\n\n //\n // Recalculate optimal layout when container size or items change.\n //\n const [{ time, columns, cellWidth }, setLayout] = useState<Layout>({ time: 0, columns: 0, cellWidth: 0 });\n const { width = 0, height = 0, ref: gridContainerRef } = useResizeDetector<HTMLDivElement>({ refreshRate: 200 });\n useEffect(() => {\n if (containerHeight && width && height) {\n const layout = calculateLayout(width, height, mainItems.length, gap);\n setLayout({ time: Date.now(), ...layout });\n }\n }, [containerHeight, width, height, mainItems.length, gap, pinned]);\n\n //\n // We use the browser to layout invisible divs and then calculate the absolute position of these items,\n // which are animated into position.\n //\n const [bounds, setBounds] = useState<[T, DOMRectBounds][]>([]);\n useLayoutEffect(() => {\n if ((!hideGallery && !gridContainerRef.current) || !containerHeight) {\n return;\n }\n\n // TODO(burdon): Consider directly setting bounds on DOM elementsinstead of state update?\n const t = setTimeout(() => {\n setBounds(\n items\n .filter((item) => !hideGallery || item === pinnedItem)\n .map((item) => {\n invariant(containerRef.current);\n const el = containerRef.current.querySelector(`[data-grid-item=\"${getId(item)}\"]`);\n if (!el) {\n return null;\n }\n\n const bounds = getRelativeBounds(containerRef.current, el as HTMLElement);\n return [item, bounds];\n })\n .filter((item): item is [T, DOMRectBounds] => item !== null),\n );\n });\n\n return () => clearTimeout(t);\n }, [containerHeight, items, pinnedItem, hideGallery, time]);\n\n const handleClick = useCallback(\n (item: T) => onPinnedChange?.(getId(item) === pinned ? undefined : getId(item)),\n [pinned, onPinnedChange],\n );\n\n return (\n <div ref={containerRef} className={mx('relative is-full bs-full', classNames)}>\n {/* Placeholder elements to calculate layout. */}\n <div className='absolute inset-0 flex flex-col grow gap-2'>\n {/* Pinned item. */}\n {pinnedItem && (\n <div\n className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'bs-full')}\n style={hideGallery ? {} : { height: dividerHeight }}\n >\n <SoloItem id={getId(pinnedItem)} debug={debug} />\n </div>\n )}\n\n {/* Gallery. */}\n {!hideGallery && (\n <div\n ref={gridContainerRef}\n className='flex grow-[1] overflow-hidden justify-center items-center'\n style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}\n >\n {mainItems.length === 1 && (\n <div style={{ width: cellWidth }} className='flex bs-full'>\n <SoloItem id={getId(mainItems[0])} debug={debug} />\n </div>\n )}\n\n {mainItems.length > 1 && columns > 0 && (\n <div\n role='grid'\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,\n gap: `${gap}px`,\n }}\n >\n {mainItems.map((item) => (\n <div\n key={getId(item)}\n {...{ 'data-grid-item': getId(item) }}\n className={mx(\n 'aspect-video max-bs-full max-is-full is-auto bs-auto',\n debug && 'border border-primary-500',\n )}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Absolutely positioned items. */}\n <div className={mx(debug && 'opacity-10')}>\n {bounds.map(([item, bounds]) => (\n <Cell\n key={getId(item)}\n classNames='absolute transition-all duration-500'\n item={item}\n style={bounds}\n pinned={getId(item) === pinned}\n onClick={items.length > 1 ? handleClick : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ debug, id }) => {\n return (\n <ResponsiveContainer>\n <div\n {...{ 'data-grid-item': id }}\n className={mx('aspect-video overflow-hidden', debug && 'z-20 border-2 border-primary-500')}\n >\n {/* Maximum size placeholder image forces aspect ratio. */}\n <img alt='placeholder video' className={mx('opacity-0', maxImageSize)} />\n </div>\n </ResponsiveContainer>\n );\n};\n\ntype DOMRectBounds = Pick<DOMRect, 'top' | 'left' | 'width' | 'height'>;\n\n// TODO(burdon): Reconcile with react-ui-gameboard.\nconst getRelativeBounds = (container: HTMLElement, el: HTMLElement): DOMRectBounds => {\n const containerRect = container.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left,\n width: elementRect.width,\n height: elementRect.height,\n };\n};\n\ntype Layout = {\n time?: number;\n columns: number;\n cellWidth: number;\n};\n\n/**\n * Calculates the optimal number of columns for a grid layout that minimizes wasted space.\n * @param containerWidth - Width of the container in pixels.\n * @param containerHeight - Height of the container in pixels.\n * @param count - Total number of items to display.\n * @param gap - Space between items in pixels.\n * @param aspectRatio - Desired aspect ratio of items (width/height).\n * @returns The optimal number of columns.\n */\nconst calculateLayout = (\n containerWidth: number,\n containerHeight: number,\n count: number,\n gap: number,\n aspectRatio = ASPECT_RATIO,\n): Layout => {\n if (count === 0) {\n return { columns: 1, cellWidth: 1 };\n }\n\n let minWastedSpace = Infinity;\n let bestColumns = 1;\n let cellWidth = 0;\n\n // Try different rows counts to find the optimal layout that minimizes wasted space.\n for (let rows = 1; rows <= count; rows++) {\n const cols = Math.ceil(count / rows);\n\n // Calculate available space accounting for gaps.\n const { width: itemWidth, height: itemHeight } = fitItemsToGrid(\n containerWidth,\n containerHeight,\n cols,\n rows,\n aspectRatio,\n gap,\n );\n\n // Calculate total wasted space for this configuration.\n const usedWidth = itemWidth * cols + gap * cols - 1;\n const usedHeight = itemHeight * rows + gap * rows - 1;\n\n // Determine if optimal.\n const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;\n if (wastedSpace < minWastedSpace) {\n minWastedSpace = wastedSpace;\n bestColumns = cols;\n cellWidth = itemWidth;\n }\n }\n\n return { columns: bestColumns, cellWidth };\n};\n\n/**\n * Returns the size of the largest rectangle with the given aspect ration that fits within the grid.\n */\nconst fitItemsToGrid = (\n outerWidth: number,\n outerHeight: number,\n numCols: number,\n numRows: number,\n aspectRatio: number,\n gap: number,\n): { width: number; height: number } => {\n // Calculate available space accounting for gaps.\n const availableWidth = outerWidth - gap * (numCols - 1);\n const availableHeight = outerHeight - gap * (numRows - 1);\n\n // Calculate max dimensions.\n const maxCellWidth = availableWidth / numCols;\n const maxCellHeight = availableHeight / numRows;\n\n // Use fitAspectRatio to get dimensions that fit within max cell size while maintaining the desired aspect ratio\n return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);\n};\n\n/**\n * Returns the size of the largest rectangle the given aspect ratio that fits within the outer rectangle.\n */\nconst fitAspectRatio = (\n outerWidth: number,\n outerHeight: number,\n aspectRatio: number,\n): { width: number; height: number } => {\n if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {\n return { width: 0, height: 0 };\n }\n\n // First try fitting to width.\n let width = outerWidth;\n let height = width / aspectRatio;\n\n // If too tall, fit to height instead.\n if (height > outerHeight) {\n height = outerHeight;\n width = height * aspectRatio;\n }\n\n return { width, height };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type CSSProperties, type PropsWithChildren, useEffect, useState } from 'react';\n\nimport { Icon, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Waveform } from '@dxos/react-ui-sfx';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nexport type ResponsiveGridItemProps<T extends object = any> = PropsWithChildren<\n ThemedClassName<{\n item: T;\n style?: CSSProperties;\n pinned?: boolean;\n name?: string;\n self?: boolean;\n screenshare?: boolean;\n video?: boolean;\n mute?: boolean;\n wave?: boolean;\n speaking?: boolean;\n debug?: boolean;\n onClick?: (item: T) => void;\n }>\n>;\n\n/**\n * Cell container.\n */\nexport const ResponsiveGridItem = <T extends object = any>({\n children,\n classNames,\n item,\n style,\n name,\n self,\n pinned,\n screenshare,\n video,\n mute,\n wave,\n speaking,\n onClick,\n}: ResponsiveGridItemProps<T>) => {\n const { t } = useTranslation(meta.id);\n const iconProps: Record<string, { icon: string; label: string; classNames?: string }> = {\n wave: {\n icon: 'ph--hand-waving--duotone',\n label: t('icon wave'),\n classNames: 'animate-pulse bg-orange-500',\n },\n mute: {\n icon: 'ph--microphone-slash--regular',\n label: t('icon muted'),\n },\n };\n\n const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : undefined;\n\n // Debounce speaking indicator.\n const [speakingIndicator, setSpeakingIndicator] = useState(speaking);\n useEffect(() => {\n if (speaking) {\n setSpeakingIndicator(true);\n } else {\n const timeout = setTimeout(() => {\n setSpeakingIndicator(false);\n }, 1_000);\n return () => clearTimeout(timeout);\n }\n }, [speaking]);\n\n return (\n <div\n className={mx(\n 'relative is-full bs-full group',\n 'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',\n speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',\n classNames,\n )}\n style={style}\n >\n {children}\n\n {/* Action. */}\n {onClick && (\n <div className='z-10 absolute top-1 right-1 flex'>\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}\n iconOnly\n icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}\n size={pinned ? 5 : 4}\n label={pinned ? t('icon unpin') : t('icon pin')}\n onClick={() => onClick?.(item)}\n />\n </div>\n )}\n\n {/* Name. */}\n {name && (\n <div className='z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center'>\n {/* TODO(burdon): Replace with avatar for everyone. */}\n {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}\n {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}\n <div\n className={mx(\n 'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',\n pinned ? 'pli-2' : 'pli-1 text-xs',\n )}\n >\n {name}\n </div>\n </div>\n )}\n\n {/* Activity. */}\n <div className='z-10 absolute bottom-1 left-1 flex'>\n {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||\n (props && (\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}\n icon={props?.icon}\n label={props?.label}\n size={pinned ? 5 : 4}\n iconOnly\n />\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { type UserState } from '../../calls';\nimport { ResponsiveGrid } from '../ResponsiveGrid';\n\nimport { Participant, SCREENSHARE_SUFFIX } from './Participant';\n\nconst getId = (user: UserState): string => user.id!;\n\nexport type ParticipantGridProps = ThemedClassName<{\n self: UserState;\n users: UserState[];\n fullscreen?: boolean;\n debug?: boolean;\n}>;\n\nexport const ParticipantGrid = ({ classNames, self, users, fullscreen, debug }: ParticipantGridProps) => {\n const [pinned, setPinned] = useState<string | undefined>();\n\n const allUsers = useMemo(() => {\n const allUsers: (UserState & { isSelf?: boolean })[] = [];\n users.forEach((user) => {\n if (!user.joined) {\n return;\n }\n\n allUsers.push({ ...user, isSelf: user.id === self.id });\n if (user.tracks?.screenshareEnabled) {\n const screenshare: UserState = {\n ...user,\n id: user.id + SCREENSHARE_SUFFIX,\n tracks: {\n ...user.tracks,\n video: user.tracks.screenshare,\n videoEnabled: user.tracks.screenshareEnabled,\n } as any, // TODO(burdon): Remove cast.\n };\n\n allUsers.push(screenshare);\n }\n });\n\n return allUsers;\n }, [self, users]);\n\n useEffect(() => {\n if (pinned) {\n // Check expanded user is still in call.\n if (!allUsers.find((user) => user.id === pinned)) {\n setPinned(undefined);\n }\n }\n }, [pinned, allUsers]);\n\n // TODO(burdon): Put self last.\n const sortedUsers: UserState[] = allUsers.sort((a, b) => {\n if (a.isSelf) {\n return 1;\n } else if (b.isSelf) {\n return -1;\n } else if (a.tracks?.screenshareEnabled) {\n return -1;\n } else if (b.tracks?.screenshareEnabled) {\n return 1;\n } else {\n return 0;\n }\n });\n\n // TODO(burdon): Show ghost view of user for a second before leaving.\n return (\n <ResponsiveGrid<UserState>\n classNames={classNames}\n Cell={Participant}\n debug={debug}\n getId={getId}\n items={sortedUsers}\n pinned={pinned}\n autoHideGallery={fullscreen}\n onPinnedChange={setPinned}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useAppGraph, useCapability } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { useActions, useNode } from '@dxos/plugin-graph';\nimport {\n Icon,\n IconButton,\n type IconButtonProps,\n Toolbar as NaturalToolbar,\n type ThemedClassName,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { ThreadCapabilities } from '../../capabilities';\nimport { meta } from '../../meta';\nimport { type Channel } from '../../types';\n\nexport type ToolbarProps = ThemedClassName<{\n channel?: Channel.Channel;\n participants?: number;\n autoHideControls?: boolean;\n isInRoom?: boolean;\n onJoin?: () => void;\n onLeave?: () => void;\n}>;\n\n// TODO(wittjosiah): Use ToolbarMenu.\nexport const Toolbar = ({\n classNames,\n channel,\n participants,\n autoHideControls = true,\n onJoin,\n onLeave,\n}: ToolbarProps) => {\n const { t } = useTranslation(meta.id);\n const { graph } = useAppGraph();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n // Channel app graph node.\n const node = useNode(graph, channel && Obj.getDXN(channel).toString());\n const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === 'toolbar');\n\n // Screen sharing.\n const isScreensharing = call.media.screenshareTrack !== undefined;\n const canSharescreen =\n typeof navigator.mediaDevices !== 'undefined' && navigator.mediaDevices.getDisplayMedia !== undefined;\n\n // TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.\n return (\n <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>\n <NaturalToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>\n <ToggleButton\n active={call.media.audioEnabled}\n state={{\n on: {\n icon: 'ph--microphone--regular',\n label: t('mic off'),\n onClick: () => call.turnAudioOff(),\n classNames: 'bg-callActive',\n },\n off: {\n icon: 'ph--microphone-slash--duotone',\n label: t('mic on'),\n onClick: () => call.turnAudioOn(),\n classNames: [call.joined && 'bg-callAlert'],\n },\n }}\n />\n <ToggleButton\n active={call.media.videoEnabled}\n state={{\n on: {\n icon: 'ph--video-camera--regular',\n label: t('camera off'),\n onClick: () => call.turnVideoOff(),\n },\n off: {\n icon: 'ph--video-camera-slash--duotone',\n label: t('camera on'),\n onClick: () => call.turnVideoOn(),\n },\n }}\n />\n\n {(participants !== undefined && (\n <div className='flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued'>\n <Icon icon='ph--users--regular' size={4} />\n <div>{participants}</div>\n </div>\n )) || <NaturalToolbar.Separator variant='gap' />}\n\n {call.joined && (\n <>\n <ToggleButton\n disabled={!canSharescreen}\n active={isScreensharing}\n state={{\n on: {\n icon: 'ph--monitor--regular',\n label: t('screenshare off'),\n onClick: () => call.turnScreenshareOff(),\n },\n off: {\n icon: 'ph--monitor-arrow-up--duotone',\n label: t('screenshare on'),\n onClick: () => call.turnScreenshareOn(),\n },\n }}\n />\n\n {/* Companion actions. */}\n {actions.map((action) => (\n <IconButton\n key={action.id}\n {...defaultButtonProps}\n icon={action.properties.icon}\n label={toLocalizedString(action.properties.label, t)}\n classNames={action.properties.classNames}\n onClick={() => action.data({ node })}\n />\n ))}\n\n <ToggleButton\n active={call.raisedHand}\n state={{\n on: {\n icon: 'ph--hand-waving--regular',\n label: t('lower hand'),\n onClick: () => call.setRaisedHand(false),\n classNames: [call.joined && 'bg-callAlert'],\n },\n off: {\n icon: 'ph--hand-palm--duotone',\n label: t('raise hand'),\n onClick: () => call.setRaisedHand(true),\n },\n }}\n />\n </>\n )}\n {call.joined ? (\n <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />\n ) : (\n <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />\n )}\n </NaturalToolbar.Root>\n </div>\n );\n};\n\nToolbar.displayName = 'MeetingToolbar';\n\ntype ToolbarButtonProps = Pick<IconButtonProps, 'disabled'> & {\n active?: boolean;\n state: {\n on: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n off: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n };\n};\n\nconst defaultButtonProps: Partial<IconButtonProps> = {\n size: 5,\n iconOnly: true,\n};\n\nconst ToggleButton = ({ active, state }: ToolbarButtonProps) => (\n <IconButton\n {...defaultButtonProps}\n classNames={[active ? (state.on.classNames ?? 'bg-callActive') : state.off.classNames]}\n icon={active ? state.on.icon : state.off.icon}\n label={active ? state.on.label : state.off.label}\n onClick={active ? state.on.onClick : state.off.onClick}\n />\n);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAIA,SAASA,YAAY;AACrB,OAAOC,WAA2BC,eAAAA,cAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAEnF,SAASC,iBAAiBC,iBAAAA,sBAAqB;AAC/C,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAC9B,SAASC,OAAAA,YAAW;AACpB,SAASC,WAAW;AACpB,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,mBAAmB;AAC5B,SAASC,mBAAmBC,OAAOC,kBAAAA,uBAAsB;AACzD,SAASC,cAAcC,oBAAoBC,wBAAwB;AACnE,SAASC,cAAcC,aAAaC,kBAAkBC,qBAAqBC,sBAAsB;AACjG,SAASC,sBAAsB;AAC/B,SAASC,iBAAiB;;;;ACf1B,OAAOC,YAAgD;AAEvD,SAASC,iBAAAA,sBAAqB;;;;ACF9B,OAAOC,SAAkBC,WAAWC,cAAc;AAM3C,IAAMC,cAAoC,CAAC,EAAEC,OAAM,MAAE;;;AAC1D,UAAMC,iBAAiBC,OAAO,IAAIC,YAAAA,CAAAA;AAClC,UAAMC,MAAMF,OAAyB,IAAA;AAErCG,cAAU,MAAA;AACR,YAAMC,QAAQF,IAAIG;AAClB,UAAI,CAACD,OAAO;AACV;MACF;AAEA,YAAME,cAAcP,eAAeM;AACnCD,YAAMG,YAAYD;IACpB,GAAG,CAAA,CAAE;AAEL,UAAME,iBAAiB,MAAA;AACrB,YAAMJ,QAAQF,IAAIG;AAClB,YAAMC,cAAcP,eAAeM;AACnC,UAAI,CAACD,SAAS,CAACE,aAAa;AAC1B;MACF;AAKAF,YAAMK,iBAAiB,WAAW,MAAML,MAAMM,KAAI,GAAI;QAAEC,MAAM;MAAK,CAAA;AACnEP,YAAMG,YAAYD;IACpB;AAEA,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACF,SAAAA;MAAMF;MAAUU,UAAAA;QAChBd,OAAOe,IAAI,CAACC,UACX,sBAAA,cAACC,YAAAA;MAAWC,KAAKF,MAAMG;MAAIH;MAAcR,aAAaP,eAAeM;MAASG;;;;;AAItF;AAQA,IAAMO,aAAa,CAAC,EAAED,OAAOR,aAAaE,eAAc,MAAmB;AACzEL,YAAU,MAAA;AACR,UAAMe,eAAeJ;AACrBR,gBAAYa,SAASD,YAAAA;AACrBV,mBAAAA;AACA,WAAO,MAAA;AACLF,kBAAYc,YAAYF,YAAAA;AACxBV,qBAAAA;IACF;EACF,GAAG;IAACM;IAAOR;GAAY;AAEvB,SAAO;AACT;;;;AC9DA,OAAOe,UAAmBC,YAAYC,MAAMC,aAAAA,YAAWC,UAAAA,eAAc;AAGrE,SAASC,UAAU;AAUZ,IAAMC,cAAcC,qBACzBC,2BAA+C,CAAC,EAAEC,aAAaC,YAAYC,MAAMC,SAAS,GAAGC,KAAAA,GAAQC,QAAAA;;;AACnG,UAAMC,cAAcC,QAAgC,IAAA;AAEpDC,IAAAA,WAAU,MAAA;AACR,YAAMC,QAAQH,YAAYI;AAC1B,UAAID,SAAST,aAAa;AACxBS,cAAME,YAAYX;AAClBS,cAAMG,aAAa,YAAY,MAAA;AAC/BH,cAAMG,aAAa,eAAe,MAAA;MACpC;IACF,GAAG;MAACZ;MAAaM,YAAYI;KAAQ;AAGrC,WACE,gBAAAG,OAAA,cAACJ,SAAAA;MACCK,WAAWC,GACT,wBACAb,QAAQ,gBACRC,UAAU,mBAAmB,gBAC7BF,UAAAA;MAEFI,KAAK,CAACW,MAAAA;AACJV,oBAAYI,UAAUM;AACtB,YAAIX,QAAQ,MAAM;AAChB;QACF;AAEA,YAAI,OAAOA,QAAQ,YAAY;AAC7BA,cAAIW,CAAAA;QACN,OAAO;AACLX,cAAIK,UAAUM;QAChB;MACF;MACC,GAAGZ;;;;;AAGV,CAAA,CAAA;AAGFP,YAAYoB,cAAc;;;;ACrD1B,OAAOC,UAASC,QAAAA,OAAMC,WAAAA,gBAAe;AAErC,SAASC,qBAAqB;;;;ACF9B,OAAOC,YAAuC;AAE9C,SAASC,MAAAA,WAAU;AAWZ,IAAMC,sBAAsB,CAAC,EAAEC,SAAQ,MAAqB;;;AACjE;;MAEE,gBAAAC,OAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SAEzB,gBAAAH,OAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SAEzB,gBAAAH,OAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAWC,IAAG,sDAAA;SAC5BL,QAAAA,CAAAA,CAAAA;;;;;AAKX;;;;AC1BA,OAAOM,UAAsCC,aAAaC,aAAAA,YAAWC,iBAAiBC,SAASC,gBAAgB;AAC/G,SAASC,yBAAyB;AAElC,SAASC,iBAAiB;AAG1B,SAASC,MAAAA,WAAU;;AAKnB,IAAMC,eAAe,KAAK;AAC1B,IAAMC,qBAAqB;AAE3B,IAAMC,cAAc;AAEpB,IAAMC,eAAe;AAkCrB,IAAMC,eAAkD,CAACC,SAAcA,KAAKC;AAMrE,IAAMC,iBAAiB,CAAyB,EACrDC,YACAC,MACAC,MAAMR,aACNS,OAAAA,SAAQP,cACRQ,OACAC,QACAC,kBAAkB,OAClBC,OACAC,eAAc,MACS;;;AACvB,UAAM,EACJC,OAAOC,iBAAiB,GACxBC,QAAQC,kBAAkB,GAC1BC,KAAKC,aAAY,IACfC,kBAAkC;MAAEC,aAAa;IAAI,CAAA;AACzD,UAAM,CAACC,eAAeC,gBAAAA,IAAoBC,SAAe,CAAA;AACzDC,IAAAA,WAAU,MAAA;AACR,UAAIV,kBAAkBE,iBAAiB;AACrC,cAAM,EAAED,QAAAA,QAAM,IAAKU,eAAeX,gBAAgBE,iBAAiBpB,YAAAA;AACnE0B,yBAAiBI,KAAKC,IAAIZ,SAAQC,kBAAkBnB,kBAAAA,CAAAA;MACtD;IACF,GAAG;MAACiB;MAAgBE;KAAgB;AAEpC,UAAMY,aAAaC,QAAQ,MAAMrB,MAAMsB,KAAK,CAAC7B,SAASM,OAAMN,IAAAA,MAAUQ,MAAAA,GAAS;MAACD;MAAOC;KAAO;AAC9F,UAAMsB,YAAYF,QAAQ,MAAMrB,MAAMwB,OAAO,CAAC/B,SAASM,OAAMN,IAAAA,MAAUQ,MAAAA,GAAS;MAACD;MAAOC;KAAO;AAC/F,UAAMwB,cAAcvB,mBAAmBkB,eAAeM;AAKtD,UAAM,CAAC,EAAEC,MAAMC,SAASC,UAAS,GAAIC,SAAAA,IAAaf,SAAiB;MAAEY,MAAM;MAAGC,SAAS;MAAGC,WAAW;IAAE,CAAA;AACvG,UAAM,EAAExB,QAAQ,GAAGE,SAAS,GAAGE,KAAKsB,iBAAgB,IAAKpB,kBAAkC;MAAEC,aAAa;IAAI,CAAA;AAC9GI,IAAAA,WAAU,MAAA;AACR,UAAIR,mBAAmBH,SAASE,QAAQ;AACtC,cAAMyB,SAASC,gBAAgB5B,OAAOE,QAAQgB,UAAUW,QAAQpC,GAAAA;AAChEgC,kBAAU;UAAEH,MAAMQ,KAAKC,IAAG;UAAI,GAAGJ;QAAO,CAAA;MAC1C;IACF,GAAG;MAACxB;MAAiBH;MAAOE;MAAQgB,UAAUW;MAAQpC;MAAKG;KAAO;AAMlE,UAAM,CAACoC,QAAQC,SAAAA,IAAavB,SAA+B,CAAA,CAAE;AAC7DwB,oBAAgB,MAAA;AACd,UAAK,CAACd,eAAe,CAACM,iBAAiBS,WAAY,CAAChC,iBAAiB;AACnE;MACF;AAGA,YAAMiC,IAAIC,WAAW,MAAA;AACnBJ,kBACEtC,MACGwB,OAAO,CAAC/B,SAAS,CAACgC,eAAehC,SAAS2B,UAAAA,EAC1CuB,IAAI,CAAClD,SAAAA;AACJmD,oBAAUlC,aAAa8B,SAAO,QAAA;;;;;;;;;AAC9B,gBAAMK,KAAKnC,aAAa8B,QAAQM,cAAc,oBAAoB/C,OAAMN,IAAAA,CAAAA,IAAS;AACjF,cAAI,CAACoD,IAAI;AACP,mBAAO;UACT;AAEA,gBAAMR,UAASU,kBAAkBrC,aAAa8B,SAASK,EAAAA;AACvD,iBAAO;YAACpD;YAAM4C;;QAChB,CAAA,EACCb,OAAO,CAAC/B,SAAqCA,SAAS,IAAA,CAAA;MAE7D,CAAA;AAEA,aAAO,MAAMuD,aAAaP,CAAAA;IAC5B,GAAG;MAACjC;MAAiBR;MAAOoB;MAAYK;MAAaE;KAAK;AAE1D,UAAMsB,cAAcC,YAClB,CAACzD,SAAYW,iBAAiBL,OAAMN,IAAAA,MAAUQ,SAASyB,SAAY3B,OAAMN,IAAAA,CAAAA,GACzE;MAACQ;MAAQG;KAAe;AAG1B,WACE,gBAAA+C,OAAA,cAACC,OAAAA;MAAI3C,KAAKC;MAAc2C,WAAWC,IAAG,4BAA4B1D,UAAAA;OAEhE,gBAAAuD,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAEZjC,cACC,gBAAA+B,OAAA,cAACC,OAAAA;MACCC,WAAWC,IAAG,oEAAoE7B,eAAe,SAAA;MACjG8B,OAAO9B,cAAc,CAAC,IAAI;QAAElB,QAAQM;MAAc;OAElD,gBAAAsC,OAAA,cAACK,UAAAA;MAAS9D,IAAIK,OAAMqB,UAAAA;MAAajB;SAKpC,CAACsB,eACA,gBAAA0B,OAAA,cAACC,OAAAA;MACC3C,KAAKsB;MACLsB,WAAU;MACVE,OAAO9B,cAAc,CAAC,IAAI;QAAEgC,WAAWpE;MAAmB;OAEzDkC,UAAUW,WAAW,KACpB,gBAAAiB,OAAA,cAACC,OAAAA;MAAIG,OAAO;QAAElD,OAAOwB;MAAU;MAAGwB,WAAU;OAC1C,gBAAAF,OAAA,cAACK,UAAAA;MAAS9D,IAAIK,OAAMwB,UAAU,CAAA,CAAE;MAAGpB;SAItCoB,UAAUW,SAAS,KAAKN,UAAU,KACjC,gBAAAuB,OAAA,cAACC,OAAAA;MACCM,MAAK;MACLH,OAAO;QACLI,SAAS;QACTC,qBAAqB,UAAUhC,OAAAA,KAAYC,SAAAA;QAC3C/B,KAAK,GAAGA,GAAAA;MACV;OAECyB,UAAUoB,IAAI,CAAClD,SACd,gBAAA0D,OAAA,cAACC,OAAAA;MACCS,KAAK9D,OAAMN,IAAAA;MACL,kBAAkBM,OAAMN,IAAAA;MAC9B4D,WAAWC,IACT,wDACAnD,SAAS,2BAAA;YAWzB,gBAAAgD,OAAA,cAACC,OAAAA;MAAIC,WAAWC,IAAGnD,SAAS,YAAA;OACzBkC,OAAOM,IAAI,CAAC,CAAClD,MAAM4C,OAAAA,MAClB,gBAAAc,OAAA,cAACtD,MAAAA;MACCgE,KAAK9D,OAAMN,IAAAA;MACXG,YAAW;MACXH;MACA8D,OAAOlB;MACPpC,QAAQF,OAAMN,IAAAA,MAAUQ;MACxB6D,SAAS9D,MAAMkC,SAAS,IAAIe,cAAcvB;;;;;AAMtD;AAEA,IAAM8B,WAAoE,CAAC,EAAErD,OAAOT,GAAE,MAAE;;;AACtF,WACE,gBAAAyD,OAAA,cAACY,qBAAAA,MACC,gBAAAZ,OAAA,cAACC,OAAAA;MACO,kBAAkB1D;MACxB2D,WAAWC,IAAG,gCAAgCnD,SAAS,kCAAA;OAGvD,gBAAAgD,OAAA,cAACa,OAAAA;MAAIC,KAAI;MAAoBZ,WAAWC,IAAG,aAAa/D,YAAAA;;;;;AAIhE;AAKA,IAAMwD,oBAAoB,CAACmB,WAAwBrB,OAAAA;AACjD,QAAMsB,gBAAgBD,UAAUE,sBAAqB;AACrD,QAAMC,cAAcxB,GAAGuB,sBAAqB;AAC5C,SAAO;IACLE,KAAKD,YAAYC,MAAMH,cAAcG;IACrCC,MAAMF,YAAYE,OAAOJ,cAAcI;IACvClE,OAAOgE,YAAYhE;IACnBE,QAAQ8D,YAAY9D;EACtB;AACF;AAiBA,IAAM0B,kBAAkB,CACtB3B,gBACAE,iBACAgE,OACA1E,KACA2E,cAAcrF,iBAAY;AAE1B,MAAIoF,UAAU,GAAG;AACf,WAAO;MAAE5C,SAAS;MAAGC,WAAW;IAAE;EACpC;AAEA,MAAI6C,iBAAiBC;AACrB,MAAIC,cAAc;AAClB,MAAI/C,YAAY;AAGhB,WAASgD,OAAO,GAAGA,QAAQL,OAAOK,QAAQ;AACxC,UAAMC,OAAO5D,KAAK6D,KAAKP,QAAQK,IAAAA;AAG/B,UAAM,EAAExE,OAAO2E,WAAWzE,QAAQ0E,WAAU,IAAKC,eAC/C5E,gBACAE,iBACAsE,MACAD,MACAJ,aACA3E,GAAAA;AAIF,UAAMqF,YAAYH,YAAYF,OAAOhF,MAAMgF,OAAO;AAClD,UAAMM,aAAaH,aAAaJ,OAAO/E,MAAM+E,OAAO;AAGpD,UAAMQ,cAAc/E,iBAAiBE,kBAAkB2E,YAAYC;AACnE,QAAIC,cAAcX,gBAAgB;AAChCA,uBAAiBW;AACjBT,oBAAcE;AACdjD,kBAAYmD;IACd;EACF;AAEA,SAAO;IAAEpD,SAASgD;IAAa/C;EAAU;AAC3C;AAKA,IAAMqD,iBAAiB,CACrBI,YACAC,aACAC,SACAC,SACAhB,aACA3E,QAAAA;AAGA,QAAM4F,iBAAiBJ,aAAaxF,OAAO0F,UAAU;AACrD,QAAMG,kBAAkBJ,cAAczF,OAAO2F,UAAU;AAGvD,QAAMG,eAAeF,iBAAiBF;AACtC,QAAMK,gBAAgBF,kBAAkBF;AAGxC,SAAOxE,eAAe2E,cAAcC,eAAepB,WAAAA;AACrD;AAKA,IAAMxD,iBAAiB,CACrBqE,YACAC,aACAd,gBAAAA;AAEA,MAAIa,cAAc,KAAKC,eAAe,KAAKd,eAAe,GAAG;AAC3D,WAAO;MAAEpE,OAAO;MAAGE,QAAQ;IAAE;EAC/B;AAGA,MAAIF,QAAQiF;AACZ,MAAI/E,SAASF,QAAQoE;AAGrB,MAAIlE,SAASgF,aAAa;AACxBhF,aAASgF;AACTlF,YAAQE,SAASkE;EACnB;AAEA,SAAO;IAAEpE;IAAOE;EAAO;AACzB;;;;AChVA,OAAOuF,UAAqDC,aAAAA,YAAWC,YAAAA,iBAAgB;AAEvF,SAASC,MAAMC,YAAkCC,sBAAsB;AACvE,SAASC,gBAAgB;AACzB,SAASC,qCAAqCC,MAAAA,WAAU;AAwBjD,IAAMC,qBAAqB,CAAyB,EACzDC,UACAC,YACAC,MACAC,OACAC,MACAC,MACAC,QACAC,aACAC,OACAC,MACAC,MACAC,UACAC,QAAO,MACoB;;;AAC3B,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAMC,YAAkF;MACtFP,MAAM;QACJQ,MAAM;QACNC,OAAON,EAAE,WAAA;QACTZ,YAAY;MACd;MACAQ,MAAM;QACJS,MAAM;QACNC,OAAON,EAAE,YAAA;MACX;IACF;AAEA,UAAMO,QAAQV,QAAQ,CAACJ,SAASW,UAAUP,OAAOD,OAAOQ,UAAUR,OAAOE,WAAWM,UAAUN,WAAWU;AAGzG,UAAM,CAACC,mBAAmBC,oBAAAA,IAAwBC,UAASb,QAAAA;AAC3Dc,IAAAA,WAAU,MAAA;AACR,UAAId,UAAU;AACZY,6BAAqB,IAAA;MACvB,OAAO;AACL,cAAMG,UAAUC,WAAW,MAAA;AACzBJ,+BAAqB,KAAA;QACvB,GAAG,GAAA;AACH,eAAO,MAAMK,aAAaF,OAAAA;MAC5B;IACF,GAAG;MAACf;KAAS;AAEb,WACE,gBAAAkB,OAAA,cAACC,OAAAA;MACCC,WAAWC,IACT,kCACA,4FACAV,oBAAoB,sBAAsB,CAACd,SAAS,qBACpDP,UAAAA;MAEFE;OAECH,UAGAY,WACC,gBAAAiB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,OAAA,cAACI,YAAAA;MACChC,YAAY+B,IAAG,wBAAwBE,mCAAAA;MACvCC,UAAAA;MACAjB,MAAMZ,SAAS,mBAAmB;MAClC8B,MAAM9B,SAAS,IAAI;MACnBa,OAAOb,SAASO,EAAE,YAAA,IAAgBA,EAAE,UAAA;MACpCD,SAAS,MAAMA,UAAUV,IAAAA;SAM9BE,QACC,gBAAAyB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAGZxB,eAAe,gBAAAsB,OAAA,cAACQ,MAAAA;MAAKnB,MAAK;MAAyBkB,MAAM9B,SAAS,IAAI;QACvE,gBAAAuB,OAAA,cAACC,OAAAA;MACCC,WAAWC,IACT,4DACA1B,SAAS,UAAU,eAAA;OAGpBF,IAAAA,CAAAA,GAMP,gBAAAyB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACXpB,YAAY,gBAAAkB,OAAA,cAACS,UAAAA;MAASC,QAAAA;MAAOH,MAAM9B,SAAS,IAAI;UAC/Cc,SACC,gBAAAS,OAAA,cAACI,YAAAA;MACChC,YAAY+B,IAAG,wBAAwBZ,OAAOnB,UAAAA;MAC9CiB,MAAME,OAAOF;MACbC,OAAOC,OAAOD;MACdiB,MAAM9B,SAAS,IAAI;MACnB6B,UAAAA;;;;;AAMd;;;AHxHO,IAAMK,qBAAqB;AAE3B,IAAMC,cAAcC,gBAAAA,MAAK,CAAC,EAAEC,MAAMC,MAAMC,OAAO,GAAGC,MAAAA,MAA2C;;;AAClG,UAAMC,OAAOC,cAAcC,mBAAmBC,WAAW;AACzD,UAAMC,SAAkBJ,KAAKK,KAAKC,OAAOC,UAAaV,KAAKS,OAAOC,UAAaV,KAAKS,GAAGE,WAAWR,KAAKK,KAAKC,EAAE;AAC9G,UAAMG,gBAAgBZ,KAAKS,IAAII,SAASjB,kBAAAA;AAExC,UAAMkB,oBACJ,CAACP,UAAUK,iBAAiBZ,KAAKe,QAAQC,qBACrCb,KAAKc,eAAejB,KAAKe,QAAQG,WAAAA,IACjC,CAACX,UAAU,CAACK,iBAAiBZ,KAAKe,QAAQI,eACxChB,KAAKc,eAAejB,KAAKe,QAAQK,KAAAA,IACjCV;AAER,UAAMW,cAAcC,SAAiC,MAAA;AACnD,UAAIf,QAAQ;AACV,YAAIK,eAAe;AACjB,iBAAOT,KAAKoB,MAAMC;QACpB,WAAW,CAACZ,eAAe;AACzB,iBAAOT,KAAKoB,MAAMF;QACpB;MACF,WAAW,CAACd,QAAQ;AAClB,eAAOO;MACT;IACF,GAAG;MAACP;MAAQK;MAAeT,KAAKoB,MAAMF;MAAalB,KAAKoB,MAAMC;MAAwBV;KAAkB;AAExG,WACE,gBAAAW,OAAA,cAACC,oBAAAA;MACE,GAAGxB;MACJH,MAAMC;MACN2B,MAAM3B,KAAK2B;MACXnB,MAAMD;MACNW,aAAa,CAAC,CAACf,KAAKoB,MAAMC;MAC1BJ,OAAOjB,KAAKoB,MAAMJ;MAClBS,MAAM5B,OAAO,CAACA,KAAKe,QAAQc,eAAe;MAC1CC,MAAM9B,KAAK+B;MACXC,UAAUhC,KAAKgC;MACf/B;OAEA,gBAAAwB,OAAA,cAACQ,aAAAA;MACCZ;MACAa,MAAM3B,UAAU,CAACK;MACjBuB,SAAS,CAAC,CAACvB;MACXwB,YAAW;;;;;AAInB,CAAA;AAEAvC,YAAYwC,cAAc;;;;AI1D1B,OAAOC,UAASC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AASpD,IAAMC,QAAQ,CAACC,SAA4BA,KAAKC;AASzC,IAAMC,kBAAkB,CAAC,EAAEC,YAAYC,MAAMC,OAAOC,YAAYC,MAAK,MAAwB;;;AAClG,UAAM,CAACC,QAAQC,SAAAA,IAAaC,UAAAA;AAE5B,UAAMC,WAAWC,SAAQ,MAAA;AACvB,YAAMD,YAAiD,CAAA;AACvDN,YAAMQ,QAAQ,CAACb,SAAAA;AACb,YAAI,CAACA,KAAKc,QAAQ;AAChB;QACF;AAEAH,QAAAA,UAASI,KAAK;UAAE,GAAGf;UAAMgB,QAAQhB,KAAKC,OAAOG,KAAKH;QAAG,CAAA;AACrD,YAAID,KAAKiB,QAAQC,oBAAoB;AACnC,gBAAMC,cAAyB;YAC7B,GAAGnB;YACHC,IAAID,KAAKC,KAAKmB;YACdH,QAAQ;cACN,GAAGjB,KAAKiB;cACRI,OAAOrB,KAAKiB,OAAOE;cACnBG,cAActB,KAAKiB,OAAOC;YAC5B;UACF;AAEAP,UAAAA,UAASI,KAAKI,WAAAA;QAChB;MACF,CAAA;AAEA,aAAOR;IACT,GAAG;MAACP;MAAMC;KAAM;AAEhBkB,IAAAA,WAAU,MAAA;AACR,UAAIf,QAAQ;AAEV,YAAI,CAACG,SAASa,KAAK,CAACxB,SAASA,KAAKC,OAAOO,MAAAA,GAAS;AAChDC,oBAAUgB,MAAAA;QACZ;MACF;IACF,GAAG;MAACjB;MAAQG;KAAS;AAGrB,UAAMe,cAA2Bf,SAASgB,KAAK,CAACC,GAAGC,MAAAA;AACjD,UAAID,EAAEZ,QAAQ;AACZ,eAAO;MACT,WAAWa,EAAEb,QAAQ;AACnB,eAAO;MACT,WAAWY,EAAEX,QAAQC,oBAAoB;AACvC,eAAO;MACT,WAAWW,EAAEZ,QAAQC,oBAAoB;AACvC,eAAO;MACT,OAAO;AACL,eAAO;MACT;IACF,CAAA;AAGA,WACE,gBAAAY,OAAA,cAACC,gBAAAA;MACC5B;MACA6B,MAAMC;MACN1B;MACAR;MACAmC,OAAOR;MACPlB;MACA2B,iBAAiB7B;MACjB8B,gBAAgB3B;;;;;AAGtB;;;;ACpFA,OAAO4B,YAAW;AAElB,SAASC,aAAaC,iBAAAA,sBAAqB;AAC3C,SAASC,WAAW;AACpB,SAASC,YAAYC,eAAe;AACpC,SACEC,QAAAA,OACAC,cAAAA,aAEAC,WAAWC,gBAEXC,mBACAC,kBAAAA,uBACK;AACP,SAASC,uCAAAA,sCAAqCC,MAAAA,WAAU;AAgBjD,IAAMC,UAAU,CAAC,EACtBC,YACAC,SACAC,cACAC,mBAAmB,MACnBC,QACAC,QAAO,MACM;;;AACb,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAM,EAAEC,MAAK,IAAKC,YAAAA;AAClB,UAAMC,OAAOC,eAAcC,mBAAmBC,WAAW;AAGzD,UAAMC,OAAOC,QAAQP,OAAOT,WAAWiB,IAAIC,OAAOlB,OAAAA,EAASmB,SAAQ,CAAA;AACnE,UAAMC,UAAUC,WAAWZ,OAAOM,MAAMP,EAAAA,EAAIc,OAAO,CAACC,WAAWA,OAAOC,WAAWC,gBAAgB,SAAA;AAGjG,UAAMC,kBAAkBf,KAAKgB,MAAMC,qBAAqBC;AACxD,UAAMC,iBACJ,OAAOC,UAAUC,iBAAiB,eAAeD,UAAUC,aAAaC,oBAAoBJ;AAG9F,WACE,gBAAAK,OAAA,cAACC,OAAAA;MAAIC,WAAWC,IAAG,gCAAgCnC,oBAAoBoC,oCAAAA;OACrE,gBAAAJ,OAAA,cAACK,eAAeC,MAAI;MAACzC,YAAY;QAAC;QAA4CA;;OAC5E,gBAAAmC,OAAA,cAACO,cAAAA;MACCC,QAAQ/B,KAAKgB,MAAMgB;MACnBC,OAAO;QACLC,IAAI;UACFC,MAAM;UACNC,OAAO1C,EAAE,SAAA;UACT2C,SAAS,MAAMrC,KAAKsC,aAAY;UAChClD,YAAY;QACd;QACAmD,KAAK;UACHJ,MAAM;UACNC,OAAO1C,EAAE,QAAA;UACT2C,SAAS,MAAMrC,KAAKwC,YAAW;UAC/BpD,YAAY;YAACY,KAAKyC,UAAU;;QAC9B;MACF;QAEF,gBAAAlB,OAAA,cAACO,cAAAA;MACCC,QAAQ/B,KAAKgB,MAAM0B;MACnBT,OAAO;QACLC,IAAI;UACFC,MAAM;UACNC,OAAO1C,EAAE,YAAA;UACT2C,SAAS,MAAMrC,KAAK2C,aAAY;QAClC;QACAJ,KAAK;UACHJ,MAAM;UACNC,OAAO1C,EAAE,WAAA;UACT2C,SAAS,MAAMrC,KAAK4C,YAAW;QACjC;MACF;QAGAtD,iBAAiB4B,UACjB,gBAAAK,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,OAAA,cAACsB,OAAAA;MAAKV,MAAK;MAAqBW,MAAM;QACtC,gBAAAvB,OAAA,cAACC,OAAAA,MAAKlC,YAAAA,CAAAA,KAEJ,gBAAAiC,OAAA,cAACK,eAAemB,WAAS;MAACC,SAAQ;QAEvChD,KAAKyC,UACJ,gBAAAlB,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACO,cAAAA;MACCmB,UAAU,CAAC9B;MACXY,QAAQhB;MACRkB,OAAO;QACLC,IAAI;UACFC,MAAM;UACNC,OAAO1C,EAAE,iBAAA;UACT2C,SAAS,MAAMrC,KAAKkD,mBAAkB;QACxC;QACAX,KAAK;UACHJ,MAAM;UACNC,OAAO1C,EAAE,gBAAA;UACT2C,SAAS,MAAMrC,KAAKmD,kBAAiB;QACvC;MACF;QAID1C,QAAQ2C,IAAI,CAACxC,WACZ,gBAAAW,OAAA,cAAC8B,aAAAA;MACCC,KAAK1C,OAAOf;MACX,GAAG0D;MACJpB,MAAMvB,OAAOC,WAAWsB;MACxBC,OAAOoB,kBAAkB5C,OAAOC,WAAWuB,OAAO1C,CAAAA;MAClDN,YAAYwB,OAAOC,WAAWzB;MAC9BiD,SAAS,MAAMzB,OAAO6C,KAAK;QAAErD;MAAK,CAAA;SAItC,gBAAAmB,OAAA,cAACO,cAAAA;MACCC,QAAQ/B,KAAK0D;MACbzB,OAAO;QACLC,IAAI;UACFC,MAAM;UACNC,OAAO1C,EAAE,YAAA;UACT2C,SAAS,MAAMrC,KAAK2D,cAAc,KAAA;UAClCvE,YAAY;YAACY,KAAKyC,UAAU;;QAC9B;QACAF,KAAK;UACHJ,MAAM;UACNC,OAAO1C,EAAE,YAAA;UACT2C,SAAS,MAAMrC,KAAK2D,cAAc,IAAA;QACpC;MACF;SAIL3D,KAAKyC,SACJ,gBAAAlB,OAAA,cAAC8B,aAAAA;MAAWL,SAAQ;MAAcb,MAAK;MAAuBC,OAAO1C,EAAE,YAAA;MAAe2C,SAAS5C;SAE/F,gBAAA8B,OAAA,cAAC8B,aAAAA;MAAWL,SAAQ;MAAUb,MAAK;MAA8BC,OAAO1C,EAAE,WAAA;MAAc2C,SAAS7C;;;;;AAK3G;AAEAL,QAAQyE,cAAc;AAUtB,IAAML,qBAA+C;EACnDT,MAAM;EACNe,UAAU;AACZ;AAEA,IAAM/B,eAAe,CAAC,EAAEC,QAAQE,MAAK,MAAsB;;;WACzD,gBAAAV,OAAA,cAAC8B,aAAAA;MACE,GAAGE;MACJnE,YAAY;QAAC2C,SAAUE,MAAMC,GAAG9C,cAAc,kBAAmB6C,MAAMM,IAAInD;;MAC3E+C,MAAMJ,SAASE,MAAMC,GAAGC,OAAOF,MAAMM,IAAIJ;MACzCC,OAAOL,SAASE,MAAMC,GAAGE,QAAQH,MAAMM,IAAIH;MAC3CC,SAASN,SAASE,MAAMC,GAAGG,UAAUJ,MAAMM,IAAIF;;;;;;;;AR7JnD,IAAMyB,WAA8B,CAAC,EAAEC,SAAQ,MAAE;;;AAC/C,WAAO,gBAAAC,OAAA,cAACC,OAAAA;MAAIC,WAAU;OAA+CH,QAAAA;;;;AACvE;AAEAD,SAASK,cAAc;AAQvB,IAAMC,YAAgC,MAAA;;;AACpC,UAAMC,OAAOC,eAAcC,mBAAmBC,WAAW;AAEzD,WAAO,gBAAAR,OAAA,cAACS,aAAAA;MAAYC,QAAQL,KAAKM;;;;;AACnC;AAEAP,UAAUD,cAAc;AAUxB,IAAMS,WAA8B,CAAC,EAAEC,WAAU,MAAE;;;AACjD,UAAMC,QAAQC,aAAAA;AACd,UAAMV,OAAOC,eAAcC,mBAAmBC,WAAW;AAEzD,WACE,gBAAAR,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,OAAA,cAACgB,iBAAAA;MAAgBC,MAAMZ,KAAKY;MAAMC,OAAOb,KAAKa;MAAOJ;MAAcD;;;;;AAGzE;AAEAD,SAAST,cAAc;AAQvB,IAAMgB,cAAoC,CAACC,UAAAA;;;AACzC,WACE,gBAAApB,OAAA,cAACC,OAAAA;MAAIC,WAAU;OACb,gBAAAF,OAAA,cAACqB,SAAAA;MAAQC,UAAAA;MAAU,GAAGF;;;;;AAG5B;AAEAD,YAAYhB,cAAc;AAMnB,IAAMoB,OAAO;EAClBC,MAAM1B;EACN2B,MAAMb;EACNc,OAAOtB;EACPiB,SAASF;AACX;;;;ADhDO,IAAMQ,mBAAmB,CAAC,EAAEC,SAASC,QAAQC,SAASC,MAAMC,WAAU,MAAyB;;;AACpG,UAAMC,QAAQC,SAASN,OAAAA;AACvB,UAAMO,cAAcC,eAAcC,mBAAmBC,WAAW;AAChE,UAAMC,eAAeX,UAAUY,KAAIC,OAAOb,OAAAA,EAASc,SAAQ,IAAKC;AAChE,UAAMd,SAASC,WAAWS,gBAAgBK,cAAAA;AAC1C,UAAMC,WAAWC,YAAAA;AACjB,UAAMC,UAAU,CAAC,CAACF,UAAUG,SAASC;AACrC,UAAMC,YAAYC,eAAe,UAAA;AACjC,UAAMC,aAAaD,eAAe,WAAA;AAElC,UAAME,aAAaC,gBAAgBjB,mBAAmBkB,aAAa;AACnEC,IAAAA,WAAU,MAAA;AACR,YAAMC,MAAM,IAAIC,QAAAA,QAAAA;;;;AAChBvB,kBAAYwB,KAAKC,GAAGH,KAAK,CAAC5B,YAAAA;AACxBwB,mBAAWQ,QAAQ,CAACC,cAAAA;AAClB,eAAKA,UAAUC,UAAUlC,OAAAA;QAC3B,CAAA;MACF,CAAA;AAEAM,kBAAY6B,iBAAiBJ,GAAGH,KAAK,CAACQ,UAAAA;AACpCZ,mBAAWQ,QAAQ,CAACC,cAAAA;AAClB,eAAKA,UAAUI,qBAAqBD,KAAAA;QACtC,CAAA;MACF,CAAA;AAEA9B,kBAAYgC,kBAAkBP,GAAGH,KAAK,CAACQ,UAAAA;AACrCZ,mBAAWQ,QAAQ,CAACC,cAAAA;AAClB,eAAKA,UAAUM,sBAAsBH,KAAAA;QACvC,CAAA;MACF,CAAA;AAEA,aAAO,MAAA;AACL,aAAKR,IAAIY,QAAO;MAClB;IACF,GAAG;MAAClC;MAAakB;KAAW;AAM5B,UAAMiB,aAAaC,aAAY,YAAA;AAC7B,UAAI,CAAC1C,UAAU,CAACD,SAAS;AACvB;MACF;AAEA,UAAIO,YAAYqC,QAAQ;AACtB,cAAMrC,YAAYsC,MAAK;MACzB;AAEA,UAAI;AACF,aAAKvB,UAAUwB,KAAI;AACnBvC,oBAAYwC,UAAU9C,MAAAA;AACtB,cAAMM,YAAYyC,KAAI;AACtB,cAAMC,QAAQC,IAAIzB,WAAW0B,IAAI,CAACjB,cAAcA,UAAUkB,SAAS;UAAEpD;UAASC;QAAO,CAAA,CAAA,CAAA;MACvF,SAASoD,KAAK;AAEZC,YAAIC,MAAMF,KAAAA,QAAAA;;;;;;MACZ;IACF,GAAG;MAAC5B;MAAYzB;MAASC;KAAO;AAKhC,UAAMuD,cAAcb,aAAY,YAAA;AAC9B,UAAI;AACF,aAAKnB,WAAWsB,KAAI;MACtB,SAASO,KAAK;AAEZC,YAAIC,MAAMF,KAAAA,QAAAA;;;;;;MACZ,UAAA;AACE,aAAK9C,YAAYkD,aAAY;AAC7B,aAAKlD,YAAYmD,aAAY;AAC7B,aAAKnD,YAAYoD,mBAAkB;AACnC,aAAKpD,YAAYsC,MAAK;MACxB;IACF,GAAG;MAACpB;MAAYxB;KAAO;AAEvB,UAAM2D,WAAWrD,YAAYqC,UAAUrC,YAAYN,WAAWA;AAE9D,WACE,gBAAA4D,QAAA,cAACC,UAAUC,SAAO;MAACC,YAAYJ,YAAY;MAAWK,SAAS,CAACL;OAC7DA,YAAY,CAACzC,WAAW,gBAAA0C,QAAA,cAACK,oBAAAA,IAAAA,GACzBN,YAAYzC,WACX,gBAAA0C,QAAA,cAACM,KAAKC,MAAI,MACR,gBAAAP,QAAA,cAACM,KAAKE,MAAI;MAACjE;QACX,gBAAAyD,QAAA,cAACM,KAAKG,SAAO;MAACtE;MAAkBmC,SAASqB;SAG5C,CAACI,YAAY5D,WAAWA,QAAQuE,cAAcC,UAAUnE,SACvD,gBAAAwD,QAAA,cAAAA,QAAA,UAAA,MACE,gBAAAA,QAAA,cAACY,gBAAAA;MAAe9D;MAA4BR;MAAYuE,YAAYhC;QACpE,gBAAAmB,QAAA,cAACc,uBAAAA;MAActE;MAAcuE,QAAQ5E,QAAQuE,cAAcC;MAAQR,YAAW;;;;;AAKxF;AAEA,IAAA,2BAAejE;AAEf,IAAMmE,qBAAqB,MAAA;;;AACzB,UAAM,EAAEW,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAMC,SAASC,UAAAA;AACf,UAAM,CAAC7D,aAAa8D,cAAAA,IAAkBC,UAAS,EAAA;AAC/C,UAAMC,eAAe1C,aAAY,CAAC2C,UAAyCH,eAAeG,MAAMd,OAAOe,KAAK,GAAG,CAAA,CAAE;AACjH,UAAMC,aAAa7C,aAAY,MAAMsC,OAAOQ,KAAKC,cAAc;MAAErE;IAAY,CAAA,GAAI;MAAC4D;MAAQ5D;KAAY;AAEtG,WACE,gBAAAwC,QAAA,cAAC8B,cAAAA;MAAa3B,YAAW;OACvB,gBAAAH,QAAA,cAAC+B,kBAAAA;MAAiBC,OAAOhB,EAAE,oBAAA;MAAuBiB,aAAajB,EAAE,0BAAA;OAC/D,gBAAAhB,QAAA,cAACkC,MAAMC,WAAS;MACdT,OAAOlE;MACP4E,UAAUZ;MACVa,aAAarB,EAAE,gCAAA;MACfb,YAAW;SAGf,gBAAAH,QAAA,cAACsC,oBAAAA;MAAmBC,UAAU,CAAC/E;MAAagF,SAASb;OAClDX,EAAE,wBAAA,CAAA,CAAA;;;;AAIX;AAEA,IAAMyB,2BAA2B,CAAC5B,eAAAA;AAChC,QAAM6B,UAAUC,SACd,MACEC,KAAKC,KAAK,MAAA;AACR,WAAO;MACLC,OAAO;QACLC,oBAAoB,QAAQ;UAC1BC,OAAO;YAAC;YAAyB;cAAEC,IAAI/B,KAAKC;YAAG;;QACjD,CAAA;QACA+B,iBAAiB,cAAc,MAAMrC,aAAAA,GAAgB;UACnDmC,OAAO;YAAC;YAA0B;cAAEC,IAAI/B,KAAKC;YAAG;;UAChDgC,MAAM;UACNC,MAAM;QACR,CAAA;;MAEFC,OAAO;QAAC;UAAEC,QAAQ;UAAQ3C,QAAQ;QAAa;;IACjD;EACF,CAAA,GACF,CAAA,CAAE;AAGJ,SAAO4C,eAAeb,OAAAA;AACxB;AAQA,IAAM9B,iBAAiB,CAAC,EAAE9D,cAAcR,MAAMuE,WAAU,MAAuB;;;AAC7E,UAAM2C,YAAYf,yBAAyB5B,UAAAA;AAE3C,WACE,gBAAAb,QAAA,cAACyD,mBAAAA;MAAkBC,WAAWpH,SAAS,YAAY,eAAe;OAChE,gBAAA0D,QAAA,cAAC2D,cAAAA;MAAc,GAAGH;MAAW1G;OAC3B,gBAAAkD,QAAA,cAAC4D,aAAAA;MAAYC,gBAAAA;;;;;AAIrB;",
6
- "names": ["Atom", "React", "useCallback", "useEffect", "useMemo", "useState", "useCapabilities", "useCapability", "Context", "failUndefined", "Obj", "log", "useClient", "getSpace", "useIdentity", "ElevationProvider", "Input", "useTranslation", "ControlGroup", "ControlGroupButton", "ControlItemInput", "MenuProvider", "ToolbarMenu", "createMenuAction", "createMenuItemGroup", "useMenuActions", "useSoundEffect", "StackItem", "React", "useCapability", "React", "useEffect", "useRef", "AudioStream", "tracks", "mediaStreamRef", "useRef", "MediaStream", "ref", "useEffect", "audio", "current", "mediaStream", "srcObject", "resetSrcObject", "addEventListener", "play", "once", "autoPlay", "map", "track", "AudioTrack", "key", "id", "currentTrack", "addTrack", "removeTrack", "React", "forwardRef", "memo", "useEffect", "useRef", "mx", "VideoObject", "memo", "forwardRef", "videoStream", "classNames", "flip", "contain", "rest", "ref", "internalRef", "useRef", "useEffect", "video", "current", "srcObject", "setAttribute", "React", "className", "mx", "v", "displayName", "React", "memo", "useMemo", "useCapability", "React", "mx", "ResponsiveContainer", "children", "React", "div", "role", "className", "mx", "React", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useState", "useResizeDetector", "invariant", "mx", "ASPECT_RATIO", "MIN_GALLERY_HEIGHT", "DEFAULT_GAP", "maxImageSize", "defaultGetId", "item", "id", "ResponsiveGrid", "classNames", "Cell", "gap", "getId", "items", "pinned", "autoHideGallery", "debug", "onPinnedChange", "width", "containerWidth", "height", "containerHeight", "ref", "containerRef", "useResizeDetector", "refreshRate", "dividerHeight", "setDividerHeight", "useState", "useEffect", "fitAspectRatio", "Math", "min", "pinnedItem", "useMemo", "find", "mainItems", "filter", "hideGallery", "undefined", "time", "columns", "cellWidth", "setLayout", "gridContainerRef", "layout", "calculateLayout", "length", "Date", "now", "bounds", "setBounds", "useLayoutEffect", "current", "t", "setTimeout", "map", "invariant", "el", "querySelector", "getRelativeBounds", "clearTimeout", "handleClick", "useCallback", "React", "div", "className", "mx", "style", "SoloItem", "minHeight", "role", "display", "gridTemplateColumns", "key", "onClick", "ResponsiveContainer", "img", "alt", "container", "containerRect", "getBoundingClientRect", "elementRect", "top", "left", "count", "aspectRatio", "minWastedSpace", "Infinity", "bestColumns", "rows", "cols", "ceil", "itemWidth", "itemHeight", "fitItemsToGrid", "usedWidth", "usedHeight", "wastedSpace", "outerWidth", "outerHeight", "numCols", "numRows", "availableWidth", "availableHeight", "maxCellWidth", "maxCellHeight", "React", "useEffect", "useState", "Icon", "IconButton", "useTranslation", "Waveform", "groupHoverControlItemWithTransition", "mx", "ResponsiveGridItem", "children", "classNames", "item", "style", "name", "self", "pinned", "screenshare", "video", "mute", "wave", "speaking", "onClick", "t", "useTranslation", "meta", "id", "iconProps", "icon", "label", "props", "undefined", "speakingIndicator", "setSpeakingIndicator", "useState", "useEffect", "timeout", "setTimeout", "clearTimeout", "React", "div", "className", "mx", "IconButton", "groupHoverControlItemWithTransition", "iconOnly", "size", "Icon", "Waveform", "active", "SCREENSHARE_SUFFIX", "Participant", "memo", "item", "user", "debug", "props", "call", "useCapability", "ThreadCapabilities", "CallManager", "isSelf", "self", "id", "undefined", "startsWith", "isScreenshare", "endsWith", "pulledVideoStream", "tracks", "screenshareEnabled", "getVideoStream", "screenshare", "videoEnabled", "video", "videoStream", "useMemo", "media", "screenshareVideoStream", "React", "ResponsiveGridItem", "name", "mute", "audioEnabled", "wave", "raisedHand", "speaking", "VideoObject", "flip", "contain", "classNames", "displayName", "React", "useEffect", "useMemo", "useState", "getId", "user", "id", "ParticipantGrid", "classNames", "self", "users", "fullscreen", "debug", "pinned", "setPinned", "useState", "allUsers", "useMemo", "forEach", "joined", "push", "isSelf", "tracks", "screenshareEnabled", "screenshare", "SCREENSHARE_SUFFIX", "video", "videoEnabled", "useEffect", "find", "undefined", "sortedUsers", "sort", "a", "b", "React", "ResponsiveGrid", "Cell", "Participant", "items", "autoHideGallery", "onPinnedChange", "React", "useAppGraph", "useCapability", "Obj", "useActions", "useNode", "Icon", "IconButton", "Toolbar", "NaturalToolbar", "toLocalizedString", "useTranslation", "groupHoverControlItemWithTransition", "mx", "Toolbar", "classNames", "channel", "participants", "autoHideControls", "onJoin", "onLeave", "t", "useTranslation", "meta", "id", "graph", "useAppGraph", "call", "useCapability", "ThreadCapabilities", "CallManager", "node", "useNode", "Obj", "getDXN", "toString", "actions", "useActions", "filter", "action", "properties", "disposition", "isScreensharing", "media", "screenshareTrack", "undefined", "canSharescreen", "navigator", "mediaDevices", "getDisplayMedia", "React", "div", "className", "mx", "groupHoverControlItemWithTransition", "NaturalToolbar", "Root", "ToggleButton", "active", "audioEnabled", "state", "on", "icon", "label", "onClick", "turnAudioOff", "off", "turnAudioOn", "joined", "videoEnabled", "turnVideoOff", "turnVideoOn", "Icon", "size", "Separator", "variant", "disabled", "turnScreenshareOff", "turnScreenshareOn", "map", "IconButton", "key", "defaultButtonProps", "toLocalizedString", "data", "raisedHand", "setRaisedHand", "displayName", "iconOnly", "CallRoot", "children", "React", "div", "className", "displayName", "CallAudio", "call", "useCapability", "ThreadCapabilities", "CallManager", "AudioStream", "tracks", "audioTracksToPlay", "CallGrid", "fullscreen", "debug", "useDebugMode", "ParticipantGrid", "self", "users", "CallToolbar", "props", "Toolbar", "isInRoom", "Call", "Root", "Grid", "Audio", "ChannelContainer", "channel", "roomId", "_roomId", "role", "fullscreen", "space", "getSpace", "callManager", "useCapability", "ThreadCapabilities", "CallManager", "attendableId", "Obj", "getDXN", "toString", "undefined", "failUndefined", "identity", "useIdentity", "isNamed", "profile", "displayName", "joinSound", "useSoundEffect", "leaveSound", "extensions", "useCapabilities", "CallExtension", "useEffect", "ctx", "Context", "left", "on", "forEach", "extension", "onLeave", "callStateUpdated", "state", "onCallStateUpdated", "mediaStateUpdated", "onMediaStateUpdated", "dispose", "handleJoin", "useCallback", "joined", "leave", "play", "setRoomId", "join", "Promise", "all", "map", "onJoin", "err", "log", "catch", "handleLeave", "turnAudioOff", "turnVideoOff", "turnScreenshareOff", "isJoined", "React", "StackItem", "Content", "classNames", "toolbar", "DisplayNameMissing", "Call", "Root", "Grid", "Toolbar", "defaultThread", "target", "ChannelToolbar", "onJoinCall", "ChatContainer", "thread", "t", "useTranslation", "meta", "id", "client", "useClient", "setDisplayName", "useState", "handleChange", "event", "value", "handleSave", "halo", "updateProfile", "ControlGroup", "ControlItemInput", "title", "description", "Input", "TextInput", "onChange", "placeholder", "ControlGroupButton", "disabled", "onClick", "useChannelToolbarActions", "creator", "useMemo", "Atom", "make", "nodes", "createMenuItemGroup", "label", "ns", "createMenuAction", "icon", "type", "edges", "source", "useMenuActions", "menuProps", "ElevationProvider", "elevation", "MenuProvider", "ToolbarMenu", "textBlockWidth"]
7
- }
@@ -1,27 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
-
3
- // src/capabilities/index.ts
4
- import { lazy } from "@dxos/app-framework";
5
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-VD6I2V5H.mjs"));
6
- var BlueprintDefinition = lazy(() => import("./blueprint-definition-TSX5HHW7.mjs"));
7
- var CallManager = lazy(() => import("./call-manager-UMUXEYH5.mjs"));
8
- var IntentResolver = lazy(() => import("./intent-resolver-4PX3WXQG.mjs"));
9
- var Markdown = lazy(() => import("./markdown-CSR5MAPZ.mjs"));
10
- var ReactRoot = lazy(() => import("./react-root-DZN324JA.mjs"));
11
- var ReactSurface = lazy(() => import("./react-surface-AMVESEF4.mjs"));
12
- var Repair = lazy(() => import("./repair-RMLR24YR.mjs"));
13
- var ThreadSettings = lazy(() => import("./settings-RGZHWDSO.mjs"));
14
- var ThreadState = lazy(() => import("./state-XNWOLBNE.mjs"));
15
-
16
- export {
17
- AppGraphBuilder,
18
- BlueprintDefinition,
19
- CallManager,
20
- IntentResolver,
21
- Markdown,
22
- ReactRoot,
23
- ReactSurface,
24
- Repair,
25
- ThreadState
26
- };
27
- //# sourceMappingURL=chunk-ATNY37UV.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const BlueprintDefinition = lazy(() => import('./blueprint-definition'));\nexport const CallManager = lazy(() => import('./call-manager'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactRoot = lazy(() => import('./react-root'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const Repair = lazy(() => import('./repair'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
- "mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,sBAAsBD,KAAK,MAAM,OAAO,qCAAA,CAAA;AAC9C,IAAME,cAAcF,KAAK,MAAM,OAAO,6BAAA,CAAA;AACtC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMI,WAAWJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMK,YAAYL,KAAK,MAAM,OAAO,2BAAA,CAAA;AACpC,IAAMM,eAAeN,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMO,SAASP,KAAK,MAAM,OAAO,uBAAA,CAAA;AACjC,IAAMQ,iBAAiBR,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMS,cAAcT,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
- "names": ["lazy", "AppGraphBuilder", "lazy", "BlueprintDefinition", "CallManager", "IntentResolver", "Markdown", "ReactRoot", "ReactSurface", "Repair", "ThreadSettings", "ThreadState"]
7
- }
@@ -1,378 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- useOnEditAnalytics,
4
- useStatus
5
- } from "./chunk-PZH2EDU5.mjs";
6
- import {
7
- getMessageMetadata
8
- } from "./chunk-ABUFOZVX.mjs";
9
- import {
10
- meta
11
- } from "./chunk-2AEIN5MI.mjs";
12
-
13
- // src/components/ChatContainer.tsx
14
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
15
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
16
- import { Obj, Ref as Ref2 } from "@dxos/echo";
17
- import { useMembers } from "@dxos/react-client/echo";
18
- import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
19
- import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
20
- import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
21
- import { StackItem } from "@dxos/react-ui-stack";
22
- import { mx as mx3 } from "@dxos/react-ui-theme";
23
- import { MessageTextbox, Thread as ThreadComponent, threadLayout } from "@dxos/react-ui-thread";
24
- import { Message } from "@dxos/types";
25
- import { isNonNullable } from "@dxos/util";
26
-
27
- // src/components/command-extension.ts
28
- import { HighlightStyle, StreamLanguage, syntaxHighlighting } from "@codemirror/language";
29
- import { tags } from "@dxos/react-ui-editor";
30
- import { mx } from "@dxos/react-ui-theme";
31
- var parser = StreamLanguage.define({
32
- startState: () => ({
33
- count: 0
34
- }),
35
- token: (stream, state) => {
36
- state.count++;
37
- if (stream.eatSpace()) {
38
- return null;
39
- }
40
- if (state.count === 1 && stream.match(/^(\/\w+)/)) {
41
- return "tagName";
42
- }
43
- stream.next();
44
- return null;
45
- }
46
- });
47
- var styles = HighlightStyle.define([
48
- {
49
- tag: tags.tagName,
50
- class: mx("dx-tag dx-tag--indigo text-baseText font-medium")
51
- }
52
- ]);
53
- var command = [
54
- parser,
55
- syntaxHighlighting(styles)
56
- ];
57
-
58
- // src/components/MessageContainer.tsx
59
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
60
- import { EditorView } from "@codemirror/view";
61
- import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
62
- import { Surface } from "@dxos/app-framework/react";
63
- import { Ref } from "@dxos/echo";
64
- import { PublicKey } from "@dxos/react-client";
65
- import { useIdentity } from "@dxos/react-client/halo";
66
- import { IconButton, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
67
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
68
- import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
69
- import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
70
- var buttonGroupClassNames = "flex flex-row items-center gap-0.5 pie-2";
71
- var buttonClassNames = "!p-1 transition-opacity";
72
- var MessageContainer = ({ message, members, editable = false, onDelete, onAcceptProposal }) => {
73
- var _effect = _useSignals();
74
- try {
75
- const { t } = useTranslation(meta.id);
76
- 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;
77
- const messageMetadata = getMessageMetadata(message.id, senderIdentity);
78
- const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
79
- const [editing, setEditing] = useState(false);
80
- const handleEdit = useCallback(() => setEditing((editing2) => !editing2), []);
81
- const handleDelete = useCallback(() => onDelete?.(message.id), [
82
- message,
83
- onDelete
84
- ]);
85
- const handleAcceptProposal = useCallback(() => onAcceptProposal?.(message.id), [
86
- message,
87
- onAcceptProposal
88
- ]);
89
- const textBlock = message.blocks.find((block) => block._tag === "text");
90
- const proposalBlock = message.blocks.find((block) => block._tag === "proposal");
91
- const references = message.blocks.filter((block) => block._tag === "reference").map((block) => block.reference);
92
- useOnEditAnalytics(message, textBlock, !!editing);
93
- return /* @__PURE__ */ React.createElement(MessageRoot, {
94
- ...messageMetadata,
95
- classNames: [
96
- hoverableControls,
97
- hoverableFocusedWithinControls
98
- ]
99
- }, /* @__PURE__ */ React.createElement(MessageHeading, {
100
- authorName: messageMetadata.authorName,
101
- timestamp: messageMetadata.timestamp
102
- }, /* @__PURE__ */ React.createElement("div", {
103
- role: "none",
104
- className: buttonGroupClassNames
105
- }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(IconButton, {
106
- "data-testid": editing ? "thread.message.save" : "thread.message.edit",
107
- variant: "ghost",
108
- icon: editing ? "ph--check--regular" : "ph--pencil-simple--regular",
109
- iconOnly: true,
110
- label: t(editing ? "save message label" : "edit message label"),
111
- classNames: [
112
- buttonClassNames,
113
- hoverableControlItem
114
- ],
115
- onClick: handleEdit
116
- }), proposalBlock && onAcceptProposal && /* @__PURE__ */ React.createElement(IconButton, {
117
- "data-testid": "thread.message.accept",
118
- variant: "ghost",
119
- icon: "ph--check--regular",
120
- iconOnly: true,
121
- label: t("accept proposal label"),
122
- classNames: [
123
- buttonClassNames,
124
- hoverableControlItem
125
- ],
126
- onClick: handleAcceptProposal
127
- }), onDelete && /* @__PURE__ */ React.createElement(IconButton, {
128
- "data-testid": "thread.message.delete",
129
- variant: "ghost",
130
- icon: "ph--x--regular",
131
- iconOnly: true,
132
- label: t("delete message label"),
133
- classNames: [
134
- buttonClassNames,
135
- hoverableControlItem
136
- ],
137
- onClick: handleDelete
138
- }))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
139
- block: textBlock,
140
- isAuthor: userIsAuthor,
141
- editing
142
- }), proposalBlock && /* @__PURE__ */ React.createElement(ProposalBlock, {
143
- block: proposalBlock
144
- }), Ref.Array.targets(references).map((reference, index) => /* @__PURE__ */ React.createElement(MessagePart, {
145
- key: index,
146
- part: reference
147
- })));
148
- } finally {
149
- _effect.f();
150
- }
151
- };
152
- var MessagePart = ({ part }) => {
153
- var _effect = _useSignals();
154
- try {
155
- return /* @__PURE__ */ React.createElement(MessageBlockObjectTile, {
156
- subject: part
157
- });
158
- } finally {
159
- _effect.f();
160
- }
161
- };
162
- var TextboxBlock = ({ block, isAuthor, editing }) => {
163
- var _effect = _useSignals();
164
- try {
165
- const { themeMode } = useThemeContext();
166
- const inMemoryContentRef = useRef(block.text);
167
- const handleDocumentChange = useCallback((newState) => {
168
- inMemoryContentRef.current = newState;
169
- }, []);
170
- const saveDocumentChange = useCallback(() => {
171
- block.text = inMemoryContentRef.current;
172
- }, [
173
- block
174
- ]);
175
- useOnTransition(editing, true, false, saveDocumentChange);
176
- const { parentRef, focusAttributes, view } = useTextEditor(() => ({
177
- initialValue: block.text,
178
- extensions: [
179
- createBasicExtensions({
180
- readOnly: !isAuthor || !editing
181
- }),
182
- createThemeExtensions({
183
- themeMode
184
- }),
185
- command,
186
- EditorView.updateListener.of((update) => {
187
- if (update.docChanged) {
188
- handleDocumentChange(update.state.doc.toString());
189
- }
190
- })
191
- ]
192
- }), [
193
- block.text,
194
- editing,
195
- isAuthor,
196
- themeMode,
197
- handleDocumentChange
198
- ]);
199
- useEffect(() => {
200
- editing && view?.focus();
201
- }, [
202
- editing,
203
- view
204
- ]);
205
- return /* @__PURE__ */ React.createElement("div", {
206
- role: "none",
207
- ref: parentRef,
208
- className: "mie-4",
209
- ...focusAttributes
210
- });
211
- } finally {
212
- _effect.f();
213
- }
214
- };
215
- var ProposalBlock = ({ block }) => {
216
- var _effect = _useSignals();
217
- try {
218
- return /* @__PURE__ */ React.createElement("div", {
219
- role: "none",
220
- className: "mie-4 italic"
221
- }, block.text);
222
- } finally {
223
- _effect.f();
224
- }
225
- };
226
- var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedRef) => {
227
- var _effect = _useSignals();
228
- try {
229
- let title = subject.name ?? subject.title ?? subject.type ?? "Object";
230
- if (typeof title !== "string") {
231
- title = title?.content ?? "";
232
- }
233
- return /* @__PURE__ */ React.createElement("div", {
234
- role: "group",
235
- className: mx2("grid col-span-3 plb-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
236
- ref: forwardedRef
237
- }, /* @__PURE__ */ React.createElement(Surface, {
238
- role: "card",
239
- limit: 1,
240
- data: {
241
- subject
242
- },
243
- fallback: title
244
- }));
245
- } finally {
246
- _effect.f();
247
- }
248
- });
249
-
250
- // src/components/ChatContainer.tsx
251
- var ChatHeading = ({ attendableId }) => {
252
- var _effect = _useSignals2();
253
- try {
254
- const { t } = useTranslation2(meta.id);
255
- return /* @__PURE__ */ React2.createElement("div", {
256
- role: "none",
257
- className: "flex items-center"
258
- }, /* @__PURE__ */ React2.createElement(StackItem.SigilButton, {
259
- attendableId
260
- }, /* @__PURE__ */ React2.createElement(Icon, {
261
- icon: "ph--chat--regular",
262
- size: 5
263
- })), /* @__PURE__ */ React2.createElement(StackItem.HeadingLabel, {
264
- attendableId
265
- }, t("chat heading")));
266
- } finally {
267
- _effect.f();
268
- }
269
- };
270
- var ChatContainer = ({ classNames, space, thread, context, current, autoFocusTextbox }) => {
271
- var _effect = _useSignals2();
272
- try {
273
- const { t } = useTranslation2(meta.id);
274
- const id = Obj.getDXN(thread).toString();
275
- const identity = useIdentity2();
276
- const members = useMembers(space?.key);
277
- const activity = useStatus(space, id);
278
- const [_count, _setCount] = useState2(0);
279
- const rerenderEditor = () => _setCount((count) => count + 1);
280
- const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
281
- const threadScrollRef = useRef2(null);
282
- const { themeMode } = useThemeContext2();
283
- const textboxMetadata = getMessageMetadata(id, identity);
284
- const messageRef = useRef2("");
285
- const extensions = useMemo(() => [
286
- createBasicExtensions2({
287
- placeholder: t("message placeholder")
288
- }),
289
- createThemeExtensions2({
290
- themeMode
291
- }),
292
- listener({
293
- onChange: ({ text }) => messageRef.current = text
294
- }),
295
- command
296
- ], [
297
- themeMode,
298
- _count
299
- ]);
300
- const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
301
- behavior,
302
- block: "end"
303
- }), 10);
304
- useLayoutEffect(() => {
305
- scrollToEnd("instant");
306
- }, []);
307
- const handleCreate = () => {
308
- if (!messageRef.current?.length) {
309
- return false;
310
- }
311
- thread.messages.push(Ref2.make(Obj.make(Message.Message, {
312
- created: (/* @__PURE__ */ new Date()).toISOString(),
313
- sender: {
314
- identityDid: identity.did
315
- },
316
- blocks: [
317
- {
318
- _tag: "text",
319
- text: messageRef.current
320
- }
321
- ],
322
- properties: context ? {
323
- context: Ref2.make(context)
324
- } : void 0
325
- })));
326
- messageRef.current = "";
327
- setAutoFocus(true);
328
- scrollToEnd("smooth");
329
- rerenderEditor();
330
- return true;
331
- };
332
- return /* @__PURE__ */ React2.createElement(ThreadComponent.Root, {
333
- current,
334
- id,
335
- classNames: [
336
- "bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden",
337
- "transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0",
338
- classNames
339
- ]
340
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
341
- classNames: "col-span-2"
342
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, {
343
- classNames: "overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]"
344
- }, /* @__PURE__ */ React2.createElement("div", {
345
- role: "none",
346
- className: mx3(threadLayout, "place-self-end")
347
- }, thread.messages.map((message) => message.target).filter(isNonNullable).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
348
- key: message.id,
349
- message,
350
- members
351
- }))), /* @__PURE__ */ React2.createElement("div", {
352
- role: "none",
353
- className: "bs-px -mbs-px",
354
- ref: threadScrollRef
355
- }), /* @__PURE__ */ React2.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React2.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React2.createElement(MessageTextbox, {
356
- extensions,
357
- autoFocus,
358
- onSend: handleCreate,
359
- ...textboxMetadata
360
- }), /* @__PURE__ */ React2.createElement(ThreadComponent.Status, {
361
- activity
362
- }, t("activity message")));
363
- } finally {
364
- _effect.f();
365
- }
366
- };
367
- var ChatContainer_default = ChatContainer;
368
-
369
- export {
370
- command,
371
- buttonGroupClassNames,
372
- buttonClassNames,
373
- MessageContainer,
374
- ChatHeading,
375
- ChatContainer,
376
- ChatContainer_default
377
- };
378
- //# sourceMappingURL=chunk-E5HNHFYH.mjs.map