@dxos/plugin-markdown 0.9.0 → 0.9.1-staging.ee54ba693a
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/neutral/{MarkdownArticle-LWT5RFFJ.mjs → MarkdownArticle-ZHBXH7YF.mjs} +5 -7
- package/dist/lib/neutral/MarkdownArticle-ZHBXH7YF.mjs.map +7 -0
- package/dist/lib/neutral/{MarkdownCard-TBLIRDBO.mjs → MarkdownCard-2HUXCGZP.mjs} +3 -3
- package/dist/lib/neutral/MarkdownCard-2HUXCGZP.mjs.map +7 -0
- package/dist/lib/neutral/MarkdownPlugin.mjs +8 -15
- package/dist/lib/neutral/MarkdownPlugin.mjs.map +3 -3
- package/dist/lib/neutral/MarkdownPlugin.node.mjs +4 -2
- package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +3 -3
- package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +6 -17
- package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +4 -4
- package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs +43 -0
- package/dist/lib/neutral/MarkdownSettings-5VMOYMND.mjs.map +7 -0
- package/dist/lib/neutral/{anchor-sort-UXN4RHFX.mjs → anchor-sort-QF7UDG2A.mjs} +4 -3
- package/dist/lib/neutral/anchor-sort-QF7UDG2A.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +10 -16
- package/dist/lib/neutral/capabilities/index.mjs.map +3 -3
- package/dist/lib/neutral/capabilities/node.mjs +5 -3
- package/dist/lib/neutral/capabilities/node.mjs.map +3 -3
- package/dist/lib/neutral/chunk-2V6A5NDQ.mjs +8 -0
- package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs → chunk-ANHHOTCD.mjs} +3 -4
- package/dist/lib/neutral/{operation-handler-2ARMPBGZ.mjs.map → chunk-ANHHOTCD.mjs.map} +1 -1
- package/dist/lib/neutral/chunk-CNYFGIDS.mjs +32 -0
- package/dist/lib/neutral/chunk-CNYFGIDS.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-LXNSKCPD.mjs → chunk-EV4ZOL4P.mjs} +12 -11
- package/dist/lib/neutral/chunk-EV4ZOL4P.mjs.map +7 -0
- package/dist/lib/neutral/chunk-OC3JD73N.mjs +43 -0
- package/dist/lib/neutral/chunk-OC3JD73N.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YJF6XOXX.mjs +175 -0
- package/dist/lib/neutral/chunk-YJF6XOXX.mjs.map +7 -0
- package/dist/lib/neutral/chunk-YMBC62S7.mjs +14 -0
- package/dist/lib/neutral/chunk-YMBC62S7.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-Y2LQRUU7.mjs → chunk-ZJ3GWRUJ.mjs} +24 -23
- package/dist/lib/neutral/chunk-ZJ3GWRUJ.mjs.map +7 -0
- package/dist/lib/neutral/{comment-config-EGY7RPPW.mjs → comment-config-M5OGFULS.mjs} +6 -4
- package/dist/lib/neutral/comment-config-M5OGFULS.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +19 -57
- package/dist/lib/neutral/components/index.mjs.map +4 -4
- package/dist/lib/neutral/containers/index.mjs +5 -3
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/{create-JK35XC4R.mjs → create-OQUMKL5I.mjs} +2 -2
- package/dist/lib/neutral/{create-markdown-7MLE625M.mjs → create-markdown-4O5FDA77.mjs} +2 -2
- package/dist/lib/neutral/{create-object-MU2LGXG6.mjs → create-object-RSEWTCMM.mjs} +2 -6
- package/dist/lib/neutral/create-object-RSEWTCMM.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +53 -23
- package/dist/lib/neutral/hooks/index.mjs.map +3 -3
- package/dist/lib/neutral/index.mjs +10 -16
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/meta.mjs +1 -1
- package/dist/lib/neutral/{open-5YC77C4O.mjs → open-BAZIRXII.mjs} +2 -2
- package/dist/lib/neutral/operation-handler-SDCXGMGK.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +2 -2
- package/dist/lib/neutral/plugin.workerd.mjs +12 -0
- package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/{react-surface-XYZJBKHZ.mjs → react-surface-37GL3UVG.mjs} +10 -15
- package/dist/lib/neutral/react-surface-37GL3UVG.mjs.map +7 -0
- package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs → scroll-to-anchor-I6HFE5AH.mjs} +2 -2
- package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs → set-view-mode-NY5OYYIM.mjs} +2 -2
- package/dist/lib/neutral/{settings-TDGDLCUR.mjs → settings-O6O6HT3I.mjs} +3 -3
- package/dist/lib/neutral/settings-O6O6HT3I.mjs.map +7 -0
- package/dist/lib/neutral/skill-definition-ET7BYY47.mjs +8 -0
- package/dist/lib/neutral/skill-definition-ET7BYY47.mjs.map +7 -0
- package/dist/lib/neutral/skills/index.mjs +8 -0
- package/dist/lib/neutral/skills/index.mjs.map +7 -0
- package/dist/lib/neutral/state-3BR7L6CW.mjs +69 -0
- package/dist/lib/neutral/state-3BR7L6CW.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +2 -2
- package/dist/lib/neutral/testing.mjs.map +3 -3
- package/dist/lib/neutral/translations.mjs +1 -1
- package/dist/lib/neutral/translations.mjs.map +3 -3
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs +24 -0
- package/dist/lib/neutral/update-markdown-M4PTA6VS.mjs.map +7 -0
- package/dist/types/dx.config.d.ts +28 -0
- package/dist/types/dx.config.d.ts.map +1 -0
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -1
- package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts +1 -2
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
- package/dist/types/src/capabilities/comment-config.d.ts +1 -2
- package/dist/types/src/capabilities/comment-config.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -7
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -1
- package/dist/types/src/capabilities/editor-view-state.d.ts +7 -0
- package/dist/types/src/capabilities/editor-view-state.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +7 -16
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/node.d.ts +2 -6
- package/dist/types/src/capabilities/node.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -2
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
- package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +1 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +2 -2
- package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +5 -6
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +3 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +2 -2
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -1
- package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts +17 -0
- package/dist/types/src/components/PreviewComponent/PreviewComponent.d.ts.map +1 -0
- package/dist/types/src/components/PreviewComponent/index.d.ts +2 -0
- package/dist/types/src/components/PreviewComponent/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +6 -17
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -1
- package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -0
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useExtensions.d.ts +5 -5
- package/dist/types/src/hooks/useExtensions.d.ts.map +1 -1
- package/dist/types/src/hooks/useLinkQuery.d.ts +2 -2
- package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +32 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/update-markdown.d.ts.map +1 -1
- package/dist/types/src/plugin.workerd.d.ts +2 -0
- package/dist/types/src/plugin.workerd.d.ts.map +1 -0
- package/dist/types/src/skills/index.d.ts +2 -0
- package/dist/types/src/skills/index.d.ts.map +1 -0
- package/dist/types/src/skills/markdown-skill.d.ts +4 -0
- package/dist/types/src/skills/markdown-skill.d.ts.map +1 -0
- package/dist/types/src/types/Markdown.d.ts +12 -20
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownOperation.d.ts +5 -28
- package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +2 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +31 -0
- package/package.json +67 -59
- package/src/MarkdownPlugin.node.ts +2 -1
- package/src/MarkdownPlugin.test.ts +1 -1
- package/src/MarkdownPlugin.tsx +7 -16
- package/src/MarkdownPlugin.workerd.ts +5 -2
- package/src/capabilities/anchor-sort.ts +3 -2
- package/src/capabilities/comment-config.ts +6 -9
- package/src/capabilities/create-object.ts +1 -4
- package/src/capabilities/editor-view-state.ts +28 -0
- package/src/capabilities/index.ts +2 -16
- package/src/capabilities/node.ts +1 -0
- package/src/capabilities/react-surface.tsx +29 -13
- package/src/capabilities/settings.ts +2 -2
- package/src/capabilities/skill-definition.ts +14 -0
- package/src/capabilities/state.ts +8 -4
- package/src/components/MarkdownEditor/FileUpload.tsx +2 -2
- package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +72 -30
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +14 -40
- package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +7 -6
- package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +2 -2
- package/src/components/PreviewComponent/PreviewComponent.tsx +195 -0
- package/src/components/PreviewComponent/index.ts +5 -0
- package/src/components/index.ts +1 -4
- package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +3 -4
- package/src/containers/MarkdownArticle/MarkdownArticle.tsx +6 -6
- package/src/containers/MarkdownCard/MarkdownCard.tsx +2 -2
- package/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.tsx +1 -1
- package/src/containers/MarkdownSettings/MarkdownSettings.tsx +54 -0
- package/src/containers/index.ts +1 -0
- package/src/hooks/useEditorMenuOptions.ts +2 -2
- package/src/hooks/useExtensions.tsx +42 -22
- package/src/hooks/useLinkQuery.ts +5 -3
- package/src/index.ts +1 -2
- package/src/meta.ts +2 -22
- package/src/operations/create.conversations.json +1 -1
- package/src/operations/create.test.ts +5 -12
- package/src/operations/update-markdown.ts +7 -27
- package/src/operations/update.conversations.json +1 -1
- package/src/operations/update.test.ts +86 -16
- package/src/plugin.workerd.ts +5 -0
- package/src/skills/index.ts +5 -0
- package/src/{blueprints/markdown-blueprint.ts → skills/markdown-skill.ts} +8 -7
- package/src/testing.ts +2 -2
- package/src/translations.ts +1 -1
- package/src/types/Markdown.ts +20 -19
- package/src/types/MarkdownCapabilities.ts +7 -5
- package/src/types/MarkdownEvents.ts +1 -1
- package/src/types/MarkdownOperation.ts +12 -6
- package/src/types/types.ts +2 -7
- package/dist/lib/neutral/MarkdownArticle-LWT5RFFJ.mjs.map +0 -7
- package/dist/lib/neutral/MarkdownCard-TBLIRDBO.mjs.map +0 -7
- package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +0 -32
- package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +0 -7
- package/dist/lib/neutral/anchor-sort-UXN4RHFX.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs +0 -67
- package/dist/lib/neutral/app-graph-builder-BWBA23FF.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs +0 -56
- package/dist/lib/neutral/app-graph-serializer-EN5E3BMG.mjs.map +0 -7
- package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs +0 -15
- package/dist/lib/neutral/blueprint-definition-DSPXK77L.mjs.map +0 -7
- package/dist/lib/neutral/blueprints/index.mjs +0 -8
- package/dist/lib/neutral/chunk-36QFEVOZ.mjs +0 -30
- package/dist/lib/neutral/chunk-36QFEVOZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-67DKWOKF.mjs +0 -10
- package/dist/lib/neutral/chunk-67DKWOKF.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CIJD7P6X.mjs +0 -8
- package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +0 -7
- package/dist/lib/neutral/chunk-Y2LQRUU7.mjs.map +0 -7
- package/dist/lib/neutral/comment-config-EGY7RPPW.mjs.map +0 -7
- package/dist/lib/neutral/create-object-MU2LGXG6.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs +0 -14
- package/dist/lib/neutral/navigation-resolver-3KBOMN4U.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-XYZJBKHZ.mjs.map +0 -7
- package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +0 -7
- package/dist/lib/neutral/state-5COCF5PN.mjs +0 -44
- package/dist/lib/neutral/state-5COCF5PN.mjs.map +0 -7
- package/dist/lib/neutral/update-markdown-NNINDDV5.mjs +0 -44
- package/dist/lib/neutral/update-markdown-NNINDDV5.mjs.map +0 -7
- package/dist/types/src/blueprints/index.d.ts +0 -2
- package/dist/types/src/blueprints/index.d.ts.map +0 -1
- package/dist/types/src/blueprints/markdown-blueprint.d.ts +0 -4
- package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -6
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -5
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -6
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -6
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/paths.d.ts +0 -3
- package/dist/types/src/paths.d.ts.map +0 -1
- package/src/blueprints/index.ts +0 -5
- package/src/capabilities/app-graph-builder.ts +0 -63
- package/src/capabilities/app-graph-serializer.ts +0 -64
- package/src/capabilities/blueprint-definition.ts +0 -19
- package/src/capabilities/navigation-resolver.ts +0 -19
- package/src/components/MarkdownSettings/MarkdownSettings.tsx +0 -35
- package/src/paths.ts +0 -11
- /package/dist/lib/neutral/{chunk-CIJD7P6X.mjs.map → chunk-2V6A5NDQ.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-JK35XC4R.mjs.map → create-OQUMKL5I.mjs.map} +0 -0
- /package/dist/lib/neutral/{create-markdown-7MLE625M.mjs.map → create-markdown-4O5FDA77.mjs.map} +0 -0
- /package/dist/lib/neutral/{open-5YC77C4O.mjs.map → open-BAZIRXII.mjs.map} +0 -0
- /package/dist/lib/neutral/{blueprints/index.mjs.map → operation-handler-SDCXGMGK.mjs.map} +0 -0
- /package/dist/lib/neutral/{scroll-to-anchor-GAFB7W55.mjs.map → scroll-to-anchor-I6HFE5AH.mjs.map} +0 -0
- /package/dist/lib/neutral/{set-view-mode-N7UHYMPG.mjs.map → set-view-mode-NY5OYYIM.mjs.map} +0 -0
- /package/dist/types/src/{components → containers}/MarkdownSettings/MarkdownSettings.stories.d.ts +0 -0
- /package/dist/types/src/{components → containers}/MarkdownSettings/index.d.ts +0 -0
- /package/src/{components → containers}/MarkdownSettings/index.ts +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/skills/markdown-skill.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Skill, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nimport { Markdown, MarkdownOperation } from '#types';\n\nconst make = () =>\n Skill.make({\n key: Markdown.SKILL_KEY,\n name: 'Markdown',\n description: 'Work with markdown documents. Preferred over raw database operations.',\n tools: Skill.toolDefinitions({\n operations: [MarkdownOperation.Create, MarkdownOperation.Open, MarkdownOperation.Update],\n }),\n instructions: Template.make({\n // TODO(wittjosiah): Move example to function input schema annotation.\n source: trim`\n {{! Markdown }}\n\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n\n Example:\n ${'```'}diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ${'```'}\n `,\n }),\n agentCanEnable: true,\n });\n\nconst skill: Skill.Definition = {\n key: Markdown.SKILL_KEY,\n make,\n};\n\nexport default skill;\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,OAAOC,gBAAgB;AAChC,SAASC,YAAY;AAErB,SAASC,UAAUC,yBAAyB;AAE5C,IAAMC,OAAO,MACXL,MAAMK,KAAK;EACTC,KAAKH,SAASI;EACdC,MAAM;EACNC,aAAa;EACbC,OAAOV,MAAMW,gBAAgB;IAC3BC,YAAY;MAACR,kBAAkBS;MAAQT,kBAAkBU;MAAMV,kBAAkBW;;EACnF,CAAA;EACAC,cAAcf,SAASI,KAAK;;IAE1BY,QAAQf;;;;;;;;UAQJ,KAAA;;;;;UAKA,KAAA;;EAEN,CAAA;EACAgB,gBAAgB;AAClB,CAAA;AAEF,IAAMC,QAA0B;EAC9Bb,KAAKH,SAASI;EACdF;AACF;AAEA,IAAA,yBAAec;",
|
|
6
|
+
"names": ["Skill", "Template", "trim", "Markdown", "MarkdownOperation", "make", "key", "SKILL_KEY", "name", "description", "tools", "toolDefinitions", "operations", "Create", "Open", "Update", "instructions", "source", "agentCanEnable", "skill"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { Plugin } from "@dxos/app-framework";
|
|
3
|
+
|
|
4
|
+
// dx.config.ts
|
|
5
|
+
import { Config2 } from "@dxos/app-framework/config";
|
|
6
|
+
import { trim } from "@dxos/util";
|
|
7
|
+
var dx_config_default = Config2.make({
|
|
8
|
+
plugin: {
|
|
9
|
+
key: "org.dxos.plugin.markdown",
|
|
10
|
+
name: "Markdown",
|
|
11
|
+
author: "DXOS",
|
|
12
|
+
description: trim`
|
|
13
|
+
A full-featured markdown editor for authoring documents in your space. Edits flow through a collaborative CodeMirror surface backed by ECHO Text, so every keystroke replicates to other peers in real time without merge conflicts or lost work.
|
|
14
|
+
|
|
15
|
+
Documents can be opened in source, preview, or read-only mode and rendered as a full-surface article or as embeddable cards. An optional formatting toolbar exposes headings, lists, links, and other common markdown actions, and dispositional toolbar actions contributed by other plugins are surfaced inline alongside it.
|
|
16
|
+
|
|
17
|
+
The editor integrates with the rest of the workspace through @ references that link to any ECHO object, image and file uploads stored in the active space, and anchored comment threads on text ranges. Comments can optionally be routed to an AI agent on every message or only on @mention.
|
|
18
|
+
|
|
19
|
+
A built-in skill exposes create, open, and update operations as tools for AI agents. Updates are applied as compact find-and-replace diffs against the document, making it safe for agents to edit large documents incrementally while you continue collaborating.
|
|
20
|
+
`,
|
|
21
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown",
|
|
22
|
+
icon: {
|
|
23
|
+
key: "ph--text-aa--regular",
|
|
24
|
+
hue: "indigo"
|
|
25
|
+
},
|
|
26
|
+
screenshots: [
|
|
27
|
+
{
|
|
28
|
+
dark: "https://customer-5rxcjpyab08avpmn.cloudflarestream.com/cdf2656365bb1fd327c1fc2105d75e5a/iframe?poster=https%3A%2F%2Fcustomer-5rxcjpyab08avpmn.cloudflarestream.com%2Fcdf2656365bb1fd327c1fc2105d75e5a%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
dark: "https://dxos.network/plugin-details-markdown-dark.png"
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// src/meta.ts
|
|
38
|
+
var meta = Plugin.getMetaFromConfig(dx_config_default);
|
|
39
|
+
|
|
40
|
+
export {
|
|
41
|
+
meta
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=chunk-OC3JD73N.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts", "../../../dx.config.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.markdown',\n name: 'Markdown',\n author: 'DXOS',\n description: trim`\n A full-featured markdown editor for authoring documents in your space. Edits flow through a collaborative CodeMirror surface backed by ECHO Text, so every keystroke replicates to other peers in real time without merge conflicts or lost work.\n\n Documents can be opened in source, preview, or read-only mode and rendered as a full-surface article or as embeddable cards. An optional formatting toolbar exposes headings, lists, links, and other common markdown actions, and dispositional toolbar actions contributed by other plugins are surfaced inline alongside it.\n\n The editor integrates with the rest of the workspace through @ references that link to any ECHO object, image and file uploads stored in the active space, and anchored comment threads on text ranges. Comments can optionally be routed to an AI agent on every message or only on @mention.\n\n A built-in skill exposes create, open, and update operations as tools for AI agents. Updates are applied as compact find-and-replace diffs against the document, making it safe for agents to edit large documents incrementally while you continue collaborating.\n `,\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',\n icon: { key: 'ph--text-aa--regular', hue: 'indigo' },\n screenshots: [\n {\n dark: 'https://customer-5rxcjpyab08avpmn.cloudflarestream.com/cdf2656365bb1fd327c1fc2105d75e5a/iframe?poster=https%3A%2F%2Fcustomer-5rxcjpyab08avpmn.cloudflarestream.com%2Fcdf2656365bb1fd327c1fc2105d75e5a%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600',\n },\n { dark: 'https://dxos.network/plugin-details-markdown-dark.png' },\n ],\n },\n});\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,cAAc;;;ACAvB,SAASC,eAAe;AACxB,SAASC,YAAY;AAErB,IAAA,oBAAeD,QAAQE,KAAK;EAC1BC,QAAQ;IACNC,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRC,aAAaN;;;;;;;;;IASbO,QAAQ;IACRC,MAAM;MAAEL,KAAK;MAAwBM,KAAK;IAAS;IACnDC,aAAa;MACX;QACEC,MAAM;MACR;MACA;QAAEA,MAAM;MAAwD;;EAEpE;AACF,CAAA;;;ADtBO,IAAMC,OAAOC,OAAOC,kBAAkBC,iBAAAA;",
|
|
6
|
+
"names": ["Plugin", "Config2", "trim", "make", "plugin", "key", "name", "author", "description", "source", "icon", "hue", "screenshots", "dark", "meta", "Plugin", "getMetaFromConfig", "config"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// src/components/PreviewComponent/PreviewComponent.tsx
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { Surface, useOperationInvoker } from "@dxos/app-framework/ui";
|
|
4
|
+
import { LayoutOperation, Paths } from "@dxos/app-toolkit";
|
|
5
|
+
import { AppSurface } from "@dxos/app-toolkit/ui";
|
|
6
|
+
import { Obj } from "@dxos/echo";
|
|
7
|
+
import { URI } from "@dxos/keys";
|
|
8
|
+
import { useClient } from "@dxos/react-client";
|
|
9
|
+
import { Icon, IconButton } from "@dxos/react-ui";
|
|
10
|
+
import { ResizeHandle, resizeAttributes, sizeStyle } from "@dxos/react-ui-dnd";
|
|
11
|
+
var HEIGHT_PATTERN = /^(.*)\|(\d+)$/;
|
|
12
|
+
var parseEmbedLabel = (alt) => {
|
|
13
|
+
const match = HEIGHT_PATTERN.exec(alt ?? "");
|
|
14
|
+
if (match) {
|
|
15
|
+
const height = Number.parseInt(match[2], 10);
|
|
16
|
+
if (Number.isFinite(height) && height > 0) {
|
|
17
|
+
return {
|
|
18
|
+
baseLabel: match[1],
|
|
19
|
+
height
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
baseLabel: alt ?? ""
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
var formatEmbedLabel = (baseLabel, height) => height != null ? `${baseLabel}|${height}` : baseLabel;
|
|
28
|
+
var MIN_SIZE = 6;
|
|
29
|
+
var FALLBACK_SIZE = 320;
|
|
30
|
+
var scrollTopIntoViewIfNeeded = (element) => {
|
|
31
|
+
let parent = element.parentElement;
|
|
32
|
+
while (parent) {
|
|
33
|
+
const { overflowY } = getComputedStyle(parent);
|
|
34
|
+
if ((overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay") && parent.scrollHeight > parent.clientHeight) {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
parent = parent.parentElement;
|
|
38
|
+
}
|
|
39
|
+
const elementTop = element.getBoundingClientRect().top;
|
|
40
|
+
const viewTop = parent ? parent.getBoundingClientRect().top : 0;
|
|
41
|
+
const viewBottom = parent ? parent.getBoundingClientRect().bottom : window.innerHeight;
|
|
42
|
+
if (elementTop < viewTop || elementTop > viewBottom) {
|
|
43
|
+
element.scrollIntoView({
|
|
44
|
+
block: "start",
|
|
45
|
+
inline: "nearest"
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var PreviewComponent = ({ dxn, label: alt, onOpen, view, range }) => {
|
|
50
|
+
const client = useClient();
|
|
51
|
+
const { invokePromise } = useOperationInvoker();
|
|
52
|
+
const containerRef = useRef(null);
|
|
53
|
+
const uri = dxn ? URI.make(dxn) : void 0;
|
|
54
|
+
const subject = uri ? client.graph.makeRef(uri).target : void 0;
|
|
55
|
+
const remSize = useMemo(() => parseFloat(getComputedStyle(document.documentElement).fontSize) || 16, []);
|
|
56
|
+
const { height } = parseEmbedLabel(alt);
|
|
57
|
+
const [size, setSize] = useState(height != null ? height / remSize : "min-content");
|
|
58
|
+
const extrinsic = size !== "min-content";
|
|
59
|
+
const data = useMemo(() => subject ? {
|
|
60
|
+
subject,
|
|
61
|
+
attendableId: dxn,
|
|
62
|
+
extrinsic
|
|
63
|
+
} : void 0, [
|
|
64
|
+
subject,
|
|
65
|
+
dxn,
|
|
66
|
+
extrinsic
|
|
67
|
+
]);
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
setSize(height != null ? height / remSize : "min-content");
|
|
70
|
+
}, [
|
|
71
|
+
height,
|
|
72
|
+
remSize
|
|
73
|
+
]);
|
|
74
|
+
const handleResize = useCallback((next, commit) => {
|
|
75
|
+
setSize(next);
|
|
76
|
+
if (!commit || typeof next !== "number" || !view) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const doc = view.state.doc.toString();
|
|
80
|
+
const marker = `](${dxn})`;
|
|
81
|
+
let open = -1;
|
|
82
|
+
let close = -1;
|
|
83
|
+
for (let at = doc.indexOf(marker); at >= 0; at = doc.indexOf(marker, at + marker.length)) {
|
|
84
|
+
const start = doc.lastIndexOf("`;
|
|
95
|
+
view.dispatch({
|
|
96
|
+
changes: {
|
|
97
|
+
from: open,
|
|
98
|
+
to: close + marker.length,
|
|
99
|
+
insert
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
requestAnimationFrame(() => {
|
|
103
|
+
if (containerRef.current) {
|
|
104
|
+
scrollTopIntoViewIfNeeded(containerRef.current);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}, [
|
|
108
|
+
view,
|
|
109
|
+
range,
|
|
110
|
+
dxn,
|
|
111
|
+
remSize
|
|
112
|
+
]);
|
|
113
|
+
const handleOpen = useCallback(() => {
|
|
114
|
+
if (!uri || !subject) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (onOpen) {
|
|
118
|
+
onOpen(uri);
|
|
119
|
+
} else {
|
|
120
|
+
void invokePromise?.(LayoutOperation.Open, {
|
|
121
|
+
subject: [
|
|
122
|
+
Paths.getObjectPathFromObject(subject)
|
|
123
|
+
],
|
|
124
|
+
navigation: "immediate"
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}, [
|
|
128
|
+
uri,
|
|
129
|
+
subject,
|
|
130
|
+
onOpen,
|
|
131
|
+
invokePromise
|
|
132
|
+
]);
|
|
133
|
+
if (!uri || !subject || !data) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const objectLabel = Obj.getLabel(subject);
|
|
137
|
+
const objectIcon = Obj.getIcon(subject);
|
|
138
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
139
|
+
className: "relative grid scroll-mt-16",
|
|
140
|
+
style: sizeStyle(size, "vertical"),
|
|
141
|
+
...resizeAttributes,
|
|
142
|
+
ref: containerRef
|
|
143
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
144
|
+
className: "grid overflow-hidden border border-subdued-separator rounded-md"
|
|
145
|
+
}, /* @__PURE__ */ React.createElement(Surface.Surface, {
|
|
146
|
+
type: AppSurface.Section,
|
|
147
|
+
data,
|
|
148
|
+
limit: 1
|
|
149
|
+
})), /* @__PURE__ */ React.createElement("div", {
|
|
150
|
+
className: "absolute top-1 right-1 flex items-center justify-end gap-1"
|
|
151
|
+
}, /* @__PURE__ */ React.createElement("span", {
|
|
152
|
+
className: "dx-tag dx-tag--neutral flex items-center gap-1"
|
|
153
|
+
}, objectIcon && /* @__PURE__ */ React.createElement(Icon, {
|
|
154
|
+
icon: objectIcon.icon,
|
|
155
|
+
size: 4
|
|
156
|
+
}), objectLabel), /* @__PURE__ */ React.createElement(IconButton, {
|
|
157
|
+
density: "sm",
|
|
158
|
+
icon: "ph--arrow-square-out--regular",
|
|
159
|
+
iconOnly: true,
|
|
160
|
+
label: "Open",
|
|
161
|
+
variant: "ghost",
|
|
162
|
+
onClick: handleOpen
|
|
163
|
+
})), /* @__PURE__ */ React.createElement(ResizeHandle, {
|
|
164
|
+
side: "block-end",
|
|
165
|
+
fallbackSize: FALLBACK_SIZE,
|
|
166
|
+
minSize: MIN_SIZE,
|
|
167
|
+
size,
|
|
168
|
+
onSizeChange: handleResize
|
|
169
|
+
}));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
PreviewComponent
|
|
174
|
+
};
|
|
175
|
+
//# sourceMappingURL=chunk-YJF6XOXX.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/PreviewComponent/PreviewComponent.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, Paths } from '@dxos/app-toolkit';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { URI } from '@dxos/keys';\nimport { useClient } from '@dxos/react-client';\nimport { Icon, IconButton } from '@dxos/react-ui';\nimport { ResizeHandle, type Size, resizeAttributes, sizeStyle } from '@dxos/react-ui-dnd';\nimport { type XmlWidgetProps } from '@dxos/ui-editor';\n\nexport type PreviewComponentProps = XmlWidgetProps<{\n label: string;\n dxn: string;\n block?: boolean;\n suggest?: boolean;\n onOpen?: (dxn: URI.URI) => void;\n}>;\n\n// Persisted height (px) lives in the image alt text after the label, Obsidian-style: ``.\nconst HEIGHT_PATTERN = /^(.*)\\|(\\d+)$/;\n\nconst parseEmbedLabel = (alt: string): { baseLabel: string; height?: number } => {\n const match = HEIGHT_PATTERN.exec(alt ?? '');\n if (match) {\n const height = Number.parseInt(match[2], 10);\n if (Number.isFinite(height) && height > 0) {\n return { baseLabel: match[1], height };\n }\n }\n return { baseLabel: alt ?? '' };\n};\n\nconst formatEmbedLabel = (baseLabel: string, height?: number): string =>\n height != null ? `${baseLabel}|${height}` : baseLabel;\n\nconst MIN_SIZE = 6;\nconst FALLBACK_SIZE = 320;\n\n/** Scroll the element's top into view (honoring its `scroll-margin`) only if that top is not already visible. */\nconst scrollTopIntoViewIfNeeded = (element: HTMLElement): void => {\n let parent = element.parentElement;\n while (parent) {\n const { overflowY } = getComputedStyle(parent);\n if (\n (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') &&\n parent.scrollHeight > parent.clientHeight\n ) {\n break;\n }\n parent = parent.parentElement;\n }\n const elementTop = element.getBoundingClientRect().top;\n const viewTop = parent ? parent.getBoundingClientRect().top : 0;\n const viewBottom = parent ? parent.getBoundingClientRect().bottom : window.innerHeight;\n if (elementTop < viewTop || elementTop > viewBottom) {\n element.scrollIntoView({ block: 'start', inline: 'nearest' });\n }\n};\n\n/**\n * Registry-backed block widget for URL-scheme preview slots.\n * Replaces the addBlockContainer callback pattern.\n * Used as the Component entry in a urlSchemes XmlWidgetDef.\n */\nexport const PreviewComponent = ({ dxn, label: alt, onOpen, view, range }: PreviewComponentProps) => {\n const client = useClient();\n const { invokePromise } = useOperationInvoker();\n const containerRef = useRef<HTMLDivElement>(null);\n const uri = dxn ? URI.make(dxn) : undefined;\n const subject = uri ? client.graph.makeRef<Obj.Unknown>(uri).target : undefined;\n\n // px per rem; ResizeHandle works in rem while the persisted height is in px.\n const remSize = useMemo(() => parseFloat(getComputedStyle(document.documentElement).fontSize) || 16, []);\n const { height } = parseEmbedLabel(alt);\n\n // `min-content` keeps the embed at its intrinsic height until the user resizes it; the handle then\n // measures the rendered box and switches to an explicit height.\n const [size, setSize] = useState<Size>(height != null ? height / remSize : 'min-content');\n\n // Tell the surface it is sized by its container (vs. intrinsic) so content (e.g. an image) can fit.\n const extrinsic = size !== 'min-content';\n const data = useMemo(\n () => (subject ? { subject, attendableId: dxn, extrinsic } : undefined),\n [subject, dxn, extrinsic],\n );\n useEffect(() => {\n setSize(height != null ? height / remSize : 'min-content');\n }, [height, remSize]);\n\n // Persist the height (px) into the alt text on drop by rewriting the image node in the source. The\n // node bounds and base label are re-derived from the live document (the captured `range`/`label`\n // can lag a prior edit before React re-renders the widget). When the same object is transcluded\n // more than once, the node whose start is NEAREST the widget's range is chosen so a duplicate\n // embed isn't rewritten by mistake.\n const handleResize = useCallback(\n (next: Size, commit?: boolean) => {\n setSize(next);\n if (!commit || typeof next !== 'number' || !view) {\n return;\n }\n const doc = view.state.doc.toString();\n const marker = `](${dxn})`;\n let open = -1;\n let close = -1;\n for (let at = doc.indexOf(marker); at >= 0; at = doc.indexOf(marker, at + marker.length)) {\n const start = doc.lastIndexOf('`;\n view.dispatch({ changes: { from: open, to: close + marker.length, insert } });\n // After the resized box has laid out, bring its top into frame — but only if that top scrolled\n // out of view. Scroll the element itself (not the CM view) so it works whichever ancestor\n // actually scrolls (cm-scroller or an outer panel); defer a frame so the new height applies first.\n requestAnimationFrame(() => {\n if (containerRef.current) {\n scrollTopIntoViewIfNeeded(containerRef.current);\n }\n });\n },\n [view, range, dxn, remSize],\n );\n\n // Open the referenced object: defer to the caller's handler when provided, else navigate to it.\n const handleOpen = useCallback(() => {\n if (!uri || !subject) {\n return;\n }\n if (onOpen) {\n onOpen(uri);\n } else {\n void invokePromise?.(LayoutOperation.Open, {\n subject: [Paths.getObjectPathFromObject(subject)],\n navigation: 'immediate',\n });\n }\n }, [uri, subject, onOpen, invokePromise]);\n\n if (!uri || !subject || !data) {\n return null;\n }\n\n const objectLabel = Obj.getLabel(subject);\n const objectIcon = Obj.getIcon(subject);\n\n // Frame transcluded block embeds so they read as a self-contained card within the document flow.\n // The clip/border live on an inner element so they don't clip the resize handle (which straddles the\n // bottom edge); the inner grid stretches the surface to fill the resizable box, overriding any\n // intrinsic aspect.\n return (\n <div\n className='relative grid scroll-mt-16'\n style={sizeStyle(size, 'vertical')}\n {...resizeAttributes}\n ref={containerRef}\n >\n <div className='grid overflow-hidden border border-subdued-separator rounded-md'>\n <Surface.Surface type={AppSurface.Section} data={data} limit={1} />\n </div>\n <div className='absolute top-1 right-1 flex items-center justify-end gap-1'>\n <span className='dx-tag dx-tag--neutral flex items-center gap-1'>\n {objectIcon && <Icon icon={objectIcon.icon} size={4} />}\n {objectLabel}\n </span>\n <IconButton\n density='sm'\n icon='ph--arrow-square-out--regular'\n iconOnly\n label='Open'\n variant='ghost'\n onClick={handleOpen}\n />\n </div>\n <ResizeHandle\n side='block-end'\n fallbackSize={FALLBACK_SIZE}\n minSize={MIN_SIZE}\n size={size}\n onSizeChange={handleResize}\n />\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Surface", "useOperationInvoker", "LayoutOperation", "Paths", "AppSurface", "Obj", "URI", "useClient", "Icon", "IconButton", "ResizeHandle", "resizeAttributes", "sizeStyle", "HEIGHT_PATTERN", "parseEmbedLabel", "alt", "match", "exec", "height", "Number", "parseInt", "isFinite", "baseLabel", "formatEmbedLabel", "MIN_SIZE", "FALLBACK_SIZE", "scrollTopIntoViewIfNeeded", "element", "parent", "parentElement", "overflowY", "getComputedStyle", "scrollHeight", "clientHeight", "elementTop", "getBoundingClientRect", "top", "viewTop", "viewBottom", "bottom", "window", "innerHeight", "scrollIntoView", "block", "inline", "PreviewComponent", "dxn", "label", "onOpen", "view", "range", "client", "invokePromise", "containerRef", "uri", "make", "undefined", "subject", "graph", "makeRef", "target", "remSize", "parseFloat", "document", "documentElement", "fontSize", "size", "setSize", "extrinsic", "data", "attendableId", "handleResize", "next", "commit", "doc", "state", "toString", "marker", "open", "close", "at", "indexOf", "length", "start", "lastIndexOf", "Math", "abs", "from", "currentBaseLabel", "slice", "insert", "round", "dispatch", "changes", "to", "requestAnimationFrame", "current", "handleOpen", "Open", "getObjectPathFromObject", "navigation", "objectLabel", "getLabel", "objectIcon", "getIcon", "div", "className", "style", "ref", "type", "Section", "limit", "span", "icon", "density", "iconOnly", "variant", "onClick", "side", "fallbackSize", "minSize", "onSizeChange"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// src/capabilities/skill-definition.ts
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { Capability } from "@dxos/app-framework";
|
|
4
|
+
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
5
|
+
import { MarkdownSkill } from "#skills";
|
|
6
|
+
var skillDefinition = () => Effect.succeed([
|
|
7
|
+
Capability.contributes(AppCapabilities.SkillDefinition, MarkdownSkill)
|
|
8
|
+
]);
|
|
9
|
+
var skill_definition_default = skillDefinition;
|
|
10
|
+
|
|
11
|
+
export {
|
|
12
|
+
skill_definition_default
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=chunk-YMBC62S7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/skill-definition.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { MarkdownSkill } from '#skills';\n\nconst skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, MarkdownSkill)]);\n\nexport default skillDefinition;\n"],
|
|
5
|
+
"mappings": ";AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAEhC,SAASC,qBAAqB;AAE9B,IAAMC,kBAAkB,MAAaC,eAAQ;EAACJ,WAAWK,YAAYJ,gBAAgBK,iBAAiBJ,aAAAA;CAAe;AAErH,IAAA,2BAAeC;",
|
|
6
|
+
"names": ["Effect", "Capability", "AppCapabilities", "MarkdownSkill", "skillDefinition", "succeed", "contributes", "SkillDefinition"]
|
|
7
|
+
}
|
|
@@ -5,16 +5,16 @@ import {
|
|
|
5
5
|
// src/types/Markdown.ts
|
|
6
6
|
var Markdown_exports = {};
|
|
7
7
|
__export(Markdown_exports, {
|
|
8
|
-
BLUEPRINT_KEY: () => BLUEPRINT_KEY,
|
|
9
8
|
Document: () => Document,
|
|
9
|
+
SKILL_KEY: () => SKILL_KEY,
|
|
10
10
|
Settings: () => Settings2,
|
|
11
11
|
make: () => make
|
|
12
12
|
});
|
|
13
13
|
import * as Schema2 from "effect/Schema";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { AppAnnotation } from "@dxos/app-toolkit";
|
|
15
|
+
import { Annotation, DXN, Obj, Ref, Type } from "@dxos/echo";
|
|
16
16
|
import { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from "@dxos/echo/Annotation";
|
|
17
|
-
import { Text } from "@dxos/schema";
|
|
17
|
+
import { CollectionItemAnnotation, Text } from "@dxos/schema";
|
|
18
18
|
|
|
19
19
|
// src/types/Settings.ts
|
|
20
20
|
var Settings_exports = {};
|
|
@@ -65,9 +65,9 @@ var Settings = Schema.mutable(Schema.Struct({
|
|
|
65
65
|
}));
|
|
66
66
|
|
|
67
67
|
// src/types/Markdown.ts
|
|
68
|
-
var
|
|
68
|
+
var SKILL_KEY = "org.dxos.skill.markdown";
|
|
69
69
|
var Settings2 = Settings;
|
|
70
|
-
var Document = Schema2.Struct({
|
|
70
|
+
var Document = class extends Type.makeObject(DXN.make("org.dxos.type.document", "0.1.0"))(Schema2.Struct({
|
|
71
71
|
name: Schema2.optional(Schema2.String),
|
|
72
72
|
description: Schema2.optional(Schema2.String),
|
|
73
73
|
fallbackName: Schema2.String.pipe(FormInputAnnotation.set(false), Schema2.optional),
|
|
@@ -78,11 +78,12 @@ var Document = Schema2.Struct({
|
|
|
78
78
|
]), DescriptionAnnotation.set("description"), Annotation.IconAnnotation.set({
|
|
79
79
|
icon: "ph--text-aa--regular",
|
|
80
80
|
hue: "indigo"
|
|
81
|
-
}),
|
|
82
|
-
|
|
83
|
-
]), GraphPropsAnnotation.set({
|
|
81
|
+
}), AppAnnotation.SkillsAnnotation.set([
|
|
82
|
+
SKILL_KEY
|
|
83
|
+
]), AppAnnotation.GraphPropsAnnotation.set({
|
|
84
84
|
managesAutofocus: true
|
|
85
|
-
}),
|
|
85
|
+
}), AppAnnotation.CardAnnotation.set(true), CollectionItemAnnotation.set(true))) {
|
|
86
|
+
};
|
|
86
87
|
var make = ({ content = "", ...props } = {}) => {
|
|
87
88
|
const doc = Obj.make(Document, {
|
|
88
89
|
...props,
|
|
@@ -113,11 +114,11 @@ var StateSchema = Schema3.mutable(Schema3.Struct({
|
|
|
113
114
|
value: Schema3.String
|
|
114
115
|
})
|
|
115
116
|
}));
|
|
116
|
-
var Settings3 = Capability.make(`${meta.
|
|
117
|
-
var State = Capability.make(`${meta.
|
|
118
|
-
var EditorState = Capability.make(`${meta.
|
|
119
|
-
var EditorViews = Capability.make(`${meta.
|
|
120
|
-
var ExtensionProvider = Capability.make(`${meta.
|
|
117
|
+
var Settings3 = Capability.make(`${meta.profile.key}.capability.settings`);
|
|
118
|
+
var State = Capability.make(`${meta.profile.key}.capability.state`);
|
|
119
|
+
var EditorState = Capability.make(`${meta.profile.key}.capability.editor-state`);
|
|
120
|
+
var EditorViews = Capability.make(`${meta.profile.key}.capability.editor-views`);
|
|
121
|
+
var ExtensionProvider = Capability.make(`${meta.profile.key}.capability.extensions`);
|
|
121
122
|
|
|
122
123
|
// src/types/MarkdownEvents.ts
|
|
123
124
|
var MarkdownEvents_exports = {};
|
|
@@ -126,7 +127,7 @@ __export(MarkdownEvents_exports, {
|
|
|
126
127
|
});
|
|
127
128
|
import { AppActivationEvents } from "@dxos/app-toolkit";
|
|
128
129
|
import { meta as meta2 } from "#meta";
|
|
129
|
-
var SetupExtensions = AppActivationEvents.createStateEvent(`${meta2.
|
|
130
|
+
var SetupExtensions = AppActivationEvents.createStateEvent(`${meta2.profile.key}.event.setup-extensions`);
|
|
130
131
|
|
|
131
132
|
// src/types/MarkdownOperation.ts
|
|
132
133
|
var MarkdownOperation_exports = {};
|
|
@@ -141,15 +142,15 @@ __export(MarkdownOperation_exports, {
|
|
|
141
142
|
import * as Schema4 from "effect/Schema";
|
|
142
143
|
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
143
144
|
import { Operation } from "@dxos/compute";
|
|
144
|
-
import { Database,
|
|
145
|
+
import { Database, DXN as DXN2, Ref as Ref2, Type as Type2 } from "@dxos/echo";
|
|
145
146
|
import { EditorViewMode as EditorViewMode2 } from "@dxos/ui-editor/types";
|
|
146
147
|
import { trim } from "@dxos/util";
|
|
147
148
|
import { meta as meta3 } from "#meta";
|
|
148
|
-
var makeKey = (name) => DXN2.make(`${meta3.
|
|
149
|
+
var makeKey = (name) => DXN2.make(`${meta3.profile.key}.operation.${name}`);
|
|
149
150
|
var Edit = Schema4.Struct({
|
|
150
|
-
oldString: Schema4.String.annotations({
|
|
151
|
-
description: "The text to find in the document."
|
|
152
|
-
}),
|
|
151
|
+
oldString: Schema4.optional(Schema4.String.annotations({
|
|
152
|
+
description: "The text to find in the document. Set to undefined to append the newString to the end of the document."
|
|
153
|
+
})),
|
|
153
154
|
newString: Schema4.String.annotations({
|
|
154
155
|
description: "The text to replace it with."
|
|
155
156
|
}),
|
|
@@ -264,7 +265,7 @@ var Update = Operation.make({
|
|
|
264
265
|
description: "The ID of the markdown document."
|
|
265
266
|
}),
|
|
266
267
|
edits: Schema4.Array(Edit).annotations({
|
|
267
|
-
description: "The edits to apply to the document. Each edit finds oldString and replaces it with newString."
|
|
268
|
+
description: "The edits to apply to the document. Each edit finds oldString and replaces it with newString; omit oldString to append newString to the end."
|
|
268
269
|
})
|
|
269
270
|
}),
|
|
270
271
|
output: Schema4.Struct({
|
|
@@ -282,4 +283,4 @@ export {
|
|
|
282
283
|
MarkdownEvents_exports,
|
|
283
284
|
MarkdownOperation_exports
|
|
284
285
|
};
|
|
285
|
-
//# sourceMappingURL=chunk-
|
|
286
|
+
//# sourceMappingURL=chunk-ZJ3GWRUJ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/Markdown.ts", "../../../src/types/Settings.ts", "../../../src/types/MarkdownCapabilities.ts", "../../../src/types/MarkdownEvents.ts", "../../../src/types/MarkdownOperation.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { AppAnnotation } from '@dxos/app-toolkit';\nimport { Annotation, DXN, Obj, Ref, Type } from '@dxos/echo';\nimport { DescriptionAnnotation, FormInputAnnotation, LabelAnnotation } from '@dxos/echo/Annotation';\nimport { CollectionItemAnnotation, Text } from '@dxos/schema';\n\nexport const SKILL_KEY = 'org.dxos.skill.markdown';\n\n// Re-export Settings as merged const/type (not as namespace).\nimport * as SettingsModule from './Settings';\nexport const Settings = SettingsModule.Settings;\nexport type Settings = SettingsModule.Settings;\n\n/**\n * Document Item type.\n */\nexport class Document extends Type.makeObject<Document>(DXN.make('org.dxos.type.document', '0.1.0'))(\n Schema.Struct({\n name: Schema.optional(Schema.String),\n description: Schema.optional(Schema.String),\n fallbackName: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),\n content: Ref.Ref(Text.Text).pipe(FormInputAnnotation.set(false)),\n }).pipe(\n LabelAnnotation.set(['name', 'fallbackName']),\n DescriptionAnnotation.set('description'),\n Annotation.IconAnnotation.set({ icon: 'ph--text-aa--regular', hue: 'indigo' }),\n AppAnnotation.SkillsAnnotation.set([SKILL_KEY]),\n AppAnnotation.GraphPropsAnnotation.set({ managesAutofocus: true }),\n AppAnnotation.CardAnnotation.set(true),\n CollectionItemAnnotation.set(true),\n ),\n) {}\n\n/**\n * Document factory.\n */\nexport const make = ({\n content = '',\n ...props\n}: Partial<{ name: string; fallbackName: string; content: string }> = {}) => {\n const doc = Obj.make(Document, { ...props, content: Ref.make(Text.make({ content })) });\n // TODO(dmaretskyi): We need a better way to set parents when creating hierarchies.\n Obj.setParent(doc.content.target!, doc);\n return doc;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { EditorInputMode, EditorViewMode } from '@dxos/ui-editor/types';\n\n/**\n * Determines how new comment threads on markdown documents are wired up to\n * the comment-thread AI agent (plugin-thread). The agent's identity (name,\n * DID) is resolved at runtime via the AgentIdentity capability — this\n * setting only controls whether and when the agent fires.\n *\n * - `off`: comments are plain user-only threads (no agent).\n * - `auto`: every user message in a thread triggers an agent response.\n * - `mention`: agent only responds when the message contains `@{agentName}`.\n */\nexport const CommentAgentMode = Schema.Union(Schema.Literal('off'), Schema.Literal('auto'), Schema.Literal('mention'));\nexport type CommentAgentMode = Schema.Schema.Type<typeof CommentAgentMode>;\n\n/**\n * Plugin settings.\n */\nexport const Settings = Schema.mutable(\n Schema.Struct({\n defaultViewMode: EditorViewMode.annotations({\n title: 'Default view mode',\n description: 'Set whether documents open in editing or read-only mode.',\n }),\n commentAgentMode: Schema.optional(\n CommentAgentMode.annotations({\n title: 'Comment agent mode',\n description:\n \"How new comment threads on markdown documents are processed: 'off' (no AI), 'auto' (AI responds to every user message), or 'mention' (AI responds only on @mention).\",\n }),\n ),\n editorInputMode: Schema.optional(\n EditorInputMode.annotations({\n title: 'Editor input mode',\n description: 'Choose keyboard bindings for the editor.',\n }),\n ),\n toolbar: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Show toolbar',\n description: 'Display a formatting toolbar above the editor.',\n }),\n ),\n numberedHeadings: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Numbered headings',\n description: 'Automatically number heading levels in the document.',\n }),\n ),\n folding: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Folding',\n description: 'Allow collapsing and expanding sections by heading.',\n }),\n ),\n experimental: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable experimental features',\n description: 'Turn on features that are still in development.',\n }),\n ),\n debug: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable debugging features',\n description: 'Show developer tools and diagnostics for the editor.',\n }),\n ),\n snippets: Schema.optional(\n Schema.String.annotations({\n title: 'Snippets',\n description: 'Input snippets to replay for testing purposes.',\n }),\n ),\n }),\n);\n\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type EditorView } from '@codemirror/view';\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { type EditorStateStore } from '@dxos/ui-editor';\nimport { type EditorViewMode } from '@dxos/ui-editor/types';\n\nimport { meta } from '#meta';\n\nimport type * as Markdown from './Markdown';\nimport { type MarkdownExtensionProvider } from './types';\n\n/** Schema for persisted markdown state. */\nexport const StateSchema = Schema.mutable(\n Schema.Struct({\n viewMode: Schema.Record({ key: Schema.String, value: Schema.String }),\n }),\n);\n\nexport type MarkdownState = {\n viewMode: Record<string, EditorViewMode>;\n};\n\nexport type EditorViewEntry = { view: EditorView; documentId: string };\n\nexport type EditorViewRegistry = {\n register: (attendableId: string, view: EditorView, documentId: string) => void;\n unregister: (attendableId: string) => void;\n get: (attendableId: string) => EditorViewEntry | undefined;\n};\n\nexport const Settings = Capability.make<Atom.Writable<Markdown.Settings>>(`${meta.profile.key}.capability.settings`);\n\n/** Persisted state atom for view mode per document. */\nexport const State = Capability.make<Atom.Writable<MarkdownState>>(`${meta.profile.key}.capability.state`);\n\n/** Editor state store for cursor positions, scroll state, etc. */\nexport const EditorState = Capability.make<EditorStateStore>(`${meta.profile.key}.capability.editor-state`);\n\n/** Registry of active EditorView instances keyed by attendable ID. */\nexport const EditorViews = Capability.make<EditorViewRegistry>(`${meta.profile.key}.capability.editor-views`);\n\n// TODO(burdon): Move to ./types (external API)?\nexport const ExtensionProvider = Capability.make<MarkdownExtensionProvider[]>(\n `${meta.profile.key}.capability.extensions`,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\n\nexport const SetupExtensions: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(\n `${meta.profile.key}.event.setup-extensions`,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { Database, DXN, Ref, Type } from '@dxos/echo';\nimport { EditorViewMode } from '@dxos/ui-editor/types';\nimport { trim } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nimport * as Markdown from './Markdown';\n\nconst makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name}`);\n\n// The edit descriptions feed the markdown skill's LLM tool definition (and its memoized\n// fixtures), so the schema stays local and context-tuned; the apply logic is shared via `Text.apply`.\nconst Edit = Schema.Struct({\n oldString: Schema.optional(\n Schema.String.annotations({\n description:\n 'The text to find in the document. Set to undefined to append the newString to the end of the document.',\n }),\n ),\n newString: Schema.String.annotations({\n description: 'The text to replace it with.',\n }),\n replaceAll: Schema.optional(Schema.Boolean).annotations({\n description: 'If true, replaces all occurrences. Defaults to false (first occurrence only).',\n }),\n});\n\nexport const Create = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.markdown.create'),\n name: 'Create',\n description: 'Creates a new markdown document and adds it to the space.',\n icon: 'ph--file-text--regular',\n },\n input: Schema.Struct({\n name: Schema.String,\n content: Schema.String,\n }),\n output: Schema.Struct({\n id: Schema.String.annotations({\n description: 'The DXN of the created document.',\n }),\n }),\n services: [Database.Service],\n});\n\nexport const CreateMarkdown = Operation.make({\n meta: {\n key: makeKey('create'),\n name: 'Create Markdown Document',\n icon: 'ph--file-text--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n content: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Type.getSchema(Markdown.Document),\n }),\n});\n\nexport const Open = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.markdown.open'),\n name: 'Open',\n description: 'Opens and reads the contents of a new markdown document.',\n icon: 'ph--arrow-square-out--regular',\n },\n input: Schema.Struct({\n doc: Ref.Ref(Markdown.Document).annotations({\n description: 'The ID of the markdown document.',\n }),\n }),\n output: Schema.Struct({\n content: Schema.String,\n }),\n services: [Database.Service],\n});\n\nexport const ScrollToAnchor = Operation.make({\n meta: {\n key: makeKey('scrollToAnchor'),\n name: 'Scroll To Anchor',\n icon: 'ph--anchor-simple--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n subject: Schema.String.annotations({ description: 'Attendable ID of the markdown editor.' }),\n cursor: Schema.String.annotations({ description: 'Cursor position to scroll to.' }),\n ref: Schema.optional(Schema.String.annotations({ description: 'Reference ID (e.g. thread ID).' })),\n }),\n output: Schema.Void,\n});\n\n// TODO(wittjosiah): This appears to be unused.\nexport const SetViewMode = Operation.make({\n meta: { key: makeKey('setViewMode'), name: 'Set View Mode', icon: 'ph--layout--regular' },\n services: [Capability.Service],\n input: Schema.Struct({\n id: Schema.String,\n viewMode: EditorViewMode,\n }),\n output: Schema.Void,\n});\n\nexport const Update = Operation.make({\n meta: {\n key: DXN.make('org.dxos.function.markdown.update'),\n name: 'Update',\n description: trim`\n Applies a set of edits to the markdown document.\n `,\n icon: 'ph--pencil-simple--regular',\n },\n input: Schema.Struct({\n doc: Ref.Ref(Markdown.Document).annotations({\n description: 'The ID of the markdown document.',\n }),\n edits: Schema.Array(Edit).annotations({\n description:\n 'The edits to apply to the document. Each edit finds oldString and replaces it with newString; omit oldString to append newString to the end.',\n }),\n }),\n output: Schema.Struct({\n newContent: Schema.String,\n }),\n services: [Database.Service],\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Settings", "Schema", "AppAnnotation", "Annotation", "DXN", "Obj", "Ref", "Type", "DescriptionAnnotation", "FormInputAnnotation", "LabelAnnotation", "CollectionItemAnnotation", "Text", "Schema", "EditorInputMode", "EditorViewMode", "CommentAgentMode", "Union", "Literal", "Settings", "mutable", "Struct", "defaultViewMode", "annotations", "title", "description", "commentAgentMode", "optional", "editorInputMode", "toolbar", "Boolean", "numberedHeadings", "folding", "experimental", "debug", "snippets", "String", "SKILL_KEY", "Settings", "Document", "Type", "makeObject", "DXN", "make", "Struct", "name", "optional", "String", "description", "fallbackName", "pipe", "FormInputAnnotation", "set", "content", "Ref", "Text", "LabelAnnotation", "DescriptionAnnotation", "Annotation", "IconAnnotation", "icon", "hue", "AppAnnotation", "SkillsAnnotation", "GraphPropsAnnotation", "managesAutofocus", "CardAnnotation", "CollectionItemAnnotation", "props", "doc", "Obj", "setParent", "target", "Settings", "Schema", "Capability", "meta", "StateSchema", "mutable", "Struct", "viewMode", "Record", "key", "String", "value", "make", "profile", "State", "EditorState", "EditorViews", "ExtensionProvider", "AppActivationEvents", "meta", "SetupExtensions", "createStateEvent", "profile", "key", "Schema", "Capability", "Operation", "Database", "DXN", "Ref", "Type", "EditorViewMode", "trim", "meta", "makeKey", "name", "DXN", "make", "meta", "profile", "key", "Edit", "Struct", "oldString", "optional", "String", "annotations", "description", "newString", "replaceAll", "Boolean", "Create", "Operation", "icon", "input", "content", "output", "id", "services", "Database", "Service", "CreateMarkdown", "Capability", "object", "Type", "getSchema", "Document", "Open", "doc", "Ref", "ScrollToAnchor", "subject", "cursor", "ref", "Void", "SetViewMode", "viewMode", "EditorViewMode", "Update", "trim", "edits", "Array", "newContent"]
|
|
7
|
+
}
|
|
@@ -5,7 +5,8 @@ import * as Effect from "effect/Effect";
|
|
|
5
5
|
import { Capability } from "@dxos/app-framework";
|
|
6
6
|
import { AppCapabilities } from "@dxos/app-toolkit";
|
|
7
7
|
import { Type } from "@dxos/echo";
|
|
8
|
-
import {
|
|
8
|
+
import { getTextInRange } from "@dxos/echo-client";
|
|
9
|
+
import { Doc } from "@dxos/echo-doc";
|
|
9
10
|
import { MarkdownOperation } from "#types";
|
|
10
11
|
import { Markdown } from "#types";
|
|
11
12
|
var activate = Effect.fnUntraced(function* () {
|
|
@@ -14,9 +15,10 @@ var activate = Effect.fnUntraced(function* () {
|
|
|
14
15
|
comments: "anchored",
|
|
15
16
|
selectionMode: "multi-range",
|
|
16
17
|
getAnchorLabel: (doc, anchor) => {
|
|
17
|
-
|
|
18
|
+
const target = doc.content?.target;
|
|
19
|
+
if (target) {
|
|
18
20
|
const [start, end] = anchor.split(":");
|
|
19
|
-
return getTextInRange(
|
|
21
|
+
return getTextInRange(Doc.createAccessor(target, [
|
|
20
22
|
"content"
|
|
21
23
|
]), start, end);
|
|
22
24
|
}
|
|
@@ -29,4 +31,4 @@ var comment_config_default = activate;
|
|
|
29
31
|
export {
|
|
30
32
|
comment_config_default as default
|
|
31
33
|
};
|
|
32
|
-
//# sourceMappingURL=comment-config-
|
|
34
|
+
//# sourceMappingURL=comment-config-M5OGFULS.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/comment-config.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Type } from '@dxos/echo';\nimport { getTextInRange } from '@dxos/echo-client';\nimport { Doc } from '@dxos/echo-doc';\n\nimport { MarkdownOperation } from '#types';\nimport { Markdown } from '#types';\n\nconst activate = Effect.fnUntraced(function* () {\n const config: AppCapabilities.CommentConfig = {\n id: Type.getTypename(Markdown.Document),\n comments: 'anchored',\n selectionMode: 'multi-range',\n getAnchorLabel: (doc: Markdown.Document, anchor: string): string | undefined => {\n const target = doc.content?.target;\n if (target) {\n const [start, end] = anchor.split(':');\n return getTextInRange(Doc.createAccessor(target, ['content']), start, end);\n }\n },\n scrollToAnchor: MarkdownOperation.ScrollToAnchor,\n };\n return Capability.contributes(AppCapabilities.CommentConfig, config);\n});\n\nexport default activate;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAChC,SAASC,YAAY;AACrB,SAASC,sBAAsB;AAC/B,SAASC,WAAW;AAEpB,SAASC,yBAAyB;AAClC,SAASC,gBAAgB;AAEzB,IAAMC,WAAkBC,kBAAW,aAAA;AACjC,QAAMC,SAAwC;IAC5CC,IAAIR,KAAKS,YAAYL,SAASM,QAAQ;IACtCC,UAAU;IACVC,eAAe;IACfC,gBAAgB,CAACC,KAAwBC,WAAAA;AACvC,YAAMC,SAASF,IAAIG,SAASD;AAC5B,UAAIA,QAAQ;AACV,cAAM,CAACE,OAAOC,GAAAA,IAAOJ,OAAOK,MAAM,GAAA;AAClC,eAAOnB,eAAeC,IAAImB,eAAeL,QAAQ;UAAC;SAAU,GAAGE,OAAOC,GAAAA;MACxE;IACF;IACAG,gBAAgBnB,kBAAkBoB;EACpC;AACA,SAAOzB,WAAW0B,YAAYzB,gBAAgB0B,eAAelB,MAAAA;AAC/D,CAAA;AAEA,IAAA,yBAAeF;",
|
|
6
|
+
"names": ["Effect", "Capability", "AppCapabilities", "Type", "getTextInRange", "Doc", "MarkdownOperation", "Markdown", "activate", "fnUntraced", "config", "id", "getTypename", "Document", "comments", "selectionMode", "getAnchorLabel", "doc", "anchor", "target", "content", "start", "end", "split", "createAccessor", "scrollToAnchor", "ScrollToAnchor", "contributes", "CommentConfig"]
|
|
7
|
+
}
|