@dxos/plugin-thread 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (289) hide show
  1. package/dist/lib/browser/ChannelContainer-MX5ABVGC.mjs +16 -0
  2. package/dist/lib/browser/ChatContainer-7F5Y6GXJ.mjs +15 -0
  3. package/dist/lib/browser/{app-graph-builder-FHAOPO57.mjs → app-graph-builder-HNYLII5E.mjs} +31 -32
  4. package/dist/lib/browser/app-graph-builder-HNYLII5E.mjs.map +7 -0
  5. package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs +104 -0
  6. package/dist/lib/browser/blueprint-definition-6BKYTMJS.mjs.map +7 -0
  7. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs → call-manager-MAXQLMMS.mjs} +7 -7
  8. package/dist/lib/browser/{call-manager-EW2QC6Q4.mjs.map → call-manager-MAXQLMMS.mjs.map} +1 -1
  9. package/dist/lib/browser/chunk-BBTXGRIR.mjs +18 -0
  10. package/dist/lib/browser/chunk-BBTXGRIR.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-J26C57ZY.mjs → chunk-BQWQFTWT.mjs} +165 -101
  12. package/dist/lib/browser/chunk-BQWQFTWT.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-GERVMFQW.mjs → chunk-CP7E2HRE.mjs} +2 -2
  14. package/dist/lib/browser/chunk-CP7E2HRE.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-H63NDV62.mjs → chunk-FR6MEAZI.mjs} +18 -17
  16. package/dist/lib/browser/chunk-FR6MEAZI.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-TQJYDFBU.mjs → chunk-INQVAYPN.mjs} +40 -37
  18. package/dist/lib/browser/chunk-INQVAYPN.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-KEXJGF2R.mjs → chunk-ISCHODBV.mjs} +53 -3
  20. package/dist/lib/browser/chunk-ISCHODBV.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-K2DUJRFJ.mjs +27 -0
  22. package/dist/lib/browser/chunk-K2DUJRFJ.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-2P3GVRHP.mjs → chunk-KOBXMDCI.mjs} +68 -67
  24. package/dist/lib/browser/chunk-KOBXMDCI.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-NMJEVD36.mjs +168 -0
  26. package/dist/lib/browser/chunk-NMJEVD36.mjs.map +7 -0
  27. package/dist/lib/browser/chunk-OOUDK7Q7.mjs +23 -0
  28. package/dist/lib/browser/chunk-OOUDK7Q7.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-TUSBPMNU.mjs → chunk-ZCW3NSDZ.mjs} +274 -374
  30. package/dist/lib/browser/chunk-ZCW3NSDZ.mjs.map +7 -0
  31. package/dist/lib/browser/index.mjs +42 -42
  32. package/dist/lib/browser/index.mjs.map +3 -3
  33. package/dist/lib/browser/{intent-resolver-IB5GYU2D.mjs → intent-resolver-BOUT4WGY.mjs} +32 -99
  34. package/dist/lib/browser/intent-resolver-BOUT4WGY.mjs.map +7 -0
  35. package/dist/lib/browser/{markdown-Z677YORA.mjs → markdown-74EUSQGV.mjs} +24 -22
  36. package/dist/lib/browser/markdown-74EUSQGV.mjs.map +7 -0
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/react-root-BVG7B2LW.mjs +28 -0
  39. package/dist/lib/browser/react-root-BVG7B2LW.mjs.map +7 -0
  40. package/dist/lib/browser/{react-surface-X2VB6P37.mjs → react-surface-BCD5ODQ6.mjs} +37 -36
  41. package/dist/lib/browser/react-surface-BCD5ODQ6.mjs.map +7 -0
  42. package/dist/lib/browser/{settings-GRKEID73.mjs → settings-LGQUZITB.mjs} +5 -5
  43. package/dist/lib/browser/{settings-GRKEID73.mjs.map → settings-LGQUZITB.mjs.map} +1 -1
  44. package/dist/lib/browser/{state-2T4KDWBX.mjs → state-36REWXO5.mjs} +5 -5
  45. package/dist/lib/browser/{state-2T4KDWBX.mjs.map → state-36REWXO5.mjs.map} +1 -1
  46. package/dist/lib/browser/types/index.mjs +7 -9
  47. package/dist/lib/node-esm/ChannelContainer-2JJJ3IDK.mjs +17 -0
  48. package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs → ChatContainer-C526R4DI.mjs} +6 -6
  49. package/dist/lib/node-esm/{app-graph-builder-XEYWX5FC.mjs → app-graph-builder-SOCKP4ST.mjs} +31 -32
  50. package/dist/lib/node-esm/app-graph-builder-SOCKP4ST.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs +105 -0
  52. package/dist/lib/node-esm/blueprint-definition-6LEAWSC7.mjs.map +7 -0
  53. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs → call-manager-LC4OS2KD.mjs} +7 -7
  54. package/dist/lib/node-esm/{call-manager-N3KASRDQ.mjs.map → call-manager-LC4OS2KD.mjs.map} +1 -1
  55. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs +25 -0
  56. package/dist/lib/node-esm/chunk-5DLH4MWN.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-JR7KESLL.mjs → chunk-7KZWZS2U.mjs} +274 -374
  58. package/dist/lib/node-esm/chunk-7KZWZS2U.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-57XR3LEF.mjs → chunk-ABUFOZVX.mjs} +2 -2
  60. package/dist/lib/node-esm/chunk-ABUFOZVX.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-CCE5LHBE.mjs → chunk-JF7THR7F.mjs} +40 -37
  62. package/dist/lib/node-esm/chunk-JF7THR7F.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-NNKKNW57.mjs → chunk-JJW6YMLC.mjs} +165 -101
  64. package/dist/lib/node-esm/chunk-JJW6YMLC.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-CTZ75IFK.mjs → chunk-PZH2EDU5.mjs} +68 -67
  66. package/dist/lib/node-esm/chunk-PZH2EDU5.mjs.map +7 -0
  67. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs +169 -0
  68. package/dist/lib/node-esm/chunk-TJKM5JZT.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-UHZQTPXU.mjs → chunk-TWKGDFCS.mjs} +18 -17
  70. package/dist/lib/node-esm/chunk-TWKGDFCS.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-S3D7DTBF.mjs → chunk-VBI32FGI.mjs} +53 -3
  72. package/dist/lib/node-esm/chunk-VBI32FGI.mjs.map +7 -0
  73. package/dist/lib/node-esm/chunk-XI45H4IV.mjs +28 -0
  74. package/dist/lib/node-esm/chunk-XI45H4IV.mjs.map +7 -0
  75. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs +19 -0
  76. package/dist/lib/node-esm/chunk-ZQAGII7M.mjs.map +7 -0
  77. package/dist/lib/node-esm/index.mjs +42 -42
  78. package/dist/lib/node-esm/index.mjs.map +3 -3
  79. package/dist/lib/node-esm/{intent-resolver-VIMI5VLH.mjs → intent-resolver-45PLIFCJ.mjs} +32 -99
  80. package/dist/lib/node-esm/intent-resolver-45PLIFCJ.mjs.map +7 -0
  81. package/dist/lib/node-esm/{markdown-FL4IXLRP.mjs → markdown-566XXB55.mjs} +24 -22
  82. package/dist/lib/node-esm/markdown-566XXB55.mjs.map +7 -0
  83. package/dist/lib/node-esm/meta.json +1 -1
  84. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs +29 -0
  85. package/dist/lib/node-esm/react-root-DCY6DKLC.mjs.map +7 -0
  86. package/dist/lib/node-esm/{react-surface-OLN3XNND.mjs → react-surface-WZH7OAO3.mjs} +37 -36
  87. package/dist/lib/node-esm/react-surface-WZH7OAO3.mjs.map +7 -0
  88. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs → settings-WKLJSP6R.mjs} +5 -5
  89. package/dist/lib/node-esm/{settings-F2ODVNNW.mjs.map → settings-WKLJSP6R.mjs.map} +1 -1
  90. package/dist/lib/node-esm/{state-62TQKQVB.mjs → state-X3W67GTL.mjs} +5 -5
  91. package/dist/lib/node-esm/{state-62TQKQVB.mjs.map → state-X3W67GTL.mjs.map} +1 -1
  92. package/dist/lib/node-esm/types/index.mjs +7 -9
  93. package/dist/types/src/ThreadPlugin.d.ts +1 -1
  94. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  95. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  96. package/dist/types/src/calls/types.d.ts.map +1 -1
  97. package/dist/types/src/calls/util/calls-service.d.ts +2 -0
  98. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  99. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  100. package/dist/types/src/calls-service.stories.d.ts +0 -1
  101. package/dist/types/src/calls-service.stories.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  104. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  106. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/index.d.ts +1 -1
  108. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/components/Call/Toolbar.d.ts +2 -2
  113. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  114. package/dist/types/src/components/CallDebugPanel.d.ts +7 -0
  115. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  116. package/dist/types/src/components/ChannelContainer.d.ts +2 -2
  117. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  118. package/dist/types/src/components/ChannelContainer.stories.d.ts +75 -9
  119. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  120. package/dist/types/src/components/Chat.stories.d.ts +75 -7
  121. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatContainer.d.ts +6 -5
  123. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/Comments.stories.d.ts +4 -3
  125. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  126. package/dist/types/src/components/CommentsContainer.d.ts +2 -2
  127. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  128. package/dist/types/src/components/CommentsThreadContainer.d.ts +8 -8
  129. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/Media/VideoObject.d.ts +2 -2
  131. package/dist/types/src/components/Media/VideoObject.d.ts.map +1 -1
  132. package/dist/types/src/components/Media/VideoObject.stories.d.ts +5 -3
  133. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/MessageContainer.d.ts +2 -2
  135. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  136. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +5 -3
  137. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +5 -3
  139. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  140. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  141. package/dist/types/src/components/ThreadCompanion.d.ts +5 -0
  142. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -0
  143. package/dist/types/src/components/ThreadSettings.d.ts +1 -1
  144. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  145. package/dist/types/src/components/index.d.ts +3 -3
  146. package/dist/types/src/components/index.d.ts.map +1 -1
  147. package/dist/types/src/components/testing.d.ts +3 -3
  148. package/dist/types/src/components/testing.d.ts.map +1 -1
  149. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  150. package/dist/types/src/functions/create-proposals.d.ts +6 -0
  151. package/dist/types/src/functions/create-proposals.d.ts.map +1 -0
  152. package/dist/types/src/functions/index.d.ts +2 -0
  153. package/dist/types/src/functions/index.d.ts.map +1 -0
  154. package/dist/types/src/hooks/analytics.d.ts +2 -2
  155. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  156. package/dist/types/src/hooks/index.d.ts +2 -2
  157. package/dist/types/src/hooks/index.d.ts.map +1 -1
  158. package/dist/types/src/hooks/useVideoStreamTrack.d.ts +1 -1
  159. package/dist/types/src/hooks/useVideoStreamTrack.d.ts.map +1 -1
  160. package/dist/types/src/meta.d.ts +1 -2
  161. package/dist/types/src/meta.d.ts.map +1 -1
  162. package/dist/types/src/testing/stories.d.ts.map +1 -1
  163. package/dist/types/src/translations.d.ts +74 -7
  164. package/dist/types/src/translations.d.ts.map +1 -1
  165. package/dist/types/src/types/Channel.d.ts +16 -0
  166. package/dist/types/src/types/Channel.d.ts.map +1 -0
  167. package/dist/types/src/types/{schema.d.ts → Thread.d.ts} +18 -28
  168. package/dist/types/src/types/Thread.d.ts.map +1 -0
  169. package/dist/types/src/types/index.d.ts +2 -1
  170. package/dist/types/src/types/index.d.ts.map +1 -1
  171. package/dist/types/src/types/types.d.ts +31 -117
  172. package/dist/types/src/types/types.d.ts.map +1 -1
  173. package/dist/types/tsconfig.tsbuildinfo +1 -1
  174. package/package.json +64 -60
  175. package/src/ThreadPlugin.tsx +139 -132
  176. package/src/calls/call-manager.ts +1 -1
  177. package/src/calls/media-manager.ts +11 -7
  178. package/src/calls/types.ts +7 -3
  179. package/src/calls/util/calls-service.ts +12 -7
  180. package/src/calls/util/stub-media-streams.ts +61 -3
  181. package/src/calls-service.stories.tsx +2 -5
  182. package/src/capabilities/app-graph-builder.ts +41 -30
  183. package/src/capabilities/blueprint-definition.ts +38 -0
  184. package/src/capabilities/capabilities.ts +7 -7
  185. package/src/capabilities/index.ts +1 -1
  186. package/src/capabilities/intent-resolver.ts +22 -60
  187. package/src/capabilities/markdown.ts +5 -3
  188. package/src/capabilities/react-root.tsx +2 -2
  189. package/src/capabilities/react-surface.tsx +24 -23
  190. package/src/components/Call/Call.tsx +1 -1
  191. package/src/components/Call/Toolbar.tsx +9 -9
  192. package/src/components/CallDebugPanel.tsx +112 -55
  193. package/src/components/CallSidebar.tsx +1 -1
  194. package/src/components/ChannelContainer.stories.tsx +10 -10
  195. package/src/components/ChannelContainer.tsx +19 -15
  196. package/src/components/Chat.stories.tsx +14 -19
  197. package/src/components/ChatContainer.tsx +30 -21
  198. package/src/components/Comments.stories.tsx +12 -17
  199. package/src/components/CommentsContainer.tsx +6 -7
  200. package/src/components/CommentsThreadContainer.tsx +32 -27
  201. package/src/components/Lobby/Lobby.tsx +1 -1
  202. package/src/components/Media/VideoObject.stories.tsx +12 -7
  203. package/src/components/Media/VideoObject.tsx +1 -1
  204. package/src/components/MessageContainer.tsx +6 -6
  205. package/src/components/Participant/Participant.tsx +1 -1
  206. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -4
  207. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  208. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -5
  209. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  210. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -2
  211. package/src/components/{ThreadComplementary.tsx → ThreadCompanion.tsx} +41 -34
  212. package/src/components/ThreadSettings.tsx +4 -5
  213. package/src/components/index.ts +4 -4
  214. package/src/components/testing.ts +8 -8
  215. package/src/extensions/threads.ts +25 -16
  216. package/src/functions/create-proposals.ts +58 -0
  217. package/src/functions/index.ts +5 -0
  218. package/src/hooks/analytics.ts +4 -7
  219. package/src/hooks/index.ts +3 -2
  220. package/src/hooks/useVideoStreamTrack.tsx +1 -1
  221. package/src/meta.ts +9 -5
  222. package/src/testing/stories.ts +3 -6
  223. package/src/translations.ts +6 -4
  224. package/src/types/Channel.ts +27 -0
  225. package/src/types/Thread.ts +26 -0
  226. package/src/types/index.ts +2 -1
  227. package/src/types/types.ts +19 -27
  228. package/src/typings/peermetrics-webrtc-stats.d.ts +17 -1
  229. package/src/util.ts +1 -1
  230. package/dist/lib/browser/ChannelContainer-GHDNEZT2.mjs +0 -16
  231. package/dist/lib/browser/ChatContainer-42ALOWUA.mjs +0 -15
  232. package/dist/lib/browser/app-graph-builder-FHAOPO57.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-2I277V52.mjs +0 -23
  234. package/dist/lib/browser/chunk-2I277V52.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-2P3GVRHP.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-4APCDRSH.mjs +0 -18
  237. package/dist/lib/browser/chunk-4APCDRSH.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-EV4JWI7L.mjs +0 -17
  239. package/dist/lib/browser/chunk-EV4JWI7L.mjs.map +0 -7
  240. package/dist/lib/browser/chunk-GERVMFQW.mjs.map +0 -7
  241. package/dist/lib/browser/chunk-H63NDV62.mjs.map +0 -7
  242. package/dist/lib/browser/chunk-J26C57ZY.mjs.map +0 -7
  243. package/dist/lib/browser/chunk-KEXJGF2R.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-KTWYVC5X.mjs +0 -147
  245. package/dist/lib/browser/chunk-KTWYVC5X.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-TQJYDFBU.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-TUSBPMNU.mjs.map +0 -7
  248. package/dist/lib/browser/intent-resolver-IB5GYU2D.mjs.map +0 -7
  249. package/dist/lib/browser/markdown-Z677YORA.mjs.map +0 -7
  250. package/dist/lib/browser/react-root-PTTTW2MO.mjs +0 -28
  251. package/dist/lib/browser/react-root-PTTTW2MO.mjs.map +0 -7
  252. package/dist/lib/browser/react-surface-X2VB6P37.mjs.map +0 -7
  253. package/dist/lib/browser/toolkit-KUPIIFC6.mjs +0 -80
  254. package/dist/lib/browser/toolkit-KUPIIFC6.mjs.map +0 -7
  255. package/dist/lib/node-esm/ChannelContainer-D5E2S6AI.mjs +0 -17
  256. package/dist/lib/node-esm/app-graph-builder-XEYWX5FC.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-57XR3LEF.mjs.map +0 -7
  258. package/dist/lib/node-esm/chunk-CCE5LHBE.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-CTZ75IFK.mjs.map +0 -7
  260. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs +0 -19
  261. package/dist/lib/node-esm/chunk-GRLRWTRU.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-JR7KESLL.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-NNKKNW57.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-P6E247RF.mjs +0 -148
  265. package/dist/lib/node-esm/chunk-P6E247RF.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs +0 -19
  267. package/dist/lib/node-esm/chunk-PYTVBN5J.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-S3D7DTBF.mjs.map +0 -7
  269. package/dist/lib/node-esm/chunk-UHZQTPXU.mjs.map +0 -7
  270. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs +0 -25
  271. package/dist/lib/node-esm/chunk-UJ2QNRLS.mjs.map +0 -7
  272. package/dist/lib/node-esm/intent-resolver-VIMI5VLH.mjs.map +0 -7
  273. package/dist/lib/node-esm/markdown-FL4IXLRP.mjs.map +0 -7
  274. package/dist/lib/node-esm/react-root-2HHRRUME.mjs +0 -29
  275. package/dist/lib/node-esm/react-root-2HHRRUME.mjs.map +0 -7
  276. package/dist/lib/node-esm/react-surface-OLN3XNND.mjs.map +0 -7
  277. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs +0 -81
  278. package/dist/lib/node-esm/toolkit-KZIS7G36.mjs.map +0 -7
  279. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  280. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  281. package/dist/types/src/components/ThreadComplementary.d.ts +0 -5
  282. package/dist/types/src/components/ThreadComplementary.d.ts.map +0 -1
  283. package/dist/types/src/types/schema.d.ts.map +0 -1
  284. package/src/capabilities/toolkit.ts +0 -78
  285. package/src/types/schema.ts +0 -33
  286. /package/dist/lib/browser/{ChannelContainer-GHDNEZT2.mjs.map → ChannelContainer-MX5ABVGC.mjs.map} +0 -0
  287. /package/dist/lib/browser/{ChatContainer-42ALOWUA.mjs.map → ChatContainer-7F5Y6GXJ.mjs.map} +0 -0
  288. /package/dist/lib/node-esm/{ChannelContainer-D5E2S6AI.mjs.map → ChannelContainer-2JJJ3IDK.mjs.map} +0 -0
  289. /package/dist/lib/node-esm/{ChatContainer-4EGHKHIU.mjs.map → ChatContainer-C526R4DI.mjs.map} +0 -0
@@ -5,25 +5,25 @@
5
5
  import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
6
6
 
7
7
  import { Obj, Ref } from '@dxos/echo';
8
- import { type Space, fullyQualifiedId, useMembers } from '@dxos/react-client/echo';
8
+ import { type Space, useMembers } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
- import { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';
10
+ import { Icon, ScrollArea, type ThemedClassName, useThemeContext, useTranslation } from '@dxos/react-ui';
11
11
  import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
12
  import { StackItem } from '@dxos/react-ui-stack';
13
13
  import { mx } from '@dxos/react-ui-theme';
14
14
  import {
15
15
  MessageTextbox,
16
16
  type MessageTextboxProps,
17
- Thread,
17
+ Thread as ThreadComponent,
18
18
  type ThreadRootProps,
19
19
  threadLayout,
20
20
  } from '@dxos/react-ui-thread';
21
- import { DataType } from '@dxos/schema';
21
+ import { Message } from '@dxos/types';
22
22
  import { isNonNullable } from '@dxos/util';
23
23
 
24
24
  import { useStatus } from '../hooks';
25
25
  import { meta } from '../meta';
26
- import { type ThreadType } from '../types';
26
+ import { type Thread } from '../types';
27
27
  import { getMessageMetadata } from '../util';
28
28
 
29
29
  import { command } from './command-extension';
@@ -41,16 +41,25 @@ export const ChatHeading = ({ attendableId }: { attendableId?: string }) => {
41
41
  );
42
42
  };
43
43
 
44
- export type ChatContainerProps = {
45
- space: Space;
46
- thread: ThreadType;
47
- context?: Obj.Any;
48
- autoFocusTextbox?: boolean;
49
- } & Pick<ThreadRootProps, 'current'>;
50
-
51
- export const ChatContainer = ({ space, thread, context, current, autoFocusTextbox }: ChatContainerProps) => {
44
+ export type ChatContainerProps = ThemedClassName<
45
+ {
46
+ space: Space;
47
+ thread: Thread.Thread;
48
+ context?: Obj.Any;
49
+ autoFocusTextbox?: boolean;
50
+ } & Pick<ThreadRootProps, 'current'>
51
+ >;
52
+
53
+ export const ChatContainer = ({
54
+ classNames,
55
+ space,
56
+ thread,
57
+ context,
58
+ current,
59
+ autoFocusTextbox,
60
+ }: ChatContainerProps) => {
52
61
  const { t } = useTranslation(meta.id);
53
- const id = fullyQualifiedId(thread);
62
+ const id = Obj.getDXN(thread).toString();
54
63
  const identity = useIdentity()!;
55
64
  const members = useMembers(space?.key);
56
65
  const activity = useStatus(space, id);
@@ -67,7 +76,7 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
67
76
  () => [
68
77
  createBasicExtensions({ placeholder: t('message placeholder') }),
69
78
  createThemeExtensions({ themeMode }),
70
- listener({ onChange: (text) => (messageRef.current = text) }),
79
+ listener({ onChange: ({ text }) => (messageRef.current = text) }),
71
80
  command,
72
81
  ],
73
82
  [themeMode, _count],
@@ -92,7 +101,7 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
92
101
 
93
102
  thread.messages.push(
94
103
  Ref.make(
95
- Obj.make(DataType.Message, {
104
+ Obj.make(Message.Message, {
96
105
  created: new Date().toISOString(),
97
106
  sender: { identityDid: identity.did },
98
107
  blocks: [{ _tag: 'text', text: messageRef.current }],
@@ -109,12 +118,13 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
109
118
  };
110
119
 
111
120
  return (
112
- <Thread.Root
121
+ <ThreadComponent.Root
113
122
  current={current}
114
123
  id={id}
115
124
  classNames={[
116
- 'bs-full is-full max-is-prose mli-auto grid-rows-[1fr_min-content_min-content] overflow-hidden',
125
+ 'bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden',
117
126
  'transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0',
127
+ classNames,
118
128
  ]}
119
129
  >
120
130
  <ScrollArea.Root classNames='col-span-2'>
@@ -136,9 +146,8 @@ export const ChatContainer = ({ space, thread, context, current, autoFocusTextbo
136
146
  </ScrollArea.Root>
137
147
 
138
148
  <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />
139
-
140
- <Thread.Status activity={activity}>{t('activity message')}</Thread.Status>
141
- </Thread.Root>
149
+ <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>
150
+ </ThreadComponent.Root>
142
151
  );
143
152
  };
144
153
 
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
@@ -15,11 +13,12 @@ import { faker } from '@dxos/random';
15
13
  import { useQuery, useSpace } from '@dxos/react-client/echo';
16
14
  import { useIdentity } from '@dxos/react-client/halo';
17
15
  import { useAsyncEffect } from '@dxos/react-ui';
18
- import { AnchoredTo, DataType } from '@dxos/schema';
19
- import { layoutCentered, render, withLayout, withTheme } from '@dxos/storybook-utils';
16
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
17
+ import { render } from '@dxos/storybook-utils';
18
+ import { AnchoredTo, Message } from '@dxos/types';
20
19
 
21
20
  import { translations } from '../translations';
22
- import { ThreadType } from '../types';
21
+ import { Thread } from '../types';
23
22
 
24
23
  import { CommentsContainer } from './CommentsContainer';
25
24
  import { createCommentThread, createProposalThread } from './testing';
@@ -29,7 +28,7 @@ faker.seed(1);
29
28
  const DefaultStory = () => {
30
29
  const identity = useIdentity();
31
30
  const space = useSpace();
32
- const anchors = useQuery(space, Query.type(AnchoredTo));
31
+ const anchors = useQuery(space, Query.type(AnchoredTo.AnchoredTo));
33
32
 
34
33
  useAsyncEffect(async () => {
35
34
  if (identity && space) {
@@ -37,14 +36,14 @@ const DefaultStory = () => {
37
36
  const thread1 = space.db.add(createCommentThread(identity));
38
37
  const thread2 = space.db.add(createProposalThread(identity));
39
38
  space.db.add(
40
- Relation.make(AnchoredTo, {
39
+ Relation.make(AnchoredTo.AnchoredTo, {
41
40
  [Relation.Source]: thread1,
42
41
  [Relation.Target]: object,
43
42
  anchor: 'test',
44
43
  }),
45
44
  );
46
45
  space.db.add(
47
- Relation.make(AnchoredTo, {
46
+ Relation.make(AnchoredTo.AnchoredTo, {
48
47
  [Relation.Source]: thread2,
49
48
  [Relation.Target]: object,
50
49
  anchor: 'test',
@@ -57,11 +56,7 @@ const DefaultStory = () => {
57
56
  return null;
58
57
  }
59
58
 
60
- return (
61
- <div className='w-[30rem] overflow-y-auto bg-baseSurface'>
62
- <CommentsContainer anchors={anchors} onThreadDelete={console.log} onAcceptProposal={console.log} />
63
- </div>
64
- );
59
+ return <CommentsContainer anchors={anchors} onThreadDelete={console.log} onAcceptProposal={console.log} />;
65
60
  };
66
61
 
67
62
  const meta = {
@@ -69,14 +64,14 @@ const meta = {
69
64
  render: render(DefaultStory),
70
65
  decorators: [
71
66
  withTheme,
72
- withLayout({ fullscreen: true, classNames: layoutCentered }),
73
- // TODO(wittjosiah): This shouldn't depend on app framework. Should use withClientProvider instead.
74
- // Currently this is required due to useOnEditAnalytics.
67
+ withLayout({ container: 'column', scroll: true }),
68
+ // TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
69
+ // Currently this is required due to useOnEditAnalytics.
75
70
  withPluginManager({
76
71
  plugins: [
77
72
  IntentPlugin(),
78
73
  ClientPlugin({
79
- types: [DataType.Message, ThreadType, AnchoredTo],
74
+ types: [Message.Message, Thread.Thread, AnchoredTo.AnchoredTo],
80
75
  onClientInitialized: async ({ client }) => {
81
76
  await client.halo.createIdentity();
82
77
  },
@@ -4,18 +4,17 @@
4
4
 
5
5
  import React, { useEffect } from 'react';
6
6
 
7
- import { Relation } from '@dxos/echo';
8
- import { fullyQualifiedId } from '@dxos/react-client/echo';
7
+ import { Obj, Relation } from '@dxos/echo';
9
8
  import { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';
10
- import { type AnchoredTo } from '@dxos/schema';
9
+ import { type AnchoredTo } from '@dxos/types';
11
10
 
12
11
  import { meta } from '../meta';
13
- import { type ThreadType } from '../types';
12
+ import { type Thread } from '../types';
14
13
 
15
14
  import { CommentsThreadContainer, type CommentsThreadContainerProps } from './CommentsThreadContainer';
16
15
 
17
16
  export type CommentsContainerProps = Omit<CommentsThreadContainerProps, 'anchor' | 'current'> & {
18
- anchors: AnchoredTo[];
17
+ anchors: AnchoredTo.AnchoredTo[];
19
18
  currentId?: string;
20
19
  showResolvedThreads?: boolean;
21
20
  };
@@ -63,8 +62,8 @@ export const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...
63
62
  return (
64
63
  <div>
65
64
  {filteredAnchors.map((anchor) => {
66
- const thread = Relation.getSource(anchor) as ThreadType;
67
- const threadId = fullyQualifiedId(thread);
65
+ const thread = Relation.getSource(anchor) as Thread.Thread;
66
+ const threadId = Obj.getDXN(thread).toString();
68
67
  return <CommentsThreadContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;
69
68
  })}
70
69
  </div>
@@ -4,32 +4,37 @@
4
4
 
5
5
  import React, { useCallback, useMemo, useRef, useState } from 'react';
6
6
 
7
- import { Ref, Relation } from '@dxos/echo';
8
- import { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';
7
+ import { Obj, Ref, Relation } from '@dxos/echo';
8
+ import { getSpace, useMembers } from '@dxos/react-client/echo';
9
9
  import { useIdentity } from '@dxos/react-client/halo';
10
10
  import { IconButton, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';
11
11
  import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
12
12
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
13
- import { MessageTextbox, type MessageTextboxProps, Thread, type ThreadRootProps } from '@dxos/react-ui-thread';
14
- import { type AnchoredTo } from '@dxos/schema';
13
+ import {
14
+ MessageTextbox,
15
+ type MessageTextboxProps,
16
+ Thread as ThreadComponent,
17
+ type ThreadRootProps,
18
+ } from '@dxos/react-ui-thread';
19
+ import { type AnchoredTo } from '@dxos/types';
15
20
  import { isNonNullable } from '@dxos/util';
16
21
 
17
22
  import { useStatus } from '../hooks';
18
23
  import { meta } from '../meta';
19
- import { type ThreadType } from '../types';
24
+ import { type Thread } from '../types';
20
25
  import { getMessageMetadata } from '../util';
21
26
 
22
27
  import { command } from './command-extension';
23
28
  import { MessageContainer, buttonClassNames, buttonGroupClassNames } from './MessageContainer';
24
29
 
25
30
  export type CommentsThreadContainerProps = {
26
- anchor: AnchoredTo;
27
- onAttend?: (anchor: AnchoredTo) => void;
28
- onComment?: (anchor: AnchoredTo, message: string) => void;
29
- onResolve?: (anchor: AnchoredTo) => void;
30
- onMessageDelete?: (anchor: AnchoredTo, messageId: string) => void;
31
- onThreadDelete?: (anchor: AnchoredTo) => void;
32
- onAcceptProposal?: (anchor: AnchoredTo, messageId: string) => void;
31
+ anchor: AnchoredTo.AnchoredTo;
32
+ onAttend?: (anchor: AnchoredTo.AnchoredTo) => void;
33
+ onComment?: (anchor: AnchoredTo.AnchoredTo, message: string) => void;
34
+ onResolve?: (anchor: AnchoredTo.AnchoredTo) => void;
35
+ onMessageDelete?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;
36
+ onThreadDelete?: (anchor: AnchoredTo.AnchoredTo) => void;
37
+ onAcceptProposal?: (anchor: AnchoredTo.AnchoredTo, messageId: string) => void;
33
38
  } & Pick<ThreadRootProps, 'current'>;
34
39
 
35
40
  export const CommentsThreadContainer = ({
@@ -42,29 +47,29 @@ export const CommentsThreadContainer = ({
42
47
  onThreadDelete,
43
48
  onAcceptProposal,
44
49
  }: CommentsThreadContainerProps) => {
50
+ const { themeMode } = useThemeContext();
45
51
  const { t } = useTranslation(meta.id);
46
52
  const identity = useIdentity()!;
47
53
  const space = getSpace(anchor);
48
54
  const members = useMembers(space?.key);
49
55
  const detached = !anchor.anchor;
50
- const thread = Relation.getSource(anchor) as ThreadType;
51
- const activity = useStatus(space, fullyQualifiedId(thread));
56
+ const thread = Relation.getSource(anchor) as Thread.Thread;
57
+ const activity = useStatus(space, Obj.getDXN(thread).toString());
52
58
  const threadScrollRef = useRef<HTMLDivElement | null>(null);
53
- const { themeMode } = useThemeContext();
54
59
 
55
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
60
+ const textboxMetadata = getMessageMetadata(Obj.getDXN(thread).toString(), identity);
61
+
56
62
  // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
57
- const [_count, _setCount] = useState(0);
58
- const rerenderEditor = () => _setCount((count) => count + 1);
63
+ const [state, setState] = useState({});
59
64
  const messageRef = useRef('');
60
65
  const extensions = useMemo(
61
66
  () => [
62
67
  createBasicExtensions({ placeholder: t('message placeholder') }),
63
68
  createThemeExtensions({ themeMode }),
64
- listener({ onChange: (text) => (messageRef.current = text) }),
69
+ listener({ onChange: ({ text }) => (messageRef.current = text) }),
65
70
  command,
66
71
  ],
67
- [_count],
72
+ [state],
68
73
  );
69
74
 
70
75
  // TODO(thure): Factor out.
@@ -85,14 +90,14 @@ export const CommentsThreadContainer = ({
85
90
  onComment?.(anchor, messageRef.current);
86
91
  messageRef.current = '';
87
92
  scrollToEnd('instant');
88
- rerenderEditor();
93
+ setState({});
89
94
 
90
95
  return true;
91
96
  }, [anchor, identity]);
92
97
 
93
98
  return (
94
- <Thread.Root
95
- id={fullyQualifiedId(thread)}
99
+ <ThreadComponent.Root
100
+ id={Obj.getDXN(thread).toString()}
96
101
  classNames='pbs-2 border-be border-subduedSeparator last:border-none'
97
102
  current={current}
98
103
  onClickCapture={handleAttend}
@@ -108,10 +113,10 @@ export const CommentsThreadContainer = ({
108
113
  >
109
114
  {detached ? (
110
115
  <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
111
- <Thread.Header detached>{thread.name}</Thread.Header>
116
+ <ThreadComponent.Header detached>{thread.name}</ThreadComponent.Header>
112
117
  </Tooltip.Trigger>
113
118
  ) : (
114
- <Thread.Header>{thread.name}</Thread.Header>
119
+ <ThreadComponent.Header>{thread.name}</ThreadComponent.Header>
115
120
  )}
116
121
  <div role='none' className={buttonGroupClassNames}>
117
122
  {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}
@@ -160,10 +165,10 @@ export const CommentsThreadContainer = ({
160
165
  */}
161
166
  <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />
162
167
 
163
- <Thread.Status activity={activity}>{t('activity message')}</Thread.Status>
168
+ <ThreadComponent.Status activity={activity}>{t('activity message')}</ThreadComponent.Status>
164
169
 
165
170
  {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}
166
171
  <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
167
- </Thread.Root>
172
+ </ThreadComponent.Root>
168
173
  );
169
174
  };
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { type FC, type PropsWithChildren, useEffect, useState } from 'react';
6
6
 
7
- import { useCapability } from '@dxos/app-framework';
7
+ import { useCapability } from '@dxos/app-framework/react';
8
8
  import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
9
  import { mx } from '@dxos/react-ui-theme';
10
10
 
@@ -2,15 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useEffect, useState } from 'react';
9
7
 
10
8
  import { scheduleTask } from '@dxos/async';
11
9
  import { Context } from '@dxos/context';
12
10
  import { log } from '@dxos/log';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
11
+ import { withTheme } from '@dxos/react-ui/testing';
14
12
 
15
13
  import { getUserMediaTrack } from '../../calls';
16
14
  import { ResponsiveContainer } from '../ResponsiveGrid';
@@ -23,9 +21,13 @@ const DefaultStory = (props: VideoObjectProps) => {
23
21
  useEffect(() => {
24
22
  const ctx = new Context();
25
23
  scheduleTask(ctx, async () => {
26
- const stream = new MediaStream();
27
- stream.addTrack(await getUserMediaTrack('videoinput'));
28
- setVideoStream(stream);
24
+ try {
25
+ const stream = new MediaStream();
26
+ stream.addTrack(await getUserMediaTrack('videoinput'));
27
+ setVideoStream(stream);
28
+ } catch (err) {
29
+ log.catch(err);
30
+ }
29
31
  });
30
32
 
31
33
  return () => {
@@ -45,7 +47,10 @@ const meta = {
45
47
  title: 'plugins/plugin-thread/VideoObject',
46
48
  component: VideoObject,
47
49
  render: DefaultStory,
48
- decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
50
+ decorators: [withTheme],
51
+ parameters: {
52
+ layout: 'fullscreen',
53
+ },
49
54
  };
50
55
 
51
56
  export default meta;
@@ -32,7 +32,7 @@ export const VideoObject = memo(
32
32
  return (
33
33
  <video
34
34
  className={mx(
35
- 'w-full aspect-video',
35
+ 'is-full aspect-video',
36
36
  flip && 'scale-x-[-1]',
37
37
  contain ? 'object-contain' : 'object-cover',
38
38
  classNames,
@@ -5,7 +5,7 @@
5
5
  import { EditorView } from '@codemirror/view';
6
6
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
7
7
 
8
- import { Surface } from '@dxos/app-framework';
8
+ import { Surface } from '@dxos/app-framework/react';
9
9
  import { type Obj, Ref, type Type } from '@dxos/echo';
10
10
  import { PublicKey } from '@dxos/react-client';
11
11
  import { type SpaceMember } from '@dxos/react-client/echo';
@@ -14,7 +14,7 @@ import { IconButton, useOnTransition, useThemeContext, useTranslation } from '@d
14
14
  import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
15
15
  import { hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/react-ui-theme';
16
16
  import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
17
- import { type DataType } from '@dxos/schema';
17
+ import { type ContentBlock, type Message } from '@dxos/types';
18
18
 
19
19
  import { useOnEditAnalytics } from '../hooks';
20
20
  import { meta } from '../meta';
@@ -26,7 +26,7 @@ export const buttonGroupClassNames = 'flex flex-row items-center gap-0.5 pie-2';
26
26
  export const buttonClassNames = '!p-1 transition-opacity';
27
27
 
28
28
  export type MessageContainerProps = {
29
- message: DataType.Message;
29
+ message: Message.Message;
30
30
  members: SpaceMember[];
31
31
  editable?: boolean;
32
32
  onDelete?: (id: string) => void;
@@ -116,7 +116,7 @@ const TextboxBlock = ({
116
116
  isAuthor,
117
117
  editing,
118
118
  }: {
119
- block: DataType.MessageBlock.Text;
119
+ block: ContentBlock.Text;
120
120
  editing?: boolean;
121
121
  isAuthor?: boolean;
122
122
  identity?: Identity;
@@ -158,7 +158,7 @@ const TextboxBlock = ({
158
158
  return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
159
159
  };
160
160
 
161
- const ProposalBlock = ({ block }: { block: DataType.MessageBlock.Proposal }) => {
161
+ const ProposalBlock = ({ block }: { block: ContentBlock.Proposal }) => {
162
162
  return (
163
163
  <div role='none' className='mie-4 italic'>
164
164
  {block.text}
@@ -176,7 +176,7 @@ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Any }>(
176
176
  return (
177
177
  <div
178
178
  role='group'
179
- className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
179
+ className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
180
180
  ref={forwardedRef}
181
181
  >
182
182
  <Surface role='card' limit={1} data={{ subject }} fallback={title} />
@@ -4,7 +4,7 @@
4
4
 
5
5
  import React, { memo, useMemo } from 'react';
6
6
 
7
- import { useCapability } from '@dxos/app-framework';
7
+ import { useCapability } from '@dxos/app-framework/react';
8
8
 
9
9
  import { type EncodedTrackName, type UserState } from '../../calls';
10
10
  import { ThreadCapabilities } from '../../capabilities';
@@ -2,12 +2,10 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
10
- import { withLayout, withTheme } from '@dxos/storybook-utils';
8
+ import { withTheme } from '@dxos/react-ui/testing';
11
9
 
12
10
  import { translations } from '../../translations';
13
11
  import { VideoObject as VideoObjectComponent } from '../Media';
@@ -17,8 +15,9 @@ import { ResponsiveContainer } from './ResponsiveContainer';
17
15
  const meta = {
18
16
  title: 'plugins/plugin-thread/ResponsiveContainer',
19
17
  component: ResponsiveContainer,
20
- decorators: [withTheme, withLayout({ fullscreen: true })],
18
+ decorators: [withTheme],
21
19
  parameters: {
20
+ layout: 'fullscreen',
22
21
  translations,
23
22
  },
24
23
  } satisfies Meta<typeof ResponsiveContainer>;
@@ -18,11 +18,11 @@ import { mx } from '@dxos/react-ui-theme';
18
18
  export const ResponsiveContainer = ({ children }: PropsWithChildren) => {
19
19
  return (
20
20
  // Outer container that takes full size of parent.
21
- <div role='none' className='relative flex w-full h-full'>
21
+ <div role='none' className='relative flex is-full bs-full'>
22
22
  {/* Absolute positioning layer for centering content. */}
23
23
  <div role='none' className='absolute inset-0 flex justify-center items-center'>
24
24
  {/* Content container that maintains given aspect ratio and proper scaling. */}
25
- <div role='none' className={mx('max-h-full max-w-full w-auto h-auto aspect-video')}>
25
+ <div role='none' className={mx('max-bs-full max-is-full is-auto bs-auto aspect-video')}>
26
26
  {children}
27
27
  </div>
28
28
  </div>
@@ -2,13 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useEffect, useState } from 'react';
9
7
 
10
8
  import { faker } from '@dxos/random';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
9
+ import { withTheme } from '@dxos/react-ui/testing';
12
10
 
13
11
  import { translations } from '../../translations';
14
12
 
@@ -43,7 +41,7 @@ const TestCell = ({ item, ...props }: ResponsiveGridItemProps<TestItem>) => {
43
41
  {item.type === 'image' && <img className='aspect-video object-contain' src={item.imageUrl} />}
44
42
  {item.type === 'video' && (
45
43
  <video
46
- className='w-full aspect-video object-cover rounded-md'
44
+ className='is-full aspect-video object-cover rounded-md'
47
45
  src={item.videoUrl}
48
46
  playsInline
49
47
  autoPlay
@@ -94,8 +92,9 @@ const meta = {
94
92
  title: 'plugins/plugin-thread/ResponsiveGrid',
95
93
  component: ResponsiveGrid as any,
96
94
  render: DefaultStory,
97
- decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
95
+ decorators: [withTheme],
98
96
  parameters: {
97
+ layout: 'fullscreen',
99
98
  translations,
100
99
  },
101
100
  } satisfies Meta<typeof DefaultStory>;
@@ -18,7 +18,7 @@ const MIN_GALLERY_HEIGHT = 250;
18
18
 
19
19
  const DEFAULT_GAP = 8;
20
20
 
21
- const maxImageSize = 'w-[2560px] h-[1440px]';
21
+ const maxImageSize = 'is-[2560px] bs-[1440px]';
22
22
 
23
23
  /**
24
24
  * Props for the ResponsiveGrid component.
@@ -136,13 +136,13 @@ export const ResponsiveGrid = <T extends object = any>({
136
136
  );
137
137
 
138
138
  return (
139
- <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>
139
+ <div ref={containerRef} className={mx('relative is-full bs-full', classNames)}>
140
140
  {/* Placeholder elements to calculate layout. */}
141
141
  <div className='absolute inset-0 flex flex-col grow gap-2'>
142
142
  {/* Pinned item. */}
143
143
  {pinnedItem && (
144
144
  <div
145
- className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}
145
+ className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'bs-full')}
146
146
  style={hideGallery ? {} : { height: dividerHeight }}
147
147
  >
148
148
  <SoloItem id={getId(pinnedItem)} debug={debug} />
@@ -157,7 +157,7 @@ export const ResponsiveGrid = <T extends object = any>({
157
157
  style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}
158
158
  >
159
159
  {mainItems.length === 1 && (
160
- <div style={{ width: cellWidth }} className='flex h-full'>
160
+ <div style={{ width: cellWidth }} className='flex bs-full'>
161
161
  <SoloItem id={getId(mainItems[0])} debug={debug} />
162
162
  </div>
163
163
  )}
@@ -176,7 +176,7 @@ export const ResponsiveGrid = <T extends object = any>({
176
176
  key={getId(item)}
177
177
  {...{ 'data-grid-item': getId(item) }}
178
178
  className={mx(
179
- 'aspect-video max-h-full max-w-full w-auto h-auto',
179
+ 'aspect-video max-bs-full max-is-full is-auto bs-auto',
180
180
  debug && 'border border-primary-500',
181
181
  )}
182
182
  />
@@ -76,7 +76,7 @@ export const ResponsiveGridItem = <T extends object = any>({
76
76
  return (
77
77
  <div
78
78
  className={mx(
79
- 'relative w-full h-full group',
79
+ 'relative is-full bs-full group',
80
80
  'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',
81
81
  speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',
82
82
  classNames,
@@ -106,7 +106,10 @@ export const ResponsiveGridItem = <T extends object = any>({
106
106
  {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}
107
107
  {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
108
108
  <div
109
- className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}
109
+ className={mx(
110
+ 'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',
111
+ pinned ? 'pli-2' : 'pli-1 text-xs',
112
+ )}
110
113
  >
111
114
  {name}
112
115
  </div>