@dxos/plugin-markdown 0.8.4-main.2c6827d → 0.8.4-main.3c1ae3b
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/MarkdownCard-THZFDOOV.mjs +13 -0
- package/dist/lib/browser/MarkdownContainer-VKPSVI5F.mjs +16 -0
- package/dist/lib/browser/{anchor-sort-3HGPGCOO.mjs → anchor-sort-3MYLO74J.mjs} +6 -5
- package/dist/lib/browser/anchor-sort-3MYLO74J.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-POZN234F.mjs → app-graph-serializer-BZJ4TQOE.mjs} +3 -3
- package/dist/lib/browser/{blueprint-definition-GIPKFDY5.mjs → blueprint-definition-R5T6LTPN.mjs} +3 -3
- package/dist/lib/browser/{chunk-K3LXOU3E.mjs → chunk-56SUMOIZ.mjs} +102 -195
- package/dist/lib/browser/chunk-56SUMOIZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-6OMOMVO7.mjs +107 -0
- package/dist/lib/browser/chunk-6OMOMVO7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QYSEJ5GP.mjs → chunk-CN35HEBX.mjs} +6 -6
- package/dist/lib/browser/chunk-CN35HEBX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PBJLFIOX.mjs → chunk-KCOBZZIL.mjs} +38 -23
- package/dist/lib/browser/chunk-KCOBZZIL.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GH6GQSBL.mjs → chunk-KPH4ZPQN.mjs} +53 -5
- package/dist/lib/browser/chunk-KPH4ZPQN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-22XSSNBS.mjs → chunk-NXT2E2BG.mjs} +4 -3
- package/dist/lib/browser/chunk-NXT2E2BG.mjs.map +7 -0
- package/dist/lib/browser/{chunk-Y53FQREH.mjs → chunk-RJPOHSYN.mjs} +8 -6
- package/dist/lib/browser/chunk-RJPOHSYN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-2MLGSYRN.mjs → chunk-U6Y53XZK.mjs} +7 -7
- package/dist/lib/browser/index.mjs +10 -24
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-Z5L7TXUK.mjs → intent-resolver-55ASQRIW.mjs} +3 -3
- package/dist/lib/browser/{intent-resolver-Z5L7TXUK.mjs.map → intent-resolver-55ASQRIW.mjs.map} +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-GO5ZOKNN.mjs → react-surface-Q3C5H2KT.mjs} +21 -17
- package/dist/lib/browser/react-surface-Q3C5H2KT.mjs.map +7 -0
- package/dist/lib/browser/{settings-TZUDB5EW.mjs → settings-G3ZOXJQY.mjs} +2 -2
- package/dist/lib/browser/toolkit.mjs +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{MarkdownCard-ZXPJLUYO.mjs → MarkdownCard-QHSSZGIY.mjs} +5 -4
- package/dist/lib/node-esm/{MarkdownContainer-YRDSRDCS.mjs → MarkdownContainer-G3ZQJS7A.mjs} +7 -6
- package/dist/lib/node-esm/{anchor-sort-PCDXEBJ2.mjs → anchor-sort-W4HCTYUQ.mjs} +6 -5
- package/dist/lib/node-esm/anchor-sort-W4HCTYUQ.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-NF65JYAS.mjs → app-graph-serializer-OCTHXWLF.mjs} +3 -3
- package/dist/lib/node-esm/{blueprint-definition-ENKJZYQS.mjs → blueprint-definition-2JV3WV22.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-PLZ7EVCT.mjs → chunk-6F6FCTIA.mjs} +53 -5
- package/dist/lib/node-esm/chunk-6F6FCTIA.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HAIEWPU7.mjs → chunk-C5KXP2ZE.mjs} +8 -6
- package/dist/lib/node-esm/chunk-C5KXP2ZE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CT7CFX5G.mjs → chunk-FR6RW6DH.mjs} +102 -195
- package/dist/lib/node-esm/chunk-FR6RW6DH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AMHACOXW.mjs → chunk-I5JSQBPI.mjs} +4 -3
- package/dist/lib/node-esm/chunk-I5JSQBPI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KCHUTL3Q.mjs → chunk-KM7KYV6W.mjs} +7 -7
- package/dist/lib/node-esm/chunk-KYWXTMKI.mjs +108 -0
- package/dist/lib/node-esm/chunk-KYWXTMKI.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PIOOG7A5.mjs → chunk-R3SGV4ES.mjs} +38 -23
- package/dist/lib/node-esm/chunk-R3SGV4ES.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NGYJNQ6A.mjs → chunk-YFRTKXTB.mjs} +6 -6
- package/dist/lib/node-esm/chunk-YFRTKXTB.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +10 -24
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-6B3PFQ5F.mjs → intent-resolver-DTBVWCNO.mjs} +3 -3
- package/dist/lib/node-esm/{intent-resolver-6B3PFQ5F.mjs.map → intent-resolver-DTBVWCNO.mjs.map} +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-I46BPCWT.mjs → react-surface-QWRT4SD6.mjs} +21 -17
- package/dist/lib/node-esm/react-surface-QWRT4SD6.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-CJ3T5EX4.mjs → settings-IBFFCGNL.mjs} +2 -2
- package/dist/lib/node-esm/toolkit.mjs +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +14 -1
- package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.d.ts +6 -1
- package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownContainer.stories.d.ts +1 -0
- package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +8 -5
- package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -1
- package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +5 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/functions/open.d.ts.map +1 -1
- package/dist/types/src/functions/update.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -2
- package/dist/types/src/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Markdown.d.ts +6 -6
- package/dist/types/src/types/Markdown.d.ts.map +1 -1
- package/dist/types/src/types/MarkdownAction.d.ts +3 -3
- package/dist/types/src/util.d.ts +3 -0
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/src/util.test.d.ts +2 -0
- package/dist/types/src/util.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +44 -44
- package/src/MarkdownPlugin.tsx +5 -21
- package/src/capabilities/anchor-sort.ts +4 -3
- package/src/capabilities/artifact-definition.ts +1 -1
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +32 -28
- package/src/components/MarkdownCard/MarkdownCard.tsx +39 -32
- package/src/components/MarkdownContainer.tsx +68 -73
- package/src/components/MarkdownEditor/MarkdownEditor.tsx +5 -5
- package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +24 -8
- package/src/components/Suggestions.stories.tsx +2 -1
- package/src/components/index.ts +8 -3
- package/src/functions/create.test.ts +14 -18
- package/src/functions/open.ts +3 -2
- package/src/functions/update.test.ts +17 -21
- package/src/functions/update.ts +3 -2
- package/src/hooks/useExtensions.tsx +2 -2
- package/src/hooks/useLinkQuery.ts +10 -10
- package/src/testing.ts +5 -5
- package/src/translations.ts +1 -0
- package/src/types/Markdown.ts +4 -5
- package/src/util.test.ts +44 -0
- package/src/util.tsx +72 -4
- package/dist/lib/browser/MarkdownCard-JYMDPKV5.mjs +0 -12
- package/dist/lib/browser/MarkdownContainer-Y75XSVBX.mjs +0 -15
- package/dist/lib/browser/anchor-sort-3HGPGCOO.mjs.map +0 -7
- package/dist/lib/browser/chunk-22XSSNBS.mjs.map +0 -7
- package/dist/lib/browser/chunk-GH6GQSBL.mjs.map +0 -7
- package/dist/lib/browser/chunk-K3LXOU3E.mjs.map +0 -7
- package/dist/lib/browser/chunk-PBJLFIOX.mjs.map +0 -7
- package/dist/lib/browser/chunk-QYSEJ5GP.mjs.map +0 -7
- package/dist/lib/browser/chunk-Y53FQREH.mjs.map +0 -7
- package/dist/lib/browser/react-surface-GO5ZOKNN.mjs.map +0 -7
- package/dist/lib/node-esm/anchor-sort-PCDXEBJ2.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AMHACOXW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CT7CFX5G.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HAIEWPU7.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NGYJNQ6A.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PIOOG7A5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PLZ7EVCT.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-I46BPCWT.mjs.map +0 -7
- /package/dist/lib/browser/{MarkdownCard-JYMDPKV5.mjs.map → MarkdownCard-THZFDOOV.mjs.map} +0 -0
- /package/dist/lib/browser/{MarkdownContainer-Y75XSVBX.mjs.map → MarkdownContainer-VKPSVI5F.mjs.map} +0 -0
- /package/dist/lib/browser/{app-graph-serializer-POZN234F.mjs.map → app-graph-serializer-BZJ4TQOE.mjs.map} +0 -0
- /package/dist/lib/browser/{blueprint-definition-GIPKFDY5.mjs.map → blueprint-definition-R5T6LTPN.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-2MLGSYRN.mjs.map → chunk-U6Y53XZK.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-TZUDB5EW.mjs.map → settings-G3ZOXJQY.mjs.map} +0 -0
- /package/dist/lib/node-esm/{MarkdownCard-ZXPJLUYO.mjs.map → MarkdownCard-QHSSZGIY.mjs.map} +0 -0
- /package/dist/lib/node-esm/{MarkdownContainer-YRDSRDCS.mjs.map → MarkdownContainer-G3ZQJS7A.mjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-serializer-NF65JYAS.mjs.map → app-graph-serializer-OCTHXWLF.mjs.map} +0 -0
- /package/dist/lib/node-esm/{blueprint-definition-ENKJZYQS.mjs.map → blueprint-definition-2JV3WV22.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-KCHUTL3Q.mjs.map → chunk-KM7KYV6W.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-CJ3T5EX4.mjs.map → settings-IBFFCGNL.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/anchor-sort.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Relation } from '@dxos/echo';\nimport { createDocAccessor, getRangeFromCursor } from '@dxos/echo-db';\nimport { type AnchoredTo } from '@dxos/types';\n\nimport { Markdown } from '../types';\n\nexport default () =>\n contributes(Capabilities.AnchorSort, {\n key: Markdown.Document.typename,\n sort: (anchorA: AnchoredTo.AnchoredTo, anchorB: AnchoredTo.AnchoredTo) => {\n const doc = Relation.getTarget(anchorA) as Markdown.Document;\n const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;\n if (doc !== Relation.getTarget(anchorB) || !accessor) {\n return 0;\n }\n\n const getStartPosition = (cursor: string | undefined) => {\n const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;\n return range?.start ?? Number.MAX_SAFE_INTEGER;\n };\n\n const posA = getStartPosition(anchorA.anchor);\n const posB = getStartPosition(anchorB.anchor);\n return posA - posB;\n },\n });\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,gBAAgB;AACzB,SAASC,mBAAmBC,0BAA0B;AAKtD,IAAA,uBAAe,MACbC,YAAYC,aAAaC,YAAY;EACnCC,KAAKC,iBAASC,SAASC;EACvBC,MAAM,CAACC,SAAgCC,YAAAA;AACrC,UAAMC,MAAMC,SAASC,UAAUJ,OAAAA;AAC/B,UAAMK,WAAWH,IAAII,QAAQC,SAASC,kBAAkBN,IAAII,QAAQC,QAAQ;MAAC;KAAU,IAAIE;AAC3F,QAAIP,QAAQC,SAASC,UAAUH,OAAAA,KAAY,CAACI,UAAU;AACpD,aAAO;IACT;AAEA,UAAMK,mBAAmB,CAACC,WAAAA;AACxB,YAAMC,QAAQD,SAASE,mBAAmBR,UAAUM,MAAAA,IAAUF;AAC9D,aAAOG,OAAOE,SAASC,OAAOC;IAChC;AAEA,UAAMC,OAAOP,iBAAiBV,QAAQkB,MAAM;AAC5C,UAAMC,OAAOT,iBAAiBT,QAAQiB,MAAM;AAC5C,WAAOD,OAAOE;EAChB;AACF,CAAA;",
|
|
6
|
+
"names": ["Capabilities", "contributes", "Relation", "createDocAccessor", "getRangeFromCursor", "contributes", "Capabilities", "AnchorSort", "key", "Markdown", "Document", "typename", "sort", "anchorA", "anchorB", "doc", "Relation", "getTarget", "accessor", "content", "target", "createDocAccessor", "undefined", "getStartPosition", "cursor", "range", "getRangeFromCursor", "start", "Number", "MAX_SAFE_INTEGER", "posA", "anchor", "posB"]
|
|
7
|
+
}
|
package/dist/lib/node-esm/{app-graph-serializer-NF65JYAS.mjs → app-graph-serializer-OCTHXWLF.mjs}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
translations
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-I5JSQBPI.mjs";
|
|
5
5
|
import {
|
|
6
6
|
MarkdownAction_exports,
|
|
7
7
|
Markdown_exports
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-YFRTKXTB.mjs";
|
|
9
9
|
import "./chunk-SHAMSMKQ.mjs";
|
|
10
10
|
|
|
11
11
|
// src/capabilities/app-graph-serializer.ts
|
|
@@ -49,4 +49,4 @@ var app_graph_serializer_default = ((context) => contributes(Capabilities.AppGra
|
|
|
49
49
|
export {
|
|
50
50
|
app_graph_serializer_default as default
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=app-graph-serializer-
|
|
52
|
+
//# sourceMappingURL=app-graph-serializer-OCTHXWLF.mjs.map
|
package/dist/lib/node-esm/{blueprint-definition-ENKJZYQS.mjs → blueprint-definition-2JV3WV22.mjs}
RENAMED
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
MARKDOWN_BLUEPRINT_KEY,
|
|
4
4
|
MarkdownBlueprint,
|
|
5
5
|
blueprint_definition_default
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-C5KXP2ZE.mjs";
|
|
7
|
+
import "./chunk-YFRTKXTB.mjs";
|
|
8
8
|
import "./chunk-SHAMSMKQ.mjs";
|
|
9
9
|
export {
|
|
10
10
|
MARKDOWN_BLUEPRINT_KEY,
|
|
11
11
|
MarkdownBlueprint,
|
|
12
12
|
blueprint_definition_default as default
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=blueprint-definition-
|
|
14
|
+
//# sourceMappingURL=blueprint-definition-2JV3WV22.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
Markdown_exports
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YFRTKXTB.mjs";
|
|
5
5
|
|
|
6
6
|
// src/util.tsx
|
|
7
7
|
import { debounce } from "@dxos/async";
|
|
@@ -9,12 +9,60 @@ import { Obj } from "@dxos/echo";
|
|
|
9
9
|
var isEditorModel = (data) => data && typeof data === "object" && "id" in data && typeof data.id === "string" && "text" in data && typeof data.text === "string";
|
|
10
10
|
var isMarkdownProperties = (data) => Obj.isObject(data) ? true : data && typeof data === "object" ? "title" in data && typeof data.title === "string" : false;
|
|
11
11
|
var nonTitleChars = /[^\w ]/g;
|
|
12
|
+
var skipPatterns = [
|
|
13
|
+
/^!\[/,
|
|
14
|
+
/^---\s*$/,
|
|
15
|
+
/^```/,
|
|
16
|
+
/^\s*$/
|
|
17
|
+
];
|
|
18
|
+
var titlePatterns = [
|
|
19
|
+
/^#{1,6}\s+(.+)/
|
|
20
|
+
];
|
|
12
21
|
var getFallbackName = (content = "") => {
|
|
13
|
-
|
|
22
|
+
const len = content.length;
|
|
23
|
+
let i = 0;
|
|
24
|
+
while (i < len) {
|
|
25
|
+
let lineEnd = i;
|
|
26
|
+
while (lineEnd < len && content[lineEnd] !== "\n") {
|
|
27
|
+
lineEnd++;
|
|
28
|
+
}
|
|
29
|
+
const line = content.slice(i, lineEnd).trim();
|
|
30
|
+
i = lineEnd + 1;
|
|
31
|
+
if (skipPatterns.some((pattern) => pattern.test(line))) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
for (const pattern of titlePatterns) {
|
|
35
|
+
const match = pattern.exec(line);
|
|
36
|
+
if (match) {
|
|
37
|
+
const text2 = match[1].replaceAll(nonTitleChars, "").trim();
|
|
38
|
+
if (text2.length > 0) {
|
|
39
|
+
return text2;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const maxLen = 32;
|
|
44
|
+
const text = line.replaceAll(nonTitleChars, "").trim();
|
|
45
|
+
if (text.length > 0) {
|
|
46
|
+
if (text.length > maxLen) {
|
|
47
|
+
const words = text.split(/\s+/);
|
|
48
|
+
let result = "";
|
|
49
|
+
for (const word of words) {
|
|
50
|
+
const next = result.length === 0 ? word : result + " " + word;
|
|
51
|
+
if (next.length > maxLen) {
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
result = next;
|
|
55
|
+
}
|
|
56
|
+
return result + "\u2026";
|
|
57
|
+
}
|
|
58
|
+
return text;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return "";
|
|
14
62
|
};
|
|
15
63
|
var getContentSnippet = (content = "") => {
|
|
16
|
-
const abstract = content.split("\n").filter((line) => !line.startsWith("
|
|
17
|
-
return abstract.
|
|
64
|
+
const abstract = content.split("\n").filter((line) => !line.startsWith("!")).filter((line) => line.trim() !== "");
|
|
65
|
+
return abstract.slice(0, 3).join("\n") ?? "";
|
|
18
66
|
};
|
|
19
67
|
var setFallbackName = debounce((doc, content = "") => {
|
|
20
68
|
const name = getFallbackName(content);
|
|
@@ -49,4 +97,4 @@ export {
|
|
|
49
97
|
setFallbackName,
|
|
50
98
|
serializer
|
|
51
99
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
100
|
+
//# sourceMappingURL=chunk-6F6FCTIA.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { debounce } from '@dxos/async';\nimport { Obj } from '@dxos/echo';\nimport { type TypedObjectSerializer } from '@dxos/plugin-space/types';\n\nimport { Markdown } from './types';\n\n/**\n * Checks if an object conforms to the interface needed to render an editor.\n * @deprecated Use Schema.instanceOf(Markdown.Document, data)\n */\n// TODO(burdon): Normalize types (from FilesPlugin).\nexport const isEditorModel = (data: any): data is { id: string; text: string } =>\n data &&\n typeof data === 'object' &&\n 'id' in data &&\n typeof data.id === 'string' &&\n 'text' in data &&\n typeof data.text === 'string';\n\nexport type MarkdownProperties = Record<string, any>;\n\nexport const isMarkdownProperties = (data: unknown): data is MarkdownProperties =>\n (Obj.isObject(data) as boolean)\n ? true\n : data && typeof data === 'object'\n ? 'title' in data && typeof data.title === 'string'\n : false;\n\nconst nonTitleChars = /[^\\w ]/g;\n\n// Lines matching these patterns are skipped.\nconst skipPatterns = [\n /^!\\[/, // Image.\n /^---\\s*$/, // Horizontal rule.\n /^```/, // Code block fence.\n /^\\s*$/, // Empty or whitespace-only.\n];\n\n// Patterns to extract title text (first capture group is used).\nconst titlePatterns = [\n /^#{1,6}\\s+(.+)/, // Heading.\n];\n\n/**\n * Extracts a fallback name by scanning lines for the first heading or text fragment.\n */\nexport const getFallbackName = (content = ''): string => {\n const len = content.length;\n\n let i = 0;\n while (i < len) {\n // Find end of line.\n let lineEnd = i;\n while (lineEnd < len && content[lineEnd] !== '\\n') {\n lineEnd++;\n }\n\n const line = content.slice(i, lineEnd).trim();\n i = lineEnd + 1;\n\n // Skip lines matching skip patterns.\n if (skipPatterns.some((pattern) => pattern.test(line))) {\n continue;\n }\n\n // Check for title patterns.\n for (const pattern of titlePatterns) {\n const match = pattern.exec(line);\n if (match) {\n const text = match[1].replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n return text;\n }\n }\n }\n\n // Use line as plain text fallback.\n const maxLen = 32;\n const text = line.replaceAll(nonTitleChars, '').trim();\n if (text.length > 0) {\n if (text.length > maxLen) {\n const words = text.split(/\\s+/);\n let result = '';\n for (const word of words) {\n const next = result.length === 0 ? word : result + ' ' + word;\n if (next.length > maxLen) {\n break;\n }\n result = next;\n }\n\n return result + '…';\n }\n\n return text;\n }\n }\n\n return '';\n};\n\n// TODO(burdon): Option to strip Markdown.\nexport const getContentSnippet = (content = '') => {\n const abstract = content\n .split('\\n')\n .filter((line) => !line.startsWith('!'))\n .filter((line) => line.trim() !== '');\n\n return abstract.slice(0, 3).join('\\n') ?? '';\n};\n\nexport const setFallbackName = debounce((doc: Markdown.Document, content = '') => {\n const name = getFallbackName(content);\n if (doc.fallbackName !== name) {\n doc.fallbackName = name;\n }\n}, 200);\n\nexport const serializer: TypedObjectSerializer<Markdown.Document> = {\n serialize: async ({ object }): Promise<string> => {\n const { content } = await object.content.load();\n return JSON.stringify({ name: object.name, fallbackName: object.fallbackName, content });\n },\n\n deserialize: async ({ content: serialized }) => {\n const { name, fallbackName, content } = JSON.parse(serialized);\n return Markdown.make({ name, fallbackName, content });\n },\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,gBAAgB;AACzB,SAASC,WAAW;AAUb,IAAMC,gBAAgB,CAACC,SAC5BA,QACA,OAAOA,SAAS,YAChB,QAAQA,QACR,OAAOA,KAAKC,OAAO,YACnB,UAAUD,QACV,OAAOA,KAAKE,SAAS;AAIhB,IAAMC,uBAAuB,CAACH,SAClCI,IAAIC,SAASL,IAAAA,IACV,OACAA,QAAQ,OAAOA,SAAS,WACtB,WAAWA,QAAQ,OAAOA,KAAKM,UAAU,WACzC;AAER,IAAMC,gBAAgB;AAGtB,IAAMC,eAAe;EACnB;EACA;EACA;EACA;;AAIF,IAAMC,gBAAgB;EACpB;;AAMK,IAAMC,kBAAkB,CAACC,UAAU,OAAE;AAC1C,QAAMC,MAAMD,QAAQE;AAEpB,MAAIC,IAAI;AACR,SAAOA,IAAIF,KAAK;AAEd,QAAIG,UAAUD;AACd,WAAOC,UAAUH,OAAOD,QAAQI,OAAAA,MAAa,MAAM;AACjDA;IACF;AAEA,UAAMC,OAAOL,QAAQM,MAAMH,GAAGC,OAAAA,EAASG,KAAI;AAC3CJ,QAAIC,UAAU;AAGd,QAAIP,aAAaW,KAAK,CAACC,YAAYA,QAAQC,KAAKL,IAAAA,CAAAA,GAAQ;AACtD;IACF;AAGA,eAAWI,WAAWX,eAAe;AACnC,YAAMa,QAAQF,QAAQG,KAAKP,IAAAA;AAC3B,UAAIM,OAAO;AACT,cAAMpB,QAAOoB,MAAM,CAAA,EAAGE,WAAWjB,eAAe,EAAA,EAAIW,KAAI;AACxD,YAAIhB,MAAKW,SAAS,GAAG;AACnB,iBAAOX;QACT;MACF;IACF;AAGA,UAAMuB,SAAS;AACf,UAAMvB,OAAOc,KAAKQ,WAAWjB,eAAe,EAAA,EAAIW,KAAI;AACpD,QAAIhB,KAAKW,SAAS,GAAG;AACnB,UAAIX,KAAKW,SAASY,QAAQ;AACxB,cAAMC,QAAQxB,KAAKyB,MAAM,KAAA;AACzB,YAAIC,SAAS;AACb,mBAAWC,QAAQH,OAAO;AACxB,gBAAMI,OAAOF,OAAOf,WAAW,IAAIgB,OAAOD,SAAS,MAAMC;AACzD,cAAIC,KAAKjB,SAASY,QAAQ;AACxB;UACF;AACAG,mBAASE;QACX;AAEA,eAAOF,SAAS;MAClB;AAEA,aAAO1B;IACT;EACF;AAEA,SAAO;AACT;AAGO,IAAM6B,oBAAoB,CAACpB,UAAU,OAAE;AAC5C,QAAMqB,WAAWrB,QACdgB,MAAM,IAAA,EACNM,OAAO,CAACjB,SAAS,CAACA,KAAKkB,WAAW,GAAA,CAAA,EAClCD,OAAO,CAACjB,SAASA,KAAKE,KAAI,MAAO,EAAA;AAEpC,SAAOc,SAASf,MAAM,GAAG,CAAA,EAAGkB,KAAK,IAAA,KAAS;AAC5C;AAEO,IAAMC,kBAAkBC,SAAS,CAACC,KAAwB3B,UAAU,OAAE;AAC3E,QAAM4B,OAAO7B,gBAAgBC,OAAAA;AAC7B,MAAI2B,IAAIE,iBAAiBD,MAAM;AAC7BD,QAAIE,eAAeD;EACrB;AACF,GAAG,GAAA;AAEI,IAAME,aAAuD;EAClEC,WAAW,OAAO,EAAEC,OAAM,MAAE;AAC1B,UAAM,EAAEhC,QAAO,IAAK,MAAMgC,OAAOhC,QAAQiC,KAAI;AAC7C,WAAOC,KAAKC,UAAU;MAAEP,MAAMI,OAAOJ;MAAMC,cAAcG,OAAOH;MAAc7B;IAAQ,CAAA;EACxF;EAEAoC,aAAa,OAAO,EAAEpC,SAASqC,WAAU,MAAE;AACzC,UAAM,EAAET,MAAMC,cAAc7B,QAAO,IAAKkC,KAAKI,MAAMD,UAAAA;AACnD,WAAOE,iBAASC,KAAK;MAAEZ;MAAMC;MAAc7B;IAAQ,CAAA;EACrD;AACF;",
|
|
6
|
+
"names": ["debounce", "Obj", "isEditorModel", "data", "id", "text", "isMarkdownProperties", "Obj", "isObject", "title", "nonTitleChars", "skipPatterns", "titlePatterns", "getFallbackName", "content", "len", "length", "i", "lineEnd", "line", "slice", "trim", "some", "pattern", "test", "match", "exec", "replaceAll", "maxLen", "words", "split", "result", "word", "next", "getContentSnippet", "abstract", "filter", "startsWith", "join", "setFallbackName", "debounce", "doc", "name", "fallbackName", "serializer", "serialize", "object", "load", "JSON", "stringify", "deserialize", "serialized", "parse", "Markdown", "make"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
Markdown_exports
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YFRTKXTB.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/blueprint-definition.ts
|
|
7
7
|
import { Capabilities, contributes } from "@dxos/app-framework";
|
|
@@ -44,7 +44,8 @@ var create_default = defineFunction({
|
|
|
44
44
|
import * as Effect2 from "effect/Effect";
|
|
45
45
|
import * as Schema2 from "effect/Schema";
|
|
46
46
|
import { ArtifactId as ArtifactId2 } from "@dxos/assistant";
|
|
47
|
-
import {
|
|
47
|
+
import { Database } from "@dxos/echo";
|
|
48
|
+
import { defineFunction as defineFunction2 } from "@dxos/functions";
|
|
48
49
|
var open_default = defineFunction2({
|
|
49
50
|
key: "dxos.org/function/markdown/open",
|
|
50
51
|
name: "Open",
|
|
@@ -58,7 +59,7 @@ var open_default = defineFunction2({
|
|
|
58
59
|
content: Schema2.String
|
|
59
60
|
}),
|
|
60
61
|
handler: Effect2.fn(function* ({ data: { id } }) {
|
|
61
|
-
const object = yield*
|
|
62
|
+
const object = yield* Database.Service.resolve(ArtifactId2.toDXN(id), Markdown_exports.Document);
|
|
62
63
|
const { content } = yield* Effect2.promise(() => object.content.load());
|
|
63
64
|
return {
|
|
64
65
|
content
|
|
@@ -70,8 +71,9 @@ var open_default = defineFunction2({
|
|
|
70
71
|
import * as Effect3 from "effect/Effect";
|
|
71
72
|
import * as Schema3 from "effect/Schema";
|
|
72
73
|
import { ArtifactId as ArtifactId3, applyDiffs } from "@dxos/assistant";
|
|
74
|
+
import { Database as Database2 } from "@dxos/echo";
|
|
73
75
|
import { createDocAccessor } from "@dxos/echo-db";
|
|
74
|
-
import {
|
|
76
|
+
import { defineFunction as defineFunction3 } from "@dxos/functions";
|
|
75
77
|
import { trim } from "@dxos/util";
|
|
76
78
|
var update_default = defineFunction3({
|
|
77
79
|
key: "dxos.org/function/markdown/update",
|
|
@@ -89,7 +91,7 @@ var update_default = defineFunction3({
|
|
|
89
91
|
}),
|
|
90
92
|
outputSchema: Schema3.Void,
|
|
91
93
|
handler: Effect3.fn(function* ({ data: { id, diffs } }) {
|
|
92
|
-
const object = yield*
|
|
94
|
+
const object = yield* Database2.Service.resolve(ArtifactId3.toDXN(id), Markdown_exports.Document);
|
|
93
95
|
const content = yield* Effect3.promise(() => object.content.load());
|
|
94
96
|
const accessor = createDocAccessor(content, [
|
|
95
97
|
"content"
|
|
@@ -148,4 +150,4 @@ export {
|
|
|
148
150
|
MarkdownBlueprint,
|
|
149
151
|
blueprint_definition_default
|
|
150
152
|
};
|
|
151
|
-
//# sourceMappingURL=chunk-
|
|
153
|
+
//# sourceMappingURL=chunk-C5KXP2ZE.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/blueprint-definition.ts", "../../../src/functions/create.ts", "../../../src/functions/open.ts", "../../../src/functions/update.ts", "../../../src/functions/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { Blueprint, Template } from '@dxos/blueprints';\nimport { type FunctionDefinition } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { MarkdownFunction } from '../functions';\n\nconst functions: FunctionDefinition[] = [MarkdownFunction.create, MarkdownFunction.open, MarkdownFunction.update];\n\nexport const MARKDOWN_BLUEPRINT_KEY = 'dxos.org/blueprint/markdown';\n\nexport const MarkdownBlueprint: Blueprint.Blueprint = Blueprint.make({\n key: MARKDOWN_BLUEPRINT_KEY,\n name: 'Markdown',\n tools: Blueprint.toolDefinitions({ functions }),\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});\n\nexport default () => [\n contributes(Capabilities.Functions, functions),\n contributes(Capabilities.BlueprintDefinition, MarkdownBlueprint),\n];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { Obj } from '@dxos/echo';\nimport { defineFunction } from '@dxos/functions';\nimport { Collection } from '@dxos/schema';\n\nimport { Markdown } from '../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/markdown/create',\n name: 'Create',\n description: 'Creates a new markdown document and adds it to the space.',\n inputSchema: Schema.Struct({\n name: Schema.String,\n content: Schema.String,\n }),\n outputSchema: Schema.Struct({\n id: ArtifactId,\n }),\n handler: Effect.fn(function* ({ data: { name, content } }) {\n const object = Markdown.make({ name, content });\n yield* Collection.add({ object });\n\n return {\n id: Obj.getDXN(object).toString(),\n };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId } from '@dxos/assistant';\nimport { Database } from '@dxos/echo';\nimport { defineFunction } from '@dxos/functions';\n\nimport { Markdown } from '../types';\n\nexport default defineFunction({\n key: 'dxos.org/function/markdown/open',\n name: 'Open',\n description: 'Opens and reads the contents of a new markdown document.',\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the markdown document.',\n }),\n }),\n outputSchema: Schema.Struct({\n content: Schema.String,\n }),\n handler: Effect.fn(function* ({ data: { id } }) {\n const object = yield* Database.Service.resolve(ArtifactId.toDXN(id), Markdown.Document);\n const { content } = yield* Effect.promise(() => object.content.load());\n return {\n content,\n };\n }),\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { ArtifactId, applyDiffs } from '@dxos/assistant';\nimport { Database } from '@dxos/echo';\nimport { createDocAccessor } from '@dxos/echo-db';\nimport { defineFunction } from '@dxos/functions';\nimport { trim } from '@dxos/util';\n\nimport { Markdown } from '../types';\n\n// TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.\nexport default defineFunction({\n key: 'dxos.org/function/markdown/update',\n name: 'Update',\n description: trim`\n Applies a set of diffs to the markdown document.\n `,\n inputSchema: Schema.Struct({\n id: ArtifactId.annotations({\n description: 'The ID of the markdown document.',\n }),\n diffs: Schema.Array(Schema.String).annotations({\n description: 'The diffs to apply to the document.',\n }),\n }),\n outputSchema: Schema.Void,\n handler: Effect.fn(function* ({ data: { id, diffs } }) {\n const object = yield* Database.Service.resolve(ArtifactId.toDXN(id), Markdown.Document);\n const content = yield* Effect.promise(() => object.content.load());\n const accessor = createDocAccessor(content, ['content']);\n applyDiffs(accessor, diffs);\n }),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { default as create } from './create';\nimport { default as open } from './open';\nimport { default as update } from './update';\n\nexport const MarkdownFunction = {\n create,\n open,\n update,\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,cAAcC,mBAAmB;AAC1C,SAASC,WAAWC,gBAAgB;AAEpC,SAASC,QAAAA,aAAY;;;ACHrB,YAAYC,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,WAAW;AACpB,SAASC,sBAAsB;AAC/B,SAASC,kBAAkB;AAI3B,IAAA,iBAAeC,eAAe;EAC5BC,KAAK;EACLC,MAAM;EACNC,aAAa;EACbC,aAAoBC,cAAO;IACzBH,MAAaI;IACbC,SAAgBD;EAClB,CAAA;EACAE,cAAqBH,cAAO;IAC1BI,IAAIC;EACN,CAAA;EACAC,SAAgBC,UAAG,WAAW,EAAEC,MAAM,EAAEX,MAAMK,QAAO,EAAE,GAAE;AACvD,UAAMO,SAASC,iBAASC,KAAK;MAAEd;MAAMK;IAAQ,CAAA;AAC7C,WAAOU,WAAWC,IAAI;MAAEJ;IAAO,CAAA;AAE/B,WAAO;MACLL,IAAIU,IAAIC,OAAON,MAAAA,EAAQO,SAAQ;IACjC;EACF,CAAA;AACF,CAAA;;;AC7BA,YAAYC,aAAY;AACxB,YAAYC,aAAY;AAExB,SAASC,cAAAA,mBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,kBAAAA,uBAAsB;AAI/B,IAAA,eAAeC,gBAAe;EAC5BC,KAAK;EACLC,MAAM;EACNC,aAAa;EACbC,aAAoBC,eAAO;IACzBC,IAAIC,YAAWC,YAAY;MACzBL,aAAa;IACf,CAAA;EACF,CAAA;EACAM,cAAqBJ,eAAO;IAC1BK,SAAgBC;EAClB,CAAA;EACAC,SAAgBC,WAAG,WAAW,EAAEC,MAAM,EAAER,GAAE,EAAE,GAAE;AAC5C,UAAMS,SAAS,OAAOC,SAASC,QAAQC,QAAQX,YAAWY,MAAMb,EAAAA,GAAKc,iBAASC,QAAQ;AACtF,UAAM,EAAEX,QAAO,IAAK,OAAcY,gBAAQ,MAAMP,OAAOL,QAAQa,KAAI,CAAA;AACnE,WAAO;MACLb;IACF;EACF,CAAA;AACF,CAAA;;;AC5BA,YAAYc,aAAY;AACxB,YAAYC,aAAY;AAExB,SAASC,cAAAA,aAAYC,kBAAkB;AACvC,SAASC,YAAAA,iBAAgB;AACzB,SAASC,yBAAyB;AAClC,SAASC,kBAAAA,uBAAsB;AAC/B,SAASC,YAAY;AAKrB,IAAA,iBAAeC,gBAAe;EAC5BC,KAAK;EACLC,MAAM;EACNC,aAAaC;;;EAGbC,aAAoBC,eAAO;IACzBC,IAAIC,YAAWC,YAAY;MACzBN,aAAa;IACf,CAAA;IACAO,OAAcC,cAAaC,cAAM,EAAEH,YAAY;MAC7CN,aAAa;IACf,CAAA;EACF,CAAA;EACAU,cAAqBC;EACrBC,SAAgBC,WAAG,WAAW,EAAEC,MAAM,EAAEV,IAAIG,MAAK,EAAE,GAAE;AACnD,UAAMQ,SAAS,OAAOC,UAASC,QAAQC,QAAQb,YAAWc,MAAMf,EAAAA,GAAKgB,iBAASC,QAAQ;AACtF,UAAMC,UAAU,OAAcC,gBAAQ,MAAMR,OAAOO,QAAQE,KAAI,CAAA;AAC/D,UAAMC,WAAWC,kBAAkBJ,SAAS;MAAC;KAAU;AACvDK,eAAWF,UAAUlB,KAAAA;EACvB,CAAA;AACF,CAAA;;;AC7BO,IAAMqB,mBAAmB;EAC9BC;EACAC;EACAC;AACF;;;AJDA,IAAMC,YAAkC;EAACC,iBAAiBC;EAAQD,iBAAiBE;EAAMF,iBAAiBG;;AAEnG,IAAMC,yBAAyB;AAE/B,IAAMC,oBAAyCC,UAAUC,KAAK;EACnEC,KAAKJ;EACLK,MAAM;EACNC,OAAOJ,UAAUK,gBAAgB;IAAEZ;EAAU,CAAA;EAC7Ca,cAAcC,SAASN,KAAK;;IAE1BO,QAAQC;;;;;;;;QAQJ,KAAA;;;;;QAKA,KAAA;;EAEN,CAAA;AACF,CAAA;AAEA,IAAA,gCAAe,MAAM;EACnBC,YAAYC,aAAaC,WAAWnB,SAAAA;EACpCiB,YAAYC,aAAaE,qBAAqBd,iBAAAA;;",
|
|
6
|
+
"names": ["Capabilities", "contributes", "Blueprint", "Template", "trim", "Effect", "Schema", "ArtifactId", "Obj", "defineFunction", "Collection", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "String", "content", "outputSchema", "id", "ArtifactId", "handler", "fn", "data", "object", "Markdown", "make", "Collection", "add", "Obj", "getDXN", "toString", "Effect", "Schema", "ArtifactId", "Database", "defineFunction", "defineFunction", "key", "name", "description", "inputSchema", "Struct", "id", "ArtifactId", "annotations", "outputSchema", "content", "String", "handler", "fn", "data", "object", "Database", "Service", "resolve", "toDXN", "Markdown", "Document", "promise", "load", "Effect", "Schema", "ArtifactId", "applyDiffs", "Database", "createDocAccessor", "defineFunction", "trim", "defineFunction", "key", "name", "description", "trim", "inputSchema", "Struct", "id", "ArtifactId", "annotations", "diffs", "Array", "String", "outputSchema", "Void", "handler", "fn", "data", "object", "Database", "Service", "resolve", "toDXN", "Markdown", "Document", "content", "promise", "load", "accessor", "createDocAccessor", "applyDiffs", "MarkdownFunction", "create", "open", "update", "functions", "MarkdownFunction", "create", "open", "update", "MARKDOWN_BLUEPRINT_KEY", "MarkdownBlueprint", "Blueprint", "make", "key", "name", "tools", "toolDefinitions", "instructions", "Template", "source", "trim", "contributes", "Capabilities", "Functions", "BlueprintDefinition"]
|
|
7
|
+
}
|
|
@@ -1,35 +1,94 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
MarkdownCapabilities
|
|
4
|
-
} from "./chunk-GMMVSXQ6.mjs";
|
|
5
2
|
import {
|
|
6
3
|
setFallbackName
|
|
7
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6F6FCTIA.mjs";
|
|
8
5
|
import {
|
|
9
6
|
Markdown_exports
|
|
10
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YFRTKXTB.mjs";
|
|
11
8
|
import {
|
|
12
9
|
meta
|
|
13
10
|
} from "./chunk-SHAMSMKQ.mjs";
|
|
14
11
|
|
|
15
|
-
// src/
|
|
16
|
-
import
|
|
17
|
-
import {
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
|
|
12
|
+
// src/hooks/useLinkQuery.ts
|
|
13
|
+
import * as Option from "effect/Option";
|
|
14
|
+
import { useCallback, useMemo } from "react";
|
|
15
|
+
import { Capabilities } from "@dxos/app-framework";
|
|
16
|
+
import { usePluginManager } from "@dxos/app-framework/react";
|
|
17
|
+
import { Filter, Obj, Query, Type } from "@dxos/echo";
|
|
18
|
+
import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from "@dxos/echo/internal";
|
|
19
|
+
import { toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
20
|
+
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
21
|
+
var useLinkQuery = (space) => {
|
|
22
|
+
const { t } = useTranslation();
|
|
23
|
+
const manager = usePluginManager();
|
|
24
|
+
const resolve = useCallback((typename) => manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {}, [
|
|
25
|
+
manager
|
|
26
|
+
]);
|
|
27
|
+
const filter = useMemo(() => Filter.or(...(space?.db.schemaRegistry.query({
|
|
28
|
+
location: [
|
|
29
|
+
"database",
|
|
30
|
+
"runtime"
|
|
31
|
+
]
|
|
32
|
+
}).runSync() ?? []).filter((schema) => getTypeAnnotation(schema)?.kind !== EntityKind.Relation).filter((schema) => !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false))).map((schema) => Filter.typename(Type.getTypename(schema)))), [
|
|
33
|
+
space
|
|
34
|
+
]);
|
|
35
|
+
const handleLinkQuery = useCallback(async (query) => {
|
|
36
|
+
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
37
|
+
const results = await space?.db.query(Query.select(filter)).run();
|
|
38
|
+
const getLabel = (object) => {
|
|
39
|
+
const label = Obj.getLabel(object);
|
|
40
|
+
if (label) {
|
|
41
|
+
return label;
|
|
42
|
+
}
|
|
43
|
+
const type = Obj.getTypename(object);
|
|
44
|
+
const metadata = resolve(type);
|
|
45
|
+
return metadata.label?.(object) || [
|
|
46
|
+
"object name placeholder",
|
|
47
|
+
{
|
|
48
|
+
ns: type,
|
|
49
|
+
default: "New object"
|
|
50
|
+
}
|
|
51
|
+
];
|
|
52
|
+
};
|
|
53
|
+
const items = results?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name)).map((object) => {
|
|
54
|
+
const metadata = resolve(Obj.getTypename(object));
|
|
55
|
+
const label = toLocalizedString(getLabel(object), t);
|
|
56
|
+
return {
|
|
57
|
+
id: object.id,
|
|
58
|
+
label,
|
|
59
|
+
icon: metadata.icon,
|
|
60
|
+
onSelect: ({ view, head }) => {
|
|
61
|
+
const link = `[${label}](${Obj.getDXN(object)})`;
|
|
62
|
+
if (query?.startsWith("@")) {
|
|
63
|
+
insertAtLineStart(view, head, `!${link}
|
|
64
|
+
`);
|
|
65
|
+
} else {
|
|
66
|
+
insertAtCursor(view, head, `${link} `);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}) ?? [];
|
|
71
|
+
return [
|
|
72
|
+
{
|
|
73
|
+
id: "echo",
|
|
74
|
+
items
|
|
75
|
+
}
|
|
76
|
+
];
|
|
77
|
+
}, [
|
|
78
|
+
space,
|
|
79
|
+
filter,
|
|
80
|
+
resolve
|
|
81
|
+
]);
|
|
82
|
+
return handleLinkQuery;
|
|
83
|
+
};
|
|
25
84
|
|
|
26
85
|
// src/hooks/useEditorMenuOptions.ts
|
|
27
|
-
import { useCallback, useMemo, useRef } from "react";
|
|
28
|
-
import { Domino, toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
86
|
+
import { useCallback as useCallback2, useMemo as useMemo2, useRef } from "react";
|
|
87
|
+
import { Domino, toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
29
88
|
import { filterMenuGroups, formattingCommands, linkSlashCommands } from "@dxos/react-ui-editor";
|
|
30
89
|
var useEditorMenuOptions = ({ editorView, slashCommandGroups, onLinkQuery }) => {
|
|
31
|
-
const { t } =
|
|
32
|
-
const getMenu =
|
|
90
|
+
const { t } = useTranslation2(meta.id);
|
|
91
|
+
const getMenu = useCallback2(({ text, trigger }) => {
|
|
33
92
|
switch (trigger) {
|
|
34
93
|
case "@": {
|
|
35
94
|
return onLinkQuery?.(text) ?? [];
|
|
@@ -40,7 +99,7 @@ var useEditorMenuOptions = ({ editorView, slashCommandGroups, onLinkQuery }) =>
|
|
|
40
99
|
formattingCommands,
|
|
41
100
|
linkSlashCommands,
|
|
42
101
|
...slashCommandGroups ?? []
|
|
43
|
-
], (item) => text ?
|
|
102
|
+
], (item) => text ? toLocalizedString2(item.label, t).toLowerCase().includes(text.toLowerCase()) : true);
|
|
44
103
|
}
|
|
45
104
|
}
|
|
46
105
|
}, [
|
|
@@ -48,7 +107,7 @@ var useEditorMenuOptions = ({ editorView, slashCommandGroups, onLinkQuery }) =>
|
|
|
48
107
|
onLinkQuery
|
|
49
108
|
]);
|
|
50
109
|
const viewRef = useRef(editorView);
|
|
51
|
-
return
|
|
110
|
+
return useMemo2(() => {
|
|
52
111
|
const trigger = onLinkQuery ? [
|
|
53
112
|
"/",
|
|
54
113
|
"@"
|
|
@@ -72,14 +131,14 @@ var useEditorMenuOptions = ({ editorView, slashCommandGroups, onLinkQuery }) =>
|
|
|
72
131
|
};
|
|
73
132
|
|
|
74
133
|
// src/hooks/useExtensions.tsx
|
|
75
|
-
import React, { useMemo as
|
|
134
|
+
import React, { useMemo as useMemo3 } from "react";
|
|
76
135
|
import { createRoot } from "react-dom/client";
|
|
77
136
|
import { LayoutAction, createIntent } from "@dxos/app-framework";
|
|
78
137
|
import { useIntentDispatcher } from "@dxos/app-framework/react";
|
|
79
138
|
import { debounceAndThrottle } from "@dxos/async";
|
|
80
|
-
import { Obj } from "@dxos/echo";
|
|
139
|
+
import { Obj as Obj2 } from "@dxos/echo";
|
|
140
|
+
import { createDocAccessor } from "@dxos/echo-db";
|
|
81
141
|
import { invariant } from "@dxos/invariant";
|
|
82
|
-
import { createDocAccessor } from "@dxos/react-client/echo";
|
|
83
142
|
import { getSpace } from "@dxos/react-client/echo";
|
|
84
143
|
import { useIdentity } from "@dxos/react-client/halo";
|
|
85
144
|
import { Icon, ThemeProvider } from "@dxos/react-ui";
|
|
@@ -93,12 +152,12 @@ var useExtensions = ({ id, object, settings, selectionManager, viewMode, editorS
|
|
|
93
152
|
const identity = useIdentity();
|
|
94
153
|
const space = getSpace(object);
|
|
95
154
|
let target;
|
|
96
|
-
if (
|
|
155
|
+
if (Obj2.instanceOf(Markdown_exports.Document, object)) {
|
|
97
156
|
target = object.content.target;
|
|
98
|
-
} else if (
|
|
157
|
+
} else if (Obj2.instanceOf(Text.Text, object)) {
|
|
99
158
|
target = object;
|
|
100
159
|
}
|
|
101
|
-
const baseExtensions =
|
|
160
|
+
const baseExtensions = useMemo3(() => createBaseExtensions({
|
|
102
161
|
id,
|
|
103
162
|
object,
|
|
104
163
|
settings,
|
|
@@ -120,7 +179,7 @@ var useExtensions = ({ id, object, settings, selectionManager, viewMode, editorS
|
|
|
120
179
|
settings?.typewriter,
|
|
121
180
|
selectionManager
|
|
122
181
|
]);
|
|
123
|
-
return
|
|
182
|
+
return useMemo3(() => [
|
|
124
183
|
// TODO(burdon): Pass this in?
|
|
125
184
|
// NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
|
|
126
185
|
target && createDataExtensions({
|
|
@@ -128,11 +187,11 @@ var useExtensions = ({ id, object, settings, selectionManager, viewMode, editorS
|
|
|
128
187
|
text: createDocAccessor(target, [
|
|
129
188
|
"content"
|
|
130
189
|
]),
|
|
131
|
-
space,
|
|
190
|
+
messenger: space,
|
|
132
191
|
identity
|
|
133
192
|
}),
|
|
134
193
|
// TODO(burdon): Reconcile with effect in parent.
|
|
135
|
-
|
|
194
|
+
Obj2.instanceOf(Markdown_exports.Document, object) && listener({
|
|
136
195
|
onChange: ({ text }) => {
|
|
137
196
|
setFallbackName(object, text);
|
|
138
197
|
}
|
|
@@ -171,7 +230,7 @@ var createBaseExtensions = ({ id, object, dispatch, settings, selectionManager,
|
|
|
171
230
|
id2
|
|
172
231
|
],
|
|
173
232
|
options: {
|
|
174
|
-
pivotId: object &&
|
|
233
|
+
pivotId: object && Obj2.isObject(object) ? Obj2.getDXN(object).toString() : id2
|
|
175
234
|
}
|
|
176
235
|
}));
|
|
177
236
|
}) : void 0
|
|
@@ -260,77 +319,6 @@ var renderRoot = (root, node) => {
|
|
|
260
319
|
return root;
|
|
261
320
|
};
|
|
262
321
|
|
|
263
|
-
// src/hooks/useLinkQuery.ts
|
|
264
|
-
import { useCallback as useCallback2, useMemo as useMemo3 } from "react";
|
|
265
|
-
import { Capabilities } from "@dxos/app-framework";
|
|
266
|
-
import { useCapabilities, usePluginManager } from "@dxos/app-framework/react";
|
|
267
|
-
import { Filter, Obj as Obj2, Query, Type } from "@dxos/echo";
|
|
268
|
-
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
269
|
-
import { SpaceCapabilities } from "@dxos/plugin-space";
|
|
270
|
-
import { toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
271
|
-
import { insertAtCursor, insertAtLineStart } from "@dxos/react-ui-editor";
|
|
272
|
-
var useLinkQuery = (space) => {
|
|
273
|
-
const { t } = useTranslation2();
|
|
274
|
-
const manager = usePluginManager();
|
|
275
|
-
const resolve = useCallback2((typename) => manager.context.getCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {}, [
|
|
276
|
-
manager
|
|
277
|
-
]);
|
|
278
|
-
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
279
|
-
const schemaWhiteList = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
280
|
-
const filter = useMemo3(() => Filter.or(...objectForms.map((form) => Filter.type(form.objectSchema)), ...schemaWhiteList.flat().map((schema) => Filter.typename(Type.getTypename(schema)))), [
|
|
281
|
-
objectForms,
|
|
282
|
-
schemaWhiteList
|
|
283
|
-
]);
|
|
284
|
-
const handleLinkQuery = useCallback2(async (query) => {
|
|
285
|
-
const name = query?.startsWith("@") ? query.slice(1).toLowerCase() : query?.toLowerCase() ?? "";
|
|
286
|
-
const results = await space?.db.query(Query.select(filter)).run();
|
|
287
|
-
const getLabel = (object) => {
|
|
288
|
-
const label = Obj2.getLabel(object);
|
|
289
|
-
if (label) {
|
|
290
|
-
return label;
|
|
291
|
-
}
|
|
292
|
-
const type = Obj2.getTypename(object);
|
|
293
|
-
const metadata = resolve(type);
|
|
294
|
-
return metadata.label?.(object) || [
|
|
295
|
-
"object name placeholder",
|
|
296
|
-
{
|
|
297
|
-
ns: type,
|
|
298
|
-
default: "New object"
|
|
299
|
-
}
|
|
300
|
-
];
|
|
301
|
-
};
|
|
302
|
-
const items = results?.objects.filter((object) => toLocalizedString2(getLabel(object), t).toLowerCase().includes(name)).map((object) => {
|
|
303
|
-
const metadata = resolve(Obj2.getTypename(object));
|
|
304
|
-
const label = toLocalizedString2(getLabel(object), t);
|
|
305
|
-
return {
|
|
306
|
-
id: object.id,
|
|
307
|
-
label,
|
|
308
|
-
icon: metadata.icon,
|
|
309
|
-
onSelect: ({ view, head }) => {
|
|
310
|
-
const link = `[${label}](${Obj2.getDXN(object)})`;
|
|
311
|
-
if (query?.startsWith("@")) {
|
|
312
|
-
insertAtLineStart(view, head, `!${link}
|
|
313
|
-
`);
|
|
314
|
-
} else {
|
|
315
|
-
insertAtCursor(view, head, `${link} `);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
};
|
|
319
|
-
}) ?? [];
|
|
320
|
-
return [
|
|
321
|
-
{
|
|
322
|
-
id: "echo",
|
|
323
|
-
items
|
|
324
|
-
}
|
|
325
|
-
];
|
|
326
|
-
}, [
|
|
327
|
-
space,
|
|
328
|
-
filter,
|
|
329
|
-
resolve
|
|
330
|
-
]);
|
|
331
|
-
return handleLinkQuery;
|
|
332
|
-
};
|
|
333
|
-
|
|
334
322
|
// src/hooks/useSelectCurrentThread.tsx
|
|
335
323
|
import { EditorView as EditorView2 } from "@codemirror/view";
|
|
336
324
|
import * as Schema from "effect/Schema";
|
|
@@ -407,9 +395,10 @@ import { isNonNullable } from "@dxos/util";
|
|
|
407
395
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
408
396
|
import React2, { forwardRef, useEffect, useImperativeHandle, useMemo as useMemo5 } from "react";
|
|
409
397
|
import { useDynamicRef, useThemeContext, useTranslation as useTranslation3 } from "@dxos/react-ui";
|
|
410
|
-
import { createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile,
|
|
398
|
+
import { createBasicExtensions, createMarkdownExtensions, createThemeExtensions, dropFile, editorSlots, formattingListener, processEditorPayload, stackItemContentEditorClassNames, useTextEditor } from "@dxos/react-ui-editor";
|
|
399
|
+
import { mx } from "@dxos/react-ui-theme";
|
|
411
400
|
import { isTruthy as isTruthy2 } from "@dxos/util";
|
|
412
|
-
var MarkdownEditorContent = /* @__PURE__ */ forwardRef(({ id, role, initialValue, editorStateStore, toolbarState, extensions,
|
|
401
|
+
var MarkdownEditorContent = /* @__PURE__ */ forwardRef(({ classNames, id, role, viewMode, initialValue, editorStateStore, toolbarState, extensions, scrollPastEnd, slots = editorSlots, onFileUpload }, forwardedRef) => {
|
|
413
402
|
var _effect = _useSignals();
|
|
414
403
|
try {
|
|
415
404
|
const { t } = useTranslation3(meta.id);
|
|
@@ -437,12 +426,11 @@ var MarkdownEditorContent = /* @__PURE__ */ forwardRef(({ id, role, initialValue
|
|
|
437
426
|
}),
|
|
438
427
|
createThemeExtensions({
|
|
439
428
|
themeMode,
|
|
440
|
-
slots
|
|
429
|
+
slots,
|
|
441
430
|
syntaxHighlighting: true
|
|
442
431
|
}),
|
|
443
432
|
createMarkdownExtensions(),
|
|
444
433
|
formattingListener(() => toolbarStateRef.current),
|
|
445
|
-
editorGutter,
|
|
446
434
|
role !== "section" && onFileUpload && dropFile({
|
|
447
435
|
// TODO(wittjosiah): Factor out to file uploader plugin.
|
|
448
436
|
onDrop: async (view, { files }) => {
|
|
@@ -473,7 +461,7 @@ var MarkdownEditorContent = /* @__PURE__ */ forwardRef(({ id, role, initialValue
|
|
|
473
461
|
role: "none",
|
|
474
462
|
ref: parentRef,
|
|
475
463
|
"data-testid": "composer.markdownRoot",
|
|
476
|
-
className: stackItemContentEditorClassNames(role),
|
|
464
|
+
className: mx(stackItemContentEditorClassNames(role), classNames),
|
|
477
465
|
"data-popover-collision-boundary": true,
|
|
478
466
|
...focusAttributes
|
|
479
467
|
});
|
|
@@ -667,7 +655,7 @@ MarkdownEditorRoot.displayName = "MarkdownEditor.Root";
|
|
|
667
655
|
var MarkdownEditorContent2 = (props) => {
|
|
668
656
|
var _effect = _useSignals4();
|
|
669
657
|
try {
|
|
670
|
-
const { id,
|
|
658
|
+
const { id, editorView, setEditorView, viewMode, toolbarState, extensions, popoverMenu: { groupsRef, ...menuProps } } = useMarkdownEditorContext(MarkdownEditorContent2.displayName);
|
|
671
659
|
return /* @__PURE__ */ React5.createElement(EditorMenuProvider, {
|
|
672
660
|
view: editorView,
|
|
673
661
|
groups: groupsRef.current,
|
|
@@ -675,9 +663,9 @@ var MarkdownEditorContent2 = (props) => {
|
|
|
675
663
|
}, /* @__PURE__ */ React5.createElement(MarkdownEditorContent, {
|
|
676
664
|
...props,
|
|
677
665
|
id,
|
|
678
|
-
extensions,
|
|
679
|
-
toolbarState,
|
|
680
666
|
viewMode,
|
|
667
|
+
toolbarState,
|
|
668
|
+
extensions,
|
|
681
669
|
ref: setEditorView
|
|
682
670
|
}));
|
|
683
671
|
} finally {
|
|
@@ -718,7 +706,7 @@ var PreviewBlock = ({ el, link }) => {
|
|
|
718
706
|
try {
|
|
719
707
|
const client = useClient();
|
|
720
708
|
const dxn = DXN.parse(link.ref);
|
|
721
|
-
const subject = client.graph.
|
|
709
|
+
const subject = client.graph.makeRef(dxn).target;
|
|
722
710
|
const data = useMemo6(() => ({
|
|
723
711
|
subject
|
|
724
712
|
}), [
|
|
@@ -740,89 +728,8 @@ var MarkdownEditor = {
|
|
|
740
728
|
Blocks: MarkdownEditorBlocks
|
|
741
729
|
};
|
|
742
730
|
|
|
743
|
-
// src/components/MarkdownContainer.tsx
|
|
744
|
-
var MarkdownContainer = ({ id, role, object, settings, extensionProviders, ...props }) => {
|
|
745
|
-
var _effect = _useSignals5();
|
|
746
|
-
try {
|
|
747
|
-
const space = getSpace2(object);
|
|
748
|
-
const isDocument = Obj3.instanceOf(Markdown_exports.Document, object);
|
|
749
|
-
const isText = Obj3.instanceOf(Text2.Text, object);
|
|
750
|
-
const attendableId = isDocument ? Obj3.getDXN(object).toString() : void 0;
|
|
751
|
-
const otherExtensionProviders = useCapabilities2(MarkdownCapabilities.Extensions);
|
|
752
|
-
const extensions = useMemo7(() => {
|
|
753
|
-
if (!Obj3.instanceOf(Markdown_exports.Document, object)) {
|
|
754
|
-
return [];
|
|
755
|
-
}
|
|
756
|
-
return [
|
|
757
|
-
...otherExtensionProviders ?? [],
|
|
758
|
-
...extensionProviders ?? []
|
|
759
|
-
].flat().reduce((acc, provider) => {
|
|
760
|
-
const extension = typeof provider === "function" ? provider({
|
|
761
|
-
document: object
|
|
762
|
-
}) : provider;
|
|
763
|
-
if (extension) {
|
|
764
|
-
acc.push(extension);
|
|
765
|
-
}
|
|
766
|
-
return acc;
|
|
767
|
-
}, []);
|
|
768
|
-
}, [
|
|
769
|
-
extensionProviders,
|
|
770
|
-
otherExtensionProviders,
|
|
771
|
-
object
|
|
772
|
-
]);
|
|
773
|
-
const { graph } = useAppGraph();
|
|
774
|
-
const customActions = useMemo7(() => {
|
|
775
|
-
return Atom.make((get) => {
|
|
776
|
-
const actions = get(graph.actions(id));
|
|
777
|
-
const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
|
|
778
|
-
const edges = nodes.map((node) => ({
|
|
779
|
-
source: "root",
|
|
780
|
-
target: node.id
|
|
781
|
-
}));
|
|
782
|
-
return {
|
|
783
|
-
nodes,
|
|
784
|
-
edges
|
|
785
|
-
};
|
|
786
|
-
});
|
|
787
|
-
}, [
|
|
788
|
-
graph
|
|
789
|
-
]);
|
|
790
|
-
const [upload] = useCapabilities2(Capabilities2.FileUploader);
|
|
791
|
-
const handleFileUpload = useMemo7(() => {
|
|
792
|
-
if (!space || !upload) {
|
|
793
|
-
return void 0;
|
|
794
|
-
}
|
|
795
|
-
return async (file) => upload(space, file);
|
|
796
|
-
}, [
|
|
797
|
-
space,
|
|
798
|
-
upload
|
|
799
|
-
]);
|
|
800
|
-
const handleLinkQuery = useLinkQuery(space);
|
|
801
|
-
return /* @__PURE__ */ React6.createElement(StackItem.Content, {
|
|
802
|
-
toolbar: settings.toolbar
|
|
803
|
-
}, /* @__PURE__ */ React6.createElement(MarkdownEditor.Root, {
|
|
804
|
-
id: attendableId ?? id,
|
|
805
|
-
object,
|
|
806
|
-
extensions,
|
|
807
|
-
onFileUpload: handleFileUpload,
|
|
808
|
-
onLinkQuery: handleLinkQuery,
|
|
809
|
-
...props
|
|
810
|
-
}, settings.toolbar && /* @__PURE__ */ React6.createElement(MarkdownEditor.Toolbar, {
|
|
811
|
-
id: attendableId ?? id,
|
|
812
|
-
role,
|
|
813
|
-
customActions
|
|
814
|
-
}), /* @__PURE__ */ React6.createElement(MarkdownEditor.Content, {
|
|
815
|
-
initialValue: isDocument ? object.content?.target?.content : isText ? object.content : object.text,
|
|
816
|
-
scrollPastEnd: role === "article"
|
|
817
|
-
}), /* @__PURE__ */ React6.createElement(MarkdownEditor.Blocks, null)));
|
|
818
|
-
} finally {
|
|
819
|
-
_effect.f();
|
|
820
|
-
}
|
|
821
|
-
};
|
|
822
|
-
var MarkdownContainer_default = MarkdownContainer;
|
|
823
|
-
|
|
824
731
|
export {
|
|
825
|
-
|
|
826
|
-
|
|
732
|
+
useLinkQuery,
|
|
733
|
+
MarkdownEditor
|
|
827
734
|
};
|
|
828
|
-
//# sourceMappingURL=chunk-
|
|
735
|
+
//# sourceMappingURL=chunk-FR6RW6DH.mjs.map
|