@milkdown/crepe 7.15.1 → 7.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/builder.js.map +1 -1
- package/lib/cjs/feature/block-edit/index.js.map +1 -1
- package/lib/cjs/feature/code-mirror/index.js.map +1 -1
- package/lib/cjs/feature/cursor/index.js.map +1 -1
- package/lib/cjs/feature/image-block/index.js.map +1 -1
- package/lib/cjs/feature/latex/index.js.map +1 -1
- package/lib/cjs/feature/link-tooltip/index.js.map +1 -1
- package/lib/cjs/feature/list-item/index.js.map +1 -1
- package/lib/cjs/feature/placeholder/index.js.map +1 -1
- package/lib/cjs/feature/table/index.js.map +1 -1
- package/lib/cjs/feature/toolbar/index.js.map +1 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/builder.js.map +1 -1
- package/lib/esm/feature/block-edit/index.js.map +1 -1
- package/lib/esm/feature/code-mirror/index.js.map +1 -1
- package/lib/esm/feature/cursor/index.js.map +1 -1
- package/lib/esm/feature/image-block/index.js.map +1 -1
- package/lib/esm/feature/latex/index.js.map +1 -1
- package/lib/esm/feature/link-tooltip/index.js.map +1 -1
- package/lib/esm/feature/list-item/index.js.map +1 -1
- package/lib/esm/feature/placeholder/index.js.map +1 -1
- package/lib/esm/feature/table/index.js.map +1 -1
- package/lib/esm/feature/toolbar/index.js.map +1 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/lib/cjs/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sources":["../../src/core/slice.ts","../../src/core/builder.ts"],"sourcesContent":["import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@milkdown/kit/core'\nimport { clipboard } from '@milkdown/kit/plugin/clipboard'\nimport { history } from '@milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@milkdown/kit/plugin/listener'\nimport { trailing } from '@milkdown/kit/plugin/trailing'\nimport { commonmark } from '@milkdown/kit/preset/commonmark'\nimport { gfm } from '@milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@milkdown/kit/utils'\n\nimport type { CrepeFeature, CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeCtx, FeaturesCtx } from './slice'\n\n/// The crepe builder configuration.\nexport interface CrepeBuilderConfig {\n /// The root element for the editor.\n /// Supports both DOM nodes and CSS selectors,\n /// If not provided, the editor will be appended to the body.\n root?: Node | string | null\n\n /// The default value for the editor.\n defaultValue?: DefaultValue\n}\n\n/// The crepe builder class.\n/// This class allows users to manually add features to the editor.\nexport class CrepeBuilder {\n /// @internal\n readonly #editor: Editor\n\n /// @internal\n readonly #rootElement: Node\n\n /// @internal\n #editable = true\n\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = '' }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n })\n .config((ctx) => {\n ctx.set(rootCtx, this.#rootElement)\n ctx.set(defaultValueCtx, defaultValue)\n ctx.set(editorViewOptionsCtx, {\n editable: () => this.#editable,\n })\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4,\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(gfm)\n }\n\n /// Add a feature to the editor.\n addFeature: {\n <T extends CrepeFeature>(\n feature: DefineFeature<CrepeFeatureConfig[T]>,\n config?: CrepeFeatureConfig[T]\n ): CrepeBuilder\n <C>(feature: DefineFeature<C>, config?: C): CrepeBuilder\n } = (feature: DefineFeature, config?: never) => {\n feature(this.#editor, config)\n return this\n }\n\n /// Create the editor.\n create = () => {\n return this.#editor.create()\n }\n\n /// Destroy the editor.\n destroy = () => {\n return this.#editor.destroy()\n }\n\n /// Get the milkdown editor instance.\n get editor(): Editor {\n return this.#editor\n }\n\n /// Get the readonly state of the editor.\n get readonly() {\n return !this.#editable\n }\n\n /// Set the readonly mode of the editor.\n setReadonly = (value: boolean) => {\n this.#editable = !value\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx)\n view.setProps({\n editable: () => !value,\n })\n }\n })\n return this\n }\n\n /// Get the markdown content of the editor.\n getMarkdown = () => {\n return this.#editor.action(getMarkdown())\n }\n\n /// Register event listeners.\n on = (fn: (api: ListenerManager) => void) => {\n if (this.#editor.status !== EditorStatus.Created) {\n this.#editor.config((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n this.#editor.action((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n}\n"],"names":["createSlice","EditorStatus","editorViewCtx","getMarkdown","listener","listenerCtx","Editor","rootCtx","defaultValueCtx","editorViewOptionsCtx","indentConfig","commonmark","history","indent","trailing","clipboard","gfm"],"mappings":";;;;;;;;;;;;;AAQO,MAAM,WAAA,GAAcA,eAAA,CAAY,EAAC,EAAqB,aAAa,CAAA;AAKnE,MAAM,QAAA,GAAWA,eAAA,CAAY,EAAC,EAAmB,UAAU,CAAA;;;;;;;;;ACblE,IAAA,OAAA,EAAA,YAAA,EAAA,SAAA;AAwCO,MAAM,YAAA,CAAa;AAAA;AAAA;AAAA,EAYxB,YAAY,EAAE,IAAA,EAAM,eAAe,EAAA,EAAG,GAAwB,EAAC,EAAG;AAVlE;AAAA,IAAA,YAAA,CAAA,IAAA,EAAS,OAAA,CAAA;AAGT;AAAA,IAAA,YAAA,CAAA,IAAA,EAAS,YAAA,CAAA;AAGT;AAAA,IAAA,YAAA,CAAA,IAAA,EAAA,SAAA,EAAY,IAAA,CAAA;AAkCZ;AAAA,IAAA,IAAA,CAAA,UAAA,GAMI,CAAC,SAAwB,MAAA,KAAmB;AAC9C,MAAA,OAAA,CAAQ,YAAA,CAAA,IAAA,EAAK,UAAS,MAAM,CAAA;AAC5B,MAAA,OAAO,IAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"builder.js","sources":["../../src/core/slice.ts","../../src/core/builder.ts"],"sourcesContent":["import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@milkdown/kit/core'\nimport { clipboard } from '@milkdown/kit/plugin/clipboard'\nimport { history } from '@milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@milkdown/kit/plugin/listener'\nimport { trailing } from '@milkdown/kit/plugin/trailing'\nimport { commonmark } from '@milkdown/kit/preset/commonmark'\nimport { gfm } from '@milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@milkdown/kit/utils'\n\nimport type { CrepeFeature, CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeCtx, FeaturesCtx } from './slice'\n\n/// The crepe builder configuration.\nexport interface CrepeBuilderConfig {\n /// The root element for the editor.\n /// Supports both DOM nodes and CSS selectors,\n /// If not provided, the editor will be appended to the body.\n root?: Node | string | null\n\n /// The default value for the editor.\n defaultValue?: DefaultValue\n}\n\n/// The crepe builder class.\n/// This class allows users to manually add features to the editor.\nexport class CrepeBuilder {\n /// @internal\n readonly #editor: Editor\n\n /// @internal\n readonly #rootElement: Node\n\n /// @internal\n #editable = true\n\n /// The constructor of the crepe builder.\n /// You can pass configs to the builder to configure the editor.\n constructor({ root, defaultValue = '' }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n })\n .config((ctx) => {\n ctx.set(rootCtx, this.#rootElement)\n ctx.set(defaultValueCtx, defaultValue)\n ctx.set(editorViewOptionsCtx, {\n editable: () => this.#editable,\n })\n ctx.update(indentConfig.key, (value) => ({\n ...value,\n size: 4,\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(gfm)\n }\n\n /// Add a feature to the editor.\n addFeature: {\n <T extends CrepeFeature>(\n feature: DefineFeature<CrepeFeatureConfig[T]>,\n config?: CrepeFeatureConfig[T]\n ): CrepeBuilder\n <C>(feature: DefineFeature<C>, config?: C): CrepeBuilder\n } = (feature: DefineFeature, config?: never) => {\n feature(this.#editor, config)\n return this\n }\n\n /// Create the editor.\n create = () => {\n return this.#editor.create()\n }\n\n /// Destroy the editor.\n destroy = () => {\n return this.#editor.destroy()\n }\n\n /// Get the milkdown editor instance.\n get editor(): Editor {\n return this.#editor\n }\n\n /// Get the readonly state of the editor.\n get readonly() {\n return !this.#editable\n }\n\n /// Set the readonly mode of the editor.\n setReadonly = (value: boolean) => {\n this.#editable = !value\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n const view = ctx.get(editorViewCtx)\n view.setProps({\n editable: () => !value,\n })\n }\n })\n return this\n }\n\n /// Get the markdown content of the editor.\n getMarkdown = () => {\n return this.#editor.action(getMarkdown())\n }\n\n /// Register event listeners.\n on = (fn: (api: ListenerManager) => void) => {\n if (this.#editor.status !== EditorStatus.Created) {\n this.#editor.config((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n this.#editor.action((ctx) => {\n const listener = ctx.get(listenerCtx)\n fn(listener)\n })\n return this\n }\n}\n"],"names":["createSlice","EditorStatus","editorViewCtx","getMarkdown","listener","listenerCtx","Editor","rootCtx","defaultValueCtx","editorViewOptionsCtx","indentConfig","commonmark","history","indent","trailing","clipboard","gfm"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/core/slice.ts","../../../../src/feature/index.ts","../../../../src/icons/bullet-list.ts","../../../../src/icons/code.ts","../../../../src/icons/divider.ts","../../../../src/icons/h1.ts","../../../../src/icons/h2.ts","../../../../src/icons/h3.ts","../../../../src/icons/h4.ts","../../../../src/icons/h5.ts","../../../../src/icons/h6.ts","../../../../src/icons/image.ts","../../../../src/icons/menu.ts","../../../../src/icons/ordered-list.ts","../../../../src/icons/plus.ts","../../../../src/icons/quote.ts","../../../../src/icons/table.ts","../../../../src/icons/text.ts","../../../../src/icons/todo-list.ts","../../../../src/icons/functions.ts","../../../../src/utils/checker.ts","../../../../src/utils/group-builder.ts","../../../../src/feature/block-edit/menu/config.ts","../../../../src/feature/block-edit/menu/component.tsx","../../../../src/feature/block-edit/menu/index.ts","../../../../src/feature/block-edit/handle/component.tsx","../../../../src/feature/block-edit/handle/index.ts","../../../../src/feature/block-edit/index.ts"],"sourcesContent":["import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { LatexFeatureConfig } from './latex'\nimport type { LinkTooltipFeatureConfig } from './link-tooltip'\nimport type { ListItemFeatureConfig } from './list-item'\nimport type { PlaceholderFeatureConfig } from './placeholder'\nimport type { TableFeatureConfig } from './table'\nimport type { ToolbarFeatureConfig } from './toolbar'\n\n/// The crepe editor feature flags.\n/// Every feature is enabled by default.\n/// Every feature is a string literal type.\nexport enum CrepeFeature {\n /// Syntax highlighting and editing for code blocks with language support, theme customization, and preview capabilities.\n CodeMirror = 'code-mirror',\n\n /// Support for bullet lists, ordered lists, and todo lists with customizable icons and formatting.\n ListItem = 'list-item',\n\n /// Enhanced link editing and preview with customizable tooltips, edit/remove actions, and copy functionality.\n LinkTooltip = 'link-tooltip',\n\n /// Enhanced cursor experience with drop cursor and gap cursor for better content placement.\n Cursor = 'cursor',\n\n /// Image upload and management with resizing, captions, and support for both inline and block images.\n ImageBlock = 'image-block',\n\n /// Drag-and-drop block management and slash commands for quick content insertion and organization.\n BlockEdit = 'block-edit',\n\n /// Formatting toolbar for selected text with customizable icons and actions.\n Toolbar = 'toolbar',\n\n /// Document or block level placeholders to guide users when content is empty.\n Placeholder = 'placeholder',\n\n /// Full-featured table editing with row/column management, alignment options, and drag-and-drop functionality.\n Table = 'table',\n\n /// Mathematical formula support with both inline and block math rendering using KaTeX.\n Latex = 'latex',\n}\n\nexport interface CrepeFeatureConfig {\n [CrepeFeature.Cursor]?: CursorFeatureConfig\n [CrepeFeature.ListItem]?: ListItemFeatureConfig\n [CrepeFeature.LinkTooltip]?: LinkTooltipFeatureConfig\n [CrepeFeature.ImageBlock]?: ImageBlockFeatureConfig\n [CrepeFeature.BlockEdit]?: BlockEditFeatureConfig\n [CrepeFeature.Placeholder]?: PlaceholderFeatureConfig\n [CrepeFeature.Toolbar]?: ToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n}\n\nexport const defaultFeatures: Record<CrepeFeature, boolean> = {\n [CrepeFeature.Cursor]: true,\n [CrepeFeature.ListItem]: true,\n [CrepeFeature.LinkTooltip]: true,\n [CrepeFeature.ImageBlock]: true,\n [CrepeFeature.BlockEdit]: true,\n [CrepeFeature.Placeholder]: true,\n [CrepeFeature.Toolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n}\n","export const bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`\n","export const functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`\n","import type { Selection } from '@milkdown/kit/prose/state'\n\nexport function isInCodeBlock(selection: Selection) {\n const type = selection.$from.parent.type\n return type.name === 'code_block'\n}\n\nexport function isInList(selection: Selection) {\n const type = selection.$from.node(selection.$from.depth - 1)?.type\n return type?.name === 'list_item'\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nexport type MenuItem<T> = {\n index: number\n key: string\n onRun: (ctx: Ctx) => void\n} & T\n\ntype WithRange<T, HasIndex extends true | false = true> = HasIndex extends true\n ? T & { range: [start: number, end: number] }\n : T\n\nexport type MenuItemGroup<T, HasIndex extends true | false = true> = WithRange<\n {\n key: string\n label: string\n items: HasIndex extends true ? MenuItem<T>[] : Omit<MenuItem<T>, 'index'>[]\n },\n HasIndex\n>\n\nexport class GroupBuilder<T> {\n #groups: MenuItemGroup<T, false>[] = []\n\n clear = () => {\n this.#groups = []\n return this\n }\n\n #getGroupInstance = (group: MenuItemGroup<T, false>) => {\n const groupInstance = {\n group,\n addItem: (key: string, item: Omit<MenuItem<T>, 'key' | 'index'>) => {\n const data = { ...item, key } as MenuItem<T>\n group.items.push(data)\n return groupInstance\n },\n clear: () => {\n group.items = []\n return groupInstance\n },\n }\n return groupInstance\n }\n\n addGroup = (key: string, label: string) => {\n const items: Omit<MenuItem<T>, 'index'>[] = []\n const group: MenuItemGroup<T, false> = {\n key,\n label,\n items,\n }\n this.#groups.push(group)\n\n return this.#getGroupInstance(group)\n }\n\n getGroup = (key: string) => {\n const group = this.#groups.find((group) => group.key === key)\n if (!group) throw new Error(`Group with key ${key} not found`)\n\n return this.#getGroupInstance(group)\n }\n\n build = () => {\n return this.#groups\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n addBlockTypeCommand,\n blockquoteSchema,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport { createTable } from '@milkdown/kit/preset/gfm'\n\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { SlashMenuItem } from './utils'\n\nimport { useCrepeFeatures } from '../../../core/slice'\nimport { CrepeFeature } from '../../../feature'\nimport {\n bulletListIcon,\n codeIcon,\n dividerIcon,\n functionsIcon,\n h1Icon,\n h2Icon,\n h3Icon,\n h4Icon,\n h5Icon,\n h6Icon,\n imageIcon,\n orderedListIcon,\n quoteIcon,\n tableIcon,\n textIcon,\n todoListIcon,\n} from '../../../icons'\nimport { GroupBuilder, type MenuItemGroup } from '../../../utils/group-builder'\n\nexport function getGroups(\n filter?: string,\n config?: BlockEditFeatureConfig,\n ctx?: Ctx\n) {\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n const isImageBlockEnabled = flags?.includes(CrepeFeature.ImageBlock)\n const isTableEnabled = flags?.includes(CrepeFeature.Table)\n\n const groupBuilder = new GroupBuilder<SlashMenuItem>()\n if (config?.textGroup !== null) {\n const textGroup = groupBuilder.addGroup(\n 'text',\n config?.textGroup?.label ?? 'Text'\n )\n if (config?.textGroup?.text !== null) {\n textGroup.addItem('text', {\n label: config?.textGroup?.text?.label ?? 'Text',\n icon: config?.textGroup?.text?.icon ?? textIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const paragraph = paragraphSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph,\n })\n },\n })\n }\n\n if (config?.textGroup?.h1 !== null) {\n textGroup.addItem('h1', {\n label: config?.textGroup?.h1?.label ?? 'Heading 1',\n icon: config?.textGroup?.h1?.icon ?? h1Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h2 !== null) {\n textGroup.addItem('h2', {\n label: config?.textGroup?.h2?.label ?? 'Heading 2',\n icon: config?.textGroup?.h2?.icon ?? h2Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h3 !== null) {\n textGroup.addItem('h3', {\n label: config?.textGroup?.h3?.label ?? 'Heading 3',\n icon: config?.textGroup?.h3?.icon ?? h3Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h4 !== null) {\n textGroup.addItem('h4', {\n label: config?.textGroup?.h4?.label ?? 'Heading 4',\n icon: config?.textGroup?.h4?.icon ?? h4Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h5 !== null) {\n textGroup.addItem('h5', {\n label: config?.textGroup?.h5?.label ?? 'Heading 5',\n icon: config?.textGroup?.h5?.icon ?? h5Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h6 !== null) {\n textGroup.addItem('h6', {\n label: config?.textGroup?.h6?.label ?? 'Heading 6',\n icon: config?.textGroup?.h6?.icon ?? h6Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.quote !== null) {\n textGroup.addItem('quote', {\n label: config?.textGroup?.quote?.label ?? 'Quote',\n icon: config?.textGroup?.quote?.icon ?? quoteIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const blockquote = blockquoteSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote,\n })\n },\n })\n }\n\n if (config?.textGroup?.divider !== null) {\n textGroup.addItem('divider', {\n label: config?.textGroup?.divider?.label ?? 'Divider',\n icon: config?.textGroup?.divider?.icon ?? dividerIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const hr = hrSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr,\n })\n },\n })\n }\n }\n\n if (config?.listGroup !== null) {\n const listGroup = groupBuilder.addGroup(\n 'list',\n config?.listGroup?.label ?? 'List'\n )\n if (config?.listGroup?.bulletList !== null) {\n listGroup.addItem('bullet-list', {\n label: config?.listGroup?.bulletList?.label ?? 'Bullet List',\n icon: config?.listGroup?.bulletList?.icon ?? bulletListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const bulletList = bulletListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList,\n })\n },\n })\n }\n\n if (config?.listGroup?.orderedList !== null) {\n listGroup.addItem('ordered-list', {\n label: config?.listGroup?.orderedList?.label ?? 'Ordered List',\n icon: config?.listGroup?.orderedList?.icon ?? orderedListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const orderedList = orderedListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList,\n })\n },\n })\n }\n\n if (config?.listGroup?.taskList !== null) {\n listGroup.addItem('task-list', {\n label: config?.listGroup?.taskList?.label ?? 'Task List',\n icon: config?.listGroup?.taskList?.icon ?? todoListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const listItem = listItemSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false },\n })\n },\n })\n }\n }\n\n if (config?.advancedGroup !== null) {\n const advancedGroup = groupBuilder.addGroup(\n 'advanced',\n config?.advancedGroup?.label ?? 'Advanced'\n )\n\n if (config?.advancedGroup?.image !== null && isImageBlockEnabled) {\n advancedGroup.addItem('image', {\n label: config?.advancedGroup?.image?.label ?? 'Image',\n icon: config?.advancedGroup?.image?.icon ?? imageIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const imageBlock = imageBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.codeBlock !== null) {\n advancedGroup.addItem('code', {\n label: config?.advancedGroup?.codeBlock?.label ?? 'Code',\n icon: config?.advancedGroup?.codeBlock?.icon ?? codeIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.table !== null && isTableEnabled) {\n advancedGroup.addItem('table', {\n label: config?.advancedGroup?.table?.label ?? 'Table',\n icon: config?.advancedGroup?.table?.icon ?? tableIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const view = ctx.get(editorViewCtx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n\n // record the position before the table is inserted\n const { from } = view.state.selection\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx, 3, 3),\n })\n\n commands.call(selectTextNearPosCommand.key, {\n pos: from,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.math !== null && isLatexEnabled) {\n advancedGroup.addItem('math', {\n label: config?.advancedGroup?.math?.label ?? 'Math',\n icon: config?.advancedGroup?.math?.icon ?? functionsIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: 'LaTex' },\n })\n },\n })\n }\n }\n\n config?.buildMenu?.(groupBuilder)\n\n let groups = groupBuilder.build()\n\n if (filter) {\n groups = groups\n .map((group) => {\n const items = group.items.filter((item) =>\n item.label.toLowerCase().includes(filter.toLowerCase())\n )\n\n return {\n ...group,\n items,\n }\n })\n .filter((group) => group.items.length > 0)\n }\n\n const items = groups.flatMap((groups) => groups.items)\n items.forEach((item, index) => {\n Object.assign(item, { index })\n })\n\n groups.reduce((acc, group) => {\n const end = acc + group.items.length\n Object.assign(group, {\n range: [acc, end],\n })\n return end\n }, 0)\n\n return {\n groups: groups as MenuItemGroup<SlashMenuItem>[],\n size: items.length,\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n onUnmounted,\n ref,\n watch,\n watchEffect,\n type Ref,\n h,\n} from 'vue'\n\nimport type { BlockEditFeatureConfig } from '..'\n\nimport { getGroups } from './config'\n\nh\n\ntype MenuProps = {\n ctx: Ctx\n show: Ref<boolean>\n filter: Ref<string>\n hide: () => void\n config?: BlockEditFeatureConfig\n}\n\nexport const Menu = defineComponent<MenuProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n filter: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref<HTMLElement>()\n const groupInfo = computed(() => getGroups(filter.value, config, ctx))\n const hoverIndex = ref(0)\n const prevMousePosition = ref({ x: -999, y: -999 })\n\n const onPointerMove = (e: MouseEvent) => {\n const { x, y } = e\n prevMousePosition.value = { x, y }\n }\n\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value\n if (size === 0 && show.value) hide()\n else if (hoverIndex.value >= size) hoverIndex.value = 0\n })\n\n const onHover = (\n index: number | ((prev: number) => number),\n after?: (index: number) => void\n ) => {\n const prevHoverIndex = hoverIndex.value\n const next = typeof index === 'function' ? index(prevHoverIndex) : index\n after?.(next)\n hoverIndex.value = next\n }\n\n const scrollToIndex = (index: number) => {\n const target = host.value?.querySelector<HTMLElement>(\n `[data-index=\"${index}\"]`\n )\n const scrollRoot = host.value?.querySelector<HTMLElement>('.menu-groups')\n\n if (!target || !scrollRoot) return\n\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop\n }\n\n const runByIndex = (index: number) => {\n const item = groupInfo.value.groups\n .flatMap((group) => group.items)\n .at(index)\n if (item && ctx) item.onRun(ctx)\n\n hide()\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n const { size, groups } = groupInfo.value\n if (e.key === 'Escape') {\n e.preventDefault()\n hide?.()\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return onHover(\n (index) => (index < size - 1 ? index + 1 : index),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return onHover(\n (index) => (index <= 0 ? index : index - 1),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const prevGroup = groups[groups.indexOf(group) - 1]\n if (!prevGroup) return index\n\n return prevGroup.range[1] - 1\n }, scrollToIndex)\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const nextGroup = groups[groups.indexOf(group) + 1]\n if (!nextGroup) return index\n\n return nextGroup.range[0]\n }, scrollToIndex)\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n runByIndex(hoverIndex.value)\n }\n }\n\n const getOnPointerEnter = (index: number) => (e: MouseEvent) => {\n const prevPos = prevMousePosition.value\n if (!prevPos) return\n\n const { x, y } = e\n if (x === prevPos.x && y === prevPos.y) return\n\n onHover(index)\n }\n\n watchEffect(() => {\n const isShown = show.value\n if (isShown) {\n window.addEventListener('keydown', onKeydown, { capture: true })\n } else {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n }\n })\n onUnmounted(() => {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n })\n\n return () => {\n return (\n <div ref={host} onPointerdown={(e) => e.preventDefault()}>\n <nav class=\"tab-group\">\n <ul>\n {groupInfo.value.groups.map((group) => (\n <li\n key={group.key}\n onPointerdown={() => onHover(group.range[0], scrollToIndex)}\n class={\n hoverIndex.value >= group.range[0] &&\n hoverIndex.value < group.range[1]\n ? 'selected'\n : ''\n }\n >\n {group.label}\n </li>\n ))}\n </ul>\n </nav>\n <div class=\"menu-groups\" onPointermove={onPointerMove}>\n {groupInfo.value.groups.map((group) => (\n <div key={group.key} class=\"menu-group\">\n <h6>{group.label}</h6>\n <ul>\n {group.items.map((item) => (\n <li\n key={item.key}\n data-index={item.index}\n class={hoverIndex.value === item.index ? 'hover' : ''}\n onPointerenter={getOnPointerEnter(item.index)}\n onPointerdown={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.add('active')\n }}\n onPointerup={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.remove('active')\n runByIndex(item.index)\n }}\n >\n <Icon icon={item.icon} />\n <span>{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'\nimport {\n TextSelection,\n type PluginView,\n type Selection,\n} from '@milkdown/kit/prose/state'\nimport { $ctx } from '@milkdown/kit/utils'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { isInCodeBlock, isInList } from '../../../utils'\nimport { Menu } from './component'\n\nexport const menu = slashFactory('CREPE_MENU')\n\nexport interface MenuAPI {\n show: (pos: number) => void\n hide: () => void\n}\n\nexport const menuAPI = $ctx(\n {\n show: () => {},\n hide: () => {},\n } as MenuAPI,\n 'menuAPICtx'\n)\n\nexport function configureMenu(ctx: Ctx, config?: BlockEditFeatureConfig) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config),\n })\n}\n\nclass MenuView implements PluginView {\n readonly #content: HTMLElement\n readonly #app: App\n readonly #filter: Ref<string>\n readonly #slashProvider: SlashProvider\n #programmaticallyPos: number | null = null\n\n constructor(ctx: Ctx, view: EditorView, config?: BlockEditFeatureConfig) {\n const content = document.createElement('div')\n content.classList.add('milkdown-slash-menu')\n const show = ref(false)\n\n const filter = ref('')\n this.#filter = filter\n\n const hide = this.hide\n\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide,\n })\n this.#app = app\n app.mount(content)\n\n this.#content = content\n // oxlint-disable-next-line ts/no-this-alias\n const self = this\n this.#slashProvider = new SlashProvider({\n content: this.#content,\n debounce: 20,\n shouldShow(this: SlashProvider, view: EditorView) {\n if (\n isInCodeBlock(view.state.selection) ||\n isInList(view.state.selection)\n )\n return false\n\n const currentText = this.getContent(view, (node) =>\n ['paragraph', 'heading'].includes(node.type.name)\n )\n\n if (currentText == null) return false\n\n if (!isSelectionAtEndOfNode(view.state.selection)) {\n return false\n }\n\n const pos = self.#programmaticallyPos\n\n filter.value = currentText.startsWith('/')\n ? currentText.slice(1)\n : currentText\n\n if (typeof pos === 'number') {\n const maxSize = view.state.doc.nodeSize - 2\n const validPos = Math.min(pos, maxSize)\n if (\n view.state.doc.resolve(validPos).node() !==\n view.state.doc.resolve(view.state.selection.from).node()\n ) {\n self.#programmaticallyPos = null\n\n return false\n }\n\n return true\n }\n\n if (!currentText.startsWith('/')) return false\n\n return true\n },\n offset: 10,\n })\n\n this.#slashProvider.onShow = () => {\n show.value = true\n }\n this.#slashProvider.onHide = () => {\n show.value = false\n }\n this.update(view)\n\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide(),\n })\n }\n\n update = (view: EditorView) => {\n this.#slashProvider.update(view)\n }\n\n show = (pos: number) => {\n this.#programmaticallyPos = pos\n this.#filter.value = ''\n this.#slashProvider.show()\n }\n\n hide = () => {\n this.#programmaticallyPos = null\n this.#slashProvider.hide()\n }\n\n destroy = () => {\n this.#slashProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n}\n\nfunction isSelectionAtEndOfNode(selection: Selection) {\n if (!(selection instanceof TextSelection)) return false\n\n const { $head } = selection\n const parent = $head.parent\n const offset = $head.parentOffset\n\n return offset === parent.content.size\n}\n","import { Icon } from '@milkdown/kit/component'\nimport { defineComponent, ref, h, Fragment } from 'vue'\n\nh\nFragment\n\nexport interface BlockHandleProps {\n onAdd: () => void\n addIcon: string\n handleIcon: string\n}\n\nexport const BlockHandle = defineComponent<BlockHandleProps>({\n props: {\n onAdd: {\n type: Function,\n required: true,\n },\n addIcon: {\n type: String,\n required: true,\n },\n handleIcon: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const addButton = ref<HTMLDivElement>()\n\n return () => {\n return (\n <>\n <div\n ref={addButton}\n class=\"operation-item\"\n onPointerdown={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.add('active')\n }}\n onPointerup={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.remove('active')\n props.onAdd()\n }}\n >\n <Icon icon={props.addIcon} />\n </div>\n <div class=\"operation-item\">\n <Icon icon={props.handleIcon} />\n </div>\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport {\n BlockProvider,\n block,\n blockConfig,\n type BlockProviderOptions,\n} from '@milkdown/kit/plugin/block'\nimport { paragraphSchema } from '@milkdown/kit/preset/commonmark'\nimport { findParent } from '@milkdown/kit/prose'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, type App } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { menuIcon, plusIcon } from '../../../icons'\nimport { menuAPI } from '../menu'\nimport { BlockHandle } from './component'\n\nexport class BlockHandleView implements PluginView {\n #content: HTMLElement\n #provider: BlockProvider\n #app: App\n readonly #ctx: Ctx\n\n constructor(ctx: Ctx, config?: BlockEditFeatureConfig) {\n this.#ctx = ctx\n const content = document.createElement('div')\n content.classList.add('milkdown-block-handle')\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: config?.handleAddIcon ?? plusIcon,\n handleIcon: config?.handleDragIcon ?? menuIcon,\n })\n app.mount(content)\n this.#app = app\n this.#content = content\n const blockProviderOptions = config?.blockHandle ?? {}\n this.#provider = new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === 'heading') return 'left'\n\n let totalDescendant = 0\n active.node.descendants((node) => {\n totalDescendant += node.childCount\n })\n const dom = active.el\n const domRect = dom.getBoundingClientRect()\n const handleRect = blockDom.getBoundingClientRect()\n const style = window.getComputedStyle(dom)\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n const height = domRect.height - paddingTop - paddingBottom\n const handleHeight = handleRect.height\n return totalDescendant > 2 || handleHeight < height\n ? 'left-start'\n : 'left'\n },\n ...(blockProviderOptions as Partial<BlockProviderOptions>),\n })\n this.update()\n }\n\n update = () => {\n this.#provider.update()\n }\n\n destroy = () => {\n this.#provider.destroy()\n this.#content.remove()\n this.#app.unmount()\n }\n\n onAdd = () => {\n const ctx = this.#ctx\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus()) view.focus()\n\n const { state, dispatch } = view\n const active = this.#provider.active\n if (!active) return\n\n const $pos = active.$pos\n const pos = $pos.pos + active.node.nodeSize\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create())\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n dispatch(tr.scrollIntoView())\n\n this.#provider.hide()\n ctx.get(menuAPI.key).show(tr.selection.from)\n }\n}\n\nexport function configureBlockHandle(\n ctx: Ctx,\n config?: BlockEditFeatureConfig\n) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent((node) =>\n ['table', 'blockquote', 'math_inline'].includes(node.type.name)\n )(pos)\n if (filter) return false\n\n return true\n },\n })\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config),\n })\n}\n","import { block, type BlockProviderOptions } from '@milkdown/kit/plugin/block'\n\nimport type { DeepPartial } from '../../utils'\nimport type { GroupBuilder } from '../../utils/group-builder'\nimport type { DefineFeature } from '../shared'\nimport type { SlashMenuItem } from './menu/utils'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\nimport { configureBlockHandle } from './handle'\nimport { configureMenu, menu, menuAPI } from './menu'\n\ninterface BlockEditConfig {\n handleAddIcon: string\n handleDragIcon: string\n buildMenu: (builder: GroupBuilder<SlashMenuItem>) => void\n\n blockHandle: Pick<\n BlockProviderOptions,\n | 'shouldShow'\n | 'getOffset'\n | 'getPosition'\n | 'getPlacement'\n | 'middleware'\n | 'floatingUIOptions'\n | 'root'\n >\n\n textGroup: {\n label: string\n text: {\n label: string\n icon: string\n } | null\n h1: {\n label: string\n icon: string\n } | null\n h2: {\n label: string\n icon: string\n } | null\n h3: {\n label: string\n icon: string\n } | null\n h4: {\n label: string\n icon: string\n } | null\n h5: {\n label: string\n icon: string\n } | null\n h6: {\n label: string\n icon: string\n } | null\n quote: {\n label: string\n icon: string\n } | null\n divider: {\n label: string\n icon: string\n } | null\n } | null\n\n listGroup: {\n label: string\n bulletList: {\n label: string\n icon: string\n } | null\n orderedList: {\n label: string\n icon: string\n } | null\n taskList: {\n label: string\n icon: string\n } | null\n } | null\n\n advancedGroup: {\n label: string\n image: {\n label: string\n icon: string\n } | null\n codeBlock: {\n label: string\n icon: string\n } | null\n table: {\n label: string\n icon: string\n } | null\n math: {\n label: string\n icon: string\n } | null\n } | null\n}\n\nexport type BlockEditFeatureConfig = DeepPartial<BlockEditConfig>\n\nexport const blockEdit: DefineFeature<BlockEditFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.BlockEdit))\n .config((ctx) => configureBlockHandle(ctx, config))\n .config((ctx) => configureMenu(ctx, config))\n .use(menuAPI)\n .use(block)\n .use(menu)\n}\n"],"names":["createSlice","CrepeFeature","__privateAdd","__privateSet","__privateGet","group","ctx","commandsCtx","paragraphSchema","clearTextInCurrentBlockCommand","setBlockTypeCommand","headingSchema","blockquoteSchema","wrapInBlockTypeCommand","hrSchema","addBlockTypeCommand","bulletListSchema","orderedListSchema","listItemSchema","imageBlock","imageBlockSchema","codeBlockSchema","editorViewCtx","createTable","selectTextNearPosCommand","items","groups","defineComponent","ref","computed","watch","watchEffect","onUnmounted","h","Icon","_content","_app","slashFactory","$ctx","createApp","SlashProvider","view","TextSelection","Fragment","state","BlockProvider","blockConfig","findParent","block"],"mappings":"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A,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA;AAmDE,EAAA,MAAM,KAAA,GA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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/core/slice.ts","../../../../src/feature/index.ts","../../../../src/icons/bullet-list.ts","../../../../src/icons/code.ts","../../../../src/icons/divider.ts","../../../../src/icons/h1.ts","../../../../src/icons/h2.ts","../../../../src/icons/h3.ts","../../../../src/icons/h4.ts","../../../../src/icons/h5.ts","../../../../src/icons/h6.ts","../../../../src/icons/image.ts","../../../../src/icons/menu.ts","../../../../src/icons/ordered-list.ts","../../../../src/icons/plus.ts","../../../../src/icons/quote.ts","../../../../src/icons/table.ts","../../../../src/icons/text.ts","../../../../src/icons/todo-list.ts","../../../../src/icons/functions.ts","../../../../src/utils/checker.ts","../../../../src/utils/group-builder.ts","../../../../src/feature/block-edit/menu/config.ts","../../../../src/feature/block-edit/menu/component.tsx","../../../../src/feature/block-edit/menu/index.ts","../../../../src/feature/block-edit/handle/component.tsx","../../../../src/feature/block-edit/handle/index.ts","../../../../src/feature/block-edit/index.ts"],"sourcesContent":["import { createSlice, type Ctx } from '@milkdown/kit/ctx'\n\nimport type { CrepeFeature } from '../feature'\nimport type { CrepeBuilder } from './builder'\n\n/// @internal\n/// The feature flags context.\n/// ⚠️ Most of the time, you should use `useCrepeFeatures` to get the features.\nexport const FeaturesCtx = createSlice([] as CrepeFeature[], 'FeaturesCtx')\n\n/// @internal\n/// The crepe editor context.\n/// ⚠️ Most of the time, you should use `useCrepe` to get the crepe editor instance.\nexport const CrepeCtx = createSlice({} as CrepeBuilder, 'CrepeCtx')\n\n/// The crepe editor context.\n/// You can use this context to access the crepe editor instance within Milkdown plugins.\n/// ```ts\n/// import { crepeCtx } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// return () => {\n/// const crepe = useCrepe(ctx)\n/// crepe.setReadonly(true)\n/// }\n/// }\n/// ```\nexport function useCrepe(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.get<CrepeBuilder, 'CrepeCtx'>('CrepeCtx')\n}\n\n/// Check the enabled FeatureFlags\n/// ```ts\n/// import { useCrepeFeatures } from '@milkdown/crepe'\n/// const plugin = (ctx: Ctx) => {\n/// const features = useCrepeFeatures(ctx)\n/// if (features.get().includes(CrepeFeature.CodeMirror)) {\n/// // Do something with CodeMirror\n/// }\n/// }\nexport function useCrepeFeatures(ctx: Ctx) {\n // We should use string slice here to avoid the slice to be bundled in multiple entries\n return ctx.use<CrepeFeature[], 'FeaturesCtx'>('FeaturesCtx')\n}\n\n/// @internal\nexport function crepeFeatureConfig(feature: CrepeFeature) {\n return (ctx: Ctx) => {\n useCrepeFeatures(ctx).update((features) => {\n if (features.includes(feature)) {\n return features\n }\n return [...features, feature]\n })\n }\n}\n","import type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { LatexFeatureConfig } from './latex'\nimport type { LinkTooltipFeatureConfig } from './link-tooltip'\nimport type { ListItemFeatureConfig } from './list-item'\nimport type { PlaceholderFeatureConfig } from './placeholder'\nimport type { TableFeatureConfig } from './table'\nimport type { ToolbarFeatureConfig } from './toolbar'\n\n/// The crepe editor feature flags.\n/// Every feature is enabled by default.\n/// Every feature is a string literal type.\nexport enum CrepeFeature {\n /// Syntax highlighting and editing for code blocks with language support, theme customization, and preview capabilities.\n CodeMirror = 'code-mirror',\n\n /// Support for bullet lists, ordered lists, and todo lists with customizable icons and formatting.\n ListItem = 'list-item',\n\n /// Enhanced link editing and preview with customizable tooltips, edit/remove actions, and copy functionality.\n LinkTooltip = 'link-tooltip',\n\n /// Enhanced cursor experience with drop cursor and gap cursor for better content placement.\n Cursor = 'cursor',\n\n /// Image upload and management with resizing, captions, and support for both inline and block images.\n ImageBlock = 'image-block',\n\n /// Drag-and-drop block management and slash commands for quick content insertion and organization.\n BlockEdit = 'block-edit',\n\n /// Formatting toolbar for selected text with customizable icons and actions.\n Toolbar = 'toolbar',\n\n /// Document or block level placeholders to guide users when content is empty.\n Placeholder = 'placeholder',\n\n /// Full-featured table editing with row/column management, alignment options, and drag-and-drop functionality.\n Table = 'table',\n\n /// Mathematical formula support with both inline and block math rendering using KaTeX.\n Latex = 'latex',\n}\n\nexport interface CrepeFeatureConfig {\n [CrepeFeature.Cursor]?: CursorFeatureConfig\n [CrepeFeature.ListItem]?: ListItemFeatureConfig\n [CrepeFeature.LinkTooltip]?: LinkTooltipFeatureConfig\n [CrepeFeature.ImageBlock]?: ImageBlockFeatureConfig\n [CrepeFeature.BlockEdit]?: BlockEditFeatureConfig\n [CrepeFeature.Placeholder]?: PlaceholderFeatureConfig\n [CrepeFeature.Toolbar]?: ToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n}\n\nexport const defaultFeatures: Record<CrepeFeature, boolean> = {\n [CrepeFeature.Cursor]: true,\n [CrepeFeature.ListItem]: true,\n [CrepeFeature.LinkTooltip]: true,\n [CrepeFeature.ImageBlock]: true,\n [CrepeFeature.BlockEdit]: true,\n [CrepeFeature.Placeholder]: true,\n [CrepeFeature.Toolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n}\n","export const bulletListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8070)\">\n <path\n d=\"M4 10.5C3.17 10.5 2.5 11.17 2.5 12C2.5 12.83 3.17 13.5 4 13.5C4.83 13.5 5.5 12.83 5.5 12C5.5 11.17 4.83 10.5 4 10.5ZM4 4.5C3.17 4.5 2.5 5.17 2.5 6C2.5 6.83 3.17 7.5 4 7.5C4.83 7.5 5.5 6.83 5.5 6C5.5 5.17 4.83 4.5 4 4.5ZM4 16.5C3.17 16.5 2.5 17.18 2.5 18C2.5 18.82 3.18 19.5 4 19.5C4.82 19.5 5.5 18.82 5.5 18C5.5 17.18 4.83 16.5 4 16.5ZM8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19ZM8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13ZM7 6C7 6.55 7.45 7 8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8070\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const codeIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8081)\">\n <path\n d=\"M9.4 16.6L4.8 12L9.4 7.4L8 6L2 12L8 18L9.4 16.6ZM14.6 16.6L19.2 12L14.6 7.4L16 6L22 12L16 18L14.6 16.6Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8081\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const dividerIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7900)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19 13H5C4.45 13 4 12.55 4 12C4 11.45 4.45 11 5 11H19C19.55 11 20 11.45 20 12C20 12.55 19.55 13 19 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7900\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h1Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5553)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM12 17H14V7H10V9H12V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5553\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h2Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5559)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15H11V13H13C14.1 13 15 12.11 15 11V9C15 7.89 14.1 7 13 7H9V9H13V11H11C9.9 11 9 11.89 9 13V17H15V15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5559\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h3Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5565)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13.5C15 12.67 14.33 12 13.5 12C14.33 12 15 11.33 15 10.5V9C15 7.89 14.1 7 13 7H9V9H13V11H11V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5565\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h4Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7757)\">\n <path\n d=\"M19.04 3H5.04004C3.94004 3 3.04004 3.9 3.04004 5V19C3.04004 20.1 3.94004 21 5.04004 21H19.04C20.14 21 21.04 20.1 21.04 19V5C21.04 3.9 20.14 3 19.04 3ZM19.04 19H5.04004V5H19.04V19ZM13.04 17H15.04V7H13.04V11H11.04V7H9.04004V13H13.04V17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7757\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h5Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7760)\">\n <path\n d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H9V13H13V15H9V17H13C14.1 17 15 16.11 15 15Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7760\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const h6Icon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7763)\">\n <path\n d=\"M11 17H13C14.1 17 15 16.11 15 15V13C15 11.89 14.1 11 13 11H11V9H15V7H11C9.9 7 9 7.89 9 9V15C9 16.11 9.9 17 11 17ZM11 13H13V15H11V13ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7763\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const imageIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8075)\">\n <path\n d=\"M19 5V19H5V5H19ZM19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM14.14 11.86L11.14 15.73L9 13.14L6 17H18L14.14 11.86Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8075\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const menuIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7680)\">\n <path\n d=\"M11 18C11 19.1 10.1 20 9 20C7.9 20 7 19.1 7 18C7 16.9 7.9 16 9 16C10.1 16 11 16.9 11 18ZM9 10C7.9 10 7 10.9 7 12C7 13.1 7.9 14 9 14C10.1 14 11 13.1 11 12C11 10.9 10.1 10 9 10ZM9 4C7.9 4 7 4.9 7 6C7 7.1 7.9 8 9 8C10.1 8 11 7.1 11 6C11 4.9 10.1 4 9 4ZM15 8C16.1 8 17 7.1 17 6C17 4.9 16.1 4 15 4C13.9 4 13 4.9 13 6C13 7.1 13.9 8 15 8ZM15 10C13.9 10 13 10.9 13 12C13 13.1 13.9 14 15 14C16.1 14 17 13.1 17 12C17 10.9 16.1 10 15 10ZM15 16C13.9 16 13 16.9 13 18C13 19.1 13.9 20 15 20C16.1 20 17 19.1 17 18C17 16.9 16.1 16 15 16Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7680\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const orderedListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8067)\">\n <path\n d=\"M8 7H20C20.55 7 21 6.55 21 6C21 5.45 20.55 5 20 5H8C7.45 5 7 5.45 7 6C7 6.55 7.45 7 8 7ZM20 17H8C7.45 17 7 17.45 7 18C7 18.55 7.45 19 8 19H20C20.55 19 21 18.55 21 18C21 17.45 20.55 17 20 17ZM20 11H8C7.45 11 7 11.45 7 12C7 12.55 7.45 13 8 13H20C20.55 13 21 12.55 21 12C21 11.45 20.55 11 20 11ZM4.5 16H2.5C2.22 16 2 16.22 2 16.5C2 16.78 2.22 17 2.5 17H4V17.5H3.5C3.22 17.5 3 17.72 3 18C3 18.28 3.22 18.5 3.5 18.5H4V19H2.5C2.22 19 2 19.22 2 19.5C2 19.78 2.22 20 2.5 20H4.5C4.78 20 5 19.78 5 19.5V16.5C5 16.22 4.78 16 4.5 16ZM2.5 5H3V7.5C3 7.78 3.22 8 3.5 8C3.78 8 4 7.78 4 7.5V4.5C4 4.22 3.78 4 3.5 4H2.5C2.22 4 2 4.22 2 4.5C2 4.78 2.22 5 2.5 5ZM4.5 10H2.5C2.22 10 2 10.22 2 10.5C2 10.78 2.22 11 2.5 11H3.8L2.12 12.96C2.04 13.05 2 13.17 2 13.28V13.5C2 13.78 2.22 14 2.5 14H4.5C4.78 14 5 13.78 5 13.5C5 13.22 4.78 13 4.5 13H3.2L4.88 11.04C4.96 10.95 5 10.83 5 10.72V10.5C5 10.22 4.78 10 4.5 10Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8067\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const plusIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_971_7676)\">\n <path\n d=\"M18 13H13V18C13 18.55 12.55 19 12 19C11.45 19 11 18.55 11 18V13H6C5.45 13 5 12.55 5 12C5 11.45 5.45 11 6 11H11V6C11 5.45 11.45 5 12 5C12.55 5 13 5.45 13 6V11H18C18.55 11 19 11.45 19 12C19 12.55 18.55 13 18 13Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_971_7676\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const quoteIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_7897)\">\n <path\n d=\"M7.17 17C7.68 17 8.15 16.71 8.37 16.26L9.79 13.42C9.93 13.14 10 12.84 10 12.53V8C10 7.45 9.55 7 9 7H5C4.45 7 4 7.45 4 8V12C4 12.55 4.45 13 5 13H7L5.97 15.06C5.52 15.95 6.17 17 7.17 17ZM17.17 17C17.68 17 18.15 16.71 18.37 16.26L19.79 13.42C19.93 13.14 20 12.84 20 12.53V8C20 7.45 19.55 7 19 7H15C14.45 7 14 7.45 14 8V12C14 12.55 14.45 13 15 13H17L15.97 15.06C15.52 15.95 16.17 17 17.17 17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_7897\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const tableIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_977_8078)\">\n <path\n d=\"M20 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H20C21.1 21 22 20.1 22 19V5C22 3.9 21.1 3 20 3ZM20 5V8H5V5H20ZM15 19H10V10H15V19ZM5 10H8V19H5V10ZM17 19V10H20V19H17Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_977_8078\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const textIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <g clip-path=\"url(#clip0_992_5547)\">\n <path\n d=\"M5 5.5C5 6.33 5.67 7 6.5 7H10.5V17.5C10.5 18.33 11.17 19 12 19C12.83 19 13.5 18.33 13.5 17.5V7H17.5C18.33 7 19 6.33 19 5.5C19 4.67 18.33 4 17.5 4H6.5C5.67 4 5 4.67 5 5.5Z\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_992_5547\">\n <rect width=\"24\" height=\"24\" />\n </clipPath>\n </defs>\n </svg>\n`\n","export const todoListIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M5.66936 16.3389L9.39244 12.6158C9.54115 12.4671 9.71679 12.3937 9.91936 12.3957C10.1219 12.3976 10.2975 12.4761 10.4463 12.6312C10.5847 12.7823 10.654 12.9585 10.654 13.1599C10.654 13.3613 10.5847 13.5363 10.4463 13.6851L6.32704 17.8197C6.14627 18.0004 5.93538 18.0908 5.69436 18.0908C5.45333 18.0908 5.24243 18.0004 5.06166 17.8197L3.01744 15.7754C2.87899 15.637 2.81136 15.4629 2.81456 15.2533C2.81776 15.0437 2.88859 14.8697 3.02706 14.7312C3.16551 14.5928 3.34008 14.5235 3.55076 14.5235C3.76144 14.5235 3.93494 14.5928 4.07126 14.7312L5.66936 16.3389ZM5.66936 8.72359L9.39244 5.00049C9.54115 4.85177 9.71679 4.77838 9.91936 4.78031C10.1219 4.78223 10.2975 4.86075 10.4463 5.01586C10.5847 5.16691 10.654 5.34314 10.654 5.54454C10.654 5.74592 10.5847 5.92097 10.4463 6.06969L6.32704 10.2043C6.14627 10.3851 5.93538 10.4755 5.69436 10.4755C5.45333 10.4755 5.24243 10.3851 5.06166 10.2043L3.01744 8.16009C2.87899 8.02162 2.81136 7.84759 2.81456 7.63799C2.81776 7.42837 2.88859 7.25433 3.02706 7.11586C3.16551 6.97741 3.34008 6.90819 3.55076 6.90819C3.76144 6.90819 3.93494 6.97741 4.07126 7.11586L5.66936 8.72359ZM13.7597 16.5581C13.5472 16.5581 13.3691 16.4862 13.2253 16.3424C13.0816 16.1986 13.0097 16.0204 13.0097 15.8078C13.0097 15.5952 13.0816 15.4171 13.2253 15.2735C13.3691 15.13 13.5472 15.0582 13.7597 15.0582H20.7597C20.9722 15.0582 21.1503 15.1301 21.2941 15.2739C21.4378 15.4177 21.5097 15.5959 21.5097 15.8085C21.5097 16.0211 21.4378 16.1992 21.2941 16.3427C21.1503 16.4863 20.9722 16.5581 20.7597 16.5581H13.7597ZM13.7597 8.94276C13.5472 8.94276 13.3691 8.87085 13.2253 8.72704C13.0816 8.58324 13.0097 8.40504 13.0097 8.19244C13.0097 7.97985 13.0816 7.80177 13.2253 7.65819C13.3691 7.5146 13.5472 7.44281 13.7597 7.44281H20.7597C20.9722 7.44281 21.1503 7.51471 21.2941 7.65851C21.4378 7.80233 21.5097 7.98053 21.5097 8.19311C21.5097 8.40571 21.4378 8.5838 21.2941 8.72739C21.1503 8.87097 20.9722 8.94276 20.7597 8.94276H13.7597Z\"\n />\n </svg>\n`\n","export const functionsIcon = `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"currentColor\"\n d=\"M7 19v-.808L13.096 12L7 5.808V5h10v1.25H9.102L14.727 12l-5.625 5.77H17V19z\"\n />\n </svg>\n`\n","import type { Selection } from '@milkdown/kit/prose/state'\n\nexport function isInCodeBlock(selection: Selection) {\n const type = selection.$from.parent.type\n return type.name === 'code_block'\n}\n\nexport function isInList(selection: Selection) {\n const type = selection.$from.node(selection.$from.depth - 1)?.type\n return type?.name === 'list_item'\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nexport type MenuItem<T> = {\n index: number\n key: string\n onRun: (ctx: Ctx) => void\n} & T\n\ntype WithRange<T, HasIndex extends true | false = true> = HasIndex extends true\n ? T & { range: [start: number, end: number] }\n : T\n\nexport type MenuItemGroup<T, HasIndex extends true | false = true> = WithRange<\n {\n key: string\n label: string\n items: HasIndex extends true ? MenuItem<T>[] : Omit<MenuItem<T>, 'index'>[]\n },\n HasIndex\n>\n\nexport class GroupBuilder<T> {\n #groups: MenuItemGroup<T, false>[] = []\n\n clear = () => {\n this.#groups = []\n return this\n }\n\n #getGroupInstance = (group: MenuItemGroup<T, false>) => {\n const groupInstance = {\n group,\n addItem: (key: string, item: Omit<MenuItem<T>, 'key' | 'index'>) => {\n const data = { ...item, key } as MenuItem<T>\n group.items.push(data)\n return groupInstance\n },\n clear: () => {\n group.items = []\n return groupInstance\n },\n }\n return groupInstance\n }\n\n addGroup = (key: string, label: string) => {\n const items: Omit<MenuItem<T>, 'index'>[] = []\n const group: MenuItemGroup<T, false> = {\n key,\n label,\n items,\n }\n this.#groups.push(group)\n\n return this.#getGroupInstance(group)\n }\n\n getGroup = (key: string) => {\n const group = this.#groups.find((group) => group.key === key)\n if (!group) throw new Error(`Group with key ${key} not found`)\n\n return this.#getGroupInstance(group)\n }\n\n build = () => {\n return this.#groups\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { imageBlockSchema } from '@milkdown/kit/component/image-block'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n addBlockTypeCommand,\n blockquoteSchema,\n bulletListSchema,\n clearTextInCurrentBlockCommand,\n codeBlockSchema,\n headingSchema,\n hrSchema,\n listItemSchema,\n orderedListSchema,\n paragraphSchema,\n selectTextNearPosCommand,\n setBlockTypeCommand,\n wrapInBlockTypeCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport { createTable } from '@milkdown/kit/preset/gfm'\n\nimport type { BlockEditFeatureConfig } from '../index'\nimport type { SlashMenuItem } from './utils'\n\nimport { useCrepeFeatures } from '../../../core/slice'\nimport { CrepeFeature } from '../../../feature'\nimport {\n bulletListIcon,\n codeIcon,\n dividerIcon,\n functionsIcon,\n h1Icon,\n h2Icon,\n h3Icon,\n h4Icon,\n h5Icon,\n h6Icon,\n imageIcon,\n orderedListIcon,\n quoteIcon,\n tableIcon,\n textIcon,\n todoListIcon,\n} from '../../../icons'\nimport { GroupBuilder, type MenuItemGroup } from '../../../utils/group-builder'\n\nexport function getGroups(\n filter?: string,\n config?: BlockEditFeatureConfig,\n ctx?: Ctx\n) {\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n const isImageBlockEnabled = flags?.includes(CrepeFeature.ImageBlock)\n const isTableEnabled = flags?.includes(CrepeFeature.Table)\n\n const groupBuilder = new GroupBuilder<SlashMenuItem>()\n if (config?.textGroup !== null) {\n const textGroup = groupBuilder.addGroup(\n 'text',\n config?.textGroup?.label ?? 'Text'\n )\n if (config?.textGroup?.text !== null) {\n textGroup.addItem('text', {\n label: config?.textGroup?.text?.label ?? 'Text',\n icon: config?.textGroup?.text?.icon ?? textIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const paragraph = paragraphSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: paragraph,\n })\n },\n })\n }\n\n if (config?.textGroup?.h1 !== null) {\n textGroup.addItem('h1', {\n label: config?.textGroup?.h1?.label ?? 'Heading 1',\n icon: config?.textGroup?.h1?.icon ?? h1Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 1,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h2 !== null) {\n textGroup.addItem('h2', {\n label: config?.textGroup?.h2?.label ?? 'Heading 2',\n icon: config?.textGroup?.h2?.icon ?? h2Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 2,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h3 !== null) {\n textGroup.addItem('h3', {\n label: config?.textGroup?.h3?.label ?? 'Heading 3',\n icon: config?.textGroup?.h3?.icon ?? h3Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 3,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h4 !== null) {\n textGroup.addItem('h4', {\n label: config?.textGroup?.h4?.label ?? 'Heading 4',\n icon: config?.textGroup?.h4?.icon ?? h4Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 4,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h5 !== null) {\n textGroup.addItem('h5', {\n label: config?.textGroup?.h5?.label ?? 'Heading 5',\n icon: config?.textGroup?.h5?.icon ?? h5Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 5,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.h6 !== null) {\n textGroup.addItem('h6', {\n label: config?.textGroup?.h6?.label ?? 'Heading 6',\n icon: config?.textGroup?.h6?.icon ?? h6Icon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const heading = headingSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: heading,\n attrs: {\n level: 6,\n },\n })\n },\n })\n }\n\n if (config?.textGroup?.quote !== null) {\n textGroup.addItem('quote', {\n label: config?.textGroup?.quote?.label ?? 'Quote',\n icon: config?.textGroup?.quote?.icon ?? quoteIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const blockquote = blockquoteSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: blockquote,\n })\n },\n })\n }\n\n if (config?.textGroup?.divider !== null) {\n textGroup.addItem('divider', {\n label: config?.textGroup?.divider?.label ?? 'Divider',\n icon: config?.textGroup?.divider?.icon ?? dividerIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const hr = hrSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: hr,\n })\n },\n })\n }\n }\n\n if (config?.listGroup !== null) {\n const listGroup = groupBuilder.addGroup(\n 'list',\n config?.listGroup?.label ?? 'List'\n )\n if (config?.listGroup?.bulletList !== null) {\n listGroup.addItem('bullet-list', {\n label: config?.listGroup?.bulletList?.label ?? 'Bullet List',\n icon: config?.listGroup?.bulletList?.icon ?? bulletListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const bulletList = bulletListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: bulletList,\n })\n },\n })\n }\n\n if (config?.listGroup?.orderedList !== null) {\n listGroup.addItem('ordered-list', {\n label: config?.listGroup?.orderedList?.label ?? 'Ordered List',\n icon: config?.listGroup?.orderedList?.icon ?? orderedListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const orderedList = orderedListSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: orderedList,\n })\n },\n })\n }\n\n if (config?.listGroup?.taskList !== null) {\n listGroup.addItem('task-list', {\n label: config?.listGroup?.taskList?.label ?? 'Task List',\n icon: config?.listGroup?.taskList?.icon ?? todoListIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const listItem = listItemSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(wrapInBlockTypeCommand.key, {\n nodeType: listItem,\n attrs: { checked: false },\n })\n },\n })\n }\n }\n\n if (config?.advancedGroup !== null) {\n const advancedGroup = groupBuilder.addGroup(\n 'advanced',\n config?.advancedGroup?.label ?? 'Advanced'\n )\n\n if (config?.advancedGroup?.image !== null && isImageBlockEnabled) {\n advancedGroup.addItem('image', {\n label: config?.advancedGroup?.image?.label ?? 'Image',\n icon: config?.advancedGroup?.image?.icon ?? imageIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const imageBlock = imageBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: imageBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.codeBlock !== null) {\n advancedGroup.addItem('code', {\n label: config?.advancedGroup?.codeBlock?.label ?? 'Code',\n icon: config?.advancedGroup?.codeBlock?.icon ?? codeIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(setBlockTypeCommand.key, {\n nodeType: codeBlock,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.table !== null && isTableEnabled) {\n advancedGroup.addItem('table', {\n label: config?.advancedGroup?.table?.label ?? 'Table',\n icon: config?.advancedGroup?.table?.icon ?? tableIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const view = ctx.get(editorViewCtx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n\n // record the position before the table is inserted\n const { from } = view.state.selection\n commands.call(addBlockTypeCommand.key, {\n nodeType: createTable(ctx, 3, 3),\n })\n\n commands.call(selectTextNearPosCommand.key, {\n pos: from,\n })\n },\n })\n }\n\n if (config?.advancedGroup?.math !== null && isLatexEnabled) {\n advancedGroup.addItem('math', {\n label: config?.advancedGroup?.math?.label ?? 'Math',\n icon: config?.advancedGroup?.math?.icon ?? functionsIcon,\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n const codeBlock = codeBlockSchema.type(ctx)\n\n commands.call(clearTextInCurrentBlockCommand.key)\n commands.call(addBlockTypeCommand.key, {\n nodeType: codeBlock,\n attrs: { language: 'LaTex' },\n })\n },\n })\n }\n }\n\n config?.buildMenu?.(groupBuilder)\n\n let groups = groupBuilder.build()\n\n if (filter) {\n groups = groups\n .map((group) => {\n const items = group.items.filter((item) =>\n item.label.toLowerCase().includes(filter.toLowerCase())\n )\n\n return {\n ...group,\n items,\n }\n })\n .filter((group) => group.items.length > 0)\n }\n\n const items = groups.flatMap((groups) => groups.items)\n items.forEach((item, index) => {\n Object.assign(item, { index })\n })\n\n groups.reduce((acc, group) => {\n const end = acc + group.items.length\n Object.assign(group, {\n range: [acc, end],\n })\n return end\n }, 0)\n\n return {\n groups: groups as MenuItemGroup<SlashMenuItem>[],\n size: items.length,\n }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n onUnmounted,\n ref,\n watch,\n watchEffect,\n type Ref,\n h,\n} from 'vue'\n\nimport type { BlockEditFeatureConfig } from '..'\n\nimport { getGroups } from './config'\n\nh\n\ntype MenuProps = {\n ctx: Ctx\n show: Ref<boolean>\n filter: Ref<string>\n hide: () => void\n config?: BlockEditFeatureConfig\n}\n\nexport const Menu = defineComponent<MenuProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n filter: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup({ ctx, show, filter, hide, config }) {\n const host = ref<HTMLElement>()\n const groupInfo = computed(() => getGroups(filter.value, config, ctx))\n const hoverIndex = ref(0)\n const prevMousePosition = ref({ x: -999, y: -999 })\n\n const onPointerMove = (e: MouseEvent) => {\n const { x, y } = e\n prevMousePosition.value = { x, y }\n }\n\n watch([groupInfo, show], () => {\n const { size } = groupInfo.value\n if (size === 0 && show.value) hide()\n else if (hoverIndex.value >= size) hoverIndex.value = 0\n })\n\n const onHover = (\n index: number | ((prev: number) => number),\n after?: (index: number) => void\n ) => {\n const prevHoverIndex = hoverIndex.value\n const next = typeof index === 'function' ? index(prevHoverIndex) : index\n after?.(next)\n hoverIndex.value = next\n }\n\n const scrollToIndex = (index: number) => {\n const target = host.value?.querySelector<HTMLElement>(\n `[data-index=\"${index}\"]`\n )\n const scrollRoot = host.value?.querySelector<HTMLElement>('.menu-groups')\n\n if (!target || !scrollRoot) return\n\n scrollRoot.scrollTop = target.offsetTop - scrollRoot.offsetTop\n }\n\n const runByIndex = (index: number) => {\n const item = groupInfo.value.groups\n .flatMap((group) => group.items)\n .at(index)\n if (item && ctx) item.onRun(ctx)\n\n hide()\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n const { size, groups } = groupInfo.value\n if (e.key === 'Escape') {\n e.preventDefault()\n hide?.()\n return\n }\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n return onHover(\n (index) => (index < size - 1 ? index + 1 : index),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n return onHover(\n (index) => (index <= 0 ? index : index - 1),\n scrollToIndex\n )\n }\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const prevGroup = groups[groups.indexOf(group) - 1]\n if (!prevGroup) return index\n\n return prevGroup.range[1] - 1\n }, scrollToIndex)\n }\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n return onHover((index) => {\n const group = groups.find(\n (group) => group.range[0] <= index && group.range[1] > index\n )\n if (!group) return index\n\n const nextGroup = groups[groups.indexOf(group) + 1]\n if (!nextGroup) return index\n\n return nextGroup.range[0]\n }, scrollToIndex)\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n runByIndex(hoverIndex.value)\n }\n }\n\n const getOnPointerEnter = (index: number) => (e: MouseEvent) => {\n const prevPos = prevMousePosition.value\n if (!prevPos) return\n\n const { x, y } = e\n if (x === prevPos.x && y === prevPos.y) return\n\n onHover(index)\n }\n\n watchEffect(() => {\n const isShown = show.value\n if (isShown) {\n window.addEventListener('keydown', onKeydown, { capture: true })\n } else {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n }\n })\n onUnmounted(() => {\n window.removeEventListener('keydown', onKeydown, { capture: true })\n })\n\n return () => {\n return (\n <div ref={host} onPointerdown={(e) => e.preventDefault()}>\n <nav class=\"tab-group\">\n <ul>\n {groupInfo.value.groups.map((group) => (\n <li\n key={group.key}\n onPointerdown={() => onHover(group.range[0], scrollToIndex)}\n class={\n hoverIndex.value >= group.range[0] &&\n hoverIndex.value < group.range[1]\n ? 'selected'\n : ''\n }\n >\n {group.label}\n </li>\n ))}\n </ul>\n </nav>\n <div class=\"menu-groups\" onPointermove={onPointerMove}>\n {groupInfo.value.groups.map((group) => (\n <div key={group.key} class=\"menu-group\">\n <h6>{group.label}</h6>\n <ul>\n {group.items.map((item) => (\n <li\n key={item.key}\n data-index={item.index}\n class={hoverIndex.value === item.index ? 'hover' : ''}\n onPointerenter={getOnPointerEnter(item.index)}\n onPointerdown={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.add('active')\n }}\n onPointerup={() => {\n host.value\n ?.querySelector(`[data-index=\"${item.index}\"]`)\n ?.classList.remove('active')\n runByIndex(item.index)\n }}\n >\n <Icon icon={item.icon} />\n <span>{item.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { SlashProvider, slashFactory } from '@milkdown/kit/plugin/slash'\nimport {\n TextSelection,\n type PluginView,\n type Selection,\n} from '@milkdown/kit/prose/state'\nimport { $ctx } from '@milkdown/kit/utils'\nimport { createApp, ref, type App, type Ref } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { isInCodeBlock, isInList } from '../../../utils'\nimport { Menu } from './component'\n\nexport const menu = slashFactory('CREPE_MENU')\n\nexport interface MenuAPI {\n show: (pos: number) => void\n hide: () => void\n}\n\nexport const menuAPI = $ctx(\n {\n show: () => {},\n hide: () => {},\n } as MenuAPI,\n 'menuAPICtx'\n)\n\nexport function configureMenu(ctx: Ctx, config?: BlockEditFeatureConfig) {\n ctx.set(menu.key, {\n view: (view) => new MenuView(ctx, view, config),\n })\n}\n\nclass MenuView implements PluginView {\n readonly #content: HTMLElement\n readonly #app: App\n readonly #filter: Ref<string>\n readonly #slashProvider: SlashProvider\n #programmaticallyPos: number | null = null\n\n constructor(ctx: Ctx, view: EditorView, config?: BlockEditFeatureConfig) {\n const content = document.createElement('div')\n content.classList.add('milkdown-slash-menu')\n const show = ref(false)\n\n const filter = ref('')\n this.#filter = filter\n\n const hide = this.hide\n\n const app = createApp(Menu, {\n ctx,\n config,\n show,\n filter,\n hide,\n })\n this.#app = app\n app.mount(content)\n\n this.#content = content\n // oxlint-disable-next-line ts/no-this-alias\n const self = this\n this.#slashProvider = new SlashProvider({\n content: this.#content,\n debounce: 20,\n shouldShow(this: SlashProvider, view: EditorView) {\n if (\n isInCodeBlock(view.state.selection) ||\n isInList(view.state.selection)\n )\n return false\n\n const currentText = this.getContent(view, (node) =>\n ['paragraph', 'heading'].includes(node.type.name)\n )\n\n if (currentText == null) return false\n\n if (!isSelectionAtEndOfNode(view.state.selection)) {\n return false\n }\n\n const pos = self.#programmaticallyPos\n\n filter.value = currentText.startsWith('/')\n ? currentText.slice(1)\n : currentText\n\n if (typeof pos === 'number') {\n const maxSize = view.state.doc.nodeSize - 2\n const validPos = Math.min(pos, maxSize)\n if (\n view.state.doc.resolve(validPos).node() !==\n view.state.doc.resolve(view.state.selection.from).node()\n ) {\n self.#programmaticallyPos = null\n\n return false\n }\n\n return true\n }\n\n if (!currentText.startsWith('/')) return false\n\n return true\n },\n offset: 10,\n })\n\n this.#slashProvider.onShow = () => {\n show.value = true\n }\n this.#slashProvider.onHide = () => {\n show.value = false\n }\n this.update(view)\n\n ctx.set(menuAPI.key, {\n show: (pos) => this.show(pos),\n hide: () => this.hide(),\n })\n }\n\n update = (view: EditorView) => {\n this.#slashProvider.update(view)\n }\n\n show = (pos: number) => {\n this.#programmaticallyPos = pos\n this.#filter.value = ''\n this.#slashProvider.show()\n }\n\n hide = () => {\n this.#programmaticallyPos = null\n this.#slashProvider.hide()\n }\n\n destroy = () => {\n this.#slashProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n}\n\nfunction isSelectionAtEndOfNode(selection: Selection) {\n if (!(selection instanceof TextSelection)) return false\n\n const { $head } = selection\n const parent = $head.parent\n const offset = $head.parentOffset\n\n return offset === parent.content.size\n}\n","import { Icon } from '@milkdown/kit/component'\nimport { defineComponent, ref, h, Fragment } from 'vue'\n\nh\nFragment\n\nexport interface BlockHandleProps {\n onAdd: () => void\n addIcon: string\n handleIcon: string\n}\n\nexport const BlockHandle = defineComponent<BlockHandleProps>({\n props: {\n onAdd: {\n type: Function,\n required: true,\n },\n addIcon: {\n type: String,\n required: true,\n },\n handleIcon: {\n type: String,\n required: true,\n },\n },\n setup(props) {\n const addButton = ref<HTMLDivElement>()\n\n return () => {\n return (\n <>\n <div\n ref={addButton}\n class=\"operation-item\"\n onPointerdown={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.add('active')\n }}\n onPointerup={(e) => {\n e.preventDefault()\n e.stopPropagation()\n addButton.value?.classList.remove('active')\n props.onAdd()\n }}\n >\n <Icon icon={props.addIcon} />\n </div>\n <div class=\"operation-item\">\n <Icon icon={props.handleIcon} />\n </div>\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { PluginView } from '@milkdown/kit/prose/state'\n\nimport { editorViewCtx } from '@milkdown/kit/core'\nimport {\n BlockProvider,\n block,\n blockConfig,\n type BlockProviderOptions,\n} from '@milkdown/kit/plugin/block'\nimport { paragraphSchema } from '@milkdown/kit/preset/commonmark'\nimport { findParent } from '@milkdown/kit/prose'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, type App } from 'vue'\n\nimport type { BlockEditFeatureConfig } from '../index'\n\nimport { menuIcon, plusIcon } from '../../../icons'\nimport { menuAPI } from '../menu'\nimport { BlockHandle } from './component'\n\nexport class BlockHandleView implements PluginView {\n #content: HTMLElement\n #provider: BlockProvider\n #app: App\n readonly #ctx: Ctx\n\n constructor(ctx: Ctx, config?: BlockEditFeatureConfig) {\n this.#ctx = ctx\n const content = document.createElement('div')\n content.classList.add('milkdown-block-handle')\n const app = createApp(BlockHandle, {\n onAdd: this.onAdd,\n addIcon: config?.handleAddIcon ?? plusIcon,\n handleIcon: config?.handleDragIcon ?? menuIcon,\n })\n app.mount(content)\n this.#app = app\n this.#content = content\n const blockProviderOptions = config?.blockHandle ?? {}\n this.#provider = new BlockProvider({\n ctx,\n content,\n getOffset: () => 16,\n getPlacement: ({ active, blockDom }) => {\n if (active.node.type.name === 'heading') return 'left'\n\n let totalDescendant = 0\n active.node.descendants((node) => {\n totalDescendant += node.childCount\n })\n const dom = active.el\n const domRect = dom.getBoundingClientRect()\n const handleRect = blockDom.getBoundingClientRect()\n const style = window.getComputedStyle(dom)\n const paddingTop = Number.parseInt(style.paddingTop, 10) || 0\n const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0\n const height = domRect.height - paddingTop - paddingBottom\n const handleHeight = handleRect.height\n return totalDescendant > 2 || handleHeight < height\n ? 'left-start'\n : 'left'\n },\n ...(blockProviderOptions as Partial<BlockProviderOptions>),\n })\n this.update()\n }\n\n update = () => {\n this.#provider.update()\n }\n\n destroy = () => {\n this.#provider.destroy()\n this.#content.remove()\n this.#app.unmount()\n }\n\n onAdd = () => {\n const ctx = this.#ctx\n const view = ctx.get(editorViewCtx)\n if (!view.hasFocus()) view.focus()\n\n const { state, dispatch } = view\n const active = this.#provider.active\n if (!active) return\n\n const $pos = active.$pos\n const pos = $pos.pos + active.node.nodeSize\n let tr = state.tr.insert(pos, paragraphSchema.type(ctx).create())\n tr = tr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n dispatch(tr.scrollIntoView())\n\n this.#provider.hide()\n ctx.get(menuAPI.key).show(tr.selection.from)\n }\n}\n\nexport function configureBlockHandle(\n ctx: Ctx,\n config?: BlockEditFeatureConfig\n) {\n ctx.set(blockConfig.key, {\n filterNodes: (pos) => {\n const filter = findParent((node) =>\n ['table', 'blockquote', 'math_inline'].includes(node.type.name)\n )(pos)\n if (filter) return false\n\n return true\n },\n })\n ctx.set(block.key, {\n view: () => new BlockHandleView(ctx, config),\n })\n}\n","import { block, type BlockProviderOptions } from '@milkdown/kit/plugin/block'\n\nimport type { DeepPartial } from '../../utils'\nimport type { GroupBuilder } from '../../utils/group-builder'\nimport type { DefineFeature } from '../shared'\nimport type { SlashMenuItem } from './menu/utils'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../index'\nimport { configureBlockHandle } from './handle'\nimport { configureMenu, menu, menuAPI } from './menu'\n\ninterface BlockEditConfig {\n handleAddIcon: string\n handleDragIcon: string\n buildMenu: (builder: GroupBuilder<SlashMenuItem>) => void\n\n blockHandle: Pick<\n BlockProviderOptions,\n | 'shouldShow'\n | 'getOffset'\n | 'getPosition'\n | 'getPlacement'\n | 'middleware'\n | 'floatingUIOptions'\n | 'root'\n >\n\n textGroup: {\n label: string\n text: {\n label: string\n icon: string\n } | null\n h1: {\n label: string\n icon: string\n } | null\n h2: {\n label: string\n icon: string\n } | null\n h3: {\n label: string\n icon: string\n } | null\n h4: {\n label: string\n icon: string\n } | null\n h5: {\n label: string\n icon: string\n } | null\n h6: {\n label: string\n icon: string\n } | null\n quote: {\n label: string\n icon: string\n } | null\n divider: {\n label: string\n icon: string\n } | null\n } | null\n\n listGroup: {\n label: string\n bulletList: {\n label: string\n icon: string\n } | null\n orderedList: {\n label: string\n icon: string\n } | null\n taskList: {\n label: string\n icon: string\n } | null\n } | null\n\n advancedGroup: {\n label: string\n image: {\n label: string\n icon: string\n } | null\n codeBlock: {\n label: string\n icon: string\n } | null\n table: {\n label: string\n icon: string\n } | null\n math: {\n label: string\n icon: string\n } | null\n } | null\n}\n\nexport type BlockEditFeatureConfig = DeepPartial<BlockEditConfig>\n\nexport const blockEdit: DefineFeature<BlockEditFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.BlockEdit))\n .config((ctx) => configureBlockHandle(ctx, config))\n .config((ctx) => configureMenu(ctx, config))\n .use(menuAPI)\n .use(block)\n .use(menu)\n}\n"],"names":["createSlice","CrepeFeature","__privateAdd","__privateSet","__privateGet","group","ctx","commandsCtx","paragraphSchema","clearTextInCurrentBlockCommand","setBlockTypeCommand","headingSchema","blockquoteSchema","wrapInBlockTypeCommand","hrSchema","addBlockTypeCommand","bulletListSchema","orderedListSchema","listItemSchema","imageBlock","imageBlockSchema","codeBlockSchema","editorViewCtx","createTable","selectTextNearPosCommand","items","groups","defineComponent","ref","computed","watch","watchEffect","onUnmounted","h","Icon","_content","_app","slashFactory","$ctx","createApp","SlashProvider","view","TextSelection","Fragment","state","BlockProvider","blockConfig","findParent","block"],"mappings":"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,MAAA,EACA,MAAA,EACA,GAAA,EACA;AAlDF,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAAA,EAAA,GAA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"}
|