@dxos/plugin-thread 0.7.5-labs.e27f9b9 → 0.7.5-labs.f400bbc
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-T4WIBHY6.mjs → ThreadContainer-6OP5AG2W.mjs} +2 -2
- package/dist/lib/browser/{chunk-5EQVG4L3.mjs → chunk-UPKU23DA.mjs} +8 -18
- 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 +43 -45
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-QFP6L3AF.mjs → intent-resolver-FAFQ54NP.mjs} +4 -4
- package/dist/lib/browser/{intent-resolver-QFP6L3AF.mjs.map → intent-resolver-FAFQ54NP.mjs.map} +1 -1
- 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-LDPZN456.mjs → react-surface-Y4MUSICN.mjs} +42 -33
- 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-4XACAVGV.cjs → ThreadContainer-LTKKLPXX.cjs} +6 -6
- package/dist/lib/node/{chunk-346YIZVL.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-VAZ3BCTU.cjs → chunk-RQR5Z23G.cjs} +11 -20
- package/dist/lib/node/chunk-RQR5Z23G.cjs.map +7 -0
- package/dist/lib/node/index.cjs +44 -44
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-ZSOQILPJ.cjs → intent-resolver-DVBEXJ33.cjs} +13 -13
- package/dist/lib/node/{intent-resolver-ZSOQILPJ.cjs.map → intent-resolver-DVBEXJ33.cjs.map} +1 -1
- 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-MCQUT7BC.cjs → react-surface-7HLTN5XS.cjs} +46 -37
- 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-FGFB25TQ.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-DKCH2H5C.mjs → chunk-CISLDOH7.mjs} +8 -18
- 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 +43 -45
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-MHP4C2NZ.mjs → intent-resolver-DHVLBNCC.mjs} +4 -4
- package/dist/lib/node-esm/{intent-resolver-MHP4C2NZ.mjs.map → intent-resolver-DHVLBNCC.mjs.map} +1 -1
- 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-6JMVZUDM.mjs → react-surface-AZHTTR6J.mjs} +42 -33
- 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 +2 -179
- package/dist/types/src/capabilities/index.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/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 +44 -47
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +1 -2
- package/src/components/Chat.stories.tsx +1 -5
- 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 +34 -4
- package/src/components/ThreadSettings.tsx +5 -11
- package/src/translations.ts +2 -1
- package/src/types.ts +1 -5
- package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs +0 -121
- package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs.map +0 -7
- package/dist/lib/browser/chunk-5EQVG4L3.mjs.map +0 -7
- package/dist/lib/browser/chunk-L4QHQNDC.mjs +0 -18
- package/dist/lib/browser/chunk-L4QHQNDC.mjs.map +0 -7
- package/dist/lib/browser/react-surface-LDPZN456.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs +0 -135
- package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs.map +0 -7
- package/dist/lib/node/chunk-346YIZVL.cjs.map +0 -7
- package/dist/lib/node/chunk-VAZ3BCTU.cjs.map +0 -7
- package/dist/lib/node/react-surface-MCQUT7BC.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs +0 -122
- package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3INUK3A6.mjs +0 -20
- package/dist/lib/node-esm/chunk-3INUK3A6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DKCH2H5C.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-6JMVZUDM.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 -119
- /package/dist/lib/browser/{ThreadContainer-T4WIBHY6.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-4XACAVGV.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-FGFB25TQ.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
|
@@ -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
|
},
|
|
@@ -9,19 +9,30 @@ 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(() => {
|
|
@@ -112,7 +123,7 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
112
123
|
[dispatch, subject],
|
|
113
124
|
);
|
|
114
125
|
|
|
115
|
-
|
|
126
|
+
const comments = (
|
|
116
127
|
<CommentsContainer
|
|
117
128
|
threads={threads}
|
|
118
129
|
detached={detachedIds}
|
|
@@ -125,4 +136,23 @@ export const ThreadComplementary = ({ subject }: { subject: any }) => {
|
|
|
125
136
|
onThreadDelete={handleThreadDelete}
|
|
126
137
|
/>
|
|
127
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
|
+
);
|
|
128
158
|
};
|
|
@@ -4,20 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import { DeprecatedFormContainer
|
|
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
|
-
<DeprecatedFormContainer>
|
|
18
|
-
<DeprecatedFormInput label={t('settings standalone label')}>
|
|
19
|
-
<Input.Switch checked={settings.standalone} onCheckedChange={(checked) => (settings.standalone = !!checked)} />
|
|
20
|
-
</DeprecatedFormInput>
|
|
21
|
-
</DeprecatedFormContainer>
|
|
22
|
-
);
|
|
16
|
+
return <DeprecatedFormContainer></DeprecatedFormContainer>;
|
|
23
17
|
};
|
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-IANFWFYN.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 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,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 } 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: context ? makeRef(context) : undefined,\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 } 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 { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\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", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "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", "undefined", "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
|
-
}
|
|
@@ -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-IANFWFYN.mjs"));
|
|
4
|
-
var IntentResolver = lazy(() => import("./intent-resolver-QFP6L3AF.mjs"));
|
|
5
|
-
var Markdown = lazy(() => import("./markdown-2NBXKXCY.mjs"));
|
|
6
|
-
var ReactSurface = lazy(() => import("./react-surface-LDPZN456.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-L4QHQNDC.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/capabilities/react-surface.tsx", "../../../src/components/index.ts", "../../../src/components/CommentContainer.tsx", "../../../src/components/CommentsContainer.tsx", "../../../src/components/ThreadComplementary.tsx", "../../../src/components/ThreadSettings.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface, useLayout } from '@dxos/app-framework';\nimport { type Ref } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { ChannelType, type ThreadType } from '@dxos/plugin-space/types';\nimport { getSpace } from '@dxos/react-client/echo';\n\nimport { ThreadContainer, ThreadComplementary, ThreadSettings } from '../components';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ThreadSettingsProps } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${THREAD_PLUGIN}/channel`,\n role: 'article',\n filter: (data): data is { subject: ChannelType } =>\n data.subject instanceof ChannelType && !!data.subject.threads[0],\n component: ({ data, role }) => {\n const layout = useLayout();\n const channel = data.subject;\n void channel.threads[0].load();\n const thread = channel.threads[0].target;\n if (!thread) {\n return null;\n }\n log.info('thread', { thread });\n const currentPosition = layout.active.findIndex((id) => id === channel.id);\n if (currentPosition > 0) {\n const objectToTheLeft = layout.active[currentPosition - 1];\n const context = getSpace(channel)?.db.getObjectById(objectToTheLeft);\n return <ThreadContainer role={role} thread={thread} context={context} />;\n }\n\n return <ThreadContainer role={role} thread={thread} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/thread`,\n role: 'complementary--comments',\n filter: (data): data is { subject: { threads: Ref<ThreadType>[] } } =>\n !!data.subject &&\n typeof data.subject === 'object' &&\n 'threads' in data.subject &&\n Array.isArray(data.subject.threads) &&\n !(data.subject instanceof ChannelType),\n component: ({ data }) => <ThreadComplementary subject={data.subject} />,\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<ThreadSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === THREAD_PLUGIN,\n component: ({ data: { subject } }) => <ThreadSettings settings={subject.value} />,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const ThreadContainer = lazy(() => import('./ThreadContainer'));\n\n// TODO(wittjosiah): Suspense boundary for sidebar?\nexport * from './CommentContainer';\nexport * from './CommentsContainer';\nexport * from './ChatContainer';\nexport * from './MessageContainer';\nexport * from './ThreadComplementary';\nexport * from './ThreadSettings';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, X } from '@phosphor-icons/react';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { RefArray } from '@dxos/live-object';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Button, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, ThreadHeading } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\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\nconst sizeClass = getSize(4);\n\n// TODO(thure): #8149\nconst commentControlClassNames = '!p-1 !min-bs-0 transition-opacity';\n\nconst ToggleResolvedButton = ({\n isResolved,\n onResolve,\n}: {\n isResolved: boolean | undefined;\n onResolve: () => void;\n}) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.toggle-resolved'\n onClick={onResolve}\n classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n {isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {label}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nconst DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t('delete thread label');\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.delete'\n onClick={onDelete}\n classNames={[commentControlClassNames, hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n <X className={sizeClass} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-30'>\n {label}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport const CommentContainer = ({\n thread,\n detached,\n current,\n onAttend,\n onComment,\n onResolve,\n onMessageDelete,\n onThreadDelete,\n}: 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 const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\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 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 [_count],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleAttend = useCallback(() => onAttend?.(thread), [onAttend, thread]);\n const handleResolve = useCallback(() => onResolve?.(thread), [onResolve, thread]);\n const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(thread, id), [onMessageDelete, thread]);\n const handleThreadDelete = useCallback(() => onThreadDelete?.(thread), [onThreadDelete, thread]);\n\n const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {\n if (!messageRef.current) {\n return false;\n }\n\n onComment?.(thread, messageRef.current);\n messageRef.current = '';\n scrollToEnd('instant');\n rerenderEditor();\n\n return true;\n }, [thread, identity]);\n\n return (\n <Thread onClickCapture={handleAttend} onFocusCapture={handleAttend} current={current} id={fullyQualifiedId(thread)}>\n <div\n role='none'\n className={mx(\n 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <ThreadHeading detached>{thread.name}</ThreadHeading>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-30' side='top'>\n {t('detached thread label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : (\n <ThreadHeading>{thread.name}</ThreadHeading>\n )}\n <div className='flex flex-row items-center pli-1'>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <ToggleResolvedButton isResolved={thread?.status === 'resolved'} onResolve={handleResolve} />\n )}\n {onThreadDelete && <DeleteThreadButton onDelete={handleThreadDelete} />}\n </div>\n </div>\n {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}\n {RefArray.allResolvedTargets(thread.messages?.filter(nonNullable) ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleMessageDelete} />\n ))}\n {/*\n TODO(wittjosiah): Can't autofocus this generally.\n There can be multiple threads with inputs and they can't all be focused.\n Also, it steals focus from documents when first rendered.\n Need to find a way to autofocus in one scenario only: when a new thread is created.\n */}\n <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\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 </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ChatText } from '@phosphor-icons/react';\nimport React, { useEffect } from 'react';\n\nimport { type ThreadType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useTranslation, Trans } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { CommentContainer } from './CommentContainer';\nimport { type ThreadContainerProps } from './types';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport type ThreadsContainerProps = Omit<ThreadContainerProps, 'thread' | 'detached' | 'current' | 'autoFocus'> & {\n threads: ThreadType[];\n /**\n * Threads that are no longer anchored to a position in the object.\n */\n detached?: string[];\n currentId?: string;\n showResolvedThreads?: boolean;\n};\n\n/**\n * Comment threads.\n */\nexport const CommentsContainer = ({\n threads,\n detached = [],\n currentId,\n showResolvedThreads,\n ...props\n}: ThreadsContainerProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const filteredThreads = showResolvedThreads ? threads : threads.filter((thread) => !(thread?.status === 'resolved'));\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n return (\n <>\n {filteredThreads.length > 0 ? (\n filteredThreads.map((thread) => {\n const threadId = fullyQualifiedId(thread);\n return (\n <CommentContainer\n key={threadId}\n thread={thread}\n current={currentId === threadId}\n detached={detached.includes(threadId)}\n {...props}\n />\n );\n })\n ) : (\n <div\n role='alert'\n className={mx(\n descriptionText,\n 'place-self-center border border-dashed border-unAccent rounded-lg text-center p-4 m-4',\n )}\n >\n <h2 className='mbe-2 font-medium text-baseText'>{t('no comments title')}</h2>\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'no comments message',\n components: {\n commentIcon: <ChatText className='inline-block' />,\n },\n }}\n />\n </p>\n </div>\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { createIntent, LayoutAction, useCapability, useCapabilities, useIntentDispatcher } from '@dxos/app-framework';\nimport { ThreadCapabilities } from '@dxos/plugin-space';\nimport { MessageType, type ThreadType } from '@dxos/plugin-space/types';\nimport { create, fullyQualifiedId, makeRef, RefArray } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport { ThreadCapabilities as LocalThreadCapabilities } from '../capabilities';\nimport { CommentsContainer } from '../components';\nimport { ThreadAction } from '../types';\n\nexport const ThreadComplementary = ({ subject }: { subject: any }) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n\n const { state, getViewState } = useCapability(LocalThreadCapabilities.MutableState);\n const { showResolvedThreads } = getViewState(fullyQualifiedId(subject));\n const drafts = state.drafts[fullyQualifiedId(subject)];\n\n const threadsIntegrators = useCapabilities(ThreadCapabilities.Thread);\n const createSort = useMemo(\n () => threadsIntegrators.find((p) => p.predicate(subject))?.createSort,\n [threadsIntegrators, subject],\n );\n const sort = useMemo(() => createSort?.(subject), [createSort, subject]);\n\n const threadObjects = RefArray.allResolvedTargets(subject.threads ?? []);\n\n const threads = useMemo(() => {\n return threadObjects.concat(drafts ?? []).filter(nonNullable) as ThreadType[];\n }, [JSON.stringify(threadObjects), JSON.stringify(drafts)]);\n\n const detachedIds = useMemo(() => {\n return threads.filter(({ anchor }) => !anchor).map((thread) => fullyQualifiedId(thread));\n }, [threads]);\n\n useEffect(() => {\n if (!sort) {\n return;\n }\n threads.sort((a, b) => sort(a?.anchor, b?.anchor));\n }, [sort, threads]);\n\n const attended = useAttended();\n const qualifiedSubjectId = fullyQualifiedId(subject);\n\n const handleAttend = useCallback(\n (thread: ThreadType) => {\n const threadId = fullyQualifiedId(thread);\n if (state.current !== threadId) {\n state.current = threadId;\n\n // TODO(wittjosiah): Should this be a thread-specific intent?\n // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.\n // This may be overloading this intent or highjacking its intended purpose.\n void dispatch(\n createIntent(LayoutAction.ScrollIntoView, {\n part: 'current',\n subject: fullyQualifiedId(subject),\n options: {\n cursor: thread.anchor,\n ref: threadId,\n },\n }),\n );\n }\n },\n [state.current, dispatch, subject],\n );\n\n const handleComment = useCallback(\n async (thread: ThreadType, message: string) => {\n thread.messages.push(\n makeRef(\n create(MessageType, {\n sender: { identityKey: identity?.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: message,\n // TODO(wittjosiah): Context based on attention.\n // context: context ? makeRef(context) : undefined,\n }),\n ),\n );\n\n await dispatch(createIntent(ThreadAction.OnMessageAdd, { thread, subject }));\n\n state.current = fullyQualifiedId(thread);\n },\n [dispatch, identity, subject],\n );\n\n const handleResolve = useCallback(\n (thread: ThreadType) => dispatch(createIntent(ThreadAction.ToggleResolved, { thread })),\n [dispatch],\n );\n\n const handleThreadDelete = useCallback(\n (thread: ThreadType) => dispatch(createIntent(ThreadAction.Delete, { thread, subject })),\n [dispatch, subject],\n );\n\n const handleMessageDelete = useCallback(\n (thread: ThreadType, messageId: string) =>\n dispatch(createIntent(ThreadAction.DeleteMessage, { thread, subject, messageId })),\n [dispatch, subject],\n );\n\n return (\n <CommentsContainer\n threads={threads}\n detached={detachedIds}\n currentId={attended.includes(qualifiedSubjectId) ? state.current : undefined}\n showResolvedThreads={showResolvedThreads}\n onAttend={handleAttend}\n onComment={handleComment}\n onResolve={handleResolve}\n onMessageDelete={handleMessageDelete}\n onThreadDelete={handleThreadDelete}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport type { ThreadSettingsProps } from '../types';\n\nexport const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n\n return (\n <DeprecatedFormContainer>\n <DeprecatedFormInput label={t('settings standalone label')}>\n <Input.Switch checked={settings.standalone} onCheckedChange={(checked) => (settings.standalone = !!checked)} />\n </DeprecatedFormInput>\n </DeprecatedFormContainer>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "useLayout", "SettingsStore", "log", "ChannelType", "getSpace", "lazy", "CheckCircle", "X", "React", "useCallback", "useMemo", "useRef", "useState", "RefArray", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "Button", "Tag", "Tooltip", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageTextbox", "Thread", "ThreadFooter", "ThreadHeading", "nonNullable", "sizeClass", "getSize", "commentControlClassNames", "ToggleResolvedButton", "isResolved", "onResolve", "t", "useTranslation", "THREAD_PLUGIN", "label", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "classNames", "hoverableControlItem", "span", "className", "CheckCircle", "weight", "Portal", "Content", "Arrow", "DeleteThreadButton", "onDelete", "X", "CommentContainer", "thread", "detached", "current", "onAttend", "onComment", "onMessageDelete", "onThreadDelete", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "activity", "useStatus", "fullyQualifiedId", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "_count", "_setCount", "useState", "rerenderEditor", "count", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "handleAttend", "useCallback", "handleResolve", "handleMessageDelete", "id", "handleThreadDelete", "handleComment", "Thread", "onClickCapture", "onFocusCapture", "div", "role", "mx", "hoverableControls", "hoverableFocusedWithinControls", "ThreadHeading", "name", "side", "status", "Tag", "palette", "RefArray", "allResolvedTargets", "messages", "filter", "nonNullable", "map", "message", "MessageContainer", "MessageTextbox", "onSend", "ThreadFooter", "ref", "ChatText", "React", "useEffect", "fullyQualifiedId", "useTranslation", "Trans", "descriptionText", "mx", "CommentsContainer", "threads", "detached", "currentId", "showResolvedThreads", "props", "t", "useTranslation", "THREAD_PLUGIN", "filteredThreads", "filter", "thread", "status", "useEffect", "document", "getElementById", "scrollIntoView", "behavior", "block", "React", "length", "map", "threadId", "fullyQualifiedId", "CommentContainer", "key", "current", "includes", "div", "role", "className", "mx", "descriptionText", "h2", "p", "Trans", "i18nKey", "components", "commentIcon", "ChatText", "React", "useCallback", "useEffect", "useMemo", "createIntent", "LayoutAction", "useCapability", "useCapabilities", "useIntentDispatcher", "ThreadCapabilities", "MessageType", "create", "fullyQualifiedId", "makeRef", "RefArray", "useIdentity", "useAttended", "nonNullable", "ThreadComplementary", "subject", "dispatchPromise", "dispatch", "useIntentDispatcher", "identity", "useIdentity", "state", "getViewState", "useCapability", "LocalThreadCapabilities", "MutableState", "showResolvedThreads", "fullyQualifiedId", "drafts", "threadsIntegrators", "useCapabilities", "ThreadCapabilities", "Thread", "createSort", "useMemo", "find", "p", "predicate", "sort", "threadObjects", "RefArray", "allResolvedTargets", "threads", "concat", "filter", "nonNullable", "JSON", "stringify", "detachedIds", "anchor", "map", "thread", "useEffect", "a", "b", "attended", "useAttended", "qualifiedSubjectId", "handleAttend", "useCallback", "threadId", "current", "createIntent", "LayoutAction", "ScrollIntoView", "part", "options", "cursor", "ref", "handleComment", "message", "messages", "push", "makeRef", "create", "MessageType", "sender", "identityKey", "toHex", "timestamp", "Date", "toISOString", "text", "ThreadAction", "OnMessageAdd", "handleResolve", "ToggleResolved", "handleThreadDelete", "Delete", "handleMessageDelete", "messageId", "DeleteMessage", "React", "CommentsContainer", "detached", "currentId", "includes", "undefined", "onAttend", "onComment", "onResolve", "onMessageDelete", "onThreadDelete", "React", "Input", "useTranslation", "DeprecatedFormContainer", "DeprecatedFormInput", "ThreadSettings", "settings", "t", "useTranslation", "THREAD_PLUGIN", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "standalone", "onCheckedChange", "ThreadContainer", "lazy", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "THREAD_PLUGIN", "role", "filter", "data", "subject", "ChannelType", "threads", "component", "layout", "useLayout", "channel", "load", "thread", "target", "log", "info", "currentPosition", "active", "findIndex", "objectToTheLeft", "context", "getSpace", "db", "getObjectById", "React", "ThreadContainer", "Array", "isArray", "ThreadComplementary", "SettingsStore", "prefix", "ThreadSettings", "settings", "value"]
|
|
7
|
-
}
|