@dxos/plugin-thread 0.7.5-main.499c70c → 0.7.5-main.6a330ac
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +19 -0
- package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ENERBDYI.mjs → chunk-636QDHE3.mjs} +3 -3
- package/dist/lib/browser/chunk-636QDHE3.mjs.map +7 -0
- package/dist/lib/browser/chunk-BNEWNQBO.mjs +71 -0
- package/dist/lib/browser/chunk-BNEWNQBO.mjs.map +7 -0
- package/dist/lib/browser/chunk-NAO3LZMZ.mjs +16 -0
- package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OD2IZKRP.mjs → chunk-UPKU23DA.mjs} +29 -105
- package/dist/lib/browser/chunk-UPKU23DA.mjs.map +7 -0
- package/dist/lib/browser/chunk-VOMIDDNO.mjs +15 -0
- package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6KTMQPL4.mjs → chunk-YK3ICB7G.mjs} +5 -3
- package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +150 -942
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs +287 -0
- package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs.map +7 -0
- package/dist/lib/browser/markdown-RPYOUBVR.mjs +112 -0
- package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-surface-Y4MUSICN.mjs +433 -0
- package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +7 -0
- package/dist/lib/browser/settings-WQTE5AEZ.mjs +22 -0
- package/dist/lib/browser/settings-WQTE5AEZ.mjs.map +7 -0
- package/dist/lib/browser/state-GNFUURIC.mjs +33 -0
- package/dist/lib/browser/state-GNFUURIC.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +6 -4
- package/dist/lib/node/{ThreadArticle-ZCNMFBAO.cjs → ThreadContainer-LTKKLPXX.cjs} +14 -13
- package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +7 -0
- package/dist/lib/node/chunk-AWSTZ2KN.cjs +93 -0
- package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +7 -0
- package/dist/lib/node/{ThreadMain-5AYGCXXP.cjs → chunk-BHFHFTHO.cjs} +21 -23
- package/dist/lib/node/chunk-BHFHFTHO.cjs.map +7 -0
- package/dist/lib/node/{chunk-VW2P26MZ.cjs → chunk-CMEMMYDL.cjs} +11 -8
- package/dist/lib/node/chunk-CMEMMYDL.cjs.map +7 -0
- package/dist/lib/node/{chunk-IC2NICNC.cjs → chunk-F735VMTN.cjs} +7 -7
- package/dist/lib/node/chunk-F735VMTN.cjs.map +7 -0
- package/dist/lib/node/{meta.cjs → chunk-FPWNZ6TB.cjs} +13 -10
- package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +7 -0
- package/dist/lib/node/{chunk-2CB5AVBL.cjs → chunk-RQR5Z23G.cjs} +74 -151
- package/dist/lib/node/chunk-RQR5Z23G.cjs.map +7 -0
- package/dist/lib/node/index.cjs +149 -935
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/intent-resolver-DVBEXJ33.cjs +299 -0
- package/dist/lib/node/intent-resolver-DVBEXJ33.cjs.map +7 -0
- package/dist/lib/node/markdown-ELRGISXE.cjs +122 -0
- package/dist/lib/node/markdown-ELRGISXE.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react-surface-7HLTN5XS.cjs +435 -0
- package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +7 -0
- package/dist/lib/node/settings-7VQYARM5.cjs +36 -0
- package/dist/lib/node/settings-7VQYARM5.cjs.map +7 -0
- package/dist/lib/node/state-TQWEZ6B3.cjs +49 -0
- package/dist/lib/node/state-TQWEZ6B3.cjs.map +7 -0
- package/dist/lib/node/types.cjs +6 -4
- package/dist/lib/node/types.cjs.map +2 -2
- package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +20 -0
- package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RMYATBXM.mjs → chunk-33NDMQQQ.mjs} +5 -3
- package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AQ74G3GY.mjs → chunk-CISLDOH7.mjs} +29 -105
- package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7QRGG25F.mjs → chunk-FXUATCLW.mjs} +3 -3
- package/dist/lib/node-esm/chunk-FXUATCLW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs +73 -0
- package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +17 -0
- package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZJITX3TO.mjs +17 -0
- package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +150 -942
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs +288 -0
- package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs.map +7 -0
- package/dist/lib/node-esm/markdown-23OB7EZG.mjs +113 -0
- package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs +434 -0
- package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +7 -0
- package/dist/lib/node-esm/settings-SGMM7UDT.mjs +23 -0
- package/dist/lib/node-esm/settings-SGMM7UDT.mjs.map +7 -0
- package/dist/lib/node-esm/state-7MLR27YG.mjs +34 -0
- package/dist/lib/node-esm/state-7MLR27YG.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +6 -4
- package/dist/types/src/ThreadPlugin.d.ts +1 -3
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +15 -0
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +10 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/markdown.d.ts +4 -0
- package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +4 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +4 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +7 -0
- package/dist/types/src/capabilities/state.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 +2 -3
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts +1 -2
- package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts +2 -8
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts +1 -2
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +2 -7
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/ThreadContainer.d.ts +7 -0
- package/dist/types/src/components/ThreadContainer.d.ts.map +1 -0
- package/dist/types/src/components/ThreadSettings.d.ts +1 -2
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/components/command-extension.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -15
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +12 -12
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +5 -5
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +9 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +12 -18
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +31 -38
- package/src/ThreadPlugin.tsx +106 -475
- package/src/capabilities/capabilities.ts +19 -0
- package/src/capabilities/index.ts +13 -0
- package/src/capabilities/intent-resolver.ts +239 -0
- package/src/capabilities/markdown.ts +18 -0
- package/src/capabilities/react-surface.tsx +61 -0
- package/src/capabilities/settings.ts +14 -0
- package/src/capabilities/state.ts +25 -0
- package/src/components/Chat.stories.tsx +22 -24
- package/src/components/ChatContainer.tsx +2 -2
- package/src/components/CommentContainer.tsx +18 -32
- package/src/components/Comments.stories.tsx +8 -2
- package/src/components/CommentsContainer.tsx +1 -17
- package/src/components/MessageContainer.tsx +6 -19
- package/src/components/ThreadComplementary.tsx +118 -51
- package/src/components/ThreadContainer.tsx +22 -0
- package/src/components/ThreadSettings.tsx +5 -11
- package/src/components/command-extension.ts +2 -5
- package/src/components/index.ts +1 -2
- package/src/components/types.ts +5 -5
- package/src/index.ts +1 -5
- package/src/meta.ts +1 -1
- package/src/translations.ts +3 -1
- package/src/types.ts +6 -29
- package/dist/lib/browser/ThreadArticle-EWLTNU6Z.mjs +0 -18
- package/dist/lib/browser/ThreadArticle-EWLTNU6Z.mjs.map +0 -7
- package/dist/lib/browser/ThreadMain-ABEDFWHC.mjs +0 -26
- package/dist/lib/browser/ThreadMain-ABEDFWHC.mjs.map +0 -7
- package/dist/lib/browser/chunk-6KTMQPL4.mjs.map +0 -7
- package/dist/lib/browser/chunk-ENERBDYI.mjs.map +0 -7
- package/dist/lib/browser/chunk-OD2IZKRP.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -11
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/lib/node/ThreadArticle-ZCNMFBAO.cjs.map +0 -7
- package/dist/lib/node/ThreadMain-5AYGCXXP.cjs.map +0 -7
- package/dist/lib/node/chunk-2CB5AVBL.cjs.map +0 -7
- package/dist/lib/node/chunk-IC2NICNC.cjs.map +0 -7
- package/dist/lib/node/chunk-VW2P26MZ.cjs.map +0 -7
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node-esm/ThreadArticle-F37HYTOU.mjs +0 -19
- package/dist/lib/node-esm/ThreadArticle-F37HYTOU.mjs.map +0 -7
- package/dist/lib/node-esm/ThreadMain-OL6ZHNZY.mjs +0 -27
- package/dist/lib/node-esm/ThreadMain-OL6ZHNZY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7QRGG25F.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AQ74G3GY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RMYATBXM.mjs.map +0 -7
- package/dist/lib/node-esm/meta.mjs +0 -12
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/types/src/components/ThreadArticle.d.ts +0 -5
- package/dist/types/src/components/ThreadArticle.d.ts.map +0 -1
- package/dist/types/src/components/ThreadMain.d.ts +0 -7
- package/dist/types/src/components/ThreadMain.d.ts.map +0 -1
- package/src/components/ThreadArticle.tsx +0 -18
- package/src/components/ThreadMain.tsx +0 -27
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/ThreadPlugin.tsx", "../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n createIntent,\n createResolver,\n createSurface,\n type IntentPluginProvides,\n isLayoutParts,\n LayoutAction,\n NavigationAction,\n parseIntentPlugin,\n parseMetadataResolverPlugin,\n parseNavigationPlugin,\n type Plugin,\n type PluginDefinition,\n resolvePlugin,\n} from '@dxos/app-framework';\nimport { type UnsubscribeCallback } from '@dxos/async';\nimport { Ref } from '@dxos/echo-schema';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\nimport { parseClientPlugin } from '@dxos/plugin-client/types';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { ChannelType, MessageType, ThreadType } from '@dxos/plugin-space/types';\nimport {\n create,\n fullyQualifiedId,\n getSpace,\n getTypename,\n makeRef,\n parseId,\n type ReactiveEchoObject,\n RefArray,\n SpaceState,\n} from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\n\nimport { ThreadArticle, ThreadComplementary, ThreadSettings } from './components';\nimport { threads } from './extensions';\nimport meta, { THREAD_ITEM, THREAD_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ThreadAction, type ThreadPluginProvides, type ThreadSettingsProps, type ThreadState } from './types';\n\ntype SubjectId = string;\n\nconst initialViewState = { showResolvedThreads: false };\n\ntype ViewStore = Record<SubjectId, typeof initialViewState>;\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = (): PluginDefinition<\n Omit<ThreadPluginProvides, 'echo'>,\n Pick<ThreadPluginProvides, 'echo'>\n> => {\n const settings = new LocalStorageStore<ThreadSettingsProps>(THREAD_PLUGIN);\n const state = create<ThreadState>({ drafts: {} });\n\n const viewStore = create<ViewStore>({});\n const getViewState = (subjectId: string) => {\n if (!viewStore[subjectId]) {\n viewStore[subjectId] = { ...initialViewState };\n }\n return viewStore[subjectId];\n };\n\n let intentPlugin: Plugin<IntentPluginProvides> | undefined;\n\n const unsubscribeCallbacks = [] as UnsubscribeCallback[];\n\n return {\n meta,\n initialize: async () => {\n settings.prop({ key: 'standalone', type: LocalStorageStore.bool({ allowUndefined: true }) });\n\n return {\n echo: {\n system: [ThreadType, MessageType],\n // TODO(wittjosiah): Requires reload.\n ...(settings.values.standalone ? { schema: [ChannelType] } : {}),\n },\n };\n },\n ready: async ({ plugins }) => {\n intentPlugin = resolvePlugin(plugins, parseIntentPlugin)!;\n },\n unload: async () => {\n unsubscribeCallbacks.forEach((unsubscribe) => unsubscribe());\n },\n provides: {\n settings: settings.values,\n metadata: {\n records: {\n [ChannelType.typename]: {\n createObject: (props: { name?: string }) => createIntent(ThreadAction.Create, props),\n placeholder: ['channel name placeholder', { ns: THREAD_PLUGIN }],\n icon: 'ph--chat--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (channel: ChannelType) => await RefArray.loadAll(channel.threads ?? []),\n },\n [ThreadType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n [MessageType.typename]: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n [THREAD_ITEM]: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n },\n },\n translations: [...translations, ...threadTranslations],\n complementary: {\n panels: [\n {\n id: 'comments',\n label: ['open comments panel label', { ns: THREAD_PLUGIN }],\n icon: 'ph--chat-text--regular',\n },\n ],\n },\n graph: {\n builder: (plugins) => {\n const client = resolvePlugin(plugins, parseClientPlugin)?.provides.client;\n const dispatch = resolvePlugin(plugins, parseIntentPlugin)?.provides.intent.dispatchPromise;\n const metadataResolver = resolvePlugin(plugins, parseMetadataResolverPlugin)?.provides.metadata.resolver;\n if (!client || !dispatch || !metadataResolver) {\n return [];\n }\n\n const type = 'orphan-comments-for-subject';\n const icon = 'ph--chat-text--regular';\n\n return [\n createExtension({\n id: `${THREAD_PLUGIN}/comments-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~comments')) {\n return;\n }\n\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find(\n (space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY,\n );\n if (!objectId) {\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label: ['unnamed object threads label', { ns: THREAD_PLUGIN }],\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = metadataResolver(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object threads label', { ns: THREAD_PLUGIN }];\n\n const viewState = getViewState(subjectId);\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: viewState.showResolvedThreads,\n object,\n },\n };\n },\n actions: ({ node }) => {\n const dataId = node.id.split('~').at(0);\n if (!node.id.endsWith('~comments') || !dataId) {\n return;\n }\n\n const [spaceId, objectId] = dataId.split(':');\n\n const viewState = getViewState(dataId);\n const toggle = async () => {\n const newToggleState = !viewState.showResolvedThreads;\n viewState.showResolvedThreads = newToggleState;\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-show-resolved',\n properties: { spaceId, threadId: objectId, showResolved: newToggleState },\n }),\n );\n };\n\n return [\n {\n id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,\n data: toggle,\n properties: {\n label: ['toggle show resolved', { ns: THREAD_PLUGIN }],\n menuItemType: 'toggle',\n isChecked: viewState.showResolvedThreads,\n testId: 'threadPlugin.toggleShowResolved',\n icon: viewState.showResolvedThreads ? 'ph--eye-slash--regular' : 'ph--eye--regular',\n },\n },\n ];\n },\n }),\n ];\n },\n },\n surface: {\n definitions: ({ plugins }) => {\n const location = resolvePlugin(plugins, parseNavigationPlugin)?.provides.location;\n return [\n createSurface({\n id: `${THREAD_PLUGIN}/channel`,\n role: 'article',\n filter: (data): data is { subject: ChannelType } =>\n data.subject instanceof ChannelType && !!data.subject.threads[0],\n component: ({ data }) => {\n const channel = data.subject;\n const thread = channel.threads[0].target!;\n // TODO(zan): Maybe we should have utility for positional main object ids.\n if (isLayoutParts(location?.active) && location.active.main) {\n const layoutEntries = location.active.main;\n const currentPosition = layoutEntries.findIndex((entry) => channel.id === entry.id);\n if (currentPosition > 0) {\n const objectToTheLeft = layoutEntries[currentPosition - 1];\n const context = getSpace(channel)?.db.getObjectById(objectToTheLeft.id);\n return <ThreadArticle thread={thread} context={context} />;\n }\n }\n\n return <ThreadArticle thread={thread} />;\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/thread`,\n role: 'complementary--comments',\n filter: (data): data is { subject: { threads: Ref<ThreadType>[] } } =>\n !!data.subject &&\n typeof data.subject === 'object' &&\n 'threads' in data.subject &&\n Array.isArray(data.subject.threads) &&\n !(data.subject instanceof ChannelType),\n component: ({ data }) => {\n const { showResolvedThreads } = getViewState(fullyQualifiedId(data.subject));\n return (\n <ThreadComplementary\n subject={data.subject}\n drafts={state.drafts[fullyQualifiedId(data.subject)]}\n current={state.current}\n showResolvedThreads={showResolvedThreads}\n />\n );\n },\n }),\n createSurface({\n id: `${THREAD_PLUGIN}/settings`,\n role: 'settings',\n filter: (data): data is any => data.plugin === THREAD_PLUGIN,\n component: () => <ThreadSettings settings={settings.values} />,\n }),\n ];\n },\n },\n intent: {\n resolvers: () => [\n createResolver(ThreadAction.Create, ({ name, cursor, subject }) => {\n if (cursor && subject) {\n // Seed the threads array if it does not exist.\n if (subject?.threads === undefined) {\n try {\n // Static schema will throw an error if subject does not support threads array property.\n subject.threads = [];\n } catch (err) {\n log.error('Subject does not support threads array', subject?.typename);\n return;\n }\n }\n\n const subjectId = fullyQualifiedId(subject);\n const thread = create(ThreadType, { name, anchor: cursor, messages: [], status: 'staged' });\n const draft = state.drafts[subjectId];\n if (draft) {\n draft.push(thread);\n } else {\n state.drafts[subjectId] = [thread];\n }\n\n return {\n data: { object: thread },\n intents: [\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),\n createIntent(NavigationAction.Open, { activeParts: { complementary: 'comments' } }),\n createIntent(LayoutAction.SetLayout, { element: 'complementary', state: true }),\n ],\n };\n } else {\n // NOTE: This is the standalone thread creation case.\n return {\n data: { object: create(ChannelType, { threads: [makeRef(create(ThreadType, { messages: [] }))] }) },\n };\n }\n }),\n createResolver(ThreadAction.Select, ({ current, skipOpen }) => {\n state.current = current;\n\n return {\n intents: !skipOpen\n ? [createIntent(NavigationAction.Open, { activeParts: { complementary: 'comments' } })]\n : undefined,\n };\n }),\n createResolver(ThreadAction.ToggleResolved, ({ thread }) => {\n if (thread.status === 'active' || thread.status === undefined) {\n thread.status = 'resolved';\n } else if (thread.status === 'resolved') {\n thread.status = 'active';\n }\n\n const space = getSpace(thread);\n const spaceId = space?.id;\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-resolved',\n properties: { threadId: thread.id, spaceId },\n }),\n ],\n };\n }),\n createResolver(ThreadAction.Delete, ({ subject, thread }, undo) => {\n const subjectId = fullyQualifiedId(subject);\n const draft = state.drafts[subjectId];\n if (draft) {\n // Check if we're deleting a draft; if so, remove it.\n const index = draft.findIndex((t) => t.id === thread.id);\n if (index !== -1) {\n draft.splice(index, 1);\n return;\n }\n }\n\n const space = getSpace(thread);\n if (!space || !subject.threads) {\n return;\n }\n\n if (!undo) {\n const index = subject.threads.findIndex((t: any) => t?.id === thread.id);\n const cursor = subject.threads[index]?.anchor;\n if (index !== -1) {\n subject.threads?.splice(index, 1);\n }\n\n space.db.remove(thread);\n\n return {\n undoable: {\n message: ['thread deleted label', { ns: THREAD_PLUGIN }],\n data: { cursor },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.delete',\n properties: { threadId: thread.id, spaceId: space.id },\n }),\n ],\n };\n } else {\n // TODO(wittjosiah): SDK should do this automatically.\n const savedThread = space.db.add(thread);\n subject.threads.push(savedThread);\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.undo-delete',\n properties: { threadId: thread.id, spaceId: space.id },\n }),\n ],\n };\n }\n }),\n createResolver(ThreadAction.OnMessageAdd, ({ thread, subject }) => {\n const subjectId = fullyQualifiedId(subject);\n const space = getSpace(subject);\n const intents = [];\n const analyticsProperties = { threadId: thread.id, spaceId: space?.id };\n\n if (state.drafts[subjectId]?.find((t) => t === thread)) {\n // Move draft to document.\n thread.status = 'active';\n subject.threads ? subject.threads.push(makeRef(thread)) : (subject.threads = [makeRef(thread)]);\n state.drafts[subjectId] = state.drafts[subjectId]?.filter(({ id }) => id !== thread.id);\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.thread-created',\n properties: analyticsProperties,\n }),\n );\n }\n\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message-added',\n properties: { ...analyticsProperties, threadLength: thread.messages.length },\n }),\n );\n\n return { intents };\n }),\n createResolver(ThreadAction.DeleteMessage, ({ subject, thread, messageId, message, messageIndex }, undo) => {\n const space = getSpace(subject);\n\n if (!undo) {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));\n const message = thread.messages[messageIndex]?.target;\n if (!message) {\n return;\n }\n\n if (messageIndex === 0 && thread.messages.length === 1) {\n // If the message is the only message in the thread, delete the thread.\n return {\n intents: [createIntent(ThreadAction.Delete, { subject, thread })],\n };\n } else {\n thread.messages.splice(messageIndex, 1);\n }\n\n return {\n undoable: {\n message: ['message deleted label', { ns: THREAD_PLUGIN }],\n data: { message, messageIndex },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.delete',\n properties: { threadId: thread.id, spaceId: space?.id },\n }),\n ],\n };\n } else {\n if (!messageIndex || !message) {\n return;\n }\n\n thread.messages.splice(messageIndex, 0, makeRef(message));\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.undo-delete',\n properties: { threadId: thread.id, spaceId: space?.id },\n }),\n ],\n };\n }\n }),\n ],\n },\n markdown: {\n extensions: ({ document: doc }) => {\n return threads(state, doc, intentPlugin?.provides.intent.dispatchPromise);\n },\n },\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const ThreadMain = lazy(() => import('./ThreadMain'));\nexport const ThreadArticle = lazy(() => import('./ThreadArticle'));\n\n// TODO(wittjosiah): Suspense boundary for sidebar?\nexport * from './CommentContainer';\nexport * from './CommentsContainer';\nexport * from './ChatContainer';\nexport * from './MessageContainer';\nexport * from './ThreadComplementary';\nexport * from './ThreadSettings';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, X } from '@phosphor-icons/react';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { create, makeRef, RefArray } from '@dxos/live-object';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Button, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, ThreadHeading } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nconst sizeClass = getSize(4);\n\n// TODO(thure): #8149\nconst commentControlClassNames = '!p-1 !min-bs-0 transition-opacity';\n\nconst ToggleResolvedButton = ({\n isResolved,\n onResolve,\n}: {\n isResolved: boolean | undefined;\n onResolve: () => void;\n}) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.toggle-resolved'\n onClick={onResolve}\n classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n {isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {label}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nconst DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t('delete thread label');\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.delete'\n onClick={onDelete}\n classNames={[commentControlClassNames, hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n <X className={sizeClass} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-30'>\n {label}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\nexport const CommentContainer = ({\n thread,\n detached,\n context,\n current,\n onAttend,\n onThreadDelete,\n onMessageDelete,\n onResolve,\n onComment,\n}: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\n const { t } = useTranslation(THREAD_PLUGIN);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: (text) => (messageRef.current = text) }),\n command,\n ],\n [_count],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleCreate: MessageTextboxProps['onSend'] = useCallback(() => {\n if (!messageRef.current) {\n return false;\n }\n\n thread.messages.push(\n makeRef(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context: context ? makeRef(context) : undefined,\n }),\n ),\n );\n onComment?.(thread);\n\n messageRef.current = '';\n scrollToEnd('instant');\n rerenderEditor();\n\n // TODO(burdon): Scroll to bottom.\n return true;\n }, [thread, identity]);\n\n return (\n <Thread onClickCapture={onAttend} onFocusCapture={onAttend} current={current} id={fullyQualifiedId(thread)}>\n <div\n role='none'\n className={mx(\n 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <ThreadHeading detached>{thread.name}</ThreadHeading>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-30' side='top'>\n {t('detached thread label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : (\n <ThreadHeading>{thread.name}</ThreadHeading>\n )}\n <div className='flex flex-row items-center pli-1'>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <ToggleResolvedButton isResolved={thread?.status === 'resolved'} onResolve={onResolve} />\n )}\n {onThreadDelete && <DeleteThreadButton onDelete={onThreadDelete} />}\n </div>\n </div>\n {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}\n {RefArray.allResolvedTargets(thread.messages?.filter(nonNullable) ?? []).map((message) => (\n <MessageContainer\n key={message.id}\n message={message}\n members={members}\n onDelete={(id: string) => onMessageDelete?.(id)}\n />\n ))}\n {/*\n TODO(wittjosiah): Can't autofocus this generally.\n There can be multiple threads with inputs and they can't all be focused.\n Also, it steals focus from documents when first rendered.\n Need to find a way to autofocus in one scenario only: when a new thread is created.\n */}\n <MessageTextbox extensions={extensions} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ChatText } from '@phosphor-icons/react';\nimport React, { useEffect } from 'react';\n\nimport { type ThreadType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useTranslation, Trans } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { CommentContainer } from './CommentContainer';\nimport { type ThreadContainerProps } from './types';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport type ThreadsContainerProps = Omit<\n ThreadContainerProps,\n 'thread' | 'detached' | 'onAttend' | 'onThreadDelete' | 'onMessageDelete' | 'current' | 'autoFocus'\n> & {\n threads: ThreadType[];\n /**\n * Threads that are no longer anchored to a position in the object.\n */\n detached?: string[];\n currentId?: string;\n showResolvedThreads?: boolean;\n onThreadAttend?: (thread: ThreadType) => void;\n onThreadDelete?: (thread: ThreadType) => void;\n onMessageDelete?: (thread: ThreadType, messageId: string) => void;\n onThreadToggleResolved?: (thread: ThreadType) => void;\n onComment?: (thread: ThreadType) => void;\n};\n\n/**\n * Comment threads.\n */\nexport const CommentsContainer = ({\n threads,\n detached = [],\n currentId,\n showResolvedThreads,\n onThreadAttend,\n onThreadDelete,\n onMessageDelete,\n onThreadToggleResolved,\n ...props\n}: ThreadsContainerProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const filteredThreads = showResolvedThreads ? threads : threads.filter((thread) => !(thread?.status === 'resolved'));\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n return (\n <>\n {filteredThreads.length > 0 ? (\n filteredThreads.map((thread) => {\n const threadId = fullyQualifiedId(thread);\n return (\n <CommentContainer\n key={threadId}\n thread={thread}\n current={currentId === threadId}\n detached={detached.includes(threadId)}\n {...(onThreadAttend && { onAttend: () => onThreadAttend(thread) })}\n {...(onThreadDelete && { onThreadDelete: () => onThreadDelete(thread) })}\n {...(onMessageDelete && { onMessageDelete: (messageId: string) => onMessageDelete(thread, messageId) })}\n {...(onThreadToggleResolved && { onResolve: () => onThreadToggleResolved(thread) })}\n {...props}\n />\n );\n })\n ) : (\n <div\n role='alert'\n className={mx(\n descriptionText,\n 'place-self-center border border-dashed border-unAccent rounded-lg text-center p-4 m-4',\n )}\n >\n <h2 className='mbe-2 font-medium text-baseText'>{t('no comments title')}</h2>\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'no comments message',\n components: {\n commentIcon: <ChatText className='inline-block' />,\n },\n }}\n />\n </p>\n </div>\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useMemo } from 'react';\n\nimport { createIntent, LayoutAction, type Plugin, useIntentDispatcher, useResolvePlugins } from '@dxos/app-framework';\nimport { type ThreadType } from '@dxos/plugin-space';\nimport { fullyQualifiedId, RefArray } from '@dxos/react-client/echo';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport { CommentsContainer } from '../components';\nimport { ThreadAction, type ThreadProvides } from '../types';\n\nconst providesThreadsConfig = (plugin: any): Plugin<ThreadProvides<any>> | undefined =>\n 'thread' in plugin.provides ? (plugin as Plugin<ThreadProvides<any>>) : undefined;\n\nexport const ThreadComplementary = ({\n subject,\n drafts,\n current,\n showResolvedThreads,\n}: {\n subject: any;\n drafts: ThreadType[] | undefined;\n current?: string;\n showResolvedThreads?: boolean;\n}) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const threadsIntegrators = useResolvePlugins(providesThreadsConfig);\n const threadProvides = useMemo(() => threadsIntegrators.map((p) => p.provides.thread), [threadsIntegrators]);\n const createSort = useMemo(\n () => threadProvides.find((p) => p.predicate(subject))?.createSort,\n [threadProvides, subject],\n );\n const sort = useMemo(() => createSort?.(subject), [createSort, subject]);\n\n const threadObjects = RefArray.allResolvedTargets(subject.threads ?? []);\n\n const threads = useMemo(() => {\n return threadObjects.concat(drafts ?? []).filter(nonNullable) as ThreadType[];\n }, [JSON.stringify(threadObjects), JSON.stringify(drafts)]);\n\n const detachedIds = useMemo(() => {\n return threads.filter(({ anchor }) => !anchor).map((thread) => fullyQualifiedId(thread));\n }, [threads]);\n\n useEffect(() => {\n if (!sort) {\n return;\n }\n threads.sort((a, b) => sort(a?.anchor, b?.anchor));\n }, [sort, threads]);\n\n const attended = useAttended();\n const qualifiedSubjectId = fullyQualifiedId(subject);\n\n return (\n <CommentsContainer\n threads={threads}\n detached={detachedIds}\n currentId={attended.includes(qualifiedSubjectId) ? current : undefined}\n showResolvedThreads={showResolvedThreads}\n onThreadAttend={(thread) => {\n const threadId = fullyQualifiedId(thread);\n if (current !== threadId) {\n current = threadId;\n\n // TODO(wittjosiah): Should this be a thread-specific intent?\n // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.\n // This may be overloading this intent or highjacking its intended purpose.\n void dispatch?.(\n createIntent(LayoutAction.ScrollIntoView, {\n id: fullyQualifiedId(subject),\n cursor: thread.anchor,\n ref: threadId,\n }),\n );\n }\n }}\n onThreadDelete={(thread) => dispatch(createIntent(ThreadAction.Delete, { thread, subject }))}\n onMessageDelete={(thread, messageId) =>\n dispatch(createIntent(ThreadAction.DeleteMessage, { thread, subject, messageId }))\n }\n onThreadToggleResolved={(thread) => dispatch(createIntent(ThreadAction.ToggleResolved, { thread }))}\n onComment={(thread) => dispatch(createIntent(ThreadAction.OnMessageAdd, { thread, subject }))}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport type { ThreadSettingsProps } from '../types';\n\nexport const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n\n return (\n <>\n <DeprecatedFormInput label={t('settings standalone label')}>\n <Input.Switch checked={settings.standalone} onCheckedChange={(checked) => (settings.standalone = !!checked)} />\n </DeprecatedFormInput>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { computed, effect } from '@preact/signals-core';\n\nimport { createIntent, type PromiseIntentDispatcher } from '@dxos/app-framework';\nimport { Ref } from '@dxos/echo-schema';\nimport { RefArray } from '@dxos/live-object';\nimport { type DocumentType } from '@dxos/plugin-markdown/types';\nimport { ThreadType } from '@dxos/plugin-space/types';\nimport { getSpace, getTextInRange, createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { comments, createExternalCommentSync } from '@dxos/react-ui-editor';\n\nimport { ThreadAction, type ThreadState } from '../types';\n\n// TODO(burdon): Factor out.\nconst getName = (doc: DocumentType, anchor: string): string | undefined => {\n if (doc.content) {\n const [start, end] = anchor.split(':');\n return getTextInRange(createDocAccessor(doc.content.target!, ['content']), start, end);\n }\n};\n\n/**\n * Construct plugins.\n */\nexport const threads = (state: ThreadState, doc?: DocumentType, dispatch?: PromiseIntentDispatcher): Extension => {\n const space = doc && getSpace(doc);\n if (!doc || !space || !dispatch) {\n // Include no-op comments extension here to ensure that the facets are always present when they are expected.\n // TODO(wittjosiah): The Editor should only look for these facets when comments are available.\n return [comments()];\n }\n\n // TODO(Zan): When we have the deepsignal specific equivalent of this we should use that instead.\n const threads = computed(() =>\n [...RefArray.allResolvedTargets(doc.threads), ...(state.drafts[fullyQualifiedId(doc)] ?? [])].filter(\n (thread) => !(thread?.status === 'resolved'),\n ),\n );\n\n return [\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n RefArray.allResolvedTargets(doc.threads).forEach((thread) => {\n if (thread.anchor) {\n // Only update if the name has changed, otherwise this will cause an infinite loop.\n // Skip if the name is empty; this means comment text was deleted, but thread name should remain.\n const name = getName(doc, thread.anchor);\n if (name && name !== thread.name) {\n thread.name = name;\n }\n }\n });\n }\n }),\n\n createExternalCommentSync(\n fullyQualifiedId(doc),\n (sink) => effect(() => sink()),\n () =>\n threads.value\n .filter((thread) => thread?.anchor)\n .map((thread) => ({ id: fullyQualifiedId(thread), cursor: thread.anchor! })),\n ),\n\n comments({\n id: fullyQualifiedId(doc),\n onCreate: ({ cursor }) => {\n const name = getName(doc, cursor);\n void dispatch(createIntent(ThreadAction.Create, { cursor, name, subject: doc }));\n },\n onDelete: ({ id }) => {\n const draft = state.drafts[fullyQualifiedId(doc)];\n if (draft) {\n const index = draft.findIndex((thread) => fullyQualifiedId(thread) === id);\n if (index !== -1) {\n draft.splice(index, 1);\n }\n }\n\n const thread = doc.threads.find(Ref.hasObjectId(id))?.target;\n if (thread) {\n thread.anchor = undefined;\n }\n },\n onUpdate: ({ id, cursor }) => {\n const thread =\n state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id) ??\n doc.threads.find(Ref.hasObjectId(id))?.target;\n\n if (thread instanceof ThreadType && thread.anchor) {\n thread.name = getName(doc, thread.anchor);\n thread.anchor = cursor;\n }\n },\n onSelect: ({ selection }) => {\n const current = selection.current ?? selection.closest;\n if (current) {\n void dispatch(createIntent(ThreadAction.Select, { current, skipOpen: true }));\n }\n },\n }),\n ];\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel name placeholder': 'New channel',\n 'channel title label': 'Title',\n 'delete channel label': 'Delete channel',\n 'create channel label': 'Create channel',\n 'message placeholder': 'Reply…',\n 'settings standalone label': 'Enable channel creation (experimental)',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ThreadPlugin } from './ThreadPlugin';\n\nexport default ThreadPlugin;\n\nexport * from './hooks';\nexport * from './types';\n\nexport * from './ThreadPlugin';\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_types", "
|
|
3
|
+
"sources": ["../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, MessageType, ThreadType } from '@dxos/plugin-space/types';\nimport { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\n\nimport { IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { meta, THREAD_ITEM, THREAD_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n placeholder: ['channel name placeholder', { ns: THREAD_PLUGIN }],\n icon: 'ph--chat--regular',\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (channel: ChannelType) => await RefArray.loadAll(channel.threads ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: MessageType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: () => createIntent(ThreadAction.Create),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType]),\n }),\n defineModule({\n id: `${meta.id}/module/complementary-panel`,\n activatesOn: DeckEvents.SetupComplementaryPanels,\n activate: () =>\n contributes(DeckCapabilities.ComplementaryPanel, {\n id: 'comments',\n label: ['comments panel label', { ns: THREAD_PLUGIN }],\n icon: 'ph--chat-text--regular',\n position: 'hoist',\n // TODO(wittjosiah): Support comments on any object.\n // filter: (node) => isEchoObject(node.data) && !!getSpace(node.data),\n filter: (node) =>\n !!node.data &&\n typeof node.data === 'object' &&\n 'threads' in node.data &&\n Array.isArray(node.data.threads) &&\n !(node.data instanceof ChannelType),\n }),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel name placeholder': 'New channel',\n 'channel title label': 'Title',\n 'delete channel label': 'Delete channel',\n 'create channel label': 'Create channel',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments panel label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_types", "ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "metadata", "placeholder", "ns", "icon", "loadReferences", "channel", "RefArray", "loadAll", "threads", "ThreadType", "thread", "messages", "MessageType", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "createIntent", "ThreadAction", "Create", "ClientCapabilities", "Schema", "DeckEvents", "SetupComplementaryPanels", "DeckCapabilities", "ComplementaryPanel", "position", "filter", "node", "Array", "isArray", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "ThreadEvents", "SetupThread", "ReactSurface", "SetupIntentResolver", "IntentResolver"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var intent_resolver_DVBEXJ33_exports = {};
|
|
20
|
+
__export(intent_resolver_DVBEXJ33_exports, {
|
|
21
|
+
default: () => intent_resolver_default
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(intent_resolver_DVBEXJ33_exports);
|
|
24
|
+
var import_chunk_CMEMMYDL = require("./chunk-CMEMMYDL.cjs");
|
|
25
|
+
var import_chunk_FPWNZ6TB = require("./chunk-FPWNZ6TB.cjs");
|
|
26
|
+
var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
|
|
27
|
+
var import_app_framework = require("@dxos/app-framework");
|
|
28
|
+
var import_echo_schema = require("@dxos/echo-schema");
|
|
29
|
+
var import_log = require("@dxos/log");
|
|
30
|
+
var import_types = require("@dxos/plugin-observability/types");
|
|
31
|
+
var import_types2 = require("@dxos/plugin-space/types");
|
|
32
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
33
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/capabilities/intent-resolver.ts";
|
|
34
|
+
var intent_resolver_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, [
|
|
35
|
+
(0, import_app_framework.createResolver)({
|
|
36
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.Create,
|
|
37
|
+
resolve: ({ name, cursor, subject }) => {
|
|
38
|
+
if (cursor && subject) {
|
|
39
|
+
if (subject?.threads === void 0) {
|
|
40
|
+
try {
|
|
41
|
+
subject.threads = [];
|
|
42
|
+
} catch (err) {
|
|
43
|
+
import_log.log.error("Subject does not support threads array", {
|
|
44
|
+
typename: subject?.typename
|
|
45
|
+
}, {
|
|
46
|
+
F: __dxlog_file,
|
|
47
|
+
L: 35,
|
|
48
|
+
S: void 0,
|
|
49
|
+
C: (f, a) => f(...a)
|
|
50
|
+
});
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const { state } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.MutableState);
|
|
55
|
+
const subjectId = (0, import_echo.fullyQualifiedId)(subject);
|
|
56
|
+
const thread = (0, import_echo.create)(import_types2.ThreadType, {
|
|
57
|
+
name,
|
|
58
|
+
anchor: cursor,
|
|
59
|
+
messages: [],
|
|
60
|
+
status: "staged"
|
|
61
|
+
});
|
|
62
|
+
const draft = state.drafts[subjectId];
|
|
63
|
+
if (draft) {
|
|
64
|
+
draft.push(thread);
|
|
65
|
+
} else {
|
|
66
|
+
state.drafts[subjectId] = [
|
|
67
|
+
thread
|
|
68
|
+
];
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
data: {
|
|
72
|
+
object: thread
|
|
73
|
+
},
|
|
74
|
+
intents: [
|
|
75
|
+
(0, import_app_framework.createIntent)(import_chunk_CMEMMYDL.ThreadAction.Select, {
|
|
76
|
+
current: (0, import_echo.fullyQualifiedId)(thread)
|
|
77
|
+
}),
|
|
78
|
+
(0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdateComplementary, {
|
|
79
|
+
part: "complementary",
|
|
80
|
+
subject: "comments"
|
|
81
|
+
})
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
} else {
|
|
85
|
+
return {
|
|
86
|
+
data: {
|
|
87
|
+
object: (0, import_echo.create)(import_types2.ChannelType, {
|
|
88
|
+
threads: [
|
|
89
|
+
(0, import_echo.makeRef)((0, import_echo.create)(import_types2.ThreadType, {
|
|
90
|
+
messages: []
|
|
91
|
+
}))
|
|
92
|
+
]
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
(0, import_app_framework.createResolver)({
|
|
100
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.Select,
|
|
101
|
+
resolve: ({ current, skipOpen }) => {
|
|
102
|
+
const { state } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.MutableState);
|
|
103
|
+
state.current = current;
|
|
104
|
+
return {
|
|
105
|
+
intents: !skipOpen ? [
|
|
106
|
+
(0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdateComplementary, {
|
|
107
|
+
part: "complementary",
|
|
108
|
+
subject: "comments"
|
|
109
|
+
})
|
|
110
|
+
] : void 0
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}),
|
|
114
|
+
(0, import_app_framework.createResolver)({
|
|
115
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.ToggleResolved,
|
|
116
|
+
resolve: ({ thread }) => {
|
|
117
|
+
if (thread.status === "active" || thread.status === void 0) {
|
|
118
|
+
thread.status = "resolved";
|
|
119
|
+
} else if (thread.status === "resolved") {
|
|
120
|
+
thread.status = "active";
|
|
121
|
+
}
|
|
122
|
+
const space = (0, import_echo.getSpace)(thread);
|
|
123
|
+
const spaceId = space?.id;
|
|
124
|
+
return {
|
|
125
|
+
intents: [
|
|
126
|
+
(0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
127
|
+
name: "threads.toggle-resolved",
|
|
128
|
+
properties: {
|
|
129
|
+
threadId: thread.id,
|
|
130
|
+
spaceId
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
]
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}),
|
|
137
|
+
(0, import_app_framework.createResolver)({
|
|
138
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.Delete,
|
|
139
|
+
resolve: ({ subject, thread }, undo) => {
|
|
140
|
+
const { state } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.MutableState);
|
|
141
|
+
const subjectId = (0, import_echo.fullyQualifiedId)(subject);
|
|
142
|
+
const draft = state.drafts[subjectId];
|
|
143
|
+
if (draft) {
|
|
144
|
+
const index = draft.findIndex((t) => t.id === thread.id);
|
|
145
|
+
if (index !== -1) {
|
|
146
|
+
draft.splice(index, 1);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const space = (0, import_echo.getSpace)(thread);
|
|
151
|
+
if (!space || !subject.threads) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (!undo) {
|
|
155
|
+
const index = subject.threads.findIndex((t) => t?.id === thread.id);
|
|
156
|
+
const cursor = subject.threads[index]?.anchor;
|
|
157
|
+
if (index !== -1) {
|
|
158
|
+
subject.threads?.splice(index, 1);
|
|
159
|
+
}
|
|
160
|
+
space.db.remove(thread);
|
|
161
|
+
return {
|
|
162
|
+
undoable: {
|
|
163
|
+
message: [
|
|
164
|
+
"thread deleted label",
|
|
165
|
+
{
|
|
166
|
+
ns: import_chunk_F735VMTN.THREAD_PLUGIN
|
|
167
|
+
}
|
|
168
|
+
],
|
|
169
|
+
data: {
|
|
170
|
+
cursor
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
intents: [
|
|
174
|
+
(0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
175
|
+
name: "threads.delete",
|
|
176
|
+
properties: {
|
|
177
|
+
threadId: thread.id,
|
|
178
|
+
spaceId: space.id
|
|
179
|
+
}
|
|
180
|
+
})
|
|
181
|
+
]
|
|
182
|
+
};
|
|
183
|
+
} else {
|
|
184
|
+
const savedThread = space.db.add(thread);
|
|
185
|
+
subject.threads.push(savedThread);
|
|
186
|
+
return {
|
|
187
|
+
intents: [
|
|
188
|
+
(0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
189
|
+
name: "threads.undo-delete",
|
|
190
|
+
properties: {
|
|
191
|
+
threadId: thread.id,
|
|
192
|
+
spaceId: space.id
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
]
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}),
|
|
200
|
+
(0, import_app_framework.createResolver)({
|
|
201
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.OnMessageAdd,
|
|
202
|
+
resolve: ({ thread, subject }) => {
|
|
203
|
+
const { state } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.MutableState);
|
|
204
|
+
const subjectId = (0, import_echo.fullyQualifiedId)(subject);
|
|
205
|
+
const space = (0, import_echo.getSpace)(subject);
|
|
206
|
+
const intents = [];
|
|
207
|
+
const analyticsProperties = {
|
|
208
|
+
threadId: thread.id,
|
|
209
|
+
spaceId: space?.id
|
|
210
|
+
};
|
|
211
|
+
if (state.drafts[subjectId]?.find((t) => t === thread)) {
|
|
212
|
+
thread.status = "active";
|
|
213
|
+
subject.threads ? subject.threads.push((0, import_echo.makeRef)(thread)) : subject.threads = [
|
|
214
|
+
(0, import_echo.makeRef)(thread)
|
|
215
|
+
];
|
|
216
|
+
state.drafts[subjectId] = state.drafts[subjectId]?.filter(({ id }) => id !== thread.id);
|
|
217
|
+
intents.push((0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
218
|
+
name: "threads.thread-created",
|
|
219
|
+
properties: analyticsProperties
|
|
220
|
+
}));
|
|
221
|
+
}
|
|
222
|
+
intents.push((0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
223
|
+
name: "threads.message-added",
|
|
224
|
+
properties: {
|
|
225
|
+
...analyticsProperties,
|
|
226
|
+
threadLength: thread.messages.length
|
|
227
|
+
}
|
|
228
|
+
}));
|
|
229
|
+
return {
|
|
230
|
+
intents
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}),
|
|
234
|
+
(0, import_app_framework.createResolver)({
|
|
235
|
+
intent: import_chunk_CMEMMYDL.ThreadAction.DeleteMessage,
|
|
236
|
+
resolve: ({ subject, thread, messageId, message, messageIndex }, undo) => {
|
|
237
|
+
const space = (0, import_echo.getSpace)(subject);
|
|
238
|
+
if (!undo) {
|
|
239
|
+
const messageIndex2 = thread.messages.findIndex(import_echo_schema.Ref.hasObjectId(messageId));
|
|
240
|
+
const message2 = thread.messages[messageIndex2]?.target;
|
|
241
|
+
if (!message2) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (messageIndex2 === 0 && thread.messages.length === 1) {
|
|
245
|
+
return {
|
|
246
|
+
intents: [
|
|
247
|
+
(0, import_app_framework.createIntent)(import_chunk_CMEMMYDL.ThreadAction.Delete, {
|
|
248
|
+
subject,
|
|
249
|
+
thread
|
|
250
|
+
})
|
|
251
|
+
]
|
|
252
|
+
};
|
|
253
|
+
} else {
|
|
254
|
+
thread.messages.splice(messageIndex2, 1);
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
undoable: {
|
|
258
|
+
message: [
|
|
259
|
+
"message deleted label",
|
|
260
|
+
{
|
|
261
|
+
ns: import_chunk_F735VMTN.THREAD_PLUGIN
|
|
262
|
+
}
|
|
263
|
+
],
|
|
264
|
+
data: {
|
|
265
|
+
message: message2,
|
|
266
|
+
messageIndex: messageIndex2
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
intents: [
|
|
270
|
+
(0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
271
|
+
name: "threads.message.delete",
|
|
272
|
+
properties: {
|
|
273
|
+
threadId: thread.id,
|
|
274
|
+
spaceId: space?.id
|
|
275
|
+
}
|
|
276
|
+
})
|
|
277
|
+
]
|
|
278
|
+
};
|
|
279
|
+
} else {
|
|
280
|
+
if (!messageIndex || !message) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
thread.messages.splice(messageIndex, 0, (0, import_echo.makeRef)(message));
|
|
284
|
+
return {
|
|
285
|
+
intents: [
|
|
286
|
+
(0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
|
|
287
|
+
name: "threads.message.undo-delete",
|
|
288
|
+
properties: {
|
|
289
|
+
threadId: thread.id,
|
|
290
|
+
spaceId: space?.id
|
|
291
|
+
}
|
|
292
|
+
})
|
|
293
|
+
]
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
})
|
|
298
|
+
]);
|
|
299
|
+
//# sourceMappingURL=intent-resolver-DVBEXJ33.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n createResolver,\n LayoutAction,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { Ref } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { create, fullyQualifiedId, getSpace, makeRef } from '@dxos/react-client/echo';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ThreadAction } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: ThreadAction.Create,\n resolve: ({ name, cursor, subject }) => {\n if (cursor && subject) {\n // Seed the threads array if it does not exist.\n if (subject?.threads === undefined) {\n try {\n // Static schema will throw an error if subject does not support threads array property.\n subject.threads = [];\n } catch (err) {\n log.error('Subject does not support threads array', { typename: subject?.typename });\n return;\n }\n }\n\n const { state } = context.requestCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const thread = create(ThreadType, { name, anchor: cursor, messages: [], status: 'staged' });\n const draft = state.drafts[subjectId];\n if (draft) {\n draft.push(thread);\n } else {\n state.drafts[subjectId] = [thread];\n }\n\n return {\n data: { object: thread },\n intents: [\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),\n createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' }),\n ],\n };\n } else {\n // TODO(wittjosiah): Create separate intent for channel creation.\n return {\n data: { object: create(ChannelType, { threads: [makeRef(create(ThreadType, { messages: [] }))] }) },\n };\n }\n },\n }),\n createResolver({\n intent: ThreadAction.Select,\n resolve: ({ current, skipOpen }) => {\n const { state } = context.requestCapability(ThreadCapabilities.MutableState);\n state.current = current;\n\n return {\n intents: !skipOpen\n ? [createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: 'comments' })]\n : undefined,\n };\n },\n }),\n createResolver({\n intent: ThreadAction.ToggleResolved,\n resolve: ({ thread }) => {\n if (thread.status === 'active' || thread.status === undefined) {\n thread.status = 'resolved';\n } else if (thread.status === 'resolved') {\n thread.status = 'active';\n }\n\n const space = getSpace(thread);\n const spaceId = space?.id;\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-resolved',\n properties: { threadId: thread.id, spaceId },\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: ThreadAction.Delete,\n resolve: ({ subject, thread }, undo) => {\n const { state } = context.requestCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const draft = state.drafts[subjectId];\n if (draft) {\n // Check if we're deleting a draft; if so, remove it.\n const index = draft.findIndex((t) => t.id === thread.id);\n if (index !== -1) {\n draft.splice(index, 1);\n return;\n }\n }\n\n const space = getSpace(thread);\n if (!space || !subject.threads) {\n return;\n }\n\n if (!undo) {\n const index = subject.threads.findIndex((t: any) => t?.id === thread.id);\n const cursor = subject.threads[index]?.anchor;\n if (index !== -1) {\n subject.threads?.splice(index, 1);\n }\n\n space.db.remove(thread);\n\n return {\n undoable: {\n message: ['thread deleted label', { ns: THREAD_PLUGIN }],\n data: { cursor },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.delete',\n properties: { threadId: thread.id, spaceId: space.id },\n }),\n ],\n };\n } else {\n // TODO(wittjosiah): SDK should do this automatically.\n const savedThread = space.db.add(thread);\n subject.threads.push(savedThread);\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.undo-delete',\n properties: { threadId: thread.id, spaceId: space.id },\n }),\n ],\n };\n }\n },\n }),\n createResolver({\n intent: ThreadAction.OnMessageAdd,\n resolve: ({ thread, subject }) => {\n const { state } = context.requestCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const space = getSpace(subject);\n const intents = [];\n const analyticsProperties = { threadId: thread.id, spaceId: space?.id };\n\n if (state.drafts[subjectId]?.find((t) => t === thread)) {\n // Move draft to document.\n thread.status = 'active';\n subject.threads ? subject.threads.push(makeRef(thread)) : (subject.threads = [makeRef(thread)]);\n state.drafts[subjectId] = state.drafts[subjectId]?.filter(({ id }) => id !== thread.id);\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.thread-created',\n properties: analyticsProperties,\n }),\n );\n }\n\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message-added',\n properties: { ...analyticsProperties, threadLength: thread.messages.length },\n }),\n );\n\n return { intents };\n },\n }),\n createResolver({\n intent: ThreadAction.DeleteMessage,\n resolve: ({ subject, thread, messageId, message, messageIndex }, undo) => {\n const space = getSpace(subject);\n\n if (!undo) {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(messageId));\n const message = thread.messages[messageIndex]?.target;\n if (!message) {\n return;\n }\n\n if (messageIndex === 0 && thread.messages.length === 1) {\n // If the message is the only message in the thread, delete the thread.\n return {\n intents: [createIntent(ThreadAction.Delete, { subject, thread })],\n };\n } else {\n thread.messages.splice(messageIndex, 1);\n }\n\n return {\n undoable: {\n message: ['message deleted label', { ns: THREAD_PLUGIN }],\n data: { message, messageIndex },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.delete',\n properties: { threadId: thread.id, spaceId: space?.id },\n }),\n ],\n };\n } else {\n if (!messageIndex || !message) {\n return;\n }\n\n thread.messages.splice(messageIndex, 0, makeRef(message));\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.undo-delete',\n properties: { threadId: thread.id, spaceId: space?.id },\n }),\n ],\n };\n }\n },\n }),\n ]);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_types", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "ThreadAction", "Create", "resolve", "name", "cursor", "subject", "threads", "undefined", "err", "log", "error", "typename", "state", "requestCapability", "ThreadCapabilities", "MutableState", "subjectId", "fullyQualifiedId", "thread", "create", "ThreadType", "anchor", "messages", "status", "draft", "drafts", "push", "data", "object", "intents", "createIntent", "Select", "current", "LayoutAction", "UpdateComplementary", "part", "ChannelType", "makeRef", "skipOpen", "ToggleResolved", "space", "getSpace", "spaceId", "id", "ObservabilityAction", "SendEvent", "properties", "threadId", "Delete", "undo", "index", "findIndex", "t", "splice", "db", "remove", "undoable", "message", "ns", "THREAD_PLUGIN", "savedThread", "add", "OnMessageAdd", "analyticsProperties", "find", "filter", "threadLength", "length", "DeleteMessage", "messageId", "messageIndex", "Ref", "hasObjectId", "target"]
|
|
7
|
+
}
|