@dxos/plugin-thread 0.8.0 → 0.8.1-main.013e445
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/ChannelContainer-YWGW5LTF.mjs +74 -0
- package/dist/lib/browser/ChannelContainer-YWGW5LTF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-FZ34L7RM.mjs} +4 -3
- package/dist/lib/browser/chunk-FZ34L7RM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-MC42ZV23.mjs} +16 -4
- package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-MC42ZV23.mjs.map} +4 -4
- package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-NOOMCX5E.mjs} +3 -2
- package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +7 -0
- package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-VDQ3TPIW.mjs} +28 -19
- package/dist/lib/browser/chunk-VDQ3TPIW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-636QDHE3.mjs → chunk-WBJLUUOK.mjs} +1 -1
- package/dist/lib/browser/{chunk-636QDHE3.mjs.map → chunk-WBJLUUOK.mjs.map} +2 -2
- package/dist/lib/browser/index.mjs +38 -27
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-FCC6BZSE.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs.map → intent-resolver-FCC6BZSE.mjs.map} +2 -2
- package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-I7DN4THW.mjs} +6 -6
- package/dist/lib/browser/markdown-I7DN4THW.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-34FQO5BB.mjs} +23 -31
- package/dist/lib/browser/react-surface-34FQO5BB.mjs.map +7 -0
- package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-G5ZTDTIU.mjs} +3 -3
- package/dist/lib/browser/{state-GNFUURIC.mjs → state-HPUFZBB7.mjs} +4 -3
- package/dist/lib/browser/state-HPUFZBB7.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs +98 -0
- package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs.map +7 -0
- package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-FMKMIGXZ.cjs} +30 -6
- package/dist/lib/node/chunk-FMKMIGXZ.cjs.map +7 -0
- package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-G63K6IDM.cjs} +35 -26
- package/dist/lib/node/chunk-G63K6IDM.cjs.map +7 -0
- package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
- package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
- package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
- package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
- package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-X5TUGJ5K.cjs} +8 -7
- package/dist/lib/node/chunk-X5TUGJ5K.cjs.map +7 -0
- package/dist/lib/node/index.cjs +74 -64
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-KTZSUHCU.cjs} +22 -22
- package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs.map → intent-resolver-KTZSUHCU.cjs.map} +2 -2
- package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-EUC6FFCM.cjs} +12 -12
- package/dist/lib/node/markdown-EUC6FFCM.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-SF7YHWER.cjs} +44 -52
- package/dist/lib/node/react-surface-SF7YHWER.cjs.map +7 -0
- package/dist/lib/node/{settings-7VQYARM5.cjs → settings-WQXGBGOV.cjs} +8 -8
- package/dist/lib/node/{state-TQWEZ6B3.cjs → state-JMI5ZXZI.cjs} +8 -7
- package/dist/lib/node/state-JMI5ZXZI.cjs.map +7 -0
- package/dist/lib/node/types.cjs +4 -4
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs +75 -0
- package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-FXUATCLW.mjs → chunk-42F2DTMM.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-FXUATCLW.mjs.map → chunk-42F2DTMM.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-C46EUYQO.mjs} +16 -4
- package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-C46EUYQO.mjs.map} +4 -4
- package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-FIPZFSRG.mjs} +28 -19
- package/dist/lib/node-esm/chunk-FIPZFSRG.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-TXW5SIBN.mjs} +3 -2
- package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs → chunk-XUAPEJSP.mjs} +4 -3
- package/dist/lib/node-esm/chunk-XUAPEJSP.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +38 -27
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-F4GQ2DBX.mjs} +5 -5
- package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs.map → intent-resolver-F4GQ2DBX.mjs.map} +2 -2
- package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-LNEGE76H.mjs} +6 -6
- package/dist/lib/node-esm/markdown-LNEGE76H.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-AZHTTR6J.mjs → react-surface-W6TBSW7R.mjs} +23 -31
- package/dist/lib/node-esm/react-surface-W6TBSW7R.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-3NFSK2ZO.mjs} +3 -3
- package/dist/lib/node-esm/{state-7MLR27YG.mjs → state-PSZO57LP.mjs} +4 -3
- package/dist/lib/node-esm/state-PSZO57LP.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +5 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts +9 -0
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +3 -2
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts +2 -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 +2 -1
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +3 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +2 -1
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts +2 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +104 -44
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +4 -0
- package/dist/types/src/events.d.ts.map +1 -0
- package/dist/types/src/hooks/analytics.d.ts +2 -1
- package/dist/types/src/hooks/analytics.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -7
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -9
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +32 -30
- package/src/ThreadPlugin.tsx +10 -4
- package/src/capabilities/capabilities.ts +6 -0
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +5 -16
- package/src/capabilities/state.ts +1 -1
- package/src/components/ChannelContainer.tsx +80 -0
- package/src/components/Chat.stories.tsx +4 -2
- package/src/components/ChatContainer.tsx +5 -5
- package/src/components/CommentContainer.tsx +1 -1
- package/src/components/Comments.stories.tsx +2 -1
- package/src/components/MessageContainer.tsx +15 -13
- package/src/components/ThreadComplementary.tsx +5 -4
- package/src/components/index.ts +1 -1
- package/src/components/testing.ts +15 -12
- package/src/events.ts +11 -0
- package/src/extensions/threads.ts +2 -2
- package/src/hooks/analytics.ts +7 -2
- package/src/index.ts +2 -0
- package/src/meta.ts +2 -2
- package/src/translations.ts +1 -3
- package/src/types.ts +4 -1
- package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
- package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
- package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
- package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
- package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
- package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
- package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
- package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
- package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
- package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
- package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
- package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
- package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
- package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
- package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
- package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
- package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
- package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
- package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
- package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
- package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
- package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
- package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
- package/dist/types/src/components/ThreadContainer.d.ts +0 -7
- package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
- package/src/components/ThreadContainer.tsx +0 -22
- /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-G5ZTDTIU.mjs.map} +0 -0
- /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-WQXGBGOV.cjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-3NFSK2ZO.mjs.map} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChatContainer
|
|
3
|
+
} from "./chunk-VDQ3TPIW.mjs";
|
|
4
|
+
import "./chunk-MC42ZV23.mjs";
|
|
5
|
+
import {
|
|
6
|
+
ThreadCapabilities
|
|
7
|
+
} from "./chunk-NOOMCX5E.mjs";
|
|
8
|
+
import "./chunk-WBJLUUOK.mjs";
|
|
9
|
+
|
|
10
|
+
// packages/plugins/plugin-thread/src/components/ChannelContainer.tsx
|
|
11
|
+
import React, { useCallback } from "react";
|
|
12
|
+
import { Surface, useCapabilities, useCapability } from "@dxos/app-framework";
|
|
13
|
+
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
14
|
+
import { createEditorActionGroup } from "@dxos/react-ui-editor";
|
|
15
|
+
import { createMenuAction, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
|
|
16
|
+
import { StackItem } from "@dxos/react-ui-stack";
|
|
17
|
+
var useActivitiesMenu = (activities, activity) => {
|
|
18
|
+
return useMenuActions(() => ({
|
|
19
|
+
nodes: [
|
|
20
|
+
createEditorActionGroup("activities", {
|
|
21
|
+
variant: "toggleGroup",
|
|
22
|
+
selectCardinality: "single",
|
|
23
|
+
value: activity
|
|
24
|
+
}),
|
|
25
|
+
...activities.map(({ id, ...properties }) => createMenuAction(id, {
|
|
26
|
+
...properties,
|
|
27
|
+
checked: true
|
|
28
|
+
}))
|
|
29
|
+
],
|
|
30
|
+
edges: [
|
|
31
|
+
{
|
|
32
|
+
source: "root",
|
|
33
|
+
target: "activities"
|
|
34
|
+
},
|
|
35
|
+
...activities.map((activity2) => ({
|
|
36
|
+
source: "activities",
|
|
37
|
+
target: activity2.id
|
|
38
|
+
}))
|
|
39
|
+
]
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
var ChannelContainer = ({ role, channel, context }) => {
|
|
43
|
+
const { state } = useCapability(ThreadCapabilities.MutableState);
|
|
44
|
+
const currentActivity = state.activities[channel.id];
|
|
45
|
+
const activities = useCapabilities(ThreadCapabilities.Activity);
|
|
46
|
+
const menu = useActivitiesMenu(activities, currentActivity);
|
|
47
|
+
const handleAction = useCallback((action) => state.activities[channel.id] = currentActivity === action.id ? void 0 : action.id, [
|
|
48
|
+
currentActivity
|
|
49
|
+
]);
|
|
50
|
+
const thread = channel.threads[0].target;
|
|
51
|
+
if (!thread) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return /* @__PURE__ */ React.createElement(StackItem.Content, {
|
|
55
|
+
toolbar: true
|
|
56
|
+
}, /* @__PURE__ */ React.createElement(MenuProvider, {
|
|
57
|
+
...menu,
|
|
58
|
+
onAction: handleAction,
|
|
59
|
+
attendableId: fullyQualifiedId(channel)
|
|
60
|
+
}, /* @__PURE__ */ React.createElement(ToolbarMenu, null)), currentActivity ? /* @__PURE__ */ React.createElement(Surface, {
|
|
61
|
+
role: `channel-activity--${currentActivity}`,
|
|
62
|
+
data: {
|
|
63
|
+
subject: channel
|
|
64
|
+
}
|
|
65
|
+
}) : /* @__PURE__ */ React.createElement(ChatContainer, {
|
|
66
|
+
thread,
|
|
67
|
+
context
|
|
68
|
+
}));
|
|
69
|
+
};
|
|
70
|
+
var ChannelContainer_default = ChannelContainer;
|
|
71
|
+
export {
|
|
72
|
+
ChannelContainer_default as default
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=ChannelContainer-YWGW5LTF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ChannelContainer.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, type ComponentProps } from 'react';\n\nimport { Surface, useCapabilities, useCapability } from '@dxos/app-framework';\nimport { type NodeArg } from '@dxos/plugin-graph';\nimport { type ChannelType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { createEditorActionGroup } from '@dxos/react-ui-editor';\nimport {\n createMenuAction,\n MenuProvider,\n ToolbarMenu,\n type ToolbarMenuActionGroupProperties,\n useMenuActions,\n type MenuAction,\n} from '@dxos/react-ui-menu';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ChatContainer } from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\n\nconst useActivitiesMenu = (activities: ThreadCapabilities.Activity[], activity: string | undefined) => {\n return useMenuActions(() => ({\n nodes: [\n createEditorActionGroup('activities', {\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: activity,\n } as ToolbarMenuActionGroupProperties) as NodeArg<any>,\n ...activities.map(({ id, ...properties }) =>\n createMenuAction(id, {\n ...properties,\n checked: true,\n }),\n ),\n ],\n edges: [\n { source: 'root', target: 'activities' },\n ...activities.map((activity) => ({ source: 'activities', target: activity.id })),\n ],\n }));\n};\n\nconst ChannelContainer = ({\n role,\n channel,\n context,\n}: Pick<ComponentProps<typeof ChatContainer>, 'context'> & { channel: ChannelType; role: string }) => {\n const { state } = useCapability(ThreadCapabilities.MutableState);\n const currentActivity = state.activities[channel.id];\n const activities = useCapabilities(ThreadCapabilities.Activity);\n const menu = useActivitiesMenu(activities, currentActivity);\n const handleAction = useCallback(\n (action: MenuAction) => (state.activities[channel.id] = currentActivity === action.id ? undefined : action.id),\n [currentActivity],\n );\n\n const thread = channel.threads[0].target;\n if (!thread) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(channel)}>\n <ToolbarMenu />\n </MenuProvider>\n {currentActivity ? (\n <Surface role={`channel-activity--${currentActivity}`} data={{ subject: channel }} />\n ) : (\n <ChatContainer thread={thread} context={context} />\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAIA,OAAOA,SAASC,mBAAwC;AAExD,SAASC,SAASC,iBAAiBC,qBAAqB;AAGxD,SAASC,wBAAwB;AACjC,SAASC,+BAA+B;AACxC,SACEC,kBACAC,cACAC,aAEAC,sBAEK;AACP,SAASC,iBAAiB;AAK1B,IAAMC,oBAAoB,CAACC,YAA2CC,aAAAA;AACpE,SAAOC,eAAe,OAAO;IAC3BC,OAAO;MACLC,wBAAwB,cAAc;QACpCC,SAAS;QACTC,mBAAmB;QACnBC,OAAON;MACT,CAAA;SACGD,WAAWQ,IAAI,CAAC,EAAEC,IAAI,GAAGC,WAAAA,MAC1BC,iBAAiBF,IAAI;QACnB,GAAGC;QACHE,SAAS;MACX,CAAA,CAAA;;IAGJC,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAa;SACpCf,WAAWQ,IAAI,CAACP,eAAc;QAAEa,QAAQ;QAAcC,QAAQd,UAASQ;MAAG,EAAA;;EAEjF,EAAA;AACF;AAEA,IAAMO,mBAAmB,CAAC,EACxBC,MACAC,SACAC,QAAO,MACwF;AAC/F,QAAM,EAAEC,MAAK,IAAKC,cAAcC,mBAAmBC,YAAY;AAC/D,QAAMC,kBAAkBJ,MAAMpB,WAAWkB,QAAQT,EAAE;AACnD,QAAMT,aAAayB,gBAAgBH,mBAAmBI,QAAQ;AAC9D,QAAMC,OAAO5B,kBAAkBC,YAAYwB,eAAAA;AAC3C,QAAMI,eAAeC,YACnB,CAACC,WAAwBV,MAAMpB,WAAWkB,QAAQT,EAAE,IAAIe,oBAAoBM,OAAOrB,KAAKsB,SAAYD,OAAOrB,IAC3G;IAACe;GAAgB;AAGnB,QAAMQ,SAASd,QAAQe,QAAQ,CAAA,EAAGlB;AAClC,MAAI,CAACiB,QAAQ;AACX,WAAO;EACT;AAEA,SACE,sBAAA,cAACE,UAAUC,SAAO;IAACC,SAAAA;KACjB,sBAAA,cAACC,cAAAA;IAAc,GAAGV;IAAMW,UAAUV;IAAcW,cAAcC,iBAAiBtB,OAAAA;KAC7E,sBAAA,cAACuB,aAAAA,IAAAA,CAAAA,GAEFjB,kBACC,sBAAA,cAACkB,SAAAA;IAAQzB,MAAM,qBAAqBO,eAAAA;IAAmBmB,MAAM;MAAEC,SAAS1B;IAAQ;OAEhF,sBAAA,cAAC2B,eAAAA;IAAcb;IAAgBb;;AAIvC;AAEA,IAAA,2BAAeH;",
|
|
6
|
+
"names": ["React", "useCallback", "Surface", "useCapabilities", "useCapability", "fullyQualifiedId", "createEditorActionGroup", "createMenuAction", "MenuProvider", "ToolbarMenu", "useMenuActions", "StackItem", "useActivitiesMenu", "activities", "activity", "useMenuActions", "nodes", "createEditorActionGroup", "variant", "selectCardinality", "value", "map", "id", "properties", "createMenuAction", "checked", "edges", "source", "target", "ChannelContainer", "role", "channel", "context", "state", "useCapability", "ThreadCapabilities", "MutableState", "currentActivity", "useCapabilities", "Activity", "menu", "handleAction", "useCallback", "action", "undefined", "thread", "threads", "StackItem", "Content", "toolbar", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "Surface", "data", "subject", "ChatContainer"]
|
|
7
|
+
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
THREAD_PLUGIN
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WBJLUUOK.mjs";
|
|
4
4
|
|
|
5
5
|
// packages/plugins/plugin-thread/src/types.ts
|
|
6
6
|
import { S } from "@dxos/echo-schema";
|
|
7
|
-
import { ChannelType,
|
|
7
|
+
import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
|
|
8
8
|
import { EchoObjectSchema } from "@dxos/react-client/echo";
|
|
9
|
+
import { MessageType } from "@dxos/schema";
|
|
9
10
|
var ThreadAction;
|
|
10
11
|
(function(ThreadAction2) {
|
|
11
12
|
const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
|
|
@@ -76,4 +77,4 @@ export {
|
|
|
76
77
|
ThreadAction,
|
|
77
78
|
ThreadSettingsSchema
|
|
78
79
|
};
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
80
|
+
//# sourceMappingURL=chunk-FZ34L7RM.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { MessageType } from '@dxos/schema';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.optional(S.String),\n subject: S.optional(EchoObjectSchema),\n }),\n output: S.Struct({\n object: S.Union(ChannelType, ThreadType),\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n skipOpen: S.optional(S.Boolean),\n }),\n output: S.Void,\n }) {}\n\n export class ToggleResolved extends S.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: S.Struct({\n thread: ThreadType,\n }),\n output: S.Void,\n }) {}\n\n export class Delete extends S.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: S.optional(S.String),\n }),\n output: S.Void,\n }) {}\n\n // TODO(wittjosiah): Rename?\n export class OnMessageAdd extends S.TaggedClass<OnMessageAdd>()(`${THREAD_ACTION}/on-message-add`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n }),\n output: S.Void,\n }) {}\n\n export class DeleteMessage extends S.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: S.String,\n message: S.optional(MessageType),\n messageIndex: S.optional(S.Number),\n }),\n output: S.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = S.mutable(S.Struct({}));\n\nexport type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Current channel activity. */\n activities: Record<string, string | undefined>;\n /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,SAAS;AAClB,SAASC,aAAaC,kBAAkB;AACxC,SAASC,wBAAwB;AACjC,SAASC,mBAAmB;;UAIXC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,QAAQP,EAAEK,SAASL,EAAEM,MAAM;MAC3BE,SAASR,EAAEK,SAASI,gBAAAA;IACtB,CAAA;IACAC,QAAQV,EAAEG,OAAO;MACfQ,QAAQX,EAAEY,MAAMC,aAAaC,UAAAA;IAC/B,CAAA;EACF,CAAA,EAAA;EAAI;gBATSf,SAAAA;EAWN,MAAMgB,eAAef,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACda,SAAShB,EAAEM;MACXW,UAAUjB,EAAEK,SAASL,EAAEkB,OAAO;IAChC,CAAA;IACAR,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBpB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;IACV,CAAA;IACAJ,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAetB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTF,QAAQP,EAAEK,SAASL,EAAEM,MAAM;IAC7B,CAAA;IACAI,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBvB,EAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;IACX,CAAA;IACAC,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBxB,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTgB,WAAWzB,EAAEM;MACboB,SAAS1B,EAAEK,SAASsB,WAAAA;MACpBC,cAAc5B,EAAEK,SAASL,EAAE6B,MAAM;IACnC,CAAA;IACAnB,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GAzDiB5B,iBAAAA,eAAAA,CAAAA,EAAAA;AA2DV,IAAMkC,uBAAuB9B,EAAE+B,QAAQ/B,EAAEG,OAAO,CAAC,CAAA,CAAA;",
|
|
6
|
+
"names": ["S", "ChannelType", "ThreadType", "EchoObjectSchema", "MessageType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "cursor", "subject", "EchoObjectSchema", "output", "object", "Union", "ChannelType", "ThreadType", "Select", "current", "skipOpen", "Boolean", "Void", "ToggleResolved", "thread", "Delete", "OnMessageAdd", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
|
|
7
|
+
}
|
|
@@ -54,18 +54,30 @@ var useAnalyticsCallback = (spaceId, name, meta) => {
|
|
|
54
54
|
spaceId
|
|
55
55
|
]);
|
|
56
56
|
};
|
|
57
|
-
var useOnEditAnalytics = (message, editing) => {
|
|
57
|
+
var useOnEditAnalytics = (message, textBlock, editing) => {
|
|
58
58
|
const space = getSpace(message);
|
|
59
59
|
const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
|
|
60
60
|
messageId: message.id,
|
|
61
|
-
messageLength:
|
|
61
|
+
messageLength: textBlock?.text.length
|
|
62
62
|
});
|
|
63
63
|
useOnTransition(editing, true, false, onEditAnalytics);
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
+
// packages/plugins/plugin-thread/src/capabilities/index.ts
|
|
67
|
+
import { lazy } from "@dxos/app-framework";
|
|
68
|
+
var IntentResolver = lazy(() => import("./intent-resolver-FCC6BZSE.mjs"));
|
|
69
|
+
var Markdown = lazy(() => import("./markdown-I7DN4THW.mjs"));
|
|
70
|
+
var ReactSurface = lazy(() => import("./react-surface-34FQO5BB.mjs"));
|
|
71
|
+
var ThreadSettings = lazy(() => import("./settings-G5ZTDTIU.mjs"));
|
|
72
|
+
var ThreadState = lazy(() => import("./state-HPUFZBB7.mjs"));
|
|
73
|
+
|
|
66
74
|
export {
|
|
67
75
|
useStatus,
|
|
68
76
|
useAnalyticsCallback,
|
|
69
|
-
useOnEditAnalytics
|
|
77
|
+
useOnEditAnalytics,
|
|
78
|
+
IntentResolver,
|
|
79
|
+
Markdown,
|
|
80
|
+
ReactSurface,
|
|
81
|
+
ThreadState
|
|
70
82
|
};
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-MC42ZV23.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any
|
|
5
|
-
"mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;
|
|
6
|
-
"names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
|
|
3
|
+
"sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts", "../../../src/capabilities/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type TextContentBlock } from '@dxos/schema';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (\n message: ReactiveObject<any>,\n textBlock: TextContentBlock | undefined,\n editing: boolean,\n) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: textBlock?.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\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,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAGzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAChCC,SACAC,WACAC,YAAAA;AAEA,QAAMC,QAAQC,SAASJ,OAAAA;AAEvB,QAAMK,kBAAkBnB,qBAAqBiB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWP,QAAQM;IACnBE,eAAeP,WAAWQ,KAAKC;EACjC,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;;;ACnCA,SAASO,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,WAAWD,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMI,cAAcJ,KAAK,MAAM,OAAO,sBAAA,CAAA;",
|
|
6
|
+
"names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "textBlock", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "lazy", "IntentResolver", "lazy", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
THREAD_PLUGIN
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WBJLUUOK.mjs";
|
|
4
4
|
|
|
5
5
|
// packages/plugins/plugin-thread/src/capabilities/capabilities.ts
|
|
6
6
|
import { defineCapability } from "@dxos/app-framework";
|
|
@@ -8,9 +8,10 @@ var ThreadCapabilities;
|
|
|
8
8
|
(function(ThreadCapabilities2) {
|
|
9
9
|
ThreadCapabilities2.State = defineCapability(`${THREAD_PLUGIN}/capability/state`);
|
|
10
10
|
ThreadCapabilities2.MutableState = defineCapability(`${THREAD_PLUGIN}/capability/state`);
|
|
11
|
+
ThreadCapabilities2.Activity = defineCapability(`${THREAD_PLUGIN}/capability/activity`);
|
|
11
12
|
})(ThreadCapabilities || (ThreadCapabilities = {}));
|
|
12
13
|
|
|
13
14
|
export {
|
|
14
15
|
ThreadCapabilities
|
|
15
16
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-NOOMCX5E.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type MenuActionProperties } from '@dxos/react-ui-menu';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ViewState, type ThreadState } from '../types';\n\nexport namespace ThreadCapabilities {\n type GetViewState = (subjectId: string) => ViewState;\n export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n\n export type Activity = Omit<MenuActionProperties, 'variant' | 'checked'> & {\n id: string;\n };\n export const Activity = defineCapability<Activity>(`${THREAD_PLUGIN}/capability/activity`);\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAOhBC,qBAAAA;sBAEFC,QAAQC,iBACnB,GAAGC,aAAAA,mBAAgC;sBAExBC,eAAeF,iBAC1B,GAAGC,aAAAA,mBAAgC;sBAMxBE,WAAWH,iBAA2B,GAAGC,aAAAA,sBAAmC;AAC3F,GAbiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
|
|
6
|
+
"names": ["defineCapability", "ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState", "Activity"]
|
|
7
|
+
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useOnEditAnalytics,
|
|
3
3
|
useStatus
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MC42ZV23.mjs";
|
|
5
5
|
import {
|
|
6
6
|
THREAD_PLUGIN
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WBJLUUOK.mjs";
|
|
8
8
|
|
|
9
9
|
// packages/plugins/plugin-thread/src/components/ChatContainer.tsx
|
|
10
10
|
import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
|
|
11
11
|
import { Ref } from "@dxos/echo-schema";
|
|
12
12
|
import { create, makeRef, RefArray as RefArray2 } from "@dxos/live-object";
|
|
13
|
-
import { MessageType } from "@dxos/plugin-space/types";
|
|
14
13
|
import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
|
|
15
14
|
import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
|
|
16
15
|
import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
@@ -18,6 +17,7 @@ import { createBasicExtensions as createBasicExtensions2, createThemeExtensions
|
|
|
18
17
|
import { StackItem } from "@dxos/react-ui-stack";
|
|
19
18
|
import { mx as mx3 } from "@dxos/react-ui-theme";
|
|
20
19
|
import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
|
|
20
|
+
import { MessageType } from "@dxos/schema";
|
|
21
21
|
|
|
22
22
|
// packages/plugins/plugin-thread/src/components/MessageContainer.tsx
|
|
23
23
|
import { EditorView } from "@codemirror/view";
|
|
@@ -96,6 +96,9 @@ var MessageContainer = ({ message, members, onDelete }) => {
|
|
|
96
96
|
const { t } = useTranslation(THREAD_PLUGIN);
|
|
97
97
|
const editLabel = t(editing ? "save message label" : "edit message label");
|
|
98
98
|
const deleteLabel = t("delete message label");
|
|
99
|
+
const textBlock = message.blocks.find((block) => block.type === "text");
|
|
100
|
+
const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
|
|
101
|
+
useOnEditAnalytics(message, textBlock, !!editing);
|
|
99
102
|
return /* @__PURE__ */ React.createElement(MessageRoot, {
|
|
100
103
|
...messageMetadata,
|
|
101
104
|
classNames: [
|
|
@@ -131,13 +134,13 @@ var MessageContainer = ({ message, members, onDelete }) => {
|
|
|
131
134
|
className: "sr-only"
|
|
132
135
|
}, deleteLabel), /* @__PURE__ */ React.createElement(X, {
|
|
133
136
|
className: getSize(4)
|
|
134
|
-
}))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
|
|
135
|
-
|
|
137
|
+
}))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
|
|
138
|
+
block: textBlock,
|
|
136
139
|
isAuthor: userIsAuthor,
|
|
137
140
|
editing
|
|
138
|
-
}), RefArray.
|
|
141
|
+
}), RefArray.targets(references).map((reference, index) => /* @__PURE__ */ React.createElement(MessagePart, {
|
|
139
142
|
key: index,
|
|
140
|
-
part
|
|
143
|
+
part: reference
|
|
141
144
|
})));
|
|
142
145
|
};
|
|
143
146
|
var MessagePart = ({ part }) => {
|
|
@@ -145,20 +148,20 @@ var MessagePart = ({ part }) => {
|
|
|
145
148
|
subject: part
|
|
146
149
|
});
|
|
147
150
|
};
|
|
148
|
-
var TextboxBlock = ({
|
|
151
|
+
var TextboxBlock = ({ block, isAuthor, editing }) => {
|
|
149
152
|
const { themeMode } = useThemeContext();
|
|
150
|
-
const inMemoryContentRef = useRef(
|
|
153
|
+
const inMemoryContentRef = useRef(block.text);
|
|
151
154
|
const handleDocumentChange = useCallback((newState) => {
|
|
152
155
|
inMemoryContentRef.current = newState;
|
|
153
156
|
}, []);
|
|
154
157
|
const saveDocumentChange = useCallback(() => {
|
|
155
|
-
|
|
158
|
+
block.text = inMemoryContentRef.current;
|
|
156
159
|
}, [
|
|
157
|
-
|
|
160
|
+
block
|
|
158
161
|
]);
|
|
159
162
|
useOnTransition(editing, true, false, saveDocumentChange);
|
|
160
163
|
const { parentRef, focusAttributes, view } = useTextEditor(() => ({
|
|
161
|
-
initialValue:
|
|
164
|
+
initialValue: block.text,
|
|
162
165
|
extensions: [
|
|
163
166
|
createBasicExtensions({
|
|
164
167
|
readonly: !isAuthor || !editing
|
|
@@ -174,7 +177,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
|
|
|
174
177
|
})
|
|
175
178
|
]
|
|
176
179
|
}), [
|
|
177
|
-
|
|
180
|
+
block.text,
|
|
178
181
|
editing,
|
|
179
182
|
isAuthor,
|
|
180
183
|
themeMode,
|
|
@@ -186,7 +189,6 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
|
|
|
186
189
|
editing,
|
|
187
190
|
view
|
|
188
191
|
]);
|
|
189
|
-
useOnEditAnalytics(message, !!editing);
|
|
190
192
|
return /* @__PURE__ */ React.createElement("div", {
|
|
191
193
|
role: "none",
|
|
192
194
|
ref: parentRef,
|
|
@@ -257,9 +259,16 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
257
259
|
sender: {
|
|
258
260
|
identityKey: identity.identityKey.toHex()
|
|
259
261
|
},
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
262
|
+
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
263
|
+
blocks: [
|
|
264
|
+
{
|
|
265
|
+
type: "text",
|
|
266
|
+
text: messageRef.current
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
properties: context ? {
|
|
270
|
+
context: makeRef(context)
|
|
271
|
+
} : void 0
|
|
263
272
|
})));
|
|
264
273
|
messageRef.current = "";
|
|
265
274
|
setAutoFocus(true);
|
|
@@ -284,7 +293,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
284
293
|
}, /* @__PURE__ */ React2.createElement("div", {
|
|
285
294
|
role: "none",
|
|
286
295
|
className: mx3(threadLayout, "place-self-end")
|
|
287
|
-
}, RefArray2.
|
|
296
|
+
}, RefArray2.targets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
|
|
288
297
|
key: message.id,
|
|
289
298
|
message,
|
|
290
299
|
members,
|
|
@@ -309,4 +318,4 @@ export {
|
|
|
309
318
|
MessageContainer,
|
|
310
319
|
ChatContainer
|
|
311
320
|
};
|
|
312
|
-
//# sourceMappingURL=chunk-
|
|
321
|
+
//# sourceMappingURL=chunk-VDQ3TPIW.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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 { 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';\nimport { MessageType } from '@dxos/schema';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n return (\n <div role='none' className='flex items-center'>\n <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\n </div>\n );\n};\n\nexport 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 created: new Date().toISOString(),\n blocks: [{ type: 'text', text: messageRef.current }],\n properties: 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.targets(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 { 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 {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { type TextContentBlock, type MessageType } from '@dxos/schema';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { 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 const textBlock = message.blocks.find((block) => block.type === 'text');\n const references = message.blocks.filter((block) => block.type === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\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 {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {RefArray.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: TextContentBlock;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.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 [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(\n ({ subject }, forwardedRef) => {\n let title = subject.name ?? subject.title ?? subject.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 ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\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", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "MessageType", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "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", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "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", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "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", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "mx", "Surface", "limit", "data", "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", "created", "Date", "toISOString", "blocks", "type", "properties", "undefined", "handleDelete", "id", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "React", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "div", "role", "className", "mx", "threadLayout", "RefArray", "targets", "map", "message", "MessageContainer", "onDelete", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n}
|
|
5
|
-
"mappings": ";AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta: PluginMeta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAmB;EAC9BC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
|
|
6
6
|
"names": ["THREAD_PLUGIN", "THREAD_ITEM", "meta", "id", "name", "description", "icon", "source"]
|
|
7
7
|
}
|
|
@@ -2,32 +2,40 @@ import {
|
|
|
2
2
|
IntentResolver,
|
|
3
3
|
Markdown,
|
|
4
4
|
ReactSurface,
|
|
5
|
-
ThreadState
|
|
6
|
-
} from "./chunk-VOMIDDNO.mjs";
|
|
7
|
-
import {
|
|
5
|
+
ThreadState,
|
|
8
6
|
useAnalyticsCallback,
|
|
9
7
|
useOnEditAnalytics,
|
|
10
8
|
useStatus
|
|
11
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-MC42ZV23.mjs";
|
|
12
10
|
import {
|
|
13
11
|
ThreadAction
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import
|
|
12
|
+
} from "./chunk-FZ34L7RM.mjs";
|
|
13
|
+
import {
|
|
14
|
+
ThreadCapabilities
|
|
15
|
+
} from "./chunk-NOOMCX5E.mjs";
|
|
16
16
|
import {
|
|
17
17
|
THREAD_ITEM,
|
|
18
18
|
THREAD_PLUGIN,
|
|
19
19
|
meta
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-WBJLUUOK.mjs";
|
|
21
|
+
|
|
22
|
+
// packages/plugins/plugin-thread/src/events.ts
|
|
23
|
+
import { Events } from "@dxos/app-framework";
|
|
24
|
+
var ThreadEvents;
|
|
25
|
+
(function(ThreadEvents3) {
|
|
26
|
+
ThreadEvents3.SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);
|
|
27
|
+
})(ThreadEvents || (ThreadEvents = {}));
|
|
21
28
|
|
|
22
29
|
// packages/plugins/plugin-thread/src/ThreadPlugin.tsx
|
|
23
|
-
import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
|
|
30
|
+
import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";
|
|
24
31
|
import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
|
|
25
32
|
import { DeckCapabilities, DeckEvents } from "@dxos/plugin-deck";
|
|
26
33
|
import { MarkdownEvents } from "@dxos/plugin-markdown";
|
|
27
|
-
import { SpaceCapabilities, ThreadEvents } from "@dxos/plugin-space";
|
|
28
|
-
import { ChannelType as ChannelType2, defineObjectForm,
|
|
34
|
+
import { SpaceCapabilities, ThreadEvents as ThreadEvents2 } from "@dxos/plugin-space";
|
|
35
|
+
import { ChannelType as ChannelType2, defineObjectForm, ThreadType } from "@dxos/plugin-space/types";
|
|
29
36
|
import { RefArray } from "@dxos/react-client/echo";
|
|
30
37
|
import { translations as threadTranslations } from "@dxos/react-ui-thread";
|
|
38
|
+
import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from "@dxos/schema";
|
|
31
39
|
|
|
32
40
|
// packages/plugins/plugin-thread/src/translations.ts
|
|
33
41
|
import { ChannelType } from "@dxos/plugin-space/types";
|
|
@@ -35,14 +43,12 @@ var translations_default = [
|
|
|
35
43
|
{
|
|
36
44
|
"en-US": {
|
|
37
45
|
[ChannelType.typename]: {
|
|
38
|
-
"typename label": "Channel"
|
|
46
|
+
"typename label": "Channel",
|
|
47
|
+
"object name placeholder": "New channel"
|
|
39
48
|
},
|
|
40
49
|
[THREAD_PLUGIN]: {
|
|
41
50
|
"plugin name": "Threads",
|
|
42
|
-
"channel name placeholder": "New channel",
|
|
43
51
|
"channel title label": "Title",
|
|
44
|
-
"delete channel label": "Delete channel",
|
|
45
|
-
"create channel label": "Create channel",
|
|
46
52
|
"message placeholder": "Reply\u2026",
|
|
47
53
|
"activity message": "Processing\u2026",
|
|
48
54
|
"anonymous label": "Anonymous",
|
|
@@ -85,12 +91,12 @@ var ThreadPlugin = () => definePlugin(meta, [
|
|
|
85
91
|
// TODO(wittjosiah): Does not integrate with settings store.
|
|
86
92
|
// Should this be a different event?
|
|
87
93
|
// Should settings store be renamed to be more generic?
|
|
88
|
-
activatesOn:
|
|
94
|
+
activatesOn: Events2.SetupSettings,
|
|
89
95
|
activate: ThreadState
|
|
90
96
|
}),
|
|
91
97
|
defineModule({
|
|
92
98
|
id: `${meta.id}/module/translations`,
|
|
93
|
-
activatesOn:
|
|
99
|
+
activatesOn: Events2.SetupTranslations,
|
|
94
100
|
activate: () => contributes(Capabilities.Translations, [
|
|
95
101
|
...translations_default,
|
|
96
102
|
...threadTranslations
|
|
@@ -98,17 +104,11 @@ var ThreadPlugin = () => definePlugin(meta, [
|
|
|
98
104
|
}),
|
|
99
105
|
defineModule({
|
|
100
106
|
id: `${meta.id}/module/metadata`,
|
|
101
|
-
activatesOn:
|
|
107
|
+
activatesOn: Events2.SetupMetadata,
|
|
102
108
|
activate: () => [
|
|
103
109
|
contributes(Capabilities.Metadata, {
|
|
104
110
|
id: ChannelType2.typename,
|
|
105
111
|
metadata: {
|
|
106
|
-
placeholder: [
|
|
107
|
-
"channel name placeholder",
|
|
108
|
-
{
|
|
109
|
-
ns: THREAD_PLUGIN
|
|
110
|
-
}
|
|
111
|
-
],
|
|
112
112
|
icon: "ph--chat--regular",
|
|
113
113
|
// TODO(wittjosiah): Move out of metadata.
|
|
114
114
|
loadReferences: async (channel) => await RefArray.loadAll(channel.threads ?? [])
|
|
@@ -165,7 +165,15 @@ var ThreadPlugin = () => definePlugin(meta, [
|
|
|
165
165
|
activatesOn: ClientEvents.SetupSchema,
|
|
166
166
|
activate: () => contributes(ClientCapabilities.Schema, [
|
|
167
167
|
ThreadType,
|
|
168
|
-
MessageType
|
|
168
|
+
MessageType,
|
|
169
|
+
MessageTypeV1
|
|
170
|
+
])
|
|
171
|
+
}),
|
|
172
|
+
defineModule({
|
|
173
|
+
id: `${meta.id}/module/migration`,
|
|
174
|
+
activatesOn: ClientEvents.SetupMigration,
|
|
175
|
+
activate: () => contributes(ClientCapabilities.Migration, [
|
|
176
|
+
MessageTypeV1ToV2
|
|
169
177
|
])
|
|
170
178
|
}),
|
|
171
179
|
defineModule({
|
|
@@ -193,22 +201,25 @@ var ThreadPlugin = () => definePlugin(meta, [
|
|
|
193
201
|
}),
|
|
194
202
|
defineModule({
|
|
195
203
|
id: `${meta.id}/module/react-surface`,
|
|
196
|
-
activatesOn:
|
|
204
|
+
activatesOn: Events2.SetupReactSurface,
|
|
197
205
|
// TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.
|
|
198
206
|
activatesBefore: [
|
|
199
|
-
|
|
207
|
+
ThreadEvents2.SetupThread,
|
|
208
|
+
ThreadEvents.SetupActivity
|
|
200
209
|
],
|
|
201
210
|
activate: ReactSurface
|
|
202
211
|
}),
|
|
203
212
|
defineModule({
|
|
204
213
|
id: `${meta.id}/module/intent-resolver`,
|
|
205
|
-
activatesOn:
|
|
214
|
+
activatesOn: Events2.SetupIntentResolver,
|
|
206
215
|
activate: IntentResolver
|
|
207
216
|
})
|
|
208
217
|
]);
|
|
209
218
|
export {
|
|
210
219
|
THREAD_ITEM,
|
|
211
220
|
THREAD_PLUGIN,
|
|
221
|
+
ThreadCapabilities,
|
|
222
|
+
ThreadEvents,
|
|
212
223
|
ThreadPlugin,
|
|
213
224
|
meta,
|
|
214
225
|
useAnalyticsCallback,
|