diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d2aa49b66d5..a5ac4fc333d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,6 +39,9 @@ jobs:
- name: Run lint
run: pnpm test:lint --format github
+ - name: Run eslint
+ run: pnpm test:eslint
+
unit:
runs-on: ubuntu-latest
needs: install-deps
diff --git a/.gitignore b/.gitignore
index e787c26a513..7970653fb37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,8 @@ e2e/cypress/downloads
sitemap.xml
+.eslintcache
+
.env
*.local
*.cache
diff --git a/.prettierignore b/.prettierignore
index eeeb7be52f8..b03944268fc 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1 +1,4 @@
-pnpm-lock.yaml
\ No newline at end of file
+pnpm-lock.yaml
+**/storybook-static
+**/lib
+**/.storybook
\ No newline at end of file
diff --git a/dev/src/generate.ts b/dev/src/generate.ts
index 198292a9059..e7ccef9bd12 100644
--- a/dev/src/generate.ts
+++ b/dev/src/generate.ts
@@ -1,14 +1,16 @@
import { applyEdits, modify } from 'jsonc-parser'
-import { Workspace } from './workspace'
-import type { Path } from './path'
-import { type BuiltInParserName, format } from 'prettier'
import { readFileSync, writeFileSync } from 'node:fs'
-import { Logger } from './logger'
+import { type BuiltInParserName, format } from 'prettier'
+
import type { Package } from './package'
+import type { Path } from './path'
+
+import { Logger } from './logger'
+import { Workspace } from './workspace'
export function generateTsConfig() {
const generator = new Generator()
- generator.run()
+ generator.run().catch(console.error)
}
export class Generator {
diff --git a/dev/src/package.ts b/dev/src/package.ts
index 5a3b5918ba5..10f1685be9f 100644
--- a/dev/src/package.ts
+++ b/dev/src/package.ts
@@ -1,10 +1,11 @@
import { readFileSync } from 'node:fs'
import { parse } from 'node:path'
-import { Path } from './path'
+import type { PackageItem } from './pnpm'
import type { CommonPackageJsonContent } from './types'
import type { Workspace } from './workspace'
-import type { PackageItem } from './pnpm'
+
+import { Path } from './path'
import { pnpmList } from './pnpm'
export function readPackageJson(path: Path): CommonPackageJsonContent {
diff --git a/dev/src/vite.ts b/dev/src/vite.ts
index b9e2b95c4b6..05ee3653698 100644
--- a/dev/src/vite.ts
+++ b/dev/src/vite.ts
@@ -1,7 +1,8 @@
+import type { BuildOptions, UserConfig } from 'vite'
+
import { readFileSync } from 'node:fs'
import { basename, dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
-import type { BuildOptions, UserConfig } from 'vite'
import { defineConfig } from 'vite'
import globalPackageJson from '../../package.json' with { type: 'json' }
diff --git a/dev/src/workspace.ts b/dev/src/workspace.ts
index 9993d357487..22d6fdd9926 100644
--- a/dev/src/workspace.ts
+++ b/dev/src/workspace.ts
@@ -1,7 +1,8 @@
+import type { CommonPackageJsonContent } from './types'
+
import { Logger } from './logger'
import { Package, readPackageJson } from './package'
import { ProjectRoot } from './path'
-import type { CommonPackageJsonContent } from './types'
import { pnpmList } from './pnpm'
class CircularDependenciesError extends Error {
diff --git a/e2e/entry.ts b/e2e/entry.ts
index c2e489ffe75..aa6af6fe344 100644
--- a/e2e/entry.ts
+++ b/e2e/entry.ts
@@ -1,4 +1,5 @@
import { resolve } from 'node:path'
+
import { cases } from './src/data'
const data = cases.reduce(
diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts
index bd91d90d36f..ba1247cddd7 100644
--- a/e2e/playwright.config.ts
+++ b/e2e/playwright.config.ts
@@ -1,5 +1,5 @@
-import process from 'node:process'
import { defineConfig, devices } from '@playwright/test'
+import process from 'node:process'
/**
* Read environment variables from file.
diff --git a/e2e/shim.d.ts b/e2e/shim.d.ts
index 42c61640b9e..4a3be6d1d03 100644
--- a/e2e/shim.d.ts
+++ b/e2e/shim.d.ts
@@ -1,9 +1,9 @@
///
import type { Editor } from '@milkdown/core'
-import type { EditorView } from '@milkdown/prose/view'
-import type { Telemetry } from '@milkdown/ctx'
import type { Crepe } from '@milkdown/crepe'
+import type { Telemetry } from '@milkdown/ctx'
+import type { EditorView } from '@milkdown/prose/view'
declare global {
var __milkdown__: Editor
diff --git a/e2e/src/crepe/main.ts b/e2e/src/crepe/main.ts
index d3053598bcd..e9d43fe1490 100644
--- a/e2e/src/crepe/main.ts
+++ b/e2e/src/crepe/main.ts
@@ -16,4 +16,4 @@ setup(async () => {
globalThis.__afterCrepeCreated__(crepe)
}
return crepe.editor
-})
+}).catch(console.error)
diff --git a/e2e/src/main.ts b/e2e/src/main.ts
index fe1b7e8c8e1..b0862bc5862 100644
--- a/e2e/src/main.ts
+++ b/e2e/src/main.ts
@@ -1,5 +1,7 @@
import './style.css'
+
import { c, html } from 'atomico'
+
import { cases } from './data'
function App() {
diff --git a/e2e/src/multi-editor/main.ts b/e2e/src/multi-editor/main.ts
index 17d3151b88b..000d474805a 100644
--- a/e2e/src/multi-editor/main.ts
+++ b/e2e/src/multi-editor/main.ts
@@ -1,8 +1,8 @@
import { Editor, rootCtx } from '@milkdown/core'
-import { nord } from '@milkdown/theme-nord'
-import { commonmark } from '@milkdown/preset-commonmark'
import { history } from '@milkdown/plugin-history'
+import { commonmark } from '@milkdown/preset-commonmark'
import { gfm, insertTableCommand } from '@milkdown/preset-gfm'
+import { nord } from '@milkdown/theme-nord'
import { callCommand } from '@milkdown/utils'
import { setup } from '../utils'
@@ -22,11 +22,13 @@ setup(() => {
.use(gfm)
.use(history)
.create()
-}).then((editor1) => {
- globalThis.commands.addTable = () => {
- editor1.action(callCommand(insertTableCommand.key))
- }
})
+ .then((editor1) => {
+ globalThis.commands.addTable = () => {
+ editor1.action(callCommand(insertTableCommand.key))
+ }
+ })
+ .catch(console.error)
setup(() => {
return Editor.make()
@@ -39,8 +41,10 @@ setup(() => {
.use(gfm)
.use(history)
.create()
-}).then((editor2) => {
- globalThis.commands.addTable2 = () => {
- editor2.action(callCommand(insertTableCommand.key))
- }
})
+ .then((editor2) => {
+ globalThis.commands.addTable2 = () => {
+ editor2.action(callCommand(insertTableCommand.key))
+ }
+ })
+ .catch(console.error)
diff --git a/e2e/src/plugin-automd/main.ts b/e2e/src/plugin-automd/main.ts
index 7d1d0fe32c8..9da15195ac8 100644
--- a/e2e/src/plugin-automd/main.ts
+++ b/e2e/src/plugin-automd/main.ts
@@ -1,9 +1,9 @@
import { Editor, rootCtx } from '@milkdown/core'
-import { nord } from '@milkdown/theme-nord'
-import { listener, listenerCtx } from '@milkdown/plugin-listener'
import { automd } from '@milkdown/plugin-automd'
+import { listener, listenerCtx } from '@milkdown/plugin-listener'
import { commonmark, markInputRules } from '@milkdown/preset-commonmark'
import { markInputRules as GFMMarkInputRules, gfm } from '@milkdown/preset-gfm'
+import { nord } from '@milkdown/theme-nord'
import { setup } from '../utils'
@@ -16,7 +16,7 @@ setup(() => {
.config((ctx) => {
ctx.set(rootCtx, document.getElementById('app'))
ctx.get(listenerCtx).markdownUpdated((_, markdown) => {
- // eslint-disable-next-line no-console
+ // oxlint-disable-next-line no-console
console.log(markdown)
})
})
@@ -26,4 +26,4 @@ setup(() => {
.use(listener)
.use(automd)
.create()
-})
+}).catch(console.error)
diff --git a/e2e/src/plugin-listener/main.ts b/e2e/src/plugin-listener/main.ts
index 411b4ce6f11..077a9b787db 100644
--- a/e2e/src/plugin-listener/main.ts
+++ b/e2e/src/plugin-listener/main.ts
@@ -1,7 +1,7 @@
import { Editor, defaultValueCtx, rootCtx } from '@milkdown/core'
-import { nord } from '@milkdown/theme-nord'
-import { commonmark } from '@milkdown/preset-commonmark'
import { listener, listenerCtx } from '@milkdown/plugin-listener'
+import { commonmark } from '@milkdown/preset-commonmark'
+import { nord } from '@milkdown/theme-nord'
import { setup } from '../utils'
@@ -15,7 +15,7 @@ setup(() => {
ctx.set(rootCtx, document.getElementById('app'))
ctx.set(defaultValueCtx, 'test')
ctx.get(listenerCtx).markdownUpdated((_, markdown, prevMarkdown) => {
- // eslint-disable-next-line no-console
+ // oxlint-disable-next-line no-console
console.log(markdown, prevMarkdown)
})
})
@@ -23,4 +23,4 @@ setup(() => {
.use(commonmark)
.use(listener)
.create()
-})
+}).catch(console.error)
diff --git a/e2e/src/preset-commonmark/main.ts b/e2e/src/preset-commonmark/main.ts
index 1e8eec66be7..a819948ac4a 100644
--- a/e2e/src/preset-commonmark/main.ts
+++ b/e2e/src/preset-commonmark/main.ts
@@ -1,12 +1,12 @@
import { Editor, rootCtx } from '@milkdown/core'
-import { nord } from '@milkdown/theme-nord'
+import { clipboard } from '@milkdown/plugin-clipboard'
+import { history } from '@milkdown/plugin-history'
import {
commonmark,
toggleEmphasisCommand,
toggleStrongCommand,
} from '@milkdown/preset-commonmark'
-import { clipboard } from '@milkdown/plugin-clipboard'
-import { history } from '@milkdown/plugin-history'
+import { nord } from '@milkdown/theme-nord'
import { callCommand } from '@milkdown/utils'
import { setup } from '../utils'
@@ -27,13 +27,16 @@ setup(() => {
.use(clipboard)
.create()
- editor.then((instance) => {
- globalThis.commands.toggleStrong = () => {
- instance.action(callCommand(toggleStrongCommand.key))
- }
- globalThis.commands.toggleEmphasis = () => {
- instance.action(callCommand(toggleEmphasisCommand.key))
- }
- })
+ editor
+ .then((instance) => {
+ globalThis.commands.toggleStrong = () => {
+ instance.action(callCommand(toggleStrongCommand.key))
+ }
+ globalThis.commands.toggleEmphasis = () => {
+ instance.action(callCommand(toggleEmphasisCommand.key))
+ }
+ })
+ .catch(console.error)
+
return editor
-})
+}).catch(console.error)
diff --git a/e2e/src/preset-gfm/main.ts b/e2e/src/preset-gfm/main.ts
index 365926e1d11..932d8416b75 100644
--- a/e2e/src/preset-gfm/main.ts
+++ b/e2e/src/preset-gfm/main.ts
@@ -1,8 +1,8 @@
import { Editor, rootCtx } from '@milkdown/core'
-import { nord } from '@milkdown/theme-nord'
-import { commonmark } from '@milkdown/preset-commonmark'
import { history } from '@milkdown/plugin-history'
+import { commonmark } from '@milkdown/preset-commonmark'
import { gfm } from '@milkdown/preset-gfm'
+import { nord } from '@milkdown/theme-nord'
import { setup } from '../utils'
@@ -21,4 +21,4 @@ setup(() => {
.use(gfm)
.use(history)
.create()
-})
+}).catch(console.error)
diff --git a/e2e/src/utils.ts b/e2e/src/utils.ts
index cf725b5e42a..8cab9abe664 100644
--- a/e2e/src/utils.ts
+++ b/e2e/src/utils.ts
@@ -1,4 +1,5 @@
import type { Editor } from '@milkdown/core'
+
import { editorViewCtx, parserCtx, serializerCtx } from '@milkdown/core'
import { Slice } from '@milkdown/prose/model'
@@ -33,13 +34,13 @@ export async function setup(createEditor: () => Promise) {
const logButton = document.querySelector('#log')
if (logButton) {
- // eslint-disable-next-line no-console
+ // oxlint-disable-next-line no-console
logButton.onclick = () => console.log(globalThis.__getMarkdown__())
}
const inspectButton = document.querySelector('#inspect')
if (inspectButton) {
- // eslint-disable-next-line no-console
+ // oxlint-disable-next-line no-console
inspectButton.onclick = () => console.log(globalThis.__inspect__())
}
return editor
diff --git a/e2e/tests/command/bold.spec.ts b/e2e/tests/command/bold.spec.ts
index 6ae5acdbb3f..d1249645c7d 100644
--- a/e2e/tests/command/bold.spec.ts
+++ b/e2e/tests/command/bold.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, selectAll, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/crepe/latex.spec.ts b/e2e/tests/crepe/latex.spec.ts
index cc17ed2e8a0..5f641b1e71e 100644
--- a/e2e/tests/crepe/latex.spec.ts
+++ b/e2e/tests/crepe/latex.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/crepe/listener.spec.ts b/e2e/tests/crepe/listener.spec.ts
index 48d6c300909..61e01f0f5f0 100644
--- a/e2e/tests/crepe/listener.spec.ts
+++ b/e2e/tests/crepe/listener.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor } from '../misc'
test('listen change before editor is created', async ({ page }) => {
diff --git a/e2e/tests/input/blockquote.spec.ts b/e2e/tests/input/blockquote.spec.ts
index 492ea1ceed5..e05b6684a56 100644
--- a/e2e/tests/input/blockquote.spec.ts
+++ b/e2e/tests/input/blockquote.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/bold.spec.ts b/e2e/tests/input/bold.spec.ts
index b99f964e549..3c1805cff20 100644
--- a/e2e/tests/input/bold.spec.ts
+++ b/e2e/tests/input/bold.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/bullet-list.spec.ts b/e2e/tests/input/bullet-list.spec.ts
index c1e53185810..942a6609867 100644
--- a/e2e/tests/input/bullet-list.spec.ts
+++ b/e2e/tests/input/bullet-list.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/code-block.spec.ts b/e2e/tests/input/code-block.spec.ts
index 411debb35e4..7d2f37d8916 100644
--- a/e2e/tests/input/code-block.spec.ts
+++ b/e2e/tests/input/code-block.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/code-inline.spec.ts b/e2e/tests/input/code-inline.spec.ts
index 5305b838c2b..73c0ef738c3 100644
--- a/e2e/tests/input/code-inline.spec.ts
+++ b/e2e/tests/input/code-inline.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/heading.spec.ts b/e2e/tests/input/heading.spec.ts
index 3c61234a1a4..5aeb99f04c8 100644
--- a/e2e/tests/input/heading.spec.ts
+++ b/e2e/tests/input/heading.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown, waitNextFrame } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/hr.spec.ts b/e2e/tests/input/hr.spec.ts
index d207b64b94e..730c44cf48b 100644
--- a/e2e/tests/input/hr.spec.ts
+++ b/e2e/tests/input/hr.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/italic.spec.ts b/e2e/tests/input/italic.spec.ts
index c26fcf2ac3d..019916a9d2d 100644
--- a/e2e/tests/input/italic.spec.ts
+++ b/e2e/tests/input/italic.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/ordered-list.spec.ts b/e2e/tests/input/ordered-list.spec.ts
index b20a83b42ac..29ec9723c45 100644
--- a/e2e/tests/input/ordered-list.spec.ts
+++ b/e2e/tests/input/ordered-list.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/paragraph.spec.ts b/e2e/tests/input/paragraph.spec.ts
index 7786f095f23..ab129ec15ea 100644
--- a/e2e/tests/input/paragraph.spec.ts
+++ b/e2e/tests/input/paragraph.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/strike-through.spec.ts b/e2e/tests/input/strike-through.spec.ts
index 82b315fc210..1897d5c9586 100644
--- a/e2e/tests/input/strike-through.spec.ts
+++ b/e2e/tests/input/strike-through.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/table.spec.ts b/e2e/tests/input/table.spec.ts
index 97bef33a62f..ace9814b5dd 100644
--- a/e2e/tests/input/table.spec.ts
+++ b/e2e/tests/input/table.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/input/task-list.spec.ts b/e2e/tests/input/task-list.spec.ts
index dd5ab7448cd..45113fa6b4b 100644
--- a/e2e/tests/input/task-list.spec.ts
+++ b/e2e/tests/input/task-list.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/misc/index.ts b/e2e/tests/misc/index.ts
index aeea24c12b2..cecdb201811 100644
--- a/e2e/tests/misc/index.ts
+++ b/e2e/tests/misc/index.ts
@@ -1,4 +1,5 @@
import type { Page } from '@playwright/test'
+
import fs from 'node:fs/promises'
import path from 'node:path'
diff --git a/e2e/tests/plugin/automd.spec.ts b/e2e/tests/plugin/automd.spec.ts
index 7b18d5c06ff..9fd7d14d359 100644
--- a/e2e/tests/plugin/automd.spec.ts
+++ b/e2e/tests/plugin/automd.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown, waitNextFrame } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/plugin/clipboard.spec.ts b/e2e/tests/plugin/clipboard.spec.ts
index ed31cee582d..23a8bf8b404 100644
--- a/e2e/tests/plugin/clipboard.spec.ts
+++ b/e2e/tests/plugin/clipboard.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import {
focusEditor,
paste,
diff --git a/e2e/tests/plugin/listener.spec.ts b/e2e/tests/plugin/listener.spec.ts
index 9dc971a0684..c6f884eca73 100644
--- a/e2e/tests/plugin/listener.spec.ts
+++ b/e2e/tests/plugin/listener.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/bold.spec.ts b/e2e/tests/shortcut/bold.spec.ts
index 73048883493..3fd7a3ab072 100644
--- a/e2e/tests/shortcut/bold.spec.ts
+++ b/e2e/tests/shortcut/bold.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown, pressMetaKey, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/code-block.spec.ts b/e2e/tests/shortcut/code-block.spec.ts
index 529ee71a93e..89040acd4d8 100644
--- a/e2e/tests/shortcut/code-block.spec.ts
+++ b/e2e/tests/shortcut/code-block.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/code-inline.spec.ts b/e2e/tests/shortcut/code-inline.spec.ts
index 8400c431374..971a1544bdc 100644
--- a/e2e/tests/shortcut/code-inline.spec.ts
+++ b/e2e/tests/shortcut/code-inline.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/heading.spec.ts b/e2e/tests/shortcut/heading.spec.ts
index 9cad09b4285..73d47be110e 100644
--- a/e2e/tests/shortcut/heading.spec.ts
+++ b/e2e/tests/shortcut/heading.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/italic.spec.ts b/e2e/tests/shortcut/italic.spec.ts
index 68a6e5cb0ea..c21bf16a66d 100644
--- a/e2e/tests/shortcut/italic.spec.ts
+++ b/e2e/tests/shortcut/italic.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/list.spec.ts b/e2e/tests/shortcut/list.spec.ts
index 821b367be49..ccd2071fbc2 100644
--- a/e2e/tests/shortcut/list.spec.ts
+++ b/e2e/tests/shortcut/list.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/strike-through.spec.ts b/e2e/tests/shortcut/strike-through.spec.ts
index a663b50b806..d4cf7e92ae0 100644
--- a/e2e/tests/shortcut/strike-through.spec.ts
+++ b/e2e/tests/shortcut/strike-through.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, pressMetaKey, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/shortcut/system.spec.ts b/e2e/tests/shortcut/system.spec.ts
index 718d460878d..042a0469433 100644
--- a/e2e/tests/shortcut/system.spec.ts
+++ b/e2e/tests/shortcut/system.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, selectAll } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/blockquote.spec.ts b/e2e/tests/transform/blockquote.spec.ts
index 9f74a7d5c46..ce5c09c3c18 100644
--- a/e2e/tests/transform/blockquote.spec.ts
+++ b/e2e/tests/transform/blockquote.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/code-block.spec.ts b/e2e/tests/transform/code-block.spec.ts
index e6947942b1e..ce23e7ba12c 100644
--- a/e2e/tests/transform/code-block.spec.ts
+++ b/e2e/tests/transform/code-block.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/hardbreak.spec.ts b/e2e/tests/transform/hardbreak.spec.ts
index ef5c4454dcc..ab3a23b1aa0 100644
--- a/e2e/tests/transform/hardbreak.spec.ts
+++ b/e2e/tests/transform/hardbreak.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, selectAll, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/hr.spec.ts b/e2e/tests/transform/hr.spec.ts
index 2776f19ca2b..b7ee5c68039 100644
--- a/e2e/tests/transform/hr.spec.ts
+++ b/e2e/tests/transform/hr.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/html.spec.ts b/e2e/tests/transform/html.spec.ts
index d48e005e978..8a6a282616b 100644
--- a/e2e/tests/transform/html.spec.ts
+++ b/e2e/tests/transform/html.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/list.spec.ts b/e2e/tests/transform/list.spec.ts
index 5c2150b734f..f54c5a4dd96 100644
--- a/e2e/tests/transform/list.spec.ts
+++ b/e2e/tests/transform/list.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/mark.spec.ts b/e2e/tests/transform/mark.spec.ts
index 9ceea33ef25..b03393e5904 100644
--- a/e2e/tests/transform/mark.spec.ts
+++ b/e2e/tests/transform/mark.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown, getMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/paragraph.spec.ts b/e2e/tests/transform/paragraph.spec.ts
index 4cdcdab2f32..af5722b9cdb 100644
--- a/e2e/tests/transform/paragraph.spec.ts
+++ b/e2e/tests/transform/paragraph.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/tests/transform/preserve-empty-line.spec.ts b/e2e/tests/transform/preserve-empty-line.spec.ts
index e6456026c5d..08d59d09806 100644
--- a/e2e/tests/transform/preserve-empty-line.spec.ts
+++ b/e2e/tests/transform/preserve-empty-line.spec.ts
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test'
+
import { focusEditor, getMarkdown, loadFixture, setMarkdown } from '../misc'
test.beforeEach(async ({ page }) => {
diff --git a/e2e/vite.config.mts b/e2e/vite.config.mts
index ab5be2f4499..2b71e313443 100644
--- a/e2e/vite.config.mts
+++ b/e2e/vite.config.mts
@@ -1,4 +1,5 @@
import { defineConfig } from 'vite'
+
import { input } from './entry'
export default defineConfig({
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000000..2be04b30f8b
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,48 @@
+import { defineConfig } from 'eslint/config'
+import { readFileSync } from 'node:fs'
+import tseslint from 'typescript-eslint'
+import tsParser from '@typescript-eslint/parser'
+import perfectionist from 'eslint-plugin-perfectionist'
+
+const ignoreList = readFileSync('.prettierignore', 'utf-8')
+ .split('\n')
+ .filter((line) => line.trim() && !line.startsWith('#'))
+
+const configFiles = ['**/*.config.mjs', '**/*.config.cjs', '**/*.config.js']
+const typeScriptExtensions = ['.ts', '.tsx', '.cts', '.mts']
+
+export default defineConfig(
+ tseslint.config(
+ {
+ ignores: [...ignoreList, ...configFiles],
+ },
+ {
+ languageOptions: {
+ parser: tsParser,
+ ecmaVersion: 'latest',
+ parserOptions: {
+ project: './tsconfig.eslint.json',
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+ },
+ {
+ files: [...typeScriptExtensions].map((ext) => `**/*${ext}`),
+ plugins: {
+ '@typescript-eslint': tseslint.plugin,
+ perfectionist,
+ },
+ rules: {
+ 'perfectionist/sort-imports': 'error',
+ '@typescript-eslint/no-floating-promises': [
+ 'error',
+ {
+ ignoreVoid: false,
+ ignoreIIFE: false,
+ },
+ ],
+ '@typescript-eslint/await-thenable': 'error',
+ },
+ }
+ )
+)
diff --git a/package.json b/package.json
index 3bf9ba2f225..35546467c4d 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
"test:unit": "vitest run",
"test:unit:watch": "vitest",
"test:lint": "oxlint -c .oxlintrc.json",
+ "test:eslint": "eslint . --cache",
"test:e2e": "pnpm --filter=@milkdown/e2e test",
"test:e2e:build": "pnpm --filter=@milkdown/e2e run build",
"format": "lint-staged",
@@ -45,6 +46,7 @@
"@tailwindcss/vite": "^4.0.0",
"@types/node": "^22.0.0",
"@types/rollup-plugin-auto-external": "^2.0.2",
+ "@typescript-eslint/parser": "^8.29.1",
"@vitejs/plugin-react": "^4.0.0",
"@vitejs/plugin-vue": "^5.0.0",
"@vitejs/plugin-vue-jsx": "^4.0.0",
@@ -52,6 +54,8 @@
"concurrently": "^9.0.0",
"cross-env": "^7.0.3",
"esbuild": "^0.25.0",
+ "eslint": "^9.24.0",
+ "eslint-plugin-perfectionist": "^4.11.0",
"git-cz": "^4.7.6",
"husky": "^9.0.10",
"jsdom": "^26.0.0",
@@ -73,6 +77,7 @@
"tslib": "^2.8.1",
"tsx": "^4.19.3",
"typescript": "^5.4.4",
+ "typescript-eslint": "^8.29.1",
"vite": "^6.0.0",
"vitest": "^3.0.0"
},
diff --git a/packages/components/src/__internal__/components/image-input.tsx b/packages/components/src/__internal__/components/image-input.tsx
index eeb9aca3dcd..13e5bf91cfa 100644
--- a/packages/components/src/__internal__/components/image-input.tsx
+++ b/packages/components/src/__internal__/components/image-input.tsx
@@ -1,6 +1,7 @@
-import { defineComponent, ref, h, type Ref } from 'vue'
import clsx from 'clsx'
import { customAlphabet } from 'nanoid'
+import { defineComponent, ref, h, type Ref } from 'vue'
+
import { Icon } from './icon'
h
diff --git a/packages/components/src/__internal__/helper.ts b/packages/components/src/__internal__/helper.ts
index 9aca796a4f8..8ed88f0baa7 100644
--- a/packages/components/src/__internal__/helper.ts
+++ b/packages/components/src/__internal__/helper.ts
@@ -10,6 +10,5 @@ export function defIfNotExists(
if (current === element) return
- // eslint-disable-next-line no-console
console.warn(`Custom element ${tagName} has been defined before.`)
}
diff --git a/packages/components/src/code-block/config.ts b/packages/components/src/code-block/config.ts
index bee50318cf0..abb55ffdb5a 100644
--- a/packages/components/src/code-block/config.ts
+++ b/packages/components/src/code-block/config.ts
@@ -1,6 +1,8 @@
-import { $ctx } from '@milkdown/utils'
-import type { Extension } from '@codemirror/state'
import type { LanguageDescription } from '@codemirror/language'
+import type { Extension } from '@codemirror/state'
+
+import { $ctx } from '@milkdown/utils'
+
import { withMeta } from '../__internal__/meta'
export interface CodeBlockConfig {
diff --git a/packages/components/src/code-block/index.ts b/packages/components/src/code-block/index.ts
index 6fb4faa1f04..1bd9f7506ef 100644
--- a/packages/components/src/code-block/index.ts
+++ b/packages/components/src/code-block/index.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { codeBlockView } from './view'
+
import { codeBlockConfig } from './config'
+import { codeBlockView } from './view'
export * from './config'
export * from './view'
diff --git a/packages/components/src/code-block/view/components/code-block.tsx b/packages/components/src/code-block/view/components/code-block.tsx
index 32734157607..5a77aa0baaf 100644
--- a/packages/components/src/code-block/view/components/code-block.tsx
+++ b/packages/components/src/code-block/view/components/code-block.tsx
@@ -1,4 +1,6 @@
import type { EditorView as CodeMirror } from '@codemirror/view'
+
+import clsx from 'clsx'
import {
defineComponent,
ref,
@@ -8,12 +10,13 @@ import {
computed,
onMounted,
} from 'vue'
+
import type { CodeBlockConfig } from '../../config'
import type { LanguageInfo } from '../loader'
-import { PreviewPanel } from './preview-panel'
-import { LanguagePicker } from './language-picker'
+
import { Icon } from '../../../__internal__/components/icon'
-import clsx from 'clsx'
+import { LanguagePicker } from './language-picker'
+import { PreviewPanel } from './preview-panel'
h
Fragment
diff --git a/packages/components/src/code-block/view/components/language-picker.tsx b/packages/components/src/code-block/view/components/language-picker.tsx
index 792629b2b9c..3c676a442e7 100644
--- a/packages/components/src/code-block/view/components/language-picker.tsx
+++ b/packages/components/src/code-block/view/components/language-picker.tsx
@@ -1,3 +1,5 @@
+import { computePosition } from '@floating-ui/dom'
+import clsx from 'clsx'
import {
computed,
defineComponent,
@@ -8,9 +10,9 @@ import {
onUnmounted,
watch,
} from 'vue'
+
import type { CodeBlockProps } from './code-block'
-import clsx from 'clsx'
-import { computePosition } from '@floating-ui/dom'
+
import { Icon } from '../../../__internal__/components/icon'
type LanguagePickerProps = Pick<
@@ -58,12 +60,14 @@ export const LanguagePicker = defineComponent({
computePosition(picker, languageList, {
placement: 'bottom-start',
- }).then(({ x, y }) => {
- Object.assign(languageList.style, {
- left: `${x}px`,
- top: `${y}px`,
- })
})
+ .then(({ x, y }) => {
+ Object.assign(languageList.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
})
const onTogglePicker = (e: Event) => {
diff --git a/packages/components/src/code-block/view/components/preview-panel.tsx b/packages/components/src/code-block/view/components/preview-panel.tsx
index 678e1e6b39c..68be87fd21e 100644
--- a/packages/components/src/code-block/view/components/preview-panel.tsx
+++ b/packages/components/src/code-block/view/components/preview-panel.tsx
@@ -1,3 +1,5 @@
+import clsx from 'clsx'
+import DOMPurify from 'dompurify'
import {
defineComponent,
ref,
@@ -7,9 +9,8 @@ import {
Fragment,
type ComputedRef,
} from 'vue'
+
import type { CodeBlockProps } from './code-block'
-import clsx from 'clsx'
-import DOMPurify from 'dompurify'
h
Fragment
diff --git a/packages/components/src/code-block/view/index.ts b/packages/components/src/code-block/view/index.ts
index f532e71bb94..91b701c8ee1 100644
--- a/packages/components/src/code-block/view/index.ts
+++ b/packages/components/src/code-block/view/index.ts
@@ -1,10 +1,12 @@
-import { $view } from '@milkdown/utils'
-import { codeBlockSchema } from '@milkdown/preset-commonmark'
import type { NodeViewConstructor } from '@milkdown/prose/view'
-import { codeBlockConfig } from '../config'
+
+import { codeBlockSchema } from '@milkdown/preset-commonmark'
+import { $view } from '@milkdown/utils'
+
import { withMeta } from '../../__internal__/meta'
-import { CodeMirrorBlock } from './node-view'
+import { codeBlockConfig } from '../config'
import { LanguageLoader } from './loader'
+import { CodeMirrorBlock } from './node-view'
export const codeBlockView = $view(
codeBlockSchema.node,
diff --git a/packages/components/src/code-block/view/node-view.ts b/packages/components/src/code-block/view/node-view.ts
index 42567d601c6..a178be4a2c3 100644
--- a/packages/components/src/code-block/view/node-view.ts
+++ b/packages/components/src/code-block/view/node-view.ts
@@ -1,20 +1,22 @@
+import type { Line, SelectionRange } from '@codemirror/state'
+import type { Node } from '@milkdown/prose/model'
import type { EditorView, NodeView } from '@milkdown/prose/view'
+
+import { Compartment, EditorState } from '@codemirror/state'
import {
EditorView as CodeMirror,
type KeyBinding,
type ViewUpdate,
keymap as cmKeymap,
} from '@codemirror/view'
-import type { Node } from '@milkdown/prose/model'
-import { redo, undo } from '@milkdown/prose/history'
-import { Compartment, EditorState } from '@codemirror/state'
-import type { Line, SelectionRange } from '@codemirror/state'
import { exitCode } from '@milkdown/prose/commands'
+import { redo, undo } from '@milkdown/prose/history'
import { TextSelection } from '@milkdown/prose/state'
import { createApp, ref, watchEffect, type App, type WatchHandle } from 'vue'
import type { CodeBlockConfig } from '../config'
import type { LanguageLoader } from './loader'
+
import { CodeBlock } from './components/code-block'
export class CodeMirrorBlock implements NodeView {
@@ -125,14 +127,16 @@ export class CodeMirrorBlock implements NodeView {
this.language.value = languageName
const language = this.loader.load(languageName ?? '')
- language.then((lang) => {
- if (lang) {
- this.cm.dispatch({
- effects: this.languageConf.reconfigure(lang),
- })
- this.languageName = languageName
- }
- })
+ language
+ .then((lang) => {
+ if (lang) {
+ this.cm.dispatch({
+ effects: this.languageConf.reconfigure(lang),
+ })
+ this.languageName = languageName
+ }
+ })
+ .catch(console.error)
}
private codeMirrorKeymap = (): KeyBinding[] => {
diff --git a/packages/components/src/image-block/config.ts b/packages/components/src/image-block/config.ts
index 80d7f23cb9f..0255a72528d 100644
--- a/packages/components/src/image-block/config.ts
+++ b/packages/components/src/image-block/config.ts
@@ -1,4 +1,5 @@
import { $ctx } from '@milkdown/utils'
+
import { withMeta } from '../__internal__/meta'
export interface ImageBlockConfig {
diff --git a/packages/components/src/image-block/index.ts b/packages/components/src/image-block/index.ts
index d8156bc86db..e11768799e7 100644
--- a/packages/components/src/image-block/index.ts
+++ b/packages/components/src/image-block/index.ts
@@ -1,8 +1,9 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { imageBlockSchema } from './schema'
+
+import { imageBlockConfig } from './config'
import { remarkImageBlockPlugin } from './remark-plugin'
+import { imageBlockSchema } from './schema'
import { imageBlockView } from './view'
-import { imageBlockConfig } from './config'
export * from './schema'
export * from './remark-plugin'
diff --git a/packages/components/src/image-block/remark-plugin.ts b/packages/components/src/image-block/remark-plugin.ts
index 282b954120e..13ee051a470 100644
--- a/packages/components/src/image-block/remark-plugin.ts
+++ b/packages/components/src/image-block/remark-plugin.ts
@@ -1,6 +1,8 @@
import type { Node } from '@milkdown/transformer'
-import { visit } from 'unist-util-visit'
+
import { $remark } from '@milkdown/utils'
+import { visit } from 'unist-util-visit'
+
import { withMeta } from '../__internal__/meta'
function visitImage(ast: Node) {
diff --git a/packages/components/src/image-block/schema.ts b/packages/components/src/image-block/schema.ts
index 02555d6d51c..6790c76b0a1 100644
--- a/packages/components/src/image-block/schema.ts
+++ b/packages/components/src/image-block/schema.ts
@@ -1,5 +1,6 @@
-import { $nodeSchema } from '@milkdown/utils'
import { expectDomTypeError } from '@milkdown/exception'
+import { $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../__internal__/meta'
export const IMAGE_DATA_TYPE = 'image-block'
diff --git a/packages/components/src/image-block/view/components/image-block.tsx b/packages/components/src/image-block/view/components/image-block.tsx
index 34e5e76f7f9..046bbb66354 100644
--- a/packages/components/src/image-block/view/components/image-block.tsx
+++ b/packages/components/src/image-block/view/components/image-block.tsx
@@ -1,7 +1,9 @@
import { h, Fragment, type Ref, defineComponent } from 'vue'
+
import type { ImageBlockConfig } from '../../config'
-import { ImageViewer } from './image-viewer'
+
import { ImageInput } from '../../../__internal__/components/image-input'
+import { ImageViewer } from './image-viewer'
h
Fragment
diff --git a/packages/components/src/image-block/view/components/image-input.tsx b/packages/components/src/image-block/view/components/image-input.tsx
index 9967ee8c130..b955facc5ee 100644
--- a/packages/components/src/image-block/view/components/image-input.tsx
+++ b/packages/components/src/image-block/view/components/image-input.tsx
@@ -1,7 +1,9 @@
-import { defineComponent, ref, h } from 'vue'
-import type { MilkdownImageBlockProps } from './image-block'
import clsx from 'clsx'
import { customAlphabet } from 'nanoid'
+import { defineComponent, ref, h } from 'vue'
+
+import type { MilkdownImageBlockProps } from './image-block'
+
import { Icon } from '../../../__internal__/components/icon'
h
diff --git a/packages/components/src/image-block/view/components/image-viewer.tsx b/packages/components/src/image-block/view/components/image-viewer.tsx
index a0cc117bcab..e488b690d65 100644
--- a/packages/components/src/image-block/view/components/image-viewer.tsx
+++ b/packages/components/src/image-block/view/components/image-viewer.tsx
@@ -1,7 +1,9 @@
import { defineComponent, ref, h, Fragment } from 'vue'
+
import type { MilkdownImageBlockProps } from './image-block'
-import { IMAGE_DATA_TYPE } from '../../schema'
+
import { Icon } from '../../../__internal__/components/icon'
+import { IMAGE_DATA_TYPE } from '../../schema'
h
Fragment
diff --git a/packages/components/src/image-block/view/index.ts b/packages/components/src/image-block/view/index.ts
index abf7f86edce..08205c7a416 100644
--- a/packages/components/src/image-block/view/index.ts
+++ b/packages/components/src/image-block/view/index.ts
@@ -1,12 +1,14 @@
-import { $view } from '@milkdown/utils'
-import type { NodeViewConstructor } from '@milkdown/prose/view'
import type { Node } from '@milkdown/prose/model'
-import { imageBlockSchema } from '../schema'
-import { imageBlockConfig } from '../config'
-import { withMeta } from '../../__internal__/meta'
+import type { NodeViewConstructor } from '@milkdown/prose/view'
+
+import { $view } from '@milkdown/utils'
+import DOMPurify from 'dompurify'
import { createApp, ref, watchEffect } from 'vue'
+
+import { withMeta } from '../../__internal__/meta'
+import { imageBlockConfig } from '../config'
+import { imageBlockSchema } from '../schema'
import { MilkdownImageBlock } from './components/image-block'
-import DOMPurify from 'dompurify'
export const imageBlockView = $view(
imageBlockSchema.node,
@@ -58,9 +60,11 @@ export const imageBlockView = $view(
if (typeof proxiedURL === 'string') {
src.value = proxiedURL
} else {
- proxiedURL.then((url) => {
- src.value = url
- })
+ proxiedURL
+ .then((url) => {
+ src.value = url
+ })
+ .catch(console.error)
}
}
ratio.value = node.attrs.ratio
diff --git a/packages/components/src/image-inline/components/image-inline.tsx b/packages/components/src/image-inline/components/image-inline.tsx
index 2c39d146ab8..e8b494dca86 100644
--- a/packages/components/src/image-inline/components/image-inline.tsx
+++ b/packages/components/src/image-inline/components/image-inline.tsx
@@ -1,5 +1,7 @@
import { h, Fragment, type Ref, defineComponent } from 'vue'
+
import type { InlineImageConfig } from '../config'
+
import { ImageInput } from '../../__internal__/components/image-input'
h
diff --git a/packages/components/src/image-inline/config.ts b/packages/components/src/image-inline/config.ts
index da1b4899cef..f4adc998ddd 100644
--- a/packages/components/src/image-inline/config.ts
+++ b/packages/components/src/image-inline/config.ts
@@ -1,5 +1,6 @@
import { $ctx } from '@milkdown/utils'
import { html } from 'atomico'
+
import { withMeta } from '../__internal__/meta'
export interface InlineImageConfig {
diff --git a/packages/components/src/image-inline/index.ts b/packages/components/src/image-inline/index.ts
index 1f7c772c4db..d26efd74b55 100644
--- a/packages/components/src/image-inline/index.ts
+++ b/packages/components/src/image-inline/index.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { inlineImageConfig } from './config'
import { inlineImageView } from './view'
diff --git a/packages/components/src/image-inline/view.ts b/packages/components/src/image-inline/view.ts
index 986dcc87c79..2bcb953a38a 100644
--- a/packages/components/src/image-inline/view.ts
+++ b/packages/components/src/image-inline/view.ts
@@ -1,13 +1,14 @@
-import { $view } from '@milkdown/utils'
+import type { Node } from '@milkdown/prose/model'
import type { NodeViewConstructor } from '@milkdown/prose/view'
+
import { imageSchema } from '@milkdown/preset-commonmark'
-import type { Node } from '@milkdown/prose/model'
-import { createApp, ref, watchEffect } from 'vue'
+import { $view } from '@milkdown/utils'
import DOMPurify from 'dompurify'
+import { createApp, ref, watchEffect } from 'vue'
import { withMeta } from '../__internal__/meta'
-import { inlineImageConfig } from './config'
import { MilkdownImageInline } from './components/image-inline'
+import { inlineImageConfig } from './config'
export const inlineImageView = $view(
imageSchema.node,
@@ -60,9 +61,11 @@ export const inlineImageView = $view(
if (typeof proxiedURL === 'string') {
src.value = proxiedURL
} else {
- proxiedURL.then((url) => {
- src.value = url
- })
+ proxiedURL
+ .then((url) => {
+ src.value = url
+ })
+ .catch(console.error)
}
}
alt.value = node.attrs.alt
diff --git a/packages/components/src/link-tooltip/configure.ts b/packages/components/src/link-tooltip/configure.ts
index 012bafd1199..80bdedcd289 100644
--- a/packages/components/src/link-tooltip/configure.ts
+++ b/packages/components/src/link-tooltip/configure.ts
@@ -1,6 +1,7 @@
import type { Ctx } from '@milkdown/ctx'
-import { configureLinkPreviewTooltip } from './preview/preview-configure'
+
import { configureLinkEditTooltip } from './edit/edit-configure'
+import { configureLinkPreviewTooltip } from './preview/preview-configure'
export function configureLinkTooltip(ctx: Ctx) {
configureLinkPreviewTooltip(ctx)
diff --git a/packages/components/src/link-tooltip/edit/component.tsx b/packages/components/src/link-tooltip/edit/component.tsx
index e38986db30b..9938182b9ed 100644
--- a/packages/components/src/link-tooltip/edit/component.tsx
+++ b/packages/components/src/link-tooltip/edit/component.tsx
@@ -1,5 +1,7 @@
import { defineComponent, ref, watch, type Ref, h } from 'vue'
+
import type { LinkTooltipConfig } from '../slices'
+
import { Icon } from '../../__internal__/components/icon'
h
diff --git a/packages/components/src/link-tooltip/edit/edit-configure.ts b/packages/components/src/link-tooltip/edit/edit-configure.ts
index 18761e34e9a..c104c6a974f 100644
--- a/packages/components/src/link-tooltip/edit/edit-configure.ts
+++ b/packages/components/src/link-tooltip/edit/edit-configure.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { linkTooltipAPI } from '../slices'
import { linkEditTooltip } from '../tooltips'
import { LinkEditTooltip } from './edit-view'
diff --git a/packages/components/src/link-tooltip/edit/edit-view.ts b/packages/components/src/link-tooltip/edit/edit-view.ts
index 99882631534..7c3ba4f243e 100644
--- a/packages/components/src/link-tooltip/edit/edit-view.ts
+++ b/packages/components/src/link-tooltip/edit/edit-view.ts
@@ -1,20 +1,22 @@
import type { Ctx } from '@milkdown/ctx'
-import { TextSelection } from '@milkdown/prose/state'
-import type { PluginView } from '@milkdown/prose/state'
import type { Mark } from '@milkdown/prose/model'
+import type { PluginView } from '@milkdown/prose/state'
import type { EditorView } from '@milkdown/prose/view'
-import { TooltipProvider } from '@milkdown/plugin-tooltip'
+
import { editorViewCtx } from '@milkdown/core'
+import { TooltipProvider } from '@milkdown/plugin-tooltip'
import { linkSchema } from '@milkdown/preset-commonmark'
import { posToDOMRect } from '@milkdown/prose'
+import { TextSelection } from '@milkdown/prose/state'
+import DOMPurify from 'dompurify'
+import { createApp, ref, type App, type Ref } from 'vue'
+
import {
linkTooltipConfig,
linkTooltipState,
type LinkTooltipConfig,
} from '../slices'
-import { createApp, ref, type App, type Ref } from 'vue'
import { EditLink } from './component'
-import DOMPurify from 'dompurify'
interface Data {
from: number
diff --git a/packages/components/src/link-tooltip/index.ts b/packages/components/src/link-tooltip/index.ts
index 05883f93663..b485442fc9d 100644
--- a/packages/components/src/link-tooltip/index.ts
+++ b/packages/components/src/link-tooltip/index.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from './slices'
import { linkEditTooltip, linkPreviewTooltip } from './tooltips'
diff --git a/packages/components/src/link-tooltip/preview/component.tsx b/packages/components/src/link-tooltip/preview/component.tsx
index 3bdde225f89..fbe338ab434 100644
--- a/packages/components/src/link-tooltip/preview/component.tsx
+++ b/packages/components/src/link-tooltip/preview/component.tsx
@@ -1,5 +1,7 @@
import { defineComponent, type Ref, h } from 'vue'
+
import type { LinkTooltipConfig } from '../slices'
+
import { Icon } from '../../__internal__/components/icon'
type PreviewLinkProps = {
diff --git a/packages/components/src/link-tooltip/preview/preview-configure.ts b/packages/components/src/link-tooltip/preview/preview-configure.ts
index 5f89e79f326..cdb19fd252c 100644
--- a/packages/components/src/link-tooltip/preview/preview-configure.ts
+++ b/packages/components/src/link-tooltip/preview/preview-configure.ts
@@ -1,10 +1,12 @@
import type { Ctx } from '@milkdown/ctx'
-import debounce from 'lodash.debounce'
import type { EditorView } from '@milkdown/prose/view'
+
import { posToDOMRect } from '@milkdown/prose'
+import debounce from 'lodash.debounce'
+
import { linkTooltipState } from '../slices'
-import { findMarkPosition, shouldShowPreviewWhenHover } from '../utils'
import { linkPreviewTooltip } from '../tooltips'
+import { findMarkPosition, shouldShowPreviewWhenHover } from '../utils'
import { LinkPreviewTooltip } from './preview-view'
export function configureLinkPreviewTooltip(ctx: Ctx) {
diff --git a/packages/components/src/link-tooltip/preview/preview-view.ts b/packages/components/src/link-tooltip/preview/preview-view.ts
index 0bbc6dd6f31..6ad5089306f 100644
--- a/packages/components/src/link-tooltip/preview/preview-view.ts
+++ b/packages/components/src/link-tooltip/preview/preview-view.ts
@@ -1,11 +1,14 @@
+import type { Ctx, Slice } from '@milkdown/ctx'
+import type { Mark } from '@milkdown/prose/model'
import type { PluginView } from '@milkdown/prose/state'
import type { EditorView } from '@milkdown/prose/view'
-import type { Mark } from '@milkdown/prose/model'
+
import { TooltipProvider } from '@milkdown/plugin-tooltip'
-import type { Ctx, Slice } from '@milkdown/ctx'
+import { createApp, ref, type App, type Ref } from 'vue'
+
import type { LinkTooltipConfig, LinkToolTipState } from '../slices'
+
import { linkTooltipAPI, linkTooltipConfig, linkTooltipState } from '../slices'
-import { createApp, ref, type App, type Ref } from 'vue'
import { PreviewLink } from './component'
export class LinkPreviewTooltip implements PluginView {
diff --git a/packages/components/src/link-tooltip/slices.ts b/packages/components/src/link-tooltip/slices.ts
index a751d1e4de7..1c0d160d9fd 100644
--- a/packages/components/src/link-tooltip/slices.ts
+++ b/packages/components/src/link-tooltip/slices.ts
@@ -1,5 +1,7 @@
-import { $ctx } from '@milkdown/utils'
import type { Mark } from '@milkdown/prose/model'
+
+import { $ctx } from '@milkdown/utils'
+
import { withMeta } from '../__internal__/meta'
export interface LinkToolTipState {
diff --git a/packages/components/src/link-tooltip/tooltips.ts b/packages/components/src/link-tooltip/tooltips.ts
index 270f6dd532a..f1963ec4132 100644
--- a/packages/components/src/link-tooltip/tooltips.ts
+++ b/packages/components/src/link-tooltip/tooltips.ts
@@ -1,4 +1,5 @@
import { tooltipFactory } from '@milkdown/plugin-tooltip'
+
import { withMeta } from '../__internal__/meta'
export const linkPreviewTooltip = tooltipFactory('LINK_PREVIEW')
diff --git a/packages/components/src/link-tooltip/utils.ts b/packages/components/src/link-tooltip/utils.ts
index d126ae69a2e..cfae788b720 100644
--- a/packages/components/src/link-tooltip/utils.ts
+++ b/packages/components/src/link-tooltip/utils.ts
@@ -1,7 +1,9 @@
-import type { Mark, Node } from '@milkdown/prose/model'
import type { Ctx } from '@milkdown/ctx'
+import type { Mark, Node } from '@milkdown/prose/model'
import type { EditorView } from '@milkdown/prose/view'
+
import { linkSchema } from '@milkdown/preset-commonmark'
+
import { linkPreviewTooltip } from './tooltips'
export function findMarkPosition(
diff --git a/packages/components/src/list-item-block/component.ts b/packages/components/src/list-item-block/component.ts
index 661facca423..ada91629f75 100644
--- a/packages/components/src/list-item-block/component.ts
+++ b/packages/components/src/list-item-block/component.ts
@@ -1,5 +1,7 @@
import type { Component } from 'atomico'
+
import { c, html, useHost, useLayoutEffect, useRef } from 'atomico'
+
import type { ListItemBlockConfig } from './config'
interface Attrs {
diff --git a/packages/components/src/list-item-block/config.ts b/packages/components/src/list-item-block/config.ts
index 0135ac749f0..75606ec7732 100644
--- a/packages/components/src/list-item-block/config.ts
+++ b/packages/components/src/list-item-block/config.ts
@@ -1,5 +1,6 @@
import { $ctx } from '@milkdown/utils'
import { html } from 'atomico'
+
import { withMeta } from '../__internal__/meta'
interface RenderLabelProps {
diff --git a/packages/components/src/list-item-block/index.ts b/packages/components/src/list-item-block/index.ts
index 5be602cef33..5c90253e202 100644
--- a/packages/components/src/list-item-block/index.ts
+++ b/packages/components/src/list-item-block/index.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { listItemBlockView } from './view'
+
import { listItemBlockConfig } from './config'
+import { listItemBlockView } from './view'
export * from './component'
export * from './config'
diff --git a/packages/components/src/list-item-block/view.ts b/packages/components/src/list-item-block/view.ts
index ccb16fb77d4..5d27b94d41b 100644
--- a/packages/components/src/list-item-block/view.ts
+++ b/packages/components/src/list-item-block/view.ts
@@ -1,11 +1,14 @@
-import { $view } from '@milkdown/utils'
-import type { NodeViewConstructor } from '@milkdown/prose/view'
-import { TextSelection } from '@milkdown/prose/state'
import type { Node } from '@milkdown/prose/model'
+import type { NodeViewConstructor } from '@milkdown/prose/view'
+
import { listItemSchema } from '@milkdown/preset-commonmark'
-import { withMeta } from '../__internal__/meta'
-import { defIfNotExists } from '../__internal__/helper'
+import { TextSelection } from '@milkdown/prose/state'
+import { $view } from '@milkdown/utils'
+
import type { ListItemComponentProps } from './component'
+
+import { defIfNotExists } from '../__internal__/helper'
+import { withMeta } from '../__internal__/meta'
import { ListItemElement } from './component'
import { listItemBlockConfig } from './config'
diff --git a/packages/components/src/table-block/config.ts b/packages/components/src/table-block/config.ts
index 9b1995aa116..9fefacdb8ab 100644
--- a/packages/components/src/table-block/config.ts
+++ b/packages/components/src/table-block/config.ts
@@ -1,5 +1,7 @@
-import { $ctx } from '@milkdown/utils'
import type { html } from 'atomico'
+
+import { $ctx } from '@milkdown/utils'
+
import { withMeta } from '../__internal__/meta'
export type RenderType =
diff --git a/packages/components/src/table-block/index.ts b/packages/components/src/table-block/index.ts
index 360d847da1b..4058f4b33ba 100644
--- a/packages/components/src/table-block/index.ts
+++ b/packages/components/src/table-block/index.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { tableBlockView } from './view'
+
import { tableBlockConfig } from './config'
+import { tableBlockView } from './view'
export * from './view'
export * from './config'
diff --git a/packages/components/src/table-block/view/component.ts b/packages/components/src/table-block/view/component.ts
index 85119225f44..772f6ba4a57 100644
--- a/packages/components/src/table-block/view/component.ts
+++ b/packages/components/src/table-block/view/component.ts
@@ -1,16 +1,18 @@
-import type { Component } from 'atomico'
-import { c, html, useHost, useLayoutEffect, useMemo, useRef } from 'atomico'
+import type { Ctx } from '@milkdown/ctx'
import type { Node } from '@milkdown/prose/model'
import type { EditorView } from '@milkdown/prose/view'
-import type { Ctx } from '@milkdown/ctx'
+import type { Component } from 'atomico'
+import { c, html, useHost, useLayoutEffect, useMemo, useRef } from 'atomico'
import clsx from 'clsx'
+
import type { TableBlockConfig } from '../config'
-import { useDragHandlers } from './drag'
import type { CellIndex, DragInfo, Refs } from './types'
-import { recoveryStateBetweenUpdate } from './utils'
-import { usePointerHandlers } from './pointer'
+
+import { useDragHandlers } from './drag'
import { useOperation } from './operation'
+import { usePointerHandlers } from './pointer'
+import { recoveryStateBetweenUpdate } from './utils'
export interface TableComponentProps {
view: EditorView
diff --git a/packages/components/src/table-block/view/drag.ts b/packages/components/src/table-block/view/drag.ts
index dfe66454e65..e0c2e5996da 100644
--- a/packages/components/src/table-block/view/drag.ts
+++ b/packages/components/src/table-block/view/drag.ts
@@ -1,6 +1,6 @@
-import throttle from 'lodash.throttle'
+import type { Ctx } from '@milkdown/ctx'
+
import { computePosition, offset } from '@floating-ui/dom'
-import { useEffect, useHost, useMemo } from 'atomico'
import { commandsCtx, editorViewCtx } from '@milkdown/core'
import {
moveColCommand,
@@ -8,13 +8,16 @@ import {
selectColCommand,
selectRowCommand,
} from '@milkdown/preset-gfm'
-import type { Ctx } from '@milkdown/ctx'
+import { useEffect, useHost, useMemo } from 'atomico'
+import throttle from 'lodash.throttle'
+
+import type { CellIndex, DragContext, Refs } from './types'
+
import {
computeColHandlePositionByIndex,
computeRowHandlePositionByIndex,
getRelatedDOM,
} from './utils'
-import type { CellIndex, DragContext, Refs } from './types'
function prepareDndContext(refs: Refs): DragContext | undefined {
const {
@@ -281,14 +284,16 @@ export function createDragOverHandler(refs: Refs): (e: DragEvent) => void {
computePosition(col, yHandle, {
placement: direction === 'left' ? 'left' : 'right',
middleware: [offset(direction === 'left' ? -1 * yHandleWidth : 0)],
- }).then(({ x }) => {
- yHandle.dataset.show = 'true'
- Object.assign(yHandle.style, {
- height: `${contentBoundary.height}px`,
- left: `${x}px`,
- top: `${wrapperOffsetTop}px`,
- })
})
+ .then(({ x }) => {
+ yHandle.dataset.show = 'true'
+ Object.assign(yHandle.style, {
+ height: `${contentBoundary.height}px`,
+ left: `${x}px`,
+ top: `${wrapperOffsetTop}px`,
+ })
+ })
+ .catch(console.error)
}
} else if (info.type === 'row') {
const height = dom.row.getBoundingClientRect().height
@@ -341,13 +346,15 @@ export function createDragOverHandler(refs: Refs): (e: DragEvent) => void {
computePosition(row, xHandle, {
placement: direction === 'up' ? 'top' : 'bottom',
middleware: [offset(direction === 'up' ? -1 * xHandleHeight : 0)],
- }).then(({ y }) => {
- xHandle.dataset.show = 'true'
- Object.assign(xHandle.style, {
- width: `${contentBoundary.width}px`,
- top: `${y}px`,
- })
})
+ .then(({ y }) => {
+ xHandle.dataset.show = 'true'
+ Object.assign(xHandle.style, {
+ width: `${contentBoundary.width}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
}
}
}, 20)
diff --git a/packages/components/src/table-block/view/operation.ts b/packages/components/src/table-block/view/operation.ts
index 26a12a3121e..8d573d734f8 100644
--- a/packages/components/src/table-block/view/operation.ts
+++ b/packages/components/src/table-block/view/operation.ts
@@ -1,4 +1,5 @@
-import { useCallback } from 'atomico'
+import type { Ctx } from '@milkdown/ctx'
+
import { commandsCtx, editorViewCtx } from '@milkdown/core'
import {
addColAfterCommand,
@@ -10,7 +11,8 @@ import {
selectRowCommand,
setAlignCommand,
} from '@milkdown/preset-gfm'
-import type { Ctx } from '@milkdown/ctx'
+import { useCallback } from 'atomico'
+
import type { Refs } from './types'
export function useOperation(
diff --git a/packages/components/src/table-block/view/pointer.ts b/packages/components/src/table-block/view/pointer.ts
index 694f122ff98..3147c268a22 100644
--- a/packages/components/src/table-block/view/pointer.ts
+++ b/packages/components/src/table-block/view/pointer.ts
@@ -1,8 +1,11 @@
-import { computePosition, offset } from '@floating-ui/dom'
import type { EditorView } from '@milkdown/prose/view'
-import throttle from 'lodash.throttle'
+
+import { computePosition, offset } from '@floating-ui/dom'
import { useMemo } from 'atomico'
+import throttle from 'lodash.throttle'
+
import type { Refs } from './types'
+
import {
computeColHandlePositionByIndex,
computeRowHandlePositionByIndex,
@@ -78,13 +81,15 @@ export function createPointerMoveHandler(
computePosition(dom.col, yHandle, {
placement: closeToBoundaryLeft ? 'left' : 'right',
middleware: [offset(closeToBoundaryLeft ? -1 * yHandleWidth : 0)],
- }).then(({ x }) => {
- yHandle.dataset.show = 'true'
- Object.assign(yHandle.style, {
- height: `${contentBoundary.height}px`,
- left: `${x}px`,
- })
})
+ .then(({ x }) => {
+ yHandle.dataset.show = 'true'
+ Object.assign(yHandle.style, {
+ height: `${contentBoundary.height}px`,
+ left: `${x}px`,
+ })
+ })
+ .catch(console.error)
} else {
yHandle.dataset.show = 'false'
}
@@ -98,13 +103,15 @@ export function createPointerMoveHandler(
computePosition(dom.row, xHandle, {
placement: closeToBoundaryTop ? 'top' : 'bottom',
middleware: [offset(closeToBoundaryTop ? -1 * xHandleHeight : 0)],
- }).then(({ y }) => {
- xHandle.dataset.show = 'true'
- Object.assign(xHandle.style, {
- width: `${contentBoundary.width}px`,
- top: `${y}px`,
- })
})
+ .then(({ y }) => {
+ xHandle.dataset.show = 'true'
+ Object.assign(xHandle.style, {
+ width: `${contentBoundary.width}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
} else {
xHandle.dataset.show = 'false'
}
diff --git a/packages/components/src/table-block/view/utils.ts b/packages/components/src/table-block/view/utils.ts
index a89895948fa..fb51ae19611 100644
--- a/packages/components/src/table-block/view/utils.ts
+++ b/packages/components/src/table-block/view/utils.ts
@@ -1,12 +1,14 @@
+import type { Ctx } from '@milkdown/ctx'
import type { Node } from '@milkdown/prose/model'
import type { EditorView } from '@milkdown/prose/view'
-import { findParent } from '@milkdown/prose'
import type { Ref } from 'atomico'
+
+import { computePosition } from '@floating-ui/dom'
import { editorViewCtx } from '@milkdown/core'
-import { CellSelection } from '@milkdown/prose/tables'
import { findTable } from '@milkdown/preset-gfm'
-import { computePosition } from '@floating-ui/dom'
-import type { Ctx } from '@milkdown/ctx'
+import { findParent } from '@milkdown/prose'
+import { CellSelection } from '@milkdown/prose/tables'
+
import type { CellIndex, Refs } from './types'
export function findNodeIndex(parent: Node, child: Node) {
@@ -150,13 +152,15 @@ export function computeColHandlePositionByIndex({
const { headerCol: col } = dom
colHandle.dataset.show = 'true'
if (before) before(colHandle)
- computePosition(col, colHandle, { placement: 'top' }).then(({ x, y }) => {
- Object.assign(colHandle.style, {
- left: `${x}px`,
- top: `${y}px`,
+ computePosition(col, colHandle, { placement: 'top' })
+ .then(({ x, y }) => {
+ Object.assign(colHandle.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ if (after) after(colHandle)
})
- if (after) after(colHandle)
- })
+ .catch(console.error)
}
export function computeRowHandlePositionByIndex({
@@ -175,11 +179,13 @@ export function computeRowHandlePositionByIndex({
const { row } = dom
rowHandle.dataset.show = 'true'
if (before) before(rowHandle)
- computePosition(row, rowHandle, { placement: 'left' }).then(({ x, y }) => {
- Object.assign(rowHandle.style, {
- left: `${x}px`,
- top: `${y}px`,
+ computePosition(row, rowHandle, { placement: 'left' })
+ .then(({ x, y }) => {
+ Object.assign(rowHandle.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ if (after) after(rowHandle)
})
- if (after) after(rowHandle)
- })
+ .catch(console.error)
}
diff --git a/packages/components/src/table-block/view/view.ts b/packages/components/src/table-block/view/view.ts
index 1434fdf2366..3a8cb7eb540 100644
--- a/packages/components/src/table-block/view/view.ts
+++ b/packages/components/src/table-block/view/view.ts
@@ -1,5 +1,4 @@
-import { $view } from '@milkdown/utils'
-import { tableSchema } from '@milkdown/preset-gfm'
+import type { Ctx } from '@milkdown/ctx'
import type { Node } from '@milkdown/prose/model'
import type {
EditorView,
@@ -7,14 +6,18 @@ import type {
NodeViewConstructor,
ViewMutationRecord,
} from '@milkdown/prose/view'
-import type { Ctx } from '@milkdown/ctx'
-import { NodeSelection, TextSelection } from '@milkdown/prose/state'
+
+import { tableSchema } from '@milkdown/preset-gfm'
import { findParent } from '@milkdown/prose'
+import { NodeSelection, TextSelection } from '@milkdown/prose/state'
import { CellSelection } from '@milkdown/prose/tables'
+import { $view } from '@milkdown/utils'
+
+import type { TableComponentProps } from './component'
+
import { defIfNotExists } from '../../__internal__/helper'
-import { tableBlockConfig } from '../config'
import { withMeta } from '../../__internal__/meta'
-import type { TableComponentProps } from './component'
+import { tableBlockConfig } from '../config'
import { TableElement } from './component'
export class TableNodeView implements NodeView {
diff --git a/packages/core/src/editor/editor.ts b/packages/core/src/editor/editor.ts
index fa326f01f4c..5f51dc5517c 100644
--- a/packages/core/src/editor/editor.ts
+++ b/packages/core/src/editor/editor.ts
@@ -1,7 +1,9 @@
import type { CtxRunner, MilkdownPlugin, Telemetry } from '@milkdown/ctx'
+
import { Clock, Container, Ctx } from '@milkdown/ctx'
import type { Config } from '../internal-plugin'
+
import {
commands,
config,
@@ -208,7 +210,6 @@ export class Editor {
plugins: MilkdownPlugin | MilkdownPlugin[]
): Promise => {
if (this.#status === EditorStatus.OnCreate) {
- // eslint-disable-next-line no-console
console.warn(
'[Milkdown]: You are trying to remove plugins when the editor is creating, this is not recommended, please check your code.'
)
@@ -281,7 +282,6 @@ export class Editor {
/// Make sure you have enabled inspector by `editor.enableInspector()` before calling this method.
readonly inspect = (): Telemetry[] => {
if (!this.#enableInspector) {
- // eslint-disable-next-line no-console
console.warn(
'[Milkdown]: You are trying to collect inspection when inspector is disabled, please enable inspector by `editor.enableInspector()` first.'
)
diff --git a/packages/core/src/internal-plugin/atoms.ts b/packages/core/src/internal-plugin/atoms.ts
index b2aaae98053..955c22fdb68 100644
--- a/packages/core/src/internal-plugin/atoms.ts
+++ b/packages/core/src/internal-plugin/atoms.ts
@@ -1,18 +1,21 @@
-import { createSlice } from '@milkdown/ctx'
+import type { SliceType, TimerType } from '@milkdown/ctx'
+import type { InputRule } from '@milkdown/prose/inputrules'
import type { EditorState, Plugin } from '@milkdown/prose/state'
import type {
EditorView,
MarkViewConstructor,
NodeViewConstructor,
} from '@milkdown/prose/view'
-import type { SliceType, TimerType } from '@milkdown/ctx'
-import type { InputRule } from '@milkdown/prose/inputrules'
import type { RemarkParser, RemarkPlugin } from '@milkdown/transformer'
-import remarkParse from 'remark-parse'
import type { Options } from 'remark-stringify'
+
+import { createSlice } from '@milkdown/ctx'
+import remarkParse from 'remark-parse'
import remarkStringify from 'remark-stringify'
import { unified } from 'unified'
+
import type { Editor } from '../editor'
+
import { remarkHandlers } from '../__internal__'
/// A slice which contains the editor view instance.
diff --git a/packages/core/src/internal-plugin/commands.ts b/packages/core/src/internal-plugin/commands.ts
index e713babd4bb..8b3ae81edaa 100644
--- a/packages/core/src/internal-plugin/commands.ts
+++ b/packages/core/src/internal-plugin/commands.ts
@@ -1,11 +1,12 @@
import type { Ctx, MilkdownPlugin, SliceType } from '@milkdown/ctx'
+import type { Command } from '@milkdown/prose/state'
+
import { Container, createSlice, createTimer } from '@milkdown/ctx'
import { callCommandBeforeEditorView } from '@milkdown/exception'
-import type { Command } from '@milkdown/prose/state'
import { withMeta } from '../__internal__'
-import { SchemaReady } from './schema'
import { editorViewCtx } from './atoms'
+import { SchemaReady } from './schema'
/// @internal
export type Cmd = (payload?: T) => Command
diff --git a/packages/core/src/internal-plugin/config.ts b/packages/core/src/internal-plugin/config.ts
index d2dc14c96a8..b8dec2ad03f 100644
--- a/packages/core/src/internal-plugin/config.ts
+++ b/packages/core/src/internal-plugin/config.ts
@@ -1,5 +1,7 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+
import { createTimer } from '@milkdown/ctx'
+
import { withMeta } from '../__internal__'
/// @internal
diff --git a/packages/core/src/internal-plugin/editor-state.ts b/packages/core/src/internal-plugin/editor-state.ts
index cf21b503d35..947a533d927 100644
--- a/packages/core/src/internal-plugin/editor-state.ts
+++ b/packages/core/src/internal-plugin/editor-state.ts
@@ -1,4 +1,8 @@
import type { MilkdownPlugin, TimerType } from '@milkdown/ctx'
+import type { Schema } from '@milkdown/prose/model'
+import type { Command } from '@milkdown/prose/state'
+import type { JSONRecord, Parser } from '@milkdown/transformer'
+
import { createSlice, createTimer } from '@milkdown/ctx'
import { docTypeError } from '@milkdown/exception'
import { customInputRules as createInputRules } from '@milkdown/prose'
@@ -11,18 +15,15 @@ import {
} from '@milkdown/prose/commands'
import { undoInputRule } from '@milkdown/prose/inputrules'
import { keymap as createKeymap } from '@milkdown/prose/keymap'
-import type { Schema } from '@milkdown/prose/model'
import { DOMParser, Node } from '@milkdown/prose/model'
-import type { Command } from '@milkdown/prose/state'
import { EditorState, Plugin, PluginKey } from '@milkdown/prose/state'
-import type { JSONRecord, Parser } from '@milkdown/transformer'
import { withMeta } from '../__internal__'
+import { editorStateCtx, inputRulesCtx, prosePluginsCtx } from './atoms'
+import { CommandsReady } from './commands'
import { ParserReady, parserCtx } from './parser'
import { schemaCtx } from './schema'
import { SerializerReady } from './serializer'
-import { CommandsReady } from './commands'
-import { editorStateCtx, inputRulesCtx, prosePluginsCtx } from './atoms'
/// @internal
export type DefaultValue =
diff --git a/packages/core/src/internal-plugin/editor-view.ts b/packages/core/src/internal-plugin/editor-view.ts
index d0560d7d67f..ddf7175dbf8 100644
--- a/packages/core/src/internal-plugin/editor-view.ts
+++ b/packages/core/src/internal-plugin/editor-view.ts
@@ -1,12 +1,11 @@
import type { Ctx, MilkdownPlugin, TimerType } from '@milkdown/ctx'
+import type { DirectEditorProps } from '@milkdown/prose/view'
+
import { createSlice, createTimer } from '@milkdown/ctx'
import { Plugin, PluginKey } from '@milkdown/prose/state'
-import type { DirectEditorProps } from '@milkdown/prose/view'
import { EditorView } from '@milkdown/prose/view'
import { withMeta } from '../__internal__'
-import { EditorStateReady } from './editor-state'
-import { InitReady } from './init'
import {
editorStateCtx,
editorViewCtx,
@@ -14,6 +13,8 @@ import {
nodeViewCtx,
prosePluginsCtx,
} from './atoms'
+import { EditorStateReady } from './editor-state'
+import { InitReady } from './init'
type EditorOptions = Omit
diff --git a/packages/core/src/internal-plugin/init.ts b/packages/core/src/internal-plugin/init.ts
index c8511b27e24..930f72ef73d 100644
--- a/packages/core/src/internal-plugin/init.ts
+++ b/packages/core/src/internal-plugin/init.ts
@@ -1,12 +1,13 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { createTimer } from '@milkdown/ctx'
import remarkParse from 'remark-parse'
import remarkStringify from 'remark-stringify'
import { unified } from 'unified'
import type { Editor } from '../editor'
+
import { remarkHandlers, withMeta } from '../__internal__'
-import { ConfigReady } from './config'
import {
editorCtx,
initTimerCtx,
@@ -18,6 +19,7 @@ import {
remarkPluginsCtx,
remarkStringifyOptionsCtx,
} from './atoms'
+import { ConfigReady } from './config'
/// The timer which will be resolved when the init plugin is ready.
export const InitReady = createTimer('InitReady')
diff --git a/packages/core/src/internal-plugin/parser.ts b/packages/core/src/internal-plugin/parser.ts
index 579600533b1..95954e4801f 100644
--- a/packages/core/src/internal-plugin/parser.ts
+++ b/packages/core/src/internal-plugin/parser.ts
@@ -1,7 +1,8 @@
import type { MilkdownPlugin, TimerType } from '@milkdown/ctx'
+import type { Parser } from '@milkdown/transformer'
+
import { createSlice, createTimer } from '@milkdown/ctx'
import { ctxCallOutOfScope } from '@milkdown/exception'
-import type { Parser } from '@milkdown/transformer'
import { ParserState } from '@milkdown/transformer'
import { withMeta } from '../__internal__'
diff --git a/packages/core/src/internal-plugin/schema.ts b/packages/core/src/internal-plugin/schema.ts
index 92eabb207cf..f3628804924 100644
--- a/packages/core/src/internal-plugin/schema.ts
+++ b/packages/core/src/internal-plugin/schema.ts
@@ -1,15 +1,16 @@
import type { MilkdownPlugin, TimerType } from '@milkdown/ctx'
-import { createSlice, createTimer } from '@milkdown/ctx'
-import { Schema } from '@milkdown/prose/model'
import type {
MarkSchema,
NodeSchema,
RemarkParser,
} from '@milkdown/transformer'
+import { createSlice, createTimer } from '@milkdown/ctx'
+import { Schema } from '@milkdown/prose/model'
+
import { withMeta } from '../__internal__'
-import { InitReady } from './init'
import { remarkCtx, remarkPluginsCtx } from './atoms'
+import { InitReady } from './init'
/// The timer which will be resolved when the schema plugin is ready.
export const SchemaReady = createTimer('SchemaReady')
diff --git a/packages/core/src/internal-plugin/serializer.ts b/packages/core/src/internal-plugin/serializer.ts
index 9ca3b790f24..bd2fae5355c 100644
--- a/packages/core/src/internal-plugin/serializer.ts
+++ b/packages/core/src/internal-plugin/serializer.ts
@@ -1,9 +1,10 @@
import type { MilkdownPlugin, TimerType } from '@milkdown/ctx'
-import { createSlice, createTimer } from '@milkdown/ctx'
import type { Serializer } from '@milkdown/transformer'
-import { SerializerState } from '@milkdown/transformer'
+import { createSlice, createTimer } from '@milkdown/ctx'
import { ctxCallOutOfScope } from '@milkdown/exception'
+import { SerializerState } from '@milkdown/transformer'
+
import { withMeta } from '../__internal__'
import { remarkCtx } from './atoms'
import { SchemaReady, schemaCtx } from './schema'
diff --git a/packages/crepe/src/core/crepe.ts b/packages/crepe/src/core/crepe.ts
index 86dafa8e3c8..31db9b5cbc6 100644
--- a/packages/crepe/src/core/crepe.ts
+++ b/packages/crepe/src/core/crepe.ts
@@ -1,4 +1,6 @@
import type { DefaultValue } from '@milkdown/kit/core'
+import type { ListenerManager } from '@milkdown/kit/plugin/listener'
+
import {
Editor,
EditorStatus,
@@ -6,20 +8,19 @@ import {
editorViewOptionsCtx,
rootCtx,
} from '@milkdown/kit/core'
-
-import { commonmark } from '@milkdown/kit/preset/commonmark'
-import { gfm } from '@milkdown/kit/preset/gfm'
+import { clipboard } from '@milkdown/kit/plugin/clipboard'
import { history } from '@milkdown/kit/plugin/history'
import { indent, indentConfig } from '@milkdown/kit/plugin/indent'
-import { getMarkdown } from '@milkdown/kit/utils'
-import { clipboard } from '@milkdown/kit/plugin/clipboard'
+import { listener, listenerCtx } from '@milkdown/kit/plugin/listener'
import { trailing } from '@milkdown/kit/plugin/trailing'
+import { commonmark } from '@milkdown/kit/preset/commonmark'
+import { gfm } from '@milkdown/kit/preset/gfm'
+import { getMarkdown } from '@milkdown/kit/utils'
import type { CrepeFeatureConfig } from '../feature'
+
import { CrepeFeature, defaultFeatures, loadFeature } from '../feature'
import { configureFeatures, crepeCtx } from './slice'
-import type { ListenerManager } from '@milkdown/kit/plugin/listener'
-import { listener, listenerCtx } from '@milkdown/kit/plugin/listener'
export interface CrepeConfig {
features?: Partial>
diff --git a/packages/crepe/src/core/slice.ts b/packages/crepe/src/core/slice.ts
index 69e1450cb40..560de2123d4 100644
--- a/packages/crepe/src/core/slice.ts
+++ b/packages/crepe/src/core/slice.ts
@@ -1,5 +1,7 @@
import type { Ctx } from '@milkdown/kit/ctx'
+
import { createSlice } from '@milkdown/kit/ctx'
+
import type { CrepeFeature } from '../feature'
import type { Crepe } from './crepe'
diff --git a/packages/crepe/src/feature/block-edit/handle/component.ts b/packages/crepe/src/feature/block-edit/handle/component.ts
index 9c4c3ab6c0a..803fc0abfa2 100644
--- a/packages/crepe/src/feature/block-edit/handle/component.ts
+++ b/packages/crepe/src/feature/block-edit/handle/component.ts
@@ -1,7 +1,9 @@
import { type Component, c, html, useEffect, useRef } from 'atomico'
-import { menuIcon, plusIcon } from '../../../icons'
+
import type { Icon } from '../../shared'
+import { menuIcon, plusIcon } from '../../../icons'
+
export interface BlockHandleProps {
show: boolean
onAdd: () => void
diff --git a/packages/crepe/src/feature/block-edit/handle/index.ts b/packages/crepe/src/feature/block-edit/handle/index.ts
index 9d1c919305c..e012107dab2 100644
--- a/packages/crepe/src/feature/block-edit/handle/index.ts
+++ b/packages/crepe/src/feature/block-edit/handle/index.ts
@@ -1,15 +1,18 @@
-import type { PluginView } from '@milkdown/kit/prose/state'
-import { TextSelection } from '@milkdown/kit/prose/state'
-import { BlockProvider, block, blockConfig } from '@milkdown/kit/plugin/block'
import type { Ctx } from '@milkdown/kit/ctx'
+import type { PluginView } from '@milkdown/kit/prose/state'
import type { AtomicoThis } from 'atomico/types/dom'
+
import { editorViewCtx } from '@milkdown/kit/core'
+import { BlockProvider, block, blockConfig } from '@milkdown/kit/plugin/block'
import { paragraphSchema } from '@milkdown/kit/preset/commonmark'
import { findParent } from '@milkdown/kit/prose'
-import { menuAPI } from '../menu'
-import { defIfNotExists } from '../../../utils'
+import { TextSelection } from '@milkdown/kit/prose/state'
+
import type { BlockEditFeatureConfig } from '../index'
import type { BlockHandleProps } from './component'
+
+import { defIfNotExists } from '../../../utils'
+import { menuAPI } from '../menu'
import { BlockHandleElement } from './component'
export class BlockHandleView implements PluginView {
diff --git a/packages/crepe/src/feature/block-edit/index.ts b/packages/crepe/src/feature/block-edit/index.ts
index 533803de5be..e7f6dade270 100644
--- a/packages/crepe/src/feature/block-edit/index.ts
+++ b/packages/crepe/src/feature/block-edit/index.ts
@@ -1,8 +1,10 @@
import { block } from '@milkdown/kit/plugin/block'
+
import type { DefineFeature, Icon } from '../shared'
+import type { GroupBuilder } from './menu/group-builder'
+
import { configureBlockHandle } from './handle'
import { configureMenu, menu, menuAPI } from './menu'
-import type { GroupBuilder } from './menu/group-builder'
interface BlockEditConfig {
handleAddIcon: Icon
diff --git a/packages/crepe/src/feature/block-edit/menu/component.ts b/packages/crepe/src/feature/block-edit/menu/component.ts
index eef7c7b314a..f7f0c8e3117 100644
--- a/packages/crepe/src/feature/block-edit/menu/component.ts
+++ b/packages/crepe/src/feature/block-edit/menu/component.ts
@@ -1,4 +1,6 @@
+import type { Ctx } from '@milkdown/kit/ctx'
import type { Component } from 'atomico'
+
import {
c,
html,
@@ -9,8 +11,9 @@ import {
useRef,
useState,
} from 'atomico'
-import type { Ctx } from '@milkdown/kit/ctx'
+
import type { BlockEditFeatureConfig } from '../index'
+
import { getGroups } from './config'
export interface MenuProps {
diff --git a/packages/crepe/src/feature/block-edit/menu/config.ts b/packages/crepe/src/feature/block-edit/menu/config.ts
index 95366884c8e..786ec59fc8e 100644
--- a/packages/crepe/src/feature/block-edit/menu/config.ts
+++ b/packages/crepe/src/feature/block-edit/menu/config.ts
@@ -1,6 +1,7 @@
+import type { Ctx } from '@milkdown/kit/ctx'
+
import { imageBlockSchema } from '@milkdown/kit/component/image-block'
import { editorViewCtx } from '@milkdown/kit/core'
-import type { Ctx } from '@milkdown/kit/ctx'
import {
blockquoteSchema,
bulletListSchema,
@@ -13,6 +14,10 @@ import {
} from '@milkdown/kit/preset/commonmark'
import { createTable } from '@milkdown/kit/preset/gfm'
import { TextSelection } from '@milkdown/kit/prose/state'
+
+import type { BlockEditFeatureConfig } from '../index'
+import type { MenuItemGroup } from './utils'
+
import { CrepeFeature } from '../../..'
import { FeaturesCtx } from '../../../core/slice'
import {
@@ -33,9 +38,7 @@ import {
textIcon,
todoListIcon,
} from '../../../icons'
-import type { BlockEditFeatureConfig } from '../index'
import { GroupBuilder } from './group-builder'
-import type { MenuItemGroup } from './utils'
import {
clearContentAndAddBlockType,
clearContentAndSetBlockType,
diff --git a/packages/crepe/src/feature/block-edit/menu/index.ts b/packages/crepe/src/feature/block-edit/menu/index.ts
index c1db949c532..3cff5867ca0 100644
--- a/packages/crepe/src/feature/block-edit/menu/index.ts
+++ b/packages/crepe/src/feature/block-edit/menu/index.ts
@@ -1,16 +1,19 @@
+import type { Ctx } from '@milkdown/kit/ctx'
+import type { EditorView } from '@milkdown/kit/prose/view'
+import type { AtomicoThis } from 'atomico/types/dom'
+
+import { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'
import {
TextSelection,
type PluginView,
type Selection,
} from '@milkdown/kit/prose/state'
-import type { EditorView } from '@milkdown/kit/prose/view'
-import { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'
-import type { Ctx } from '@milkdown/kit/ctx'
-import type { AtomicoThis } from 'atomico/types/dom'
import { $ctx } from '@milkdown/kit/utils'
-import { defIfNotExists, isInCodeBlock, isInList } from '../../../utils'
+
import type { BlockEditFeatureConfig } from '../index'
import type { MenuProps } from './component'
+
+import { defIfNotExists, isInCodeBlock, isInList } from '../../../utils'
import { MenuElement } from './component'
export const menu = slashFactory('CREPE_MENU')
@@ -45,7 +48,7 @@ class MenuView implements PluginView {
this.#content.hide = this.hide
this.#content.ctx = ctx
this.#content.config = config
- // eslint-disable-next-line ts/no-this-alias
+ // oxlint-disable-next-line ts/no-this-alias
const self = this
this.#slashProvider = new SlashProvider({
content: this.#content,
diff --git a/packages/crepe/src/feature/block-edit/menu/utils.ts b/packages/crepe/src/feature/block-edit/menu/utils.ts
index 5695513fe8f..90c263e688f 100644
--- a/packages/crepe/src/feature/block-edit/menu/utils.ts
+++ b/packages/crepe/src/feature/block-edit/menu/utils.ts
@@ -1,7 +1,8 @@
-import type { html } from 'atomico'
import type { Ctx } from '@milkdown/kit/ctx'
-import type { Command, Transaction } from '@milkdown/kit/prose/state'
import type { Attrs, NodeType } from '@milkdown/kit/prose/model'
+import type { Command, Transaction } from '@milkdown/kit/prose/state'
+import type { html } from 'atomico'
+
import { findWrapping } from '@milkdown/kit/prose/transform'
export interface MenuItem {
diff --git a/packages/crepe/src/feature/code-mirror/index.ts b/packages/crepe/src/feature/code-mirror/index.ts
index 0ee58557b3e..d7233830c63 100644
--- a/packages/crepe/src/feature/code-mirror/index.ts
+++ b/packages/crepe/src/feature/code-mirror/index.ts
@@ -1,13 +1,16 @@
+import type { LanguageDescription } from '@codemirror/language'
+import type { Extension } from '@codemirror/state'
+
+import { defaultKeymap, indentWithTab } from '@codemirror/commands'
+import { keymap } from '@codemirror/view'
import {
codeBlockComponent,
codeBlockConfig,
} from '@milkdown/kit/component/code-block'
-import type { LanguageDescription } from '@codemirror/language'
-import type { Extension } from '@codemirror/state'
import { basicSetup } from 'codemirror'
-import { keymap } from '@codemirror/view'
-import { defaultKeymap, indentWithTab } from '@codemirror/commands'
+
import type { DefineFeature, Icon } from '../shared'
+
import { chevronDownIcon, clearIcon, editIcon, searchIcon } from '../../icons'
import { visibilityOffIcon } from '../../icons/visibility-off'
diff --git a/packages/crepe/src/feature/cursor/index.ts b/packages/crepe/src/feature/cursor/index.ts
index 533baddcc58..c63de875db6 100644
--- a/packages/crepe/src/feature/cursor/index.ts
+++ b/packages/crepe/src/feature/cursor/index.ts
@@ -1,8 +1,8 @@
import { cursor, dropCursorConfig } from '@milkdown/kit/plugin/cursor'
+import { $prose } from '@milkdown/kit/utils'
import { createVirtualCursor } from 'prosemirror-virtual-cursor'
import type { DefineFeature } from '../shared'
-import { $prose } from '@milkdown/kit/utils'
interface CursorConfig {
color: string | false
diff --git a/packages/crepe/src/feature/image-block/index.ts b/packages/crepe/src/feature/image-block/index.ts
index 920ed3ade5d..7d55dac5019 100644
--- a/packages/crepe/src/feature/image-block/index.ts
+++ b/packages/crepe/src/feature/image-block/index.ts
@@ -6,7 +6,9 @@ import {
imageInlineComponent,
inlineImageConfig,
} from '@milkdown/kit/component/image-inline'
+
import type { DefineFeature, Icon } from '../shared'
+
import { captionIcon, imageIcon, confirmIcon } from '../../icons'
interface ImageBlockConfig {
diff --git a/packages/crepe/src/feature/index.ts b/packages/crepe/src/feature/index.ts
index 6c0b03e2fb1..cd56a53d0e1 100644
--- a/packages/crepe/src/feature/index.ts
+++ b/packages/crepe/src/feature/index.ts
@@ -1,14 +1,15 @@
import type { Editor } from '@milkdown/kit/core'
-import type { PlaceHolderFeatureConfig } from './placeholder'
-import type { CodeMirrorFeatureConfig } from './code-mirror'
+
import type { BlockEditFeatureConfig } from './block-edit'
+import type { CodeMirrorFeatureConfig } from './code-mirror'
import type { CursorFeatureConfig } from './cursor'
import type { ImageBlockFeatureConfig } from './image-block'
+import type { LatexFeatureConfig } from './latex'
import type { LinkTooltipFeatureConfig } from './link-tooltip'
import type { ListItemFeatureConfig } from './list-item'
-import type { ToolbarFeatureConfig } from './toolbar'
+import type { PlaceHolderFeatureConfig } from './placeholder'
import type { TableFeatureConfig } from './table'
-import type { LatexFeatureConfig } from './latex'
+import type { ToolbarFeatureConfig } from './toolbar'
export enum CrepeFeature {
CodeMirror = 'code-mirror',
diff --git a/packages/crepe/src/feature/latex/index.ts b/packages/crepe/src/feature/latex/index.ts
index f9beb621d1e..6411dc8ea12 100644
--- a/packages/crepe/src/feature/latex/index.ts
+++ b/packages/crepe/src/feature/latex/index.ts
@@ -1,18 +1,21 @@
import type { KatexOptions } from 'katex'
-import katex from 'katex'
+
import { codeBlockConfig } from '@milkdown/kit/component/code-block'
+import katex from 'katex'
+
+import type { DefineFeature, Icon } from '../shared'
+
import { CrepeFeature } from '../..'
import { FeaturesCtx } from '../../core/slice'
-import type { DefineFeature, Icon } from '../shared'
-import { remarkMathBlockPlugin, remarkMathPlugin } from './remark'
-import { mathInlineSchema } from './inline-latex'
+import { legacyConfirmIcon } from '../../icons'
import { defIfNotExists } from '../../utils'
+import { blockLatexSchema } from './block-latex'
+import { mathInlineSchema } from './inline-latex'
import { LatexInlineEditElement } from './inline-tooltip/component'
import { inlineLatexTooltip } from './inline-tooltip/tooltip'
import { LatexInlineTooltip } from './inline-tooltip/view'
-import { legacyConfirmIcon } from '../../icons'
import { mathBlockInputRule, mathInlineInputRule } from './input-rule'
-import { blockLatexSchema } from './block-latex'
+import { remarkMathBlockPlugin, remarkMathPlugin } from './remark'
export interface LatexConfig {
katexOptions: KatexOptions
diff --git a/packages/crepe/src/feature/latex/inline-tooltip/component.ts b/packages/crepe/src/feature/latex/inline-tooltip/component.ts
index 1937c5307d7..e1da7d3c60b 100644
--- a/packages/crepe/src/feature/latex/inline-tooltip/component.ts
+++ b/packages/crepe/src/feature/latex/inline-tooltip/component.ts
@@ -1,6 +1,8 @@
+import type { EditorView } from '@milkdown/kit/prose/view'
+
import { c, h, html, type Component } from 'atomico'
+
import type { LatexConfig } from '..'
-import type { EditorView } from '@milkdown/kit/prose/view'
type LatexEditComponentProps = {
config: Partial
diff --git a/packages/crepe/src/feature/latex/inline-tooltip/view.ts b/packages/crepe/src/feature/latex/inline-tooltip/view.ts
index 6ddc02f1714..74e8c29299d 100644
--- a/packages/crepe/src/feature/latex/inline-tooltip/view.ts
+++ b/packages/crepe/src/feature/latex/inline-tooltip/view.ts
@@ -1,14 +1,17 @@
import type { Ctx } from '@milkdown/kit/ctx'
-import { TooltipProvider } from '@milkdown/kit/plugin/tooltip'
import type { PluginView } from '@milkdown/kit/prose/state'
+
+import { TooltipProvider } from '@milkdown/kit/plugin/tooltip'
+import { redo, undo } from '@milkdown/kit/prose/history'
+import { keymap } from '@milkdown/kit/prose/keymap'
+import { Schema } from '@milkdown/kit/prose/model'
import { EditorState, NodeSelection } from '@milkdown/kit/prose/state'
import { EditorView } from '@milkdown/kit/prose/view'
+
+import type { LatexConfig } from '..'
+
import { mathInlineId } from '../inline-latex'
import { LatexInlineEditElement } from './component'
-import type { LatexConfig } from '..'
-import { keymap } from '@milkdown/kit/prose/keymap'
-import { redo, undo } from '@milkdown/kit/prose/history'
-import { Schema } from '@milkdown/kit/prose/model'
export class LatexInlineTooltip implements PluginView {
#content = new LatexInlineEditElement()
diff --git a/packages/crepe/src/feature/latex/input-rule.ts b/packages/crepe/src/feature/latex/input-rule.ts
index aaaad07b411..baa32ec0c15 100644
--- a/packages/crepe/src/feature/latex/input-rule.ts
+++ b/packages/crepe/src/feature/latex/input-rule.ts
@@ -1,8 +1,9 @@
-import { $inputRule } from '@milkdown/kit/utils'
-import { nodeRule } from '@milkdown/kit/prose'
-import { mathInlineSchema } from './inline-latex'
import { codeBlockSchema } from '@milkdown/kit/preset/commonmark'
+import { nodeRule } from '@milkdown/kit/prose'
import { textblockTypeInputRule } from '@milkdown/kit/prose/inputrules'
+import { $inputRule } from '@milkdown/kit/utils'
+
+import { mathInlineSchema } from './inline-latex'
/// Input rule for inline math.
/// When you type $E=MC^2$, it will create an inline math node.
diff --git a/packages/crepe/src/feature/latex/remark.ts b/packages/crepe/src/feature/latex/remark.ts
index 514d55c76c0..b1ef50eff97 100644
--- a/packages/crepe/src/feature/latex/remark.ts
+++ b/packages/crepe/src/feature/latex/remark.ts
@@ -1,6 +1,7 @@
-import remarkMath from 'remark-math'
-import { $remark } from '@milkdown/kit/utils'
import type { Node } from '@milkdown/kit/transformer'
+
+import { $remark } from '@milkdown/kit/utils'
+import remarkMath from 'remark-math'
import { visit } from 'unist-util-visit'
export const remarkMathPlugin = $remark<'remarkMath', undefined>(
diff --git a/packages/crepe/src/feature/link-tooltip/index.ts b/packages/crepe/src/feature/link-tooltip/index.ts
index 0190f54970d..9fafa8adb98 100644
--- a/packages/crepe/src/feature/link-tooltip/index.ts
+++ b/packages/crepe/src/feature/link-tooltip/index.ts
@@ -3,7 +3,9 @@ import {
linkTooltipConfig,
linkTooltipPlugin,
} from '@milkdown/kit/component/link-tooltip'
+
import type { DefineFeature, Icon } from '../shared'
+
import { copyIcon, editIcon, removeIcon, confirmIcon } from '../../icons'
interface LinkTooltipConfig {
diff --git a/packages/crepe/src/feature/list-item/index.ts b/packages/crepe/src/feature/list-item/index.ts
index 9c24458e7f2..d14951fc9cc 100644
--- a/packages/crepe/src/feature/list-item/index.ts
+++ b/packages/crepe/src/feature/list-item/index.ts
@@ -1,11 +1,14 @@
import type { Ctx } from '@milkdown/kit/ctx'
+
import {
listItemBlockComponent,
listItemBlockConfig,
} from '@milkdown/kit/component/list-item-block'
import { html } from 'atomico'
import clsx from 'clsx'
+
import type { DefineFeature, Icon } from '../shared'
+
import {
bulletIcon,
checkBoxCheckedIcon,
diff --git a/packages/crepe/src/feature/placeholder/index.ts b/packages/crepe/src/feature/placeholder/index.ts
index 244d36c3064..586856e3701 100644
--- a/packages/crepe/src/feature/placeholder/index.ts
+++ b/packages/crepe/src/feature/placeholder/index.ts
@@ -1,10 +1,13 @@
-import { $ctx, $prose } from '@milkdown/kit/utils'
+import type { Node } from '@milkdown/kit/prose/model'
import type { EditorState } from '@milkdown/kit/prose/state'
+
+import { findParent } from '@milkdown/kit/prose'
import { Plugin, PluginKey } from '@milkdown/kit/prose/state'
-import type { Node } from '@milkdown/kit/prose/model'
import { Decoration, DecorationSet } from '@milkdown/kit/prose/view'
-import { findParent } from '@milkdown/kit/prose'
+import { $ctx, $prose } from '@milkdown/kit/utils'
+
import type { DefineFeature } from '../shared'
+
import { isInCodeBlock, isInList } from '../../utils'
function isDocEmpty(doc: Node) {
diff --git a/packages/crepe/src/feature/table/index.ts b/packages/crepe/src/feature/table/index.ts
index 41fb0475038..5aac4d57c0c 100644
--- a/packages/crepe/src/feature/table/index.ts
+++ b/packages/crepe/src/feature/table/index.ts
@@ -2,7 +2,9 @@ import {
tableBlock,
tableBlockConfig,
} from '@milkdown/kit/component/table-block'
+
import type { DefineFeature, Icon } from '../shared'
+
import {
alignCenterIcon,
alignLeftIcon,
diff --git a/packages/crepe/src/feature/toolbar/component.ts b/packages/crepe/src/feature/toolbar/component.ts
index 6bd0b6c35f8..d4dd07037f4 100644
--- a/packages/crepe/src/feature/toolbar/component.ts
+++ b/packages/crepe/src/feature/toolbar/component.ts
@@ -1,6 +1,9 @@
-import type { Component } from 'atomico'
-import { c, html, useEffect, useUpdate } from 'atomico'
import type { Ctx } from '@milkdown/kit/ctx'
+import type { MarkType, Node, NodeType } from '@milkdown/kit/prose/model'
+import type { Selection } from '@milkdown/kit/prose/state'
+import type { Component } from 'atomico'
+
+import { linkTooltipAPI } from '@milkdown/kit/component/link-tooltip'
import { commandsCtx, editorViewCtx } from '@milkdown/kit/core'
import {
emphasisSchema,
@@ -11,14 +14,18 @@ import {
toggleInlineCodeCommand,
toggleStrongCommand,
} from '@milkdown/kit/preset/commonmark'
-import type { MarkType, Node, NodeType } from '@milkdown/kit/prose/model'
-import type { Selection } from '@milkdown/kit/prose/state'
-import clsx from 'clsx'
-import { linkTooltipAPI } from '@milkdown/kit/component/link-tooltip'
import {
strikethroughSchema,
toggleStrikethroughCommand,
} from '@milkdown/kit/preset/gfm'
+import { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'
+import { c, html, useEffect, useUpdate } from 'atomico'
+import clsx from 'clsx'
+
+import type { ToolbarFeatureConfig } from './index'
+
+import { CrepeFeature } from '../..'
+import { FeaturesCtx } from '../../core/slice'
import {
boldIcon,
codeIcon,
@@ -27,11 +34,7 @@ import {
strikethroughIcon,
functionsIcon,
} from '../../icons'
-import type { ToolbarFeatureConfig } from './index'
-import { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'
import { mathInlineSchema } from '../latex/inline-latex'
-import { FeaturesCtx } from '../../core/slice'
-import { CrepeFeature } from '../..'
export interface ToolbarProps {
ctx: Ctx
diff --git a/packages/crepe/src/feature/toolbar/index.ts b/packages/crepe/src/feature/toolbar/index.ts
index 1e14203f967..b1b5ebd5775 100644
--- a/packages/crepe/src/feature/toolbar/index.ts
+++ b/packages/crepe/src/feature/toolbar/index.ts
@@ -1,12 +1,15 @@
-import { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'
-import type { EditorState, PluginView } from '@milkdown/kit/prose/state'
-import { TextSelection } from '@milkdown/kit/prose/state'
import type { Ctx } from '@milkdown/kit/ctx'
+import type { EditorState, PluginView } from '@milkdown/kit/prose/state'
import type { EditorView } from '@milkdown/kit/prose/view'
import type { AtomicoThis } from 'atomico/types/dom'
+
+import { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'
+import { TextSelection } from '@milkdown/kit/prose/state'
+
import type { DefineFeature, Icon } from '../shared'
-import { defIfNotExists } from '../../utils'
import type { ToolbarProps } from './component'
+
+import { defIfNotExists } from '../../utils'
import { ToolbarElement } from './component'
interface ToolbarConfig {
diff --git a/packages/ctx/src/context/slice.ts b/packages/ctx/src/context/slice.ts
index 238e871f8ad..f272ed953ed 100644
--- a/packages/ctx/src/context/slice.ts
+++ b/packages/ctx/src/context/slice.ts
@@ -1,4 +1,5 @@
import { ctxCallOutOfScope } from '@milkdown/exception'
+
import type { SliceMap } from './container'
/// Slice is a value of slice type.
diff --git a/packages/ctx/src/inspector/inspector.ts b/packages/ctx/src/inspector/inspector.ts
index 7c268d217f2..f0c114d16bd 100644
--- a/packages/ctx/src/inspector/inspector.ts
+++ b/packages/ctx/src/inspector/inspector.ts
@@ -90,9 +90,11 @@ export class Inspector {
/// @internal
readonly onWait = (timerType: TimerType, promise: Promise) => {
const start = Date.now()
- promise.finally(() => {
- this.#waitTimers.set(timerType, { duration: Date.now() - start })
- })
+ promise
+ .finally(() => {
+ this.#waitTimers.set(timerType, { duration: Date.now() - start })
+ })
+ .catch(console.error)
}
/// @internal
diff --git a/packages/ctx/src/plugin/ctx.spec.ts b/packages/ctx/src/plugin/ctx.spec.ts
index 4abc05e09d6..ce3fe33c2ae 100644
--- a/packages/ctx/src/plugin/ctx.spec.ts
+++ b/packages/ctx/src/plugin/ctx.spec.ts
@@ -1,4 +1,5 @@
import { describe, expect, it } from 'vitest'
+
import { Container, createSlice } from '../context'
import { Clock, createTimer } from '../timer'
import { Ctx } from './ctx'
diff --git a/packages/ctx/src/plugin/ctx.ts b/packages/ctx/src/plugin/ctx.ts
index ba0cf1f91d9..2f06faab48d 100644
--- a/packages/ctx/src/plugin/ctx.ts
+++ b/packages/ctx/src/plugin/ctx.ts
@@ -1,7 +1,8 @@
import type { Container, Slice, SliceType } from '../context'
+import type { Meta } from '../inspector'
import type { Clock, TimerType } from '../timer'
+
import { Inspector } from '../inspector'
-import type { Meta } from '../inspector'
/// The ctx object that can be accessed in plugin and action.
export class Ctx {
diff --git a/packages/integrations/react/src/editor.tsx b/packages/integrations/react/src/editor.tsx
index f2e35ede8f6..90207841036 100644
--- a/packages/integrations/react/src/editor.tsx
+++ b/packages/integrations/react/src/editor.tsx
@@ -1,8 +1,10 @@
import type { Editor } from '@milkdown/kit/core'
import type { FC, ReactNode } from 'react'
+
import React, { useMemo, useRef, useState } from 'react'
import type { EditorInfoCtx, GetEditor } from './types'
+
import { editorInfoContext, useGetEditor } from './use-get-editor'
export const Milkdown: FC = () => {
diff --git a/packages/integrations/react/src/use-editor.ts b/packages/integrations/react/src/use-editor.ts
index 3c518f14337..658a21bad84 100644
--- a/packages/integrations/react/src/use-editor.ts
+++ b/packages/integrations/react/src/use-editor.ts
@@ -1,7 +1,9 @@
import type { DependencyList } from 'react'
+
import { useCallback, useContext, useLayoutEffect } from 'react'
import type { GetEditor, UseEditorReturn } from './types'
+
import { editorInfoContext } from './use-get-editor'
export function useEditor(
diff --git a/packages/integrations/react/src/use-get-editor.ts b/packages/integrations/react/src/use-get-editor.ts
index f3e50467c9f..ff13260c1cd 100644
--- a/packages/integrations/react/src/use-get-editor.ts
+++ b/packages/integrations/react/src/use-get-editor.ts
@@ -39,7 +39,7 @@ export function useGetEditor() {
.catch(console.error)
return () => {
- editor.destroy()
+ editor.destroy().catch(console.error)
}
}, [dom, editorRef, getEditor, setLoading])
diff --git a/packages/integrations/react/src/use-instance.ts b/packages/integrations/react/src/use-instance.ts
index 45234b74c09..d044f215df6 100644
--- a/packages/integrations/react/src/use-instance.ts
+++ b/packages/integrations/react/src/use-instance.ts
@@ -1,5 +1,7 @@
import type { Editor } from '@milkdown/kit/core'
+
import { useCallback, useContext } from 'react'
+
import { editorInfoContext } from './use-get-editor'
export type Instance = [true, () => undefined] | [false, () => Editor]
diff --git a/packages/integrations/vue/src/consts.ts b/packages/integrations/vue/src/consts.ts
index b23b5860c03..c258f61d996 100644
--- a/packages/integrations/vue/src/consts.ts
+++ b/packages/integrations/vue/src/consts.ts
@@ -1,4 +1,5 @@
import type { InjectionKey } from 'vue'
+
import type { EditorInfoCtx } from './types'
export const editorInfoCtxKey: InjectionKey =
diff --git a/packages/integrations/vue/src/editor.tsx b/packages/integrations/vue/src/editor.tsx
index 02629b3164e..ba35607d9e4 100644
--- a/packages/integrations/vue/src/editor.tsx
+++ b/packages/integrations/vue/src/editor.tsx
@@ -1,10 +1,12 @@
import type { Editor } from '@milkdown/kit/core'
import type { Ref } from 'vue'
+
import { Fragment, defineComponent, h, provide, ref } from 'vue'
import type { GetEditor } from './types'
-import { useGetEditor } from './use-get-editor'
+
import { editorInfoCtxKey } from './consts'
+import { useGetEditor } from './use-get-editor'
h
Fragment
diff --git a/packages/integrations/vue/src/use-editor.ts b/packages/integrations/vue/src/use-editor.ts
index a93470d96bc..140f78904f7 100644
--- a/packages/integrations/vue/src/use-editor.ts
+++ b/packages/integrations/vue/src/use-editor.ts
@@ -1,8 +1,9 @@
import { inject } from 'vue'
-import { editorInfoCtxKey } from './consts'
import type { GetEditor, UseEditorReturn } from './types'
+import { editorInfoCtxKey } from './consts'
+
export function useEditor(getEditor: GetEditor): UseEditorReturn {
const { editorFactory, loading, editor } = inject(editorInfoCtxKey)!
diff --git a/packages/integrations/vue/src/use-get-editor.ts b/packages/integrations/vue/src/use-get-editor.ts
index 639c5280246..15ed04a9a1d 100644
--- a/packages/integrations/vue/src/use-get-editor.ts
+++ b/packages/integrations/vue/src/use-get-editor.ts
@@ -1,9 +1,11 @@
+import type { Crepe } from '@milkdown/crepe'
+import type { Editor } from '@milkdown/kit/core'
+
import { inject, onMounted, onUnmounted, ref } from 'vue'
import type { EditorInfoCtx } from './types'
+
import { editorInfoCtxKey } from './consts'
-import type { Crepe } from '@milkdown/crepe'
-import type { Editor } from '@milkdown/kit/core'
export function useGetEditor() {
const {
@@ -33,7 +35,7 @@ export function useGetEditor() {
.catch(console.error)
})
onUnmounted(() => {
- currentEditorRef.value?.destroy()
+ currentEditorRef.value?.destroy().catch(console.error)
})
return dom
diff --git a/packages/integrations/vue/src/use-instance.ts b/packages/integrations/vue/src/use-instance.ts
index 232e2fe124f..2aacb0bc03f 100644
--- a/packages/integrations/vue/src/use-instance.ts
+++ b/packages/integrations/vue/src/use-instance.ts
@@ -1,6 +1,8 @@
import type { Editor } from '@milkdown/kit/core'
import type { Ref } from 'vue'
+
import { inject } from 'vue'
+
import { editorInfoCtxKey } from './consts'
export type Instance = [Ref, () => undefined] | [Ref, () => Editor]
diff --git a/packages/plugins/plugin-automd/src/config.ts b/packages/plugins/plugin-automd/src/config.ts
index bb38e35ad43..e341ad4cb18 100644
--- a/packages/plugins/plugin-automd/src/config.ts
+++ b/packages/plugins/plugin-automd/src/config.ts
@@ -1,6 +1,7 @@
import type { Ctx } from '@milkdown/ctx'
import type { Node, NodeType } from '@milkdown/prose/model'
import type { Transaction } from '@milkdown/prose/state'
+
import { $ctx } from '@milkdown/utils'
import { withMeta } from './__internal__'
diff --git a/packages/plugins/plugin-automd/src/context.ts b/packages/plugins/plugin-automd/src/context.ts
index 84809347c0e..7939a3b4d1a 100644
--- a/packages/plugins/plugin-automd/src/context.ts
+++ b/packages/plugins/plugin-automd/src/context.ts
@@ -1,17 +1,18 @@
import type { Ctx } from '@milkdown/ctx'
-import { parserCtx, serializerCtx } from '@milkdown/core'
import type { Node } from '@milkdown/prose/model'
import type { EditorState } from '@milkdown/prose/state'
+
+import { parserCtx, serializerCtx } from '@milkdown/core'
import { pipe } from '@milkdown/utils'
import { inlineSyncConfig } from './config'
+import { asterisk, asteriskHolder, underline, underlineHolder } from './regexp'
import {
calculatePlaceholder,
keepLink,
mergeSlash,
replacePunctuation,
} from './utils'
-import { asterisk, asteriskHolder, underline, underlineHolder } from './regexp'
export interface InlineSyncContext {
text: string
diff --git a/packages/plugins/plugin-automd/src/index.ts b/packages/plugins/plugin-automd/src/index.ts
index feeb8d40ccc..90e073b0ff8 100644
--- a/packages/plugins/plugin-automd/src/index.ts
+++ b/packages/plugins/plugin-automd/src/index.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { inlineSyncConfig } from './config'
import { inlineSyncPlugin } from './inline-sync-plugin'
diff --git a/packages/plugins/plugin-automd/src/inline-sync-plugin.ts b/packages/plugins/plugin-automd/src/inline-sync-plugin.ts
index 9502ec19c89..c7a4e4493cd 100644
--- a/packages/plugins/plugin-automd/src/inline-sync-plugin.ts
+++ b/packages/plugins/plugin-automd/src/inline-sync-plugin.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx } from '@milkdown/core'
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $prose } from '@milkdown/utils'
diff --git a/packages/plugins/plugin-automd/src/replacer.ts b/packages/plugins/plugin-automd/src/replacer.ts
index 140d07dc326..7ce0d0f50db 100644
--- a/packages/plugins/plugin-automd/src/replacer.ts
+++ b/packages/plugins/plugin-automd/src/replacer.ts
@@ -1,12 +1,13 @@
import type { Ctx } from '@milkdown/ctx'
import type { Attrs } from '@milkdown/prose/model'
import type { EditorState, PluginKey, Transaction } from '@milkdown/prose/state'
+
import { TextSelection } from '@milkdown/prose/state'
import { inlineSyncConfig } from './config'
import { getContextByState } from './context'
-import { calcOffset } from './utils'
import { linkRegexp } from './regexp'
+import { calcOffset } from './utils'
export function runReplacer(
ctx: Ctx,
diff --git a/packages/plugins/plugin-automd/src/utils.ts b/packages/plugins/plugin-automd/src/utils.ts
index 4a3dab91419..2566311993d 100644
--- a/packages/plugins/plugin-automd/src/utils.ts
+++ b/packages/plugins/plugin-automd/src/utils.ts
@@ -1,6 +1,7 @@
import type { Node } from '@milkdown/prose/model'
import type { SyncNodePlaceholder } from './config'
+
import {
asterisk,
asteriskHolder,
diff --git a/packages/plugins/plugin-block/src/__internal__/serialize-for-clipboard.ts b/packages/plugins/plugin-block/src/__internal__/serialize-for-clipboard.ts
index 26a1efc677d..8bf3f9c918e 100644
--- a/packages/plugins/plugin-block/src/__internal__/serialize-for-clipboard.ts
+++ b/packages/plugins/plugin-block/src/__internal__/serialize-for-clipboard.ts
@@ -3,9 +3,10 @@
*/
import type { NodeType, Slice } from '@milkdown/prose/model'
-import { DOMSerializer } from '@milkdown/prose/model'
import type { EditorView } from '@milkdown/prose/view'
+import { DOMSerializer } from '@milkdown/prose/model'
+
let _detachedDoc: Document | null = null
function detachedDoc() {
return (
diff --git a/packages/plugins/plugin-block/src/block-config.ts b/packages/plugins/plugin-block/src/block-config.ts
index eaf3dc5b3c8..675027f5450 100644
--- a/packages/plugins/plugin-block/src/block-config.ts
+++ b/packages/plugins/plugin-block/src/block-config.ts
@@ -1,7 +1,8 @@
import type { Node, ResolvedPos } from '@milkdown/prose/model'
-import { $ctx } from '@milkdown/utils'
import { findParent } from '@milkdown/prose'
+import { $ctx } from '@milkdown/utils'
+
import { withMeta } from './__internal__/with-meta'
/// @internal
diff --git a/packages/plugins/plugin-block/src/block-plugin.ts b/packages/plugins/plugin-block/src/block-plugin.ts
index fd7a5e29001..1048e7a98a9 100644
--- a/packages/plugins/plugin-block/src/block-plugin.ts
+++ b/packages/plugins/plugin-block/src/block-plugin.ts
@@ -1,9 +1,10 @@
import type { PluginSpec } from '@milkdown/prose/state'
+
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $ctx, $prose } from '@milkdown/utils'
-import { BlockService } from './block-service'
import { withMeta } from './__internal__/with-meta'
+import { BlockService } from './block-service'
/// @internal
export const blockService = $ctx(() => new BlockService(), 'blockService')
diff --git a/packages/plugins/plugin-block/src/block-provider.ts b/packages/plugins/plugin-block/src/block-provider.ts
index 9f1c47d39b0..b51e9c0a894 100644
--- a/packages/plugins/plugin-block/src/block-provider.ts
+++ b/packages/plugins/plugin-block/src/block-provider.ts
@@ -1,20 +1,21 @@
-import type { Ctx } from '@milkdown/ctx'
-import type { EditorState } from '@milkdown/prose/state'
-import type { EditorView } from '@milkdown/prose/view'
-
import type {
ComputePositionConfig,
Middleware,
Placement,
VirtualElement,
} from '@floating-ui/dom'
-import { computePosition, flip, offset } from '@floating-ui/dom'
+import type { Ctx } from '@milkdown/ctx'
+import type { EditorState } from '@milkdown/prose/state'
+import type { EditorView } from '@milkdown/prose/view'
+import { computePosition, flip, offset } from '@floating-ui/dom'
import { editorViewCtx } from '@milkdown/core'
+
import type { BlockService } from './block-service'
-import { blockServiceInstance } from './block-plugin'
import type { ActiveNode } from './types'
+import { blockServiceInstance } from './block-plugin'
+
/// The context of the block provider.
export interface DeriveContext {
ctx: Ctx
@@ -185,13 +186,15 @@ export class BlockProvider {
: 'left',
middleware: [...middleware, ...this.#middleware],
...this.#floatingUIOptions,
- }).then(({ x, y }) => {
- Object.assign(this.#element.style, {
- left: `${x}px`,
- top: `${y}px`,
- })
- this.#element.dataset.show = 'true'
})
+ .then(({ x, y }) => {
+ Object.assign(this.#element.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ this.#element.dataset.show = 'true'
+ })
+ .catch(console.error)
}
/// Hide the block.
diff --git a/packages/plugins/plugin-block/src/block-service.ts b/packages/plugins/plugin-block/src/block-service.ts
index 0fc7e397d2a..59e676e53cd 100644
--- a/packages/plugins/plugin-block/src/block-service.ts
+++ b/packages/plugins/plugin-block/src/block-service.ts
@@ -1,16 +1,18 @@
import type { Ctx } from '@milkdown/ctx'
+import type { Selection } from '@milkdown/prose/state'
+import type { EditorView } from '@milkdown/prose/view'
+
import { editorViewCtx } from '@milkdown/core'
import { browser } from '@milkdown/prose'
-import type { Selection } from '@milkdown/prose/state'
import { NodeSelection } from '@milkdown/prose/state'
-import type { EditorView } from '@milkdown/prose/view'
import throttle from 'lodash.throttle'
import type { FilterNodes } from './block-config'
-import { blockConfig } from './block-config'
+import type { ActiveNode } from './types'
+
import { selectRootNodeByDom } from './__internal__/select-node-by-dom'
import { serializeForClipboard } from './__internal__/serialize-for-clipboard'
-import type { ActiveNode } from './types'
+import { blockConfig } from './block-config'
const brokenClipboardAPI =
(browser.ie && browser.ie_version < 15) ||
diff --git a/packages/plugins/plugin-block/src/index.ts b/packages/plugins/plugin-block/src/index.ts
index 32dd648812c..5d4309863b3 100644
--- a/packages/plugins/plugin-block/src/index.ts
+++ b/packages/plugins/plugin-block/src/index.ts
@@ -1,7 +1,10 @@
import type { SliceType } from '@milkdown/ctx'
import type { PluginSpec } from '@milkdown/prose/state'
import type { $Ctx, $Prose } from '@milkdown/utils'
+
import type { FilterNodes } from './block-config'
+import type { BlockService } from './block-service'
+
import { blockConfig } from './block-config'
import {
blockPlugin,
@@ -9,7 +12,6 @@ import {
blockServiceInstance,
blockSpec,
} from './block-plugin'
-import type { BlockService } from './block-service'
export * from './block-plugin'
export * from './block-provider'
diff --git a/packages/plugins/plugin-clipboard/src/index.ts b/packages/plugins/plugin-clipboard/src/index.ts
index 73718018d17..9bbabd76b53 100644
--- a/packages/plugins/plugin-clipboard/src/index.ts
+++ b/packages/plugins/plugin-clipboard/src/index.ts
@@ -1,3 +1,5 @@
+import type { Node, Slice } from '@milkdown/prose/model'
+
import {
editorViewOptionsCtx,
parserCtx,
@@ -5,7 +7,6 @@ import {
serializerCtx,
} from '@milkdown/core'
import { getNodeFromSchema } from '@milkdown/prose'
-import type { Node, Slice } from '@milkdown/prose/model'
import { DOMParser, DOMSerializer } from '@milkdown/prose/model'
import { Plugin, PluginKey, TextSelection } from '@milkdown/prose/state'
import { $prose } from '@milkdown/utils'
diff --git a/packages/plugins/plugin-collab/src/collab-service.ts b/packages/plugins/plugin-collab/src/collab-service.ts
index f1263bfec4e..25c8c10e90b 100644
--- a/packages/plugins/plugin-collab/src/collab-service.ts
+++ b/packages/plugins/plugin-collab/src/collab-service.ts
@@ -1,5 +1,10 @@
-import type { Ctx } from '@milkdown/ctx'
import type { DefaultValue } from '@milkdown/core'
+import type { Ctx } from '@milkdown/ctx'
+import type { Node } from '@milkdown/prose/model'
+import type { DecorationAttrs } from '@milkdown/prose/view'
+import type { Awareness } from 'y-protocols/awareness'
+import type { Doc, PermanentUserData, XmlFragment } from 'yjs'
+
import {
editorViewCtx,
getDoc,
@@ -9,9 +14,7 @@ import {
} from '@milkdown/core'
import { ctxNotBind, missingYjsDoc } from '@milkdown/exception'
import { keydownHandler } from '@milkdown/prose/keymap'
-import type { Node } from '@milkdown/prose/model'
import { Plugin, PluginKey } from '@milkdown/prose/state'
-import type { DecorationAttrs } from '@milkdown/prose/view'
import {
prosemirrorToYDoc,
redo,
@@ -24,8 +27,6 @@ import {
yUndoPlugin,
yUndoPluginKey,
} from 'y-prosemirror'
-import type { Awareness } from 'y-protocols/awareness'
-import type { Doc, PermanentUserData, XmlFragment } from 'yjs'
import { applyUpdate, encodeStateAsUpdate } from 'yjs'
/// @internal
diff --git a/packages/plugins/plugin-collab/src/index.ts b/packages/plugins/plugin-collab/src/index.ts
index 2f3a6a33af8..2c5d52c476d 100644
--- a/packages/plugins/plugin-collab/src/index.ts
+++ b/packages/plugins/plugin-collab/src/index.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { createSlice, createTimer } from '@milkdown/ctx'
+
import { EditorViewReady } from '@milkdown/core'
+import { createSlice, createTimer } from '@milkdown/ctx'
import { CollabService } from './collab-service'
diff --git a/packages/plugins/plugin-collab/src/shim.d.ts b/packages/plugins/plugin-collab/src/shim.d.ts
index 790192dde7f..8cb149beeb4 100644
--- a/packages/plugins/plugin-collab/src/shim.d.ts
+++ b/packages/plugins/plugin-collab/src/shim.d.ts
@@ -1,9 +1,9 @@
declare module 'y-prosemirror' {
- import type { Plugin, PluginKey } from '@milkdown/prose/state'
import type { Node, Schema } from '@milkdown/prose/model'
+ import type { Plugin, PluginKey } from '@milkdown/prose/state'
import type { DecorationAttrs } from '@milkdown/prose/view'
- import type * as Y from 'yjs'
import type { Awareness } from 'y-protocols/awareness'
+ import type * as Y from 'yjs'
interface ColorDef {
light: string
diff --git a/packages/plugins/plugin-cursor/src/index.ts b/packages/plugins/plugin-cursor/src/index.ts
index b1ef4f99e98..46fd32b7e42 100644
--- a/packages/plugins/plugin-cursor/src/index.ts
+++ b/packages/plugins/plugin-cursor/src/index.ts
@@ -1,4 +1,5 @@
import type { Meta, MilkdownPlugin } from '@milkdown/ctx'
+
import { dropCursor } from '@milkdown/prose/dropcursor'
import { gapCursor } from '@milkdown/prose/gapcursor'
import { $ctx, $prose } from '@milkdown/utils'
diff --git a/packages/plugins/plugin-emoji/src/__internal__/remark-twemoji.ts b/packages/plugins/plugin-emoji/src/__internal__/remark-twemoji.ts
index 1f1032cc26a..6e3e6ee17e5 100644
--- a/packages/plugins/plugin-emoji/src/__internal__/remark-twemoji.ts
+++ b/packages/plugins/plugin-emoji/src/__internal__/remark-twemoji.ts
@@ -1,4 +1,5 @@
import type { Node, RemarkPluginRaw } from '@milkdown/transformer'
+
import emojiRegex from 'emoji-regex'
import { type TwemojiOptions, parse } from './parse'
diff --git a/packages/plugins/plugin-emoji/src/index.ts b/packages/plugins/plugin-emoji/src/index.ts
index 2a2dd7e9e4d..c89d2961f88 100644
--- a/packages/plugins/plugin-emoji/src/index.ts
+++ b/packages/plugins/plugin-emoji/src/index.ts
@@ -1,10 +1,11 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
import type { RemarkPluginRaw } from '@milkdown/transformer'
+import type { RemarkEmojiOptions } from 'remark-emoji'
+
import { expectDomTypeError } from '@milkdown/exception'
import { InputRule } from '@milkdown/prose/inputrules'
import { $inputRule, $nodeAttr, $nodeSchema, $remark } from '@milkdown/utils'
import { get } from 'node-emoji'
-import type { RemarkEmojiOptions } from 'remark-emoji'
import remarkEmoji from 'remark-emoji'
import { parse } from './__internal__/parse'
diff --git a/packages/plugins/plugin-history/src/index.ts b/packages/plugins/plugin-history/src/index.ts
index e29b26e3b8f..beca1a592fe 100644
--- a/packages/plugins/plugin-history/src/index.ts
+++ b/packages/plugins/plugin-history/src/index.ts
@@ -1,4 +1,5 @@
import type { Meta, MilkdownPlugin } from '@milkdown/ctx'
+
import { commandsCtx } from '@milkdown/core'
import {
history as prosemirrorHistory,
diff --git a/packages/plugins/plugin-indent/src/index.ts b/packages/plugins/plugin-indent/src/index.ts
index 784cf3d3474..d0a57b24a9f 100644
--- a/packages/plugins/plugin-indent/src/index.ts
+++ b/packages/plugins/plugin-indent/src/index.ts
@@ -1,5 +1,6 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
import type { Transaction } from '@milkdown/prose/state'
+
import { AllSelection, TextSelection } from '@milkdown/prose/state'
import { $ctx, $shortcut } from '@milkdown/utils'
diff --git a/packages/plugins/plugin-listener/src/index.ts b/packages/plugins/plugin-listener/src/index.ts
index 085828a1c10..a6aa07d8553 100644
--- a/packages/plugins/plugin-listener/src/index.ts
+++ b/packages/plugins/plugin-listener/src/index.ts
@@ -1,5 +1,6 @@
-import { createSlice } from '@milkdown/ctx'
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { Node as ProseNode } from '@milkdown/prose/model'
+
import {
EditorViewReady,
InitReady,
@@ -7,7 +8,7 @@ import {
prosePluginsCtx,
serializerCtx,
} from '@milkdown/core'
-import type { Node as ProseNode } from '@milkdown/prose/model'
+import { createSlice } from '@milkdown/ctx'
import { Plugin, PluginKey } from '@milkdown/prose/state'
import debounce from 'lodash.debounce'
diff --git a/packages/plugins/plugin-prism/src/get-decorations.ts b/packages/plugins/plugin-prism/src/get-decorations.ts
index 5efcbade90b..fcd8a897680 100644
--- a/packages/plugins/plugin-prism/src/get-decorations.ts
+++ b/packages/plugins/plugin-prism/src/get-decorations.ts
@@ -1,8 +1,9 @@
-import { findChildren } from '@milkdown/prose'
import type { Node } from '@milkdown/prose/model'
-import { Decoration, DecorationSet } from '@milkdown/prose/view'
-import type { Refractor } from 'refractor/core'
import type { RootContent, Text } from 'hast'
+import type { Refractor } from 'refractor/core'
+
+import { findChildren } from '@milkdown/prose'
+import { Decoration, DecorationSet } from '@milkdown/prose/view'
export interface FlattedNode {
text: string
@@ -29,7 +30,6 @@ export function getDecorations(doc: Node, name: string, refractor: Refractor) {
let from = block.pos + 1
const { language } = block.node.attrs
if (!language || !allLanguages.includes(language)) {
- // eslint-disable-next-line no-console
console.warn(
'Unsupported language detected, this language has not been supported by current prism config: ',
language
diff --git a/packages/plugins/plugin-prism/src/index.ts b/packages/plugins/plugin-prism/src/index.ts
index 928d82846c4..fc82761b7c2 100644
--- a/packages/plugins/plugin-prism/src/index.ts
+++ b/packages/plugins/plugin-prism/src/index.ts
@@ -1,11 +1,11 @@
+import type { MilkdownPlugin } from '@milkdown/ctx'
import type { Refractor } from 'refractor/core'
import { findChildren } from '@milkdown/prose'
import { Plugin, PluginKey } from '@milkdown/prose/state'
+import { $ctx, $prose } from '@milkdown/utils'
import { refractor } from 'refractor'
-import { $ctx, $prose } from '@milkdown/utils'
-import type { MilkdownPlugin } from '@milkdown/ctx'
import { getDecorations } from './get-decorations'
/// @internal
diff --git a/packages/plugins/plugin-slash/src/slash-plugin.ts b/packages/plugins/plugin-slash/src/slash-plugin.ts
index c82b4fc9a45..14c3fb4dd26 100644
--- a/packages/plugins/plugin-slash/src/slash-plugin.ts
+++ b/packages/plugins/plugin-slash/src/slash-plugin.ts
@@ -1,7 +1,8 @@
import type { SliceType } from '@milkdown/ctx'
import type { PluginSpec } from '@milkdown/prose/state'
-import { Plugin, PluginKey } from '@milkdown/prose/state'
import type { $Ctx, $Prose } from '@milkdown/utils'
+
+import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $ctx, $prose } from '@milkdown/utils'
/// @internal
diff --git a/packages/plugins/plugin-slash/src/slash-provider.ts b/packages/plugins/plugin-slash/src/slash-provider.ts
index 92c40e4b4c5..ca725dedfae 100644
--- a/packages/plugins/plugin-slash/src/slash-provider.ts
+++ b/packages/plugins/plugin-slash/src/slash-provider.ts
@@ -1,15 +1,16 @@
-import { findParentNode, posToDOMRect } from '@milkdown/prose'
-import type { EditorState } from '@milkdown/prose/state'
-import type { Node } from '@milkdown/prose/model'
-import { TextSelection } from '@milkdown/prose/state'
-import type { EditorView } from '@milkdown/prose/view'
-import debounce from 'lodash.debounce'
import type {
ComputePositionConfig,
Middleware,
VirtualElement,
} from '@floating-ui/dom'
+import type { Node } from '@milkdown/prose/model'
+import type { EditorState } from '@milkdown/prose/state'
+import type { EditorView } from '@milkdown/prose/view'
+
import { computePosition, flip, offset } from '@floating-ui/dom'
+import { findParentNode, posToDOMRect } from '@milkdown/prose'
+import { TextSelection } from '@milkdown/prose/state'
+import debounce from 'lodash.debounce'
/// Options for slash provider.
export interface SlashProviderOptions {
@@ -119,12 +120,14 @@ export class SlashProvider {
placement: 'bottom-start',
middleware: [flip(), offset(this.#offset), ...this.#middleware],
...this.#floatingUIOptions,
- }).then(({ x, y }) => {
- Object.assign(this.element.style, {
- left: `${x}px`,
- top: `${y}px`,
- })
})
+ .then(({ x, y }) => {
+ Object.assign(this.element.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
this.show()
}
diff --git a/packages/plugins/plugin-tooltip/src/tooltip-plugin.ts b/packages/plugins/plugin-tooltip/src/tooltip-plugin.ts
index 53857a5ec5f..0577c9bcb79 100644
--- a/packages/plugins/plugin-tooltip/src/tooltip-plugin.ts
+++ b/packages/plugins/plugin-tooltip/src/tooltip-plugin.ts
@@ -1,7 +1,8 @@
import type { SliceType } from '@milkdown/ctx'
import type { PluginSpec } from '@milkdown/prose/state'
-import { Plugin, PluginKey } from '@milkdown/prose/state'
import type { $Ctx, $Prose } from '@milkdown/utils'
+
+import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $ctx, $prose } from '@milkdown/utils'
/// @internal
diff --git a/packages/plugins/plugin-tooltip/src/tooltip-provider.ts b/packages/plugins/plugin-tooltip/src/tooltip-provider.ts
index 1bfac4b712d..6f3df6d462a 100644
--- a/packages/plugins/plugin-tooltip/src/tooltip-provider.ts
+++ b/packages/plugins/plugin-tooltip/src/tooltip-provider.ts
@@ -1,14 +1,15 @@
-import type { EditorState } from '@milkdown/prose/state'
-import { TextSelection } from '@milkdown/prose/state'
-import type { EditorView } from '@milkdown/prose/view'
-import throttle from 'lodash.throttle'
import type {
ComputePositionConfig,
Middleware,
VirtualElement,
} from '@floating-ui/dom'
+import type { EditorState } from '@milkdown/prose/state'
+import type { EditorView } from '@milkdown/prose/view'
+
import { computePosition, flip, offset, shift } from '@floating-ui/dom'
import { posToDOMRect } from '@milkdown/prose'
+import { TextSelection } from '@milkdown/prose/state'
+import throttle from 'lodash.throttle'
/// Options for tooltip provider.
export interface TooltipProviderOptions {
@@ -112,12 +113,14 @@ export class TooltipProvider {
computePosition(virtualEl, this.element, {
placement: this.#floatingUIOptions.placement ?? 'top',
middleware: [flip(), offset(this.#offset), shift(), ...this.#middleware],
- }).then(({ x, y }) => {
- Object.assign(this.element.style, {
- left: `${x}px`,
- top: `${y}px`,
- })
})
+ .then(({ x, y }) => {
+ Object.assign(this.element.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
this.show()
}
@@ -161,12 +164,14 @@ export class TooltipProvider {
placement: 'top',
middleware: [flip(), offset(this.#offset)],
...this.#floatingUIOptions,
- }).then(({ x, y }) => {
- Object.assign(this.element.style, {
- left: `${x}px`,
- top: `${y}px`,
- })
})
+ .then(({ x, y }) => {
+ Object.assign(this.element.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ })
+ })
+ .catch(console.error)
}
this.onShow()
diff --git a/packages/plugins/plugin-trailing/src/index.ts b/packages/plugins/plugin-trailing/src/index.ts
index 6821cfcac87..cc9473ae70d 100644
--- a/packages/plugins/plugin-trailing/src/index.ts
+++ b/packages/plugins/plugin-trailing/src/index.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
import type { Node } from '@milkdown/prose/model'
import type { EditorState } from '@milkdown/prose/state'
+
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $ctx, $prose } from '@milkdown/utils'
diff --git a/packages/plugins/plugin-upload/src/default-uploader.ts b/packages/plugins/plugin-upload/src/default-uploader.ts
index f4ef77a6bc6..cd1b6f7db60 100644
--- a/packages/plugins/plugin-upload/src/default-uploader.ts
+++ b/packages/plugins/plugin-upload/src/default-uploader.ts
@@ -1,6 +1,7 @@
-import { missingNodeInSchema } from '@milkdown/exception'
import type { Node } from '@milkdown/prose/model'
+import { missingNodeInSchema } from '@milkdown/exception'
+
import type { Uploader } from './upload'
/// Read the image file as base64.
diff --git a/packages/plugins/plugin-upload/src/index.ts b/packages/plugins/plugin-upload/src/index.ts
index e742a7ea44b..d7b3c848037 100644
--- a/packages/plugins/plugin-upload/src/index.ts
+++ b/packages/plugins/plugin-upload/src/index.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { uploadConfig, uploadPlugin } from './upload'
export * from './upload'
diff --git a/packages/plugins/plugin-upload/src/upload.ts b/packages/plugins/plugin-upload/src/upload.ts
index 876ca314ad6..2af88438200 100644
--- a/packages/plugins/plugin-upload/src/upload.ts
+++ b/packages/plugins/plugin-upload/src/upload.ts
@@ -1,8 +1,9 @@
-import { schemaCtx } from '@milkdown/core'
import type { Fragment, Node, Schema } from '@milkdown/prose/model'
import type { EditorState } from '@milkdown/prose/state'
-import { Plugin, PluginKey } from '@milkdown/prose/state'
import type { EditorView } from '@milkdown/prose/view'
+
+import { schemaCtx } from '@milkdown/core'
+import { Plugin, PluginKey } from '@milkdown/prose/state'
import { Decoration, DecorationSet } from '@milkdown/prose/view'
import { $ctx, $prose } from '@milkdown/utils'
@@ -105,7 +106,6 @@ export const uploadPlugin = $prose((ctx) => {
)
})
.catch((e) => {
- // eslint-disable-next-line no-console
console.error(e)
})
return true
diff --git a/packages/plugins/preset-commonmark/src/__internal__/serialize-text.ts b/packages/plugins/preset-commonmark/src/__internal__/serialize-text.ts
index ccd0bd4eb36..27626359db1 100644
--- a/packages/plugins/preset-commonmark/src/__internal__/serialize-text.ts
+++ b/packages/plugins/preset-commonmark/src/__internal__/serialize-text.ts
@@ -1,5 +1,6 @@
-import type { SerializerState } from '@milkdown/transformer'
import type { Node } from '@milkdown/prose/model'
+import type { SerializerState } from '@milkdown/transformer'
+
import { Fragment } from '@milkdown/prose/model'
export function serializeText(state: SerializerState, node: Node) {
diff --git a/packages/plugins/preset-commonmark/src/composed/commands.ts b/packages/plugins/preset-commonmark/src/composed/commands.ts
index 7da1a22a231..b4cb1df41a2 100644
--- a/packages/plugins/preset-commonmark/src/composed/commands.ts
+++ b/packages/plugins/preset-commonmark/src/composed/commands.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import {
toggleEmphasisCommand,
toggleInlineCodeCommand,
diff --git a/packages/plugins/preset-commonmark/src/composed/inputrules.ts b/packages/plugins/preset-commonmark/src/composed/inputrules.ts
index a1796efe292..7d8d8fc041c 100644
--- a/packages/plugins/preset-commonmark/src/composed/inputrules.ts
+++ b/packages/plugins/preset-commonmark/src/composed/inputrules.ts
@@ -1,4 +1,11 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
+import {
+ emphasisStarInputRule,
+ emphasisUnderscoreInputRule,
+ inlineCodeInputRule,
+ strongInputRule,
+} from '../mark'
import {
createCodeBlockInputRule,
insertHrInputRule,
@@ -7,12 +14,6 @@ import {
wrapInHeadingInputRule,
wrapInOrderedListInputRule,
} from '../node'
-import {
- emphasisStarInputRule,
- emphasisUnderscoreInputRule,
- inlineCodeInputRule,
- strongInputRule,
-} from '../mark'
/// @internal
export const inputRules: MilkdownPlugin[] = [
diff --git a/packages/plugins/preset-commonmark/src/composed/keymap.ts b/packages/plugins/preset-commonmark/src/composed/keymap.ts
index 4698ccd1653..3506ba17457 100644
--- a/packages/plugins/preset-commonmark/src/composed/keymap.ts
+++ b/packages/plugins/preset-commonmark/src/composed/keymap.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { emphasisKeymap, inlineCodeKeymap, strongKeymap } from '../mark'
import {
blockquoteKeymap,
diff --git a/packages/plugins/preset-commonmark/src/composed/plugins.ts b/packages/plugins/preset-commonmark/src/composed/plugins.ts
index 2b07f3d46fa..d1c29721312 100644
--- a/packages/plugins/preset-commonmark/src/composed/plugins.ts
+++ b/packages/plugins/preset-commonmark/src/composed/plugins.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import {
hardbreakClearMarkPlugin,
hardbreakFilterNodes,
diff --git a/packages/plugins/preset-commonmark/src/composed/schema.ts b/packages/plugins/preset-commonmark/src/composed/schema.ts
index 529e0f63cbc..cabe3e44945 100644
--- a/packages/plugins/preset-commonmark/src/composed/schema.ts
+++ b/packages/plugins/preset-commonmark/src/composed/schema.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import {
emphasisAttr,
emphasisSchema,
diff --git a/packages/plugins/preset-commonmark/src/index.ts b/packages/plugins/preset-commonmark/src/index.ts
index 7f2d66fb820..5614988581a 100644
--- a/packages/plugins/preset-commonmark/src/index.ts
+++ b/packages/plugins/preset-commonmark/src/index.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import {
commands,
inputRules,
diff --git a/packages/plugins/preset-commonmark/src/mark/emphasis.ts b/packages/plugins/preset-commonmark/src/mark/emphasis.ts
index cc5b1a168bc..61cea79c324 100644
--- a/packages/plugins/preset-commonmark/src/mark/emphasis.ts
+++ b/packages/plugins/preset-commonmark/src/mark/emphasis.ts
@@ -1,4 +1,6 @@
import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'
+import { markRule } from '@milkdown/prose'
+import { toggleMark } from '@milkdown/prose/commands'
import {
$command,
$inputRule,
@@ -6,8 +8,7 @@ import {
$markSchema,
$useKeymap,
} from '@milkdown/utils'
-import { toggleMark } from '@milkdown/prose/commands'
-import { markRule } from '@milkdown/prose'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the emphasis mark.
diff --git a/packages/plugins/preset-commonmark/src/mark/inline-code.ts b/packages/plugins/preset-commonmark/src/mark/inline-code.ts
index b532923869a..452ba76bc06 100644
--- a/packages/plugins/preset-commonmark/src/mark/inline-code.ts
+++ b/packages/plugins/preset-commonmark/src/mark/inline-code.ts
@@ -1,5 +1,7 @@
-import { commandsCtx } from '@milkdown/core'
import type { MarkType } from '@milkdown/prose/model'
+
+import { commandsCtx } from '@milkdown/core'
+import { markRule } from '@milkdown/prose'
import {
$command,
$inputRule,
@@ -7,7 +9,7 @@ import {
$markSchema,
$useKeymap,
} from '@milkdown/utils'
-import { markRule } from '@milkdown/prose'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the inlineCode mark.
diff --git a/packages/plugins/preset-commonmark/src/mark/link.ts b/packages/plugins/preset-commonmark/src/mark/link.ts
index f45ec0399bc..09e608d2bc4 100644
--- a/packages/plugins/preset-commonmark/src/mark/link.ts
+++ b/packages/plugins/preset-commonmark/src/mark/link.ts
@@ -1,8 +1,10 @@
+import type { Node as ProseNode } from '@milkdown/prose/model'
+
import { expectDomTypeError } from '@milkdown/exception'
import { toggleMark } from '@milkdown/prose/commands'
-import type { Node as ProseNode } from '@milkdown/prose/model'
import { TextSelection } from '@milkdown/prose/state'
import { $command, $markAttr, $markSchema } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the link mark.
diff --git a/packages/plugins/preset-commonmark/src/mark/strong.ts b/packages/plugins/preset-commonmark/src/mark/strong.ts
index ac002f4fce3..670322b918f 100644
--- a/packages/plugins/preset-commonmark/src/mark/strong.ts
+++ b/packages/plugins/preset-commonmark/src/mark/strong.ts
@@ -1,4 +1,6 @@
import { commandsCtx, remarkStringifyOptionsCtx } from '@milkdown/core'
+import { markRule } from '@milkdown/prose'
+import { toggleMark } from '@milkdown/prose/commands'
import {
$command,
$inputRule,
@@ -6,8 +8,7 @@ import {
$markSchema,
$useKeymap,
} from '@milkdown/utils'
-import { toggleMark } from '@milkdown/prose/commands'
-import { markRule } from '@milkdown/prose'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the strong mark.
diff --git a/packages/plugins/preset-commonmark/src/node/blockquote.ts b/packages/plugins/preset-commonmark/src/node/blockquote.ts
index 7e22f9e1557..c1a54dbab52 100644
--- a/packages/plugins/preset-commonmark/src/node/blockquote.ts
+++ b/packages/plugins/preset-commonmark/src/node/blockquote.ts
@@ -1,7 +1,8 @@
+import type { $NodeSchema } from '@milkdown/utils'
+
import { commandsCtx } from '@milkdown/core'
import { wrapIn } from '@milkdown/prose/commands'
import { wrappingInputRule } from '@milkdown/prose/inputrules'
-import type { $NodeSchema } from '@milkdown/utils'
import {
$command,
$inputRule,
@@ -9,6 +10,7 @@ import {
$nodeSchema,
$useKeymap,
} from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for blockquote node.
diff --git a/packages/plugins/preset-commonmark/src/node/bullet-list.ts b/packages/plugins/preset-commonmark/src/node/bullet-list.ts
index 2b51e85c51d..d9ea4a9dd57 100644
--- a/packages/plugins/preset-commonmark/src/node/bullet-list.ts
+++ b/packages/plugins/preset-commonmark/src/node/bullet-list.ts
@@ -9,6 +9,7 @@ import {
$nodeSchema,
$useKeymap,
} from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for bullet list node.
diff --git a/packages/plugins/preset-commonmark/src/node/code-block.ts b/packages/plugins/preset-commonmark/src/node/code-block.ts
index 9e12ce48ae9..64eebbb7685 100644
--- a/packages/plugins/preset-commonmark/src/node/code-block.ts
+++ b/packages/plugins/preset-commonmark/src/node/code-block.ts
@@ -9,6 +9,7 @@ import {
$nodeSchema,
$useKeymap,
} from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for code block node.
diff --git a/packages/plugins/preset-commonmark/src/node/doc.ts b/packages/plugins/preset-commonmark/src/node/doc.ts
index 01429c0ce78..4304f6ffc37 100644
--- a/packages/plugins/preset-commonmark/src/node/doc.ts
+++ b/packages/plugins/preset-commonmark/src/node/doc.ts
@@ -1,4 +1,5 @@
import { $node } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// The top-level document node.
diff --git a/packages/plugins/preset-commonmark/src/node/hardbreak.ts b/packages/plugins/preset-commonmark/src/node/hardbreak.ts
index 7a3a1dafcff..e59feae0b04 100644
--- a/packages/plugins/preset-commonmark/src/node/hardbreak.ts
+++ b/packages/plugins/preset-commonmark/src/node/hardbreak.ts
@@ -1,6 +1,7 @@
import { commandsCtx } from '@milkdown/core'
import { Selection, TextSelection } from '@milkdown/prose/state'
import { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the hardbreak node.
diff --git a/packages/plugins/preset-commonmark/src/node/heading.ts b/packages/plugins/preset-commonmark/src/node/heading.ts
index 07b44276d95..bc6d8308b90 100644
--- a/packages/plugins/preset-commonmark/src/node/heading.ts
+++ b/packages/plugins/preset-commonmark/src/node/heading.ts
@@ -1,8 +1,9 @@
+import type { Node } from '@milkdown/prose/model'
+
import { commandsCtx, editorViewCtx } from '@milkdown/core'
import { expectDomTypeError } from '@milkdown/exception'
import { setBlockType } from '@milkdown/prose/commands'
import { textblockTypeInputRule } from '@milkdown/prose/inputrules'
-import type { Node } from '@milkdown/prose/model'
import {
$command,
$ctx,
@@ -11,6 +12,7 @@ import {
$nodeSchema,
$useKeymap,
} from '@milkdown/utils'
+
import { serializeText, withMeta } from '../__internal__'
import { paragraphSchema } from './paragraph'
diff --git a/packages/plugins/preset-commonmark/src/node/hr.ts b/packages/plugins/preset-commonmark/src/node/hr.ts
index a9a061cd9bf..27578e0fe66 100644
--- a/packages/plugins/preset-commonmark/src/node/hr.ts
+++ b/packages/plugins/preset-commonmark/src/node/hr.ts
@@ -1,6 +1,7 @@
import { InputRule } from '@milkdown/prose/inputrules'
import { Selection } from '@milkdown/prose/state'
import { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
import { paragraphSchema } from './paragraph'
diff --git a/packages/plugins/preset-commonmark/src/node/html.ts b/packages/plugins/preset-commonmark/src/node/html.ts
index c44987353fd..bd48fbff974 100644
--- a/packages/plugins/preset-commonmark/src/node/html.ts
+++ b/packages/plugins/preset-commonmark/src/node/html.ts
@@ -1,4 +1,5 @@
import { $nodeAttr, $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
export const htmlAttr = $nodeAttr('html')
diff --git a/packages/plugins/preset-commonmark/src/node/image.ts b/packages/plugins/preset-commonmark/src/node/image.ts
index a371642c6f1..1854d19aa5f 100644
--- a/packages/plugins/preset-commonmark/src/node/image.ts
+++ b/packages/plugins/preset-commonmark/src/node/image.ts
@@ -2,6 +2,7 @@ import { expectDomTypeError } from '@milkdown/exception'
import { findSelectedNodeOfType } from '@milkdown/prose'
import { InputRule } from '@milkdown/prose/inputrules'
import { $command, $inputRule, $nodeAttr, $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for image node.
diff --git a/packages/plugins/preset-commonmark/src/node/list-item.ts b/packages/plugins/preset-commonmark/src/node/list-item.ts
index 056b8a591df..a30e8b0835b 100644
--- a/packages/plugins/preset-commonmark/src/node/list-item.ts
+++ b/packages/plugins/preset-commonmark/src/node/list-item.ts
@@ -1,3 +1,5 @@
+import type { Ctx } from '@milkdown/ctx'
+
import { commandsCtx } from '@milkdown/core'
import { expectDomTypeError } from '@milkdown/exception'
import {
@@ -5,9 +7,9 @@ import {
sinkListItem,
splitListItem,
} from '@milkdown/prose/schema-list'
-import { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'
import { type Command, TextSelection } from '@milkdown/prose/state'
-import type { Ctx } from '@milkdown/ctx'
+import { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for list item node.
diff --git a/packages/plugins/preset-commonmark/src/node/ordered-list.ts b/packages/plugins/preset-commonmark/src/node/ordered-list.ts
index 2bf66189875..97c441419f0 100644
--- a/packages/plugins/preset-commonmark/src/node/ordered-list.ts
+++ b/packages/plugins/preset-commonmark/src/node/ordered-list.ts
@@ -9,6 +9,7 @@ import {
$nodeSchema,
$useKeymap,
} from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// HTML attributes for ordered list node.
diff --git a/packages/plugins/preset-commonmark/src/node/paragraph.ts b/packages/plugins/preset-commonmark/src/node/paragraph.ts
index fc7aad65a60..4cb35442998 100644
--- a/packages/plugins/preset-commonmark/src/node/paragraph.ts
+++ b/packages/plugins/preset-commonmark/src/node/paragraph.ts
@@ -1,9 +1,11 @@
+import type { Ctx } from '@milkdown/ctx'
+
import { commandsCtx } from '@milkdown/core'
import { setBlockType } from '@milkdown/prose/commands'
import { $command, $nodeAttr, $nodeSchema, $useKeymap } from '@milkdown/utils'
+
import { serializeText, withMeta } from '../__internal__'
import { remarkPreserveEmptyLinePlugin } from '../plugin/remark-preserve-empty-line'
-import type { Ctx } from '@milkdown/ctx'
/// HTML attributes for paragraph node.
export const paragraphAttr = $nodeAttr('paragraph')
diff --git a/packages/plugins/preset-commonmark/src/node/text.ts b/packages/plugins/preset-commonmark/src/node/text.ts
index 7ccb8e8d4c4..b1ea9d49805 100644
--- a/packages/plugins/preset-commonmark/src/node/text.ts
+++ b/packages/plugins/preset-commonmark/src/node/text.ts
@@ -1,4 +1,5 @@
import { $node } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// The bottom-level node.
diff --git a/packages/plugins/preset-commonmark/src/plugin/hardbreak-clear-mark-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/hardbreak-clear-mark-plugin.ts
index d7d2c6fd028..2480f409fd3 100644
--- a/packages/plugins/preset-commonmark/src/plugin/hardbreak-clear-mark-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/hardbreak-clear-mark-plugin.ts
@@ -1,8 +1,9 @@
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { AddMarkStep, ReplaceStep } from '@milkdown/prose/transform'
import { $prose } from '@milkdown/utils'
-import { hardbreakSchema } from '../node'
+
import { withMeta } from '../__internal__'
+import { hardbreakSchema } from '../node'
/// This plugin is used to clear the marks around the hardbreak node.
export const hardbreakClearMarkPlugin = $prose((ctx) => {
diff --git a/packages/plugins/preset-commonmark/src/plugin/hardbreak-filter-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/hardbreak-filter-plugin.ts
index 24f8e4f032c..e7fcd815c8c 100644
--- a/packages/plugins/preset-commonmark/src/plugin/hardbreak-filter-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/hardbreak-filter-plugin.ts
@@ -1,5 +1,6 @@
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $ctx, $prose } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// This slice contains the nodes that within which the hardbreak will be ignored.
diff --git a/packages/plugins/preset-commonmark/src/plugin/inline-nodes-cursor-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/inline-nodes-cursor-plugin.ts
index 11e32fc1e59..917c19f5b77 100644
--- a/packages/plugins/preset-commonmark/src/plugin/inline-nodes-cursor-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/inline-nodes-cursor-plugin.ts
@@ -1,6 +1,7 @@
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { Decoration, DecorationSet } from '@milkdown/prose/view'
import { $prose } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// This plugin is to solve the [chrome 98 bug](https://discuss.prosemirror.net/t/cursor-jumps-at-the-end-of-line-when-it-betweens-two-inline-nodes/4641).
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-add-order-in-list-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/remark-add-order-in-list-plugin.ts
index 5321e82b898..cfe26926d02 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-add-order-in-list-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-add-order-in-list-plugin.ts
@@ -1,5 +1,6 @@
import { $remark } from '@milkdown/utils'
import { visit } from 'unist-util-visit'
+
import { withMeta } from '../__internal__'
/// This plugin is used to add order in list for remark AST.
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-html-transformer.ts b/packages/plugins/preset-commonmark/src/plugin/remark-html-transformer.ts
index c5ecfa6b358..bdc45b7ea22 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-html-transformer.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-html-transformer.ts
@@ -1,5 +1,7 @@
-import { $remark } from '@milkdown/utils'
import type { Node } from '@milkdown/transformer'
+
+import { $remark } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
const isParent = (node: Node): node is Node & { children: Node[] } =>
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-inline-link-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/remark-inline-link-plugin.ts
index bd7dbb0a0d9..169b003b0a3 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-inline-link-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-inline-link-plugin.ts
@@ -1,5 +1,6 @@
import { $remark } from '@milkdown/utils'
import remarkInlineLinks from 'remark-inline-links'
+
import { withMeta } from '../__internal__'
/// This plugin wraps [remark-inline-links](https://github.com/remarkjs/remark-inline-links).
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-line-break.ts b/packages/plugins/preset-commonmark/src/plugin/remark-line-break.ts
index e565ccca5ce..6dac679d994 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-line-break.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-line-break.ts
@@ -1,6 +1,8 @@
-import { $remark } from '@milkdown/utils'
import type { Node } from '@milkdown/transformer'
+
+import { $remark } from '@milkdown/utils'
import { visit } from 'unist-util-visit'
+
import { withMeta } from '../__internal__'
/// This plugin is used to add inline line break for remark AST.
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-marker-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/remark-marker-plugin.ts
index 3448202c966..ab8ea9f59d1 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-marker-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-marker-plugin.ts
@@ -1,6 +1,8 @@
-import { $remark } from '@milkdown/utils'
import type { Node } from '@milkdown/transformer'
+
+import { $remark } from '@milkdown/utils'
import { visit } from 'unist-util-visit'
+
import { withMeta } from '../__internal__'
/// This plugin is used to keep the marker (`_` and `*`) of emphasis and strong nodes.
diff --git a/packages/plugins/preset-commonmark/src/plugin/remark-preserve-empty-line.ts b/packages/plugins/preset-commonmark/src/plugin/remark-preserve-empty-line.ts
index 94bb2b7974b..2aeeafce560 100644
--- a/packages/plugins/preset-commonmark/src/plugin/remark-preserve-empty-line.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/remark-preserve-empty-line.ts
@@ -1,6 +1,8 @@
import type { Node } from '@milkdown/transformer'
-import { visit } from 'unist-util-visit'
+
import { $remark } from '@milkdown/utils'
+import { visit } from 'unist-util-visit'
+
import { withMeta } from '../__internal__'
function visitImage(ast: Node) {
diff --git a/packages/plugins/preset-commonmark/src/plugin/sync-heading-id-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/sync-heading-id-plugin.ts
index f96a0fbc7d3..2feeebb54e5 100644
--- a/packages/plugins/preset-commonmark/src/plugin/sync-heading-id-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/sync-heading-id-plugin.ts
@@ -1,8 +1,10 @@
-import { Plugin, PluginKey } from '@milkdown/prose/state'
import type { EditorView } from '@milkdown/prose/view'
+
+import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $prose } from '@milkdown/utils'
-import { headingIdGenerator, headingSchema } from '../node/heading'
+
import { withMeta } from '../__internal__'
+import { headingIdGenerator, headingSchema } from '../node/heading'
/// This plugin is used to sync the heading id when the heading content changes.
/// It will use the `headingIdGenerator` to generate the id.
diff --git a/packages/plugins/preset-commonmark/src/plugin/sync-list-order-plugin.ts b/packages/plugins/preset-commonmark/src/plugin/sync-list-order-plugin.ts
index 64d8d1a3e88..1a4076a347e 100644
--- a/packages/plugins/preset-commonmark/src/plugin/sync-list-order-plugin.ts
+++ b/packages/plugins/preset-commonmark/src/plugin/sync-list-order-plugin.ts
@@ -1,11 +1,12 @@
+import type { EditorView } from '@milkdown/prose/view'
+
import { Plugin, PluginKey } from '@milkdown/prose/state'
import { $prose } from '@milkdown/utils'
-import type { EditorView } from '@milkdown/prose/view'
-import { listItemSchema } from '../node/list-item'
-import { orderedListSchema } from '../node/ordered-list'
-import { bulletListSchema } from '../node'
import { withMeta } from '../__internal__'
+import { bulletListSchema } from '../node'
+import { listItemSchema } from '../node/list-item'
+import { orderedListSchema } from '../node/ordered-list'
/// This plugin is used to keep the label of list item up to date in ordered list.
export const syncListOrderPlugin = $prose((ctx) => {
diff --git a/packages/plugins/preset-gfm/src/composed/inputrules.ts b/packages/plugins/preset-gfm/src/composed/inputrules.ts
index 27b4c6347e6..c4520bbfae9 100644
--- a/packages/plugins/preset-gfm/src/composed/inputrules.ts
+++ b/packages/plugins/preset-gfm/src/composed/inputrules.ts
@@ -1,6 +1,7 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
-import { insertTableInputRule, wrapInTaskListInputRule } from '../node'
+
import { strikethroughInputRule } from '../mark'
+import { insertTableInputRule, wrapInTaskListInputRule } from '../node'
/// @internal
export const inputRules: MilkdownPlugin[] = [
diff --git a/packages/plugins/preset-gfm/src/composed/keymap.ts b/packages/plugins/preset-gfm/src/composed/keymap.ts
index 02a301c76f3..e8ea6dede39 100644
--- a/packages/plugins/preset-gfm/src/composed/keymap.ts
+++ b/packages/plugins/preset-gfm/src/composed/keymap.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { strikethroughKeymap } from '../mark'
import { tableKeymap } from '../node'
diff --git a/packages/plugins/preset-gfm/src/composed/plugins.ts b/packages/plugins/preset-gfm/src/composed/plugins.ts
index 7c11fcd3171..92b2ab6ce1e 100644
--- a/packages/plugins/preset-gfm/src/composed/plugins.ts
+++ b/packages/plugins/preset-gfm/src/composed/plugins.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import {
autoInsertSpanPlugin,
keepTableAlignPlugin,
diff --git a/packages/plugins/preset-gfm/src/composed/schema.ts b/packages/plugins/preset-gfm/src/composed/schema.ts
index 160b84a284f..09f0d1b94b6 100644
--- a/packages/plugins/preset-gfm/src/composed/schema.ts
+++ b/packages/plugins/preset-gfm/src/composed/schema.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin } from '@milkdown/ctx'
+
import { strikethroughAttr, strikethroughSchema } from '../mark'
import {
extendListItemSchemaForTask,
diff --git a/packages/plugins/preset-gfm/src/mark/strike-through.ts b/packages/plugins/preset-gfm/src/mark/strike-through.ts
index 21b1887251c..3b4ddae3796 100644
--- a/packages/plugins/preset-gfm/src/mark/strike-through.ts
+++ b/packages/plugins/preset-gfm/src/mark/strike-through.ts
@@ -1,4 +1,6 @@
import { commandsCtx } from '@milkdown/core'
+import { markRule } from '@milkdown/prose'
+import { toggleMark } from '@milkdown/prose/commands'
import {
$command,
$inputRule,
@@ -6,8 +8,7 @@ import {
$markSchema,
$useKeymap,
} from '@milkdown/utils'
-import { toggleMark } from '@milkdown/prose/commands'
-import { markRule } from '@milkdown/prose'
+
import { withMeta } from '../__internal__'
/// HTML attributes for the strikethrough mark.
diff --git a/packages/plugins/preset-gfm/src/node/footnote/definition.ts b/packages/plugins/preset-gfm/src/node/footnote/definition.ts
index 85817635147..c364f3c7abf 100644
--- a/packages/plugins/preset-gfm/src/node/footnote/definition.ts
+++ b/packages/plugins/preset-gfm/src/node/footnote/definition.ts
@@ -1,5 +1,6 @@
import { expectDomTypeError } from '@milkdown/exception'
import { $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../../__internal__'
const id = 'footnote_definition'
diff --git a/packages/plugins/preset-gfm/src/node/footnote/reference.ts b/packages/plugins/preset-gfm/src/node/footnote/reference.ts
index 80049360dcb..dbfb424f131 100644
--- a/packages/plugins/preset-gfm/src/node/footnote/reference.ts
+++ b/packages/plugins/preset-gfm/src/node/footnote/reference.ts
@@ -1,5 +1,6 @@
import { expectDomTypeError } from '@milkdown/exception'
import { $nodeSchema } from '@milkdown/utils'
+
import { withMeta } from '../../__internal__'
const id = 'footnote_reference'
diff --git a/packages/plugins/preset-gfm/src/node/table/command.ts b/packages/plugins/preset-gfm/src/node/table/command.ts
index b859fdc96fa..f40334d741a 100644
--- a/packages/plugins/preset-gfm/src/node/table/command.ts
+++ b/packages/plugins/preset-gfm/src/node/table/command.ts
@@ -1,4 +1,5 @@
import { paragraphSchema } from '@milkdown/preset-commonmark'
+import { findParentNodeType } from '@milkdown/prose'
import { Selection } from '@milkdown/prose/state'
import {
CellSelection,
@@ -13,8 +14,9 @@ import {
setCellAttr,
} from '@milkdown/prose/tables'
import { $command } from '@milkdown/utils'
-import { findParentNodeType } from '@milkdown/prose'
+
import { withMeta } from '../../__internal__'
+import { tableSchema } from './schema'
import {
addRowWithAlignment,
createTable,
@@ -24,7 +26,6 @@ import {
selectRow,
selectTable,
} from './utils'
-import { tableSchema } from './schema'
/// A command for moving cursor to previous cell.
export const goToPrevTableCellCommand = $command(
diff --git a/packages/plugins/preset-gfm/src/node/table/input.ts b/packages/plugins/preset-gfm/src/node/table/input.ts
index 5a6d0e1595a..cca24a5f767 100644
--- a/packages/plugins/preset-gfm/src/node/table/input.ts
+++ b/packages/plugins/preset-gfm/src/node/table/input.ts
@@ -2,14 +2,15 @@ import { commandsCtx } from '@milkdown/core'
import { InputRule } from '@milkdown/prose/inputrules'
import { TextSelection } from '@milkdown/prose/state'
import { $inputRule, $useKeymap } from '@milkdown/utils'
+
import { withMeta } from '../../__internal__'
-import { createTable } from './utils'
-import { tableSchema } from './schema'
import {
exitTable,
goToNextTableCellCommand,
goToPrevTableCellCommand,
} from './command'
+import { tableSchema } from './schema'
+import { createTable } from './utils'
/// A input rule for creating table.
/// For example, `|2x2|` will create a 2x2 table.
diff --git a/packages/plugins/preset-gfm/src/node/table/schema.ts b/packages/plugins/preset-gfm/src/node/table/schema.ts
index 576377d0b00..9238027d674 100644
--- a/packages/plugins/preset-gfm/src/node/table/schema.ts
+++ b/packages/plugins/preset-gfm/src/node/table/schema.ts
@@ -1,7 +1,9 @@
+import type { NodeType } from '@milkdown/prose/model'
+import type { MarkdownNode } from '@milkdown/transformer'
+
import { tableNodes } from '@milkdown/prose/tables'
import { $nodeSchema } from '@milkdown/utils'
-import type { MarkdownNode } from '@milkdown/transformer'
-import type { NodeType } from '@milkdown/prose/model'
+
import { withMeta } from '../../__internal__'
const originalSchema = tableNodes({
diff --git a/packages/plugins/preset-gfm/src/node/table/utils.ts b/packages/plugins/preset-gfm/src/node/table/utils.ts
index 337ee8413d9..286dcfa0159 100644
--- a/packages/plugins/preset-gfm/src/node/table/utils.ts
+++ b/packages/plugins/preset-gfm/src/node/table/utils.ts
@@ -1,11 +1,12 @@
+import type { Ctx } from '@milkdown/ctx'
import type { ContentNodeWithPos } from '@milkdown/prose'
-import { cloneTr, findParentNodeClosestToPos } from '@milkdown/prose'
import type { Node, ResolvedPos } from '@milkdown/prose/model'
import type { Selection, Transaction } from '@milkdown/prose/state'
import type { TableRect } from '@milkdown/prose/tables'
+
+import { cloneTr, findParentNodeClosestToPos } from '@milkdown/prose'
import { CellSelection, TableMap } from '@milkdown/prose/tables'
-import type { Ctx } from '@milkdown/ctx'
import {
tableCellSchema,
tableHeaderRowSchema,
diff --git a/packages/plugins/preset-gfm/src/node/task-list-item.ts b/packages/plugins/preset-gfm/src/node/task-list-item.ts
index 9f5369e348e..6bdc89b3833 100644
--- a/packages/plugins/preset-gfm/src/node/task-list-item.ts
+++ b/packages/plugins/preset-gfm/src/node/task-list-item.ts
@@ -2,6 +2,7 @@ import { expectDomTypeError } from '@milkdown/exception'
import { listItemSchema } from '@milkdown/preset-commonmark'
import { InputRule } from '@milkdown/prose/inputrules'
import { $inputRule } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// This schema extends the [list item](/preset-commonmark#list-item) schema and add task list support for it.
diff --git a/packages/plugins/preset-gfm/src/plugin/auto-insert-span-plugin.ts b/packages/plugins/preset-gfm/src/plugin/auto-insert-span-plugin.ts
index 2a0da366261..bfb2e8a92cb 100644
--- a/packages/plugins/preset-gfm/src/plugin/auto-insert-span-plugin.ts
+++ b/packages/plugins/preset-gfm/src/plugin/auto-insert-span-plugin.ts
@@ -1,5 +1,6 @@
import { $prose } from '@milkdown/utils'
import { imeSpan } from 'prosemirror-safari-ime-span'
+
import { withMeta } from '../__internal__'
/// This plugin is used to fix the bug of IME composing in table in Safari browser.
diff --git a/packages/plugins/preset-gfm/src/plugin/column-resizing-plugin.ts b/packages/plugins/preset-gfm/src/plugin/column-resizing-plugin.ts
index 1a0abb3e6fc..2a5d73d9e07 100644
--- a/packages/plugins/preset-gfm/src/plugin/column-resizing-plugin.ts
+++ b/packages/plugins/preset-gfm/src/plugin/column-resizing-plugin.ts
@@ -1,5 +1,6 @@
import { columnResizing } from '@milkdown/prose/tables'
import { $prose } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// This plugin is wrapping the `columnResizing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).
diff --git a/packages/plugins/preset-gfm/src/plugin/keep-table-align-plugin.ts b/packages/plugins/preset-gfm/src/plugin/keep-table-align-plugin.ts
index 6e73760e3dc..f9d2284d723 100644
--- a/packages/plugins/preset-gfm/src/plugin/keep-table-align-plugin.ts
+++ b/packages/plugins/preset-gfm/src/plugin/keep-table-align-plugin.ts
@@ -1,7 +1,9 @@
+import type { Node } from '@milkdown/prose/model'
import type { Transaction } from '@milkdown/prose/state'
+
import { Plugin, PluginKey } from '@milkdown/prose/state'
-import type { Node } from '@milkdown/prose/model'
import { $prose } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
const pluginKey = new PluginKey('MILKDOWN_KEEP_TABLE_ALIGN_PLUGIN')
diff --git a/packages/plugins/preset-gfm/src/plugin/remark-gfm-plugin.ts b/packages/plugins/preset-gfm/src/plugin/remark-gfm-plugin.ts
index a643bbc2535..7f5e193a074 100644
--- a/packages/plugins/preset-gfm/src/plugin/remark-gfm-plugin.ts
+++ b/packages/plugins/preset-gfm/src/plugin/remark-gfm-plugin.ts
@@ -1,7 +1,9 @@
import type { $Remark } from '@milkdown/utils'
-import { $remark } from '@milkdown/utils'
import type { Options } from 'remark-gfm'
+
+import { $remark } from '@milkdown/utils'
import remarkGFM from 'remark-gfm'
+
import { withMeta } from '../__internal__'
/// This plugin is wrapping the [remark-gfm](https://github.com/remarkjs/remark-gfm).
diff --git a/packages/plugins/preset-gfm/src/plugin/table-editing-plugin.ts b/packages/plugins/preset-gfm/src/plugin/table-editing-plugin.ts
index 636318dc56c..d5064eb16c1 100644
--- a/packages/plugins/preset-gfm/src/plugin/table-editing-plugin.ts
+++ b/packages/plugins/preset-gfm/src/plugin/table-editing-plugin.ts
@@ -1,5 +1,6 @@
import { tableEditing } from '@milkdown/prose/tables'
import { $prose } from '@milkdown/utils'
+
import { withMeta } from '../__internal__'
/// This plugin is wrapping the `tableEditing` plugin from [prosemirror-tables](https://github.com/ProseMirror/prosemirror-tables).
diff --git a/packages/plugins/theme-nord/src/index.ts b/packages/plugins/theme-nord/src/index.ts
index c5d4df516b7..b8c04947da8 100644
--- a/packages/plugins/theme-nord/src/index.ts
+++ b/packages/plugins/theme-nord/src/index.ts
@@ -1,9 +1,10 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewOptionsCtx } from '@milkdown/core'
import clsx from 'clsx'
-
import '@milkdown/prose/view/style/prosemirror.css'
import '@milkdown/prose/tables/style/tables.css'
+
import './style.css'
export function nord(ctx: Ctx): void {
diff --git a/packages/plugins/theme-nord/vite.config.ts b/packages/plugins/theme-nord/vite.config.ts
index c92b47890e6..e476ceaff6c 100644
--- a/packages/plugins/theme-nord/vite.config.ts
+++ b/packages/plugins/theme-nord/vite.config.ts
@@ -1,6 +1,7 @@
import type { LibraryOptions } from 'vite'
-import tailwindcss from '@tailwindcss/vite'
+
import { pluginViteConfig } from '@milkdown/dev/vite'
+import tailwindcss from '@tailwindcss/vite'
export default pluginViteConfig(import.meta.url, {
plugins: [tailwindcss()],
diff --git a/packages/prose/src/toolkit/input-rules/custom-input-rules.ts b/packages/prose/src/toolkit/input-rules/custom-input-rules.ts
index 0051e1b216c..29c90927f10 100644
--- a/packages/prose/src/toolkit/input-rules/custom-input-rules.ts
+++ b/packages/prose/src/toolkit/input-rules/custom-input-rules.ts
@@ -1,8 +1,9 @@
import type { InputRule } from '../../inputrules'
import type { EditorState, TextSelection, Transaction } from '../../state'
-import { Plugin, PluginKey } from '../../state'
import type { EditorView } from '../../view'
+import { Plugin, PluginKey } from '../../state'
+
function run(
view: EditorView,
from: number,
diff --git a/packages/prose/src/toolkit/input-rules/mark-rule.ts b/packages/prose/src/toolkit/input-rules/mark-rule.ts
index 299571f6198..2c662d9df8b 100644
--- a/packages/prose/src/toolkit/input-rules/mark-rule.ts
+++ b/packages/prose/src/toolkit/input-rules/mark-rule.ts
@@ -1,7 +1,8 @@
-import { InputRule } from '../../inputrules'
import type { Mark, MarkType } from '../../model'
import type { Captured, Options } from './common'
+import { InputRule } from '../../inputrules'
+
/// Create an input rule for a mark.
export function markRule(
regexp: RegExp,
diff --git a/packages/prose/src/toolkit/input-rules/node-rule.ts b/packages/prose/src/toolkit/input-rules/node-rule.ts
index 97d9522201f..a7c30e521f2 100644
--- a/packages/prose/src/toolkit/input-rules/node-rule.ts
+++ b/packages/prose/src/toolkit/input-rules/node-rule.ts
@@ -1,7 +1,8 @@
-import { InputRule } from '../../inputrules'
import type { NodeType } from '../../model'
import type { Captured, Options } from './common'
+import { InputRule } from '../../inputrules'
+
/// Create an input rule for a node.
export function nodeRule(
regexp: RegExp,
diff --git a/packages/prose/src/toolkit/prose/selection.ts b/packages/prose/src/toolkit/prose/selection.ts
index 7e404537dde..ec0974e0da2 100644
--- a/packages/prose/src/toolkit/prose/selection.ts
+++ b/packages/prose/src/toolkit/prose/selection.ts
@@ -1,8 +1,9 @@
import type { NodeType, Node as ProseNode, ResolvedPos } from '../../model'
import type { Selection } from '../../state'
+import type { Predicate } from './types'
+
import { NodeSelection } from '../../state'
import { equalNodeType } from './helper'
-import type { Predicate } from './types'
export interface ContentNodeWithPos {
pos: number
diff --git a/packages/transformer/src/parser/stack-element.spec.ts b/packages/transformer/src/parser/stack-element.spec.ts
index 7726ad15d94..422918f660e 100644
--- a/packages/transformer/src/parser/stack-element.spec.ts
+++ b/packages/transformer/src/parser/stack-element.spec.ts
@@ -1,4 +1,5 @@
import { expect, it } from 'vitest'
+
import { ParserStackElement } from './stack-element'
it('parser-stack-element', () => {
diff --git a/packages/transformer/src/parser/stack-element.ts b/packages/transformer/src/parser/stack-element.ts
index 82bfb64eb3a..600819533ca 100644
--- a/packages/transformer/src/parser/stack-element.ts
+++ b/packages/transformer/src/parser/stack-element.ts
@@ -1,4 +1,5 @@
import type { Attrs, Node, NodeType } from '@milkdown/prose/model'
+
import { StackElement } from '../utility'
export class ParserStackElement extends StackElement {
diff --git a/packages/transformer/src/parser/state.spec.ts b/packages/transformer/src/parser/state.spec.ts
index a14a39599cc..afe91489865 100644
--- a/packages/transformer/src/parser/state.spec.ts
+++ b/packages/transformer/src/parser/state.spec.ts
@@ -1,5 +1,7 @@
import type { MarkType, NodeType, Schema } from '@milkdown/prose/model'
+
import { describe, expect, it, vi } from 'vitest'
+
import { ParserState } from './state'
const docNodeType = {
diff --git a/packages/transformer/src/parser/state.ts b/packages/transformer/src/parser/state.ts
index 752d99cf61a..d6df07f84f2 100644
--- a/packages/transformer/src/parser/state.ts
+++ b/packages/transformer/src/parser/state.ts
@@ -5,22 +5,24 @@ import type {
NodeType,
Schema,
} from '@milkdown/prose/model'
+
import {
createNodeInParserFail,
parserMatchError,
stackOverFlow,
} from '@milkdown/exception'
import { Mark } from '@milkdown/prose/model'
+
import type {
MarkSchema,
MarkdownNode,
NodeSchema,
RemarkParser,
} from '../utility'
-import { Stack } from '../utility'
+import type { Parser } from './types'
+import { Stack } from '../utility'
import { ParserStackElement } from './stack-element'
-import type { Parser } from './types'
/// A state machine for parser. Transform remark AST into prosemirror state.
export class ParserState extends Stack {
diff --git a/packages/transformer/src/parser/types.ts b/packages/transformer/src/parser/types.ts
index 73ea7d8bfdc..387e29c0642 100644
--- a/packages/transformer/src/parser/types.ts
+++ b/packages/transformer/src/parser/types.ts
@@ -1,6 +1,6 @@
import type { MarkType, Node, NodeType } from '@milkdown/prose/model'
-import type { MarkdownNode } from '../utility/types'
+import type { MarkdownNode } from '../utility/types'
import type { ParserState } from './state'
/// The parser type which is used to transform markdown text into prosemirror node.
diff --git a/packages/transformer/src/serializer/stack-element.spec.ts b/packages/transformer/src/serializer/stack-element.spec.ts
index 5344fd872a0..049fc901fec 100644
--- a/packages/transformer/src/serializer/stack-element.spec.ts
+++ b/packages/transformer/src/serializer/stack-element.spec.ts
@@ -1,4 +1,5 @@
import { expect, it } from 'vitest'
+
import { SerializerStackElement } from './stack-element'
it('serializer-stack-element', () => {
diff --git a/packages/transformer/src/serializer/stack-element.ts b/packages/transformer/src/serializer/stack-element.ts
index 34b6ee18e41..7a8f229dbd2 100644
--- a/packages/transformer/src/serializer/stack-element.ts
+++ b/packages/transformer/src/serializer/stack-element.ts
@@ -1,5 +1,6 @@
import type { MarkdownNode } from '..'
import type { JSONRecord } from '../utility'
+
import { StackElement } from '../utility'
export class SerializerStackElement extends StackElement {
diff --git a/packages/transformer/src/serializer/state.spec.ts b/packages/transformer/src/serializer/state.spec.ts
index a2ca1b3aedb..4c12c070215 100644
--- a/packages/transformer/src/serializer/state.spec.ts
+++ b/packages/transformer/src/serializer/state.spec.ts
@@ -1,5 +1,7 @@
import type { Mark, Schema } from '@milkdown/prose/model'
+
import { describe, expect, it } from 'vitest'
+
import { SerializerState } from './state'
const boldMark = {
diff --git a/packages/transformer/src/serializer/state.ts b/packages/transformer/src/serializer/state.ts
index e936e5b651f..446fc89754f 100644
--- a/packages/transformer/src/serializer/state.ts
+++ b/packages/transformer/src/serializer/state.ts
@@ -1,4 +1,3 @@
-import { serializerMatchError } from '@milkdown/exception'
import type {
Fragment,
MarkType,
@@ -6,6 +5,8 @@ import type {
NodeType,
Schema,
} from '@milkdown/prose/model'
+
+import { serializerMatchError } from '@milkdown/exception'
import { Mark } from '@milkdown/prose/model'
import type {
@@ -16,9 +17,10 @@ import type {
RemarkParser,
Root,
} from '../utility'
+import type { Serializer } from './types'
+
import { Stack } from '../utility'
import { SerializerStackElement } from './stack-element'
-import type { Serializer } from './types'
const isFragment = (x: Node | Fragment): x is Fragment =>
Object.prototype.hasOwnProperty.call(x, 'size')
diff --git a/packages/transformer/src/utility/stack.spec.ts b/packages/transformer/src/utility/stack.spec.ts
index be6716bf3f0..8d2e4a03c9d 100644
--- a/packages/transformer/src/utility/stack.spec.ts
+++ b/packages/transformer/src/utility/stack.spec.ts
@@ -1,4 +1,5 @@
import { expect, it } from 'vitest'
+
import { Stack } from './stack'
it('stack', () => {
diff --git a/packages/transformer/src/utility/types.ts b/packages/transformer/src/utility/types.ts
index 0a405d6ada1..535560a855e 100644
--- a/packages/transformer/src/utility/types.ts
+++ b/packages/transformer/src/utility/types.ts
@@ -1,6 +1,7 @@
import type { MarkSpec, NodeSpec } from '@milkdown/prose/model'
import type { remark } from 'remark'
import type { Plugin, Transformer } from 'unified'
+
import type { MarkParserSpec, NodeParserSpec } from '../parser/types'
import type {
MarkSerializerSpec,
diff --git a/packages/utils/src/composable/$command.ts b/packages/utils/src/composable/$command.ts
index 3c70087c8c8..49219dd9c5a 100644
--- a/packages/utils/src/composable/$command.ts
+++ b/packages/utils/src/composable/$command.ts
@@ -1,5 +1,6 @@
import type { Cmd, CmdKey } from '@milkdown/core'
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+
import {
CommandsReady,
commandsCtx,
diff --git a/packages/utils/src/composable/$ctx.ts b/packages/utils/src/composable/$ctx.ts
index 08b479447a8..943f6d50640 100644
--- a/packages/utils/src/composable/$ctx.ts
+++ b/packages/utils/src/composable/$ctx.ts
@@ -1,4 +1,5 @@
import type { MilkdownPlugin, SliceType } from '@milkdown/ctx'
+
import { createSlice } from '@milkdown/ctx'
/// @internal
diff --git a/packages/utils/src/composable/$input-rule.ts b/packages/utils/src/composable/$input-rule.ts
index 1e72adebeb5..ebcc060931b 100644
--- a/packages/utils/src/composable/$input-rule.ts
+++ b/packages/utils/src/composable/$input-rule.ts
@@ -1,7 +1,8 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
-import { SchemaReady, editorStateTimerCtx, inputRulesCtx } from '@milkdown/core'
import type { InputRule } from '@milkdown/prose/inputrules'
+import { SchemaReady, editorStateTimerCtx, inputRulesCtx } from '@milkdown/core'
+
import { addTimer } from './utils'
/// @internal
diff --git a/packages/utils/src/composable/$mark.ts b/packages/utils/src/composable/$mark.ts
index 0bdbed3b29d..fbb005f74a5 100644
--- a/packages/utils/src/composable/$mark.ts
+++ b/packages/utils/src/composable/$mark.ts
@@ -1,8 +1,9 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { MarkType } from '@milkdown/prose/model'
import type { MarkSchema } from '@milkdown/transformer'
+
import { marksCtx, schemaCtx, schemaTimerCtx } from '@milkdown/core'
import { missingMarkInSchema } from '@milkdown/exception'
-import type { MarkType } from '@milkdown/prose/model'
import { addTimer } from './utils'
diff --git a/packages/utils/src/composable/$node.ts b/packages/utils/src/composable/$node.ts
index ece5d9f787c..c70ebb1ac82 100644
--- a/packages/utils/src/composable/$node.ts
+++ b/packages/utils/src/composable/$node.ts
@@ -1,9 +1,10 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { NodeType } from '@milkdown/prose/model'
+import type { NodeSchema } from '@milkdown/transformer'
+
import { nodesCtx, schemaCtx, schemaTimerCtx } from '@milkdown/core'
import { missingNodeInSchema } from '@milkdown/exception'
-import type { NodeType } from '@milkdown/prose/model'
-import type { NodeSchema } from '@milkdown/transformer'
import { addTimer } from './utils'
/// @internal
diff --git a/packages/utils/src/composable/$prose.ts b/packages/utils/src/composable/$prose.ts
index 2b687c3501a..b441f986802 100644
--- a/packages/utils/src/composable/$prose.ts
+++ b/packages/utils/src/composable/$prose.ts
@@ -1,10 +1,11 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { Plugin, PluginKey } from '@milkdown/prose/state'
+
import {
SchemaReady,
editorStateTimerCtx,
prosePluginsCtx,
} from '@milkdown/core'
-import type { Plugin, PluginKey } from '@milkdown/prose/state'
import { addTimer } from './utils'
diff --git a/packages/utils/src/composable/$shortcut.ts b/packages/utils/src/composable/$shortcut.ts
index fc04fb80dca..c8cbe749997 100644
--- a/packages/utils/src/composable/$shortcut.ts
+++ b/packages/utils/src/composable/$shortcut.ts
@@ -1,11 +1,12 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { Command } from '@milkdown/prose/state'
+
import {
SchemaReady,
editorStateTimerCtx,
prosePluginsCtx,
} from '@milkdown/core'
import { keymap } from '@milkdown/prose/keymap'
-import type { Command } from '@milkdown/prose/state'
import { addTimer } from './utils'
diff --git a/packages/utils/src/composable/$view.ts b/packages/utils/src/composable/$view.ts
index 1e8cd3e7bf8..e2420dc9a98 100644
--- a/packages/utils/src/composable/$view.ts
+++ b/packages/utils/src/composable/$view.ts
@@ -1,4 +1,9 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type {
+ MarkViewConstructor,
+ NodeViewConstructor,
+} from '@milkdown/prose/view'
+
import {
SchemaReady,
editorViewTimerCtx,
@@ -6,14 +11,11 @@ import {
nodeViewCtx,
} from '@milkdown/core'
import { NodeType } from '@milkdown/prose/model'
-import type {
- MarkViewConstructor,
- NodeViewConstructor,
-} from '@milkdown/prose/view'
-import { addTimer } from './utils'
import type { $Mark, $Node } from '.'
+import { addTimer } from './utils'
+
/// @internal
export type $View<
T extends $Node | $Mark,
diff --git a/packages/utils/src/composable/composed/$attr.ts b/packages/utils/src/composable/composed/$attr.ts
index 9387e8e7baf..63bc230026f 100644
--- a/packages/utils/src/composable/composed/$attr.ts
+++ b/packages/utils/src/composable/composed/$attr.ts
@@ -1,5 +1,7 @@
import type { Mark, Node } from '@milkdown/prose/model'
+
import type { $Ctx } from '../$ctx'
+
import { $ctx } from '../$ctx'
/// @internal
diff --git a/packages/utils/src/composable/composed/$mark-schema.ts b/packages/utils/src/composable/composed/$mark-schema.ts
index 678d9661e23..0ee78d0eb40 100644
--- a/packages/utils/src/composable/composed/$mark-schema.ts
+++ b/packages/utils/src/composable/composed/$mark-schema.ts
@@ -1,9 +1,12 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
-import { marksCtx } from '@milkdown/core'
import type { MarkSchema } from '@milkdown/transformer'
+
+import { marksCtx } from '@milkdown/core'
+
import type { $Ctx } from '../$ctx'
-import { $ctx } from '../$ctx'
import type { $Mark } from '../$mark'
+
+import { $ctx } from '../$ctx'
import { $mark } from '../$mark'
/// @internal
diff --git a/packages/utils/src/composable/composed/$node-schema.ts b/packages/utils/src/composable/composed/$node-schema.ts
index f05cf4b5002..9dd41051b92 100644
--- a/packages/utils/src/composable/composed/$node-schema.ts
+++ b/packages/utils/src/composable/composed/$node-schema.ts
@@ -1,9 +1,12 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
-import { nodesCtx } from '@milkdown/core'
import type { NodeSchema } from '@milkdown/transformer'
+
+import { nodesCtx } from '@milkdown/core'
+
import type { $Ctx } from '../$ctx'
-import { $ctx } from '../$ctx'
import type { $Node } from '../$node'
+
+import { $ctx } from '../$ctx'
import { $node } from '../$node'
/// @internal
diff --git a/packages/utils/src/composable/composed/$remark.ts b/packages/utils/src/composable/composed/$remark.ts
index f68e2944a25..c51c15c6861 100644
--- a/packages/utils/src/composable/composed/$remark.ts
+++ b/packages/utils/src/composable/composed/$remark.ts
@@ -1,8 +1,10 @@
import type { Ctx, MilkdownPlugin } from '@milkdown/ctx'
+import type { RemarkPlugin, RemarkPluginRaw } from '@milkdown/transformer'
+
import { InitReady, remarkPluginsCtx } from '@milkdown/core'
-import type { RemarkPlugin, RemarkPluginRaw } from '@milkdown/transformer'
import type { $Ctx } from '../$ctx'
+
import { $ctx } from '../$ctx'
/// @internal
diff --git a/packages/utils/src/composable/composed/$user-keymap.ts b/packages/utils/src/composable/composed/$user-keymap.ts
index 35aed35d80c..0528def0efd 100644
--- a/packages/utils/src/composable/composed/$user-keymap.ts
+++ b/packages/utils/src/composable/composed/$user-keymap.ts
@@ -1,8 +1,10 @@
import type { Ctx, SliceType } from '@milkdown/ctx'
import type { Command } from '@milkdown/prose/state'
+
import type { $Ctx } from '../$ctx'
-import { $ctx } from '../$ctx'
import type { $Shortcut, Keymap } from '../$shortcut'
+
+import { $ctx } from '../$ctx'
import { $shortcut } from '../$shortcut'
/// @internal
diff --git a/packages/utils/src/composable/utils.ts b/packages/utils/src/composable/utils.ts
index 5168c7bbdf2..e95c44d96fb 100644
--- a/packages/utils/src/composable/utils.ts
+++ b/packages/utils/src/composable/utils.ts
@@ -5,6 +5,7 @@ import type {
SliceType,
TimerType,
} from '@milkdown/ctx'
+
import { createTimer } from '@milkdown/ctx'
import { customAlphabet } from 'nanoid'
@@ -47,7 +48,12 @@ export function addTimer<
return () => {
ctx.update(injectTo, (x) => x.filter((y) => y !== timer))
ctx.clearTimer(timer)
- cleanup?.()
+ if (cleanup) {
+ const result = cleanup()
+ if (result && 'then' in result) {
+ result.catch(console.error)
+ }
+ }
}
}
}
diff --git a/packages/utils/src/macro/call-command.ts b/packages/utils/src/macro/call-command.ts
index 7e46529d328..aa907189d4a 100644
--- a/packages/utils/src/macro/call-command.ts
+++ b/packages/utils/src/macro/call-command.ts
@@ -1,7 +1,8 @@
import type { CmdKey } from '@milkdown/core'
-import { commandsCtx } from '@milkdown/core'
import type { Ctx } from '@milkdown/ctx'
+import { commandsCtx } from '@milkdown/core'
+
type InferParams = T extends CmdKey ? U : never
/// Call a command. You can pass the command key and the payload to the macro.
diff --git a/packages/utils/src/macro/force-update.ts b/packages/utils/src/macro/force-update.ts
index 893e6dbfc84..0027bd5629c 100644
--- a/packages/utils/src/macro/force-update.ts
+++ b/packages/utils/src/macro/force-update.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx } from '@milkdown/core'
/// Force update the editor.
diff --git a/packages/utils/src/macro/get-html.ts b/packages/utils/src/macro/get-html.ts
index fa92d4b9e24..5f50c75c668 100644
--- a/packages/utils/src/macro/get-html.ts
+++ b/packages/utils/src/macro/get-html.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx, schemaCtx } from '@milkdown/core'
import { DOMSerializer } from '@milkdown/prose/model'
diff --git a/packages/utils/src/macro/get-markdown.ts b/packages/utils/src/macro/get-markdown.ts
index f923692ce84..3751eb49ac5 100644
--- a/packages/utils/src/macro/get-markdown.ts
+++ b/packages/utils/src/macro/get-markdown.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx, serializerCtx } from '@milkdown/core'
/// Get content of the editor as markdown string.
diff --git a/packages/utils/src/macro/insert.ts b/packages/utils/src/macro/insert.ts
index ef615a80fd8..6654bf49bcf 100644
--- a/packages/utils/src/macro/insert.ts
+++ b/packages/utils/src/macro/insert.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx, parserCtx } from '@milkdown/core'
import { Slice } from '@milkdown/prose/model'
diff --git a/packages/utils/src/macro/outline.ts b/packages/utils/src/macro/outline.ts
index 65deda65b63..aa6199523ce 100644
--- a/packages/utils/src/macro/outline.ts
+++ b/packages/utils/src/macro/outline.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import { editorViewCtx } from '@milkdown/core'
/// Get outline of the editor.
diff --git a/packages/utils/src/macro/replace-all.ts b/packages/utils/src/macro/replace-all.ts
index b07a48def72..4c84e0cd01f 100644
--- a/packages/utils/src/macro/replace-all.ts
+++ b/packages/utils/src/macro/replace-all.ts
@@ -1,4 +1,5 @@
import type { Ctx } from '@milkdown/ctx'
+
import {
editorStateOptionsCtx,
editorViewCtx,
diff --git a/packages/utils/src/macro/set-attr.ts b/packages/utils/src/macro/set-attr.ts
index 89b91c9a983..3edd0ef7e44 100644
--- a/packages/utils/src/macro/set-attr.ts
+++ b/packages/utils/src/macro/set-attr.ts
@@ -1,7 +1,8 @@
import type { Ctx } from '@milkdown/ctx'
-import { editorViewCtx } from '@milkdown/core'
import type { Attrs } from '@milkdown/prose/model'
+import { editorViewCtx } from '@milkdown/core'
+
/// Set the attributes of the node at the given position.
export function setAttr(pos: number, update: (prevAttrs: Attrs) => Attrs) {
return (ctx: Ctx) => {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c01f6af5598..ce3832f7249 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -82,6 +82,9 @@ importers:
'@types/rollup-plugin-auto-external':
specifier: ^2.0.2
version: 2.0.5
+ '@typescript-eslint/parser':
+ specifier: ^8.29.1
+ version: 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
'@vitejs/plugin-react':
specifier: ^4.0.0
version: 4.3.4(vite@6.2.6(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.1))
@@ -103,6 +106,12 @@ importers:
esbuild:
specifier: ^0.25.0
version: 0.25.2
+ eslint:
+ specifier: ^9.24.0
+ version: 9.24.0(jiti@2.4.2)
+ eslint-plugin-perfectionist:
+ specifier: ^4.11.0
+ version: 4.11.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
git-cz:
specifier: ^4.7.6
version: 4.9.0
@@ -166,6 +175,9 @@ importers:
typescript:
specifier: ^5.4.4
version: 5.8.3
+ typescript-eslint:
+ specifier: ^8.29.1
+ version: 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
vite:
specifier: ^6.0.0
version: 6.2.6(@types/node@22.14.1)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)(yaml@2.7.1)
@@ -1839,6 +1851,48 @@ packages:
cpu: [x64]
os: [win32]
+ '@eslint-community/eslint-utils@4.6.0':
+ resolution: {integrity: sha512-WhCn7Z7TauhBtmzhvKpoQs0Wwb/kBcy4CwpuI0/eEIr2Lx2auxmulAzLr91wVZJaz47iUZdkXOK7WlAfxGKCnA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.1':
+ resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.20.0':
+ resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.2.1':
+ resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.12.0':
+ resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.13.0':
+ resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/eslintrc@3.3.1':
+ resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.24.0':
+ resolution: {integrity: sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.2.8':
+ resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@floating-ui/core@1.6.9':
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
@@ -1848,6 +1902,26 @@ packages:
'@floating-ui/utils@0.2.9':
resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.6':
+ resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.3.1':
+ resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+ engines: {node: '>=18.18'}
+
+ '@humanwhocodes/retry@0.4.2':
+ resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
+ engines: {node: '>=18.18'}
+
'@isaacs/cliui@8.0.2':
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
@@ -2613,6 +2687,9 @@ packages:
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
'@types/katex@0.16.7':
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
@@ -2675,6 +2752,53 @@ packages:
'@types/uuid@9.0.8':
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+ '@typescript-eslint/eslint-plugin@8.29.1':
+ resolution: {integrity: sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/parser@8.29.1':
+ resolution: {integrity: sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/scope-manager@8.29.1':
+ resolution: {integrity: sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/type-utils@8.29.1':
+ resolution: {integrity: sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/types@8.29.1':
+ resolution: {integrity: sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.29.1':
+ resolution: {integrity: sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/utils@8.29.1':
+ resolution: {integrity: sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
+ '@typescript-eslint/visitor-keys@8.29.1':
+ resolution: {integrity: sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@uiw/codemirror-theme-basic@4.23.10':
resolution: {integrity: sha512-S5sgMzRUbzyZP5V5SpmlAno/RawuI2UhK0JxrlGOkmpTkSQ5ksqC8Nxuh1/ML4nr8bj+arwWv+PasaBG185YWg==}
@@ -2802,6 +2926,11 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
acorn@8.14.1:
resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
engines: {node: '>=0.4.0'}
@@ -2811,6 +2940,9 @@ packages:
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
engines: {node: '>= 14'}
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
@@ -3232,6 +3364,9 @@ packages:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -3353,15 +3488,63 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ eslint-plugin-perfectionist@4.11.0:
+ resolution: {integrity: sha512-5s+ehXydnLPQpLDj5mJ0CnYj2fQe6v6gKA3tS+FZVBLzwMOh8skH+l+1Gni08rG0SdEcNhJyjQp/mEkDYK8czw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ eslint: '>=8.45.0'
+
+ eslint-scope@8.3.0:
+ resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.0:
+ resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint@9.24.0:
+ resolution: {integrity: sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.3.0:
+ resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
estree-walker@0.6.1:
resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
@@ -3371,6 +3554,10 @@ packages:
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
@@ -3406,6 +3593,12 @@ packages:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
fast-uri@3.0.6:
resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
@@ -3420,6 +3613,10 @@ packages:
picomatch:
optional: true
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -3428,10 +3625,21 @@ packages:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
find-up@7.0.0:
resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
engines: {node: '>=18'}
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+
foreground-child@3.3.1:
resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines: {node: '>=14'}
@@ -3503,6 +3711,10 @@ packages:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
glob@11.0.1:
resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
engines: {node: 20 || >=22}
@@ -3520,6 +3732,10 @@ packages:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
globby@10.0.1:
resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==}
engines: {node: '>=8'}
@@ -3531,6 +3747,9 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -3618,6 +3837,10 @@ packages:
import-meta-resolve@4.1.0:
resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
@@ -3772,15 +3995,24 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
json-parse-better-errors@1.0.2:
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
@@ -3806,6 +4038,13 @@ packages:
resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==}
hasBin: true
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
lib0@0.2.104:
resolution: {integrity: sha512-1tqKRANSPTcjs/yjPoKh52oRM2u5AYdd8jie8sDiN8/5kpWWiQSHUGgtB4VEXLw1chVL3QPSPp8q9RWqzSn2FA==}
engines: {node: '>=16'}
@@ -3907,6 +4146,10 @@ packages:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4171,6 +4414,10 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
@@ -4198,6 +4445,13 @@ packages:
engines: {node: ^18 || >=20}
hasBin: true
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ natural-orderby@5.0.0:
+ resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
+ engines: {node: '>=18'}
+
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
@@ -4267,6 +4521,10 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
orderedmap@2.1.1:
resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==}
@@ -4297,6 +4555,10 @@ packages:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4305,6 +4567,10 @@ packages:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4698,6 +4964,10 @@ packages:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
prettier@2.8.8:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
@@ -5143,6 +5413,10 @@ packages:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
style-inject@0.3.0:
resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==}
@@ -5254,6 +5528,12 @@ packages:
trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
ts-dedent@2.2.0:
resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
engines: {node: '>=6.10'}
@@ -5272,10 +5552,21 @@ packages:
twemoji@14.0.2:
resolution: {integrity: sha512-BzOoXIe1QVdmsUmZ54xbEH+8AgtOKUiG53zO5vVP2iUu6h5u9lN15NcuS6te4OY96qx0H7JK9vjjl9WQbkTRuA==}
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
+ typescript-eslint@8.29.1:
+ resolution: {integrity: sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <5.9.0'
+
typescript@5.8.3:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
@@ -5485,6 +5776,10 @@ packages:
resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
engines: {node: '>=12'}
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -5563,6 +5858,10 @@ packages:
resolution: {integrity: sha512-xn/pYLTZa3uD1uDG8lpxfLRo5SR/rp0frdASOl2a71aYNvUXdWcLtVL91s2y7j+Q8ppmjZ9H3jsGVgoFMbT2VA==}
engines: {node: '>=16.0.0', npm: '>=8.0.0'}
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
yocto-queue@1.2.1:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
@@ -6559,6 +6858,54 @@ snapshots:
'@esbuild/win32-x64@0.25.2':
optional: true
+ '@eslint-community/eslint-utils@4.6.0(eslint@9.24.0(jiti@2.4.2))':
+ dependencies:
+ eslint: 9.24.0(jiti@2.4.2)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.1': {}
+
+ '@eslint/config-array@0.20.0':
+ dependencies:
+ '@eslint/object-schema': 2.1.6
+ debug: 4.4.0
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.2.1': {}
+
+ '@eslint/core@0.12.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/core@0.13.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.1':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.0
+ espree: 10.3.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.24.0': {}
+
+ '@eslint/object-schema@2.1.6': {}
+
+ '@eslint/plugin-kit@0.2.8':
+ dependencies:
+ '@eslint/core': 0.13.0
+ levn: 0.4.1
+
'@floating-ui/core@1.6.9':
dependencies:
'@floating-ui/utils': 0.2.9
@@ -6570,6 +6917,19 @@ snapshots:
'@floating-ui/utils@0.2.9': {}
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.6':
+ dependencies:
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.3.1
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.3.1': {}
+
+ '@humanwhocodes/retry@0.4.2': {}
+
'@isaacs/cliui@8.0.2':
dependencies:
string-width: 5.1.2
@@ -7336,6 +7696,8 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/json-schema@7.0.15': {}
+
'@types/katex@0.16.7': {}
'@types/lodash-es@4.17.12':
@@ -7393,6 +7755,83 @@ snapshots:
'@types/uuid@9.0.8': {}
+ '@typescript-eslint/eslint-plugin@8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.1
+ '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/scope-manager': 8.29.1
+ '@typescript-eslint/type-utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.29.1
+ eslint: 9.24.0(jiti@2.4.2)
+ graphemer: 1.4.0
+ ignore: 5.3.2
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.29.1
+ '@typescript-eslint/types': 8.29.1
+ '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3)
+ '@typescript-eslint/visitor-keys': 8.29.1
+ debug: 4.4.0
+ eslint: 9.24.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.29.1':
+ dependencies:
+ '@typescript-eslint/types': 8.29.1
+ '@typescript-eslint/visitor-keys': 8.29.1
+
+ '@typescript-eslint/type-utils@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ debug: 4.4.0
+ eslint: 9.24.0(jiti@2.4.2)
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.29.1': {}
+
+ '@typescript-eslint/typescript-estree@8.29.1(typescript@5.8.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.29.1
+ '@typescript-eslint/visitor-keys': 8.29.1
+ debug: 4.4.0
+ fast-glob: 3.3.3
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.7.1
+ ts-api-utils: 2.1.0(typescript@5.8.3)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.6.0(eslint@9.24.0(jiti@2.4.2))
+ '@typescript-eslint/scope-manager': 8.29.1
+ '@typescript-eslint/types': 8.29.1
+ '@typescript-eslint/typescript-estree': 8.29.1(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.29.1':
+ dependencies:
+ '@typescript-eslint/types': 8.29.1
+ eslint-visitor-keys: 4.2.0
+
'@uiw/codemirror-theme-basic@4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)':
dependencies:
'@uiw/codemirror-themes': 4.23.10(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.5)
@@ -7582,10 +8021,21 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
+ acorn-jsx@5.3.2(acorn@8.14.1):
+ dependencies:
+ acorn: 8.14.1
+
acorn@8.14.1: {}
agent-base@7.1.3: {}
+ ajv@6.12.6:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
ajv@8.12.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -8022,6 +8472,8 @@ snapshots:
deep-extend@0.6.0: {}
+ deep-is@0.1.4: {}
+
deepmerge@4.3.1: {}
define-lazy-prop@2.0.0: {}
@@ -8147,10 +8599,89 @@ snapshots:
escalade@3.2.0: {}
+ escape-string-regexp@4.0.0: {}
+
escape-string-regexp@5.0.0: {}
+ eslint-plugin-perfectionist@4.11.0(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/types': 8.29.1
+ '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
+ natural-orderby: 5.0.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-scope@8.3.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.0: {}
+
+ eslint@9.24.0(jiti@2.4.2):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.6.0(eslint@9.24.0(jiti@2.4.2))
+ '@eslint-community/regexpp': 4.12.1
+ '@eslint/config-array': 0.20.0
+ '@eslint/config-helpers': 0.2.1
+ '@eslint/core': 0.12.0
+ '@eslint/eslintrc': 3.3.1
+ '@eslint/js': 9.24.0
+ '@eslint/plugin-kit': 0.2.8
+ '@humanfs/node': 0.16.6
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.2
+ '@types/estree': 1.0.7
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.3.0
+ eslint-visitor-keys: 4.2.0
+ espree: 10.3.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.3.0:
+ dependencies:
+ acorn: 8.14.1
+ acorn-jsx: 5.3.2(acorn@8.14.1)
+ eslint-visitor-keys: 4.2.0
+
esprima@4.0.1: {}
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
estree-walker@0.6.1: {}
estree-walker@2.0.2: {}
@@ -8159,6 +8690,8 @@ snapshots:
dependencies:
'@types/estree': 1.0.7
+ esutils@2.0.3: {}
+
eventemitter3@4.0.7: {}
eventemitter3@5.0.1: {}
@@ -8209,6 +8742,10 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.8
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
fast-uri@3.0.6: {}
fastq@1.19.1:
@@ -8219,6 +8756,10 @@ snapshots:
optionalDependencies:
picomatch: 4.0.2
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -8228,12 +8769,24 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
find-up@7.0.0:
dependencies:
locate-path: 7.2.0
path-exists: 5.0.0
unicorn-magic: 0.1.0
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
+
+ flatted@3.3.3: {}
+
foreground-child@3.3.1:
dependencies:
cross-spawn: 7.0.6
@@ -8297,6 +8850,10 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
glob@11.0.1:
dependencies:
foreground-child: 3.3.1
@@ -8321,6 +8878,8 @@ snapshots:
globals@11.12.0: {}
+ globals@14.0.0: {}
+
globby@10.0.1:
dependencies:
'@types/glob': 7.2.0
@@ -8343,6 +8902,8 @@ snapshots:
graceful-fs@4.2.11: {}
+ graphemer@1.4.0: {}
+
has-flag@4.0.0: {}
hast-util-parse-selector@4.0.0:
@@ -8436,6 +8997,8 @@ snapshots:
import-meta-resolve@4.1.0: {}
+ imurmurhash@0.1.4: {}
+
inflight@1.0.6:
dependencies:
once: 1.4.0
@@ -8568,12 +9131,18 @@ snapshots:
jsesc@3.1.0: {}
+ json-buffer@3.0.1: {}
+
json-parse-better-errors@1.0.2: {}
json-parse-even-better-errors@2.3.1: {}
+ json-schema-traverse@0.4.1: {}
+
json-schema-traverse@1.0.0: {}
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
json5@2.2.3: {}
jsonc-parser@3.3.1: {}
@@ -8600,6 +9169,15 @@ snapshots:
dependencies:
commander: 8.3.0
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
lib0@0.2.104:
dependencies:
isomorphic.js: 0.2.5
@@ -8692,6 +9270,10 @@ snapshots:
dependencies:
p-locate: 4.1.0
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
locate-path@7.2.0:
dependencies:
p-locate: 6.0.0
@@ -9130,6 +9712,10 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
minimist@1.2.8: {}
minipass@7.1.2: {}
@@ -9144,6 +9730,10 @@ snapshots:
nanoid@5.1.5: {}
+ natural-compare@1.4.0: {}
+
+ natural-orderby@5.0.0: {}
+
negotiator@0.6.3: {}
node-emoji@2.2.0:
@@ -9215,6 +9805,15 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
orderedmap@2.1.1: {}
os-tmpdir@1.0.2: {}
@@ -9258,6 +9857,10 @@ snapshots:
dependencies:
p-try: 2.2.0
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
p-limit@4.0.0:
dependencies:
yocto-queue: 1.2.1
@@ -9266,6 +9869,10 @@ snapshots:
dependencies:
p-limit: 2.3.0
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
p-locate@6.0.0:
dependencies:
p-limit: 4.0.0
@@ -9624,6 +10231,8 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ prelude-ls@1.2.1: {}
+
prettier@2.8.8: {}
prettier@3.5.3: {}
@@ -10164,6 +10773,8 @@ snapshots:
strip-json-comments@2.0.1: {}
+ strip-json-comments@3.1.1: {}
+
style-inject@0.3.0: {}
style-mod@4.1.2: {}
@@ -10253,6 +10864,10 @@ snapshots:
trough@2.2.0: {}
+ ts-api-utils@2.1.0(typescript@5.8.3):
+ dependencies:
+ typescript: 5.8.3
+
ts-dedent@2.2.0: {}
tslib@2.8.1: {}
@@ -10273,8 +10888,22 @@ snapshots:
twemoji-parser: 14.0.0
universalify: 0.1.2
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
type-fest@2.19.0: {}
+ typescript-eslint@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.29.1(@typescript-eslint/parser@8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/parser': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ '@typescript-eslint/utils': 8.29.1(eslint@9.24.0(jiti@2.4.2))(typescript@5.8.3)
+ eslint: 9.24.0(jiti@2.4.2)
+ typescript: 5.8.3
+ transitivePeerDependencies:
+ - supports-color
+
typescript@5.8.3: {}
undici-types@6.21.0: {}
@@ -10497,6 +11126,8 @@ snapshots:
dependencies:
string-width: 5.1.2
+ word-wrap@1.2.5: {}
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -10561,6 +11192,8 @@ snapshots:
dependencies:
lib0: 0.2.104
+ yocto-queue@0.1.0: {}
+
yocto-queue@1.2.1: {}
zwitch@2.0.4: {}
diff --git a/scripts/changelog.mts b/scripts/changelog.mts
index d8b25d44496..497f26d9655 100644
--- a/scripts/changelog.mts
+++ b/scripts/changelog.mts
@@ -1,7 +1,7 @@
+import { Logger } from '@milkdown/dev/logger'
import { execSync } from 'child_process'
import { appendFileSync, readdirSync, existsSync } from 'fs'
import { join, basename } from 'path'
-import { Logger } from '@milkdown/dev/logger'
const logger = new Logger('changelog')
diff --git a/storybook/stories/components/code-block.stories.ts b/storybook/stories/components/code-block.stories.ts
index b7b6d91326e..baee20721ee 100644
--- a/storybook/stories/components/code-block.stories.ts
+++ b/storybook/stories/components/code-block.stories.ts
@@ -1,16 +1,17 @@
import type { Meta, StoryObj } from '@storybook/html'
+
+import { defaultKeymap } from '@codemirror/commands'
+import { languages } from '@codemirror/language-data'
+import { oneDark } from '@codemirror/theme-one-dark'
+import { keymap } from '@codemirror/view'
import {
codeBlockComponent,
codeBlockConfig,
} from '@milkdown/kit/component/code-block'
-import { oneDark } from '@codemirror/theme-one-dark'
-import { languages } from '@codemirror/language-data'
import { basicSetup } from 'codemirror'
-import { defaultKeymap } from '@codemirror/commands'
-import { keymap } from '@codemirror/view'
-import { html } from 'atomico'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './code-block.css?inline'
@@ -20,23 +21,6 @@ const meta: Meta = {
export default meta
-const check = html`
-
-`
-
const markdown = `
# Code Block
diff --git a/storybook/stories/components/image-block.stories.ts b/storybook/stories/components/image-block.stories.ts
index 183c4304bdd..0aa70c2f9ec 100644
--- a/storybook/stories/components/image-block.stories.ts
+++ b/storybook/stories/components/image-block.stories.ts
@@ -1,7 +1,9 @@
import type { Meta, StoryObj } from '@storybook/html'
+
import { imageBlockComponent } from '@milkdown/kit/component/image-block'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './image-block.css?inline'
diff --git a/storybook/stories/components/inline-image-block.stories.ts b/storybook/stories/components/inline-image-block.stories.ts
index ff80af67778..94e1f5bd461 100644
--- a/storybook/stories/components/inline-image-block.stories.ts
+++ b/storybook/stories/components/inline-image-block.stories.ts
@@ -1,7 +1,9 @@
import type { Meta, StoryObj } from '@storybook/html'
+
import { imageInlineComponent } from '@milkdown/kit/component/image-inline'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './inline-image-block.css?inline'
diff --git a/storybook/stories/components/link-tooltip.stories.ts b/storybook/stories/components/link-tooltip.stories.ts
index 40486e789c7..2d4a6c96fc0 100644
--- a/storybook/stories/components/link-tooltip.stories.ts
+++ b/storybook/stories/components/link-tooltip.stories.ts
@@ -1,18 +1,20 @@
+import type { Ctx } from '@milkdown/kit/ctx'
+import type { EditorState } from '@milkdown/kit/prose/state'
+import type { EditorView } from '@milkdown/kit/prose/view'
import type { Meta, StoryObj } from '@storybook/html'
-import { editorViewCtx } from '@milkdown/kit/core'
-import { linkSchema } from '@milkdown/kit/preset/commonmark'
+
import {
configureLinkTooltip,
linkTooltipAPI,
linkTooltipPlugin,
linkTooltipState,
} from '@milkdown/kit/component/link-tooltip'
+import { editorViewCtx } from '@milkdown/kit/core'
import { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'
-import type { Ctx } from '@milkdown/kit/ctx'
-import type { EditorView } from '@milkdown/kit/prose/view'
-import type { EditorState } from '@milkdown/kit/prose/state'
+import { linkSchema } from '@milkdown/kit/preset/commonmark'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './link-tooltip.css?inline'
diff --git a/storybook/stories/components/list-item-block.stories.ts b/storybook/stories/components/list-item-block.stories.ts
index f10829ded32..76682986506 100644
--- a/storybook/stories/components/list-item-block.stories.ts
+++ b/storybook/stories/components/list-item-block.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { gfm } from '@milkdown/kit/preset/gfm'
+
import { listItemBlockComponent } from '@milkdown/kit/component/list-item-block'
+import { gfm } from '@milkdown/kit/preset/gfm'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './list-item-block.css?inline'
diff --git a/storybook/stories/components/table-block.stories.ts b/storybook/stories/components/table-block.stories.ts
index d91b33c5846..828a0b5e3f3 100644
--- a/storybook/stories/components/table-block.stories.ts
+++ b/storybook/stories/components/table-block.stories.ts
@@ -1,11 +1,13 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { gfm } from '@milkdown/kit/preset/gfm'
import { tableBlock } from '@milkdown/kit/component/table-block'
-import tableStyle from '@milkdown/kit/prose/tables/style/tables.css?inline'
import { cursor } from '@milkdown/kit/plugin/cursor'
import { history } from '@milkdown/kit/plugin/history'
+import { gfm } from '@milkdown/kit/preset/gfm'
+import tableStyle from '@milkdown/kit/prose/tables/style/tables.css?inline'
+
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './table-block.css?inline'
diff --git a/storybook/stories/crepe/crepe-dark.stories.ts b/storybook/stories/crepe/crepe-dark.stories.ts
index 718d4cffb83..7503dfe4461 100644
--- a/storybook/stories/crepe/crepe-dark.stories.ts
+++ b/storybook/stories/crepe/crepe-dark.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { basicDark } from '@uiw/codemirror-theme-basic'
import crepeDark from '@milkdown/crepe/theme/crepe-dark.css?inline'
+import { basicDark } from '@uiw/codemirror-theme-basic'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/crepe.stories.ts b/storybook/stories/crepe/crepe.stories.ts
index 1939eecedf4..405fcf088d3 100644
--- a/storybook/stories/crepe/crepe.stories.ts
+++ b/storybook/stories/crepe/crepe.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { basicLight } from '@uiw/codemirror-theme-basic'
import crepe from '@milkdown/crepe/theme/crepe.css?inline'
+import { basicLight } from '@uiw/codemirror-theme-basic'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/frame-dark.stories.ts b/storybook/stories/crepe/frame-dark.stories.ts
index 216bc76c70f..57d38ec38a1 100644
--- a/storybook/stories/crepe/frame-dark.stories.ts
+++ b/storybook/stories/crepe/frame-dark.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { basicDark } from '@uiw/codemirror-theme-basic'
import frameDark from '@milkdown/crepe/theme/frame-dark.css?inline'
+import { basicDark } from '@uiw/codemirror-theme-basic'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/frame.stories.ts b/storybook/stories/crepe/frame.stories.ts
index a85223de269..8f085394465 100644
--- a/storybook/stories/crepe/frame.stories.ts
+++ b/storybook/stories/crepe/frame.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { basicLight } from '@uiw/codemirror-theme-basic'
import frame from '@milkdown/crepe/theme/frame.css?inline'
+import { basicLight } from '@uiw/codemirror-theme-basic'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/nord-dark.stories.ts b/storybook/stories/crepe/nord-dark.stories.ts
index e77664fccf9..1f5380f1f63 100644
--- a/storybook/stories/crepe/nord-dark.stories.ts
+++ b/storybook/stories/crepe/nord-dark.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { nord } from '@uiw/codemirror-theme-nord'
import nordDark from '@milkdown/crepe/theme/nord-dark.css?inline'
+import { nord } from '@uiw/codemirror-theme-nord'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/nord.stories.ts b/storybook/stories/crepe/nord.stories.ts
index c29ce4adbfd..97035dc6cef 100644
--- a/storybook/stories/crepe/nord.stories.ts
+++ b/storybook/stories/crepe/nord.stories.ts
@@ -1,8 +1,10 @@
import type { Meta, StoryObj } from '@storybook/html'
-import { basicLight } from '@uiw/codemirror-theme-basic'
import nord from '@milkdown/crepe/theme/nord.css?inline'
+import { basicLight } from '@uiw/codemirror-theme-basic'
+
import type { Args } from './setup'
+
import { longContent, setup, wikiContent } from './setup'
const meta: Meta = {
diff --git a/storybook/stories/crepe/setup.ts b/storybook/stories/crepe/setup.ts
index e0e3e5216df..2a664bb2baa 100644
--- a/storybook/stories/crepe/setup.ts
+++ b/storybook/stories/crepe/setup.ts
@@ -1,8 +1,10 @@
+import type { Extension } from '@codemirror/state'
+
import { Crepe } from '@milkdown/crepe'
import all from '@milkdown/crepe/theme/common/style.css?inline'
-import localStyle from './style.css?inline'
-import type { Extension } from '@codemirror/state'
+
import { injectMarkdown, wrapInShadow } from '../utils/shadow'
+import localStyle from './style.css?inline'
export interface Args {
instance: Crepe
@@ -117,7 +119,7 @@ export function setup({ args, style, theme }: setupConfig) {
.then(() => {
args.instance = crepe
})
-
+ .catch(console.error)
return root
}
diff --git a/storybook/stories/plugins/listener.stories.ts b/storybook/stories/plugins/listener.stories.ts
index 7e40517cbec..998eb933c77 100644
--- a/storybook/stories/plugins/listener.stories.ts
+++ b/storybook/stories/plugins/listener.stories.ts
@@ -1,9 +1,11 @@
import type { Meta, StoryObj } from '@storybook/html'
+
import { EditorStatus } from '@milkdown/kit/core'
import { listener, listenerCtx } from '@milkdown/kit/plugin/listener'
import { action } from '@storybook/addon-actions'
import type { CommonArgs } from '../utils/shadow'
+
import { setupMilkdown } from '../utils/shadow'
import style from './listener.css?inline'
diff --git a/storybook/stories/utils/shadow.ts b/storybook/stories/utils/shadow.ts
index 8298d93566b..0a4d9c28cf8 100644
--- a/storybook/stories/utils/shadow.ts
+++ b/storybook/stories/utils/shadow.ts
@@ -1,18 +1,19 @@
-import nordStyle from '@milkdown/theme-nord/style.css?inline'
-import pmStyle from '@milkdown/kit/prose/view/style/prosemirror.css?inline'
import {
Editor,
defaultValueCtx,
editorViewOptionsCtx,
rootCtx,
} from '@milkdown/kit/core'
-import { nord } from '@milkdown/theme-nord'
-import { commonmark } from '@milkdown/kit/preset/commonmark'
import { history } from '@milkdown/kit/plugin/history'
-import commonStyle from './style.css?inline'
import { listener, listenerCtx } from '@milkdown/kit/plugin/listener'
+import { commonmark } from '@milkdown/kit/preset/commonmark'
+import pmStyle from '@milkdown/kit/prose/view/style/prosemirror.css?inline'
+import { nord } from '@milkdown/theme-nord'
+import nordStyle from '@milkdown/theme-nord/style.css?inline'
import { codeToHtml } from 'shiki'
+import commonStyle from './style.css?inline'
+
export function wrapInShadow(styles: string[]) {
const root = document.createElement('div')
const shadow = root.attachShadow({ mode: 'open' })
@@ -53,6 +54,7 @@ export function injectMarkdown(
.finally(() => {
running = false
})
+ .catch(console.error)
}
export interface CommonArgs {
@@ -98,9 +100,12 @@ export function setupMilkdown(
setup?.(editor, root, wrapper)
- editor.create().then(() => {
- args.instance = editor
- })
+ editor
+ .create()
+ .then(() => {
+ args.instance = editor
+ })
+ .catch(console.error)
return root
}
diff --git a/storybook/tsconfig.json b/storybook/tsconfig.json
index aa9070bab01..f6c6cb2263d 100644
--- a/storybook/tsconfig.json
+++ b/storybook/tsconfig.json
@@ -3,9 +3,11 @@
"compilerOptions": {
"baseUrl": ".",
"rootDir": ".",
+ "outDir": "./lib",
"sourceMap": false,
"tsBuildInfoFile": "./lib/tsconfig.tsbuildinfo"
},
+ "include": ["./stories", "./.storybook", "./shim.d.ts"],
"ts-node": {
"compilerOptions": {
"module": "es2022",
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
new file mode 100644
index 00000000000..80ea87b983c
--- /dev/null
+++ b/tsconfig.eslint.json
@@ -0,0 +1,12 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["."],
+ "exclude": [
+ "**/node_modules",
+ "**/dist",
+ "**/lib",
+ "**/storybook-static",
+ "**/test-results",
+ "**/coverage"
+ ]
+}