@milkdown/crepe 7.19.2 → 7.21.0
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 +44 -1
- package/lib/cjs/builder.js.map +1 -1
- package/lib/cjs/feature/ai/index.js +1492 -0
- package/lib/cjs/feature/ai/index.js.map +1 -0
- package/lib/cjs/feature/block-edit/index.js +9 -2
- package/lib/cjs/feature/block-edit/index.js.map +1 -1
- package/lib/cjs/feature/code-mirror/index.js +2 -0
- package/lib/cjs/feature/code-mirror/index.js.map +1 -1
- package/lib/cjs/feature/cursor/index.js +2 -0
- package/lib/cjs/feature/cursor/index.js.map +1 -1
- package/lib/cjs/feature/image-block/index.js +5 -1
- package/lib/cjs/feature/image-block/index.js.map +1 -1
- package/lib/cjs/feature/latex/index.js +7 -0
- package/lib/cjs/feature/latex/index.js.map +1 -1
- package/lib/cjs/feature/link-tooltip/index.js +2 -0
- package/lib/cjs/feature/link-tooltip/index.js.map +1 -1
- package/lib/cjs/feature/list-item/index.js +2 -0
- package/lib/cjs/feature/list-item/index.js.map +1 -1
- package/lib/cjs/feature/placeholder/index.js +2 -0
- package/lib/cjs/feature/placeholder/index.js.map +1 -1
- package/lib/cjs/feature/table/index.js +2 -0
- package/lib/cjs/feature/table/index.js.map +1 -1
- package/lib/cjs/feature/toolbar/index.js +497 -5
- package/lib/cjs/feature/toolbar/index.js.map +1 -1
- package/lib/cjs/feature/top-bar/index.js +791 -0
- package/lib/cjs/feature/top-bar/index.js.map +1 -0
- package/lib/cjs/index.js +2047 -160
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/llm-providers/anthropic/index.js +147 -0
- package/lib/cjs/llm-providers/anthropic/index.js.map +1 -0
- package/lib/cjs/llm-providers/openai/index.js +138 -0
- package/lib/cjs/llm-providers/openai/index.js.map +1 -0
- package/lib/esm/builder.js +44 -1
- package/lib/esm/builder.js.map +1 -1
- package/lib/esm/feature/ai/index.js +1487 -0
- package/lib/esm/feature/ai/index.js.map +1 -0
- package/lib/esm/feature/block-edit/index.js +9 -2
- package/lib/esm/feature/block-edit/index.js.map +1 -1
- package/lib/esm/feature/code-mirror/index.js +2 -0
- package/lib/esm/feature/code-mirror/index.js.map +1 -1
- package/lib/esm/feature/cursor/index.js +2 -0
- package/lib/esm/feature/cursor/index.js.map +1 -1
- package/lib/esm/feature/image-block/index.js +5 -1
- package/lib/esm/feature/image-block/index.js.map +1 -1
- package/lib/esm/feature/latex/index.js +7 -0
- package/lib/esm/feature/latex/index.js.map +1 -1
- package/lib/esm/feature/link-tooltip/index.js +2 -0
- package/lib/esm/feature/link-tooltip/index.js.map +1 -1
- package/lib/esm/feature/list-item/index.js +2 -0
- package/lib/esm/feature/list-item/index.js.map +1 -1
- package/lib/esm/feature/placeholder/index.js +2 -0
- package/lib/esm/feature/placeholder/index.js.map +1 -1
- package/lib/esm/feature/table/index.js +2 -0
- package/lib/esm/feature/table/index.js.map +1 -1
- package/lib/esm/feature/toolbar/index.js +499 -7
- package/lib/esm/feature/toolbar/index.js.map +1 -1
- package/lib/esm/feature/top-bar/index.js +789 -0
- package/lib/esm/feature/top-bar/index.js.map +1 -0
- package/lib/esm/index.js +2040 -153
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/llm-providers/anthropic/index.js +145 -0
- package/lib/esm/llm-providers/anthropic/index.js.map +1 -0
- package/lib/esm/llm-providers/openai/index.js +136 -0
- package/lib/esm/llm-providers/openai/index.js.map +1 -0
- package/lib/theme/common/ai.css +446 -0
- package/lib/theme/common/code-mirror.css +14 -0
- package/lib/theme/common/diff.css +177 -0
- package/lib/theme/common/style.css +3 -0
- package/lib/theme/common/top-bar.css +152 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types/core/builder.d.ts +2 -1
- package/lib/types/core/builder.d.ts.map +1 -1
- package/lib/types/feature/ai/ai.spec.d.ts +2 -0
- package/lib/types/feature/ai/ai.spec.d.ts.map +1 -0
- package/lib/types/feature/ai/commands.d.ts +24 -0
- package/lib/types/feature/ai/commands.d.ts.map +1 -0
- package/lib/types/feature/ai/context.d.ts +4 -0
- package/lib/types/feature/ai/context.d.ts.map +1 -0
- package/lib/types/feature/ai/diff-actions/index.d.ts +12 -0
- package/lib/types/feature/ai/diff-actions/index.d.ts.map +1 -0
- package/lib/types/feature/ai/diff-actions/view.d.ts +21 -0
- package/lib/types/feature/ai/diff-actions/view.d.ts.map +1 -0
- package/lib/types/feature/ai/index.d.ts +7 -0
- package/lib/types/feature/ai/index.d.ts.map +1 -0
- package/lib/types/feature/ai/instruction-tooltip/component.d.ts +26 -0
- package/lib/types/feature/ai/instruction-tooltip/component.d.ts.map +1 -0
- package/lib/types/feature/ai/instruction-tooltip/index.d.ts +17 -0
- package/lib/types/feature/ai/instruction-tooltip/index.d.ts.map +1 -0
- package/lib/types/feature/ai/instruction-tooltip/suggestions.d.ts +50 -0
- package/lib/types/feature/ai/instruction-tooltip/suggestions.d.ts.map +1 -0
- package/lib/types/feature/ai/instruction-tooltip/view.d.ts +19 -0
- package/lib/types/feature/ai/instruction-tooltip/view.d.ts.map +1 -0
- package/lib/types/feature/ai/streaming-indicator.d.ts +9 -0
- package/lib/types/feature/ai/streaming-indicator.d.ts.map +1 -0
- package/lib/types/feature/ai/types.d.ts +58 -0
- package/lib/types/feature/ai/types.d.ts.map +1 -0
- package/lib/types/feature/block-edit/handle/component.d.ts.map +1 -1
- package/lib/types/feature/block-edit/menu/component.d.ts.map +1 -1
- package/lib/types/feature/image-block/index.d.ts +2 -0
- package/lib/types/feature/image-block/index.d.ts.map +1 -1
- package/lib/types/feature/index.d.ts +7 -1
- package/lib/types/feature/index.d.ts.map +1 -1
- package/lib/types/feature/latex/inline-tooltip/component.d.ts.map +1 -1
- package/lib/types/feature/latex/inline-tooltip/inline-tooltip.spec.d.ts +2 -0
- package/lib/types/feature/latex/inline-tooltip/inline-tooltip.spec.d.ts.map +1 -0
- package/lib/types/feature/latex/inline-tooltip/view.d.ts.map +1 -1
- package/lib/types/feature/loader.d.ts.map +1 -1
- package/lib/types/feature/toolbar/component.d.ts.map +1 -1
- package/lib/types/feature/toolbar/config.d.ts +1 -1
- package/lib/types/feature/toolbar/config.d.ts.map +1 -1
- package/lib/types/feature/toolbar/index.d.ts +1 -0
- package/lib/types/feature/toolbar/index.d.ts.map +1 -1
- package/lib/types/feature/top-bar/component.d.ts +11 -0
- package/lib/types/feature/top-bar/component.d.ts.map +1 -0
- package/lib/types/feature/top-bar/config.d.ts +34 -0
- package/lib/types/feature/top-bar/config.d.ts.map +1 -0
- package/lib/types/feature/top-bar/index.d.ts +26 -0
- package/lib/types/feature/top-bar/index.d.ts.map +1 -0
- package/lib/types/icons/ai.d.ts +2 -0
- package/lib/types/icons/ai.d.ts.map +1 -0
- package/lib/types/icons/chevron-left.d.ts +2 -0
- package/lib/types/icons/chevron-left.d.ts.map +1 -0
- package/lib/types/icons/chevron-right.d.ts +2 -0
- package/lib/types/icons/chevron-right.d.ts.map +1 -0
- package/lib/types/icons/code-block.d.ts +2 -0
- package/lib/types/icons/code-block.d.ts.map +1 -0
- package/lib/types/icons/enter-key.d.ts +2 -0
- package/lib/types/icons/enter-key.d.ts.map +1 -0
- package/lib/types/icons/grammar-check.d.ts +2 -0
- package/lib/types/icons/grammar-check.d.ts.map +1 -0
- package/lib/types/icons/index.d.ts +12 -0
- package/lib/types/icons/index.d.ts.map +1 -1
- package/lib/types/icons/longer.d.ts +2 -0
- package/lib/types/icons/longer.d.ts.map +1 -0
- package/lib/types/icons/retry.d.ts +2 -0
- package/lib/types/icons/retry.d.ts.map +1 -0
- package/lib/types/icons/send-prompt.d.ts +2 -0
- package/lib/types/icons/send-prompt.d.ts.map +1 -0
- package/lib/types/icons/send.d.ts +2 -0
- package/lib/types/icons/send.d.ts.map +1 -0
- package/lib/types/icons/shorter.d.ts +2 -0
- package/lib/types/icons/shorter.d.ts.map +1 -0
- package/lib/types/icons/translate.d.ts +2 -0
- package/lib/types/icons/translate.d.ts.map +1 -0
- package/lib/types/llm-providers/anthropic/index.d.ts +21 -0
- package/lib/types/llm-providers/anthropic/index.d.ts.map +1 -0
- package/lib/types/llm-providers/openai/index.d.ts +15 -0
- package/lib/types/llm-providers/openai/index.d.ts.map +1 -0
- package/lib/types/llm-providers/providers.spec.d.ts +2 -0
- package/lib/types/llm-providers/providers.spec.d.ts.map +1 -0
- package/lib/types/llm-providers/shared.d.ts +16 -0
- package/lib/types/llm-providers/shared.d.ts.map +1 -0
- package/lib/types/utils/group-builder.d.ts +1 -1
- package/lib/types/utils/group-builder.d.ts.map +1 -1
- package/lib/types/utils/keep-alive.d.ts +2 -0
- package/lib/types/utils/keep-alive.d.ts.map +1 -0
- package/package.json +34 -13
- package/src/core/builder.ts +39 -2
- package/src/feature/ai/ai.spec.ts +742 -0
- package/src/feature/ai/commands.ts +257 -0
- package/src/feature/ai/context.ts +45 -0
- package/src/feature/ai/diff-actions/index.ts +95 -0
- package/src/feature/ai/diff-actions/view.ts +237 -0
- package/src/feature/ai/index.ts +118 -0
- package/src/feature/ai/instruction-tooltip/component.tsx +414 -0
- package/src/feature/ai/instruction-tooltip/index.ts +101 -0
- package/src/feature/ai/instruction-tooltip/suggestions.ts +249 -0
- package/src/feature/ai/instruction-tooltip/view.ts +159 -0
- package/src/feature/ai/streaming-indicator.ts +183 -0
- package/src/feature/ai/types.ts +178 -0
- package/src/feature/block-edit/handle/component.tsx +3 -2
- package/src/feature/block-edit/menu/component.tsx +3 -2
- package/src/feature/block-edit/menu/config.ts +1 -1
- package/src/feature/image-block/index.ts +4 -0
- package/src/feature/index.ts +14 -2
- package/src/feature/latex/inline-tooltip/component.tsx +4 -2
- package/src/feature/latex/inline-tooltip/inline-tooltip.spec.ts +81 -0
- package/src/feature/latex/inline-tooltip/view.ts +2 -0
- package/src/feature/loader.ts +8 -0
- package/src/feature/toolbar/component.tsx +7 -5
- package/src/feature/toolbar/config.ts +27 -1
- package/src/feature/toolbar/index.ts +1 -0
- package/src/feature/top-bar/component.tsx +198 -0
- package/src/feature/top-bar/config.ts +367 -0
- package/src/feature/top-bar/index.ts +113 -0
- package/src/icons/ai.ts +14 -0
- package/src/icons/chevron-left.ts +15 -0
- package/src/icons/chevron-right.ts +15 -0
- package/src/icons/code-block.ts +12 -0
- package/src/icons/enter-key.ts +13 -0
- package/src/icons/grammar-check.ts +13 -0
- package/src/icons/index.ts +12 -0
- package/src/icons/longer.ts +13 -0
- package/src/icons/retry.ts +13 -0
- package/src/icons/send-prompt.ts +13 -0
- package/src/icons/send.ts +13 -0
- package/src/icons/shorter.ts +13 -0
- package/src/icons/translate.ts +13 -0
- package/src/llm-providers/anthropic/index.ts +132 -0
- package/src/llm-providers/openai/index.ts +109 -0
- package/src/llm-providers/providers.spec.ts +472 -0
- package/src/llm-providers/shared.ts +160 -0
- package/src/theme/common/ai.css +430 -0
- package/src/theme/common/code-mirror.css +14 -0
- package/src/theme/common/diff.css +196 -0
- package/src/theme/common/style.css +3 -0
- package/src/theme/common/top-bar.css +156 -0
- package/src/utils/group-builder.ts +1 -1
- package/src/utils/keep-alive.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/core/slice.ts","../../../../src/feature/index.ts","../../../../src/icons/bold.ts","../../../../src/icons/code.ts","../../../../src/icons/italic.ts","../../../../src/icons/link.ts","../../../../src/icons/strikethrough.ts","../../../../src/icons/functions.ts","../../../../src/utils/group-builder.ts","../../../../src/feature/latex/inline-latex.ts","../../../../src/feature/latex/command.ts","../../../../src/feature/toolbar/config.ts","../../../../src/feature/toolbar/component.tsx","../../../../src/feature/toolbar/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 boldIcon = `\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=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\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 italicIcon = `\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=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`\n","export const linkIcon = `\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=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`\n","export const strikethroughIcon = `\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=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\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 { Ctx } from '@milkdown/kit/ctx'\n\ntype 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 { $nodeSchema } from '@milkdown/kit/utils'\nimport katex from 'katex'\n\nexport const mathInlineId = 'math_inline'\n\n/// Schema for inline math node.\n/// Add support for:\n///\n/// ```markdown\n/// $a^2 + b^2 = c^2$\n/// ```\nexport const mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: 'inline',\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n },\n ],\n toDOM: (node) => {\n const code: string = node.attrs.value\n const dom = document.createElement('span')\n dom.dataset.type = mathInlineId\n dom.dataset.value = code\n katex.render(code, dom, {\n throwOnError: false,\n })\n\n return dom\n },\n parseMarkdown: {\n match: (node) => node.type === 'inlineMath',\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode('inlineMath', undefined, node.attrs.value)\n },\n },\n}))\n","import type { Node } from '@milkdown/kit/prose/model'\n\nimport { findNodeInSelection } from '@milkdown/kit/prose'\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'\nimport { $command } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\nexport const toggleLatexCommand = $command('ToggleLatex', (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode,\n } = findNodeInSelection(state, mathInlineSchema.type(ctx))\n\n const { selection, doc, tr } = state\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to)\n let _tr = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text,\n })\n )\n if (dispatch) {\n dispatch(\n _tr.setSelection(NodeSelection.create(_tr.doc, selection.from))\n )\n }\n return true\n }\n\n const { from, to } = selection\n if (!latexNode || latexPos < 0) return false\n\n let _tr = tr.delete(latexPos, latexPos + 1)\n const content = (latexNode as Node).attrs.value\n _tr = _tr.insertText(content, latexPos)\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n )\n }\n return true\n }\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip'\nimport { commandsCtx } from '@milkdown/kit/core'\nimport {\n emphasisSchema,\n inlineCodeSchema,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n linkSchema,\n strongSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport {\n strikethroughSchema,\n toggleStrikethroughCommand,\n} from '@milkdown/kit/preset/gfm'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { CrepeFeature } from '..'\nimport { useCrepeFeatures } from '../../core/slice'\nimport {\n boldIcon,\n codeIcon,\n functionsIcon,\n italicIcon,\n linkIcon,\n strikethroughIcon,\n} from '../../icons'\nimport { GroupBuilder } from '../../utils/group-builder'\nimport { toggleLatexCommand } from '../latex/command'\nimport { mathInlineSchema } from '../latex/inline-latex'\n\nexport type ToolbarItem = {\n active: (ctx: Ctx) => boolean\n icon: string\n}\n\nexport function getGroups(config?: ToolbarFeatureConfig, ctx?: Ctx) {\n const groupBuilder = new GroupBuilder<ToolbarItem>()\n\n groupBuilder\n .addGroup('formatting', 'Formatting')\n .addItem('bold', {\n icon: config?.boldIcon ?? boldIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrongCommand.key)\n },\n })\n .addItem('italic', {\n icon: config?.italicIcon ?? italicIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleEmphasisCommand.key)\n },\n })\n .addItem('strikethrough', {\n icon: config?.strikethroughIcon ?? strikethroughIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrikethroughCommand.key)\n },\n })\n\n const functionGroup = groupBuilder.addGroup('function', 'Function')\n functionGroup.addItem('code', {\n icon: config?.codeIcon ?? codeIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleInlineCodeCommand.key)\n },\n })\n\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n if (isLatexEnabled) {\n functionGroup.addItem('latex', {\n icon: config?.latexIcon ?? functionsIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLatexCommand.key)\n },\n })\n }\n functionGroup.addItem('link', {\n icon: config?.linkIcon ?? linkIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLinkCommand.key)\n },\n })\n\n config?.buildToolbar?.(groupBuilder)\n\n return groupBuilder.build()\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Selection } from '@milkdown/kit/prose/state'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { editorCtx, EditorStatus } from '@milkdown/kit/core'\nimport clsx from 'clsx'\nimport {\n defineComponent,\n type Ref,\n type ShallowRef,\n h,\n Fragment,\n computed,\n} from 'vue'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { getGroups, type ToolbarItem } from './config'\n\nh\nFragment\n\ntype ToolbarProps = {\n ctx: Ctx\n hide: () => void\n show: Ref<boolean>\n selection: ShallowRef<Selection>\n config?: ToolbarFeatureConfig\n}\n\nexport const Toolbar = defineComponent<ToolbarProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n selection: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup(props) {\n const { ctx, config } = props\n\n const onClick = (fn: (ctx: Ctx) => void) => (e: MouseEvent) => {\n e.preventDefault()\n ctx && fn(ctx)\n }\n\n function checkActive(checker: ToolbarItem['active']) {\n // make sure the function subscribed to vue reactive\n props.selection.value\n // Check if the edtior is ready\n const status = ctx.get(editorCtx).status\n if (status !== EditorStatus.Created) return false\n\n return checker(ctx)\n }\n\n const groupInfo = computed(() => getGroups(config, ctx))\n\n return () => {\n return (\n <>\n {groupInfo.value\n .map((group) => {\n return group.items.map((item) => {\n return (\n <button\n type=\"button\"\n class={clsx(\n 'toolbar-item',\n ctx && checkActive(item.active) && 'active'\n )}\n onPointerdown={onClick(item.onRun)}\n >\n <Icon icon={item.icon} />\n </button>\n )\n })\n })\n .reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr)\n } else {\n acc.push(<div class=\"divider\"></div>, ...curr)\n }\n return acc\n }, [])}\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type {\n EditorState,\n PluginView,\n Selection,\n} from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, ref, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { GroupBuilder } from '../../utils'\nimport type { DefineFeature } from '../shared'\nimport type { ToolbarItem } from './config'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { Toolbar } from './component'\n\ninterface ToolbarConfig {\n boldIcon: string\n codeIcon: string\n italicIcon: string\n linkIcon: string\n strikethroughIcon: string\n latexIcon: string\n buildToolbar: (builder: GroupBuilder<ToolbarItem>) => void\n}\n\nexport type ToolbarFeatureConfig = Partial<ToolbarConfig>\n\nconst toolbarTooltip = tooltipFactory('CREPE_TOOLBAR')\n\nclass ToolbarView implements PluginView {\n #tooltipProvider: TooltipProvider\n #content: HTMLElement\n #app: App\n #selection: ShallowRef<Selection>\n #show = ref(false)\n\n constructor(ctx: Ctx, view: EditorView, config?: ToolbarFeatureConfig) {\n const content = document.createElement('div')\n content.className = 'milkdown-toolbar'\n this.#selection = shallowRef(view.state.selection)\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: this.#selection,\n show: this.#show,\n })\n app.mount(content)\n this.#content = content\n this.#app = app\n\n this.#tooltipProvider = new TooltipProvider({\n content: this.#content,\n debounce: 20,\n offset: 10,\n shouldShow(view: EditorView) {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length &&\n selection instanceof TextSelection\n\n const isNotTextBlock = !(selection instanceof TextSelection)\n\n const activeElement = (view.dom.getRootNode() as ShadowRoot | Document)\n .activeElement\n const isTooltipChildren = content.contains(activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus ||\n isNotTextBlock ||\n empty ||\n isEmptyTextBlock ||\n isReadonly\n )\n return false\n\n return true\n },\n })\n this.#tooltipProvider.onShow = () => {\n this.#show.value = true\n }\n this.#tooltipProvider.onHide = () => {\n this.#show.value = false\n }\n this.update(view)\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#tooltipProvider.update(view, prevState)\n this.#selection.value = view.state.selection\n }\n\n destroy = () => {\n this.#tooltipProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n\n hide = () => {\n this.#tooltipProvider.hide()\n }\n}\n\nexport const toolbar: DefineFeature<ToolbarFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Toolbar))\n .config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config),\n })\n })\n .use(toolbarTooltip)\n}\n"],"names":["createSlice","CrepeFeature","__privateAdd","__privateSet","__privateGet","group","$nodeSchema","$command","state","findNodeInSelection","_tr","NodeSelection","TextSelection","ctx","commandsCtx","isMarkSelectedCommand","strongSchema","toggleStrongCommand","emphasisSchema","toggleEmphasisCommand","strikethroughSchema","toggleStrikethroughCommand","inlineCodeSchema","toggleInlineCodeCommand","isNodeSelectedCommand","linkSchema","toggleLinkCommand","defineComponent","editorCtx","EditorStatus","computed","h","Fragment","Icon","tooltipFactory","ref","shallowRef","createApp","TooltipProvider","view"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/core/slice.ts","../../../../src/feature/index.ts","../../../../src/utils/keep-alive.ts","../../../../src/icons/ai.ts","../../../../src/icons/bold.ts","../../../../src/icons/code.ts","../../../../src/icons/italic.ts","../../../../src/icons/link.ts","../../../../src/icons/strikethrough.ts","../../../../src/icons/functions.ts","../../../../src/utils/group-builder.ts","../../../../src/feature/ai/context.ts","../../../../src/feature/ai/commands.ts","../../../../src/feature/ai/instruction-tooltip/component.tsx","../../../../src/feature/ai/instruction-tooltip/index.ts","../../../../src/feature/latex/inline-latex.ts","../../../../src/feature/latex/command.ts","../../../../src/feature/toolbar/config.ts","../../../../src/feature/toolbar/component.tsx","../../../../src/feature/toolbar/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 { AIFeatureConfig } from './ai'\nimport 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'\nimport type { TopBarFeatureConfig } from './top-bar'\n\n/// The crepe editor feature flags.\n/// Most features are enabled by default; `TopBar` and `AI` are opt-in.\n/// See `defaultFeatures` for the per-flag default.\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 /// Fixed top toolbar with heading selector, formatting buttons, insert actions, and block commands.\n TopBar = 'top-bar',\n\n /// AI-assisted editing: streaming input, diff review, and provider integration.\n AI = 'ai',\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 [CrepeFeature.TopBar]?: TopBarFeatureConfig\n [CrepeFeature.AI]?: AIFeatureConfig\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 [CrepeFeature.TopBar]: false,\n [CrepeFeature.AI]: false,\n}\n","// Prevent tree-shaking from removing Vue's `h` and `Fragment`,\n// which are required at runtime for TSX to work.\nexport function keepAlive(..._args: unknown[]) {}\n","export const aiIcon = `\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 fill=\"currentColor\"\n d=\"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25zm0 14l1.25-2.75L23 19l-2.75-1.25L19 15l-1.25 2.75L15 19l2.75 1.25zM9 20l3-6.5L18 10l-6-3.5L9 0L6 6.5L0 10l6 3.5z\"\n transform=\"translate(3 3) scale(0.75)\"\n />\n </svg>\n`\n","export const boldIcon = `\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=\"M8.85758 18.625C8.4358 18.625 8.07715 18.4772 7.78163 18.1817C7.48613 17.8862 7.33838 17.5275 7.33838 17.1058V6.8942C7.33838 6.47242 7.48613 6.11377 7.78163 5.81825C8.07715 5.52275 8.4358 5.375 8.85758 5.375H12.1999C13.2191 5.375 14.1406 5.69231 14.9643 6.32693C15.788 6.96154 16.1999 7.81603 16.1999 8.89038C16.1999 9.63779 16.0194 10.2471 15.6585 10.7183C15.2976 11.1894 14.9088 11.5314 14.4922 11.7442C15.005 11.9211 15.4947 12.2708 15.9614 12.7933C16.428 13.3157 16.6614 14.0192 16.6614 14.9038C16.6614 16.182 16.1902 17.1217 15.2479 17.723C14.3056 18.3243 13.3563 18.625 12.3999 18.625H8.85758ZM9.4883 16.6327H12.3191C13.1063 16.6327 13.6627 16.4141 13.9884 15.9769C14.314 15.5397 14.4768 15.1205 14.4768 14.7192C14.4768 14.3179 14.314 13.8987 13.9884 13.4615C13.6627 13.0243 13.0909 12.8057 12.273 12.8057H9.4883V16.6327ZM9.4883 10.875H12.0826C12.6903 10.875 13.172 10.7013 13.5278 10.3539C13.8836 10.0064 14.0615 9.59037 14.0615 9.10575C14.0615 8.59035 13.8733 8.16918 13.497 7.84225C13.1207 7.51533 12.6595 7.35188 12.1133 7.35188H9.4883V10.875Z\"\n />\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 italicIcon = `\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=\"M6.29811 18.625C6.04505 18.625 5.83115 18.5375 5.65641 18.3626C5.48166 18.1877 5.39429 17.9736 5.39429 17.7203C5.39429 17.467 5.48166 17.2532 5.65641 17.0788C5.83115 16.9045 6.04505 16.8173 6.29811 16.8173H9.21159L12.452 7.18265H9.53851C9.28545 7.18265 9.07155 7.0952 8.89681 6.9203C8.72206 6.7454 8.63469 6.5313 8.63469 6.278C8.63469 6.02472 8.72206 5.81089 8.89681 5.63652C9.07155 5.46217 9.28545 5.375 9.53851 5.375H16.8847C17.1377 5.375 17.3516 5.46245 17.5264 5.63735C17.7011 5.81225 17.7885 6.02634 17.7885 6.27962C17.7885 6.53293 17.7011 6.74676 17.5264 6.92113C17.3516 7.09548 17.1377 7.18265 16.8847 7.18265H14.2789L11.0385 16.8173H13.6443C13.8973 16.8173 14.1112 16.9048 14.286 17.0797C14.4607 17.2546 14.5481 17.4687 14.5481 17.722C14.5481 17.9752 14.4607 18.1891 14.286 18.3634C14.1112 18.5378 13.8973 18.625 13.6443 18.625H6.29811Z\"\n />\n </svg>\n`\n","export const linkIcon = `\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=\"M17.0385 19.5003V16.5388H14.0769V15.0388H17.0385V12.0773H18.5384V15.0388H21.5V16.5388H18.5384V19.5003H17.0385ZM10.8077 16.5388H7.03845C5.78282 16.5388 4.7125 16.0963 3.8275 15.2114C2.9425 14.3266 2.5 13.2564 2.5 12.0009C2.5 10.7454 2.9425 9.67504 3.8275 8.78979C4.7125 7.90454 5.78282 7.46191 7.03845 7.46191H10.8077V8.96186H7.03845C6.1987 8.96186 5.48235 9.25834 4.8894 9.85129C4.29645 10.4442 3.99998 11.1606 3.99998 12.0003C3.99998 12.8401 4.29645 13.5564 4.8894 14.1494C5.48235 14.7423 6.1987 15.0388 7.03845 15.0388H10.8077V16.5388ZM8.25 12.7503V11.2504H15.75V12.7503H8.25ZM21.5 12.0003H20C20 11.1606 19.7035 10.4442 19.1106 9.85129C18.5176 9.25834 17.8013 8.96186 16.9615 8.96186H13.1923V7.46191H16.9615C18.2171 7.46191 19.2875 7.90441 20.1725 8.78939C21.0575 9.67439 21.5 10.7447 21.5 12.0003Z\"\n />\n </svg>\n`\n","export const strikethroughIcon = `\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=\"M3.25 13.7404C3.0375 13.7404 2.85938 13.6684 2.71563 13.5246C2.57188 13.3808 2.5 13.2026 2.5 12.99C2.5 12.7774 2.57188 12.5993 2.71563 12.4558C2.85938 12.3122 3.0375 12.2404 3.25 12.2404H20.75C20.9625 12.2404 21.1406 12.3123 21.2843 12.4561C21.4281 12.5999 21.5 12.7781 21.5 12.9907C21.5 13.2033 21.4281 13.3814 21.2843 13.525C21.1406 13.6686 20.9625 13.7404 20.75 13.7404H3.25ZM10.9423 10.2596V6.62495H6.5673C6.2735 6.62495 6.02377 6.52201 5.8181 6.31613C5.61245 6.11026 5.50963 5.86027 5.50963 5.56615C5.50963 5.27205 5.61245 5.02083 5.8181 4.8125C6.02377 4.60417 6.2735 4.5 6.5673 4.5H17.4423C17.7361 4.5 17.9858 4.60294 18.1915 4.80883C18.3971 5.01471 18.5 5.2647 18.5 5.5588C18.5 5.85292 18.3971 6.10413 18.1915 6.31245C17.9858 6.52078 17.7361 6.62495 17.4423 6.62495H13.0673V10.2596H10.9423ZM10.9423 15.7211H13.0673V18.4423C13.0673 18.7361 12.9643 18.9858 12.7584 19.1915C12.5526 19.3971 12.3026 19.5 12.0085 19.5C11.7144 19.5 11.4631 19.3962 11.2548 19.1887C11.0465 18.9811 10.9423 18.7291 10.9423 18.4327V15.7211Z\"\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 { Ctx } from '@milkdown/kit/ctx'\n\ntype 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 { editorViewCtx, serializerCtx } from '@milkdown/kit/core'\n\nimport type { AIPromptContext } from './types'\n\n/// Default prompt context builder. Serializes the full document and\n/// the current selection (if any) as markdown, then pairs them with\n/// the user instruction.\nexport function defaultBuildContext(\n ctx: Ctx,\n instruction: string\n): AIPromptContext {\n const view = ctx.get(editorViewCtx)\n const serializer = ctx.get(serializerCtx)\n const { state } = view\n\n // Full document as markdown\n const document = serializer(state.doc)\n\n // Selected text as markdown (empty if selection is collapsed).\n // For block-level selections (whole paragraphs, list items, etc.)\n // we wrap the slice content in a doc node and serialize it. For\n // inline-only selections (text inside a single paragraph),\n // createAndFill on the doc type returns null because inline content\n // isn't valid as direct doc children — wrap it in a paragraph first\n // so marks (bold, italic, links) survive into the markdown output.\n let selection = ''\n if (!state.selection.empty) {\n const { from, to } = state.selection\n const slice = state.doc.slice(from, to)\n const { schema } = state.doc.type\n let wrapper = schema.topNodeType.createAndFill(null, slice.content)\n if (!wrapper) {\n const paragraph = schema.nodes.paragraph?.createAndFill(\n null,\n slice.content\n )\n if (paragraph) wrapper = schema.topNodeType.createAndFill(null, paragraph)\n }\n selection = wrapper ? serializer(wrapper) : state.doc.textBetween(from, to)\n }\n\n return { document, selection, instruction }\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { MilkdownError } from '@milkdown/kit/exception'\n\nimport { commandsCtx } from '@milkdown/kit/core'\nimport { aiBuildContextError, aiProviderError } from '@milkdown/kit/exception'\nimport { diffPluginKey } from '@milkdown/kit/plugin/diff'\nimport {\n abortStreamingCmd,\n endStreamingCmd,\n pushChunkCmd,\n startStreamingCmd,\n streamingPluginKey,\n} from '@milkdown/kit/plugin/streaming'\nimport { $command, $ctx } from '@milkdown/kit/utils'\n\nimport type { AIProvider, AIPromptContext, RunAIOptions } from './types'\n\nimport { defaultBuildContext } from './context'\n\n// ---------------------------------------------------------------------------\n// Context slices\n// ---------------------------------------------------------------------------\n\n/// Holds the user-supplied provider and prompt builder. Populated by\n/// the AI feature's setup function from `AIFeatureConfig`. `aiIcon`\n/// lives here too so that other features (notably the toolbar) can pick\n/// up the AI feature's icon override at render time.\nexport const aiProviderConfig = $ctx(\n {\n provider: undefined as AIProvider | undefined,\n buildContext: undefined as\n | ((ctx: Ctx, instruction: string) => AIPromptContext)\n | undefined,\n diffReviewOnEnd: true,\n onError: (error: MilkdownError) => {\n console.error(`[milkdown/ai] [${error.code}]`, error)\n },\n aiIcon: undefined as string | undefined,\n },\n 'aiProviderConfig'\n)\n\n/// Holds the AbortController and active-form label for the current AI\n/// session (null/empty when idle). `label` is shown in the streaming\n/// indicator. `lastInstruction`, `lastLabel`, `lastFrom`, `lastTo` are\n/// kept after the session ends so the diff-actions Retry button can\n/// re-run the same prompt on the same text range. `diffOwnedByAI` is\n/// flipped on right before our `endStreamingCmd` activates diff review\n/// and back off when the diff panel sees the diff close, so a manually\n/// started diff review (via `startDiffReviewCmd`) doesn't inherit the\n/// previous AI session's Retry affordance.\nexport const aiSessionCtx = $ctx(\n {\n abortController: null as AbortController | null,\n label: '',\n lastInstruction: '',\n lastLabel: undefined as string | undefined,\n lastFrom: -1,\n lastTo: -1,\n diffOwnedByAI: false,\n },\n 'aiSession'\n)\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emitAIError(ctx: Ctx, error: MilkdownError): void {\n const config = ctx.get(aiProviderConfig.key)\n try {\n config.onError(error)\n } catch (handlerError) {\n console.error('[milkdown/ai] onError handler failed:', handlerError)\n }\n}\n\n/// Clear the live (`abortController`, `label`) portion of the session\n/// while preserving the `last*` fields used by the diff-actions Retry\n/// button.\nfunction clearActiveSession(ctx: Ctx): void {\n const current = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, {\n ...current,\n abortController: null,\n label: '',\n })\n}\n\n// ---------------------------------------------------------------------------\n// Async provider runner\n// ---------------------------------------------------------------------------\n\nasync function runProvider(\n ctx: Ctx,\n provider: AIProvider,\n promptContext: AIPromptContext,\n abortController: AbortController\n): Promise<void> {\n try {\n const iterable = provider(promptContext, abortController.signal)\n const commands = ctx.get(commandsCtx)\n for await (const chunk of iterable) {\n if (abortController.signal.aborted) break\n commands.call(pushChunkCmd.key, chunk)\n }\n if (abortController.signal.aborted) return\n // Streaming complete — hand off to diff review if configured. The\n // ownership flag is flipped *before* the dispatch so the diff-actions\n // panel reads `true` during the same transaction's update cycle.\n // If the dispatch is rejected (e.g. host code already ended the\n // streaming session), revert the flag so the next manually-started\n // diff review isn't misclassified as AI-owned — `clearActiveSession`\n // intentionally preserves `diffOwnedByAI` because the panel is\n // responsible for clearing it on the diff true→false edge, but no\n // such edge fires when the dispatch never landed.\n const config = ctx.get(aiProviderConfig.key)\n if (config.diffReviewOnEnd) {\n const cur = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, { ...cur, diffOwnedByAI: true })\n }\n const dispatched = commands.call(endStreamingCmd.key, {\n diffReview: config.diffReviewOnEnd,\n })\n if (config.diffReviewOnEnd && !dispatched) {\n const cur = ctx.get(aiSessionCtx.key)\n ctx.set(aiSessionCtx.key, { ...cur, diffOwnedByAI: false })\n }\n } catch (error) {\n if (abortController.signal.aborted) return\n const milkdownError = aiProviderError(error)\n emitAIError(ctx, milkdownError)\n const commands = ctx.get(commandsCtx)\n commands.call(abortStreamingCmd.key, { keep: false })\n } finally {\n // Only clean up if this session is still the active one. If the\n // user aborted and immediately started a new session, the new\n // session owns the ctx now and we must not clobber it.\n const current = ctx.get(aiSessionCtx.key)\n if (current.abortController === abortController) {\n clearActiveSession(ctx)\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\n/// Start an AI session: capture context, start streaming, and call the\n/// provider asynchronously. The command returns synchronously; the\n/// provider runs in the background.\n///\n/// When the user has a text selection, the streamed output replaces the\n/// selected text. The provider also receives the selected text in\n/// `AIPromptContext.selection` for context-aware generation.\nexport const runAICmd = $command('RunAI', (ctx) => {\n return (options?: RunAIOptions) => (state, dispatch) => {\n if (!options?.instruction) return false\n\n const config = ctx.get(aiProviderConfig.key)\n if (!config.provider) return false\n\n // Reject if a session is already running, streaming is active, or\n // diff review is active (the diff plugin blocks non-diff transactions,\n // so streaming flushes would be silently rejected).\n const session = ctx.get(aiSessionCtx.key)\n if (session.abortController) return false\n if (streamingPluginKey.getState(state)?.active) return false\n if (diffPluginKey.getState(state)?.active) return false\n\n // Dry-run: when dispatch is undefined, ProseMirror is probing\n // whether this command can execute. All precondition checks above\n // are side-effect-free so we can return true here.\n if (!dispatch) return true\n\n // Set the session label before starting the streaming plugin, so\n // the streaming-indicator widget reads the right label when its\n // decoration is first built. Empty string means \"no caller-supplied\n // label\" — the indicator widget falls through to its configured\n // `fallbackLabel`. `lastInstruction` / `lastLabel` are also stored\n // here so the diff-actions Retry button can re-run the same prompt\n // later.\n const abortController = new AbortController()\n const { from, to } = state.selection\n ctx.set(aiSessionCtx.key, {\n abortController,\n label: options.label ?? '',\n lastInstruction: options.instruction,\n lastLabel: options.label,\n lastFrom: from,\n lastTo: to,\n // Reset every run; only the success path that hands off to diff\n // review flips it back on.\n diffOwnedByAI: false,\n })\n\n // Start streaming — replaces the selection if non-empty.\n const commands = ctx.get(commandsCtx)\n const insertAt = state.selection.empty\n ? ('cursor' as const)\n : ('selection' as const)\n if (!commands.call(startStreamingCmd.key, { insertAt })) {\n clearActiveSession(ctx)\n return false\n }\n\n // Everything after startStreamingCmd is wrapped in try/catch: if\n // buildContext or anything else throws, we must abort the streaming\n // session to avoid leaving the editor locked with no way to recover.\n let promptContext: AIPromptContext\n try {\n const buildContext = config.buildContext ?? defaultBuildContext\n promptContext = buildContext(ctx, options.instruction)\n } catch (error) {\n const milkdownError = aiBuildContextError(error)\n emitAIError(ctx, milkdownError)\n commands.call(abortStreamingCmd.key, { keep: false })\n clearActiveSession(ctx)\n return false\n }\n\n // Fire-and-forget: the provider pushes chunks asynchronously.\n // startStreamingCmd already dispatched its own transaction — we\n // must NOT dispatch state.tr here as it would overwrite the\n // streaming plugin's state with a stale doc.\n void runProvider(ctx, config.provider, promptContext, abortController)\n\n return true\n }\n})\n\n/// Abort the current AI session. Signals the provider to stop and\n/// delegates to `abortStreamingCmd` if streaming is still active.\n/// Returns true whenever an AI session was actually cleaned up.\nexport const abortAICmd = $command('AbortAI', (ctx) => {\n return (options?: { keep?: boolean }) => (state, dispatch) => {\n const session = ctx.get(aiSessionCtx.key)\n // Dry-run: return whether there's something to abort, without\n // performing any side effects.\n if (!dispatch) return !!session.abortController\n\n if (!session.abortController) return false\n\n session.abortController.abort()\n clearActiveSession(ctx)\n\n // Only call abortStreamingCmd if the streaming plugin is still\n // active — it may have already finished/errored by the time the\n // user clicks abort.\n if (streamingPluginKey.getState(state)?.active) {\n const commands = ctx.get(commandsCtx)\n commands.call(abortStreamingCmd.key, options)\n }\n return true\n }\n})\n","import { Icon } from '@milkdown/kit/component'\nimport {\n computed,\n defineComponent,\n h,\n nextTick,\n ref,\n watch,\n type Ref,\n} from 'vue'\n\nimport type { AISuggestionItem, ResolvedSuggestions } from './suggestions'\n\nimport { keepAlive } from '../../../utils/keep-alive'\n\nkeepAlive(h)\n\n/// Resolved chrome (icons + labels) for the tooltip. All fields required —\n/// the view layer fills in defaults before mounting the component.\nexport interface AIInstructionTooltipChrome {\n aiIcon: string\n sendIcon: string\n sendPromptIcon: string\n enterKeyIcon: string\n chevronLeftIcon: string\n chevronRightIcon: string\n suggestionsHeaderLabel: string\n sendAsPromptHeaderLabel: string\n sendAsPromptLabel: string\n submitButtonLabel: string\n listboxLabel: string\n}\n\ntype ViewMode = { kind: 'main' } | { kind: 'submenu'; id: string }\n\ninterface DisplayItem {\n id: string\n icon: string\n label: string\n hasSubmenu: boolean\n /// undefined when the item opens a submenu; defined when it sends a prompt\n prompt?: { text: string; streamingLabel?: string }\n}\n\nfunction renderHighlighted(label: string, query: string) {\n const q = query.trim()\n if (!q) return [label]\n const lower = label.toLowerCase()\n const lq = q.toLowerCase()\n const idx = lower.indexOf(lq)\n if (idx === -1) return [label]\n return [\n label.slice(0, idx),\n h('mark', null, label.slice(idx, idx + q.length)),\n label.slice(idx + q.length),\n ]\n}\n\ntype AIInstructionInputProps = {\n placeholder: Ref<string>\n /// Bumped by the view layer every time the tooltip is shown, so the\n /// component can reset transient state (input value, submenu, cursor).\n resetSignal: Ref<number>\n suggestions: ResolvedSuggestions\n chrome: AIInstructionTooltipChrome\n onConfirm: (instruction: string, label?: string) => void\n onCancel: () => void\n}\n\nexport const AIInstructionInput = defineComponent<AIInstructionInputProps>({\n props: {\n placeholder: { type: Object, required: true },\n resetSignal: { type: Object, required: true },\n suggestions: { type: Object, required: true },\n chrome: { type: Object, required: true },\n onConfirm: { type: Function, required: true },\n onCancel: { type: Function, required: true },\n },\n setup({\n placeholder,\n resetSignal,\n suggestions,\n chrome,\n onConfirm,\n onCancel,\n }) {\n const inputValue = ref('')\n const view = ref<ViewMode>({ kind: 'main' })\n const selectedIndex = ref(0)\n const inputRef = ref<HTMLInputElement | null>(null)\n const listRef = ref<HTMLDivElement | null>(null)\n\n // Stable id pair used to wire the input ↔ listbox combobox so that\n // screen readers announce the highlighted option as the user moves\n // through the suggestions with the arrow keys.\n const listboxId = `ai-instruction-list-${Math.random().toString(36).slice(2, 9)}`\n const optionId = (idx: number) => `${listboxId}-opt-${idx}`\n\n watch(resetSignal, () => {\n inputValue.value = ''\n view.value = { kind: 'main' }\n selectedIndex.value = 0\n })\n\n const allItems = computed<DisplayItem[]>(() => {\n if (view.value.kind === 'submenu') {\n const submenu = suggestions.submenus[view.value.id]\n if (!submenu) return []\n return submenu.items.map(({ id, item }) => ({\n id,\n icon: item.icon,\n label: item.label,\n hasSubmenu: false,\n prompt: { text: item.prompt, streamingLabel: item.streamingLabel },\n }))\n }\n return suggestions.main.map((entry) => {\n if (entry.kind === 'item') {\n return {\n id: entry.id,\n icon: entry.item.icon,\n label: entry.item.label,\n hasSubmenu: false,\n prompt: {\n text: entry.item.prompt,\n streamingLabel: entry.item.streamingLabel,\n },\n }\n }\n return {\n id: entry.id,\n icon: entry.def.icon,\n label: entry.def.label,\n hasSubmenu: true,\n }\n })\n })\n\n const currentSubmenuDef = computed(() => {\n if (view.value.kind !== 'submenu') return null\n return suggestions.submenus[view.value.id]?.def ?? null\n })\n\n const filteredItems = computed(() => {\n const q = inputValue.value.trim().toLowerCase()\n if (!q) return allItems.value\n return allItems.value.filter((item) =>\n item.label.toLowerCase().includes(q)\n )\n })\n\n const showSendAsPrompt = computed(() => inputValue.value.trim().length > 0)\n\n const totalItems = computed(\n () => filteredItems.value.length + (showSendAsPrompt.value ? 1 : 0)\n )\n\n watch([filteredItems, view, showSendAsPrompt], () => {\n // When the user has typed something, default the highlight to the\n // \"Send as prompt\" row (always last in the list) so pressing Enter\n // sends the typed text instead of running whichever built-in\n // suggestion happens to substring-match the query.\n selectedIndex.value = showSendAsPrompt.value\n ? filteredItems.value.length\n : 0\n })\n\n const focusInput = () => {\n void nextTick(() => inputRef.value?.focus())\n }\n\n const enterSubmenu = (id: string) => {\n view.value = { kind: 'submenu', id }\n inputValue.value = ''\n selectedIndex.value = 0\n focusInput()\n }\n\n const exitSubmenu = () => {\n view.value = { kind: 'main' }\n inputValue.value = ''\n selectedIndex.value = 0\n focusInput()\n }\n\n const runItem = (item: DisplayItem) => {\n if (item.hasSubmenu) {\n enterSubmenu(item.id)\n } else if (item.prompt) {\n onConfirm(item.prompt.text, item.prompt.streamingLabel)\n inputValue.value = ''\n }\n }\n\n const submitRaw = () => {\n const v = inputValue.value.trim()\n if (!v) return\n onConfirm(v)\n inputValue.value = ''\n }\n\n const onSelectCurrent = () => {\n const idx = selectedIndex.value\n const items = filteredItems.value\n if (idx < items.length) {\n runItem(items[idx]!)\n } else if (showSendAsPrompt.value) {\n submitRaw()\n }\n }\n\n const scrollToSelected = () => {\n void nextTick(() => {\n const list = listRef.value\n if (!list) return\n const el = list.querySelector(\n `[data-index=\"${selectedIndex.value}\"]`\n ) as HTMLElement | null\n el?.scrollIntoView({ block: 'nearest' })\n })\n }\n\n const onKeydown = (e: KeyboardEvent) => {\n e.stopPropagation()\n\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n if (totalItems.value === 0) return\n selectedIndex.value = (selectedIndex.value + 1) % totalItems.value\n scrollToSelected()\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (totalItems.value === 0) return\n selectedIndex.value =\n (selectedIndex.value - 1 + totalItems.value) % totalItems.value\n scrollToSelected()\n return\n }\n\n if (e.key === 'Enter') {\n e.preventDefault()\n onSelectCurrent()\n return\n }\n\n if (e.key === 'Escape') {\n e.preventDefault()\n if (view.value.kind === 'submenu') exitSubmenu()\n else onCancel()\n return\n }\n\n if (\n e.key === 'Backspace' &&\n inputValue.value === '' &&\n view.value.kind === 'submenu'\n ) {\n e.preventDefault()\n exitSubmenu()\n }\n }\n\n const onItemPointerDown = (e: Event) => {\n e.preventDefault()\n }\n\n return () => {\n const items = filteredItems.value\n const showPrompt = showSendAsPrompt.value\n const submenuDef = currentSubmenuDef.value\n\n return (\n <div class=\"ai-instruction\">\n <div class=\"ai-instruction-input\">\n <span class=\"ai-instruction-input-prefix\">\n <Icon icon={chrome.aiIcon} />\n </span>\n <input\n ref={inputRef}\n class=\"ai-instruction-input-field\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-autocomplete=\"list\"\n aria-controls={listboxId}\n aria-activedescendant={\n totalItems.value > 0 ? optionId(selectedIndex.value) : undefined\n }\n placeholder={\n submenuDef ? submenuDef.searchPlaceholder : placeholder.value\n }\n value={inputValue.value}\n onInput={(e: Event) => {\n inputValue.value = (e.target as HTMLInputElement).value\n }}\n onKeydown={onKeydown}\n />\n <button\n type=\"button\"\n class=\"ai-instruction-submit\"\n aria-label={chrome.submitButtonLabel}\n disabled={!showPrompt}\n onMousedown={onItemPointerDown}\n onClick={submitRaw}\n >\n <Icon icon={chrome.sendIcon} />\n </button>\n </div>\n\n <div\n class=\"ai-instruction-list\"\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={chrome.listboxLabel}\n >\n {submenuDef && (\n <button\n type=\"button\"\n class=\"ai-instruction-back\"\n onMousedown={onItemPointerDown}\n onClick={exitSubmenu}\n >\n <span class=\"ai-instruction-back-icon\" aria-hidden=\"true\">\n <Icon icon={chrome.chevronLeftIcon} />\n </span>\n <span>{submenuDef.title}</span>\n </button>\n )}\n\n {items.length > 0 && (\n <div class=\"ai-instruction-section\">\n <div class=\"ai-instruction-section-header\">\n {chrome.suggestionsHeaderLabel}\n </div>\n {items.map((item, idx) => (\n <div\n key={item.id}\n id={optionId(idx)}\n data-index={idx}\n role=\"option\"\n aria-selected={idx === selectedIndex.value}\n class={[\n 'ai-instruction-item',\n idx === selectedIndex.value ? 'active' : '',\n ]}\n onMousedown={onItemPointerDown}\n onClick={() => runItem(item)}\n onPointerenter={() => {\n selectedIndex.value = idx\n }}\n >\n <span class=\"ai-instruction-item-icon\">\n <Icon icon={item.icon} />\n </span>\n <span class=\"ai-instruction-item-label\">\n {renderHighlighted(item.label, inputValue.value)}\n </span>\n {item.hasSubmenu && (\n <span class=\"ai-instruction-item-arrow\">\n <Icon icon={chrome.chevronRightIcon} />\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n\n {showPrompt && (\n <div class=\"ai-instruction-section\">\n <div class=\"ai-instruction-section-header\">\n {chrome.sendAsPromptHeaderLabel}\n </div>\n <div\n id={optionId(items.length)}\n data-index={items.length}\n role=\"option\"\n aria-selected={selectedIndex.value === items.length}\n class={[\n 'ai-instruction-item',\n 'ai-instruction-item-prompt',\n selectedIndex.value === items.length ? 'active' : '',\n ]}\n onMousedown={onItemPointerDown}\n onClick={submitRaw}\n onPointerenter={() => {\n selectedIndex.value = items.length\n }}\n >\n <span class=\"ai-instruction-item-icon\">\n <Icon icon={chrome.sendPromptIcon} />\n </span>\n <span class=\"ai-instruction-item-label\">\n {chrome.sendAsPromptLabel}{' '}\n <span class=\"ai-instruction-item-quote\">\n \"{inputValue.value}\"\n </span>\n </span>\n <span class=\"ai-instruction-item-shortcut\">\n <Icon icon={chrome.enterKeyIcon} />\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n },\n})\n\nexport type { AISuggestionItem }\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { $ctx } from '@milkdown/kit/utils'\n\nimport type { AIFeatureConfig } from '../types'\nimport type { AIInstructionTooltipChrome } from './component'\n\nimport {\n aiIcon as defaultAiIcon,\n chevronLeftIcon as defaultChevronLeftIcon,\n chevronRightIcon as defaultChevronRightIcon,\n enterKeyIcon as defaultEnterKeyIcon,\n sendIcon as defaultSendIcon,\n sendPromptIcon as defaultSendPromptIcon,\n} from '../../../icons'\nimport { AISuggestionsBuilder, applyDefaultSuggestions } from './suggestions'\nimport {\n AIInstructionTooltipView,\n type AIInstructionTooltipViewConfig,\n} from './view'\n\nexport interface AIInstructionTooltipAPI {\n show: (from: number, to: number) => void\n}\n\nconst defaultAPI: AIInstructionTooltipAPI = {\n show: () => {},\n}\n\nexport const aiInstructionTooltipAPI = $ctx(\n { ...defaultAPI },\n 'aiInstructionTooltipAPI'\n)\n\nexport const aiInstructionTooltip = tooltipFactory('CREPE_AI_INSTRUCTION')\n\n/// Default strings for the instruction tooltip. Exported so the JSDoc on\n/// `AIFeatureConfig` and consumers stay in sync with what the resolver\n/// actually uses.\nexport const DEFAULT_SUGGESTIONS_HEADER_LABEL = 'SUGGESTIONS'\nexport const DEFAULT_SEND_AS_PROMPT_HEADER_LABEL = 'SEND AS PROMPT'\nexport const DEFAULT_SEND_AS_PROMPT_LABEL = 'Ask AI:'\nexport const DEFAULT_SUBMIT_BUTTON_LABEL = 'Send prompt'\nexport const DEFAULT_LISTBOX_LABEL = 'AI suggestions'\nexport const DEFAULT_INSTRUCTION_PLACEHOLDER =\n 'Tell AI what to do with the selection…'\n\nfunction resolveChrome(config?: AIFeatureConfig): AIInstructionTooltipChrome {\n return {\n aiIcon: config?.aiIcon ?? defaultAiIcon,\n sendIcon: config?.sendIcon ?? defaultSendIcon,\n sendPromptIcon: config?.sendPromptIcon ?? defaultSendPromptIcon,\n enterKeyIcon: config?.enterKeyIcon ?? defaultEnterKeyIcon,\n chevronLeftIcon: config?.chevronLeftIcon ?? defaultChevronLeftIcon,\n chevronRightIcon: config?.chevronRightIcon ?? defaultChevronRightIcon,\n suggestionsHeaderLabel:\n config?.suggestionsHeaderLabel ?? DEFAULT_SUGGESTIONS_HEADER_LABEL,\n sendAsPromptHeaderLabel:\n config?.sendAsPromptHeaderLabel ?? DEFAULT_SEND_AS_PROMPT_HEADER_LABEL,\n sendAsPromptLabel:\n config?.sendAsPromptLabel ?? DEFAULT_SEND_AS_PROMPT_LABEL,\n submitButtonLabel: config?.submitButtonLabel ?? DEFAULT_SUBMIT_BUTTON_LABEL,\n listboxLabel: config?.listboxLabel ?? DEFAULT_LISTBOX_LABEL,\n }\n}\n\nfunction resolveViewConfig(\n config?: AIFeatureConfig\n): AIInstructionTooltipViewConfig {\n const builder = new AISuggestionsBuilder()\n applyDefaultSuggestions(builder)\n config?.buildAISuggestions?.(builder)\n return {\n placeholder:\n config?.instructionPlaceholder ?? DEFAULT_INSTRUCTION_PLACEHOLDER,\n chrome: resolveChrome(config),\n suggestions: builder.build(),\n }\n}\n\nexport function configureAIInstructionTooltip(config?: AIFeatureConfig) {\n return (ctx: Ctx) => {\n const viewConfig = resolveViewConfig(config)\n let tooltipView: AIInstructionTooltipView | null = null\n\n ctx.update(aiInstructionTooltipAPI.key, (api) => ({\n ...api,\n show: (from, to) => {\n tooltipView?.show(from, to)\n },\n }))\n\n ctx.set(aiInstructionTooltip.key, {\n view: (view) => {\n tooltipView = new AIInstructionTooltipView(ctx, view, viewConfig)\n return tooltipView\n },\n })\n }\n}\n","import { $nodeSchema } from '@milkdown/kit/utils'\nimport katex from 'katex'\n\nexport const mathInlineId = 'math_inline'\n\n/// Schema for inline math node.\n/// Add support for:\n///\n/// ```markdown\n/// $a^2 + b^2 = c^2$\n/// ```\nexport const mathInlineSchema = $nodeSchema(mathInlineId, () => ({\n group: 'inline',\n inline: true,\n draggable: true,\n atom: true,\n attrs: {\n value: {\n default: '',\n },\n },\n parseDOM: [\n {\n tag: `span[data-type=\"${mathInlineId}\"]`,\n getAttrs: (dom) => {\n return {\n value: (dom as HTMLElement).dataset.value ?? '',\n }\n },\n },\n ],\n toDOM: (node) => {\n const code: string = node.attrs.value\n const dom = document.createElement('span')\n dom.dataset.type = mathInlineId\n dom.dataset.value = code\n katex.render(code, dom, {\n throwOnError: false,\n })\n\n return dom\n },\n parseMarkdown: {\n match: (node) => node.type === 'inlineMath',\n runner: (state, node, type) => {\n state.addNode(type, { value: node.value as string })\n },\n },\n toMarkdown: {\n match: (node) => node.type.name === mathInlineId,\n runner: (state, node) => {\n state.addNode('inlineMath', undefined, node.attrs.value)\n },\n },\n}))\n","import type { Node } from '@milkdown/kit/prose/model'\n\nimport { findNodeInSelection } from '@milkdown/kit/prose'\nimport { NodeSelection, TextSelection } from '@milkdown/kit/prose/state'\nimport { $command } from '@milkdown/kit/utils'\n\nimport { mathInlineSchema } from './inline-latex'\n\nexport const toggleLatexCommand = $command('ToggleLatex', (ctx) => {\n return () => (state, dispatch) => {\n const {\n hasNode: hasLatex,\n pos: latexPos,\n target: latexNode,\n } = findNodeInSelection(state, mathInlineSchema.type(ctx))\n\n const { selection, doc, tr } = state\n if (!hasLatex) {\n const text = doc.textBetween(selection.from, selection.to)\n let _tr = tr.replaceSelectionWith(\n mathInlineSchema.type(ctx).create({\n value: text,\n })\n )\n if (dispatch) {\n dispatch(\n _tr.setSelection(NodeSelection.create(_tr.doc, selection.from))\n )\n }\n return true\n }\n\n const { from, to } = selection\n if (!latexNode || latexPos < 0) return false\n\n let _tr = tr.delete(latexPos, latexPos + 1)\n const content = (latexNode as Node).attrs.value\n _tr = _tr.insertText(content, latexPos)\n if (dispatch) {\n dispatch(\n _tr.setSelection(\n TextSelection.create(_tr.doc, from, to + content.length - 1)\n )\n )\n }\n return true\n }\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\n\nimport { toggleLinkCommand } from '@milkdown/kit/component/link-tooltip'\nimport { commandsCtx, editorViewCtx } from '@milkdown/kit/core'\nimport {\n emphasisSchema,\n inlineCodeSchema,\n isMarkSelectedCommand,\n isNodeSelectedCommand,\n linkSchema,\n strongSchema,\n toggleEmphasisCommand,\n toggleInlineCodeCommand,\n toggleStrongCommand,\n} from '@milkdown/kit/preset/commonmark'\nimport {\n strikethroughSchema,\n toggleStrikethroughCommand,\n} from '@milkdown/kit/preset/gfm'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { CrepeFeature } from '..'\nimport { useCrepeFeatures } from '../../core/slice'\nimport {\n aiIcon,\n boldIcon,\n codeIcon,\n functionsIcon,\n italicIcon,\n linkIcon,\n strikethroughIcon,\n} from '../../icons'\nimport { GroupBuilder } from '../../utils/group-builder'\nimport { aiProviderConfig } from '../ai/commands'\nimport { aiInstructionTooltipAPI } from '../ai/instruction-tooltip'\nimport { toggleLatexCommand } from '../latex/command'\nimport { mathInlineSchema } from '../latex/inline-latex'\n\nexport type ToolbarItem = {\n active: (ctx: Ctx) => boolean\n icon: string\n}\n\nexport function getGroups(config?: ToolbarFeatureConfig, ctx?: Ctx) {\n const groupBuilder = new GroupBuilder<ToolbarItem>()\n\n groupBuilder\n .addGroup('formatting', 'Formatting')\n .addItem('bold', {\n icon: config?.boldIcon ?? boldIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, strongSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrongCommand.key)\n },\n })\n .addItem('italic', {\n icon: config?.italicIcon ?? italicIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n emphasisSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleEmphasisCommand.key)\n },\n })\n .addItem('strikethrough', {\n icon: config?.strikethroughIcon ?? strikethroughIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n strikethroughSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleStrikethroughCommand.key)\n },\n })\n\n const functionGroup = groupBuilder.addGroup('function', 'Function')\n functionGroup.addItem('code', {\n icon: config?.codeIcon ?? codeIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isMarkSelectedCommand.key,\n inlineCodeSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleInlineCodeCommand.key)\n },\n })\n\n const flags = ctx && useCrepeFeatures(ctx).get()\n const isLatexEnabled = flags?.includes(CrepeFeature.Latex)\n if (isLatexEnabled) {\n functionGroup.addItem('latex', {\n icon: config?.latexIcon ?? functionsIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(\n isNodeSelectedCommand.key,\n mathInlineSchema.type(ctx)\n )\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLatexCommand.key)\n },\n })\n }\n functionGroup.addItem('link', {\n icon: config?.linkIcon ?? linkIcon,\n active: (ctx) => {\n const commands = ctx.get(commandsCtx)\n return commands.call(isMarkSelectedCommand.key, linkSchema.type(ctx))\n },\n onRun: (ctx) => {\n const commands = ctx.get(commandsCtx)\n commands.call(toggleLinkCommand.key)\n },\n })\n\n // Skip the AI button entirely when the feature is disabled or when no\n // provider is configured — without a provider the palette would open\n // but `runAICmd` would silently reject every action. Toolbar-level\n // `aiIcon` wins over `AIFeatureConfig.aiIcon` so consumers can override\n // just the toolbar entry without touching the tooltip prefix.\n // The aiProviderConfig slice is only injected when the AI feature is\n // active, so guard the lookup behind the flag check.\n if (ctx && flags?.includes(CrepeFeature.AI)) {\n const aiCfg = ctx.get(aiProviderConfig.key)\n if (aiCfg.provider) {\n functionGroup.addItem('ai', {\n icon: config?.aiIcon ?? aiCfg.aiIcon ?? aiIcon,\n active: () => false,\n onRun: (ctx) => {\n const api = ctx.get(aiInstructionTooltipAPI.key)\n const view = ctx.get(editorViewCtx)\n const { from, to } = view.state.selection\n api.show(from, to)\n },\n })\n }\n }\n\n config?.buildToolbar?.(groupBuilder)\n\n return groupBuilder.build()\n}\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type { Selection } from '@milkdown/kit/prose/state'\n\nimport { Icon } from '@milkdown/kit/component'\nimport { editorCtx, EditorStatus } from '@milkdown/kit/core'\nimport clsx from 'clsx'\nimport {\n defineComponent,\n type Ref,\n type ShallowRef,\n h,\n Fragment,\n computed,\n} from 'vue'\n\nimport type { ToolbarFeatureConfig } from '.'\n\nimport { keepAlive } from '../../utils/keep-alive'\nimport { getGroups, type ToolbarItem } from './config'\n\nkeepAlive(h, Fragment)\n\ntype ToolbarProps = {\n ctx: Ctx\n hide: () => void\n show: Ref<boolean>\n selection: ShallowRef<Selection>\n config?: ToolbarFeatureConfig\n}\n\nexport const Toolbar = defineComponent<ToolbarProps>({\n props: {\n ctx: {\n type: Object,\n required: true,\n },\n hide: {\n type: Function,\n required: true,\n },\n show: {\n type: Object,\n required: true,\n },\n selection: {\n type: Object,\n required: true,\n },\n config: {\n type: Object,\n required: false,\n },\n },\n setup(props) {\n const { ctx, config } = props\n\n const onClick = (fn?: (ctx: Ctx) => void) => (e: MouseEvent) => {\n e.preventDefault()\n if (ctx) {\n fn?.(ctx)\n }\n }\n\n function checkActive(checker: ToolbarItem['active']) {\n // make sure the function subscribed to vue reactive\n keepAlive(props.selection.value)\n // Check if the edtior is ready\n const status = ctx.get(editorCtx).status\n if (status !== EditorStatus.Created) return false\n\n return checker(ctx)\n }\n\n const groupInfo = computed(() => getGroups(config, ctx))\n\n return () => {\n return (\n <>\n {groupInfo.value\n .map((group) => {\n return group.items.map((item) => {\n return (\n <button\n type=\"button\"\n class={clsx(\n 'toolbar-item',\n ctx && checkActive(item.active) && 'active'\n )}\n onPointerdown={onClick(item.onRun)}\n >\n <Icon icon={item.icon} />\n </button>\n )\n })\n })\n .reduce((acc, curr, index) => {\n if (index === 0) {\n acc.push(...curr)\n } else {\n acc.push(<div class=\"divider\"></div>, ...curr)\n }\n return acc\n }, [])}\n </>\n )\n }\n },\n})\n","import type { Ctx } from '@milkdown/kit/ctx'\nimport type {\n EditorState,\n PluginView,\n Selection,\n} from '@milkdown/kit/prose/state'\nimport type { EditorView } from '@milkdown/kit/prose/view'\n\nimport { TooltipProvider, tooltipFactory } from '@milkdown/kit/plugin/tooltip'\nimport { TextSelection } from '@milkdown/kit/prose/state'\nimport { createApp, ref, shallowRef, type App, type ShallowRef } from 'vue'\n\nimport type { GroupBuilder } from '../../utils'\nimport type { DefineFeature } from '../shared'\nimport type { ToolbarItem } from './config'\n\nimport { crepeFeatureConfig } from '../../core/slice'\nimport { CrepeFeature } from '../../feature'\nimport { Toolbar } from './component'\n\ninterface ToolbarConfig {\n boldIcon: string\n codeIcon: string\n italicIcon: string\n linkIcon: string\n strikethroughIcon: string\n latexIcon: string\n aiIcon: string\n buildToolbar: (builder: GroupBuilder<ToolbarItem>) => void\n}\n\nexport type ToolbarFeatureConfig = Partial<ToolbarConfig>\n\nconst toolbarTooltip = tooltipFactory('CREPE_TOOLBAR')\n\nclass ToolbarView implements PluginView {\n #tooltipProvider: TooltipProvider\n #content: HTMLElement\n #app: App\n #selection: ShallowRef<Selection>\n #show = ref(false)\n\n constructor(ctx: Ctx, view: EditorView, config?: ToolbarFeatureConfig) {\n const content = document.createElement('div')\n content.className = 'milkdown-toolbar'\n this.#selection = shallowRef(view.state.selection)\n const app = createApp(Toolbar, {\n ctx,\n hide: this.hide,\n config,\n selection: this.#selection,\n show: this.#show,\n })\n app.mount(content)\n this.#content = content\n this.#app = app\n\n this.#tooltipProvider = new TooltipProvider({\n content: this.#content,\n debounce: 20,\n offset: 10,\n shouldShow(view: EditorView) {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock =\n !doc.textBetween(from, to).length &&\n selection instanceof TextSelection\n\n const isNotTextBlock = !(selection instanceof TextSelection)\n\n const activeElement = (view.dom.getRootNode() as ShadowRoot | Document)\n .activeElement\n const isTooltipChildren = content.contains(activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus ||\n isNotTextBlock ||\n empty ||\n isEmptyTextBlock ||\n isReadonly\n )\n return false\n\n return true\n },\n })\n this.#tooltipProvider.onShow = () => {\n this.#show.value = true\n }\n this.#tooltipProvider.onHide = () => {\n this.#show.value = false\n }\n this.update(view)\n }\n\n update = (view: EditorView, prevState?: EditorState) => {\n this.#tooltipProvider.update(view, prevState)\n this.#selection.value = view.state.selection\n }\n\n destroy = () => {\n this.#tooltipProvider.destroy()\n this.#app.unmount()\n this.#content.remove()\n }\n\n hide = () => {\n this.#tooltipProvider.hide()\n }\n}\n\nexport const toolbar: DefineFeature<ToolbarFeatureConfig> = (\n editor,\n config\n) => {\n editor\n .config(crepeFeatureConfig(CrepeFeature.Toolbar))\n .config((ctx) => {\n ctx.set(toolbarTooltip.key, {\n view: (view) => new ToolbarView(ctx, view, config),\n })\n })\n .use(toolbarTooltip)\n}\n"],"names":["createSlice","CrepeFeature","__privateAdd","__privateSet","__privateGet","group","editorViewCtx","serializerCtx","$ctx","commandsCtx","pushChunkCmd","endStreamingCmd","aiProviderError","abortStreamingCmd","$command","startStreamingCmd","aiBuildContextError","streamingPluginKey","h","defineComponent","ref","watch","computed","nextTick","Icon","tooltipFactory","$nodeSchema","state","findNodeInSelection","_tr","NodeSelection","TextSelection","ctx","isMarkSelectedCommand","strongSchema","toggleStrongCommand","emphasisSchema","toggleEmphasisCommand","strikethroughSchema","toggleStrikethroughCommand","inlineCodeSchema","toggleInlineCodeCommand","isNodeSelectedCommand","linkSchema","toggleLinkCommand","Fragment","editorCtx","EditorStatus","shallowRef","createApp","TooltipProvider","view"],"mappings":"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"}
|