@milkdown/plugin-listener
Advanced tools
Comparing version 5.3.1 to 5.3.2
@@ -1,12 +0,31 @@ | ||
/// <reference types="prosemirror-model" /> | ||
import { MilkdownPlugin } from '@milkdown/core'; | ||
import { Ctx, MilkdownPlugin } from '@milkdown/core'; | ||
import { Node as ProseNode } from '@milkdown/prose'; | ||
export declare type DocListener = (doc: ProseNode) => void; | ||
export declare type MarkdownListener = (getMarkdown: () => string) => void; | ||
export declare type Listener = { | ||
doc?: DocListener[]; | ||
markdown?: MarkdownListener[]; | ||
}; | ||
export declare const listenerCtx: import("@milkdown/core").Slice<Listener>; | ||
declare class ListenerManager { | ||
private beforeMountedListeners; | ||
private mountedListeners; | ||
private updatedListeners; | ||
private markdownUpdatedListeners; | ||
private blurListeners; | ||
private focusListeners; | ||
private destroyListeners; | ||
get listeners(): { | ||
beforeMounted: ((ctx: Ctx) => void)[]; | ||
mounted: ((ctx: Ctx) => void)[]; | ||
updated: ((ctx: Ctx, doc: ProseNode<any>, prevDoc: ProseNode<any> | null) => void)[]; | ||
markdownUpdated: ((ctx: Ctx, markdown: string, prevMarkdown: string | null) => void)[]; | ||
blur: ((ctx: Ctx) => void)[]; | ||
focus: ((ctx: Ctx) => void)[]; | ||
destroy: ((ctx: Ctx) => void)[]; | ||
}; | ||
beforeMount: (fn: (ctx: Ctx) => void) => this; | ||
mounted: (fn: (ctx: Ctx) => void) => this; | ||
updated: (fn: (ctx: Ctx, doc: ProseNode, prevDoc: ProseNode | null) => void) => this; | ||
markdownUpdated(fn: (ctx: Ctx, markdown: string, prevMarkdown: string | null) => void): this; | ||
blur(fn: (ctx: Ctx) => void): this; | ||
focus(fn: (ctx: Ctx) => void): this; | ||
destroy(fn: (ctx: Ctx) => void): this; | ||
} | ||
export declare const listenerCtx: import("@milkdown/core").Slice<ListenerManager>; | ||
export declare const listener: MilkdownPlugin; | ||
export {}; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -1,11 +0,88 @@ | ||
import { createSlice, SerializerReady, serializerCtx, prosePluginsCtx } from "@milkdown/core"; | ||
import { createSlice, InitReady, SerializerReady, serializerCtx, prosePluginsCtx, EditorViewReady } from "@milkdown/core"; | ||
import { Plugin } from "@milkdown/prose"; | ||
const listenerCtx = createSlice({}, "listener"); | ||
class ListenerManager { | ||
constructor() { | ||
this.beforeMountedListeners = []; | ||
this.mountedListeners = []; | ||
this.updatedListeners = []; | ||
this.markdownUpdatedListeners = []; | ||
this.blurListeners = []; | ||
this.focusListeners = []; | ||
this.destroyListeners = []; | ||
this.beforeMount = (fn) => { | ||
this.beforeMountedListeners.push(fn); | ||
return this; | ||
}; | ||
this.mounted = (fn) => { | ||
this.mountedListeners.push(fn); | ||
return this; | ||
}; | ||
this.updated = (fn) => { | ||
this.updatedListeners.push(fn); | ||
return this; | ||
}; | ||
} | ||
get listeners() { | ||
return { | ||
beforeMounted: this.beforeMountedListeners, | ||
mounted: this.mountedListeners, | ||
updated: this.updatedListeners, | ||
markdownUpdated: this.markdownUpdatedListeners, | ||
blur: this.blurListeners, | ||
focus: this.focusListeners, | ||
destroy: this.destroyListeners | ||
}; | ||
} | ||
markdownUpdated(fn) { | ||
this.markdownUpdatedListeners.push(fn); | ||
return this; | ||
} | ||
blur(fn) { | ||
this.blurListeners.push(fn); | ||
return this; | ||
} | ||
focus(fn) { | ||
this.focusListeners.push(fn); | ||
return this; | ||
} | ||
destroy(fn) { | ||
this.destroyListeners.push(fn); | ||
return this; | ||
} | ||
} | ||
const listenerCtx = createSlice(new ListenerManager(), "listener"); | ||
const listener = (pre) => { | ||
pre.inject(listenerCtx); | ||
pre.inject(listenerCtx, new ListenerManager()); | ||
return async (ctx) => { | ||
await ctx.wait(InitReady); | ||
const listener2 = ctx.get(listenerCtx); | ||
if (listener2.doc || listener2.markdown) { | ||
throw new Error("listener.doc and listener.markdown are deprecated, use new listener manager API instead"); | ||
} | ||
const { listeners } = listener2; | ||
listeners.beforeMounted.forEach((fn) => fn(ctx)); | ||
await ctx.wait(SerializerReady); | ||
const listener2 = ctx.get(listenerCtx); | ||
const serializer = ctx.get(serializerCtx); | ||
let prevDoc = null; | ||
let prevMarkdown = null; | ||
const plugin = new Plugin({ | ||
view: () => { | ||
return { | ||
destroy: () => { | ||
listeners.destroy.forEach((fn) => fn(ctx)); | ||
} | ||
}; | ||
}, | ||
props: { | ||
handleDOMEvents: { | ||
focus: () => { | ||
listeners.focus.forEach((fn) => fn(ctx)); | ||
return false; | ||
}, | ||
blur: () => { | ||
listeners.blur.forEach((fn) => fn(ctx)); | ||
return false; | ||
} | ||
} | ||
}, | ||
state: { | ||
@@ -15,11 +92,20 @@ init: () => { | ||
apply: (tr) => { | ||
var _a, _b; | ||
if (!tr.docChanged) | ||
return; | ||
(_a = listener2.markdown) == null ? void 0 : _a.forEach((markdownListener) => { | ||
markdownListener(() => serializer(tr.doc)); | ||
}); | ||
(_b = listener2.doc) == null ? void 0 : _b.forEach((docListener) => { | ||
docListener(tr.doc); | ||
}); | ||
const { doc } = tr; | ||
if (listeners.updated.length > 0 && (prevDoc == null || prevDoc !== doc)) { | ||
listeners.updated.forEach((fn) => { | ||
fn(ctx, doc, prevDoc); | ||
}); | ||
} | ||
if (listeners.markdownUpdated.length > 0) { | ||
const markdown = serializer(tr.doc); | ||
if (prevMarkdown == null || prevMarkdown !== markdown) { | ||
listeners.markdownUpdated.forEach((fn) => { | ||
fn(ctx, markdown, prevMarkdown); | ||
}); | ||
prevMarkdown = markdown; | ||
} | ||
} | ||
prevDoc = doc; | ||
} | ||
@@ -29,2 +115,4 @@ } | ||
ctx.update(prosePluginsCtx, (x) => x.concat(plugin)); | ||
await ctx.wait(EditorViewReady); | ||
listeners.mounted.forEach((fn) => fn(ctx)); | ||
}; | ||
@@ -31,0 +119,0 @@ }; |
{ | ||
"name": "@milkdown/plugin-listener", | ||
"version": "5.3.1", | ||
"version": "5.3.2", | ||
"type": "module", | ||
@@ -17,16 +17,10 @@ "main": "./lib/index.es.js", | ||
], | ||
"peerDependencies": { | ||
"@milkdown/core": "*" | ||
}, | ||
"dependencies": { | ||
"@milkdown/core": "5.3.2", | ||
"@milkdown/prose": "5.3.2", | ||
"@milkdown/utils": "5.3.2", | ||
"tslib": "^2.3.1" | ||
}, | ||
"devDependencies": { | ||
"@milkdown/core": "5.3.1", | ||
"@milkdown/prose": "5.3.1", | ||
"@milkdown/utils": "5.3.1" | ||
}, | ||
"scripts": { | ||
"start": "vite", | ||
"watch": "vite build --watch", | ||
"start": "vite build --watch", | ||
"test": "vitest", | ||
@@ -36,3 +30,3 @@ "tsc": "tsc --noEmit", | ||
}, | ||
"readme": "# @milkdown/plugin-listener\n\nListener plugin for [milkdown](https://saul-mirone.github.io/milkdown/).\n\n# Example Usage\n\n```typescript\nimport { Editor } from '@milkdown/core';\nimport { commonmark } from '@milkdown/preset-commonmark';\nimport { nord } from '@milkdown/theme-nord';\n\nimport { listener, listenerCtx } from '@milkdown/plugin-listener';\n\nEditor.make()\n .config((ctx) => {\n ctx.set(listenerCtx, {\n markdown: [(get) => console.log(get())],\n doc: [console.log],\n });\n })\n .use(nord)\n .use(commonmark)\n .use(listener)\n .create();\n```\n\n# License\n\nMilkdown is open sourced software licensed under [MIT license](https://github.com/Saul-Mirone/milkdown/blob/main/LICENSE).\n" | ||
"readme": "# @milkdown/plugin-listener\n\nListener plugin for [milkdown](https://saul-mirone.github.io/milkdown/).\n\n# Example Usage\n\n```typescript\nimport { Editor } from '@milkdown/core';\nimport { commonmark } from '@milkdown/preset-commonmark';\nimport { nord } from '@milkdown/theme-nord';\n\nimport { listener, listenerCtx } from '@milkdown/plugin-listener';\n\nEditor.make()\n .config((ctx) => {\n ctx.get(listenerCtx)\n .beforeMount((ctx) => {\n // before the editor mounts\n })\n .mounted((ctx) => {\n // after the editor mounts\n })\n .updated((ctx, doc, prevDoc) => {\n // when editor state updates\n })\n .markdownUpdated((ctx, markdown, prevMarkdown) => {\n // when markdown updates\n })\n .blur((ctx) => {\n // when editor loses focus\n })\n .focus((ctx) => {\n // when focus editor\n })\n .destroy((ctx) => {\n // when editor is being destroyed\n });\n })\n .use(nord)\n .use(commonmark)\n .use(listener)\n .create();\n```\n\n# License\n\nMilkdown is open sourced software licensed under [MIT license](https://github.com/Saul-Mirone/milkdown/blob/main/LICENSE).\n" | ||
} |
@@ -16,6 +16,24 @@ # @milkdown/plugin-listener | ||
.config((ctx) => { | ||
ctx.set(listenerCtx, { | ||
markdown: [(get) => console.log(get())], | ||
doc: [console.log], | ||
}); | ||
ctx.get(listenerCtx) | ||
.beforeMount((ctx) => { | ||
// before the editor mounts | ||
}) | ||
.mounted((ctx) => { | ||
// after the editor mounts | ||
}) | ||
.updated((ctx, doc, prevDoc) => { | ||
// when editor state updates | ||
}) | ||
.markdownUpdated((ctx, markdown, prevMarkdown) => { | ||
// when markdown updates | ||
}) | ||
.blur((ctx) => { | ||
// when editor loses focus | ||
}) | ||
.focus((ctx) => { | ||
// when focus editor | ||
}) | ||
.destroy((ctx) => { | ||
// when editor is being destroyed | ||
}); | ||
}) | ||
@@ -22,0 +40,0 @@ .use(nord) |
140
src/index.ts
/* Copyright 2021, Milkdown by Mirone. */ | ||
import { createSlice, MilkdownPlugin, prosePluginsCtx, serializerCtx, SerializerReady } from '@milkdown/core'; | ||
import { Node as ProseNode, Plugin as StatePlugin } from '@milkdown/prose'; | ||
import { | ||
createSlice, | ||
Ctx, | ||
EditorViewReady, | ||
InitReady, | ||
MilkdownPlugin, | ||
prosePluginsCtx, | ||
serializerCtx, | ||
SerializerReady, | ||
} from '@milkdown/core'; | ||
import { Node as ProseNode, Plugin } from '@milkdown/prose'; | ||
export type DocListener = (doc: ProseNode) => void; | ||
export type MarkdownListener = (getMarkdown: () => string) => void; | ||
export type Listener = { | ||
doc?: DocListener[]; | ||
markdown?: MarkdownListener[]; | ||
}; | ||
export const listenerCtx = createSlice<Listener>({}, 'listener'); | ||
class ListenerManager { | ||
private beforeMountedListeners: Array<(ctx: Ctx) => void> = []; | ||
private mountedListeners: Array<(ctx: Ctx) => void> = []; | ||
private updatedListeners: Array<(ctx: Ctx, doc: ProseNode, prevDoc: ProseNode | null) => void> = []; | ||
private markdownUpdatedListeners: Array<(ctx: Ctx, markdown: string, prevMarkdown: string | null) => void> = []; | ||
private blurListeners: Array<(ctx: Ctx) => void> = []; | ||
private focusListeners: Array<(ctx: Ctx) => void> = []; | ||
private destroyListeners: Array<(ctx: Ctx) => void> = []; | ||
get listeners() { | ||
return { | ||
beforeMounted: this.beforeMountedListeners, | ||
mounted: this.mountedListeners, | ||
updated: this.updatedListeners, | ||
markdownUpdated: this.markdownUpdatedListeners, | ||
blur: this.blurListeners, | ||
focus: this.focusListeners, | ||
destroy: this.destroyListeners, | ||
}; | ||
} | ||
beforeMount = (fn: (ctx: Ctx) => void) => { | ||
this.beforeMountedListeners.push(fn); | ||
return this; | ||
}; | ||
mounted = (fn: (ctx: Ctx) => void) => { | ||
this.mountedListeners.push(fn); | ||
return this; | ||
}; | ||
updated = (fn: (ctx: Ctx, doc: ProseNode, prevDoc: ProseNode | null) => void) => { | ||
this.updatedListeners.push(fn); | ||
return this; | ||
}; | ||
markdownUpdated(fn: (ctx: Ctx, markdown: string, prevMarkdown: string | null) => void) { | ||
this.markdownUpdatedListeners.push(fn); | ||
return this; | ||
} | ||
blur(fn: (ctx: Ctx) => void) { | ||
this.blurListeners.push(fn); | ||
return this; | ||
} | ||
focus(fn: (ctx: Ctx) => void) { | ||
this.focusListeners.push(fn); | ||
return this; | ||
} | ||
destroy(fn: (ctx: Ctx) => void) { | ||
this.destroyListeners.push(fn); | ||
return this; | ||
} | ||
} | ||
export const listenerCtx = createSlice<ListenerManager>(new ListenerManager(), 'listener'); | ||
export const listener: MilkdownPlugin = (pre) => { | ||
pre.inject(listenerCtx); | ||
pre.inject(listenerCtx, new ListenerManager()); | ||
return async (ctx) => { | ||
await ctx.wait(InitReady); | ||
const listener = ctx.get(listenerCtx); | ||
// @ts-expect-error deprecated old listener API | ||
if (listener.doc || listener.markdown) { | ||
throw new Error('listener.doc and listener.markdown are deprecated, use new listener manager API instead'); | ||
} | ||
const { listeners } = listener; | ||
listeners.beforeMounted.forEach((fn) => fn(ctx)); | ||
await ctx.wait(SerializerReady); | ||
const listener = ctx.get(listenerCtx); | ||
const serializer = ctx.get(serializerCtx); | ||
const plugin = new StatePlugin({ | ||
let prevDoc: ProseNode | null = null; | ||
let prevMarkdown: string | null = null; | ||
const plugin = new Plugin({ | ||
view: () => { | ||
return { | ||
destroy: () => { | ||
listeners.destroy.forEach((fn) => fn(ctx)); | ||
}, | ||
}; | ||
}, | ||
props: { | ||
handleDOMEvents: { | ||
focus: () => { | ||
listeners.focus.forEach((fn) => fn(ctx)); | ||
return false; | ||
}, | ||
blur: () => { | ||
listeners.blur.forEach((fn) => fn(ctx)); | ||
return false; | ||
}, | ||
}, | ||
}, | ||
state: { | ||
@@ -28,9 +119,19 @@ init: () => { | ||
if (!tr.docChanged) return; | ||
const { doc } = tr; | ||
if (listeners.updated.length > 0 && (prevDoc == null || prevDoc !== doc)) { | ||
listeners.updated.forEach((fn) => { | ||
fn(ctx, doc, prevDoc); | ||
}); | ||
} | ||
if (listeners.markdownUpdated.length > 0) { | ||
const markdown = serializer(tr.doc); | ||
if (prevMarkdown == null || prevMarkdown !== markdown) { | ||
listeners.markdownUpdated.forEach((fn) => { | ||
fn(ctx, markdown, prevMarkdown); | ||
}); | ||
prevMarkdown = markdown; | ||
} | ||
} | ||
listener.markdown?.forEach((markdownListener) => { | ||
markdownListener(() => serializer(tr.doc)); | ||
}); | ||
listener.doc?.forEach((docListener) => { | ||
docListener(tr.doc); | ||
}); | ||
prevDoc = doc; | ||
}, | ||
@@ -40,3 +141,6 @@ }, | ||
ctx.update(prosePluginsCtx, (x) => x.concat(plugin)); | ||
await ctx.wait(EditorViewReady); | ||
listeners.mounted.forEach((fn) => fn(ctx)); | ||
}; | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
21572
0
275
48
4
1
+ Added@milkdown/core@5.3.2
+ Added@milkdown/prose@5.3.2
+ Added@milkdown/utils@5.3.2
+ Added@babel/code-frame@7.26.2(transitive)
+ Added@babel/generator@7.26.9(transitive)
+ Added@babel/helper-module-imports@7.25.9(transitive)
+ Added@babel/helper-string-parser@7.25.9(transitive)
+ Added@babel/helper-validator-identifier@7.25.9(transitive)
+ Added@babel/parser@7.26.9(transitive)
+ Added@babel/runtime@7.26.9(transitive)
+ Added@babel/template@7.26.9(transitive)
+ Added@babel/traverse@7.26.9(transitive)
+ Added@babel/types@7.26.9(transitive)
+ Added@emotion/babel-plugin@11.13.5(transitive)
+ Added@emotion/cache@11.14.0(transitive)
+ Added@emotion/css@11.13.5(transitive)
+ Added@emotion/hash@0.9.2(transitive)
+ Added@emotion/memoize@0.9.0(transitive)
+ Added@emotion/serialize@1.3.3(transitive)
+ Added@emotion/sheet@1.4.0(transitive)
+ Added@emotion/unitless@0.10.0(transitive)
+ Added@emotion/utils@1.4.2(transitive)
+ Added@emotion/weak-memoize@0.4.0(transitive)
+ Added@jridgewell/gen-mapping@0.3.8(transitive)
+ Added@jridgewell/resolve-uri@3.1.2(transitive)
+ Added@jridgewell/set-array@1.2.1(transitive)
+ Added@jridgewell/sourcemap-codec@1.5.0(transitive)
+ Added@jridgewell/trace-mapping@0.3.25(transitive)
+ Added@milkdown/core@5.3.2(transitive)
+ Added@milkdown/ctx@5.3.2(transitive)
+ Added@milkdown/design-system@5.3.2(transitive)
+ Added@milkdown/exception@5.3.2(transitive)
+ Added@milkdown/prose@5.3.2(transitive)
+ Added@milkdown/transformer@5.3.2(transitive)
+ Added@milkdown/utils@5.3.2(transitive)
+ Added@types/mdast@3.0.15(transitive)
+ Added@types/parse-json@4.0.2(transitive)
+ Added@types/prosemirror-commands@1.3.0(transitive)
+ Added@types/prosemirror-dropcursor@1.5.0(transitive)
+ Added@types/prosemirror-gapcursor@1.3.0(transitive)
+ Added@types/prosemirror-history@1.3.0(transitive)
+ Added@types/prosemirror-inputrules@1.2.0(transitive)
+ Added@types/prosemirror-keymap@1.2.0(transitive)
+ Added@types/prosemirror-model@1.17.0(transitive)
+ Added@types/prosemirror-schema-list@1.2.0(transitive)
+ Added@types/prosemirror-state@1.4.0(transitive)
+ Added@types/prosemirror-transform@1.5.0(transitive)
+ Added@types/prosemirror-view@1.24.0(transitive)
+ Added@types/unist@2.0.11(transitive)
+ Addedbabel-plugin-macros@3.1.0(transitive)
+ Addedcallsites@3.1.0(transitive)
+ Addedconvert-source-map@1.9.0(transitive)
+ Addedcosmiconfig@7.1.0(transitive)
+ Addedcsstype@3.1.3(transitive)
+ Addeddiff@5.2.0(transitive)
+ Addederror-ex@1.3.2(transitive)
+ Addedescape-string-regexp@4.0.0(transitive)
+ Addedfind-root@1.1.0(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedglobals@11.12.0(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedimport-fresh@3.3.1(transitive)
+ Addedis-arrayish@0.2.1(transitive)
+ Addedis-buffer@2.0.5(transitive)
+ Addedis-core-module@2.16.1(transitive)
+ Addedjs-tokens@4.0.0(transitive)
+ Addedjsesc@3.1.0(transitive)
+ Addedjson-parse-even-better-errors@2.3.1(transitive)
+ Addedkleur@4.1.5(transitive)
+ Addedlines-and-columns@1.2.4(transitive)
+ Addedmdast-util-from-markdown@1.3.1(transitive)
+ Addedmdast-util-phrasing@3.0.1(transitive)
+ Addedmdast-util-to-markdown@1.5.0(transitive)
+ Addedmdast-util-to-string@3.2.0(transitive)
+ Addedmicromark@3.2.0(transitive)
+ Addedmicromark-core-commonmark@1.1.0(transitive)
+ Addedmicromark-factory-destination@1.1.0(transitive)
+ Addedmicromark-factory-label@1.1.0(transitive)
+ Addedmicromark-factory-space@1.1.0(transitive)
+ Addedmicromark-factory-title@1.1.0(transitive)
+ Addedmicromark-factory-whitespace@1.1.0(transitive)
+ Addedmicromark-util-character@1.2.0(transitive)
+ Addedmicromark-util-chunked@1.1.0(transitive)
+ Addedmicromark-util-classify-character@1.1.0(transitive)
+ Addedmicromark-util-combine-extensions@1.1.0(transitive)
+ Addedmicromark-util-decode-numeric-character-reference@1.1.0(transitive)
+ Addedmicromark-util-decode-string@1.1.0(transitive)
+ Addedmicromark-util-encode@1.1.0(transitive)
+ Addedmicromark-util-html-tag-name@1.2.0(transitive)
+ Addedmicromark-util-normalize-identifier@1.1.0(transitive)
+ Addedmicromark-util-resolve-all@1.1.0(transitive)
+ Addedmicromark-util-sanitize-uri@1.2.0(transitive)
+ Addedmicromark-util-subtokenize@1.1.0(transitive)
+ Addedmicromark-util-symbol@1.1.0(transitive)
+ Addedmicromark-util-types@1.1.0(transitive)
+ Addedmri@1.2.0(transitive)
+ Addedparent-module@1.0.1(transitive)
+ Addedparse-json@5.2.0(transitive)
+ Addedpath-parse@1.0.7(transitive)
+ Addedpath-type@4.0.0(transitive)
+ Addedpicocolors@1.1.1(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
+ Addedremark@14.0.3(transitive)
+ Addedremark-parse@10.0.2(transitive)
+ Addedremark-stringify@10.0.3(transitive)
+ Addedresolve@1.22.10(transitive)
+ Addedresolve-from@4.0.0(transitive)
+ Addedsade@1.8.1(transitive)
+ Addedsource-map@0.5.7(transitive)
+ Addedstylis@4.2.0(transitive)
+ Addedsupports-preserve-symlinks-flag@1.0.0(transitive)
+ Addedunified@10.1.2(transitive)
+ Addedunist-util-is@5.2.1(transitive)
+ Addedunist-util-stringify-position@3.0.3(transitive)
+ Addedunist-util-visit@4.1.2(transitive)
+ Addedunist-util-visit-parents@5.1.3(transitive)
+ Addeduvu@0.5.6(transitive)
+ Addedvfile@5.3.7(transitive)
+ Addedvfile-message@3.1.4(transitive)
+ Addedyaml@1.10.2(transitive)
- Removed@milkdown/core@7.6.3(transitive)
- Removed@milkdown/ctx@7.6.3(transitive)
- Removed@milkdown/exception@7.6.3(transitive)
- Removed@milkdown/prose@7.6.3(transitive)
- Removed@milkdown/transformer@7.6.3(transitive)
- Removed@types/mdast@4.0.4(transitive)
- Removed@types/unist@3.0.3(transitive)
- Removeddevlop@1.1.0(transitive)
- Removedmdast-util-from-markdown@2.0.2(transitive)
- Removedmdast-util-phrasing@4.1.0(transitive)
- Removedmdast-util-to-markdown@2.1.2(transitive)
- Removedmdast-util-to-string@4.0.0(transitive)
- Removedmicromark@4.0.2(transitive)
- Removedmicromark-core-commonmark@2.0.3(transitive)
- Removedmicromark-factory-destination@2.0.1(transitive)
- Removedmicromark-factory-label@2.0.1(transitive)
- Removedmicromark-factory-space@2.0.1(transitive)
- Removedmicromark-factory-title@2.0.1(transitive)
- Removedmicromark-factory-whitespace@2.0.1(transitive)
- Removedmicromark-util-character@2.1.1(transitive)
- Removedmicromark-util-chunked@2.0.1(transitive)
- Removedmicromark-util-classify-character@2.0.1(transitive)
- Removedmicromark-util-combine-extensions@2.0.1(transitive)
- Removedmicromark-util-decode-numeric-character-reference@2.0.2(transitive)
- Removedmicromark-util-decode-string@2.0.1(transitive)
- Removedmicromark-util-encode@2.0.1(transitive)
- Removedmicromark-util-html-tag-name@2.0.1(transitive)
- Removedmicromark-util-normalize-identifier@2.0.1(transitive)
- Removedmicromark-util-resolve-all@2.0.1(transitive)
- Removedmicromark-util-sanitize-uri@2.0.1(transitive)
- Removedmicromark-util-subtokenize@2.1.0(transitive)
- Removedmicromark-util-symbol@2.0.1(transitive)
- Removedmicromark-util-types@2.0.2(transitive)
- Removedprosemirror-changeset@2.2.1(transitive)
- Removedremark@15.0.1(transitive)
- Removedremark-parse@11.0.0(transitive)
- Removedremark-stringify@11.0.0(transitive)
- Removedunified@11.0.5(transitive)
- Removedunist-util-is@6.0.0(transitive)
- Removedunist-util-stringify-position@4.0.0(transitive)
- Removedunist-util-visit@5.0.0(transitive)
- Removedunist-util-visit-parents@6.0.1(transitive)
- Removedvfile@6.0.3(transitive)
- Removedvfile-message@4.0.2(transitive)