@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.
- package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs +182 -0
- package/dist/lib/browser/CallDebugPanel-FGCTY7Q4.mjs.map +7 -0
- package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs +33 -0
- package/dist/lib/browser/CallSidebar-PJCMNDIF.mjs.map +7 -0
- package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs +15 -0
- package/dist/lib/browser/ChannelContainer-EPYG4QAC.mjs.map +7 -0
- package/dist/lib/browser/ChatContainer-2243UD2M.mjs +14 -0
- package/dist/lib/browser/ChatContainer-2243UD2M.mjs.map +7 -0
- package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs +204 -0
- package/dist/lib/browser/ThreadCompanion-2CMLJH76.mjs.map +7 -0
- package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs +20 -0
- package/dist/lib/browser/ThreadSettings-S55YVOGA.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-XFGLMIGK.mjs → app-graph-builder-5LCAM746.mjs} +5 -3
- package/dist/lib/{node-esm/app-graph-builder-IN6VLJBO.mjs.map → browser/app-graph-builder-5LCAM746.mjs.map} +1 -1
- package/dist/lib/browser/{blueprint-definition-ACPH22F7.mjs → blueprint-definition-42M2EJ2Y.mjs} +4 -5
- package/dist/lib/browser/blueprint-definition-42M2EJ2Y.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +3 -3
- package/dist/lib/browser/{call-manager-GDGIKJKN.mjs → call-manager-2PRP4QVZ.mjs} +3 -2
- package/dist/lib/browser/{chunk-4EUEMHNI.mjs → chunk-G6FJBSXX.mjs} +110 -804
- package/dist/lib/browser/chunk-G6FJBSXX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-JBB73URQ.mjs → chunk-HDLDMR54.mjs} +1 -1
- package/dist/lib/browser/{chunk-JBB73URQ.mjs.map → chunk-HDLDMR54.mjs.map} +2 -2
- package/dist/lib/browser/chunk-LUK4UNFA.mjs +20 -0
- package/dist/lib/browser/chunk-LUK4UNFA.mjs.map +7 -0
- package/dist/lib/browser/chunk-PDHCY236.mjs +223 -0
- package/dist/lib/browser/chunk-PDHCY236.mjs.map +7 -0
- package/dist/lib/browser/{chunk-RH7XTXSR.mjs → chunk-PL5LIVP4.mjs} +18 -19
- package/dist/lib/browser/chunk-PL5LIVP4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-2FIHSX35.mjs → chunk-U32R23JO.mjs} +12 -28
- package/dist/lib/browser/chunk-U32R23JO.mjs.map +7 -0
- package/dist/lib/browser/chunk-UVUCB7QO.mjs +125 -0
- package/dist/lib/browser/chunk-UVUCB7QO.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +17 -30
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{markdown-YJCSOWXX.mjs → markdown-GRRPCZHJ.mjs} +3 -3
- package/dist/lib/{node-esm/markdown-6LRP3PAP.mjs.map → browser/markdown-GRRPCZHJ.mjs.map} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-PROCP5L4.mjs → operation-resolver-EP7FAYEB.mjs} +10 -9
- package/dist/lib/browser/operation-resolver-EP7FAYEB.mjs.map +7 -0
- package/dist/lib/browser/{react-root-FHK2SVPU.mjs → react-root-7UFFPPRD.mjs} +5 -4
- package/dist/lib/browser/{react-surface-7MQA6VSH.mjs → react-surface-TIHBSZPD.mjs} +16 -14
- package/dist/lib/browser/react-surface-TIHBSZPD.mjs.map +7 -0
- package/dist/lib/browser/{repair-6OZ75AUU.mjs → repair-TBU45SBG.mjs} +7 -5
- package/dist/lib/browser/repair-TBU45SBG.mjs.map +7 -0
- package/dist/lib/browser/{settings-TWKOTGSU.mjs → settings-Y75FG6XR.mjs} +5 -3
- package/dist/lib/{node-esm/settings-5O254B3Z.mjs.map → browser/settings-Y75FG6XR.mjs.map} +1 -1
- package/dist/lib/browser/{state-SJR2GL5G.mjs → state-OBTMMEUZ.mjs} +3 -2
- package/dist/lib/browser/types/index.mjs +2 -1
- package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs +183 -0
- package/dist/lib/node-esm/CallDebugPanel-CYACANSP.mjs.map +7 -0
- package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs +34 -0
- package/dist/lib/node-esm/CallSidebar-XD7J7EQ6.mjs.map +7 -0
- package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs +16 -0
- package/dist/lib/node-esm/ChannelContainer-NU4LSLB4.mjs.map +7 -0
- package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs +15 -0
- package/dist/lib/node-esm/ChatContainer-FPNIG33R.mjs.map +7 -0
- package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs +205 -0
- package/dist/lib/node-esm/ThreadCompanion-TLWTONG6.mjs.map +7 -0
- package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs +21 -0
- package/dist/lib/node-esm/ThreadSettings-EUH4AGYV.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-IN6VLJBO.mjs → app-graph-builder-VBLHLX75.mjs} +5 -3
- package/dist/lib/{browser/app-graph-builder-XFGLMIGK.mjs.map → node-esm/app-graph-builder-VBLHLX75.mjs.map} +1 -1
- package/dist/lib/node-esm/{blueprint-definition-SXVKFUNV.mjs → blueprint-definition-PEXTS56K.mjs} +4 -5
- package/dist/lib/node-esm/blueprint-definition-PEXTS56K.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +3 -3
- package/dist/lib/node-esm/{call-manager-36UAAQCJ.mjs → call-manager-BLQCEM2F.mjs} +3 -2
- package/dist/lib/{browser/call-manager-GDGIKJKN.mjs.map → node-esm/call-manager-BLQCEM2F.mjs.map} +1 -1
- package/dist/lib/node-esm/{chunk-OKVE6CLS.mjs → chunk-6K5ACCGB.mjs} +18 -18
- package/dist/lib/node-esm/chunk-6K5ACCGB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7SZBKQUU.mjs +224 -0
- package/dist/lib/node-esm/chunk-7SZBKQUU.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs +22 -0
- package/dist/lib/node-esm/chunk-GPPP2MZ3.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RBRWHRHE.mjs → chunk-IQUV7DR6.mjs} +110 -804
- package/dist/lib/node-esm/chunk-IQUV7DR6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-WMWUXWAS.mjs → chunk-QYAVWNVM.mjs} +12 -28
- package/dist/lib/node-esm/chunk-QYAVWNVM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs +126 -0
- package/dist/lib/node-esm/chunk-V2GXQ2UB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-G7PZNN3Z.mjs → chunk-YN2Y7GPW.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-G7PZNN3Z.mjs.map → chunk-YN2Y7GPW.mjs.map} +2 -2
- package/dist/lib/node-esm/index.mjs +17 -30
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{markdown-6LRP3PAP.mjs → markdown-WHWUESF7.mjs} +3 -3
- package/dist/lib/node-esm/markdown-WHWUESF7.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-LPEPV5BF.mjs → operation-resolver-R7QJW3TW.mjs} +10 -9
- package/dist/lib/node-esm/operation-resolver-R7QJW3TW.mjs.map +7 -0
- package/dist/lib/node-esm/{react-root-P5P4VGQJ.mjs → react-root-D7CWS5XP.mjs} +5 -4
- package/dist/lib/{browser/react-root-FHK2SVPU.mjs.map → node-esm/react-root-D7CWS5XP.mjs.map} +1 -1
- package/dist/lib/node-esm/{react-surface-M7VI5XG2.mjs → react-surface-WWZFSK5Y.mjs} +16 -14
- package/dist/lib/node-esm/react-surface-WWZFSK5Y.mjs.map +7 -0
- package/dist/lib/node-esm/{repair-6777EPOM.mjs → repair-7JEKRNR3.mjs} +7 -5
- package/dist/lib/node-esm/repair-7JEKRNR3.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-5O254B3Z.mjs → settings-W4JN2YKJ.mjs} +5 -3
- package/dist/lib/{browser/settings-TWKOTGSU.mjs.map → node-esm/settings-W4JN2YKJ.mjs.map} +1 -1
- package/dist/lib/node-esm/{state-5R3TZJQE.mjs → state-7UWCSIWQ.mjs} +3 -2
- package/dist/lib/{browser/state-SJR2GL5G.mjs.map → node-esm/state-7UWCSIWQ.mjs.map} +1 -1
- package/dist/lib/node-esm/types/index.mjs +2 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/index.d.ts +1 -1
- package/dist/types/src/blueprints/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/thread-blueprint.d.ts +3 -20
- package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +1 -5
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/call-manager/call-manager.d.ts +1 -1
- package/dist/types/src/capabilities/markdown/markdown.d.ts +1 -1
- package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/repair/repair.d.ts +1 -1
- package/dist/types/src/capabilities/repair/repair.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/settings.d.ts +1 -1
- package/dist/types/src/capabilities/state/state.d.ts +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +3 -3
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -6
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/{components → containers/CallDebugPanel}/CallDebugPanel.d.ts +1 -1
- package/dist/types/src/containers/CallDebugPanel/CallDebugPanel.d.ts.map +1 -0
- package/dist/types/src/containers/CallDebugPanel/index.d.ts +3 -0
- package/dist/types/src/containers/CallDebugPanel/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/CallSidebar}/CallSidebar.d.ts +0 -1
- package/dist/types/src/containers/CallSidebar/CallSidebar.d.ts.map +1 -0
- package/dist/types/src/containers/CallSidebar/index.d.ts +3 -0
- package/dist/types/src/containers/CallSidebar/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.d.ts +2 -3
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.d.ts.map +1 -0
- package/dist/types/src/{components → containers/ChannelContainer}/ChannelContainer.stories.d.ts +1 -1
- package/dist/types/src/containers/ChannelContainer/ChannelContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChannelContainer/index.d.ts +3 -0
- package/dist/types/src/containers/ChannelContainer/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/ChatContainer}/ChatContainer.d.ts +0 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.d.ts.map +1 -0
- package/dist/types/src/{components/Chat.stories.d.ts → containers/ChatContainer/ChatContainer.stories.d.ts} +1 -1
- package/dist/types/src/containers/ChatContainer/ChatContainer.stories.d.ts.map +1 -0
- package/dist/types/src/containers/ChatContainer/index.d.ts +3 -0
- package/dist/types/src/containers/ChatContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadCompanion/ThreadCompanion.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadCompanion/index.d.ts +3 -0
- package/dist/types/src/containers/ThreadCompanion/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers/ThreadSettings}/ThreadSettings.d.ts +1 -1
- package/dist/types/src/containers/ThreadSettings/ThreadSettings.d.ts.map +1 -0
- package/dist/types/src/containers/ThreadSettings/index.d.ts +3 -0
- package/dist/types/src/containers/ThreadSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +8 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/functions/index.d.ts +13 -1
- package/dist/types/src/functions/index.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +25 -9
- package/dist/types/src/types/Channel.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +171 -94
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +57 -57
- package/src/ThreadPlugin.tsx +2 -14
- package/src/blueprints/index.ts +1 -1
- package/src/blueprints/thread-blueprint.ts +14 -6
- package/src/calls-service.stories.tsx +1 -1
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +4 -11
- package/src/capabilities/markdown/markdown.ts +0 -1
- package/src/capabilities/operation-resolver/operation-resolver.ts +2 -3
- package/src/capabilities/react-surface/react-surface.tsx +1 -1
- package/src/capabilities/repair/repair.ts +7 -3
- package/src/components/Call/Toolbar.tsx +4 -6
- package/src/components/Comments.stories.tsx +4 -3
- package/src/components/CommentsContainer.tsx +9 -8
- package/src/components/CommentsThreadContainer.tsx +3 -4
- package/src/components/Media/VideoObject.stories.tsx +3 -3
- package/src/components/Media/VideoObject.tsx +1 -1
- package/src/components/MessageContainer.tsx +8 -8
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +3 -3
- package/src/components/ResponsiveGrid/ResponsiveContainer.tsx +2 -2
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -4
- package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +5 -5
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +5 -5
- package/src/components/command-extension.ts +1 -1
- package/src/components/index.ts +0 -7
- package/src/{components → containers/CallDebugPanel}/CallDebugPanel.tsx +4 -4
- package/src/containers/CallDebugPanel/index.ts +7 -0
- package/src/{components → containers/CallSidebar}/CallSidebar.tsx +2 -5
- package/src/containers/CallSidebar/index.ts +7 -0
- package/src/{components → containers/ChannelContainer}/ChannelContainer.stories.tsx +4 -4
- package/src/{components → containers/ChannelContainer}/ChannelContainer.tsx +42 -33
- package/src/containers/ChannelContainer/index.ts +7 -0
- package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx} +14 -12
- package/src/{components → containers/ChatContainer}/ChatContainer.tsx +14 -17
- package/src/containers/ChatContainer/index.ts +7 -0
- package/src/{components → containers/ThreadCompanion}/ThreadCompanion.tsx +33 -30
- package/src/containers/ThreadCompanion/index.ts +7 -0
- package/src/{components → containers/ThreadSettings}/ThreadSettings.tsx +2 -2
- package/src/containers/ThreadSettings/index.ts +7 -0
- package/src/containers/index.ts +12 -0
- package/src/functions/create-proposals.ts +2 -2
- package/src/functions/index.ts +5 -1
- package/src/hooks/analytics.ts +1 -0
- package/src/types/Channel.ts +2 -2
- package/src/types/types.ts +6 -6
- package/dist/lib/browser/blueprint-definition-ACPH22F7.mjs.map +0 -7
- package/dist/lib/browser/chunk-2FIHSX35.mjs.map +0 -7
- package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +0 -7
- package/dist/lib/browser/chunk-RH7XTXSR.mjs.map +0 -7
- package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +0 -7
- package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +0 -7
- package/dist/lib/browser/repair-6OZ75AUU.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-SXVKFUNV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OKVE6CLS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +0 -7
- package/dist/lib/node-esm/repair-6777EPOM.mjs.map +0 -7
- package/dist/types/src/components/CallDebugPanel.d.ts.map +0 -1
- package/dist/types/src/components/CallSidebar.d.ts.map +0 -1
- package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/Chat.stories.d.ts.map +0 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
- package/dist/types/src/components/ThreadCompanion.d.ts.map +0 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +0 -1
- /package/dist/lib/{node-esm/call-manager-36UAAQCJ.mjs.map → browser/call-manager-2PRP4QVZ.mjs.map} +0 -0
- /package/dist/lib/{node-esm/react-root-P5P4VGQJ.mjs.map → browser/react-root-7UFFPPRD.mjs.map} +0 -0
- /package/dist/lib/{node-esm/state-5R3TZJQE.mjs.map → browser/state-OBTMMEUZ.mjs.map} +0 -0
- /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='
|
|
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 = '
|
|
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
|
|
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 && '
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
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
|
|
111
|
-
pinned ? '
|
|
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-
|
|
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-
|
|
32
|
+
class: mx('dx-tag dx-tag--indigo text-base-surface-text font-medium'),
|
|
33
33
|
},
|
|
34
34
|
]);
|
|
35
35
|
|
package/src/components/index.ts
CHANGED
|
@@ -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 '
|
|
14
|
-
import { meta } from '
|
|
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
|
|
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='
|
|
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>
|
|
@@ -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 '
|
|
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;
|
|
@@ -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 '
|
|
17
|
-
import { translations } from '
|
|
18
|
-
import { Channel } from '
|
|
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 {
|
|
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 {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
|
|
27
|
-
import
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
-
<
|
|
204
|
-
<
|
|
205
|
-
</
|
|
212
|
+
<Menu.Root {...menuProps} attendableId={attendableId}>
|
|
213
|
+
<Menu.Toolbar textBlockWidth />
|
|
214
|
+
</Menu.Root>
|
|
206
215
|
</ElevationProvider>
|
|
207
216
|
);
|
|
208
217
|
};
|
package/src/{components/Chat.stories.tsx → containers/ChatContainer/ChatContainer.stories.tsx}
RENAMED
|
@@ -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 '
|
|
23
|
-
import { Channel } from '
|
|
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/
|
|
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({
|
|
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 {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
|
|
28
|
-
import {
|
|
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
|
-
'
|
|
127
|
-
'transition-[padding-
|
|
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
|
|
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;
|
|
@@ -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 '
|
|
22
|
-
import { meta } from '
|
|
23
|
-
import { ThreadCapabilities, ThreadOperation, type ViewState } from '
|
|
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
|
-
<
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
</
|
|
186
|
-
</
|
|
187
|
-
<
|
|
188
|
-
<
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
};
|
|
@@ -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 '
|
|
11
|
-
import type { ThreadSettingsProps } from '
|
|
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,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'));
|