@dxos/plugin-thread 0.8.2-main.12df754 → 0.8.2-main.30e4dbb
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/{ChatContainer-WC6KQDDU.mjs → ChatContainer-H4XTHM3A.mjs} +5 -5
- package/dist/lib/browser/ChatContainer-H4XTHM3A.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-6W4UKJDI.mjs → app-graph-builder-SQD3KQKB.mjs} +2 -2
- package/dist/lib/browser/app-graph-builder-SQD3KQKB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AYNXYEKP.mjs → chunk-32EIWOAL.mjs} +1 -1
- package/dist/lib/browser/{chunk-AYNXYEKP.mjs.map → chunk-32EIWOAL.mjs.map} +2 -2
- package/dist/lib/browser/chunk-AM4MYXGU.mjs +93 -0
- package/dist/lib/browser/chunk-AM4MYXGU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FY5OCUP6.mjs → chunk-I3JK6CBS.mjs} +9 -7
- package/dist/lib/browser/chunk-I3JK6CBS.mjs.map +7 -0
- package/dist/lib/browser/chunk-UIHVZTER.mjs +17 -0
- package/dist/lib/browser/index.mjs +10 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-3UW6ROYT.mjs → intent-resolver-EDSAXXNW.mjs} +4 -4
- package/dist/lib/browser/intent-resolver-EDSAXXNW.mjs.map +7 -0
- package/dist/lib/browser/{markdown-7KXBXCUS.mjs → markdown-M4QAJXHG.mjs} +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-KAPIXG2M.mjs → react-surface-JRPJOEQ7.mjs} +21 -22
- package/dist/lib/browser/react-surface-JRPJOEQ7.mjs.map +7 -0
- package/dist/lib/browser/{settings-2VZ7S4SK.mjs → settings-SSYDISA6.mjs} +2 -2
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{ChatContainer-LVYQ67PJ.cjs → ChatContainer-TUISUIY7.cjs} +11 -11
- package/dist/lib/node/ChatContainer-TUISUIY7.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-HZNWT4QU.cjs → app-graph-builder-G45JDZWQ.cjs} +5 -5
- package/dist/lib/node/app-graph-builder-G45JDZWQ.cjs.map +7 -0
- package/dist/lib/node/{chunk-RIYLEDQ7.cjs → chunk-ETDNE4Z6.cjs} +13 -11
- package/dist/lib/node/chunk-ETDNE4Z6.cjs.map +7 -0
- package/dist/lib/node/{chunk-46BSFPBV.cjs → chunk-HG7J3YR3.cjs} +44 -44
- package/dist/lib/node/chunk-HG7J3YR3.cjs.map +7 -0
- package/dist/lib/node/{chunk-W25MBII2.cjs → chunk-NO6WQR36.cjs} +4 -4
- package/dist/lib/node/{chunk-W25MBII2.cjs.map → chunk-NO6WQR36.cjs.map} +2 -2
- package/dist/lib/node/{chunk-BASYS5Q5.cjs → chunk-ZFPSGBXT.cjs} +9 -9
- package/dist/lib/node/index.cjs +17 -17
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-DC6HDNTX.cjs → intent-resolver-ECFDZLCG.cjs} +15 -15
- package/dist/lib/node/intent-resolver-ECFDZLCG.cjs.map +7 -0
- package/dist/lib/node/{markdown-L2WMCQKM.cjs → markdown-G5NDD5EJ.cjs} +7 -7
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-5USFRCS3.cjs → react-surface-PLJ3Z77A.cjs} +31 -32
- package/dist/lib/node/react-surface-PLJ3Z77A.cjs.map +7 -0
- package/dist/lib/node/{settings-7MGTJ46L.cjs → settings-PV6MGI52.cjs} +6 -6
- package/dist/lib/node/types.cjs +3 -3
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{ChatContainer-WMOPMK5H.mjs → ChatContainer-G7VTTRDN.mjs} +5 -5
- package/dist/lib/node-esm/ChatContainer-G7VTTRDN.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-M3KK5QJH.mjs → app-graph-builder-25K4ELOR.mjs} +2 -2
- package/dist/lib/node-esm/app-graph-builder-25K4ELOR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-G7AKHJ3A.mjs +19 -0
- package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs → chunk-IZWN4KAY.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs.map → chunk-IZWN4KAY.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-7DOPZH6Y.mjs → chunk-V7HLWNAO.mjs} +9 -7
- package/dist/lib/node-esm/chunk-V7HLWNAO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XTZJQJY4.mjs +94 -0
- package/dist/lib/node-esm/chunk-XTZJQJY4.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +10 -10
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OAMDKGAA.mjs → intent-resolver-GHN5XIMY.mjs} +4 -4
- package/dist/lib/node-esm/intent-resolver-GHN5XIMY.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-ZKU23UVD.mjs → markdown-WMR5AZRI.mjs} +2 -2
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-VNZ2SN6W.mjs → react-surface-M5GMRQVC.mjs} +21 -22
- package/dist/lib/node-esm/react-surface-M5GMRQVC.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-AJAZ3O47.mjs → settings-TJ53GIH3.mjs} +2 -2
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.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/MessageContainer.d.ts +5 -4
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +158 -49
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +2 -2
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts +2 -2
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -56
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +328 -61
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +35 -33
- package/src/ThreadPlugin.tsx +7 -7
- package/src/capabilities/app-graph-builder.ts +3 -3
- package/src/capabilities/intent-resolver.ts +2 -2
- package/src/components/Chat.stories.tsx +3 -3
- package/src/components/ChatContainer.tsx +3 -3
- package/src/components/CommentContainer.tsx +25 -49
- package/src/components/Comments.stories.tsx +3 -7
- package/src/components/CommentsContainer.tsx +2 -8
- package/src/components/MessageContainer.tsx +31 -50
- package/src/components/testing.ts +2 -2
- package/src/components/types.ts +2 -2
- package/src/hooks/analytics.ts +6 -2
- package/src/translations.ts +2 -2
- package/src/types.ts +40 -40
- package/dist/lib/browser/ChatContainer-WC6KQDDU.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +0 -7
- package/dist/lib/browser/chunk-2S7HPWRY.mjs +0 -17
- package/dist/lib/browser/chunk-FY5OCUP6.mjs.map +0 -7
- package/dist/lib/browser/chunk-WOG72DWE.mjs +0 -93
- package/dist/lib/browser/chunk-WOG72DWE.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3UW6ROYT.mjs.map +0 -7
- package/dist/lib/browser/react-surface-KAPIXG2M.mjs.map +0 -7
- package/dist/lib/node/ChatContainer-LVYQ67PJ.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +0 -7
- package/dist/lib/node/chunk-46BSFPBV.cjs.map +0 -7
- package/dist/lib/node/chunk-RIYLEDQ7.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-DC6HDNTX.cjs.map +0 -7
- package/dist/lib/node/react-surface-5USFRCS3.cjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-WMOPMK5H.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7DOPZH6Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-E446MGLP.mjs +0 -94
- package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HZGOTRPK.mjs +0 -19
- package/dist/lib/node-esm/intent-resolver-OAMDKGAA.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-VNZ2SN6W.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-2S7HPWRY.mjs.map → chunk-UIHVZTER.mjs.map} +0 -0
- /package/dist/lib/browser/{markdown-7KXBXCUS.mjs.map → markdown-M4QAJXHG.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-2VZ7S4SK.mjs.map → settings-SSYDISA6.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-BASYS5Q5.cjs.map → chunk-ZFPSGBXT.cjs.map} +0 -0
- /package/dist/lib/node/{markdown-L2WMCQKM.cjs.map → markdown-G5NDD5EJ.cjs.map} +0 -0
- /package/dist/lib/node/{settings-7MGTJ46L.cjs.map → settings-PV6MGI52.cjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-HZGOTRPK.mjs.map → chunk-G7AKHJ3A.mjs.map} +0 -0
- /package/dist/lib/node-esm/{markdown-ZKU23UVD.mjs.map → markdown-WMR5AZRI.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-AJAZ3O47.mjs.map → settings-TJ53GIH3.mjs.map} +0 -0
|
@@ -12,7 +12,7 @@ import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';
|
|
|
12
12
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
13
13
|
import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
|
|
14
14
|
import { live, fullyQualifiedId, getSpace, makeRef } from '@dxos/react-client/echo';
|
|
15
|
-
import {
|
|
15
|
+
import { DataType } from '@dxos/schema';
|
|
16
16
|
|
|
17
17
|
import { ThreadCapabilities } from './capabilities';
|
|
18
18
|
import { THREAD_PLUGIN } from '../meta';
|
|
@@ -172,7 +172,7 @@ export default (context: PluginsContext) =>
|
|
|
172
172
|
invariant(space, 'Space not found');
|
|
173
173
|
const intents = [];
|
|
174
174
|
|
|
175
|
-
const message = live(
|
|
175
|
+
const message = live(DataType.Message, {
|
|
176
176
|
sender,
|
|
177
177
|
created: new Date().toISOString(),
|
|
178
178
|
blocks: [{ type: 'text', text }],
|
|
@@ -19,7 +19,7 @@ import { live, type Space } from '@dxos/react-client/echo';
|
|
|
19
19
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
20
20
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
21
21
|
import { Thread } from '@dxos/react-ui-thread';
|
|
22
|
-
import {
|
|
22
|
+
import { DataType } from '@dxos/schema';
|
|
23
23
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
24
24
|
|
|
25
25
|
import { ChatContainer } from './ChatContainer';
|
|
@@ -80,8 +80,8 @@ const meta: Meta = {
|
|
|
80
80
|
],
|
|
81
81
|
}),
|
|
82
82
|
withTheme,
|
|
83
|
-
withLayout({ fullscreen: true
|
|
84
|
-
withClientProvider({ createSpace: true, types: [ThreadType,
|
|
83
|
+
withLayout({ fullscreen: true }),
|
|
84
|
+
withClientProvider({ createSpace: true, types: [ThreadType, DataType.Message] }),
|
|
85
85
|
],
|
|
86
86
|
parameters: { translations },
|
|
87
87
|
};
|
|
@@ -14,7 +14,7 @@ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/re
|
|
|
14
14
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
15
15
|
import { mx } from '@dxos/react-ui-theme';
|
|
16
16
|
import { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';
|
|
17
|
-
import {
|
|
17
|
+
import { DataType } from '@dxos/schema';
|
|
18
18
|
|
|
19
19
|
import { MessageContainer } from './MessageContainer';
|
|
20
20
|
import { command } from './command-extension';
|
|
@@ -44,7 +44,7 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
|
|
|
44
44
|
const id = dxn.toString();
|
|
45
45
|
const identity = useIdentity()!;
|
|
46
46
|
const members = useMembers(space?.key);
|
|
47
|
-
const queue = useQueue<
|
|
47
|
+
const queue = useQueue<DataType.Message>(dxn, { pollInterval: 1_000 });
|
|
48
48
|
const activity = useStatus(space, id);
|
|
49
49
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
50
50
|
// TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
|
|
@@ -84,7 +84,7 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
queue.append([
|
|
87
|
-
create(
|
|
87
|
+
create(DataType.Message, {
|
|
88
88
|
sender: { identityDid: identity.did },
|
|
89
89
|
created: new Date().toISOString(),
|
|
90
90
|
blocks: [{ type: 'text', text: messageRef.current }],
|
|
@@ -42,25 +42,17 @@ const ToggleResolvedButton = ({
|
|
|
42
42
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
43
43
|
const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');
|
|
44
44
|
return (
|
|
45
|
-
<Tooltip.
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
</Tooltip.Trigger>
|
|
57
|
-
<Tooltip.Portal>
|
|
58
|
-
<Tooltip.Content>
|
|
59
|
-
{label}
|
|
60
|
-
<Tooltip.Arrow />
|
|
61
|
-
</Tooltip.Content>
|
|
62
|
-
</Tooltip.Portal>
|
|
63
|
-
</Tooltip.Root>
|
|
45
|
+
<Tooltip.Trigger asChild content={label}>
|
|
46
|
+
<Button
|
|
47
|
+
variant='ghost'
|
|
48
|
+
data-testid='thread.toggle-resolved'
|
|
49
|
+
onClick={onResolve}
|
|
50
|
+
classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}
|
|
51
|
+
>
|
|
52
|
+
<span className='sr-only'>{label}</span>
|
|
53
|
+
{isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}
|
|
54
|
+
</Button>
|
|
55
|
+
</Tooltip.Trigger>
|
|
64
56
|
);
|
|
65
57
|
};
|
|
66
58
|
|
|
@@ -68,25 +60,17 @@ const DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {
|
|
|
68
60
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
69
61
|
const label = t('delete thread label');
|
|
70
62
|
return (
|
|
71
|
-
<Tooltip.
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
</Tooltip.Trigger>
|
|
83
|
-
<Tooltip.Portal>
|
|
84
|
-
<Tooltip.Content classNames='z-30'>
|
|
85
|
-
{label}
|
|
86
|
-
<Tooltip.Arrow />
|
|
87
|
-
</Tooltip.Content>
|
|
88
|
-
</Tooltip.Portal>
|
|
89
|
-
</Tooltip.Root>
|
|
63
|
+
<Tooltip.Trigger asChild content={label}>
|
|
64
|
+
<Button
|
|
65
|
+
variant='ghost'
|
|
66
|
+
data-testid='thread.delete'
|
|
67
|
+
onClick={onDelete}
|
|
68
|
+
classNames={[commentControlClassNames, hoverableControlItem]}
|
|
69
|
+
>
|
|
70
|
+
<span className='sr-only'>{label}</span>
|
|
71
|
+
<X className={sizeClass} />
|
|
72
|
+
</Button>
|
|
73
|
+
</Tooltip.Trigger>
|
|
90
74
|
);
|
|
91
75
|
};
|
|
92
76
|
|
|
@@ -156,17 +140,9 @@ export const CommentContainer = ({
|
|
|
156
140
|
)}
|
|
157
141
|
>
|
|
158
142
|
{detached ? (
|
|
159
|
-
<Tooltip.
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
</Tooltip.Trigger>
|
|
163
|
-
<Tooltip.Portal>
|
|
164
|
-
<Tooltip.Content classNames='z-30' side='top'>
|
|
165
|
-
{t('detached thread label')}
|
|
166
|
-
<Tooltip.Arrow />
|
|
167
|
-
</Tooltip.Content>
|
|
168
|
-
</Tooltip.Portal>
|
|
169
|
-
</Tooltip.Root>
|
|
143
|
+
<Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
|
|
144
|
+
<ThreadHeading detached>{thread.name}</ThreadHeading>
|
|
145
|
+
</Tooltip.Trigger>
|
|
170
146
|
) : (
|
|
171
147
|
<ThreadHeading>{thread.name}</ThreadHeading>
|
|
172
148
|
)}
|
|
@@ -14,7 +14,7 @@ import { faker } from '@dxos/random';
|
|
|
14
14
|
import { Filter, fullyQualifiedId, useQuery, useSpace } from '@dxos/react-client/echo';
|
|
15
15
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
16
16
|
import { type ClientRepeatedComponentProps, ClientRepeater } from '@dxos/react-client/testing';
|
|
17
|
-
import {
|
|
17
|
+
import { DataType } from '@dxos/schema';
|
|
18
18
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
19
19
|
|
|
20
20
|
import { CommentsContainer } from './CommentsContainer';
|
|
@@ -59,12 +59,8 @@ export const Default = {};
|
|
|
59
59
|
const meta: Meta = {
|
|
60
60
|
title: 'plugins/plugin-thread/Comments',
|
|
61
61
|
// TODO(wittjosiah): Use decorator.
|
|
62
|
-
render: () => <ClientRepeater component={Story} createIdentity createSpace types={[ThreadType,
|
|
63
|
-
decorators: [
|
|
64
|
-
withTheme,
|
|
65
|
-
withLayout({ fullscreen: true, tooltips: true }),
|
|
66
|
-
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
67
|
-
],
|
|
62
|
+
render: () => <ClientRepeater component={Story} createIdentity createSpace types={[ThreadType, DataType.Message]} />,
|
|
63
|
+
decorators: [withTheme, withLayout({ fullscreen: true }), withPluginManager({ plugins: [IntentPlugin()] })],
|
|
68
64
|
parameters: { translations },
|
|
69
65
|
};
|
|
70
66
|
|
|
@@ -8,7 +8,7 @@ import React, { useEffect } from 'react';
|
|
|
8
8
|
import { type ThreadType } from '@dxos/plugin-space/types';
|
|
9
9
|
import { fullyQualifiedId } from '@dxos/react-client/echo';
|
|
10
10
|
import { useTranslation, Trans } from '@dxos/react-ui';
|
|
11
|
-
import {
|
|
11
|
+
import { descriptionMessage, mx } from '@dxos/react-ui-theme';
|
|
12
12
|
|
|
13
13
|
import { CommentContainer } from './CommentContainer';
|
|
14
14
|
import { type ThreadContainerProps } from './types';
|
|
@@ -59,13 +59,7 @@ export const CommentsContainer = ({
|
|
|
59
59
|
);
|
|
60
60
|
})
|
|
61
61
|
) : (
|
|
62
|
-
<div
|
|
63
|
-
role='alert'
|
|
64
|
-
className={mx(
|
|
65
|
-
descriptionText,
|
|
66
|
-
'place-self-center border border-dashed border-unAccent rounded-lg text-center p-4 m-4',
|
|
67
|
-
)}
|
|
68
|
-
>
|
|
62
|
+
<div role='alert' className={mx(descriptionMessage, 'place-self-center rounded-lg text-center m-4')}>
|
|
69
63
|
<h2 className='mbe-2 font-medium text-baseText'>{t('no comments title')}</h2>
|
|
70
64
|
<p>
|
|
71
65
|
<Trans
|
|
@@ -9,7 +9,7 @@ import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'rea
|
|
|
9
9
|
import { Surface } from '@dxos/app-framework';
|
|
10
10
|
import { RefArray } from '@dxos/live-object';
|
|
11
11
|
import { PublicKey } from '@dxos/react-client';
|
|
12
|
-
import { type
|
|
12
|
+
import { type AnyLiveObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';
|
|
13
13
|
import { useIdentity, type Identity } from '@dxos/react-client/halo';
|
|
14
14
|
import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';
|
|
15
15
|
import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
mx,
|
|
22
22
|
} from '@dxos/react-ui-theme';
|
|
23
23
|
import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
|
|
24
|
-
import { type
|
|
24
|
+
import { type DataType } from '@dxos/schema';
|
|
25
25
|
|
|
26
26
|
import { command } from './command-extension';
|
|
27
27
|
import { useOnEditAnalytics } from '../hooks';
|
|
@@ -31,17 +31,14 @@ import { getMessageMetadata } from '../util';
|
|
|
31
31
|
// TODO(thure): #8149
|
|
32
32
|
const messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];
|
|
33
33
|
|
|
34
|
-
export
|
|
35
|
-
message
|
|
36
|
-
members,
|
|
37
|
-
editable = false,
|
|
38
|
-
onDelete,
|
|
39
|
-
}: {
|
|
40
|
-
message: MessageType;
|
|
34
|
+
export type MessageContainerProps = {
|
|
35
|
+
message: DataType.Message;
|
|
41
36
|
members: SpaceMember[];
|
|
42
37
|
editable?: boolean;
|
|
43
38
|
onDelete?: (id: string) => void;
|
|
44
|
-
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const MessageContainer = ({ message, members, editable = false, onDelete }: MessageContainerProps) => {
|
|
45
42
|
const senderIdentity = members.find(
|
|
46
43
|
(member) =>
|
|
47
44
|
(message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
|
|
@@ -64,46 +61,30 @@ export const MessageContainer = ({
|
|
|
64
61
|
<MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>
|
|
65
62
|
<ButtonGroup classNames='mie-1'>
|
|
66
63
|
{userIsAuthor && editable && (
|
|
67
|
-
<Tooltip.
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
</Tooltip.Trigger>
|
|
79
|
-
<Tooltip.Portal>
|
|
80
|
-
<Tooltip.Content>
|
|
81
|
-
{editLabel}
|
|
82
|
-
<Tooltip.Arrow />
|
|
83
|
-
</Tooltip.Content>
|
|
84
|
-
</Tooltip.Portal>
|
|
85
|
-
</Tooltip.Root>
|
|
64
|
+
<Tooltip.Trigger asChild content={editLabel}>
|
|
65
|
+
<Button
|
|
66
|
+
variant='ghost'
|
|
67
|
+
data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}
|
|
68
|
+
classNames={messageControlClassNames}
|
|
69
|
+
onClick={() => setEditing((editing) => !editing)}
|
|
70
|
+
>
|
|
71
|
+
<span className='sr-only'>{editLabel}</span>
|
|
72
|
+
{editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}
|
|
73
|
+
</Button>
|
|
74
|
+
</Tooltip.Trigger>
|
|
86
75
|
)}
|
|
87
76
|
{onDelete && (
|
|
88
|
-
<Tooltip.
|
|
89
|
-
<
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
</Tooltip.Trigger>
|
|
100
|
-
<Tooltip.Portal>
|
|
101
|
-
<Tooltip.Content>
|
|
102
|
-
{deleteLabel}
|
|
103
|
-
<Tooltip.Arrow />
|
|
104
|
-
</Tooltip.Content>
|
|
105
|
-
</Tooltip.Portal>
|
|
106
|
-
</Tooltip.Root>
|
|
77
|
+
<Tooltip.Trigger asChild content={deleteLabel}>
|
|
78
|
+
<Button
|
|
79
|
+
variant='ghost'
|
|
80
|
+
data-testid='thread.message.delete'
|
|
81
|
+
classNames={messageControlClassNames}
|
|
82
|
+
onClick={() => handleDelete()}
|
|
83
|
+
>
|
|
84
|
+
<span className='sr-only'>{deleteLabel}</span>
|
|
85
|
+
<X className={getSize(4)} />
|
|
86
|
+
</Button>
|
|
87
|
+
</Tooltip.Trigger>
|
|
107
88
|
)}
|
|
108
89
|
</ButtonGroup>
|
|
109
90
|
</MessageHeading>
|
|
@@ -124,7 +105,7 @@ const TextboxBlock = ({
|
|
|
124
105
|
isAuthor,
|
|
125
106
|
editing,
|
|
126
107
|
}: {
|
|
127
|
-
block:
|
|
108
|
+
block: DataType.MessageBlock.Text;
|
|
128
109
|
editing?: boolean;
|
|
129
110
|
isAuthor?: boolean;
|
|
130
111
|
identity?: Identity;
|
|
@@ -166,7 +147,7 @@ const TextboxBlock = ({
|
|
|
166
147
|
return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
|
|
167
148
|
};
|
|
168
149
|
|
|
169
|
-
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject:
|
|
150
|
+
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: AnyLiveObject<any> }>(
|
|
170
151
|
({ subject }, forwardedRef) => {
|
|
171
152
|
let title = subject.name ?? subject.title ?? subject.type ?? 'Object';
|
|
172
153
|
if (typeof title !== 'string') {
|
|
@@ -7,14 +7,14 @@ import { live, makeRef } from '@dxos/live-object';
|
|
|
7
7
|
import { ThreadType } from '@dxos/plugin-space/types';
|
|
8
8
|
import { faker } from '@dxos/random';
|
|
9
9
|
import { type Identity } from '@dxos/react-client/halo';
|
|
10
|
-
import {
|
|
10
|
+
import { DataType } from '@dxos/schema';
|
|
11
11
|
|
|
12
12
|
export const createCommentThread = (identity: Identity) => {
|
|
13
13
|
return live(ThreadType, {
|
|
14
14
|
messages: faker.helpers.multiple(
|
|
15
15
|
() =>
|
|
16
16
|
makeRef(
|
|
17
|
-
live(
|
|
17
|
+
live(DataType.Message, {
|
|
18
18
|
sender: {
|
|
19
19
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
20
20
|
},
|
package/src/components/types.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type
|
|
5
|
+
import { type AnyLiveObject } from '@dxos/client/echo';
|
|
6
6
|
import { type ThreadType } from '@dxos/plugin-space/types';
|
|
7
7
|
import { type ThreadProps } from '@dxos/react-ui-thread';
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ import { type ThreadProps } from '@dxos/react-ui-thread';
|
|
|
20
20
|
*/
|
|
21
21
|
export type ThreadContainerProps = {
|
|
22
22
|
thread: ThreadType;
|
|
23
|
-
context?:
|
|
23
|
+
context?: AnyLiveObject<any>;
|
|
24
24
|
autoFocusTextbox?: boolean;
|
|
25
25
|
onTextboxFocus?: () => void;
|
|
26
26
|
detached?: boolean;
|
package/src/hooks/analytics.ts
CHANGED
|
@@ -9,9 +9,13 @@ import { type Live } from '@dxos/live-object';
|
|
|
9
9
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
10
10
|
import { getSpace } from '@dxos/react-client/echo';
|
|
11
11
|
import { useOnTransition } from '@dxos/react-ui';
|
|
12
|
-
import { type
|
|
12
|
+
import { type DataType } from '@dxos/schema';
|
|
13
13
|
|
|
14
|
-
export const useOnEditAnalytics = (
|
|
14
|
+
export const useOnEditAnalytics = (
|
|
15
|
+
message: Live<any>,
|
|
16
|
+
textBlock: DataType.MessageBlock.Text | undefined,
|
|
17
|
+
editing: boolean,
|
|
18
|
+
) => {
|
|
15
19
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
16
20
|
|
|
17
21
|
const onEdit = useCallback(() => {
|
package/src/translations.ts
CHANGED
|
@@ -27,9 +27,9 @@ export default [
|
|
|
27
27
|
'comments heading': 'Comments',
|
|
28
28
|
'chat heading': 'Chat',
|
|
29
29
|
'draft button': 'DRAFT',
|
|
30
|
-
'no comments title': '
|
|
30
|
+
'no comments title': 'Comments',
|
|
31
31
|
'no comments message':
|
|
32
|
-
'
|
|
32
|
+
'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',
|
|
33
33
|
'toggle show resolved': 'Show resolved',
|
|
34
34
|
'unnamed object threads label': 'Threads',
|
|
35
35
|
'mark as resolved label': 'Mark as resolved',
|
package/src/types.ts
CHANGED
|
@@ -2,86 +2,86 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
|
+
|
|
7
|
+
import { SpaceIdSchema } from '@dxos/echo-schema';
|
|
6
8
|
import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
|
|
7
9
|
import { EchoObjectSchema } from '@dxos/react-client/echo';
|
|
8
|
-
import {
|
|
10
|
+
import { DataType } from '@dxos/schema';
|
|
9
11
|
|
|
10
12
|
import { THREAD_PLUGIN } from './meta';
|
|
11
13
|
|
|
12
14
|
export namespace ThreadAction {
|
|
13
15
|
const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
|
|
14
16
|
|
|
15
|
-
export class CreateChannel extends
|
|
16
|
-
input:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
name: S.optional(S.String),
|
|
17
|
+
export class CreateChannel extends Schema.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {
|
|
18
|
+
input: Schema.Struct({
|
|
19
|
+
spaceId: SpaceIdSchema,
|
|
20
|
+
name: Schema.optional(Schema.String),
|
|
20
21
|
}),
|
|
21
|
-
output:
|
|
22
|
+
output: Schema.Struct({
|
|
22
23
|
object: ChannelType,
|
|
23
24
|
}),
|
|
24
25
|
}) {}
|
|
25
26
|
|
|
26
|
-
export class Create extends
|
|
27
|
-
input:
|
|
28
|
-
name:
|
|
29
|
-
cursor:
|
|
27
|
+
export class Create extends Schema.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {
|
|
28
|
+
input: Schema.Struct({
|
|
29
|
+
name: Schema.optional(Schema.String),
|
|
30
|
+
cursor: Schema.String,
|
|
30
31
|
subject: EchoObjectSchema,
|
|
31
32
|
}),
|
|
32
|
-
output:
|
|
33
|
+
output: Schema.Struct({
|
|
33
34
|
object: ThreadType,
|
|
34
35
|
}),
|
|
35
36
|
}) {}
|
|
36
37
|
|
|
37
|
-
export class
|
|
38
|
-
input:
|
|
39
|
-
|
|
38
|
+
export class Delete extends Schema.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {
|
|
39
|
+
input: Schema.Struct({
|
|
40
|
+
thread: ThreadType,
|
|
41
|
+
subject: EchoObjectSchema,
|
|
42
|
+
cursor: Schema.optional(Schema.String),
|
|
40
43
|
}),
|
|
41
|
-
output:
|
|
44
|
+
output: Schema.Void,
|
|
42
45
|
}) {}
|
|
43
46
|
|
|
44
|
-
export class
|
|
45
|
-
input:
|
|
46
|
-
|
|
47
|
+
export class Select extends Schema.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {
|
|
48
|
+
input: Schema.Struct({
|
|
49
|
+
current: Schema.String,
|
|
47
50
|
}),
|
|
48
|
-
output:
|
|
51
|
+
output: Schema.Void,
|
|
49
52
|
}) {}
|
|
50
53
|
|
|
51
|
-
export class
|
|
52
|
-
input:
|
|
54
|
+
export class ToggleResolved extends Schema.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {
|
|
55
|
+
input: Schema.Struct({
|
|
53
56
|
thread: ThreadType,
|
|
54
|
-
subject: EchoObjectSchema,
|
|
55
|
-
cursor: S.optional(S.String),
|
|
56
57
|
}),
|
|
57
|
-
output:
|
|
58
|
+
output: Schema.Void,
|
|
58
59
|
}) {}
|
|
59
60
|
|
|
60
|
-
export class AddMessage extends
|
|
61
|
-
input:
|
|
61
|
+
export class AddMessage extends Schema.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {
|
|
62
|
+
input: Schema.Struct({
|
|
62
63
|
subject: EchoObjectSchema,
|
|
63
64
|
thread: ThreadType,
|
|
64
|
-
sender:
|
|
65
|
-
text:
|
|
65
|
+
sender: DataType.Actor,
|
|
66
|
+
text: Schema.String,
|
|
66
67
|
}),
|
|
67
|
-
output:
|
|
68
|
+
output: Schema.Void,
|
|
68
69
|
}) {}
|
|
69
70
|
|
|
70
|
-
export class DeleteMessage extends
|
|
71
|
-
input:
|
|
71
|
+
export class DeleteMessage extends Schema.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {
|
|
72
|
+
input: Schema.Struct({
|
|
72
73
|
thread: ThreadType,
|
|
73
74
|
subject: EchoObjectSchema,
|
|
74
|
-
messageId:
|
|
75
|
-
message:
|
|
76
|
-
messageIndex:
|
|
75
|
+
messageId: Schema.String,
|
|
76
|
+
message: Schema.optional(DataType.Message),
|
|
77
|
+
messageIndex: Schema.optional(Schema.Number),
|
|
77
78
|
}),
|
|
78
|
-
output:
|
|
79
|
+
output: Schema.Void,
|
|
79
80
|
}) {}
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
export const ThreadSettingsSchema =
|
|
83
|
-
|
|
84
|
-
export type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;
|
|
83
|
+
export const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));
|
|
84
|
+
export type ThreadSettingsProps = Schema.Schema.Type<typeof ThreadSettingsSchema>;
|
|
85
85
|
|
|
86
86
|
export interface ThreadModel {
|
|
87
87
|
root: ThreadType;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ChatContainer.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { create } from '@dxos/echo-schema';\nimport { type DXN } from '@dxos/keys';\nimport { makeRef } from '@dxos/live-object';\nimport { type Space, useMembers, useQueue } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';\nimport { MessageType } from '@dxos/schema';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n return (\n <div role='none' className='flex items-center'>\n <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\n </div>\n );\n};\n\nexport type ChatContainerProps = Omit<ThreadContainerProps, 'thread'> & {\n space: Space;\n dxn: DXN;\n};\n\nexport const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }: ChatContainerProps) => {\n const id = dxn.toString();\n const identity = useIdentity()!;\n const members = useMembers(space?.key);\n const queue = useQueue<MessageType>(dxn, { pollInterval: 1_000 });\n const activity = useStatus(space, id);\n const { t } = useTranslation(THREAD_PLUGIN);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(id, identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: (text) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n // TODO(thure): Factor out.\n // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using\n // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient\n // for the desired effect; this is likely hardware-dependent and should be reevaluated.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n\n // TODO(burdon): Change to model.\n const handleCreate: MessageTextboxProps['onSend'] = () => {\n if (!messageRef.current?.length || !queue) {\n return false;\n }\n\n queue.append([\n create(MessageType, {\n sender: { identityDid: identity.did },\n created: new Date().toISOString(),\n blocks: [{ type: 'text', text: messageRef.current }],\n properties: context ? { context: makeRef(context) } : undefined,\n }),\n ]);\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n return (\n <Thread\n current={current}\n id={id}\n classNames='bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0'\n >\n <ScrollArea.Root classNames='col-span-2'>\n <ScrollArea.Viewport classNames='overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]'>\n <div role='none' className={mx(threadLayout, 'place-self-end')}>\n {(queue?.items ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n </Thread>\n );\n};\n\nexport default ChatContainer;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "create", "makeRef", "useMembers", "useQueue", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "MessageType", "ChatHeading", "attendableId", "t", "useTranslation", "THREAD_PLUGIN", "div", "role", "className", "StackItem", "SigilButton", "Icon", "icon", "size", "HeadingLabel", "ChatContainer", "space", "dxn", "context", "current", "autoFocusTextbox", "id", "toString", "identity", "useIdentity", "members", "useMembers", "key", "queue", "useQueue", "pollInterval", "activity", "useStatus", "_count", "_setCount", "useState", "rerenderEditor", "count", "autoFocus", "setAutoFocus", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "append", "create", "MessageType", "sender", "identityDid", "did", "created", "Date", "toISOString", "blocks", "type", "properties", "makeRef", "undefined", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "mx", "threadLayout", "items", "map", "message", "MessageContainer", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { type ReactiveEchoObject } from '@dxos/client/echo';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { meta } from '../meta';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/comments`,\n // TODO(wittjosiah): Support comments on any object.\n // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),\n filter: (node): node is Node<ReactiveEchoObject<any>> =>\n !!node.data && typeof node.data === 'object' && 'threads' in node.data && Array.isArray(node.data.threads),\n connector: ({ node }) => [\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ],\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,SAASA,cAAcC,mBAAwC;AAE/D,SAASC,sBAAsBC,iCAAiC;AAChE,SAASC,uBAAkC;AAI3C,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;;;IAGdE,QAAQ,CAACC,SACP,CAAC,CAACA,KAAKC,QAAQ,OAAOD,KAAKC,SAAS,YAAY,aAAaD,KAAKC,QAAQC,MAAMC,QAAQH,KAAKC,KAAKG,OAAO;IAC3GC,WAAW,CAAC,EAAEL,KAAI,MAAO;MACvB;QACEH,IAAI;UAACG,KAAKH;UAAI;UAAYS,KAAKC,yBAAAA;QAC/BC,MAAMC;QACNR,MAAM;QACNS,YAAY;UACVC,OAAO;YAAC;YAAkB;cAAEC,IAAId,KAAKD;YAAG;;UACxCgB,MAAM;UACNC,aAAa;UACbC,UAAU;QACZ;MACF;;EAEJ,CAAA;CACD;",
|
|
6
|
-
"names": ["Capabilities", "contributes", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "filter", "node", "data", "Array", "isArray", "threads", "connector", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "properties", "label", "ns", "icon", "disposition", "position"]
|
|
7
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// packages/plugins/plugin-thread/src/capabilities/index.ts
|
|
2
|
-
import { lazy } from "@dxos/app-framework";
|
|
3
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-6W4UKJDI.mjs"));
|
|
4
|
-
var IntentResolver = lazy(() => import("./intent-resolver-3UW6ROYT.mjs"));
|
|
5
|
-
var Markdown = lazy(() => import("./markdown-7KXBXCUS.mjs"));
|
|
6
|
-
var ReactSurface = lazy(() => import("./react-surface-KAPIXG2M.mjs"));
|
|
7
|
-
var ThreadSettings = lazy(() => import("./settings-2VZ7S4SK.mjs"));
|
|
8
|
-
var ThreadState = lazy(() => import("./state-KBGI3QTR.mjs"));
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
AppGraphBuilder,
|
|
12
|
-
IntentResolver,
|
|
13
|
-
Markdown,
|
|
14
|
-
ReactSurface,
|
|
15
|
-
ThreadState
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=chunk-2S7HPWRY.mjs.map
|