@latentic/live-markdown 0.4.0 → 0.4.1
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.1] - 2026-09-10
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- **KaTeX is fetched on the first expression, not at every launch.** It is the
|
|
8
|
+
largest single dependency this package pulls into a host's bundle — 293KB
|
|
9
|
+
measured in Compose, 13% of its eager chunk — and most documents contain no
|
|
10
|
+
`$` at all. Compose's eager chunk goes 2,061KB → 1,793KB and its `entry` mark
|
|
11
|
+
167ms → 150ms.
|
|
12
|
+
|
|
13
|
+
The cost is one frame on the first expression in a session; every one after is
|
|
14
|
+
synchronous. Until KaTeX lands the source stands in, which is also the existing
|
|
15
|
+
failure mode, so a document that never loads it still shows what was written.
|
|
16
|
+
|
|
17
|
+
- `mathTypesettingSettled()` is exported for anything that MEASURES rendered
|
|
18
|
+
math rather than displaying it — a document export, a test.
|
|
19
|
+
|
|
3
20
|
## [0.4.0] - 2026-09-10
|
|
4
21
|
|
|
5
22
|
### Fixed
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { WidgetType, EditorView } from '@codemirror/view';
|
|
2
2
|
|
|
3
|
+
/** Resolves once every math expression asked for so far has been typeset. */
|
|
4
|
+
declare function mathTypesettingSettled(): Promise<void>;
|
|
3
5
|
/** Typeset `tex` into `el`, falling back to the source on a KaTeX failure so a
|
|
4
6
|
* malformed expression shows what the author wrote rather than nothing. */
|
|
5
7
|
declare function renderMathInto(el: HTMLElement, tex: string, displayMode: boolean): void;
|
|
@@ -12,4 +14,4 @@ declare class MathWidget extends WidgetType {
|
|
|
12
14
|
ignoreEvent(): boolean;
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
export { MathWidget, renderMathInto };
|
|
17
|
+
export { MathWidget, mathTypesettingSettled, renderMathInto };
|
|
@@ -1,15 +1,36 @@
|
|
|
1
1
|
import {
|
|
2
2
|
__publicField
|
|
3
3
|
} from "../../chunk-V6TY7KAL.js";
|
|
4
|
-
import katex from "katex";
|
|
5
4
|
import { WidgetType } from "@codemirror/view";
|
|
6
|
-
|
|
5
|
+
let katex = null;
|
|
6
|
+
let loadingKatex = null;
|
|
7
|
+
function loadKatex() {
|
|
8
|
+
loadingKatex ?? (loadingKatex = import("katex").then((module) => {
|
|
9
|
+
katex = module.default;
|
|
10
|
+
}));
|
|
11
|
+
return loadingKatex;
|
|
12
|
+
}
|
|
13
|
+
const pendingTypesets = /* @__PURE__ */ new Set();
|
|
14
|
+
function mathTypesettingSettled() {
|
|
15
|
+
return Promise.all([...pendingTypesets]).then(() => void 0);
|
|
16
|
+
}
|
|
17
|
+
function typeset(el, tex, displayMode) {
|
|
7
18
|
try {
|
|
8
|
-
katex
|
|
19
|
+
katex?.render(tex, el, { displayMode, throwOnError: false, output: "html" });
|
|
9
20
|
} catch {
|
|
10
21
|
el.textContent = tex;
|
|
11
22
|
}
|
|
12
23
|
}
|
|
24
|
+
function renderMathInto(el, tex, displayMode) {
|
|
25
|
+
if (katex) {
|
|
26
|
+
typeset(el, tex, displayMode);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
el.textContent = tex;
|
|
30
|
+
const settled = loadKatex().then(() => typeset(el, tex, displayMode));
|
|
31
|
+
pendingTypesets.add(settled);
|
|
32
|
+
void settled.finally(() => pendingTypesets.delete(settled));
|
|
33
|
+
}
|
|
13
34
|
class MathWidget extends WidgetType {
|
|
14
35
|
constructor(tex, displayMode) {
|
|
15
36
|
super();
|
|
@@ -31,6 +52,7 @@ class MathWidget extends WidgetType {
|
|
|
31
52
|
}
|
|
32
53
|
export {
|
|
33
54
|
MathWidget,
|
|
55
|
+
mathTypesettingSettled,
|
|
34
56
|
renderMathInto
|
|
35
57
|
};
|
|
36
58
|
//# sourceMappingURL=mathWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/codemirror/math/mathWidget.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../../src/codemirror/math/mathWidget.ts"],"sourcesContent":["import { EditorView, WidgetType } from \"@codemirror/view\";\n\n/**\n * KaTeX, fetched the first time a document actually contains math.\n *\n * It is the largest single dependency this package pulls — 293KB of a host's\n * launch bundle, measured in Compose — and most documents have no `$` in them\n * at all. A static import spends it on every launch regardless.\n *\n * The cost of deferring is one frame on the first expression in a session: the\n * element is in the DOM already, so it is typeset in place when KaTeX lands,\n * and every expression after that is synchronous.\n */\nlet katex: typeof import(\"katex\").default | null = null;\nlet loadingKatex: Promise<void> | null = null;\n\nfunction loadKatex(): Promise<void> {\n loadingKatex ??= import(\"katex\").then((module) => {\n katex = module.default;\n });\n return loadingKatex;\n}\n\n/** Typesets still waiting on KaTeX. Anything that measures rendered output —\n * a test, or a host exporting a document — has to wait for these. */\nconst pendingTypesets = new Set<Promise<void>>();\n\n/** Resolves once every math expression asked for so far has been typeset. */\nexport function mathTypesettingSettled(): Promise<void> {\n return Promise.all([...pendingTypesets]).then(() => undefined);\n}\n\nfunction typeset(el: HTMLElement, tex: string, displayMode: boolean): void {\n try {\n katex?.render(tex, el, { displayMode, throwOnError: false, output: \"html\" });\n } catch {\n el.textContent = tex;\n }\n}\n\n/** Typeset `tex` into `el`, falling back to the source on a KaTeX failure so a\n * malformed expression shows what the author wrote rather than nothing. */\nexport function renderMathInto(el: HTMLElement, tex: string, displayMode: boolean): void {\n if (katex) {\n typeset(el, tex, displayMode);\n return;\n }\n // Until it arrives, the source stands in — which is also the failure mode, so\n // a document that never loads KaTeX still shows what the author wrote.\n el.textContent = tex;\n const settled = loadKatex().then(() => typeset(el, tex, displayMode));\n pendingTypesets.add(settled);\n void settled.finally(() => pendingTypesets.delete(settled));\n}\n\nexport class MathWidget extends WidgetType {\n constructor(\n readonly tex: string,\n readonly displayMode: boolean,\n ) {\n super();\n }\n\n override eq(other: MathWidget): boolean {\n return other.tex === this.tex && other.displayMode === this.displayMode;\n }\n\n override toDOM(_view: EditorView): HTMLElement {\n const span = document.createElement(this.displayMode ? \"div\" : \"span\");\n span.className = this.displayMode ? \"cm-math-block\" : \"cm-math-inline\";\n renderMathInto(span, this.tex, this.displayMode);\n return span;\n }\n\n override ignoreEvent(): boolean {\n return false;\n }\n}\n"],"mappings":";;;AAAA,SAAqB,kBAAkB;AAavC,IAAI,QAA+C;AACnD,IAAI,eAAqC;AAEzC,SAAS,YAA2B;AAClC,kCAAiB,OAAO,OAAO,EAAE,KAAK,CAAC,WAAW;AAChD,YAAQ,OAAO;AAAA,EACjB,CAAC;AACD,SAAO;AACT;AAIA,MAAM,kBAAkB,oBAAI,IAAmB;AAGxC,SAAS,yBAAwC;AACtD,SAAO,QAAQ,IAAI,CAAC,GAAG,eAAe,CAAC,EAAE,KAAK,MAAM,MAAS;AAC/D;AAEA,SAAS,QAAQ,IAAiB,KAAa,aAA4B;AACzE,MAAI;AACF,WAAO,OAAO,KAAK,IAAI,EAAE,aAAa,cAAc,OAAO,QAAQ,OAAO,CAAC;AAAA,EAC7E,QAAQ;AACN,OAAG,cAAc;AAAA,EACnB;AACF;AAIO,SAAS,eAAe,IAAiB,KAAa,aAA4B;AACvF,MAAI,OAAO;AACT,YAAQ,IAAI,KAAK,WAAW;AAC5B;AAAA,EACF;AAGA,KAAG,cAAc;AACjB,QAAM,UAAU,UAAU,EAAE,KAAK,MAAM,QAAQ,IAAI,KAAK,WAAW,CAAC;AACpE,kBAAgB,IAAI,OAAO;AAC3B,OAAK,QAAQ,QAAQ,MAAM,gBAAgB,OAAO,OAAO,CAAC;AAC5D;AAEO,MAAM,mBAAmB,WAAW;AAAA,EACzC,YACW,KACA,aACT;AACA,UAAM;AAHG;AACA;AAAA,EAGX;AAAA,EAES,GAAG,OAA4B;AACtC,WAAO,MAAM,QAAQ,KAAK,OAAO,MAAM,gBAAgB,KAAK;AAAA,EAC9D;AAAA,EAES,MAAM,OAAgC;AAC7C,UAAM,OAAO,SAAS,cAAc,KAAK,cAAc,QAAQ,MAAM;AACrE,SAAK,YAAY,KAAK,cAAc,kBAAkB;AACtD,mBAAe,MAAM,KAAK,KAAK,KAAK,WAAW;AAC/C,WAAO;AAAA,EACT;AAAA,EAES,cAAuB;AAC9B,WAAO;AAAA,EACT;AACF;","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export { mathExtension } from './codemirror/extensions/mathExtension.js';
|
|
|
18
18
|
export { mermaidExtension } from './codemirror/extensions/mermaidExtension.js';
|
|
19
19
|
export { tableExtension } from './codemirror/extensions/tableExtension.js';
|
|
20
20
|
export { wikilinkExtension } from './codemirror/extensions/wikilinkExtension.js';
|
|
21
|
+
export { mathTypesettingSettled } from './codemirror/math/mathWidget.js';
|
|
21
22
|
export { MermaidRenderResult, getCachedMermaidPng, isMermaidFenceInfo, renderMermaidToSvg, warmMermaidPng } from './codemirror/mermaid/mermaidRender.js';
|
|
22
23
|
export { HighlightedSpan, highlightFenceSpans } from './codemirror/code/highlightFence.js';
|
|
23
24
|
export { ImageInsertOptions, ImageInsertResult, buildImageMarkdown, extractImageBlobs, extractImageFiles, insertImageBlob } from './imageInsert.js';
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
tableExtension,
|
|
32
32
|
wikilinkExtension
|
|
33
33
|
} from "./codemirror/extensions/index.js";
|
|
34
|
+
import { mathTypesettingSettled } from "./codemirror/math/mathWidget.js";
|
|
34
35
|
import {
|
|
35
36
|
renderMermaidToSvg,
|
|
36
37
|
getCachedMermaidPng,
|
|
@@ -106,6 +107,7 @@ export {
|
|
|
106
107
|
mark,
|
|
107
108
|
markdownDecorationsPlugin,
|
|
108
109
|
mathExtension,
|
|
110
|
+
mathTypesettingSettled,
|
|
109
111
|
mergeExtensions,
|
|
110
112
|
mermaidExtension,
|
|
111
113
|
nodeRulesFacet,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @latentic/live-markdown — a rich markdown editor on CodeMirror 6.\n *\n * Headings, lists, tables, images, math, and footnotes render inline while the\n * file on disk stays plain markdown. `value` in / `onChange` out is always a\n * markdown string — no AST translation, no format lock-in.\n *\n * Host-environment concerns (image storage, asset resolution, link opening,\n * toolbar, selection UI) are injected through props/slots, each with a\n * browser-friendly default, so the editor runs unmodified in a plain browser or\n * a desktop shell.\n */\n\n// ── Editor component ─────────────────────────────────────────────────────────\nexport {\n CodeMirrorMarkdownEditor,\n type CodeMirrorMarkdownEditorProps,\n type CodeMirrorEditorMode,\n type EditorSelectionSnapshot,\n} from \"./codemirror/CodeMirrorMarkdownEditor\";\n\n// ── Core value types ─────────────────────────────────────────────────────────\nexport type { SourceRange, DocumentTextChange } from \"./types\";\n\n// ── Host-environment seam types ──────────────────────────────────────────────\nexport type {\n ResolveImageSrc,\n SaveImageBytes,\n OpenExternalUrl,\n} from \"./codemirror/core\";\n\n// ── Editing commands (for building custom toolbars) ──────────────────────────\nexport { formatCommands, blockCommands } from \"./codemirror/format\";\nexport { onEditorUpdate } from \"./codemirror/updateBus\";\n// Structural position queries resolve from this, never from a bare\n// `syntaxTree` — which only covers what the viewport has driven the parser\n// through (see the doc on `treeAt`).\nexport { treeAt } from \"./codemirror/core\";\n\n// ── Decoration engine + theme ────────────────────────────────────────────────\nexport { markdownDecorationsPlugin, editorBaseTheme } from \"./codemirror/core\";\n// The rendering contract: one rule per node name, combinators for the common\n// shapes, a facet for extension-contributed rules.\nexport {\n nodeRulesFacet,\n mark,\n line,\n headingLine,\n hideAlways,\n raw,\n structural,\n type NodeRule,\n type NodeRules,\n type NodeContext,\n type Paint,\n} from \"./codemirror/core\";\n// The other half of the rendering contract, for the constructs Lezer does NOT\n// parse. Wikilinks, `==highlight==`, footnote refs and `$math$` are found by\n// scanning text, so a renderer that walks the tree cannot see them; a feature\n// contributes its pattern and its markup here instead. `escapeText` is what a\n// rule's `render` needs to neutralise markup in document content.\nexport {\n inlineScanRulesFacet,\n scanInline,\n escapeText,\n escapeAttr,\n type InlineScanRule,\n type InlineScanMatch,\n} from \"./codemirror/core\";\n\n// ── Extension system ─────────────────────────────────────────────────────────\nexport {\n type MarkdownExtension,\n type ToolbarContribution,\n type CaretContextSnapshot,\n mergeExtensions,\n // Deprecated alias; see the note on `mergeExtensions`.\n composeExtensions,\n type ComposedExtension,\n highlightExtension,\n footnoteExtension,\n mathExtension,\n mermaidExtension,\n tableExtension,\n wikilinkExtension,\n} from \"./codemirror/extensions\";\n\n// Mermaid rendering, reusable outside the editor: the document export ships\n// the same SVGs the editor shows; the clipboard embeds pre-rasterised PNGs.\n// Concrete module path on purpose — mermaidRender is CodeMirror-free, and the\n// mermaid barrel star-exports the CM StateField alongside it.\nexport {\n renderMermaidToSvg,\n getCachedMermaidPng,\n warmMermaidPng,\n isMermaidFenceInfo,\n type MermaidRenderResult,\n} from \"./codemirror/mermaid/mermaidRender\";\n\n// Synchronous fence highlighting for the clipboard's HTML flavor.\nexport {\n highlightFenceSpans,\n type HighlightedSpan,\n} from \"./codemirror/code\";\n\n// ── Image pipeline ───────────────────────────────────────────────────────────\nexport {\n insertImageBlob,\n buildImageMarkdown,\n extractImageBlobs,\n extractImageFiles,\n type ImageInsertOptions,\n type ImageInsertResult,\n} from \"./imageInsert\";\nexport {\n imageInsertHandlers,\n pickImageFileForCaret,\n showImageActionMenu,\n} from \"./codemirror/image\";\n// The event contract is CodeMirror-free (see imageEditEvent) so a host can\n// listen for it without pulling the editor into its initial bundle — hence\n// the concrete module path, not the image barrel.\nexport {\n IMAGE_EDIT_ALT_EVENT,\n type ImageEditAltEventDetail,\n} from \"./codemirror/image/imageEditEvent\";\nexport {\n type ImageResolveContext,\n defaultResolveImageSrc,\n hasUriScheme,\n computeFileDir,\n isAbsolutePath,\n dirnamePath,\n joinPath,\n} from \"./imageSrcResolver\";\n\n// ── Frontmatter ──────────────────────────────────────────────────────────────\nexport {\n parseFrontmatter,\n serializeMarkdown,\n setFrontmatterField,\n type Frontmatter,\n type FrontmatterValue,\n type MarkdownDocument,\n} from \"./frontmatter\";\n\n// ── Link resolution (wiki + workspace links) ─────────────────────────────────\nexport {\n parseWikilinkBody,\n resolveWikilinkTarget,\n} from \"./links/wikilink\";\nexport {\n resolveWorkspaceLink,\n type ResolvedWorkspaceLink,\n type ResolveWorkspaceLinkOptions,\n} from \"./links/workspaceLink\";\n"],"mappings":";AAcA;AAAA,EACE;AAAA,OAIK;AAaP,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,sBAAsB;AAI/B,SAAS,cAAc;AAGvB,SAAS,2BAA2B,uBAAuB;AAG3D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAMP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAGP;AAAA,EAIE;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @latentic/live-markdown — a rich markdown editor on CodeMirror 6.\n *\n * Headings, lists, tables, images, math, and footnotes render inline while the\n * file on disk stays plain markdown. `value` in / `onChange` out is always a\n * markdown string — no AST translation, no format lock-in.\n *\n * Host-environment concerns (image storage, asset resolution, link opening,\n * toolbar, selection UI) are injected through props/slots, each with a\n * browser-friendly default, so the editor runs unmodified in a plain browser or\n * a desktop shell.\n */\n\n// ── Editor component ─────────────────────────────────────────────────────────\nexport {\n CodeMirrorMarkdownEditor,\n type CodeMirrorMarkdownEditorProps,\n type CodeMirrorEditorMode,\n type EditorSelectionSnapshot,\n} from \"./codemirror/CodeMirrorMarkdownEditor\";\n\n// ── Core value types ─────────────────────────────────────────────────────────\nexport type { SourceRange, DocumentTextChange } from \"./types\";\n\n// ── Host-environment seam types ──────────────────────────────────────────────\nexport type {\n ResolveImageSrc,\n SaveImageBytes,\n OpenExternalUrl,\n} from \"./codemirror/core\";\n\n// ── Editing commands (for building custom toolbars) ──────────────────────────\nexport { formatCommands, blockCommands } from \"./codemirror/format\";\nexport { onEditorUpdate } from \"./codemirror/updateBus\";\n// Structural position queries resolve from this, never from a bare\n// `syntaxTree` — which only covers what the viewport has driven the parser\n// through (see the doc on `treeAt`).\nexport { treeAt } from \"./codemirror/core\";\n\n// ── Decoration engine + theme ────────────────────────────────────────────────\nexport { markdownDecorationsPlugin, editorBaseTheme } from \"./codemirror/core\";\n// The rendering contract: one rule per node name, combinators for the common\n// shapes, a facet for extension-contributed rules.\nexport {\n nodeRulesFacet,\n mark,\n line,\n headingLine,\n hideAlways,\n raw,\n structural,\n type NodeRule,\n type NodeRules,\n type NodeContext,\n type Paint,\n} from \"./codemirror/core\";\n// The other half of the rendering contract, for the constructs Lezer does NOT\n// parse. Wikilinks, `==highlight==`, footnote refs and `$math$` are found by\n// scanning text, so a renderer that walks the tree cannot see them; a feature\n// contributes its pattern and its markup here instead. `escapeText` is what a\n// rule's `render` needs to neutralise markup in document content.\nexport {\n inlineScanRulesFacet,\n scanInline,\n escapeText,\n escapeAttr,\n type InlineScanRule,\n type InlineScanMatch,\n} from \"./codemirror/core\";\n\n// ── Extension system ─────────────────────────────────────────────────────────\nexport {\n type MarkdownExtension,\n type ToolbarContribution,\n type CaretContextSnapshot,\n mergeExtensions,\n // Deprecated alias; see the note on `mergeExtensions`.\n composeExtensions,\n type ComposedExtension,\n highlightExtension,\n footnoteExtension,\n mathExtension,\n mermaidExtension,\n tableExtension,\n wikilinkExtension,\n} from \"./codemirror/extensions\";\n// KaTeX is fetched on the first expression, so anything that MEASURES rendered\n// math — an export, a test — has to wait for it.\nexport { mathTypesettingSettled } from \"./codemirror/math/mathWidget\";\n\n// Mermaid rendering, reusable outside the editor: the document export ships\n// the same SVGs the editor shows; the clipboard embeds pre-rasterised PNGs.\n// Concrete module path on purpose — mermaidRender is CodeMirror-free, and the\n// mermaid barrel star-exports the CM StateField alongside it.\nexport {\n renderMermaidToSvg,\n getCachedMermaidPng,\n warmMermaidPng,\n isMermaidFenceInfo,\n type MermaidRenderResult,\n} from \"./codemirror/mermaid/mermaidRender\";\n\n// Synchronous fence highlighting for the clipboard's HTML flavor.\nexport {\n highlightFenceSpans,\n type HighlightedSpan,\n} from \"./codemirror/code\";\n\n// ── Image pipeline ───────────────────────────────────────────────────────────\nexport {\n insertImageBlob,\n buildImageMarkdown,\n extractImageBlobs,\n extractImageFiles,\n type ImageInsertOptions,\n type ImageInsertResult,\n} from \"./imageInsert\";\nexport {\n imageInsertHandlers,\n pickImageFileForCaret,\n showImageActionMenu,\n} from \"./codemirror/image\";\n// The event contract is CodeMirror-free (see imageEditEvent) so a host can\n// listen for it without pulling the editor into its initial bundle — hence\n// the concrete module path, not the image barrel.\nexport {\n IMAGE_EDIT_ALT_EVENT,\n type ImageEditAltEventDetail,\n} from \"./codemirror/image/imageEditEvent\";\nexport {\n type ImageResolveContext,\n defaultResolveImageSrc,\n hasUriScheme,\n computeFileDir,\n isAbsolutePath,\n dirnamePath,\n joinPath,\n} from \"./imageSrcResolver\";\n\n// ── Frontmatter ──────────────────────────────────────────────────────────────\nexport {\n parseFrontmatter,\n serializeMarkdown,\n setFrontmatterField,\n type Frontmatter,\n type FrontmatterValue,\n type MarkdownDocument,\n} from \"./frontmatter\";\n\n// ── Link resolution (wiki + workspace links) ─────────────────────────────────\nexport {\n parseWikilinkBody,\n resolveWikilinkTarget,\n} from \"./links/wikilink\";\nexport {\n resolveWorkspaceLink,\n type ResolvedWorkspaceLink,\n type ResolveWorkspaceLinkOptions,\n} from \"./links/workspaceLink\";\n"],"mappings":";AAcA;AAAA,EACE;AAAA,OAIK;AAaP,SAAS,gBAAgB,qBAAqB;AAC9C,SAAS,sBAAsB;AAI/B,SAAS,cAAc;AAGvB,SAAS,2BAA2B,uBAAuB;AAG3D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAMP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAGP;AAAA,EAIE;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,SAAS,8BAA8B;AAMvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAGP;AAAA,EACE;AAAA,OAEK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAIP;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OAGK;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@latentic/live-markdown",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "WYSIWYG markdown editor for React, built on CodeMirror 6. Headings, tables, LaTeX math and Mermaid diagrams render inline as you type \u2014 no preview pane and no AST: value in and onChange out is the same markdown string, frontmatter included.",
|