@dxos/plugin-thread 0.8.2-main.5885341 → 0.8.2-main.600d381
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{ChatContainer-WC6KQDDU.mjs → ChatContainer-H4XTHM3A.mjs} +5 -5
- package/dist/lib/browser/ChatContainer-H4XTHM3A.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-6W4UKJDI.mjs → app-graph-builder-SQD3KQKB.mjs} +2 -2
- package/dist/lib/browser/app-graph-builder-SQD3KQKB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AYNXYEKP.mjs → chunk-32EIWOAL.mjs} +1 -1
- package/dist/lib/browser/{chunk-AYNXYEKP.mjs.map → chunk-32EIWOAL.mjs.map} +2 -2
- package/dist/lib/browser/chunk-AM4MYXGU.mjs +93 -0
- package/dist/lib/browser/chunk-AM4MYXGU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FY5OCUP6.mjs → chunk-I3JK6CBS.mjs} +9 -7
- package/dist/lib/browser/chunk-I3JK6CBS.mjs.map +7 -0
- package/dist/lib/browser/chunk-UIHVZTER.mjs +17 -0
- package/dist/lib/browser/index.mjs +10 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-3UW6ROYT.mjs → intent-resolver-EDSAXXNW.mjs} +4 -4
- package/dist/lib/browser/intent-resolver-EDSAXXNW.mjs.map +7 -0
- package/dist/lib/browser/{markdown-7KXBXCUS.mjs → markdown-M4QAJXHG.mjs} +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-F2AIYIUH.mjs → react-surface-JRPJOEQ7.mjs} +19 -20
- package/dist/lib/browser/react-surface-JRPJOEQ7.mjs.map +7 -0
- package/dist/lib/browser/{settings-2VZ7S4SK.mjs → settings-SSYDISA6.mjs} +2 -2
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{ChatContainer-LVYQ67PJ.cjs → ChatContainer-TUISUIY7.cjs} +11 -11
- package/dist/lib/node/ChatContainer-TUISUIY7.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-HZNWT4QU.cjs → app-graph-builder-G45JDZWQ.cjs} +5 -5
- package/dist/lib/node/app-graph-builder-G45JDZWQ.cjs.map +7 -0
- package/dist/lib/node/{chunk-RIYLEDQ7.cjs → chunk-ETDNE4Z6.cjs} +13 -11
- package/dist/lib/node/chunk-ETDNE4Z6.cjs.map +7 -0
- package/dist/lib/node/{chunk-46BSFPBV.cjs → chunk-HG7J3YR3.cjs} +44 -44
- package/dist/lib/node/chunk-HG7J3YR3.cjs.map +7 -0
- package/dist/lib/node/{chunk-W25MBII2.cjs → chunk-NO6WQR36.cjs} +4 -4
- package/dist/lib/node/{chunk-W25MBII2.cjs.map → chunk-NO6WQR36.cjs.map} +2 -2
- package/dist/lib/node/{chunk-IX63EKGL.cjs → chunk-ZFPSGBXT.cjs} +9 -9
- package/dist/lib/node/index.cjs +17 -17
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-DC6HDNTX.cjs → intent-resolver-ECFDZLCG.cjs} +15 -15
- package/dist/lib/node/intent-resolver-ECFDZLCG.cjs.map +7 -0
- package/dist/lib/node/{markdown-L2WMCQKM.cjs → markdown-G5NDD5EJ.cjs} +7 -7
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-GP5IH5LN.cjs → react-surface-PLJ3Z77A.cjs} +30 -31
- package/dist/lib/node/react-surface-PLJ3Z77A.cjs.map +7 -0
- package/dist/lib/node/{settings-7MGTJ46L.cjs → settings-PV6MGI52.cjs} +6 -6
- package/dist/lib/node/types.cjs +3 -3
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{ChatContainer-WMOPMK5H.mjs → ChatContainer-G7VTTRDN.mjs} +5 -5
- package/dist/lib/node-esm/ChatContainer-G7VTTRDN.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-M3KK5QJH.mjs → app-graph-builder-25K4ELOR.mjs} +2 -2
- package/dist/lib/node-esm/app-graph-builder-25K4ELOR.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-G7AKHJ3A.mjs +19 -0
- package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs → chunk-IZWN4KAY.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs.map → chunk-IZWN4KAY.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-7DOPZH6Y.mjs → chunk-V7HLWNAO.mjs} +9 -7
- package/dist/lib/node-esm/chunk-V7HLWNAO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XTZJQJY4.mjs +94 -0
- package/dist/lib/node-esm/chunk-XTZJQJY4.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +10 -10
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-OAMDKGAA.mjs → intent-resolver-GHN5XIMY.mjs} +4 -4
- package/dist/lib/node-esm/intent-resolver-GHN5XIMY.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-ZKU23UVD.mjs → markdown-WMR5AZRI.mjs} +2 -2
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-45GRKLWG.mjs → react-surface-M5GMRQVC.mjs} +19 -20
- package/dist/lib/node-esm/react-surface-M5GMRQVC.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-AJAZ3O47.mjs → settings-TJ53GIH3.mjs} +2 -2
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +5 -4
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +48 -51
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +2 -2
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/dist/types/src/hooks/analytics.d.ts +2 -2
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -56
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +218 -57
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +35 -33
- package/src/ThreadPlugin.tsx +7 -7
- package/src/capabilities/app-graph-builder.ts +3 -3
- package/src/capabilities/intent-resolver.ts +2 -2
- package/src/components/Chat.stories.tsx +3 -3
- package/src/components/ChatContainer.tsx +3 -3
- package/src/components/CommentContainer.tsx +25 -49
- package/src/components/Comments.stories.tsx +3 -7
- package/src/components/MessageContainer.tsx +31 -50
- package/src/components/testing.ts +2 -2
- package/src/components/types.ts +2 -2
- package/src/hooks/analytics.ts +6 -2
- package/src/translations.ts +2 -2
- package/src/types.ts +40 -40
- package/dist/lib/browser/ChatContainer-WC6KQDDU.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +0 -7
- package/dist/lib/browser/chunk-FY5OCUP6.mjs.map +0 -7
- package/dist/lib/browser/chunk-Q66FBBJD.mjs +0 -17
- package/dist/lib/browser/chunk-WOG72DWE.mjs +0 -93
- package/dist/lib/browser/chunk-WOG72DWE.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3UW6ROYT.mjs.map +0 -7
- package/dist/lib/browser/react-surface-F2AIYIUH.mjs.map +0 -7
- package/dist/lib/node/ChatContainer-LVYQ67PJ.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +0 -7
- package/dist/lib/node/chunk-46BSFPBV.cjs.map +0 -7
- package/dist/lib/node/chunk-RIYLEDQ7.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-DC6HDNTX.cjs.map +0 -7
- package/dist/lib/node/react-surface-GP5IH5LN.cjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-WMOPMK5H.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7DOPZH6Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-E446MGLP.mjs +0 -94
- package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QUTIMZJ4.mjs +0 -19
- package/dist/lib/node-esm/intent-resolver-OAMDKGAA.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-45GRKLWG.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-Q66FBBJD.mjs.map → chunk-UIHVZTER.mjs.map} +0 -0
- /package/dist/lib/browser/{markdown-7KXBXCUS.mjs.map → markdown-M4QAJXHG.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-2VZ7S4SK.mjs.map → settings-SSYDISA6.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-IX63EKGL.cjs.map → chunk-ZFPSGBXT.cjs.map} +0 -0
- /package/dist/lib/node/{markdown-L2WMCQKM.cjs.map → markdown-G5NDD5EJ.cjs.map} +0 -0
- /package/dist/lib/node/{settings-7MGTJ46L.cjs.map → settings-PV6MGI52.cjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-QUTIMZJ4.mjs.map → chunk-G7AKHJ3A.mjs.map} +0 -0
- /package/dist/lib/node-esm/{markdown-ZKU23UVD.mjs.map → markdown-WMR5AZRI.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-AJAZ3O47.mjs.map → settings-TJ53GIH3.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"5.
|
|
1
|
+
{"version":"5.8.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-thread",
|
|
3
|
-
"version": "0.8.2-main.
|
|
3
|
+
"version": "0.8.2-main.600d381",
|
|
4
4
|
"description": "DXOS Threads Surface plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -38,33 +38,34 @@
|
|
|
38
38
|
"@codemirror/view": "^6.34.1",
|
|
39
39
|
"@preact/signals-core": "^1.6.0",
|
|
40
40
|
"date-fns": "^3.3.1",
|
|
41
|
+
"effect": "3.14.21",
|
|
41
42
|
"lodash.get": "^4.4.2",
|
|
42
|
-
"@dxos/app-framework": "0.8.2-main.
|
|
43
|
-
"@dxos/
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/live-object": "0.8.2-main.
|
|
49
|
-
"@dxos/local-storage": "0.8.2-main.
|
|
50
|
-
"@dxos/log": "0.8.2-main.
|
|
51
|
-
"@dxos/plugin-
|
|
52
|
-
"@dxos/plugin-graph": "0.8.2-main.
|
|
53
|
-
"@dxos/plugin-
|
|
54
|
-
"@dxos/plugin-deck": "0.8.2-main.
|
|
55
|
-
"@dxos/plugin-markdown": "0.8.2-main.
|
|
56
|
-
"@dxos/
|
|
57
|
-
"@dxos/plugin-
|
|
58
|
-
"@dxos/react-
|
|
59
|
-
"@dxos/
|
|
60
|
-
"@dxos/react-ui-editor": "0.8.2-main.
|
|
61
|
-
"@dxos/react-ui-menu": "0.8.2-main.
|
|
62
|
-
"@dxos/react-ui-
|
|
63
|
-
"@dxos/react-ui-
|
|
64
|
-
"@dxos/react-ui-
|
|
65
|
-
"@dxos/
|
|
66
|
-
"@dxos/
|
|
67
|
-
"@dxos/util": "0.8.2-main.
|
|
43
|
+
"@dxos/app-framework": "0.8.2-main.600d381",
|
|
44
|
+
"@dxos/async": "0.8.2-main.600d381",
|
|
45
|
+
"@dxos/display-name": "0.8.2-main.600d381",
|
|
46
|
+
"@dxos/echo-schema": "0.8.2-main.600d381",
|
|
47
|
+
"@dxos/keys": "0.8.2-main.600d381",
|
|
48
|
+
"@dxos/invariant": "0.8.2-main.600d381",
|
|
49
|
+
"@dxos/live-object": "0.8.2-main.600d381",
|
|
50
|
+
"@dxos/local-storage": "0.8.2-main.600d381",
|
|
51
|
+
"@dxos/log": "0.8.2-main.600d381",
|
|
52
|
+
"@dxos/plugin-attention": "0.8.2-main.600d381",
|
|
53
|
+
"@dxos/plugin-graph": "0.8.2-main.600d381",
|
|
54
|
+
"@dxos/plugin-observability": "0.8.2-main.600d381",
|
|
55
|
+
"@dxos/plugin-deck": "0.8.2-main.600d381",
|
|
56
|
+
"@dxos/plugin-markdown": "0.8.2-main.600d381",
|
|
57
|
+
"@dxos/react-client": "0.8.2-main.600d381",
|
|
58
|
+
"@dxos/plugin-space": "0.8.2-main.600d381",
|
|
59
|
+
"@dxos/react-ui-attention": "0.8.2-main.600d381",
|
|
60
|
+
"@dxos/plugin-client": "0.8.2-main.600d381",
|
|
61
|
+
"@dxos/react-ui-editor": "0.8.2-main.600d381",
|
|
62
|
+
"@dxos/react-ui-menu": "0.8.2-main.600d381",
|
|
63
|
+
"@dxos/react-ui-stack": "0.8.2-main.600d381",
|
|
64
|
+
"@dxos/react-ui-form": "0.8.2-main.600d381",
|
|
65
|
+
"@dxos/react-ui-tabs": "0.8.2-main.600d381",
|
|
66
|
+
"@dxos/schema": "0.8.2-main.600d381",
|
|
67
|
+
"@dxos/react-ui-thread": "0.8.2-main.600d381",
|
|
68
|
+
"@dxos/util": "0.8.2-main.600d381"
|
|
68
69
|
},
|
|
69
70
|
"devDependencies": {
|
|
70
71
|
"@phosphor-icons/react": "^2.1.5",
|
|
@@ -74,17 +75,18 @@
|
|
|
74
75
|
"react": "~18.2.0",
|
|
75
76
|
"react-dom": "~18.2.0",
|
|
76
77
|
"vite": "5.4.7",
|
|
77
|
-
"@dxos/
|
|
78
|
-
"@dxos/
|
|
79
|
-
"@dxos/react-ui-theme": "0.8.2-main.
|
|
80
|
-
"@dxos/storybook-utils": "0.8.2-main.
|
|
78
|
+
"@dxos/react-ui": "0.8.2-main.600d381",
|
|
79
|
+
"@dxos/random": "0.8.2-main.600d381",
|
|
80
|
+
"@dxos/react-ui-theme": "0.8.2-main.600d381",
|
|
81
|
+
"@dxos/storybook-utils": "0.8.2-main.600d381"
|
|
81
82
|
},
|
|
82
83
|
"peerDependencies": {
|
|
83
84
|
"@phosphor-icons/react": "^2.1.5",
|
|
85
|
+
"effect": "^3.13.3",
|
|
84
86
|
"react": "~18.2.0",
|
|
85
87
|
"react-dom": "~18.2.0",
|
|
86
|
-
"@dxos/react-ui": "0.8.2-main.
|
|
87
|
-
"@dxos/react-ui-theme": "0.8.2-main.
|
|
88
|
+
"@dxos/react-ui": "0.8.2-main.600d381",
|
|
89
|
+
"@dxos/react-ui-theme": "0.8.2-main.600d381"
|
|
88
90
|
},
|
|
89
91
|
"publishConfig": {
|
|
90
92
|
"access": "public"
|
package/src/ThreadPlugin.tsx
CHANGED
|
@@ -7,9 +7,9 @@ import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
|
|
|
7
7
|
import { MarkdownEvents } from '@dxos/plugin-markdown';
|
|
8
8
|
import { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';
|
|
9
9
|
import { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';
|
|
10
|
-
import { type
|
|
10
|
+
import { type AnyLiveObject, RefArray } from '@dxos/react-client/echo';
|
|
11
11
|
import { translations as threadTranslations } from '@dxos/react-ui-thread';
|
|
12
|
-
import {
|
|
12
|
+
import { DataType } from '@dxos/schema';
|
|
13
13
|
|
|
14
14
|
import { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';
|
|
15
15
|
import { ThreadEvents as LocalThreadEvents } from './events';
|
|
@@ -58,16 +58,16 @@ export const ThreadPlugin = () =>
|
|
|
58
58
|
},
|
|
59
59
|
}),
|
|
60
60
|
contributes(Capabilities.Metadata, {
|
|
61
|
-
id:
|
|
61
|
+
id: DataType.Message.typename,
|
|
62
62
|
metadata: {
|
|
63
63
|
// TODO(wittjosiah): Move out of metadata.
|
|
64
|
-
loadReferences: (message:
|
|
64
|
+
loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),
|
|
65
65
|
},
|
|
66
66
|
}),
|
|
67
67
|
contributes(Capabilities.Metadata, {
|
|
68
68
|
id: THREAD_ITEM,
|
|
69
69
|
metadata: {
|
|
70
|
-
parse: (item:
|
|
70
|
+
parse: (item: AnyLiveObject<any>, type: string) => {
|
|
71
71
|
switch (type) {
|
|
72
72
|
case 'node':
|
|
73
73
|
return { id: item.id, label: item.title, data: item };
|
|
@@ -96,12 +96,12 @@ export const ThreadPlugin = () =>
|
|
|
96
96
|
defineModule({
|
|
97
97
|
id: `${meta.id}/module/schema`,
|
|
98
98
|
activatesOn: ClientEvents.SetupSchema,
|
|
99
|
-
activate: () => contributes(ClientCapabilities.Schema, [ThreadType,
|
|
99
|
+
activate: () => contributes(ClientCapabilities.Schema, [ThreadType, DataType.Message, DataType.MessageV1]),
|
|
100
100
|
}),
|
|
101
101
|
defineModule({
|
|
102
102
|
id: `${meta.id}/module/migration`,
|
|
103
103
|
activatesOn: ClientEvents.SetupMigration,
|
|
104
|
-
activate: () => contributes(ClientCapabilities.Migration, [
|
|
104
|
+
activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),
|
|
105
105
|
}),
|
|
106
106
|
defineModule({
|
|
107
107
|
id: `${meta.id}/module/markdown`,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';
|
|
6
|
-
import { type
|
|
6
|
+
import { type AnyLiveObject } from '@dxos/client/echo';
|
|
7
7
|
import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';
|
|
8
8
|
import { createExtension, type Node } from '@dxos/plugin-graph';
|
|
9
9
|
|
|
@@ -14,8 +14,8 @@ export default (context: PluginsContext) =>
|
|
|
14
14
|
createExtension({
|
|
15
15
|
id: `${meta.id}/comments`,
|
|
16
16
|
// TODO(wittjosiah): Support comments on any object.
|
|
17
|
-
// filter: (node): node is Node<
|
|
18
|
-
filter: (node): node is Node<
|
|
17
|
+
// filter: (node): node is Node<AnyLiveObject<any>> => isEchoObject(node.data),
|
|
18
|
+
filter: (node): node is Node<AnyLiveObject<any>> =>
|
|
19
19
|
!!node.data && typeof node.data === 'object' && 'threads' in node.data && Array.isArray(node.data.threads),
|
|
20
20
|
connector: ({ node }) => [
|
|
21
21
|
{
|
|
@@ -12,7 +12,7 @@ import { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';
|
|
|
12
12
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
13
13
|
import { ChannelType, ThreadType } from '@dxos/plugin-space/types';
|
|
14
14
|
import { live, fullyQualifiedId, getSpace, makeRef } from '@dxos/react-client/echo';
|
|
15
|
-
import {
|
|
15
|
+
import { DataType } from '@dxos/schema';
|
|
16
16
|
|
|
17
17
|
import { ThreadCapabilities } from './capabilities';
|
|
18
18
|
import { THREAD_PLUGIN } from '../meta';
|
|
@@ -172,7 +172,7 @@ export default (context: PluginsContext) =>
|
|
|
172
172
|
invariant(space, 'Space not found');
|
|
173
173
|
const intents = [];
|
|
174
174
|
|
|
175
|
-
const message = live(
|
|
175
|
+
const message = live(DataType.Message, {
|
|
176
176
|
sender,
|
|
177
177
|
created: new Date().toISOString(),
|
|
178
178
|
blocks: [{ type: 'text', text }],
|
|
@@ -19,7 +19,7 @@ import { live, type Space } from '@dxos/react-client/echo';
|
|
|
19
19
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
20
20
|
import { withClientProvider } from '@dxos/react-client/testing';
|
|
21
21
|
import { Thread } from '@dxos/react-ui-thread';
|
|
22
|
-
import {
|
|
22
|
+
import { DataType } from '@dxos/schema';
|
|
23
23
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
24
24
|
|
|
25
25
|
import { ChatContainer } from './ChatContainer';
|
|
@@ -80,8 +80,8 @@ const meta: Meta = {
|
|
|
80
80
|
],
|
|
81
81
|
}),
|
|
82
82
|
withTheme,
|
|
83
|
-
withLayout({ fullscreen: true
|
|
84
|
-
withClientProvider({ createSpace: true, types: [ThreadType,
|
|
83
|
+
withLayout({ fullscreen: true }),
|
|
84
|
+
withClientProvider({ createSpace: true, types: [ThreadType, DataType.Message] }),
|
|
85
85
|
],
|
|
86
86
|
parameters: { translations },
|
|
87
87
|
};
|
|
@@ -14,7 +14,7 @@ import { createBasicExtensions, createThemeExtensions, listener } from '@dxos/re
|
|
|
14
14
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
15
15
|
import { mx } from '@dxos/react-ui-theme';
|
|
16
16
|
import { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';
|
|
17
|
-
import {
|
|
17
|
+
import { DataType } from '@dxos/schema';
|
|
18
18
|
|
|
19
19
|
import { MessageContainer } from './MessageContainer';
|
|
20
20
|
import { command } from './command-extension';
|
|
@@ -44,7 +44,7 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
|
|
|
44
44
|
const id = dxn.toString();
|
|
45
45
|
const identity = useIdentity()!;
|
|
46
46
|
const members = useMembers(space?.key);
|
|
47
|
-
const queue = useQueue<
|
|
47
|
+
const queue = useQueue<DataType.Message>(dxn, { pollInterval: 1_000 });
|
|
48
48
|
const activity = useStatus(space, id);
|
|
49
49
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
50
50
|
// TODO(wittjosiah): This is a hack to reset the editor after a message is sent.
|
|
@@ -84,7 +84,7 @@ export const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
queue.append([
|
|
87
|
-
create(
|
|
87
|
+
create(DataType.Message, {
|
|
88
88
|
sender: { identityDid: identity.did },
|
|
89
89
|
created: new Date().toISOString(),
|
|
90
90
|
blocks: [{ type: 'text', text: messageRef.current }],
|
|
@@ -42,25 +42,17 @@ const ToggleResolvedButton = ({
|
|
|
42
42
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
43
43
|
const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');
|
|
44
44
|
return (
|
|
45
|
-
<Tooltip.
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
</Tooltip.Trigger>
|
|
57
|
-
<Tooltip.Portal>
|
|
58
|
-
<Tooltip.Content>
|
|
59
|
-
{label}
|
|
60
|
-
<Tooltip.Arrow />
|
|
61
|
-
</Tooltip.Content>
|
|
62
|
-
</Tooltip.Portal>
|
|
63
|
-
</Tooltip.Root>
|
|
45
|
+
<Tooltip.Trigger asChild content={label}>
|
|
46
|
+
<Button
|
|
47
|
+
variant='ghost'
|
|
48
|
+
data-testid='thread.toggle-resolved'
|
|
49
|
+
onClick={onResolve}
|
|
50
|
+
classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}
|
|
51
|
+
>
|
|
52
|
+
<span className='sr-only'>{label}</span>
|
|
53
|
+
{isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}
|
|
54
|
+
</Button>
|
|
55
|
+
</Tooltip.Trigger>
|
|
64
56
|
);
|
|
65
57
|
};
|
|
66
58
|
|
|
@@ -68,25 +60,17 @@ const DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {
|
|
|
68
60
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
69
61
|
const label = t('delete thread label');
|
|
70
62
|
return (
|
|
71
|
-
<Tooltip.
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
</Tooltip.Trigger>
|
|
83
|
-
<Tooltip.Portal>
|
|
84
|
-
<Tooltip.Content classNames='z-30'>
|
|
85
|
-
{label}
|
|
86
|
-
<Tooltip.Arrow />
|
|
87
|
-
</Tooltip.Content>
|
|
88
|
-
</Tooltip.Portal>
|
|
89
|
-
</Tooltip.Root>
|
|
63
|
+
<Tooltip.Trigger asChild content={label}>
|
|
64
|
+
<Button
|
|
65
|
+
variant='ghost'
|
|
66
|
+
data-testid='thread.delete'
|
|
67
|
+
onClick={onDelete}
|
|
68
|
+
classNames={[commentControlClassNames, hoverableControlItem]}
|
|
69
|
+
>
|
|
70
|
+
<span className='sr-only'>{label}</span>
|
|
71
|
+
<X className={sizeClass} />
|
|
72
|
+
</Button>
|
|
73
|
+
</Tooltip.Trigger>
|
|
90
74
|
);
|
|
91
75
|
};
|
|
92
76
|
|
|
@@ -156,17 +140,9 @@ export const CommentContainer = ({
|
|
|
156
140
|
)}
|
|
157
141
|
>
|
|
158
142
|
{detached ? (
|
|
159
|
-
<Tooltip.
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
</Tooltip.Trigger>
|
|
163
|
-
<Tooltip.Portal>
|
|
164
|
-
<Tooltip.Content classNames='z-30' side='top'>
|
|
165
|
-
{t('detached thread label')}
|
|
166
|
-
<Tooltip.Arrow />
|
|
167
|
-
</Tooltip.Content>
|
|
168
|
-
</Tooltip.Portal>
|
|
169
|
-
</Tooltip.Root>
|
|
143
|
+
<Tooltip.Trigger asChild content={t('detached thread label')} side='top'>
|
|
144
|
+
<ThreadHeading detached>{thread.name}</ThreadHeading>
|
|
145
|
+
</Tooltip.Trigger>
|
|
170
146
|
) : (
|
|
171
147
|
<ThreadHeading>{thread.name}</ThreadHeading>
|
|
172
148
|
)}
|
|
@@ -14,7 +14,7 @@ import { faker } from '@dxos/random';
|
|
|
14
14
|
import { Filter, fullyQualifiedId, useQuery, useSpace } from '@dxos/react-client/echo';
|
|
15
15
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
16
16
|
import { type ClientRepeatedComponentProps, ClientRepeater } from '@dxos/react-client/testing';
|
|
17
|
-
import {
|
|
17
|
+
import { DataType } from '@dxos/schema';
|
|
18
18
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
19
19
|
|
|
20
20
|
import { CommentsContainer } from './CommentsContainer';
|
|
@@ -59,12 +59,8 @@ export const Default = {};
|
|
|
59
59
|
const meta: Meta = {
|
|
60
60
|
title: 'plugins/plugin-thread/Comments',
|
|
61
61
|
// TODO(wittjosiah): Use decorator.
|
|
62
|
-
render: () => <ClientRepeater component={Story} createIdentity createSpace types={[ThreadType,
|
|
63
|
-
decorators: [
|
|
64
|
-
withTheme,
|
|
65
|
-
withLayout({ fullscreen: true, tooltips: true }),
|
|
66
|
-
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
67
|
-
],
|
|
62
|
+
render: () => <ClientRepeater component={Story} createIdentity createSpace types={[ThreadType, DataType.Message]} />,
|
|
63
|
+
decorators: [withTheme, withLayout({ fullscreen: true }), withPluginManager({ plugins: [IntentPlugin()] })],
|
|
68
64
|
parameters: { translations },
|
|
69
65
|
};
|
|
70
66
|
|
|
@@ -9,7 +9,7 @@ import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'rea
|
|
|
9
9
|
import { Surface } from '@dxos/app-framework';
|
|
10
10
|
import { RefArray } from '@dxos/live-object';
|
|
11
11
|
import { PublicKey } from '@dxos/react-client';
|
|
12
|
-
import { type
|
|
12
|
+
import { type AnyLiveObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';
|
|
13
13
|
import { useIdentity, type Identity } from '@dxos/react-client/halo';
|
|
14
14
|
import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';
|
|
15
15
|
import { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
mx,
|
|
22
22
|
} from '@dxos/react-ui-theme';
|
|
23
23
|
import { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';
|
|
24
|
-
import { type
|
|
24
|
+
import { type DataType } from '@dxos/schema';
|
|
25
25
|
|
|
26
26
|
import { command } from './command-extension';
|
|
27
27
|
import { useOnEditAnalytics } from '../hooks';
|
|
@@ -31,17 +31,14 @@ import { getMessageMetadata } from '../util';
|
|
|
31
31
|
// TODO(thure): #8149
|
|
32
32
|
const messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];
|
|
33
33
|
|
|
34
|
-
export
|
|
35
|
-
message
|
|
36
|
-
members,
|
|
37
|
-
editable = false,
|
|
38
|
-
onDelete,
|
|
39
|
-
}: {
|
|
40
|
-
message: MessageType;
|
|
34
|
+
export type MessageContainerProps = {
|
|
35
|
+
message: DataType.Message;
|
|
41
36
|
members: SpaceMember[];
|
|
42
37
|
editable?: boolean;
|
|
43
38
|
onDelete?: (id: string) => void;
|
|
44
|
-
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export const MessageContainer = ({ message, members, editable = false, onDelete }: MessageContainerProps) => {
|
|
45
42
|
const senderIdentity = members.find(
|
|
46
43
|
(member) =>
|
|
47
44
|
(message.sender.identityDid && member.identity.did === message.sender.identityDid) ||
|
|
@@ -64,46 +61,30 @@ export const MessageContainer = ({
|
|
|
64
61
|
<MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>
|
|
65
62
|
<ButtonGroup classNames='mie-1'>
|
|
66
63
|
{userIsAuthor && editable && (
|
|
67
|
-
<Tooltip.
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
</Tooltip.Trigger>
|
|
79
|
-
<Tooltip.Portal>
|
|
80
|
-
<Tooltip.Content>
|
|
81
|
-
{editLabel}
|
|
82
|
-
<Tooltip.Arrow />
|
|
83
|
-
</Tooltip.Content>
|
|
84
|
-
</Tooltip.Portal>
|
|
85
|
-
</Tooltip.Root>
|
|
64
|
+
<Tooltip.Trigger asChild content={editLabel}>
|
|
65
|
+
<Button
|
|
66
|
+
variant='ghost'
|
|
67
|
+
data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}
|
|
68
|
+
classNames={messageControlClassNames}
|
|
69
|
+
onClick={() => setEditing((editing) => !editing)}
|
|
70
|
+
>
|
|
71
|
+
<span className='sr-only'>{editLabel}</span>
|
|
72
|
+
{editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}
|
|
73
|
+
</Button>
|
|
74
|
+
</Tooltip.Trigger>
|
|
86
75
|
)}
|
|
87
76
|
{onDelete && (
|
|
88
|
-
<Tooltip.
|
|
89
|
-
<
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
</Tooltip.Trigger>
|
|
100
|
-
<Tooltip.Portal>
|
|
101
|
-
<Tooltip.Content>
|
|
102
|
-
{deleteLabel}
|
|
103
|
-
<Tooltip.Arrow />
|
|
104
|
-
</Tooltip.Content>
|
|
105
|
-
</Tooltip.Portal>
|
|
106
|
-
</Tooltip.Root>
|
|
77
|
+
<Tooltip.Trigger asChild content={deleteLabel}>
|
|
78
|
+
<Button
|
|
79
|
+
variant='ghost'
|
|
80
|
+
data-testid='thread.message.delete'
|
|
81
|
+
classNames={messageControlClassNames}
|
|
82
|
+
onClick={() => handleDelete()}
|
|
83
|
+
>
|
|
84
|
+
<span className='sr-only'>{deleteLabel}</span>
|
|
85
|
+
<X className={getSize(4)} />
|
|
86
|
+
</Button>
|
|
87
|
+
</Tooltip.Trigger>
|
|
107
88
|
)}
|
|
108
89
|
</ButtonGroup>
|
|
109
90
|
</MessageHeading>
|
|
@@ -124,7 +105,7 @@ const TextboxBlock = ({
|
|
|
124
105
|
isAuthor,
|
|
125
106
|
editing,
|
|
126
107
|
}: {
|
|
127
|
-
block:
|
|
108
|
+
block: DataType.MessageBlock.Text;
|
|
128
109
|
editing?: boolean;
|
|
129
110
|
isAuthor?: boolean;
|
|
130
111
|
identity?: Identity;
|
|
@@ -166,7 +147,7 @@ const TextboxBlock = ({
|
|
|
166
147
|
return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;
|
|
167
148
|
};
|
|
168
149
|
|
|
169
|
-
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject:
|
|
150
|
+
const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: AnyLiveObject<any> }>(
|
|
170
151
|
({ subject }, forwardedRef) => {
|
|
171
152
|
let title = subject.name ?? subject.title ?? subject.type ?? 'Object';
|
|
172
153
|
if (typeof title !== 'string') {
|
|
@@ -7,14 +7,14 @@ import { live, makeRef } from '@dxos/live-object';
|
|
|
7
7
|
import { ThreadType } from '@dxos/plugin-space/types';
|
|
8
8
|
import { faker } from '@dxos/random';
|
|
9
9
|
import { type Identity } from '@dxos/react-client/halo';
|
|
10
|
-
import {
|
|
10
|
+
import { DataType } from '@dxos/schema';
|
|
11
11
|
|
|
12
12
|
export const createCommentThread = (identity: Identity) => {
|
|
13
13
|
return live(ThreadType, {
|
|
14
14
|
messages: faker.helpers.multiple(
|
|
15
15
|
() =>
|
|
16
16
|
makeRef(
|
|
17
|
-
live(
|
|
17
|
+
live(DataType.Message, {
|
|
18
18
|
sender: {
|
|
19
19
|
identityDid: faker.datatype.boolean() ? identity.did : IdentityDid.random(),
|
|
20
20
|
},
|
package/src/components/types.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type
|
|
5
|
+
import { type AnyLiveObject } from '@dxos/client/echo';
|
|
6
6
|
import { type ThreadType } from '@dxos/plugin-space/types';
|
|
7
7
|
import { type ThreadProps } from '@dxos/react-ui-thread';
|
|
8
8
|
|
|
@@ -20,7 +20,7 @@ import { type ThreadProps } from '@dxos/react-ui-thread';
|
|
|
20
20
|
*/
|
|
21
21
|
export type ThreadContainerProps = {
|
|
22
22
|
thread: ThreadType;
|
|
23
|
-
context?:
|
|
23
|
+
context?: AnyLiveObject<any>;
|
|
24
24
|
autoFocusTextbox?: boolean;
|
|
25
25
|
onTextboxFocus?: () => void;
|
|
26
26
|
detached?: boolean;
|
package/src/hooks/analytics.ts
CHANGED
|
@@ -9,9 +9,13 @@ import { type Live } from '@dxos/live-object';
|
|
|
9
9
|
import { ObservabilityAction } from '@dxos/plugin-observability/types';
|
|
10
10
|
import { getSpace } from '@dxos/react-client/echo';
|
|
11
11
|
import { useOnTransition } from '@dxos/react-ui';
|
|
12
|
-
import { type
|
|
12
|
+
import { type DataType } from '@dxos/schema';
|
|
13
13
|
|
|
14
|
-
export const useOnEditAnalytics = (
|
|
14
|
+
export const useOnEditAnalytics = (
|
|
15
|
+
message: Live<any>,
|
|
16
|
+
textBlock: DataType.MessageBlock.Text | undefined,
|
|
17
|
+
editing: boolean,
|
|
18
|
+
) => {
|
|
15
19
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
16
20
|
|
|
17
21
|
const onEdit = useCallback(() => {
|
package/src/translations.ts
CHANGED
|
@@ -27,9 +27,9 @@ export default [
|
|
|
27
27
|
'comments heading': 'Comments',
|
|
28
28
|
'chat heading': 'Chat',
|
|
29
29
|
'draft button': 'DRAFT',
|
|
30
|
-
'no comments title': '
|
|
30
|
+
'no comments title': 'Comments',
|
|
31
31
|
'no comments message':
|
|
32
|
-
'
|
|
32
|
+
'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',
|
|
33
33
|
'toggle show resolved': 'Show resolved',
|
|
34
34
|
'unnamed object threads label': 'Threads',
|
|
35
35
|
'mark as resolved label': 'Mark as resolved',
|