@dxos/plugin-thread 0.7.5-main.9d2a38b → 0.7.5-main.c41020f
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/{ThreadContainer-4VLBSBI7.mjs → ThreadContainer-6OP5AG2W.mjs} +2 -2
- package/dist/lib/browser/{chunk-GQONSZ3J.mjs → chunk-UPKU23DA.mjs} +11 -23
- package/dist/lib/browser/chunk-UPKU23DA.mjs.map +7 -0
- package/dist/lib/browser/chunk-VOMIDDNO.mjs +15 -0
- package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-NO5AZLUZ.mjs → chunk-YK3ICB7G.mjs} +2 -4
- package/dist/lib/browser/{chunk-NO5AZLUZ.mjs.map → chunk-YK3ICB7G.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +45 -47
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs +287 -0
- package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs.map +7 -0
- package/dist/lib/browser/{markdown-2NBXKXCY.mjs → markdown-RPYOUBVR.mjs} +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-CHCZO4TI.mjs → react-surface-Y4MUSICN.mjs} +70 -49
- package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +7 -0
- package/dist/lib/browser/{settings-TKOPRXSU.mjs → settings-WQTE5AEZ.mjs} +2 -2
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{ThreadContainer-VOYLV4UL.cjs → ThreadContainer-LTKKLPXX.cjs} +6 -6
- package/dist/lib/node/{chunk-ZRN7B26W.cjs → chunk-BHFHFTHO.cjs} +8 -13
- package/dist/lib/node/chunk-BHFHFTHO.cjs.map +7 -0
- package/dist/lib/node/{chunk-AUVKOX5Q.cjs → chunk-CMEMMYDL.cjs} +5 -7
- package/dist/lib/node/{chunk-AUVKOX5Q.cjs.map → chunk-CMEMMYDL.cjs.map} +3 -3
- package/dist/lib/node/{chunk-6PUGKCPR.cjs → chunk-RQR5Z23G.cjs} +13 -24
- package/dist/lib/node/chunk-RQR5Z23G.cjs.map +7 -0
- package/dist/lib/node/index.cjs +46 -46
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/intent-resolver-DVBEXJ33.cjs +299 -0
- package/dist/lib/node/intent-resolver-DVBEXJ33.cjs.map +7 -0
- package/dist/lib/node/{markdown-FWRKMSKV.cjs → markdown-ELRGISXE.cjs} +7 -7
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-LO7S2HPR.cjs → react-surface-7HLTN5XS.cjs} +72 -51
- package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +7 -0
- package/dist/lib/node/{settings-TH4YSUVU.cjs → settings-7VQYARM5.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/{ThreadContainer-7DZY2MWA.mjs → ThreadContainer-SV74JFRH.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-B3CF35MY.mjs → chunk-33NDMQQQ.mjs} +2 -4
- package/dist/lib/node-esm/{chunk-B3CF35MY.mjs.map → chunk-33NDMQQQ.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-DYFIKKDT.mjs → chunk-CISLDOH7.mjs} +11 -23
- package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +17 -0
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +45 -47
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs +288 -0
- package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-6AQFDAW3.mjs → markdown-23OB7EZG.mjs} +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-LAF3QIPB.mjs → react-surface-AZHTTR6J.mjs} +70 -49
- package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-KEDRR7RM.mjs → settings-SGMM7UDT.mjs} +2 -2
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +7 -184
- 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 +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +2 -3
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts +1 -2
- 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 +1 -2
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +1 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +1 -2
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/ThreadContainer.d.ts +2 -2
- package/dist/types/src/components/ThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts +1 -2
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/command-extension.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +12 -12
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +6 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +5 -7
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +31 -30
- package/src/ThreadPlugin.tsx +46 -50
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +180 -164
- package/src/capabilities/react-surface.tsx +18 -18
- package/src/components/Chat.stories.tsx +1 -5
- package/src/components/ChatContainer.tsx +2 -2
- package/src/components/CommentContainer.tsx +2 -2
- package/src/components/Comments.stories.tsx +8 -2
- package/src/components/MessageContainer.tsx +6 -19
- package/src/components/ThreadComplementary.tsx +41 -8
- package/src/components/ThreadSettings.tsx +5 -11
- package/src/components/command-extension.ts +2 -5
- package/src/translations.ts +2 -1
- package/src/types.ts +1 -5
- package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs +0 -121
- package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs.map +0 -7
- package/dist/lib/browser/chunk-2B3EXYZ7.mjs +0 -18
- package/dist/lib/browser/chunk-2B3EXYZ7.mjs.map +0 -7
- package/dist/lib/browser/chunk-GQONSZ3J.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-PIEZ3LKQ.mjs +0 -275
- package/dist/lib/browser/intent-resolver-PIEZ3LKQ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-CHCZO4TI.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs +0 -135
- package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs.map +0 -7
- package/dist/lib/node/chunk-6PUGKCPR.cjs.map +0 -7
- package/dist/lib/node/chunk-ZRN7B26W.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-X5O3SVLF.cjs +0 -287
- package/dist/lib/node/intent-resolver-X5O3SVLF.cjs.map +0 -7
- package/dist/lib/node/react-surface-LO7S2HPR.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs +0 -122
- package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DYFIKKDT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GS2OILYF.mjs +0 -20
- package/dist/lib/node-esm/chunk-GS2OILYF.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-XJWT5X6T.mjs +0 -276
- package/dist/lib/node-esm/intent-resolver-XJWT5X6T.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-LAF3QIPB.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -180
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -120
- /package/dist/lib/browser/{ThreadContainer-4VLBSBI7.mjs.map → ThreadContainer-6OP5AG2W.mjs.map} +0 -0
- /package/dist/lib/browser/{markdown-2NBXKXCY.mjs.map → markdown-RPYOUBVR.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-TKOPRXSU.mjs.map → settings-WQTE5AEZ.mjs.map} +0 -0
- /package/dist/lib/node/{ThreadContainer-VOYLV4UL.cjs.map → ThreadContainer-LTKKLPXX.cjs.map} +0 -0
- /package/dist/lib/node/{markdown-FWRKMSKV.cjs.map → markdown-ELRGISXE.cjs.map} +0 -0
- /package/dist/lib/node/{settings-TH4YSUVU.cjs.map → settings-7VQYARM5.cjs.map} +0 -0
- /package/dist/lib/node-esm/{ThreadContainer-7DZY2MWA.mjs.map → ThreadContainer-SV74JFRH.mjs.map} +0 -0
- /package/dist/lib/node-esm/{markdown-6AQFDAW3.mjs.map → markdown-23OB7EZG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-KEDRR7RM.mjs.map → settings-SGMM7UDT.mjs.map} +0 -0
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Capabilities, contributes, createSurface,
|
|
7
|
+
import { Capabilities, contributes, createSurface, useLayout } from '@dxos/app-framework';
|
|
8
8
|
import { type Ref } from '@dxos/echo-schema';
|
|
9
|
+
import { SettingsStore } from '@dxos/local-storage';
|
|
9
10
|
import { ChannelType, type ThreadType } from '@dxos/plugin-space/types';
|
|
10
11
|
import { getSpace } from '@dxos/react-client/echo';
|
|
11
12
|
|
|
@@ -21,18 +22,19 @@ export default () =>
|
|
|
21
22
|
filter: (data): data is { subject: ChannelType } =>
|
|
22
23
|
data.subject instanceof ChannelType && !!data.subject.threads[0],
|
|
23
24
|
component: ({ data, role }) => {
|
|
24
|
-
const
|
|
25
|
+
const layout = useLayout();
|
|
25
26
|
const channel = data.subject;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
void channel.threads[0].load();
|
|
28
|
+
const thread = channel.threads[0].target;
|
|
29
|
+
if (!thread) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const currentPosition = layout.active.findIndex((id) => id === channel.id);
|
|
34
|
+
if (currentPosition > 0) {
|
|
35
|
+
const objectToTheLeft = layout.active[currentPosition - 1];
|
|
36
|
+
const context = getSpace(channel)?.db.getObjectById(objectToTheLeft);
|
|
37
|
+
return <ThreadContainer role={role} thread={thread} context={context} />;
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
return <ThreadContainer role={role} thread={thread} />;
|
|
@@ -51,11 +53,9 @@ export default () =>
|
|
|
51
53
|
}),
|
|
52
54
|
createSurface({
|
|
53
55
|
id: `${THREAD_PLUGIN}/settings`,
|
|
54
|
-
role: '
|
|
55
|
-
filter: (data): data is
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return <ThreadSettings settings={settings} />;
|
|
59
|
-
},
|
|
56
|
+
role: 'article',
|
|
57
|
+
filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>
|
|
58
|
+
data.subject instanceof SettingsStore && data.subject.prefix === THREAD_PLUGIN,
|
|
59
|
+
component: ({ data: { subject } }) => <ThreadSettings settings={subject.value} />,
|
|
60
60
|
}),
|
|
61
61
|
]);
|
|
@@ -15,7 +15,6 @@ import { useClient } from '@dxos/react-client';
|
|
|
15
15
|
import { type Space } from '@dxos/react-client/echo';
|
|
16
16
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
17
17
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
18
|
-
import { Mosaic } from '@dxos/react-ui-mosaic';
|
|
19
18
|
import { Thread } from '@dxos/react-ui-thread';
|
|
20
19
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
21
20
|
|
|
@@ -47,10 +46,7 @@ const Story = () => {
|
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
return (
|
|
50
|
-
<
|
|
51
|
-
<main className='max-is-prose mli-auto bs-dvh overflow-hidden'>{space && <ChatContainer thread={thread} />}</main>
|
|
52
|
-
<Mosaic.DragOverlay />
|
|
53
|
-
</Mosaic.Root>
|
|
49
|
+
<main className='max-is-prose mli-auto bs-dvh overflow-hidden'>{space && <ChatContainer thread={thread} />}</main>
|
|
54
50
|
);
|
|
55
51
|
};
|
|
56
52
|
|
|
@@ -7,7 +7,7 @@ import React, { useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
|
7
7
|
import { Ref } from '@dxos/echo-schema';
|
|
8
8
|
import { create, makeRef, RefArray } from '@dxos/live-object';
|
|
9
9
|
import { MessageType } from '@dxos/plugin-space/types';
|
|
10
|
-
import { fullyQualifiedId, getSpace, useMembers
|
|
10
|
+
import { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';
|
|
11
11
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
12
12
|
import { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';
|
|
13
13
|
import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';
|
|
@@ -82,7 +82,7 @@ export const ChatContainer = ({ thread, context, current, autoFocusTextbox }: Th
|
|
|
82
82
|
sender: { identityKey: identity.identityKey.toHex() },
|
|
83
83
|
timestamp: new Date().toISOString(),
|
|
84
84
|
text: messageRef.current,
|
|
85
|
-
context: makeRef(context
|
|
85
|
+
context: context ? makeRef(context) : undefined,
|
|
86
86
|
}),
|
|
87
87
|
),
|
|
88
88
|
);
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
mx,
|
|
19
19
|
} from '@dxos/react-ui-theme';
|
|
20
20
|
import { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, ThreadHeading } from '@dxos/react-ui-thread';
|
|
21
|
-
import {
|
|
21
|
+
import { isNonNullable } from '@dxos/util';
|
|
22
22
|
|
|
23
23
|
import { MessageContainer } from './MessageContainer';
|
|
24
24
|
import { command } from './command-extension';
|
|
@@ -179,7 +179,7 @@ export const CommentContainer = ({
|
|
|
179
179
|
</div>
|
|
180
180
|
</div>
|
|
181
181
|
{/** TODO(dmaretskyi): How's `thread.messages` undefined? */}
|
|
182
|
-
{RefArray.allResolvedTargets(thread.messages?.filter(
|
|
182
|
+
{RefArray.allResolvedTargets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (
|
|
183
183
|
<MessageContainer key={message.id} message={message} members={members} onDelete={handleMessageDelete} />
|
|
184
184
|
))}
|
|
185
185
|
{/*
|
|
@@ -7,6 +7,8 @@ import '@dxos-theme';
|
|
|
7
7
|
import { type Meta } from '@storybook/react';
|
|
8
8
|
import React, { useEffect, useState } from 'react';
|
|
9
9
|
|
|
10
|
+
import { IntentPlugin } from '@dxos/app-framework';
|
|
11
|
+
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
12
|
import { MessageType, ThreadType } from '@dxos/plugin-space/types';
|
|
11
13
|
import { faker } from '@dxos/random';
|
|
12
14
|
import { Filter, fullyQualifiedId, useQuery, useSpace } from '@dxos/react-client/echo';
|
|
@@ -44,7 +46,7 @@ const Story = ({ spaceKey }: ClientRepeatedComponentProps) => {
|
|
|
44
46
|
|
|
45
47
|
return (
|
|
46
48
|
<div className='flex justify-center overflow-y-auto bg-white dark:bg-black'>
|
|
47
|
-
<div className='flex flex-col w-[
|
|
49
|
+
<div className='flex flex-col w-[30rem]'>
|
|
48
50
|
<CommentsContainer threads={threads} detached={detached} onThreadDelete={console.log} />
|
|
49
51
|
</div>
|
|
50
52
|
</div>
|
|
@@ -57,7 +59,11 @@ const meta: Meta = {
|
|
|
57
59
|
title: 'plugins/plugin-thread/Comments',
|
|
58
60
|
// TODO(wittjosiah): Use decorator.
|
|
59
61
|
render: () => <ClientRepeater component={Story} createIdentity createSpace types={[ThreadType, MessageType]} />,
|
|
60
|
-
decorators: [
|
|
62
|
+
decorators: [
|
|
63
|
+
withTheme,
|
|
64
|
+
withLayout({ fullscreen: true, tooltips: true }),
|
|
65
|
+
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
66
|
+
],
|
|
61
67
|
parameters: { translations },
|
|
62
68
|
};
|
|
63
69
|
|
|
@@ -14,7 +14,6 @@ import { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/r
|
|
|
14
14
|
import { useIdentity, type Identity } from '@dxos/react-client/halo';
|
|
15
15
|
import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';
|
|
16
16
|
import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
|
|
17
|
-
import { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';
|
|
18
17
|
import {
|
|
19
18
|
getSize,
|
|
20
19
|
hoverableControlItem,
|
|
@@ -26,7 +25,7 @@ import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
|
|
|
26
25
|
|
|
27
26
|
import { command } from './command-extension';
|
|
28
27
|
import { useOnEditAnalytics } from '../hooks';
|
|
29
|
-
import {
|
|
28
|
+
import { THREAD_PLUGIN } from '../meta';
|
|
30
29
|
import { getMessageMetadata } from '../util';
|
|
31
30
|
|
|
32
31
|
// TODO(thure): #8149
|
|
@@ -109,11 +108,7 @@ export const MessageContainer = ({
|
|
|
109
108
|
};
|
|
110
109
|
|
|
111
110
|
const MessagePart = ({ part }: { part: Expando }) => {
|
|
112
|
-
return
|
|
113
|
-
<Mosaic.Container id={part.id}>
|
|
114
|
-
<Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />
|
|
115
|
-
</Mosaic.Container>
|
|
116
|
-
);
|
|
111
|
+
return <MessageBlockObjectTile subject={part} />;
|
|
117
112
|
};
|
|
118
113
|
|
|
119
114
|
const TextboxBlock = ({
|
|
@@ -165,9 +160,9 @@ const TextboxBlock = ({
|
|
|
165
160
|
return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
|
|
166
161
|
};
|
|
167
162
|
|
|
168
|
-
const MessageBlockObjectTile:
|
|
169
|
-
({
|
|
170
|
-
let title =
|
|
163
|
+
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(
|
|
164
|
+
({ subject }, forwardedRef) => {
|
|
165
|
+
let title = subject.name ?? subject.title ?? subject.type ?? 'Object';
|
|
171
166
|
if (typeof title !== 'string') {
|
|
172
167
|
title = title?.content ?? '';
|
|
173
168
|
}
|
|
@@ -176,17 +171,9 @@ const MessageBlockObjectTile: MosaicTileComponent<ReactiveEchoObject<any>> = for
|
|
|
176
171
|
<div
|
|
177
172
|
role='group'
|
|
178
173
|
className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
|
|
179
|
-
style={draggableStyle}
|
|
180
174
|
ref={forwardedRef}
|
|
181
175
|
>
|
|
182
|
-
<Surface
|
|
183
|
-
role='card'
|
|
184
|
-
limit={1}
|
|
185
|
-
data={{ subject: item }}
|
|
186
|
-
draggableProps={draggableProps}
|
|
187
|
-
fallback={title}
|
|
188
|
-
{...props}
|
|
189
|
-
/>
|
|
176
|
+
<Surface role='card' limit={1} data={{ subject }} fallback={title} />
|
|
190
177
|
</div>
|
|
191
178
|
);
|
|
192
179
|
},
|
|
@@ -4,24 +4,35 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import { createIntent, LayoutAction,
|
|
7
|
+
import { createIntent, LayoutAction, useCapability, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
8
|
import { ThreadCapabilities } from '@dxos/plugin-space';
|
|
9
9
|
import { MessageType, type ThreadType } from '@dxos/plugin-space/types';
|
|
10
10
|
import { create, fullyQualifiedId, makeRef, RefArray } from '@dxos/react-client/echo';
|
|
11
11
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
12
13
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
13
|
-
import {
|
|
14
|
+
import { Tabs } from '@dxos/react-ui-tabs';
|
|
15
|
+
import { isNonNullable } from '@dxos/util';
|
|
14
16
|
|
|
15
17
|
import { ThreadCapabilities as LocalThreadCapabilities } from '../capabilities';
|
|
16
18
|
import { CommentsContainer } from '../components';
|
|
19
|
+
import { THREAD_PLUGIN } from '../meta';
|
|
17
20
|
import { ThreadAction } from '../types';
|
|
18
21
|
|
|
19
22
|
export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
20
23
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
21
24
|
const identity = useIdentity();
|
|
25
|
+
const { t } = useTranslation(THREAD_PLUGIN);
|
|
22
26
|
|
|
23
27
|
const { state, getViewState } = useCapability(LocalThreadCapabilities.MutableState);
|
|
24
|
-
const
|
|
28
|
+
const viewState = getViewState(fullyQualifiedId(subject));
|
|
29
|
+
const { showResolvedThreads } = viewState;
|
|
30
|
+
const onChangeViewState = useCallback(
|
|
31
|
+
(nextValue: string) => {
|
|
32
|
+
viewState.showResolvedThreads = nextValue === 'all';
|
|
33
|
+
},
|
|
34
|
+
[viewState],
|
|
35
|
+
);
|
|
25
36
|
const drafts = state.drafts[fullyQualifiedId(subject)];
|
|
26
37
|
|
|
27
38
|
const threadsIntegrators = useCapabilities(ThreadCapabilities.Thread);
|
|
@@ -34,7 +45,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
34
45
|
const threadObjects = RefArray.allResolvedTargets(subject.threads ?? []);
|
|
35
46
|
|
|
36
47
|
const threads = useMemo(() => {
|
|
37
|
-
return threadObjects.concat(drafts ?? []).filter(
|
|
48
|
+
return threadObjects.concat(drafts ?? []).filter(isNonNullable) as ThreadType[];
|
|
38
49
|
}, [JSON.stringify(threadObjects), JSON.stringify(drafts)]);
|
|
39
50
|
|
|
40
51
|
const detachedIds = useMemo(() => {
|
|
@@ -62,9 +73,12 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
62
73
|
// This may be overloading this intent or highjacking its intended purpose.
|
|
63
74
|
void dispatch(
|
|
64
75
|
createIntent(LayoutAction.ScrollIntoView, {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
part: 'current',
|
|
77
|
+
subject: fullyQualifiedId(subject),
|
|
78
|
+
options: {
|
|
79
|
+
cursor: thread.anchor,
|
|
80
|
+
ref: threadId,
|
|
81
|
+
},
|
|
68
82
|
}),
|
|
69
83
|
);
|
|
70
84
|
}
|
|
@@ -109,7 +123,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
109
123
|
[dispatch, subject],
|
|
110
124
|
);
|
|
111
125
|
|
|
112
|
-
|
|
126
|
+
const comments = (
|
|
113
127
|
<CommentsContainer
|
|
114
128
|
threads={threads}
|
|
115
129
|
detached={detachedIds}
|
|
@@ -122,4 +136,23 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
122
136
|
onThreadDelete={handleThreadDelete}
|
|
123
137
|
/>
|
|
124
138
|
);
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
<Tabs.Root
|
|
142
|
+
value={showResolvedThreads ? 'all' : 'unresolved'}
|
|
143
|
+
onValueChange={onChangeViewState}
|
|
144
|
+
orientation='horizontal'
|
|
145
|
+
>
|
|
146
|
+
<Tabs.Tablist classNames='p-1 gap-1 bs-[--rail-action] border-be border-separator'>
|
|
147
|
+
<Tabs.Tab value='unresolved' classNames='text-sm'>
|
|
148
|
+
{t('show unresolved label')}
|
|
149
|
+
</Tabs.Tab>
|
|
150
|
+
<Tabs.Tab value='all' classNames='text-sm'>
|
|
151
|
+
{t('show all label')}
|
|
152
|
+
</Tabs.Tab>
|
|
153
|
+
</Tabs.Tablist>
|
|
154
|
+
<Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>
|
|
155
|
+
<Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>
|
|
156
|
+
</Tabs.Root>
|
|
157
|
+
);
|
|
125
158
|
};
|
|
@@ -4,20 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
// import { useTranslation } from '@dxos/react-ui';
|
|
8
|
+
import { DeprecatedFormContainer } from '@dxos/react-ui-form';
|
|
9
9
|
|
|
10
|
-
import { THREAD_PLUGIN } from '../meta';
|
|
10
|
+
// import { THREAD_PLUGIN } from '../meta';
|
|
11
11
|
import type { ThreadSettingsProps } from '../types';
|
|
12
12
|
|
|
13
13
|
export const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {
|
|
14
|
-
const { t } = useTranslation(THREAD_PLUGIN);
|
|
14
|
+
// const { t } = useTranslation(THREAD_PLUGIN);
|
|
15
15
|
|
|
16
|
-
return
|
|
17
|
-
<>
|
|
18
|
-
<DeprecatedFormInput label={t('settings standalone label')}>
|
|
19
|
-
<Input.Switch checked={settings.standalone} onCheckedChange={(checked) => (settings.standalone = !!checked)} />
|
|
20
|
-
</DeprecatedFormInput>
|
|
21
|
-
</>
|
|
22
|
-
);
|
|
16
|
+
return <DeprecatedFormContainer></DeprecatedFormContainer>;
|
|
23
17
|
};
|
|
@@ -6,7 +6,7 @@ import { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/
|
|
|
6
6
|
import { type Extension } from '@codemirror/state';
|
|
7
7
|
|
|
8
8
|
import { tags } from '@dxos/react-ui-editor';
|
|
9
|
-
import { mx
|
|
9
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts
|
|
@@ -27,10 +27,7 @@ const parser = StreamLanguage.define<{ count: number }>({
|
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
const styles = HighlightStyle.define([
|
|
30
|
-
{
|
|
31
|
-
tag: tags.tagName,
|
|
32
|
-
class: mx(tagRoot({ palette: 'cyan' }), 'text-baseText font-medium'),
|
|
33
|
-
},
|
|
30
|
+
{ tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },
|
|
34
31
|
]);
|
|
35
32
|
|
|
36
33
|
export const command: Extension = [parser, syntaxHighlighting(styles)];
|
package/src/translations.ts
CHANGED
|
@@ -19,7 +19,6 @@ export default [
|
|
|
19
19
|
'delete channel label': 'Delete channel',
|
|
20
20
|
'create channel label': 'Create channel',
|
|
21
21
|
'message placeholder': 'Reply…',
|
|
22
|
-
'settings standalone label': 'Enable channel creation (experimental)',
|
|
23
22
|
'activity message': 'Processing…',
|
|
24
23
|
'anonymous label': 'Anonymous',
|
|
25
24
|
'delete message block label': 'Delete message block',
|
|
@@ -42,6 +41,8 @@ export default [
|
|
|
42
41
|
'delete message label': 'Delete message',
|
|
43
42
|
'open comments panel label': 'Show Comments',
|
|
44
43
|
'comments panel label': 'Comments',
|
|
44
|
+
'show all label': 'All comments',
|
|
45
|
+
'show unresolved label': 'Unresolved only',
|
|
45
46
|
},
|
|
46
47
|
},
|
|
47
48
|
},
|
package/src/types.ts
CHANGED
|
@@ -67,11 +67,7 @@ export namespace ThreadAction {
|
|
|
67
67
|
}) {}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export const ThreadSettingsSchema = S.mutable(
|
|
71
|
-
S.Struct({
|
|
72
|
-
standalone: S.optional(S.Boolean),
|
|
73
|
-
}),
|
|
74
|
-
);
|
|
70
|
+
export const ThreadSettingsSchema = S.mutable(S.Struct({}));
|
|
75
71
|
|
|
76
72
|
export type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;
|
|
77
73
|
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ThreadCapabilities
|
|
3
|
-
} from "./chunk-NAO3LZMZ.mjs";
|
|
4
|
-
import {
|
|
5
|
-
THREAD_PLUGIN
|
|
6
|
-
} from "./chunk-636QDHE3.mjs";
|
|
7
|
-
|
|
8
|
-
// packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
|
|
9
|
-
import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
|
|
10
|
-
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
11
|
-
import { createExtension, toSignal } from "@dxos/plugin-graph";
|
|
12
|
-
import { ObservabilityAction } from "@dxos/plugin-observability/types";
|
|
13
|
-
import { memoizeQuery } from "@dxos/plugin-space";
|
|
14
|
-
import { getTypename, parseId, SpaceState } from "@dxos/react-client/echo";
|
|
15
|
-
var type = "orphan-comments-for-subject";
|
|
16
|
-
var icon = "ph--chat-text--regular";
|
|
17
|
-
var app_graph_builder_default = (context) => {
|
|
18
|
-
const resolver = (typename) => context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
|
|
19
|
-
return contributes(Capabilities.AppGraphBuilder, createExtension({
|
|
20
|
-
id: `${THREAD_PLUGIN}/comments-for-subject`,
|
|
21
|
-
resolver: ({ id }) => {
|
|
22
|
-
if (!id.endsWith("~comments")) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const client = context.requestCapability(ClientCapabilities.Client);
|
|
26
|
-
const [subjectId] = id.split("~");
|
|
27
|
-
const { spaceId, objectId } = parseId(subjectId);
|
|
28
|
-
const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
|
|
29
|
-
const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === SpaceState.SPACE_READY);
|
|
30
|
-
if (!objectId) {
|
|
31
|
-
return {
|
|
32
|
-
id,
|
|
33
|
-
type,
|
|
34
|
-
data: null,
|
|
35
|
-
properties: {
|
|
36
|
-
icon,
|
|
37
|
-
label: [
|
|
38
|
-
"unnamed object threads label",
|
|
39
|
-
{
|
|
40
|
-
ns: THREAD_PLUGIN
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
showResolvedThreads: false,
|
|
44
|
-
object: null,
|
|
45
|
-
space
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
const [object] = memoizeQuery(space, {
|
|
50
|
-
id: objectId
|
|
51
|
-
});
|
|
52
|
-
if (!object || !subjectId) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const meta = resolver(getTypename(object) ?? "");
|
|
56
|
-
const label = meta.label?.(object) || object.name || meta.placeholder || [
|
|
57
|
-
"unnamed object threads label",
|
|
58
|
-
{
|
|
59
|
-
ns: THREAD_PLUGIN
|
|
60
|
-
}
|
|
61
|
-
];
|
|
62
|
-
const { getViewState } = context.requestCapability(ThreadCapabilities.State);
|
|
63
|
-
const viewState = getViewState(subjectId);
|
|
64
|
-
return {
|
|
65
|
-
id,
|
|
66
|
-
type,
|
|
67
|
-
data: null,
|
|
68
|
-
properties: {
|
|
69
|
-
icon,
|
|
70
|
-
label,
|
|
71
|
-
showResolvedThreads: viewState.showResolvedThreads,
|
|
72
|
-
object
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
|
-
actions: ({ node }) => {
|
|
77
|
-
const dataId = node.id.split("~").at(0);
|
|
78
|
-
if (!node.id.endsWith("~comments") || !dataId) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const [spaceId, objectId] = dataId.split(":");
|
|
82
|
-
const { getViewState } = context.requestCapability(ThreadCapabilities.State);
|
|
83
|
-
const viewState = getViewState(dataId);
|
|
84
|
-
const toggle = async () => {
|
|
85
|
-
const newToggleState = !viewState.showResolvedThreads;
|
|
86
|
-
viewState.showResolvedThreads = newToggleState;
|
|
87
|
-
const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
|
|
88
|
-
await dispatch(createIntent(ObservabilityAction.SendEvent, {
|
|
89
|
-
name: "threads.toggle-show-resolved",
|
|
90
|
-
properties: {
|
|
91
|
-
spaceId,
|
|
92
|
-
threadId: objectId,
|
|
93
|
-
showResolved: newToggleState
|
|
94
|
-
}
|
|
95
|
-
}));
|
|
96
|
-
};
|
|
97
|
-
return [
|
|
98
|
-
{
|
|
99
|
-
id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
|
|
100
|
-
data: toggle,
|
|
101
|
-
properties: {
|
|
102
|
-
label: [
|
|
103
|
-
"toggle show resolved",
|
|
104
|
-
{
|
|
105
|
-
ns: THREAD_PLUGIN
|
|
106
|
-
}
|
|
107
|
-
],
|
|
108
|
-
menuItemType: "toggle",
|
|
109
|
-
isChecked: viewState.showResolvedThreads,
|
|
110
|
-
testId: "threadPlugin.toggleShowResolved",
|
|
111
|
-
icon: viewState.showResolvedThreads ? "ph--eye-slash--regular" : "ph--eye--regular"
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
];
|
|
115
|
-
}
|
|
116
|
-
}));
|
|
117
|
-
};
|
|
118
|
-
export {
|
|
119
|
-
app_graph_builder_default as default
|
|
120
|
-
};
|
|
121
|
-
//# sourceMappingURL=app-graph-builder-Q7A2ZRUA.mjs.map
|
|
@@ -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, createIntent, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\n\nconst type = 'orphan-comments-for-subject';\nconst icon = 'ph--chat-text--regular';\n\nexport default (context: PluginsContext) => {\n const resolver = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: `${THREAD_PLUGIN}/comments-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~comments')) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label: ['unnamed object threads label', { ns: THREAD_PLUGIN }],\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolver(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object threads label', { ns: THREAD_PLUGIN }];\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(subjectId);\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: viewState.showResolvedThreads,\n object,\n },\n };\n },\n actions: ({ node }) => {\n const dataId = node.id.split('~').at(0);\n if (!node.id.endsWith('~comments') || !dataId) {\n return;\n }\n\n const [spaceId, objectId] = dataId.split(':');\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(dataId);\n const toggle = async () => {\n const newToggleState = !viewState.showResolvedThreads;\n viewState.showResolvedThreads = newToggleState;\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-show-resolved',\n properties: { spaceId, threadId: objectId, showResolved: newToggleState },\n }),\n );\n };\n\n return [\n {\n id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,\n data: toggle,\n properties: {\n label: ['toggle show resolved', { ns: THREAD_PLUGIN }],\n menuItemType: 'toggle',\n isChecked: viewState.showResolvedThreads,\n testId: 'threadPlugin.toggleShowResolved',\n icon: viewState.showResolvedThreads ? 'ph--eye-slash--regular' : 'ph--eye--regular',\n },\n },\n ];\n },\n }),\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Capabilities", "contributes", "createIntent", "ClientCapabilities", "createExtension", "toSignal", "ObservabilityAction", "memoizeQuery", "getTypename", "parseId", "SpaceState", "type", "icon", "context", "resolver", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "THREAD_PLUGIN", "endsWith", "client", "requestCapability", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "space", "state", "SpaceState", "SPACE_READY", "data", "properties", "label", "ns", "showResolvedThreads", "object", "memoizeQuery", "meta", "getTypename", "name", "placeholder", "getViewState", "ThreadCapabilities", "State", "viewState", "actions", "node", "dataId", "at", "toggle", "newToggleState", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "ObservabilityAction", "SendEvent", "threadId", "showResolved", "menuItemType", "isChecked", "testId"]
|
|
7
|
-
}
|
|
@@ -1,18 +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-Q7A2ZRUA.mjs"));
|
|
4
|
-
var IntentResolver = lazy(() => import("./intent-resolver-PIEZ3LKQ.mjs"));
|
|
5
|
-
var Markdown = lazy(() => import("./markdown-2NBXKXCY.mjs"));
|
|
6
|
-
var ReactSurface = lazy(() => import("./react-surface-CHCZO4TI.mjs"));
|
|
7
|
-
var ThreadSettings = lazy(() => import("./settings-TKOPRXSU.mjs"));
|
|
8
|
-
var ThreadState = lazy(() => import("./state-GNFUURIC.mjs"));
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
AppGraphBuilder,
|
|
12
|
-
IntentResolver,
|
|
13
|
-
Markdown,
|
|
14
|
-
ReactSurface,
|
|
15
|
-
ThreadSettings,
|
|
16
|
-
ThreadState
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=chunk-2B3EXYZ7.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,WAAWF,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,iBAAiBJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,cAAcL,KAAK,MAAM,OAAO,sBAAA,CAAA;",
|
|
6
|
-
"names": ["lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Ref } from '@dxos/echo-schema';\nimport { create, makeRef, RefArray } from '@dxos/live-object';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers, type Expando } 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';\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 const ChatContainer = ({ thread, context, current, autoFocusTextbox }: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\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(fullyQualifiedId(thread), 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) {\n return false;\n }\n\n thread.messages.push(\n makeRef(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context: makeRef(context as Expando),\n }),\n ),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n const handleDelete = (id: string) => {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));\n if (messageIndex !== -1) {\n thread.messages.splice(messageIndex, 1);\n }\n };\n\n return (\n <Thread\n current={current}\n id={fullyQualifiedId(thread)}\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 {RefArray.allResolvedTargets(thread.messages ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleDelete} />\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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { RefArray } from '@dxos/live-object';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_ITEM, THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => (\n <MessagePart key={index} part={part} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return (\n <Mosaic.Container id={part.id}>\n <Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />\n </Mosaic.Container>\n );\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.text,\n extensions: [\n createBasicExtensions({ readonly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile: MosaicTileComponent<ReactiveEchoObject<any>> = forwardRef(\n ({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {\n let title = item.name ?? item.title ?? item.type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n style={draggableStyle}\n ref={forwardedRef}\n >\n <Surface\n role='card'\n limit={1}\n data={{ subject: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx, tagRoot } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n {\n tag: tags.tagName,\n class: mx(tagRoot({ palette: 'cyan' }), 'text-baseText font-medium'),\n },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "Ref", "create", "makeRef", "RefArray", "MessageType", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "Mosaic", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "StreamLanguage", "HighlightStyle", "syntaxHighlighting", "tags", "mx", "tagRoot", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "tagRoot", "palette", "command", "syntaxHighlighting", "generateName", "hexToFallback", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "onDelete", "senderIdentity", "find", "member", "sender", "identityKey", "PublicKey", "equals", "identity", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "toHex", "authorId", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "allResolvedTargets", "parts", "map", "part", "index", "MessagePart", "key", "Mosaic", "Container", "DraggableTile", "type", "THREAD_ITEM", "path", "item", "Component", "MessageBlockObjectTile", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "useOnEditAnalytics", "div", "role", "ref", "forwardRef", "draggableStyle", "draggableProps", "active", "_ref", "props", "forwardedRef", "title", "name", "content", "mx", "style", "Surface", "limit", "data", "subject", "fallback", "ChatContainer", "thread", "context", "current", "autoFocusTextbox", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "activity", "useStatus", "fullyQualifiedId", "t", "useTranslation", "THREAD_PLUGIN", "_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", "messages", "push", "makeRef", "create", "MessageType", "sender", "identityKey", "toHex", "timestamp", "Date", "toISOString", "handleDelete", "id", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "React", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "div", "role", "className", "mx", "threadLayout", "RefArray", "allResolvedTargets", "map", "message", "MessageContainer", "onDelete", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
|
|
7
|
-
}
|