@dxos/plugin-thread 0.8.4-main.3eb6e50203 → 0.8.4-main.4a85c3132b

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 (236) hide show
  1. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs +182 -0
  2. package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs.map +7 -0
  3. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs +33 -0
  4. package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs.map +7 -0
  5. package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs +15 -0
  6. package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs.map +7 -0
  7. package/dist/lib/browser/ChatContainer-2243UD2M.mjs +14 -0
  8. package/dist/lib/browser/ChatContainer-2243UD2M.mjs.map +7 -0
  9. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs +204 -0
  10. package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs.map +7 -0
  11. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs +20 -0
  12. package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs.map +7 -0
  13. package/dist/lib/browser/{app-graph-builder-XFGLMIGK.mjs → app-graph-builder-5LCAM746.mjs} +5 -3
  14. package/dist/lib/{node-esm/app-graph-builder-IN6VLJBO.mjs.map → browser/app-graph-builder-5LCAM746.mjs.map} +1 -1
  15. package/dist/lib/browser/{blueprint-definition-ACPH22F7.mjs → blueprint-definition-42M2EJ2Y.mjs} +4 -5
  16. package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs.map +7 -0
  17. package/dist/lib/browser/blueprints/index.mjs +3 -3
  18. package/dist/lib/browser/{call-manager-GDGIKJKN.mjs → call-manager-2PRP4QVZ.mjs} +3 -2
  19. package/dist/lib/browser/{chunk-4EUEMHNI.mjs → chunk-G6FJBSXX.mjs} +110 -804
  20. package/dist/lib/browser/chunk-G6FJBSXX.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-JBB73URQ.mjs → chunk-HDLDMR54.mjs} +1 -1
  22. package/dist/lib/browser/{chunk-JBB73URQ.mjs.map → chunk-HDLDMR54.mjs.map} +2 -2
  23. package/dist/lib/browser/chunk-LUK4UNFA.mjs +20 -0
  24. package/dist/lib/browser/chunk-LUK4UNFA.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-PDHCY236.mjs +223 -0
  26. package/dist/lib/browser/chunk-PDHCY236.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-RH7XTXSR.mjs → chunk-PL5LIVP4.mjs} +18 -19
  28. package/dist/lib/browser/chunk-PL5LIVP4.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-2FIHSX35.mjs → chunk-U32R23JO.mjs} +12 -28
  30. package/dist/lib/browser/chunk-U32R23JO.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-UVUCB7QO.mjs +125 -0
  32. package/dist/lib/browser/chunk-UVUCB7QO.mjs.map +7 -0
  33. package/dist/lib/browser/index.mjs +17 -30
  34. package/dist/lib/browser/index.mjs.map +3 -3
  35. package/dist/lib/browser/{markdown-YJCSOWXX.mjs → markdown-GRRPCZHJ.mjs} +3 -3
  36. package/dist/lib/{node-esm/markdown-6LRP3PAP.mjs.map → browser/markdown-GRRPCZHJ.mjs.map} +3 -3
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/{operation-resolver-PROCP5L4.mjs → operation-resolver-EP7FAYEB.mjs} +10 -9
  39. package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs.map +7 -0
  40. package/dist/lib/browser/{react-root-FHK2SVPU.mjs → react-root-7UFFPPRD.mjs} +5 -4
  41. package/dist/lib/browser/{react-surface-7MQA6VSH.mjs → react-surface-TIHBSZPD.mjs} +16 -14
  42. package/dist/lib/browser/react-surface-TIHBSZPD.mjs.map +7 -0
  43. package/dist/lib/browser/{repair-6OZ75AUU.mjs → repair-TBU45SBG.mjs} +7 -5
  44. package/dist/lib/browser/repair-TBU45SBG.mjs.map +7 -0
  45. package/dist/lib/browser/{settings-TWKOTGSU.mjs → settings-Y75FG6XR.mjs} +5 -3
  46. package/dist/lib/{node-esm/settings-5O254B3Z.mjs.map → browser/settings-Y75FG6XR.mjs.map} +1 -1
  47. package/dist/lib/browser/{state-SJR2GL5G.mjs → state-OBTMMEUZ.mjs} +3 -2
  48. package/dist/lib/browser/types/index.mjs +2 -1
  49. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs +183 -0
  50. package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs.map +7 -0
  51. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs +34 -0
  52. package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs.map +7 -0
  53. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs +16 -0
  54. package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs.map +7 -0
  55. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs +15 -0
  56. package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs.map +7 -0
  57. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs +205 -0
  58. package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs.map +7 -0
  59. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs +21 -0
  60. package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs.map +7 -0
  61. package/dist/lib/node-esm/{app-graph-builder-IN6VLJBO.mjs → app-graph-builder-VBLHLX75.mjs} +5 -3
  62. package/dist/lib/{browser/app-graph-builder-XFGLMIGK.mjs.map → node-esm/app-graph-builder-VBLHLX75.mjs.map} +1 -1
  63. package/dist/lib/node-esm/{blueprint-definition-SXVKFUNV.mjs → blueprint-definition-PEXTS56K.mjs} +4 -5
  64. package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs.map +7 -0
  65. package/dist/lib/node-esm/blueprints/index.mjs +3 -3
  66. package/dist/lib/node-esm/{call-manager-36UAAQCJ.mjs → call-manager-BLQCEM2F.mjs} +3 -2
  67. package/dist/lib/{browser/call-manager-GDGIKJKN.mjs.map → node-esm/call-manager-BLQCEM2F.mjs.map} +1 -1
  68. package/dist/lib/node-esm/{chunk-OKVE6CLS.mjs → chunk-6K5ACCGB.mjs} +18 -18
  69. package/dist/lib/node-esm/chunk-6K5ACCGB.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs +224 -0
  71. package/dist/lib/node-esm/chunk-7SZBKQUU.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs +22 -0
  73. package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs.map +7 -0
  74. package/dist/lib/node-esm/{chunk-RBRWHRHE.mjs → chunk-IQUV7DR6.mjs} +110 -804
  75. package/dist/lib/node-esm/chunk-IQUV7DR6.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-WMWUXWAS.mjs → chunk-QYAVWNVM.mjs} +12 -28
  77. package/dist/lib/node-esm/chunk-QYAVWNVM.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs +126 -0
  79. package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-G7PZNN3Z.mjs → chunk-YN2Y7GPW.mjs} +1 -1
  81. package/dist/lib/node-esm/{chunk-G7PZNN3Z.mjs.map → chunk-YN2Y7GPW.mjs.map} +2 -2
  82. package/dist/lib/node-esm/index.mjs +17 -30
  83. package/dist/lib/node-esm/index.mjs.map +3 -3
  84. package/dist/lib/node-esm/{markdown-6LRP3PAP.mjs → markdown-WHWUESF7.mjs} +3 -3
  85. package/dist/lib/node-esm/markdown-WHWUESF7.mjs.map +7 -0
  86. package/dist/lib/node-esm/meta.json +1 -1
  87. package/dist/lib/node-esm/{operation-resolver-LPEPV5BF.mjs → operation-resolver-R7QJW3TW.mjs} +10 -9
  88. package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs.map +7 -0
  89. package/dist/lib/node-esm/{react-root-P5P4VGQJ.mjs → react-root-D7CWS5XP.mjs} +5 -4
  90. package/dist/lib/{browser/react-root-FHK2SVPU.mjs.map → node-esm/react-root-D7CWS5XP.mjs.map} +1 -1
  91. package/dist/lib/node-esm/{react-surface-M7VI5XG2.mjs → react-surface-WWZFSK5Y.mjs} +16 -14
  92. package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs.map +7 -0
  93. package/dist/lib/node-esm/{repair-6777EPOM.mjs → repair-7JEKRNR3.mjs} +7 -5
  94. package/dist/lib/node-esm/repair-7JEKRNR3.mjs.map +7 -0
  95. package/dist/lib/node-esm/{settings-5O254B3Z.mjs → settings-W4JN2YKJ.mjs} +5 -3
  96. package/dist/lib/{browser/settings-TWKOTGSU.mjs.map → node-esm/settings-W4JN2YKJ.mjs.map} +1 -1
  97. package/dist/lib/node-esm/{state-5R3TZJQE.mjs → state-7UWCSIWQ.mjs} +3 -2
  98. package/dist/lib/{browser/state-SJR2GL5G.mjs.map → node-esm/state-7UWCSIWQ.mjs.map} +1 -1
  99. package/dist/lib/node-esm/types/index.mjs +2 -1
  100. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  101. package/dist/types/src/blueprints/index.d.ts +1 -1
  102. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  103. package/dist/types/src/blueprints/thread-blueprint.d.ts +3 -20
  104. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  106. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +1 -5
  107. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
  109. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/call-manager/call-manager.d.ts +1 -1
  111. package/dist/types/src/capabilities/markdown/markdown.d.ts +1 -1
  112. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +1 -1
  114. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
  116. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +1 -1
  117. package/dist/types/src/capabilities/repair/repair.d.ts +1 -1
  118. package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/settings/settings.d.ts +1 -1
  120. package/dist/types/src/capabilities/state/state.d.ts +1 -1
  121. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  122. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  123. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  124. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  125. package/dist/types/src/components/MessageContainer.d.ts +3 -3
  126. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/index.d.ts +0 -6
  128. package/dist/types/src/components/index.d.ts.map +1 -1
  129. package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
  130. package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
  131. package/dist/types/src/containers/CallDebugPanel/index.d.ts +3 -0
  132. package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
  133. package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
  134. package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
  135. package/dist/types/src/containers/CallSidebar/index.d.ts +3 -0
  136. package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
  137. package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.d.ts +2 -3
  138. package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
  139. package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.stories.d.ts +1 -1
  140. package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
  141. package/dist/types/src/containers/ChannelContainer/index.d.ts +3 -0
  142. package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
  143. package/dist/types/src/{components → containers/ChatContainer}/ChatContainer.d.ts +0 -1
  144. package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
  145. package/dist/types/src/{components/Chat.stories.d.ts → containers/ChatContainer/ChatContainer.stories.d.ts} +1 -1
  146. package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
  147. package/dist/types/src/containers/ChatContainer/index.d.ts +3 -0
  148. package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
  149. package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
  150. package/dist/types/src/containers/ThreadCompanion/index.d.ts +3 -0
  151. package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
  152. package/dist/types/src/{components → containers/ThreadSettings}/ThreadSettings.d.ts +1 -1
  153. package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts.map +1 -0
  154. package/dist/types/src/containers/ThreadSettings/index.d.ts +3 -0
  155. package/dist/types/src/containers/ThreadSettings/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/index.d.ts +8 -0
  157. package/dist/types/src/containers/index.d.ts.map +1 -0
  158. package/dist/types/src/functions/index.d.ts +13 -1
  159. package/dist/types/src/functions/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  161. package/dist/types/src/types/Channel.d.ts +25 -9
  162. package/dist/types/src/types/Channel.d.ts.map +1 -1
  163. package/dist/types/src/types/types.d.ts +171 -94
  164. package/dist/types/src/types/types.d.ts.map +1 -1
  165. package/dist/types/tsconfig.tsbuildinfo +1 -1
  166. package/package.json +57 -57
  167. package/src/ThreadPlugin.tsx +2 -14
  168. package/src/blueprints/index.ts +1 -1
  169. package/src/blueprints/thread-blueprint.ts +14 -6
  170. package/src/calls-service.stories.tsx +1 -1
  171. package/src/capabilities/blueprint-definition/blueprint-definition.ts +4 -11
  172. package/src/capabilities/markdown/markdown.ts +0 -1
  173. package/src/capabilities/operation-resolver/operation-resolver.ts +2 -3
  174. package/src/capabilities/react-surface/react-surface.tsx +1 -1
  175. package/src/capabilities/repair/repair.ts +7 -3
  176. package/src/components/Call/Toolbar.tsx +4 -6
  177. package/src/components/Comments.stories.tsx +4 -3
  178. package/src/components/CommentsContainer.tsx +9 -8
  179. package/src/components/CommentsThreadContainer.tsx +3 -4
  180. package/src/components/Media/VideoObject.stories.tsx +3 -3
  181. package/src/components/Media/VideoObject.tsx +1 -1
  182. package/src/components/MessageContainer.tsx +8 -8
  183. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -3
  184. package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
  185. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -4
  186. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
  187. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -5
  188. package/src/components/command-extension.ts +1 -1
  189. package/src/components/index.ts +0 -7
  190. package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +4 -4
  191. package/src/containers/CallDebugPanel/index.ts +7 -0
  192. package/src/{components → containers/CallSidebar}/CallSidebar.tsx +2 -5
  193. package/src/containers/CallSidebar/index.ts +7 -0
  194. package/src/{components → containers/ChannelContainer}/ChannelContainer.stories.tsx +4 -4
  195. package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +42 -33
  196. package/src/containers/ChannelContainer/index.ts +7 -0
  197. package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +14 -12
  198. package/src/{components → containers/ChatContainer}/ChatContainer.tsx +14 -17
  199. package/src/containers/ChatContainer/index.ts +7 -0
  200. package/src/{components → containers/ThreadCompanion}/ThreadCompanion.tsx +33 -30
  201. package/src/containers/ThreadCompanion/index.ts +7 -0
  202. package/src/{components → containers/ThreadSettings}/ThreadSettings.tsx +2 -2
  203. package/src/containers/ThreadSettings/index.ts +7 -0
  204. package/src/containers/index.ts +12 -0
  205. package/src/functions/create-proposals.ts +2 -2
  206. package/src/functions/index.ts +5 -1
  207. package/src/hooks/analytics.ts +1 -0
  208. package/src/types/Channel.ts +2 -2
  209. package/src/types/types.ts +6 -6
  210. package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs.map +0 -7
  211. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +0 -7
  212. package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +0 -7
  213. package/dist/lib/browser/chunk-RH7XTXSR.mjs.map +0 -7
  214. package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +0 -7
  215. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +0 -7
  216. package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +0 -7
  217. package/dist/lib/browser/repair-6OZ75AUU.mjs.map +0 -7
  218. package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-OKVE6CLS.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +0 -7
  222. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +0 -7
  223. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +0 -7
  224. package/dist/lib/node-esm/repair-6777EPOM.mjs.map +0 -7
  225. package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
  226. package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
  227. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  228. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
  229. package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
  230. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  231. package/dist/types/src/components/ThreadCompanion.d.ts.map +0 -1
  232. package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
  233. /package/dist/lib/{node-esm/call-manager-36UAAQCJ.mjs.map → browser/call-manager-2PRP4QVZ.mjs.map} +0 -0
  234. /package/dist/lib/{node-esm/react-root-P5P4VGQJ.mjs.map → browser/react-root-7UFFPPRD.mjs.map} +0 -0
  235. /package/dist/lib/{node-esm/state-5R3TZJQE.mjs.map → browser/state-OBTMMEUZ.mjs.map} +0 -0
  236. /package/dist/types/src/{components → containers/ThreadCompanion}/ThreadCompanion.d.ts +0 -0
@@ -6,7 +6,7 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useEffect, useState } from 'react';
7
7
 
8
8
  import { faker } from '@dxos/random';
9
- import { withTheme } from '@dxos/react-ui/testing';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
10
 
11
11
  import { translations } from '../../translations';
12
12
 
@@ -41,7 +41,7 @@ const TestCell = ({ item, ...props }: ResponsiveGridItemProps<TestItem>) => {
41
41
  {item.type === 'image' && <img className='aspect-video object-contain' src={item.imageUrl} />}
42
42
  {item.type === 'video' && (
43
43
  <video
44
- className='is-full aspect-video object-cover rounded-md'
44
+ className='w-full aspect-video object-cover rounded-md'
45
45
  src={item.videoUrl}
46
46
  playsInline
47
47
  autoPlay
@@ -89,10 +89,10 @@ const DefaultStory = (props: StoryProps) => {
89
89
  };
90
90
 
91
91
  const meta = {
92
- title: 'plugins/plugin-thread/ResponsiveGrid',
92
+ title: 'plugins/plugin-thread/components/ResponsiveGrid',
93
93
  component: ResponsiveGrid as any,
94
94
  render: DefaultStory,
95
- decorators: [withTheme()],
95
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
96
96
  parameters: {
97
97
  layout: 'fullscreen',
98
98
  translations,
@@ -18,7 +18,7 @@ const MIN_GALLERY_HEIGHT = 250;
18
18
 
19
19
  const DEFAULT_GAP = 8;
20
20
 
21
- const maxImageSize = 'is-[2560px] bs-[1440px]';
21
+ const maxImageSize = 'w-[2560px] h-[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 is-full bs-full', classNames)}>
139
+ <div ref={containerRef} className={mx('relative w-full h-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 && 'bs-full')}
145
+ className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-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 bs-full'>
160
+ <div style={{ width: cellWidth }} className='flex h-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-bs-full max-is-full is-auto bs-auto',
179
+ 'aspect-video max-h-full max-w-full w-auto h-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 is-full bs-full group',
79
+ 'relative w-full h-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,
@@ -89,7 +89,7 @@ export const ResponsiveGridItem = <T extends object = any>({
89
89
  {onClick && (
90
90
  <div className='z-10 absolute top-1 right-1 flex'>
91
91
  <IconButton
92
- classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}
92
+ classNames={mx('p-1 min-h-1 rounded-sm', groupHoverControlItemWithTransition)}
93
93
  iconOnly
94
94
  icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}
95
95
  size={pinned ? 5 : 4}
@@ -107,8 +107,8 @@ export const ResponsiveGridItem = <T extends object = any>({
107
107
  {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}
108
108
  <div
109
109
  className={mx(
110
- 'bg-neutral-800 text-neutral-100 plb-0.5 truncate rounded',
111
- pinned ? 'pli-2' : 'pli-1 text-xs',
110
+ 'bg-neutral-800 text-neutral-100 py-0.5 truncate rounded-sm',
111
+ pinned ? 'px-2' : 'px-1 text-xs',
112
112
  )}
113
113
  >
114
114
  {name}
@@ -121,7 +121,7 @@ export const ResponsiveGridItem = <T extends object = any>({
121
121
  {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||
122
122
  (props && (
123
123
  <IconButton
124
- classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}
124
+ classNames={mx('p-1 min-h-1 rounded-sm', props?.classNames)}
125
125
  icon={props?.icon}
126
126
  label={props?.label}
127
127
  size={pinned ? 5 : 4}
@@ -29,7 +29,7 @@ const parser = StreamLanguage.define<{ count: number }>({
29
29
  const styles = HighlightStyle.define([
30
30
  {
31
31
  tag: tags.tagName,
32
- class: mx('dx-tag dx-tag--indigo text-baseText font-medium'),
32
+ class: mx('dx-tag dx-tag--indigo text-base-surface-text font-medium'),
33
33
  },
34
34
  ]);
35
35
 
@@ -3,13 +3,6 @@
3
3
  //
4
4
 
5
5
  export * from './Call';
6
- export * from './CallDebugPanel';
7
- export * from './CallSidebar';
8
6
  export * from './CommentsContainer';
9
7
  export * from './CommentsThreadContainer';
10
8
  export * from './MessageContainer';
11
- export * from './ThreadCompanion';
12
- export * from './ThreadSettings';
13
-
14
- export { ChannelContainer } from './ChannelContainer';
15
- export { ChatContainer } from './ChatContainer';
@@ -10,8 +10,8 @@ import { JsonView, Panel } from '@dxos/devtools';
10
10
  import { log } from '@dxos/log';
11
11
  import { IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
12
12
 
13
- import { type EncodedTrackName, type GlobalState } from '../calls';
14
- import { meta } from '../meta';
13
+ import { type EncodedTrackName, type GlobalState } from '../../calls';
14
+ import { meta } from '../../meta';
15
15
 
16
16
  export type CallDebugPanelProps = ThemedClassName<{ state?: GlobalState }>;
17
17
 
@@ -74,7 +74,7 @@ export const CallDebugPanel = ({ state }: CallDebugPanelProps) => {
74
74
  info={<div className='flex items-center gap-2'> {state?.call.joined ? 'Active' : 'Inactive'}</div>}
75
75
  maxHeight={0}
76
76
  >
77
- <div className='flex flex-col is-full text-xs'>
77
+ <div className='flex flex-col w-full text-xs'>
78
78
  <div className='flex items-center gap-2 items-center'>
79
79
  <Input.Root>
80
80
  <Input.Switch checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />
@@ -158,7 +158,7 @@ export type TableProps = {
158
158
 
159
159
  export const Table = ({ rows }: TableProps) => {
160
160
  return (
161
- <div className='is-full text-xs font-mono'>
161
+ <div className='w-full text-xs font-mono'>
162
162
  {rows.map(([prefix, label, value, unit], i) => (
163
163
  <div key={i} className='grid grid-cols-[3fr_1fr_1fr_1fr]'>
164
164
  <div className='p-1'>{prefix}</div>
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { CallDebugPanel } from './CallDebugPanel';
6
+
7
+ export default CallDebugPanel;
@@ -7,14 +7,11 @@ import React from 'react';
7
7
 
8
8
  import { useCapability } from '@dxos/app-framework/ui';
9
9
 
10
- import { ThreadCapabilities } from '../types';
11
-
12
- import { ChannelContainer } from './ChannelContainer';
10
+ import { ThreadCapabilities } from '../../types';
11
+ import ChannelContainer from '../ChannelContainer';
13
12
 
14
13
  export const CallSidebar = () => {
15
14
  const call = useCapability(ThreadCapabilities.CallManager);
16
15
  const roomId = useAtomValue(call.roomIdAtom);
17
16
  return <ChannelContainer subject={undefined} roomId={roomId} />;
18
17
  };
19
-
20
- export default CallSidebar;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { CallSidebar } from './CallSidebar';
6
+
7
+ export default CallSidebar;
@@ -13,9 +13,9 @@ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
13
  import { render } from '@dxos/storybook-utils';
14
14
  import { Message, Thread } from '@dxos/types';
15
15
 
16
- import { createThreadPlugins } from '../testing';
17
- import { translations } from '../translations';
18
- import { Channel } from '../types';
16
+ import { createThreadPlugins } from '../../testing';
17
+ import { translations } from '../../translations';
18
+ import { Channel } from '../../types';
19
19
 
20
20
  import { ChannelContainer, type ChannelContainerProps } from './ChannelContainer';
21
21
 
@@ -31,7 +31,7 @@ const DefaultStory = ({ roomId }: ChannelContainerProps) => {
31
31
  };
32
32
 
33
33
  const meta = {
34
- title: 'plugins/plugin-thread/ChannelContainer',
34
+ title: 'plugins/plugin-thread/containers/ChannelContainer',
35
35
  component: ChannelContainer,
36
36
  render: render(DefaultStory),
37
37
  decorators: [
@@ -14,18 +14,16 @@ import { log } from '@dxos/log';
14
14
  import { useClient } from '@dxos/react-client';
15
15
  import { getSpace } from '@dxos/react-client/echo';
16
16
  import { useIdentity } from '@dxos/react-client/halo';
17
- import { ElevationProvider, Input, useTranslation } from '@dxos/react-ui';
17
+ import { ElevationProvider, Input, Panel, useTranslation } from '@dxos/react-ui';
18
18
  import { Settings } from '@dxos/react-ui-form';
19
- import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
19
+ import { Menu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
20
20
  import { useSoundEffect } from '@dxos/react-ui-sfx';
21
- import { StackItem } from '@dxos/react-ui-stack';
22
21
 
23
- import { meta } from '../meta';
24
- import { ThreadCapabilities } from '../types';
25
- import { type Channel } from '../types';
26
-
27
- import { Call } from './Call';
28
- import ChatContainer from './ChatContainer';
22
+ import { Call } from '../../components';
23
+ import { meta } from '../../meta';
24
+ import { ThreadCapabilities } from '../../types';
25
+ import { type Channel } from '../../types';
26
+ import ChatContainer from '../ChatContainer';
29
27
 
30
28
  export type ChannelContainerProps = SurfaceComponentProps<
31
29
  Channel.Channel | undefined,
@@ -42,6 +40,7 @@ export type ChannelContainerProps = SurfaceComponentProps<
42
40
  export const ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, fullscreen }: ChannelContainerProps) => {
43
41
  const space = getSpace(channel);
44
42
  const callManager = useCapability(ThreadCapabilities.CallManager);
43
+ const extensions = useCapabilities(ThreadCapabilities.CallExtension);
45
44
  const joined = useAtomValue(callManager.joinedAtom);
46
45
  const currentRoomId = useAtomValue(callManager.roomIdAtom);
47
46
  const attendableId = channel ? Obj.getDXN(channel).toString() : undefined;
@@ -51,7 +50,6 @@ export const ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, f
51
50
  const joinSound = useSoundEffect('JoinCall');
52
51
  const leaveSound = useSoundEffect('LeaveCall');
53
52
 
54
- const extensions = useCapabilities(ThreadCapabilities.CallExtension);
55
53
  useEffect(() => {
56
54
  const ctx = new Context();
57
55
  callManager.left.on(ctx, (roomId) => {
@@ -119,27 +117,38 @@ export const ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, f
119
117
  }, [extensions, roomId]);
120
118
 
121
119
  const isJoined = joined && currentRoomId === roomId;
120
+ if (isJoined) {
121
+ return (
122
+ <Panel.Root>
123
+ <Panel.Content>
124
+ {isNamed ? (
125
+ <Call.Root>
126
+ <Call.Grid fullscreen={fullscreen} />
127
+ <Call.Toolbar channel={channel} onLeave={handleLeave} />
128
+ </Call.Root>
129
+ ) : (
130
+ <DisplayNameMissing />
131
+ )}
132
+ </Panel.Content>
133
+ </Panel.Root>
134
+ );
135
+ }
122
136
 
123
- return (
124
- <StackItem.Content classNames={isJoined && 'bs-full'} toolbar={!isJoined}>
125
- {isJoined && !isNamed && <DisplayNameMissing />}
126
- {isJoined && isNamed && (
127
- <Call.Root>
128
- <Call.Grid fullscreen={fullscreen} />
129
- <Call.Toolbar channel={channel} onLeave={handleLeave} />
130
- </Call.Root>
131
- )}
132
- {!isJoined && channel && channel.defaultThread.target && space && (
133
- <>
137
+ if (channel && channel.defaultThread.target && space) {
138
+ return (
139
+ <Panel.Root classNames='dx-article'>
140
+ <Panel.Toolbar asChild>
134
141
  <ChannelToolbar attendableId={attendableId} role={role} onJoinCall={handleJoin} />
135
- <ChatContainer space={space} thread={channel.defaultThread.target} classNames='container-max-width' />
136
- </>
137
- )}
138
- </StackItem.Content>
139
- );
140
- };
142
+ </Panel.Toolbar>
143
+ <Panel.Content asChild>
144
+ <ChatContainer space={space} thread={channel.defaultThread.target} />
145
+ </Panel.Content>
146
+ </Panel.Root>
147
+ );
148
+ }
141
149
 
142
- export default ChannelContainer;
150
+ return null;
151
+ };
143
152
 
144
153
  const DisplayNameMissing = () => {
145
154
  const { t } = useTranslation(meta.id);
@@ -155,7 +164,7 @@ const DisplayNameMissing = () => {
155
164
  value={displayName}
156
165
  onChange={handleChange}
157
166
  placeholder={t('display name input placeholder')}
158
- classNames='md:min-is-64'
167
+ classNames='md:min-w-64'
159
168
  />
160
169
  </Settings.ItemInput>
161
170
  <Settings.GroupButton disabled={!displayName} onClick={handleSave}>
@@ -180,7 +189,7 @@ const useChannelToolbarActions = (onJoinCall?: () => void) => {
180
189
  type: 'video-call',
181
190
  }),
182
191
  ],
183
- edges: [{ source: 'root', target: 'video-call' }],
192
+ edges: [{ source: 'root', target: 'video-call', relation: 'child' }],
184
193
  };
185
194
  }),
186
195
  [],
@@ -200,9 +209,9 @@ const ChannelToolbar = ({ attendableId, role, onJoinCall }: ChannelToolbarProps)
200
209
 
201
210
  return (
202
211
  <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
203
- <MenuProvider {...menuProps} attendableId={attendableId}>
204
- <ToolbarMenu textBlockWidth />
205
- </MenuProvider>
212
+ <Menu.Root {...menuProps} attendableId={attendableId}>
213
+ <Menu.Toolbar textBlockWidth />
214
+ </Menu.Root>
206
215
  </ElevationProvider>
207
216
  );
208
217
  };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ChannelContainer } from './ChannelContainer';
6
+
7
+ export default ChannelContainer;
@@ -5,7 +5,7 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React, { useState } from 'react';
7
7
 
8
- import { Capabilities, Capability, OperationPlugin } from '@dxos/app-framework';
8
+ import { Capabilities, Capability, OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
10
  import { Surface } from '@dxos/app-framework/ui';
11
11
  import { faker } from '@dxos/random';
@@ -14,13 +14,13 @@ import { type Space } from '@dxos/react-client/echo';
14
14
  import { useIdentity } from '@dxos/react-client/halo';
15
15
  import { withClientProvider } from '@dxos/react-client/testing';
16
16
  import { useAsyncEffect } from '@dxos/react-ui';
17
- import { withTheme } from '@dxos/react-ui/testing';
17
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
18
18
  import { Thread as ThreadComponent } from '@dxos/react-ui-thread';
19
19
  import { render } from '@dxos/storybook-utils';
20
20
  import { Message, Thread } from '@dxos/types';
21
21
 
22
- import { translations } from '../translations';
23
- import { Channel } from '../types';
22
+ import { translations } from '../../translations';
23
+ import { Channel } from '../../types';
24
24
 
25
25
  import { ChatContainer } from './ChatContainer';
26
26
 
@@ -45,21 +45,20 @@ const DefaultStory = () => {
45
45
  return null;
46
46
  }
47
47
 
48
- return (
49
- <main className='is-full max-is-proseMaxWidth mli-auto bs-full overflow-hidden'>
50
- <ChatContainer space={space} thread={channel.defaultThread.target} />
51
- </main>
52
- );
48
+ return <ChatContainer space={space} thread={channel.defaultThread.target} />;
53
49
  };
54
50
 
55
51
  const meta = {
56
- title: 'plugins/plugin-thread/Chat',
52
+ title: 'plugins/plugin-thread/containers/ChatContainer',
57
53
  component: ThreadComponent.Root as any,
58
54
  render: render(DefaultStory),
59
55
  decorators: [
60
56
  withTheme(),
57
+ withLayout({ layout: 'column' }),
58
+ // TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
59
+ // Currently this is required due to useOnEditAnalytics.
61
60
  withPluginManager({
62
- plugins: [OperationPlugin()],
61
+ plugins: [OperationPlugin(), RuntimePlugin()],
63
62
  capabilities: [
64
63
  Capability.contributes(
65
64
  Capabilities.ReactSurface,
@@ -71,7 +70,10 @@ const meta = {
71
70
  ),
72
71
  ],
73
72
  }),
74
- withClientProvider({ createSpace: true, types: [Thread.Thread, Channel.Channel, Message.Message] }),
73
+ withClientProvider({
74
+ createSpace: true,
75
+ types: [Thread.Thread, Channel.Channel, Message.Message],
76
+ }),
75
77
  ],
76
78
  parameters: {
77
79
  layout: 'fullscreen',
@@ -21,12 +21,11 @@ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/ui
21
21
  import { mx } from '@dxos/ui-theme';
22
22
  import { isNonNullable } from '@dxos/util';
23
23
 
24
- import { useStatus } from '../hooks';
25
- import { meta } from '../meta';
26
- import { getMessageMetadata } from '../util';
27
-
28
- import { command } from './command-extension';
29
- import { MessageContainer } from './MessageContainer';
24
+ import { MessageContainer } from '../../components';
25
+ import { command } from '../../components/command-extension';
26
+ import { useStatus } from '../../hooks';
27
+ import { meta } from '../../meta';
28
+ import { getMessageMetadata } from '../../util';
30
29
 
31
30
  export const ChatHeading = ({ attendableId }: { attendableId?: string }) => {
32
31
  const { t } = useTranslation(meta.id);
@@ -58,16 +57,18 @@ export const ChatContainer = ({
58
57
  autoFocusTextbox,
59
58
  }: ChatContainerProps) => {
60
59
  const { t } = useTranslation(meta.id);
60
+ const { themeMode } = useThemeContext();
61
+
61
62
  const id = Obj.getDXN(thread).toString();
62
63
  const identity = useIdentity()!;
63
64
  const members = useMembers(space?.id);
64
65
  const activity = useStatus(space, id);
66
+ const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
67
+ const threadScrollRef = useRef<HTMLDivElement | null>(null);
68
+
65
69
  // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
66
70
  const [_count, _setCount] = useState(0);
67
71
  const rerenderEditor = () => _setCount((count) => count + 1);
68
- const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
69
- const threadScrollRef = useRef<HTMLDivElement | null>(null);
70
- const { themeMode } = useThemeContext();
71
72
 
72
73
  const textboxMetadata = getMessageMetadata(id, identity);
73
74
  const messageRef = useRef('');
@@ -123,13 +124,13 @@ export const ChatContainer = ({
123
124
  current={current}
124
125
  id={id}
125
126
  classNames={[
126
- 'bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden',
127
- 'transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0',
127
+ 'h-full grid-rows-[1fr_min-content_min-content] overflow-hidden',
128
+ 'transition-[padding-h-end] [[data-sidebar-left-state=open]_&]:lg:pb-0',
128
129
  classNames,
129
130
  ]}
130
131
  >
131
- <ScrollArea.Root orientation='vertical'>
132
- <ScrollArea.Viewport classNames='col-span-2'>
132
+ <ScrollArea.Root classNames='col-span-2' orientation='vertical'>
133
+ <ScrollArea.Viewport ref={threadScrollRef}>
133
134
  <div role='none' className={mx(threadLayout, 'place-self-end')}>
134
135
  {thread.messages
135
136
  .map((message) => message.target)
@@ -138,8 +139,6 @@ export const ChatContainer = ({
138
139
  <MessageContainer key={message.id} message={message} members={members} />
139
140
  ))}
140
141
  </div>
141
- {/* NOTE(thure): This can't also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref'd element. */}
142
- <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
143
142
  </ScrollArea.Viewport>
144
143
  </ScrollArea.Root>
145
144
 
@@ -148,5 +147,3 @@ export const ChatContainer = ({
148
147
  </ThreadComponent.Root>
149
148
  );
150
149
  };
151
-
152
- export default ChatContainer;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { ChatContainer } from './ChatContainer';
6
+
7
+ export default ChatContainer;
@@ -11,16 +11,14 @@ import { AppCapabilities, CollaborationOperation, LayoutOperation } from '@dxos/
11
11
  import { Filter, Obj, Query, Relation } from '@dxos/echo';
12
12
  import { Ref, useQuery } from '@dxos/react-client/echo';
13
13
  import { useIdentity } from '@dxos/react-client/halo';
14
- import { useTranslation } from '@dxos/react-ui';
15
- import { Layout } from '@dxos/react-ui';
14
+ import { Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';
16
15
  import { useAttended } from '@dxos/react-ui-attention';
17
16
  import { Tabs } from '@dxos/react-ui-tabs';
18
17
  import { AnchoredTo, Thread } from '@dxos/types';
19
- import { mx } from '@dxos/ui-theme';
20
18
 
21
- import { CommentsContainer, type CommentsContainerProps } from '../components';
22
- import { meta } from '../meta';
23
- import { ThreadCapabilities, ThreadOperation, type ViewState } from '../types';
19
+ import { CommentsContainer, type CommentsContainerProps } from '../../components';
20
+ import { meta } from '../../meta';
21
+ import { ThreadCapabilities, ThreadOperation, type ViewState } from '../../types';
24
22
 
25
23
  const initialViewState: ViewState = { showResolvedThreads: false };
26
24
 
@@ -165,30 +163,35 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
165
163
  />
166
164
  );
167
165
 
166
+ // TODO(burdon): Root should be headless.
168
167
  return (
169
- <Layout.Main toolbar>
170
- <Tabs.Root
171
- value={showResolvedThreads ? 'all' : 'unresolved'}
172
- orientation='horizontal'
173
- classNames={[
174
- 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin',
175
- ]}
176
- onValueChange={onChangeViewState}
177
- >
178
- {/* TODO(burdon): Standardize (like Tollbar). */}
179
- <Tabs.Tablist classNames={mx('bg-toolbarSurface border-be border-subduedSeparator')}>
180
- <Tabs.Tab value='unresolved' classNames='text-sm'>
181
- {t('show unresolved label')}
182
- </Tabs.Tab>
183
- <Tabs.Tab value='all' classNames='text-sm'>
184
- {t('show all label')}
185
- </Tabs.Tab>
186
- </Tabs.Tablist>
187
- <div className='overflow-y-auto'>
188
- <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
189
- <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
190
- </div>
191
- </Tabs.Root>
192
- </Layout.Main>
168
+ <Tabs.Root
169
+ value={showResolvedThreads ? 'all' : 'unresolved'}
170
+ orientation='horizontal'
171
+ onValueChange={onChangeViewState}
172
+ >
173
+ <Panel.Root>
174
+ <Panel.Toolbar asChild>
175
+ <Toolbar.Root>
176
+ <Tabs.Tablist>
177
+ <Tabs.Tab value='unresolved' classNames='text-sm'>
178
+ {t('show unresolved label')}
179
+ </Tabs.Tab>
180
+ <Tabs.Tab value='all' classNames='text-sm'>
181
+ {t('show all label')}
182
+ </Tabs.Tab>
183
+ </Tabs.Tablist>
184
+ </Toolbar.Root>
185
+ </Panel.Toolbar>
186
+ <Panel.Content asChild>
187
+ <ScrollArea.Root thin>
188
+ <ScrollArea.Viewport>
189
+ <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
190
+ <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
191
+ </ScrollArea.Viewport>
192
+ </ScrollArea.Root>
193
+ </Panel.Content>
194
+ </Panel.Root>
195
+ </Tabs.Root>
193
196
  );
194
197
  };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { ThreadCompanion } from './ThreadCompanion';
6
+
7
+ export default ThreadCompanion;
@@ -7,8 +7,8 @@ import React from 'react';
7
7
  import { useTranslation } from '@dxos/react-ui';
8
8
  import { Settings } from '@dxos/react-ui-form';
9
9
 
10
- import { meta } from '../meta';
11
- import type { ThreadSettingsProps } from '../types';
10
+ import { meta } from '../../meta';
11
+ import type { ThreadSettingsProps } from '../../types';
12
12
 
13
13
  export type ThreadSettingsComponentProps = {
14
14
  settings: ThreadSettingsProps;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { ThreadSettings } from './ThreadSettings';
6
+
7
+ export default ThreadSettings;
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type ComponentType, lazy } from 'react';
6
+
7
+ export const CallDebugPanel: ComponentType<any> = lazy(() => import('./CallDebugPanel'));
8
+ export const CallSidebar: ComponentType<any> = lazy(() => import('./CallSidebar'));
9
+ export const ChannelContainer: ComponentType<any> = lazy(() => import('./ChannelContainer'));
10
+ export const ChatContainer: ComponentType<any> = lazy(() => import('./ChatContainer'));
11
+ export const ThreadCompanion: ComponentType<any> = lazy(() => import('./ThreadCompanion'));
12
+ export const ThreadSettings: ComponentType<any> = lazy(() => import('./ThreadSettings'));