@dxos/plugin-thread 0.8.2 → 0.8.3-main.7f5a14c
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-LGYSQMC7.mjs → ChannelContainer-KWXUKR5Q.mjs} +4 -4
- package/dist/lib/browser/{ChatContainer-JWRI73OG.mjs → ChatContainer-RSOKYAMK.mjs} +2 -2
- package/dist/lib/browser/{app-graph-builder-K3CFBN7V.mjs → app-graph-builder-CBWNZCXB.mjs} +10 -10
- package/dist/lib/browser/app-graph-builder-CBWNZCXB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KMVGJG23.mjs → chunk-3EYX6CV7.mjs} +10 -9
- package/dist/lib/browser/chunk-3EYX6CV7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-5PGLGDIP.mjs → chunk-5IRYNA5K.mjs} +6 -6
- package/dist/lib/browser/chunk-5IRYNA5K.mjs.map +7 -0
- package/dist/lib/browser/chunk-FWBJHKRW.mjs +21 -0
- package/dist/lib/browser/{chunk-G3TS64FP.mjs → chunk-TAFSCSUR.mjs} +4 -4
- package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +4 -4
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-YUYZCTLF.mjs → intent-resolver-I37YU7K3.mjs} +13 -12
- package/dist/lib/browser/intent-resolver-I37YU7K3.mjs.map +7 -0
- package/dist/lib/browser/{markdown-4EC3OCF2.mjs → markdown-LS3XO2KB.mjs} +5 -4
- package/dist/lib/browser/markdown-LS3XO2KB.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-EECCWHCW.mjs → react-root-KNCKPHGS.mjs} +5 -5
- package/dist/lib/browser/{react-surface-5QLZAFDL.mjs → react-surface-ASWIBD7H.mjs} +11 -11
- package/dist/lib/browser/react-surface-ASWIBD7H.mjs.map +7 -0
- package/dist/lib/browser/{settings-KVBQQSO5.mjs → settings-ZUY7OX24.mjs} +3 -3
- package/dist/lib/browser/settings-ZUY7OX24.mjs.map +7 -0
- package/dist/lib/node/{ChannelContainer-5EKNEH56.cjs → ChannelContainer-MA5CFESJ.cjs} +9 -9
- package/dist/lib/node/{ChannelContainer-5EKNEH56.cjs.map → ChannelContainer-MA5CFESJ.cjs.map} +2 -2
- package/dist/lib/node/{ChatContainer-EE3FPSYO.cjs → ChatContainer-GCOM3M56.cjs} +8 -8
- package/dist/lib/node/{ChatContainer-EE3FPSYO.cjs.map → ChatContainer-GCOM3M56.cjs.map} +2 -2
- package/dist/lib/node/{app-graph-builder-IRE3GYKE.cjs → app-graph-builder-K5OAVYI6.cjs} +19 -19
- package/dist/lib/node/app-graph-builder-K5OAVYI6.cjs.map +7 -0
- package/dist/lib/node/{chunk-U7NOIXN6.cjs → chunk-3YYSLZE4.cjs} +10 -10
- package/dist/lib/node/{chunk-4B3PPXA6.cjs → chunk-E3WBZTTI.cjs} +12 -12
- package/dist/lib/node/chunk-E3WBZTTI.cjs.map +7 -0
- package/dist/lib/node/{chunk-6B3M6XRE.cjs → chunk-U4SZUERU.cjs} +8 -8
- package/dist/lib/node/chunk-U4SZUERU.cjs.map +7 -0
- package/dist/lib/node/{chunk-JLHENFGK.cjs → chunk-WCQKISL5.cjs} +32 -31
- package/dist/lib/node/chunk-WCQKISL5.cjs.map +7 -0
- package/dist/lib/node/index.cjs +11 -11
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-MZ3HADNY.cjs → intent-resolver-2TX6HSOL.cjs} +29 -28
- package/dist/lib/node/intent-resolver-2TX6HSOL.cjs.map +7 -0
- package/dist/lib/node/{markdown-NJDPXIKD.cjs → markdown-GNFW2XDO.cjs} +21 -20
- package/dist/lib/node/markdown-GNFW2XDO.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-IAYQ2DBO.cjs → react-root-BKOXG5AC.cjs} +9 -9
- package/dist/lib/node/{react-surface-AVC5VVIS.cjs → react-surface-Q5DWX3UO.cjs} +23 -23
- package/dist/lib/node/react-surface-Q5DWX3UO.cjs.map +7 -0
- package/dist/lib/node/{settings-H45P5YO2.cjs → settings-5O5V2NOE.cjs} +5 -5
- package/dist/lib/node/settings-5O5V2NOE.cjs.map +7 -0
- package/dist/lib/node-esm/{ChannelContainer-KFS2RWWW.mjs → ChannelContainer-VGVEAUAQ.mjs} +4 -4
- package/dist/lib/node-esm/{ChatContainer-UJYPQMLV.mjs → ChatContainer-F6CSADV7.mjs} +2 -2
- package/dist/lib/node-esm/{app-graph-builder-I5VMPLE4.mjs → app-graph-builder-UWJQE534.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-builder-UWJQE534.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-MNJ3V4XM.mjs → chunk-6EGLDARC.mjs} +10 -9
- package/dist/lib/node-esm/chunk-6EGLDARC.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ODUB4GAB.mjs → chunk-EHDXOE5R.mjs} +7 -7
- package/dist/lib/node-esm/{chunk-X6AUQDTE.mjs → chunk-KP2JBSWF.mjs} +6 -6
- package/dist/lib/node-esm/chunk-KP2JBSWF.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-POKXRTII.mjs → chunk-P6RLFCNT.mjs} +4 -4
- package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +4 -4
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-CU22OPAH.mjs → intent-resolver-FHRK77IS.mjs} +13 -12
- package/dist/lib/node-esm/intent-resolver-FHRK77IS.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-HRGGO7IA.mjs → markdown-HBGB3UPJ.mjs} +5 -4
- package/dist/lib/node-esm/markdown-HBGB3UPJ.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-NQMUEI6Z.mjs → react-root-UPDDCRBV.mjs} +5 -5
- package/dist/lib/node-esm/{react-surface-Z4X5VLMY.mjs → react-surface-LU3CZDC4.mjs} +11 -11
- package/dist/lib/node-esm/react-surface-LU3CZDC4.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-IJGUOU3F.mjs → settings-KFEFSAYG.mjs} +3 -3
- package/dist/lib/node-esm/settings-KFEFSAYG.mjs.map +7 -0
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.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/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +2 -103
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/extensions/threads.d.ts.map +1 -1
- package/package.json +42 -42
- package/src/ThreadPlugin.tsx +4 -4
- package/src/capabilities/app-graph-builder.ts +9 -9
- package/src/capabilities/intent-resolver.ts +9 -8
- package/src/capabilities/react-surface.tsx +7 -7
- package/src/capabilities/settings.ts +7 -2
- package/src/components/Call/Toolbar.tsx +2 -2
- package/src/components/Chat.stories.tsx +4 -4
- package/src/components/ChatContainer.tsx +6 -6
- package/src/components/Comments.stories.tsx +6 -5
- package/src/components/MessageContainer.tsx +20 -20
- package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
- package/src/components/ThreadComplementary.tsx +9 -4
- package/src/components/testing.ts +5 -5
- package/src/extensions/threads.ts +4 -3
- package/src/testing/stories.ts +3 -3
- package/dist/lib/browser/app-graph-builder-K3CFBN7V.mjs.map +0 -7
- package/dist/lib/browser/chunk-5PGLGDIP.mjs.map +0 -7
- package/dist/lib/browser/chunk-CF2MXRCH.mjs +0 -21
- package/dist/lib/browser/chunk-G3TS64FP.mjs.map +0 -7
- package/dist/lib/browser/chunk-KMVGJG23.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-YUYZCTLF.mjs.map +0 -7
- package/dist/lib/browser/markdown-4EC3OCF2.mjs.map +0 -7
- package/dist/lib/browser/react-surface-5QLZAFDL.mjs.map +0 -7
- package/dist/lib/browser/settings-KVBQQSO5.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-IRE3GYKE.cjs.map +0 -7
- package/dist/lib/node/chunk-4B3PPXA6.cjs.map +0 -7
- package/dist/lib/node/chunk-6B3M6XRE.cjs.map +0 -7
- package/dist/lib/node/chunk-JLHENFGK.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-MZ3HADNY.cjs.map +0 -7
- package/dist/lib/node/markdown-NJDPXIKD.cjs.map +0 -7
- package/dist/lib/node/react-surface-AVC5VVIS.cjs.map +0 -7
- package/dist/lib/node/settings-H45P5YO2.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-I5VMPLE4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MNJ3V4XM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-POKXRTII.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-X6AUQDTE.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-CU22OPAH.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-HRGGO7IA.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-Z4X5VLMY.mjs.map +0 -7
- package/dist/lib/node-esm/settings-IJGUOU3F.mjs.map +0 -7
- /package/dist/lib/browser/{ChannelContainer-LGYSQMC7.mjs.map → ChannelContainer-KWXUKR5Q.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-JWRI73OG.mjs.map → ChatContainer-RSOKYAMK.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-CF2MXRCH.mjs.map → chunk-FWBJHKRW.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-EECCWHCW.mjs.map → react-root-KNCKPHGS.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-U7NOIXN6.cjs.map → chunk-3YYSLZE4.cjs.map} +0 -0
- /package/dist/lib/node/{react-root-IAYQ2DBO.cjs.map → react-root-BKOXG5AC.cjs.map} +0 -0
- /package/dist/lib/node-esm/{ChannelContainer-KFS2RWWW.mjs.map → ChannelContainer-VGVEAUAQ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-UJYPQMLV.mjs.map → ChatContainer-F6CSADV7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-ODUB4GAB.mjs.map → chunk-EHDXOE5R.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-NQMUEI6Z.mjs.map → react-root-UPDDCRBV.mjs.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
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 {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA4F;AAC5F,2BAAiD;AACjD,6BAA+B;AAC/B,0BAAkC;AAClC,mBAAiC;AACjC,
|
|
6
|
-
"names": ["ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "ClientEvents", "ClientReady", "activate", "CallManager", "Events", "SetupSettings", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "metadata", "icon", "ThreadType", "loadReferences", "thread", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { Ref } from '@dxos/echo';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities } from '@dxos/plugin-space';\nimport { defineObjectForm } from '@dxos/plugin-space/types';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport {\n AppGraphBuilder,\n CallManager,\n IntentResolver,\n Markdown,\n ReactRoot,\n ReactSurface,\n ThreadState,\n} from './capabilities';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ChannelType, ThreadAction, ThreadType } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\n\n// TODO(wittjosiah): Rename to ChatPlugin.\n// TODO(wittjosiah): Enabling comments should likely be factored out of this plugin but depend on it's capabilities.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n defineModule({\n id: `${meta.id}/module/call-manager`,\n activatesOn: ClientEvents.ClientReady,\n activate: CallManager,\n }),\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 icon: 'ph--hash--regular',\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 Ref.Array.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: DataType.Message.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ThreadType, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.name, 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: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(ClientCapabilities.Schema, [AnchoredTo, ThreadType, DataType.Message, DataType.MessageV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),\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-root`,\n activatesOn: Events.Startup,\n activate: ReactRoot,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { THREAD_PLUGIN } from './meta';\nimport { ChannelType } from './types';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Chat',\n 'channel title label': 'Title',\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': 'Comments',\n 'no comments message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\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 label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n\n 'channel companion label': 'Channel',\n 'call panel label': 'Active Call',\n\n 'display name label': 'Display name',\n 'display name description': 'Set your display name before joining a meeting.',\n 'display name input placeholder': 'Enter your name',\n 'set display name label': 'Continue',\n\n 'call tab label': 'Call',\n 'meeting status title': 'Meeting',\n 'share meeting link label': 'Share meeting',\n 'show webrtc stats title': 'Detailed WebRTC Stats',\n\n 'meeting summary label': 'Summary',\n 'summarize label': 'Summarize',\n 'summarizing label': 'Creating summary...',\n 'create summary message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'join call': 'Join',\n 'leave call': 'Leave',\n\n 'lobby participants_zero': 'No participants',\n 'lobby participants_one': '1 participant',\n 'lobby participants_other': '{{count}} participants',\n\n 'icon pin': 'Pin video',\n 'icon unpin': 'Unpin video',\n 'icon wave': 'Waving',\n 'icon muted': 'Muted',\n 'icon speaking': 'Speaking',\n\n 'mic on': 'Unmute',\n 'mic off': 'Mute',\n 'camera on': 'Turn camera on',\n 'camera off': 'Turn camera off',\n 'camera off label': 'Camera off',\n\n 'raise hand': 'Raise hand',\n 'lower hand': 'Lower hand',\n 'screenshare on': 'Share screen',\n 'screenshare off': 'Stop streaming',\n },\n },\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "ClientEvents", "ClientReady", "activate", "CallManager", "Events", "SetupSettings", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "metadata", "icon", "ThreadType", "loadReferences", "thread", "Ref", "Array", "loadAll", "messages", "DataType", "Message", "message", "THREAD_ITEM", "parse", "item", "type", "label", "name", "data", "object", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "AnchoredTo", "MessageV1", "SetupMigration", "Migration", "MessageV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "Startup", "ReactRoot", "SetupReactSurface", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
|
|
7
7
|
}
|
|
@@ -16,22 +16,23 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var intent_resolver_2TX6HSOL_exports = {};
|
|
20
|
+
__export(intent_resolver_2TX6HSOL_exports, {
|
|
21
21
|
default: () => intent_resolver_default
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
23
|
+
module.exports = __toCommonJS(intent_resolver_2TX6HSOL_exports);
|
|
24
24
|
var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
|
|
25
25
|
var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
|
|
26
26
|
var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
|
|
27
27
|
var import_signals_core = require("@preact/signals-core");
|
|
28
28
|
var import_app_framework = require("@dxos/app-framework");
|
|
29
|
+
var import_echo = require("@dxos/echo");
|
|
29
30
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
30
31
|
var import_invariant = require("@dxos/invariant");
|
|
31
32
|
var import_types = require("@dxos/plugin-deck/types");
|
|
32
33
|
var import_types2 = require("@dxos/plugin-observability/types");
|
|
33
34
|
var import_types3 = require("@dxos/plugin-space/types");
|
|
34
|
-
var
|
|
35
|
+
var import_echo2 = require("@dxos/react-client/echo");
|
|
35
36
|
var import_schema = require("@dxos/schema");
|
|
36
37
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/capabilities/intent-resolver.ts";
|
|
37
38
|
var intent_resolver_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, [
|
|
@@ -39,9 +40,9 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
39
40
|
intent: import_chunk_TKHJVC2C.ThreadAction.CreateChannel,
|
|
40
41
|
resolve: ({ name }) => ({
|
|
41
42
|
data: {
|
|
42
|
-
object:
|
|
43
|
+
object: import_echo.Obj.make(import_chunk_TKHJVC2C.ChannelType, {
|
|
43
44
|
name,
|
|
44
|
-
defaultThread:
|
|
45
|
+
defaultThread: import_echo2.Ref.make(import_echo.Obj.make(import_chunk_TKHJVC2C.ThreadType, {
|
|
45
46
|
messages: [],
|
|
46
47
|
status: "active"
|
|
47
48
|
})),
|
|
@@ -53,11 +54,11 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
53
54
|
(0, import_app_framework.createResolver)({
|
|
54
55
|
intent: import_chunk_TKHJVC2C.ThreadAction.CreateChannelThread,
|
|
55
56
|
resolve: ({ channel }) => {
|
|
56
|
-
const thread =
|
|
57
|
+
const thread = import_echo.Obj.make(import_chunk_TKHJVC2C.ThreadType, {
|
|
57
58
|
messages: [],
|
|
58
59
|
status: "active"
|
|
59
60
|
});
|
|
60
|
-
channel.threads.push(
|
|
61
|
+
channel.threads.push(import_echo2.Ref.make(thread));
|
|
61
62
|
return {
|
|
62
63
|
data: {
|
|
63
64
|
object: thread
|
|
@@ -69,10 +70,10 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
69
70
|
(0, import_app_framework.createResolver)({
|
|
70
71
|
intent: import_chunk_TKHJVC2C.ThreadAction.Create,
|
|
71
72
|
resolve: ({ name, anchor: _anchor, subject }) => {
|
|
72
|
-
const space = (0,
|
|
73
|
+
const space = (0, import_echo2.getSpace)(subject);
|
|
73
74
|
(0, import_invariant.invariant)(space, "Space not found", {
|
|
74
75
|
F: __dxlog_file,
|
|
75
|
-
L:
|
|
76
|
+
L: 52,
|
|
76
77
|
S: void 0,
|
|
77
78
|
A: [
|
|
78
79
|
"space",
|
|
@@ -80,13 +81,13 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
80
81
|
]
|
|
81
82
|
});
|
|
82
83
|
const { state } = context.getCapability(import_chunk_4YSNVPWU.ThreadCapabilities.MutableState);
|
|
83
|
-
const subjectId = (0,
|
|
84
|
-
const thread =
|
|
84
|
+
const subjectId = (0, import_echo2.fullyQualifiedId)(subject);
|
|
85
|
+
const thread = import_echo.Obj.make(import_chunk_TKHJVC2C.ThreadType, {
|
|
85
86
|
name,
|
|
86
87
|
messages: [],
|
|
87
88
|
status: "staged"
|
|
88
89
|
});
|
|
89
|
-
const anchor =
|
|
90
|
+
const anchor = import_echo.Relation.make(import_schema.AnchoredTo, {
|
|
90
91
|
[import_echo_schema.RelationSourceId]: thread,
|
|
91
92
|
[import_echo_schema.RelationTargetId]: subject,
|
|
92
93
|
anchor: _anchor
|
|
@@ -102,7 +103,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
102
103
|
return {
|
|
103
104
|
intents: [
|
|
104
105
|
(0, import_app_framework.createIntent)(import_chunk_TKHJVC2C.ThreadAction.Select, {
|
|
105
|
-
current: (0,
|
|
106
|
+
current: (0, import_echo2.fullyQualifiedId)(thread)
|
|
106
107
|
}),
|
|
107
108
|
(0, import_app_framework.createIntent)(import_types.DeckAction.ChangeCompanion, {
|
|
108
109
|
primary: subjectId,
|
|
@@ -127,10 +128,10 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
127
128
|
} else if (thread.status === "resolved") {
|
|
128
129
|
thread.status = "active";
|
|
129
130
|
}
|
|
130
|
-
const space = (0,
|
|
131
|
+
const space = (0, import_echo2.getSpace)(thread);
|
|
131
132
|
(0, import_invariant.invariant)(space, "Space not found", {
|
|
132
133
|
F: __dxlog_file,
|
|
133
|
-
L:
|
|
134
|
+
L: 97,
|
|
134
135
|
S: void 0,
|
|
135
136
|
A: [
|
|
136
137
|
"space",
|
|
@@ -156,7 +157,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
156
157
|
resolve: ({ subject, anchor, thread: _thread }, undo) => {
|
|
157
158
|
const thread = _thread ?? anchor[import_echo_schema.RelationSourceId];
|
|
158
159
|
const { state } = context.getCapability(import_chunk_4YSNVPWU.ThreadCapabilities.MutableState);
|
|
159
|
-
const subjectId = (0,
|
|
160
|
+
const subjectId = (0, import_echo2.fullyQualifiedId)(subject);
|
|
160
161
|
const draft = state.drafts[subjectId];
|
|
161
162
|
if (draft) {
|
|
162
163
|
const index = draft.findIndex((a) => a.id === anchor.id);
|
|
@@ -165,7 +166,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
165
166
|
return;
|
|
166
167
|
}
|
|
167
168
|
}
|
|
168
|
-
const space = (0,
|
|
169
|
+
const space = (0, import_echo2.getSpace)(anchor);
|
|
169
170
|
if (!space) {
|
|
170
171
|
return;
|
|
171
172
|
}
|
|
@@ -221,11 +222,11 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
221
222
|
resolve: ({ anchor, subject, sender, text }) => {
|
|
222
223
|
const thread = anchor[import_echo_schema.RelationSourceId];
|
|
223
224
|
const { state } = context.getCapability(import_chunk_4YSNVPWU.ThreadCapabilities.MutableState);
|
|
224
|
-
const subjectId = (0,
|
|
225
|
-
const space = (0,
|
|
225
|
+
const subjectId = (0, import_echo2.fullyQualifiedId)(subject);
|
|
226
|
+
const space = (0, import_echo2.getSpace)(subject);
|
|
226
227
|
(0, import_invariant.invariant)(space, "Space not found", {
|
|
227
228
|
F: __dxlog_file,
|
|
228
|
-
L:
|
|
229
|
+
L: 182,
|
|
229
230
|
S: void 0,
|
|
230
231
|
A: [
|
|
231
232
|
"space",
|
|
@@ -233,7 +234,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
233
234
|
]
|
|
234
235
|
});
|
|
235
236
|
const intents = [];
|
|
236
|
-
const message =
|
|
237
|
+
const message = import_echo.Obj.make(import_schema.DataType.Message, {
|
|
237
238
|
sender,
|
|
238
239
|
created: (/* @__PURE__ */ new Date()).toISOString(),
|
|
239
240
|
blocks: [
|
|
@@ -243,7 +244,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
243
244
|
}
|
|
244
245
|
]
|
|
245
246
|
});
|
|
246
|
-
thread.messages.push(
|
|
247
|
+
thread.messages.push(import_echo2.Ref.make(message));
|
|
247
248
|
const draft = state.drafts[subjectId]?.find((a) => a.id === anchor.id);
|
|
248
249
|
if (draft) {
|
|
249
250
|
thread.status = "active";
|
|
@@ -289,10 +290,10 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
289
290
|
intent: import_chunk_TKHJVC2C.ThreadAction.DeleteMessage,
|
|
290
291
|
resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {
|
|
291
292
|
const thread = anchor[import_echo_schema.RelationSourceId];
|
|
292
|
-
const space = (0,
|
|
293
|
+
const space = (0, import_echo2.getSpace)(subject);
|
|
293
294
|
(0, import_invariant.invariant)(space, "Space not found", {
|
|
294
295
|
F: __dxlog_file,
|
|
295
|
-
L:
|
|
296
|
+
L: 242,
|
|
296
297
|
S: void 0,
|
|
297
298
|
A: [
|
|
298
299
|
"space",
|
|
@@ -300,7 +301,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
300
301
|
]
|
|
301
302
|
});
|
|
302
303
|
if (!undo) {
|
|
303
|
-
const messageIndex2 = thread.messages.findIndex(
|
|
304
|
+
const messageIndex2 = thread.messages.findIndex(import_echo2.Ref.hasObjectId(messageId));
|
|
304
305
|
const message2 = thread.messages[messageIndex2]?.target;
|
|
305
306
|
if (!message2) {
|
|
306
307
|
return;
|
|
@@ -345,7 +346,7 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
345
346
|
if (messageIndex === void 0 || !message) {
|
|
346
347
|
return;
|
|
347
348
|
}
|
|
348
|
-
thread.messages.splice(messageIndex, 0,
|
|
349
|
+
thread.messages.splice(messageIndex, 0, import_echo2.Ref.make(message));
|
|
349
350
|
return {
|
|
350
351
|
intents: [
|
|
351
352
|
(0, import_app_framework.createIntent)(import_types2.ObservabilityAction.SendEvent, {
|
|
@@ -362,4 +363,4 @@ var intent_resolver_default = (context) => (0, import_app_framework.contributes)
|
|
|
362
363
|
}
|
|
363
364
|
})
|
|
364
365
|
]);
|
|
365
|
-
//# sourceMappingURL=intent-resolver-
|
|
366
|
+
//# sourceMappingURL=intent-resolver-2TX6HSOL.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 { batch } from '@preact/signals-core';\n\nimport { Capabilities, contributes, createIntent, createResolver, type PluginContext } from '@dxos/app-framework';\nimport { Obj, Relation } from '@dxos/echo';\nimport { RelationSourceId, RelationTargetId } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, Ref } from '@dxos/react-client/echo';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ChannelType, ThreadAction, ThreadType } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: ThreadAction.CreateChannel,\n resolve: ({ name }) => ({\n data: {\n object: Obj.make(ChannelType, {\n name,\n defaultThread: Ref.make(Obj.make(ThreadType, { messages: [], status: 'active' })),\n threads: [],\n }),\n },\n }),\n }),\n createResolver({\n intent: ThreadAction.CreateChannelThread,\n resolve: ({ channel }) => {\n const thread = Obj.make(ThreadType, { messages: [], status: 'active' });\n channel.threads.push(Ref.make(thread));\n return {\n data: {\n object: thread,\n },\n };\n },\n }),\n // TODO(wittjosiah): Break this up into more composable pieces.\n createResolver({\n intent: ThreadAction.Create,\n resolve: ({ name, anchor: _anchor, subject }) => {\n const space = getSpace(subject);\n invariant(space, 'Space not found');\n\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const thread = Obj.make(ThreadType, { name, messages: [], status: 'staged' });\n const anchor = Relation.make(AnchoredTo, {\n [RelationSourceId]: thread,\n [RelationTargetId]: subject,\n anchor: _anchor,\n });\n const draft = state.drafts[subjectId];\n if (draft) {\n draft.push(anchor);\n } else {\n state.drafts[subjectId] = [anchor];\n }\n\n return {\n intents: [\n createIntent(ThreadAction.Select, { current: fullyQualifiedId(thread) }),\n createIntent(DeckAction.ChangeCompanion, {\n primary: subjectId,\n companion: `${subjectId}${ATTENDABLE_PATH_SEPARATOR}comments`,\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: ThreadAction.Select,\n resolve: ({ current }) => {\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n state.current = current;\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 invariant(space, 'Space not found');\n const spaceId = space.id;\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-resolved',\n properties: {\n spaceId,\n threadId: thread.id,\n },\n }),\n ],\n };\n },\n }),\n createResolver({\n intent: ThreadAction.Delete,\n resolve: ({ subject, anchor, thread: _thread }, undo) => {\n const thread = _thread ?? (anchor[RelationSourceId] as ThreadType);\n const { state } = context.getCapability(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((a) => a.id === anchor.id);\n if (index !== -1) {\n draft.splice(index, 1);\n return;\n }\n }\n\n const space = getSpace(anchor);\n if (!space) {\n return;\n }\n\n if (!undo) {\n batch(() => {\n space.db.remove(thread);\n space.db.remove(anchor);\n });\n\n return {\n undoable: {\n message: ['thread deleted label', { ns: THREAD_PLUGIN }],\n data: { thread, anchor },\n },\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n ],\n };\n } else {\n batch(() => {\n space.db.add(thread);\n space.db.add(anchor);\n });\n\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.undo-delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n ],\n };\n }\n },\n }),\n createResolver({\n intent: ThreadAction.AddMessage,\n resolve: ({ anchor, subject, sender, text }) => {\n const thread = anchor[RelationSourceId] as ThreadType;\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n const subjectId = fullyQualifiedId(subject);\n const space = getSpace(subject);\n invariant(space, 'Space not found');\n const intents = [];\n\n const message = Obj.make(DataType.Message, {\n sender,\n created: new Date().toISOString(),\n blocks: [{ type: 'text', text }],\n // TODO(wittjosiah): Context based on attention.\n // context: context ? Ref.make(context) : undefined,\n });\n thread.messages.push(Ref.make(message));\n\n const draft = state.drafts[subjectId]?.find((a) => a.id === anchor.id);\n if (draft) {\n // Move draft to document.\n thread.status = 'active';\n // TODO(wittjosiah): This causes the thread to flash as it transitions from draft to db.\n state.drafts[subjectId] = state.drafts[subjectId]?.filter((a) => a.id !== anchor.id);\n intents.push(createIntent(SpaceAction.AddObject, { object: thread, target: space, hidden: true }));\n intents.push(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: AnchoredTo,\n source: thread,\n target: subject,\n fields: { anchor: draft.anchor },\n }),\n );\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.create',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n },\n }),\n );\n }\n\n intents.push(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.add',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n threadLength: thread.messages.length,\n messageId: message.id,\n messageLength: text.length,\n },\n }),\n );\n\n return { intents };\n },\n }),\n createResolver({\n intent: ThreadAction.DeleteMessage,\n resolve: ({ subject, anchor, messageId, message, messageIndex }, undo) => {\n const thread = anchor[RelationSourceId] as ThreadType;\n const space = getSpace(subject);\n invariant(space, 'Space not found');\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, anchor })],\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: {\n spaceId: space.id,\n threadId: thread.id,\n messageId: message.id,\n },\n }),\n ],\n };\n } else {\n if (messageIndex === undefined || !message) {\n return;\n }\n\n thread.messages.splice(messageIndex, 0, Ref.make(message));\n return {\n intents: [\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.undo-delete',\n properties: {\n spaceId: space.id,\n threadId: thread.id,\n messageId: message.id,\n },\n }),\n ],\n };\n }\n },\n }),\n ]);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0BAAsB;AAEtB,2BAA4F;AAC5F,kBAA8B;AAC9B,yBAAmD;AACnD,uBAA0B;AAC1B,mBAAsD;AACtD,IAAAA,gBAAoC;AACpC,IAAAA,gBAA4B;AAC5B,IAAAC,eAAgD;AAChD,oBAAqC;;AAMrC,IAAA,0BAAe,CAACC,gBACdC,kCAAYC,kCAAaC,gBAAgB;MACvCC,qCAAe;IACbC,QAAQC,mCAAaC;IACrBC,SAAS,CAAC,EAAEC,KAAI,OAAQ;MACtBC,MAAM;QACJC,QAAQC,gBAAIC,KAAKC,mCAAa;UAC5BL;UACAM,eAAeC,iBAAIH,KAAKD,gBAAIC,KAAKI,kCAAY;YAAEC,UAAU,CAAA;YAAIC,QAAQ;UAAS,CAAA,CAAA;UAC9EC,SAAS,CAAA;QACX,CAAA;MACF;IACF;EACF,CAAA;MACAhB,qCAAe;IACbC,QAAQC,mCAAae;IACrBb,SAAS,CAAC,EAAEc,QAAO,MAAE;AACnB,YAAMC,SAASX,gBAAIC,KAAKI,kCAAY;QAAEC,UAAU,CAAA;QAAIC,QAAQ;MAAS,CAAA;AACrEG,cAAQF,QAAQI,KAAKR,iBAAIH,KAAKU,MAAAA,CAAAA;AAC9B,aAAO;QACLb,MAAM;UACJC,QAAQY;QACV;MACF;IACF;EACF,CAAA;;MAEAnB,qCAAe;IACbC,QAAQC,mCAAamB;IACrBjB,SAAS,CAAC,EAAEC,MAAMiB,QAAQC,SAASC,QAAO,MAAE;AAC1C,YAAMC,YAAQC,uBAASF,OAAAA;AACvBG,sCAAUF,OAAO,mBAAA;;;;;;;;;AAEjB,YAAM,EAAEG,MAAK,IAAKhC,QAAQiC,cAAcC,yCAAmBC,YAAY;AACvE,YAAMC,gBAAYC,+BAAiBT,OAAAA;AACnC,YAAML,SAASX,gBAAIC,KAAKI,kCAAY;QAAER;QAAMS,UAAU,CAAA;QAAIC,QAAQ;MAAS,CAAA;AAC3E,YAAMO,SAASY,qBAASzB,KAAK0B,0BAAY;QACvC,CAACC,mCAAAA,GAAmBjB;QACpB,CAACkB,mCAAAA,GAAmBb;QACpBF,QAAQC;MACV,CAAA;AACA,YAAMe,QAAQV,MAAMW,OAAOP,SAAAA;AAC3B,UAAIM,OAAO;AACTA,cAAMlB,KAAKE,MAAAA;MACb,OAAO;AACLM,cAAMW,OAAOP,SAAAA,IAAa;UAACV;;MAC7B;AAEA,aAAO;QACLkB,SAAS;cACPC,mCAAavC,mCAAawC,QAAQ;YAAEC,aAASV,+BAAiBd,MAAAA;UAAQ,CAAA;cACtEsB,mCAAaG,wBAAWC,iBAAiB;YACvCC,SAASd;YACTe,WAAW,GAAGf,SAAAA,GAAYgB,sCAAAA;UAC5B,CAAA;;MAEJ;IACF;EACF,CAAA;MACAhD,qCAAe;IACbC,QAAQC,mCAAawC;IACrBtC,SAAS,CAAC,EAAEuC,QAAO,MAAE;AACnB,YAAM,EAAEf,MAAK,IAAKhC,QAAQiC,cAAcC,yCAAmBC,YAAY;AACvEH,YAAMe,UAAUA;IAClB;EACF,CAAA;MACA3C,qCAAe;IACbC,QAAQC,mCAAa+C;IACrB7C,SAAS,CAAC,EAAEe,OAAM,MAAE;AAClB,UAAIA,OAAOJ,WAAW,YAAYI,OAAOJ,WAAWmC,QAAW;AAC7D/B,eAAOJ,SAAS;MAClB,WAAWI,OAAOJ,WAAW,YAAY;AACvCI,eAAOJ,SAAS;MAClB;AAEA,YAAMU,YAAQC,uBAASP,MAAAA;AACvBQ,sCAAUF,OAAO,mBAAA;;;;;;;;;AACjB,YAAM0B,UAAU1B,MAAM2B;AAEtB,aAAO;QACLZ,SAAS;cACPC,mCAAaY,kCAAoBC,WAAW;YAC1CjD,MAAM;YACNkD,YAAY;cACVJ;cACAK,UAAUrC,OAAOiC;YACnB;UACF,CAAA;;MAEJ;IACF;EACF,CAAA;MACApD,qCAAe;IACbC,QAAQC,mCAAauD;IACrBrD,SAAS,CAAC,EAAEoB,SAASF,QAAQH,QAAQuC,QAAO,GAAIC,SAAAA;AAC9C,YAAMxC,SAASuC,WAAYpC,OAAOc,mCAAAA;AAClC,YAAM,EAAER,MAAK,IAAKhC,QAAQiC,cAAcC,yCAAmBC,YAAY;AACvE,YAAMC,gBAAYC,+BAAiBT,OAAAA;AACnC,YAAMc,QAAQV,MAAMW,OAAOP,SAAAA;AAC3B,UAAIM,OAAO;AAET,cAAMsB,QAAQtB,MAAMuB,UAAU,CAACC,MAAMA,EAAEV,OAAO9B,OAAO8B,EAAE;AACvD,YAAIQ,UAAU,IAAI;AAChBtB,gBAAMyB,OAAOH,OAAO,CAAA;AACpB;QACF;MACF;AAEA,YAAMnC,YAAQC,uBAASJ,MAAAA;AACvB,UAAI,CAACG,OAAO;AACV;MACF;AAEA,UAAI,CAACkC,MAAM;AACTK,uCAAM,MAAA;AACJvC,gBAAMwC,GAAGC,OAAO/C,MAAAA;AAChBM,gBAAMwC,GAAGC,OAAO5C,MAAAA;QAClB,CAAA;AAEA,eAAO;UACL6C,UAAU;YACRC,SAAS;cAAC;cAAwB;gBAAEC,IAAIC;cAAc;;YACtDhE,MAAM;cAAEa;cAAQG;YAAO;UACzB;UACAkB,SAAS;gBACPC,mCAAaY,kCAAoBC,WAAW;cAC1CjD,MAAM;cACNkD,YAAY;gBACVJ,SAAS1B,MAAM2B;gBACfI,UAAUrC,OAAOiC;cACnB;YACF,CAAA;;QAEJ;MACF,OAAO;AACLY,uCAAM,MAAA;AACJvC,gBAAMwC,GAAGM,IAAIpD,MAAAA;AACbM,gBAAMwC,GAAGM,IAAIjD,MAAAA;QACf,CAAA;AAEA,eAAO;UACLkB,SAAS;gBACPC,mCAAaY,kCAAoBC,WAAW;cAC1CjD,MAAM;cACNkD,YAAY;gBACVJ,SAAS1B,MAAM2B;gBACfI,UAAUrC,OAAOiC;cACnB;YACF,CAAA;;QAEJ;MACF;IACF;EACF,CAAA;MACApD,qCAAe;IACbC,QAAQC,mCAAasE;IACrBpE,SAAS,CAAC,EAAEkB,QAAQE,SAASiD,QAAQC,KAAI,MAAE;AACzC,YAAMvD,SAASG,OAAOc,mCAAAA;AACtB,YAAM,EAAER,MAAK,IAAKhC,QAAQiC,cAAcC,yCAAmBC,YAAY;AACvE,YAAMC,gBAAYC,+BAAiBT,OAAAA;AACnC,YAAMC,YAAQC,uBAASF,OAAAA;AACvBG,sCAAUF,OAAO,mBAAA;;;;;;;;;AACjB,YAAMe,UAAU,CAAA;AAEhB,YAAM4B,UAAU5D,gBAAIC,KAAKkE,uBAASC,SAAS;QACzCH;QACAI,UAAS,oBAAIC,KAAAA,GAAOC,YAAW;QAC/BC,QAAQ;UAAC;YAAEC,MAAM;YAAQP;UAAK;;MAGhC,CAAA;AACAvD,aAAOL,SAASM,KAAKR,iBAAIH,KAAK2D,OAAAA,CAAAA;AAE9B,YAAM9B,QAAQV,MAAMW,OAAOP,SAAAA,GAAYkD,KAAK,CAACpB,MAAMA,EAAEV,OAAO9B,OAAO8B,EAAE;AACrE,UAAId,OAAO;AAETnB,eAAOJ,SAAS;AAEhBa,cAAMW,OAAOP,SAAAA,IAAaJ,MAAMW,OAAOP,SAAAA,GAAYmD,OAAO,CAACrB,MAAMA,EAAEV,OAAO9B,OAAO8B,EAAE;AACnFZ,gBAAQpB,SAAKqB,mCAAa2C,0BAAYC,WAAW;UAAE9E,QAAQY;UAAQmE,QAAQ7D;UAAO8D,QAAQ;QAAK,CAAA,CAAA;AAC/F/C,gBAAQpB,SACNqB,mCAAa2C,0BAAYI,aAAa;UACpC/D;UACAgE,QAAQtD;UACRuD,QAAQvE;UACRmE,QAAQ9D;UACRmE,QAAQ;YAAErE,QAAQgB,MAAMhB;UAAO;QACjC,CAAA,CAAA;AAEFkB,gBAAQpB,SACNqB,mCAAaY,kCAAoBC,WAAW;UAC1CjD,MAAM;UACNkD,YAAY;YACVJ,SAAS1B,MAAM2B;YACfI,UAAUrC,OAAOiC;UACnB;QACF,CAAA,CAAA;MAEJ;AAEAZ,cAAQpB,SACNqB,mCAAaY,kCAAoBC,WAAW;QAC1CjD,MAAM;QACNkD,YAAY;UACVJ,SAAS1B,MAAM2B;UACfI,UAAUrC,OAAOiC;UACjBwC,cAAczE,OAAOL,SAAS+E;UAC9BC,WAAW1B,QAAQhB;UACnB2C,eAAerB,KAAKmB;QACtB;MACF,CAAA,CAAA;AAGF,aAAO;QAAErD;MAAQ;IACnB;EACF,CAAA;MACAxC,qCAAe;IACbC,QAAQC,mCAAa8F;IACrB5F,SAAS,CAAC,EAAEoB,SAASF,QAAQwE,WAAW1B,SAAS6B,aAAY,GAAItC,SAAAA;AAC/D,YAAMxC,SAASG,OAAOc,mCAAAA;AACtB,YAAMX,YAAQC,uBAASF,OAAAA;AACvBG,sCAAUF,OAAO,mBAAA;;;;;;;;;AAEjB,UAAI,CAACkC,MAAM;AACT,cAAMsC,gBAAe9E,OAAOL,SAAS+C,UAAUjD,iBAAIsF,YAAYJ,SAAAA,CAAAA;AAC/D,cAAM1B,WAAUjD,OAAOL,SAASmF,aAAAA,GAAeX;AAC/C,YAAI,CAAClB,UAAS;AACZ;QACF;AAEA,YAAI6B,kBAAiB,KAAK9E,OAAOL,SAAS+E,WAAW,GAAG;AAEtD,iBAAO;YACLrD,SAAS;kBAACC,mCAAavC,mCAAauD,QAAQ;gBAAEjC;gBAASF;cAAO,CAAA;;UAChE;QACF,OAAO;AACLH,iBAAOL,SAASiD,OAAOkC,eAAc,CAAA;QACvC;AAEA,eAAO;UACL9B,UAAU;YACRC,SAAS;cAAC;cAAyB;gBAAEC,IAAIC;cAAc;;YACvDhE,MAAM;cAAE8D,SAAAA;cAAS6B,cAAAA;YAAa;UAChC;UACAzD,SAAS;gBACPC,mCAAaY,kCAAoBC,WAAW;cAC1CjD,MAAM;cACNkD,YAAY;gBACVJ,SAAS1B,MAAM2B;gBACfI,UAAUrC,OAAOiC;gBACjB0C,WAAW1B,SAAQhB;cACrB;YACF,CAAA;;QAEJ;MACF,OAAO;AACL,YAAI6C,iBAAiB/C,UAAa,CAACkB,SAAS;AAC1C;QACF;AAEAjD,eAAOL,SAASiD,OAAOkC,cAAc,GAAGrF,iBAAIH,KAAK2D,OAAAA,CAAAA;AACjD,eAAO;UACL5B,SAAS;gBACPC,mCAAaY,kCAAoBC,WAAW;cAC1CjD,MAAM;cACNkD,YAAY;gBACVJ,SAAS1B,MAAM2B;gBACfI,UAAUrC,OAAOiC;gBACjB0C,WAAW1B,QAAQhB;cACrB;YACF,CAAA;;QAEJ;MACF;IACF;EACF,CAAA;CACD;",
|
|
6
|
+
"names": ["import_types", "import_echo", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "ThreadAction", "CreateChannel", "resolve", "name", "data", "object", "Obj", "make", "ChannelType", "defaultThread", "Ref", "ThreadType", "messages", "status", "threads", "CreateChannelThread", "channel", "thread", "push", "Create", "anchor", "_anchor", "subject", "space", "getSpace", "invariant", "state", "getCapability", "ThreadCapabilities", "MutableState", "subjectId", "fullyQualifiedId", "Relation", "AnchoredTo", "RelationSourceId", "RelationTargetId", "draft", "drafts", "intents", "createIntent", "Select", "current", "DeckAction", "ChangeCompanion", "primary", "companion", "ATTENDABLE_PATH_SEPARATOR", "ToggleResolved", "undefined", "spaceId", "id", "ObservabilityAction", "SendEvent", "properties", "threadId", "Delete", "_thread", "undo", "index", "findIndex", "a", "splice", "batch", "db", "remove", "undoable", "message", "ns", "THREAD_PLUGIN", "add", "AddMessage", "sender", "text", "DataType", "Message", "created", "Date", "toISOString", "blocks", "type", "find", "filter", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "source", "fields", "threadLength", "length", "messageId", "messageLength", "DeleteMessage", "messageIndex", "hasObjectId"]
|
|
7
|
+
}
|
|
@@ -16,11 +16,11 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var markdown_GNFW2XDO_exports = {};
|
|
20
|
+
__export(markdown_GNFW2XDO_exports, {
|
|
21
21
|
default: () => markdown_default
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
23
|
+
module.exports = __toCommonJS(markdown_GNFW2XDO_exports);
|
|
24
24
|
var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
|
|
25
25
|
var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
|
|
26
26
|
var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
|
|
@@ -33,31 +33,32 @@ var import_react_ui_editor = require("@dxos/react-ui-editor");
|
|
|
33
33
|
var import_view2 = require("@codemirror/view");
|
|
34
34
|
var import_signals_core = require("@preact/signals-core");
|
|
35
35
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
36
|
+
var import_echo2 = require("@dxos/echo");
|
|
36
37
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
37
|
-
var
|
|
38
|
+
var import_echo3 = require("@dxos/react-client/echo");
|
|
38
39
|
var import_react_ui_editor2 = require("@dxos/react-ui-editor");
|
|
39
40
|
var import_schema = require("@dxos/schema");
|
|
40
41
|
var getName = (doc, anchor) => {
|
|
41
42
|
if (doc.content) {
|
|
42
43
|
const [start, end] = anchor.split(":");
|
|
43
|
-
return (0,
|
|
44
|
+
return (0, import_echo3.getTextInRange)((0, import_echo3.createDocAccessor)(doc.content.target, [
|
|
44
45
|
"content"
|
|
45
46
|
]), start, end);
|
|
46
47
|
}
|
|
47
48
|
};
|
|
48
49
|
var threads = (state, doc, dispatch) => {
|
|
49
|
-
const space = doc && (0,
|
|
50
|
+
const space = doc && (0, import_echo3.getSpace)(doc);
|
|
50
51
|
if (!doc || !space || !dispatch) {
|
|
51
52
|
return [
|
|
52
53
|
(0, import_react_ui_editor2.comments)()
|
|
53
54
|
];
|
|
54
55
|
}
|
|
55
|
-
const query = space.db.query(
|
|
56
|
+
const query = space.db.query(import_echo2.Query.select(import_echo2.Filter.ids(doc.id)).targetOf(import_schema.AnchoredTo));
|
|
56
57
|
const unsubscribe = query.subscribe();
|
|
57
58
|
const anchors = (0, import_signals_core.computed)(() => query.objects.filter((anchor) => {
|
|
58
59
|
const thread = anchor[import_echo_schema.RelationSourceId];
|
|
59
|
-
return
|
|
60
|
-
}).concat(state.drafts[(0,
|
|
60
|
+
return import_echo2.Obj.instanceOf(import_chunk_TKHJVC2C.ThreadType, thread) && thread.status !== "resolved";
|
|
61
|
+
}).concat(state.drafts[(0, import_echo3.fullyQualifiedId)(doc)] ?? []));
|
|
61
62
|
return [
|
|
62
63
|
import_view2.EditorView.domEventHandlers({
|
|
63
64
|
destroy: () => {
|
|
@@ -77,12 +78,12 @@ var threads = (state, doc, dispatch) => {
|
|
|
77
78
|
});
|
|
78
79
|
}
|
|
79
80
|
}),
|
|
80
|
-
(0, import_react_ui_editor2.createExternalCommentSync)((0,
|
|
81
|
-
id: (0,
|
|
81
|
+
(0, import_react_ui_editor2.createExternalCommentSync)((0, import_echo3.fullyQualifiedId)(doc), (sink) => (0, import_signals_core.effect)(() => sink()), () => anchors.value.filter((anchor) => anchor.anchor).map((anchor) => ({
|
|
82
|
+
id: (0, import_echo3.fullyQualifiedId)(anchor[import_echo_schema.RelationSourceId]),
|
|
82
83
|
cursor: anchor.anchor
|
|
83
84
|
}))),
|
|
84
85
|
(0, import_react_ui_editor2.comments)({
|
|
85
|
-
id: (0,
|
|
86
|
+
id: (0, import_echo3.fullyQualifiedId)(doc),
|
|
86
87
|
onCreate: ({ cursor }) => {
|
|
87
88
|
const name = getName(doc, cursor);
|
|
88
89
|
void dispatch((0, import_app_framework2.createIntent)(import_chunk_TKHJVC2C.ThreadAction.Create, {
|
|
@@ -92,29 +93,29 @@ var threads = (state, doc, dispatch) => {
|
|
|
92
93
|
}));
|
|
93
94
|
},
|
|
94
95
|
onDelete: ({ id }) => {
|
|
95
|
-
const draft = state.drafts[(0,
|
|
96
|
+
const draft = state.drafts[(0, import_echo3.fullyQualifiedId)(doc)];
|
|
96
97
|
if (draft) {
|
|
97
|
-
const index = draft.findIndex((thread2) => (0,
|
|
98
|
+
const index = draft.findIndex((thread2) => (0, import_echo3.fullyQualifiedId)(thread2) === id);
|
|
98
99
|
if (index !== -1) {
|
|
99
100
|
draft.splice(index, 1);
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
|
-
const thread = query.objects.find((object) => (0,
|
|
103
|
+
const thread = query.objects.find((object) => (0, import_echo3.getSource)(object).id === id);
|
|
103
104
|
if (thread) {
|
|
104
105
|
thread.anchor = void 0;
|
|
105
106
|
}
|
|
106
107
|
},
|
|
107
108
|
onUpdate: ({ id, cursor }) => {
|
|
108
|
-
const draft = state.drafts[(0,
|
|
109
|
+
const draft = state.drafts[(0, import_echo3.fullyQualifiedId)(doc)]?.find((thread) => (0, import_echo3.fullyQualifiedId)(thread) === id);
|
|
109
110
|
if (draft) {
|
|
110
111
|
const thread = draft[import_echo_schema.RelationSourceId];
|
|
111
112
|
thread.name = getName(doc, cursor);
|
|
112
113
|
draft.anchor = cursor;
|
|
113
114
|
}
|
|
114
|
-
const relation = query.objects.find((object) => (0,
|
|
115
|
+
const relation = query.objects.find((object) => (0, import_echo3.getSource)(object).id === id);
|
|
115
116
|
if (relation) {
|
|
116
|
-
const thread = (0,
|
|
117
|
-
if (
|
|
117
|
+
const thread = (0, import_echo3.getSource)(relation);
|
|
118
|
+
if (import_echo2.Obj.instanceOf(import_chunk_TKHJVC2C.ThreadType, thread)) {
|
|
118
119
|
thread.name = getName(doc, cursor);
|
|
119
120
|
relation.anchor = cursor;
|
|
120
121
|
}
|
|
@@ -175,4 +176,4 @@ var selectionOverlapsComment = (state) => {
|
|
|
175
176
|
}
|
|
176
177
|
return false;
|
|
177
178
|
};
|
|
178
|
-
//# sourceMappingURL=markdown-
|
|
179
|
+
//# sourceMappingURL=markdown-GNFW2XDO.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/markdown.ts", "../../../src/extensions/threads.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\n\nimport { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';\nimport { ATTENDABLE_PATH_SEPARATOR, DeckAction } from '@dxos/plugin-deck/types';\nimport { MarkdownCapabilities } from '@dxos/plugin-markdown';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { commentClickedEffect, commentsState, type EditorState, overlap } from '@dxos/react-ui-editor';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { threads } from '../extensions';\n\nexport default (context: PluginContext) =>\n contributes(MarkdownCapabilities.Extensions, [\n ({ document: doc }) => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n return threads(state, doc, dispatch);\n },\n ({ document: doc }) => {\n const { state } = context.getCapability(ThreadCapabilities.MutableState);\n\n return EditorView.updateListener.of((update) => {\n if (update.docChanged || update.selectionSet) {\n state.toolbar[fullyQualifiedId(doc)] = selectionOverlapsComment(update.state);\n }\n });\n },\n ({ document: doc }) => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const id = fullyQualifiedId(doc);\n\n return EditorView.updateListener.of((update) => {\n update.transactions.forEach((transaction) => {\n transaction.effects.forEach(async (effect) => {\n if (effect.is(commentClickedEffect)) {\n void dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: id,\n companion: `${id}${ATTENDABLE_PATH_SEPARATOR}comments`,\n }),\n );\n }\n });\n });\n });\n },\n ]);\n\nconst selectionOverlapsComment = (state: EditorState): boolean => {\n // May not be defined if thread plugin not installed.\n const commentState = state.field(commentsState, false);\n if (commentState === undefined) {\n return false;\n }\n\n const { selection } = state;\n for (const range of selection.ranges) {\n if (commentState.comments.some(({ range: commentRange }) => overlap(commentRange, range))) {\n return true;\n }\n }\n\n return false;\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 { Filter, Obj, Query } from '@dxos/echo';\nimport { RelationSourceId } from '@dxos/echo-schema';\nimport { type DocumentType } from '@dxos/plugin-markdown/types';\nimport { getSpace, getTextInRange, createDocAccessor, fullyQualifiedId, getSource } from '@dxos/react-client/echo';\nimport { comments, createExternalCommentSync } from '@dxos/react-ui-editor';\nimport { AnchoredTo } from '@dxos/schema';\n\nimport { ThreadAction, ThreadType, 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 const query = space.db.query(Query.select(Filter.ids(doc.id)).targetOf(AnchoredTo));\n const unsubscribe = query.subscribe();\n\n const anchors = computed(() =>\n query.objects\n .filter((anchor) => {\n const thread = anchor[RelationSourceId];\n return Obj.instanceOf(ThreadType, thread) && thread.status !== 'resolved';\n })\n .concat(state.drafts[fullyQualifiedId(doc)] ?? []),\n );\n\n return [\n EditorView.domEventHandlers({\n destroy: () => {\n unsubscribe();\n },\n }),\n\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n anchors.value.forEach((anchor) => {\n if (anchor.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, anchor.anchor);\n const thread = anchor[RelationSourceId] as ThreadType;\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 anchors.value\n .filter((anchor) => anchor.anchor)\n .map((anchor) => ({ id: fullyQualifiedId(anchor[RelationSourceId]), cursor: anchor.anchor })),\n ),\n\n comments({\n id: fullyQualifiedId(doc),\n onCreate: ({ cursor }) => {\n const name = getName(doc, cursor);\n void dispatch(createIntent(ThreadAction.Create, { anchor: 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 = query.objects.find((object) => getSource(object).id === id);\n if (thread) {\n thread.anchor = undefined;\n }\n },\n onUpdate: ({ id, cursor }) => {\n const draft = state.drafts[fullyQualifiedId(doc)]?.find((thread) => fullyQualifiedId(thread) === id);\n if (draft) {\n const thread = draft[RelationSourceId] as ThreadType;\n thread.name = getName(doc, cursor);\n draft.anchor = cursor;\n }\n\n const relation = query.objects.find((object) => getSource(object).id === id);\n if (relation) {\n const thread = getSource(relation);\n if (Obj.instanceOf(ThreadType, thread)) {\n thread.name = getName(doc, cursor);\n relation.anchor = cursor;\n }\n }\n },\n onSelect: ({ selection }) => {\n const current = selection.current ?? selection.closest;\n if (current) {\n void dispatch(createIntent(ThreadAction.Select, { current }));\n }\n },\n }),\n ];\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_view", "import_app_framework", "import_echo", "import_react_ui_editor", "getName", "doc", "anchor", "content", "start", "end", "split", "getTextInRange", "createDocAccessor", "target", "threads", "state", "dispatch", "space", "getSpace", "comments", "query", "db", "Query", "select", "Filter", "ids", "id", "targetOf", "AnchoredTo", "unsubscribe", "subscribe", "anchors", "computed", "objects", "filter", "thread", "RelationSourceId", "Obj", "instanceOf", "ThreadType", "status", "concat", "drafts", "fullyQualifiedId", "EditorView", "domEventHandlers", "destroy", "updateListener", "of", "update", "docChanged", "value", "forEach", "name", "createExternalCommentSync", "sink", "effect", "map", "cursor", "onCreate", "createIntent", "ThreadAction", "Create", "subject", "onDelete", "draft", "index", "findIndex", "splice", "find", "object", "getSource", "undefined", "onUpdate", "relation", "onSelect", "selection", "current", "closest", "Select", "context", "contributes", "MarkdownCapabilities", "Extensions", "document", "dispatchPromise", "getCapability", "Capabilities", "IntentDispatcher", "ThreadCapabilities", "MutableState", "selectionSet", "toolbar", "selectionOverlapsComment", "transactions", "transaction", "effects", "is", "commentClickedEffect", "DeckAction", "ChangeCompanion", "primary", "companion", "ATTENDABLE_PATH_SEPARATOR", "commentState", "field", "commentsState", "range", "ranges", "some", "commentRange", "overlap"]
|
|
7
|
+
}
|