@jvs-milkdown/crepe 1.2.29 → 1.2.31

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.
Files changed (38) hide show
  1. package/lib/cjs/builder.js +2 -1
  2. package/lib/cjs/builder.js.map +1 -1
  3. package/lib/cjs/feature/toolbar/index.js +84 -62
  4. package/lib/cjs/feature/toolbar/index.js.map +1 -1
  5. package/lib/cjs/index.js +1121 -988
  6. package/lib/cjs/index.js.map +1 -1
  7. package/lib/esm/builder.js +2 -1
  8. package/lib/esm/builder.js.map +1 -1
  9. package/lib/esm/feature/toolbar/index.js +84 -62
  10. package/lib/esm/feature/toolbar/index.js.map +1 -1
  11. package/lib/esm/index.js +1143 -1010
  12. package/lib/esm/index.js.map +1 -1
  13. package/lib/theme/common/image-block.css +5 -1
  14. package/lib/theme/common/reset.css +1 -1
  15. package/lib/theme/common/table.css +5 -0
  16. package/lib/theme/common/toolbar.css +23 -0
  17. package/lib/tsconfig.tsbuildinfo +1 -1
  18. package/lib/types/feature/fixed-toolbar/component.d.ts +2 -2
  19. package/lib/types/feature/fixed-toolbar/component.d.ts.map +1 -1
  20. package/lib/types/feature/fixed-toolbar/index.d.ts +2 -0
  21. package/lib/types/feature/fixed-toolbar/index.d.ts.map +1 -1
  22. package/lib/types/feature/fixed-toolbar/outline-panel.d.ts.map +1 -1
  23. package/lib/types/feature/fixed-toolbar/view-menu-state.d.ts +3 -0
  24. package/lib/types/feature/fixed-toolbar/view-menu-state.d.ts.map +1 -1
  25. package/lib/types/feature/toolbar/component.d.ts +2 -2
  26. package/lib/types/feature/toolbar/component.d.ts.map +1 -1
  27. package/lib/types/feature/toolbar/index.d.ts.map +1 -1
  28. package/package.json +4 -4
  29. package/src/feature/fixed-toolbar/component.tsx +204 -111
  30. package/src/feature/fixed-toolbar/index.ts +31 -9
  31. package/src/feature/fixed-toolbar/outline-panel.tsx +1 -2
  32. package/src/feature/fixed-toolbar/view-menu-state.ts +2 -0
  33. package/src/feature/toolbar/component.tsx +57 -44
  34. package/src/feature/toolbar/index.ts +9 -13
  35. package/src/theme/common/image-block.css +6 -1
  36. package/src/theme/common/reset.css +1 -1
  37. package/src/theme/common/table.css +5 -0
  38. package/src/theme/common/toolbar.css +30 -0
@@ -56,7 +56,8 @@ const createViewMenuState = () => vue.reactive({
56
56
  showTitle: false,
57
57
  showCover: false,
58
58
  coverUrl: "",
59
- editorWidth: "default"
59
+ editorWidth: "default",
60
+ fixedToolbarVisible: true
60
61
  });
61
62
  const viewMenuStateCtx = utils.$ctx(createViewMenuState(), "viewMenuStateCtx");
62
63
 
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sources":["../../src/feature/index.ts","../../src/feature/attachment/config.ts","../../src/feature/fixed-toolbar/view-menu-state.ts","../../src/feature/inline-diff/config.ts","../../src/core/locale.ts","../../src/core/slice.ts","../../src/core/builder.ts"],"sourcesContent":["import type { AttachmentFeatureConfig } from './attachment/config'\nimport type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { DiffBlockFeatureConfig } from './diff-block'\nimport type { FixedToolbarFeatureConfig } from './fixed-toolbar'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { InlineDiffFeatureConfig } from './inline-diff'\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 /// Fixed formatting toolbar that is always visible at the top of the editor.\n FixedToolbar = 'fixed-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 /// File attachment uploads\n Attachment = 'attachment',\n\n /// Inline diff comparison between two document versions, similar to Word track changes.\n InlineDiff = 'inline-diff',\n\n /// Diff comparison block for showing code differences\n DiffBlock = 'diff-block',\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.FixedToolbar]?: FixedToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n [CrepeFeature.Attachment]?: AttachmentFeatureConfig\n [CrepeFeature.InlineDiff]?: InlineDiffFeatureConfig\n [CrepeFeature.DiffBlock]?: DiffBlockFeatureConfig\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.FixedToolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n [CrepeFeature.Attachment]: true,\n [CrepeFeature.InlineDiff]: false,\n [CrepeFeature.DiffBlock]: true,\n}\n","import { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport interface AttachmentFeatureConfig {\n onUpload: (file: File) => Promise<{ url: string; name: string; size: number }>\n uploadButton: string\n uploadPlaceholderText: string\n downloadText: string\n}\n\nexport const attachmentConfig = $ctx(\n {\n onUpload: async (file: File) => {\n return {\n url: URL.createObjectURL(file),\n name: file.name,\n size: file.size,\n }\n },\n uploadButton: 'Upload file',\n uploadPlaceholderText: 'or paste link',\n downloadText: 'Download',\n } as AttachmentFeatureConfig,\n 'attachmentConfig'\n)\n","// @ts-ignore\nimport { reactive } from 'vue'\n\nexport type OutlinePosition = 'left' | 'right'\nexport type EditorWidth = 'default' | 'wide' | 'full'\n\nexport interface ViewMenuState {\n outlineVisible: boolean\n outlinePosition: OutlinePosition\n outlineWidth: number\n documentBackground: string | null\n showTitle: boolean\n showCover: boolean\n coverUrl: string\n editorWidth: EditorWidth\n}\n\nexport const editorWidthMap: Record<EditorWidth, string> = {\n default: '820px',\n wide: '1020px',\n full: 'none',\n}\n\nexport const createViewMenuState = () =>\n reactive<ViewMenuState>({\n outlineVisible: false,\n outlinePosition: 'left',\n outlineWidth: 250,\n documentBackground: '#FFFFFF',\n showTitle: false,\n showCover: false,\n coverUrl: '',\n editorWidth: 'default',\n })\n\nimport { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport const viewMenuStateCtx = $ctx(createViewMenuState(), 'viewMenuStateCtx')\n","import { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport interface InlineDiffConfig {\n addedClass: string\n deletedClass: string\n}\n\nexport interface InlineDiffApi {\n showDiff: (oldMarkdown: string, newMarkdown?: string) => void\n hideDiff: () => void\n isShowing: () => boolean\n}\n\nexport const inlineDiffConfig = $ctx(\n {\n addedClass: 'crepe-diff-added',\n deletedClass: 'crepe-diff-deleted',\n } as InlineDiffConfig,\n 'inlineDiffConfigCtx'\n)\n\nconst noopApi: InlineDiffApi = {\n showDiff: () => {},\n hideDiff: () => {},\n isShowing: () => false,\n}\n\nexport const inlineDiffApiCtx = $ctx(noopApi, 'inlineDiffApiCtx')\n","import type { Ctx } from '@jvs-milkdown/kit/ctx'\n\nimport { createSlice } from '@jvs-milkdown/kit/ctx'\n\nexport const zhCN = {\n // block handle\n 'handle.add': '插入内容',\n 'handle.menu': '点击打开菜单',\n 'handle.drag': '拖拽移动位置',\n // placeholder\n 'placeholder.text': \"输入正文或 '/' 快速插入内容\",\n\n // toolbar\n 'toolbar.heading': '标题',\n 'toolbar.formatting': '格式',\n 'toolbar.function': '功能',\n 'toolbar.formatPainter': '格式刷',\n\n // menu bar\n 'menuBar.file': '文件',\n 'menuBar.edit': '编辑',\n 'menuBar.view': '视图',\n 'menuBar.insert': '插入',\n 'menuBar.format': '格式',\n\n // view menu\n 'view.outline': '大纲面板',\n 'view.outlineLeft': '在左侧显示',\n 'view.outlineRight': '在右侧显示',\n 'view.docBackground': '文档背景色',\n 'view.title': '显示标题',\n 'view.cover': '显示封面',\n 'view.editorWidth': '内容宽度',\n 'view.widthDefault': '默认',\n 'view.widthWide': '较宽',\n 'view.widthFull': '全宽',\n\n // code-mirror\n 'codeMirror.searchPlaceholder': '搜索语言',\n 'codeMirror.noResultText': '无结果',\n 'codeMirror.previewToggleOptionEdit': '编辑',\n 'codeMirror.previewToggleOptionHide': '隐藏',\n 'codeMirror.previewLabel': '预览',\n 'codeMirror.wrapText': '自动换行',\n\n // link-tooltip\n 'linkTooltip.pasteLink': '粘贴链接...',\n\n // image-block\n 'imageBlock.inlineUploadButton': '上传',\n 'imageBlock.inlineUploadPlaceholder': '或粘贴链接',\n 'imageBlock.blockUploadButton': '上传文件',\n 'imageBlock.blockUploadPlaceholder': '或粘贴链接',\n 'imageBlock.blockCaptionPlaceholder': '写下图片描述...',\n 'imageBlock.blockConfirmButton': '确定',\n\n // attachment-block\n 'attachmentBlock.uploadButton': '上传文件',\n 'attachmentBlock.uploadPlaceholderText': '或点击上传',\n 'attachmentBlock.download': '下载',\n\n // menu categories\n 'menu.group.text': '正文',\n 'menu.group.block': '段落',\n 'menu.group.list': '列表',\n 'menu.group.advanced': '高级',\n\n // menu items\n 'menu.item.text': '普通文本',\n 'menu.item.h1': '标题 1',\n 'menu.item.h2': '标题 2',\n 'menu.item.h3': '标题 3',\n 'menu.item.h4': '标题 4',\n 'menu.item.h5': '标题 5',\n 'menu.item.h6': '标题 6',\n 'menu.item.quote': '引用',\n 'menu.item.divider': '分割线',\n 'menu.item.bulletList': '无序列表',\n 'menu.item.orderedList': '有序列表',\n 'menu.item.taskList': '任务列表',\n 'menu.item.image': '图片',\n 'menu.item.attachment': '视频或文件',\n 'menu.item.code': '代码块',\n 'menu.item.table': '表格',\n 'menu.item.math': '公式',\n 'menu.item.bold': '加粗',\n 'menu.item.italic': '斜体',\n 'menu.item.strikethrough': '删除线',\n 'menu.item.underline': '下划线',\n 'menu.item.highlight': '高亮',\n 'menu.item.lineCode': '行内代码',\n 'menu.item.link': '链接',\n\n // menu tooltips\n 'menu.tooltip.text': '普通文本 (Ctrl+Alt+0)',\n 'menu.tooltip.h1': '标题 1 (Ctrl+Alt+1)\\nMarkdown: # 空格',\n 'menu.tooltip.h2': '标题 2 (Ctrl+Alt+2)\\nMarkdown: ## 空格',\n 'menu.tooltip.h3': '标题 3 (Ctrl+Alt+3)\\nMarkdown: ### 空格',\n 'menu.tooltip.h4': '标题 4 (Ctrl+Alt+4)\\nMarkdown: #### 空格',\n 'menu.tooltip.h5': '标题 5 (Ctrl+Alt+5)\\nMarkdown: ##### 空格',\n 'menu.tooltip.h6': '标题 6 (Ctrl+Alt+6)\\nMarkdown: ###### 空格',\n 'menu.tooltip.quote': '引用 (Ctrl+Shift+9)\\nMarkdown: > 空格',\n 'menu.tooltip.divider': '分割线\\nMarkdown: --- 空格',\n 'menu.tooltip.bulletList':\n '无序列表 (Ctrl+Shift+8)\\nMarkdown: - 空格 或 * 空格',\n 'menu.tooltip.orderedList': '有序列表 (Ctrl+Shift+7)\\nMarkdown: 1. 空格',\n 'menu.tooltip.taskList': '任务列表\\nMarkdown: - [ ] 空格',\n 'menu.tooltip.image': '图片\\nMarkdown: ![alt](url)',\n 'menu.tooltip.code': '代码块 (Ctrl+Shift+\\\\)\\nMarkdown: ``` 回车',\n 'menu.tooltip.table': '表格\\nMarkdown: | | |',\n 'menu.tooltip.math': '公式\\nMarkdown: $$ 回车',\n\n // custom block menu items\n 'customMenu.indentAndAlign': '缩进和对齐',\n 'customMenu.color': '颜色',\n 'customMenu.cut': '剪切',\n 'customMenu.copy': '复制',\n 'customMenu.delete': '删除',\n 'customMenu.addBelow': '在下方添加',\n 'customMenu.alignLeft': '左对齐',\n 'customMenu.alignCenter': '居中对齐',\n 'customMenu.alignRight': '右对齐',\n 'customMenu.increaseIndent': '增加缩进',\n 'customMenu.decreaseIndent': '减少缩进',\n 'customMenu.textColor': '字体颜色',\n 'customMenu.bgColor': '背景颜色',\n 'customMenu.restoreDefault': '恢复默认',\n 'customMenu.colorDefault': '默认',\n 'customMenu.colorRed': '红色',\n 'customMenu.colorOrange': '橙色',\n 'customMenu.colorYellow': '黄色',\n 'customMenu.colorGreen': '绿色',\n 'customMenu.colorBlue': '蓝色',\n 'customMenu.colorPurple': '紫色',\n 'customMenu.colorGray': '灰色',\n 'customMenu.insertTable': '插入支持富文本的表格',\n 'customMenu.export': '导出',\n 'customMenu.import': '导入',\n\n 'customMenu.fontDefault': '默认',\n 'font.fangSong': '仿宋',\n 'font.stFangsong': '华文仿宋',\n 'font.stSong': '华文宋体',\n 'font.stKaiti': '华文楷体',\n 'font.simSun': '宋体',\n 'font.microsoftYaHei': '微软雅黑',\n 'font.kaiTi': '楷体',\n 'font.simHei': '黑体',\n\n // latex\n 'latex.escToExit': '按 ESC 完成输入',\n 'latex.helpDoc': '查看帮助文档',\n 'latex.emptyPlaceholder': '添加 LaTeX 公式',\n 'latex.inputPlaceholder': '请输入公式',\n\n // shortcuts\n 'shortcuts.title': '键盘快捷键',\n 'shortcuts.formatting': '文本格式',\n 'shortcuts.bold': '加粗',\n 'shortcuts.italic': '斜体',\n 'shortcuts.underline': '下划线',\n 'shortcuts.strikethrough': '删除线',\n 'shortcuts.inlineCode': '行内代码',\n 'shortcuts.highlight': '高亮',\n 'shortcuts.paragraph': '段落',\n 'shortcuts.heading': '标题',\n 'shortcuts.block': '块级元素',\n 'shortcuts.codeBlock': '代码块',\n 'shortcuts.blockquote': '引用',\n 'shortcuts.orderedList': '有序列表',\n 'shortcuts.bulletList': '无序列表',\n 'shortcuts.indent': '增加缩进',\n 'shortcuts.outdent': '减少缩进',\n 'shortcuts.hardBreak': '换行',\n 'shortcuts.history': '历史记录',\n 'shortcuts.undo': '撤销',\n 'shortcuts.redo': '重做',\n\n // inline-diff\n 'inlineDiff.accept': '接受',\n 'inlineDiff.reject': '拒绝',\n}\n\nexport const enUS: typeof zhCN = {\n 'handle.add': 'Add content',\n 'handle.menu': 'Open menu',\n 'handle.drag': 'Drag to move',\n 'placeholder.text': \"Type '/' to use slash menu\",\n\n 'toolbar.heading': 'Heading',\n 'toolbar.formatting': 'Formatting',\n 'toolbar.function': 'Function',\n 'toolbar.formatPainter': 'Format Painter',\n\n 'menuBar.file': 'File',\n 'menuBar.edit': 'Edit',\n 'menuBar.view': 'View',\n 'menuBar.insert': 'Insert',\n 'menuBar.format': 'Format',\n\n 'view.outline': 'Outline Panel',\n 'view.outlineLeft': 'Show on Left',\n 'view.outlineRight': 'Show on Right',\n 'view.docBackground': 'Document Background',\n 'view.title': 'Show Title',\n 'view.cover': 'Show Cover',\n 'view.editorWidth': 'Content Width',\n 'view.widthDefault': 'Default',\n 'view.widthWide': 'Wide',\n 'view.widthFull': 'Full Width',\n\n 'codeMirror.searchPlaceholder': 'Search language',\n 'codeMirror.noResultText': 'No result',\n 'codeMirror.previewToggleOptionEdit': 'Edit',\n 'codeMirror.previewToggleOptionHide': 'Hide',\n 'codeMirror.previewLabel': 'Preview',\n 'codeMirror.wrapText': 'Wrap',\n\n 'linkTooltip.pasteLink': 'Paste link...',\n\n 'imageBlock.inlineUploadButton': 'Upload',\n 'imageBlock.inlineUploadPlaceholder': 'or paste link',\n 'imageBlock.blockUploadButton': 'Upload file',\n 'imageBlock.blockUploadPlaceholder': 'or paste link',\n 'imageBlock.blockCaptionPlaceholder': 'Write Image Caption',\n 'imageBlock.blockConfirmButton': 'Confirm',\n\n 'attachmentBlock.uploadButton': 'Upload file',\n 'attachmentBlock.uploadPlaceholderText': 'or click to upload',\n 'attachmentBlock.download': 'Download',\n\n 'menu.group.text': 'Text',\n 'menu.group.block': 'Block',\n 'menu.group.list': 'List',\n 'menu.group.advanced': 'Advanced',\n\n 'menu.item.text': 'Text',\n 'menu.item.h1': 'Heading 1',\n 'menu.item.h2': 'Heading 2',\n 'menu.item.h3': 'Heading 3',\n 'menu.item.h4': 'Heading 4',\n 'menu.item.h5': 'Heading 5',\n 'menu.item.h6': 'Heading 6',\n 'menu.item.quote': 'Quote',\n 'menu.item.divider': 'Divider',\n 'menu.item.bulletList': 'Bullet List',\n 'menu.item.orderedList': 'Ordered List',\n 'menu.item.taskList': 'Task List',\n 'menu.item.image': 'Image',\n 'menu.item.attachment': 'Video or File',\n 'menu.item.code': 'Code',\n 'menu.item.table': 'Table',\n 'menu.item.math': 'Math',\n 'menu.item.bold': 'Bold',\n 'menu.item.italic': 'Italic',\n 'menu.item.strikethrough': 'Strikethrough',\n 'menu.item.underline': 'Underline',\n 'menu.item.highlight': 'Highlight',\n 'menu.item.lineCode': 'Inline Code',\n 'menu.item.link': 'Link',\n\n 'menu.tooltip.text': 'Text (Ctrl+Alt+0)',\n 'menu.tooltip.h1': 'Heading 1 (Ctrl+Alt+1)\\nMarkdown: # Space',\n 'menu.tooltip.h2': 'Heading 2 (Ctrl+Alt+2)\\nMarkdown: ## Space',\n 'menu.tooltip.h3': 'Heading 3 (Ctrl+Alt+3)\\nMarkdown: ### Space',\n 'menu.tooltip.h4': 'Heading 4 (Ctrl+Alt+4)\\nMarkdown: #### Space',\n 'menu.tooltip.h5': 'Heading 5 (Ctrl+Alt+5)\\nMarkdown: ##### Space',\n 'menu.tooltip.h6': 'Heading 6 (Ctrl+Alt+6)\\nMarkdown: ###### Space',\n 'menu.tooltip.quote': 'Quote (Ctrl+Shift+9)\\nMarkdown: > Space',\n 'menu.tooltip.divider': 'Divider\\nMarkdown: --- Space',\n 'menu.tooltip.bulletList':\n 'Bullet List (Ctrl+Shift+8)\\nMarkdown: - Space or * Space',\n 'menu.tooltip.orderedList': 'Ordered List (Ctrl+Shift+7)\\nMarkdown: 1. Space',\n 'menu.tooltip.taskList': 'Task List\\nMarkdown: - [ ] Space',\n 'menu.tooltip.image': 'Image\\nMarkdown: ![alt](url)',\n 'menu.tooltip.code': 'Code Block (Ctrl+Shift+\\\\)\\nMarkdown: ``` Enter',\n 'menu.tooltip.table': 'Table\\nMarkdown: | | |',\n 'menu.tooltip.math': 'Math\\nMarkdown: $$ Enter',\n\n 'customMenu.indentAndAlign': 'Indent & Align',\n 'customMenu.color': 'Color',\n 'customMenu.cut': 'Cut',\n 'customMenu.copy': 'Copy',\n 'customMenu.delete': 'Delete',\n 'customMenu.addBelow': 'Add below',\n 'customMenu.alignLeft': 'Align Left',\n 'customMenu.alignCenter': 'Align Center',\n 'customMenu.alignRight': 'Align Right',\n 'customMenu.increaseIndent': 'Increase Indent',\n 'customMenu.decreaseIndent': 'Decrease Indent',\n 'customMenu.textColor': 'Text Color',\n 'customMenu.bgColor': 'Background Color',\n 'customMenu.restoreDefault': 'Restore Default',\n 'customMenu.colorDefault': 'Default',\n 'customMenu.colorRed': 'Red',\n 'customMenu.colorOrange': 'Orange',\n 'customMenu.colorYellow': 'Yellow',\n 'customMenu.colorGreen': 'Green',\n 'customMenu.colorBlue': 'Blue',\n 'customMenu.colorPurple': 'Purple',\n 'customMenu.colorGray': 'Gray',\n 'customMenu.insertTable': 'Insert Table',\n 'customMenu.export': 'Export',\n 'customMenu.import': 'Import',\n\n 'customMenu.fontDefault': 'Default',\n 'font.fangSong': 'FangSong',\n 'font.stFangsong': 'STFangsong',\n 'font.stSong': 'STSong',\n 'font.stKaiti': 'STKaiti',\n 'font.simSun': 'SimSun',\n 'font.microsoftYaHei': 'Microsoft YaHei',\n 'font.kaiTi': 'KaiTi',\n 'font.simHei': 'SimHei',\n\n 'latex.escToExit': 'Press ESC to finish',\n 'latex.helpDoc': 'Help Doc',\n 'latex.emptyPlaceholder': 'Add LaTeX',\n 'latex.inputPlaceholder': 'Please enter formula',\n\n 'shortcuts.title': 'Keyboard Shortcuts',\n 'shortcuts.formatting': 'Text Formatting',\n 'shortcuts.bold': 'Bold',\n 'shortcuts.italic': 'Italic',\n 'shortcuts.underline': 'Underline',\n 'shortcuts.strikethrough': 'Strikethrough',\n 'shortcuts.inlineCode': 'Inline Code',\n 'shortcuts.highlight': 'Highlight',\n 'shortcuts.paragraph': 'Paragraph',\n 'shortcuts.heading': 'Heading',\n 'shortcuts.block': 'Block Elements',\n 'shortcuts.codeBlock': 'Code Block',\n 'shortcuts.blockquote': 'Blockquote',\n 'shortcuts.orderedList': 'Ordered List',\n 'shortcuts.bulletList': 'Bullet List',\n 'shortcuts.indent': 'Indent',\n 'shortcuts.outdent': 'Outdent',\n 'shortcuts.hardBreak': 'Hard Break',\n 'shortcuts.history': 'History',\n 'shortcuts.undo': 'Undo',\n 'shortcuts.redo': 'Redo',\n\n 'inlineDiff.accept': 'Accept',\n 'inlineDiff.reject': 'Reject',\n}\n\nexport type CrepeTranslations = typeof zhCN\n\nexport const translationsCtx = createSlice<\n Record<string, Partial<CrepeTranslations>>\n>(\n {\n 'zh-CN': zhCN,\n 'en-US': enUS,\n },\n 'translationsCtx'\n)\n\nexport const localeCtx = createSlice('zh-CN', 'localeCtx')\n\nexport function i18n(ctx: Ctx, key: keyof CrepeTranslations): string {\n const translations = ctx.get(translationsCtx)\n const locale = ctx.get(localeCtx)\n return (\n translations[locale]?.[key] ??\n translations['zh-CN']?.[key] ??\n enUS[key] ??\n key\n )\n}\n","import { createSlice, type Ctx } from '@jvs-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 '@jvs-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 '@jvs-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\nexport { localeCtx, translationsCtx } from './locale'\n","import { imageBlockConfig } from '@jvs-milkdown/kit/component/image-block'\nimport {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@jvs-milkdown/kit/core'\nimport { clipboard } from '@jvs-milkdown/kit/plugin/clipboard'\nimport { history } from '@jvs-milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@jvs-milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@jvs-milkdown/kit/plugin/listener'\nimport { trailing } from '@jvs-milkdown/kit/plugin/trailing'\nimport { upload, uploadConfig } from '@jvs-milkdown/kit/plugin/upload'\nimport { commonmark } from '@jvs-milkdown/kit/preset/commonmark'\nimport { gfm } from '@jvs-milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@jvs-milkdown/kit/utils'\n\nimport type { CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeFeature } from '../feature'\nimport { attachmentConfig } from '../feature/attachment/config'\nimport {\n viewMenuStateCtx,\n type ViewMenuState,\n} from '../feature/fixed-toolbar/view-menu-state'\nimport { inlineDiffApiCtx } from '../feature/inline-diff/config'\nimport { zhCN, enUS, type CrepeTranslations } from './locale'\nimport {\n CrepeCtx,\n FeaturesCtx,\n localeCtx,\n translationsCtx,\n useCrepeFeatures,\n} 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 /// The locale of the editor.\n locale?: string\n\n /// The user-defined translation dictionaries.\n translations?: Record<string, Partial<CrepeTranslations>>\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({\n root,\n defaultValue = '',\n locale = 'zh-CN',\n translations,\n }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n\n const mergedTranslations: Record<string, Partial<CrepeTranslations>> = {\n 'zh-CN': { ...zhCN },\n 'en-US': { ...enUS },\n }\n if (translations) {\n for (const [lang, dict] of Object.entries(translations)) {\n mergedTranslations[lang] = {\n ...mergedTranslations[lang],\n ...dict,\n }\n }\n }\n\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n ctx.inject(localeCtx, locale)\n ctx.inject(translationsCtx, mergedTranslations)\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 ctx.update(uploadConfig.key, (prev) => ({\n ...prev,\n uploader: async (files, schema, ctx) => {\n const features = useCrepeFeatures(ctx).get()\n const hasImageBlock = features.includes(CrepeFeature.ImageBlock)\n const hasAttachment = features.includes(CrepeFeature.Attachment)\n\n const imageNodeType = hasImageBlock\n ? schema.nodes['image-block']\n : schema.nodes['image']\n\n const attachmentNodeType = hasAttachment\n ? schema.nodes['attachment']\n : undefined\n\n const onImageUpload = hasImageBlock\n ? ctx.get(imageBlockConfig.key).onUpload\n : undefined\n\n const onAttachmentUpload = hasAttachment\n ? ctx.get(attachmentConfig.key).onUpload\n : undefined\n\n const tasks: Promise<any>[] = []\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i)\n if (!file) continue\n\n if (file.type.includes('image')) {\n if (!imageNodeType) continue\n tasks.push(\n (async () => {\n const src = onImageUpload\n ? await onImageUpload(file)\n : URL.createObjectURL(file)\n return imageNodeType.createAndFill({ src })!\n })()\n )\n } else {\n if (!attachmentNodeType) continue\n tasks.push(\n (async () => {\n let finalFile = file\n if (file.type.includes('video/')) {\n if (!/\\.[a-z0-9]+$/i.test(file.name)) {\n const ext = file.type.split('/')[1] || 'mp4'\n // Keep original file properties but rename\n finalFile = new File([file], `${file.name}.${ext}`, {\n type: file.type,\n })\n }\n }\n\n const { url, name, size } = onAttachmentUpload\n ? await onAttachmentUpload(finalFile)\n : {\n url: URL.createObjectURL(finalFile),\n name: finalFile.name,\n size: finalFile.size,\n }\n return attachmentNodeType.createAndFill({\n src: url,\n name,\n size,\n })!\n })()\n )\n }\n }\n\n const nodes = await Promise.all(tasks)\n return nodes.filter((n: any) => n !== null) as any\n },\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(upload)\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 /// Show inline diff between two markdown versions.\n showDiff = (oldMarkdown: string, newMarkdown: string) => {\n this.#editor.action((ctx) => {\n const api = ctx.get(inlineDiffApiCtx.key)\n api.showDiff(oldMarkdown, newMarkdown)\n })\n return this\n }\n\n /// Hide inline diff and return to editing mode.\n hideDiff = () => {\n this.#editor.action((ctx) => {\n const api = ctx.get(inlineDiffApiCtx.key)\n api.hideDiff()\n })\n return this\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 /// Get the visibility of the outline panel.\n get outlineVisible() {\n let visible = false\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const state = ctx.get(viewMenuStateCtx.key)\n if (state) {\n visible = state.outlineVisible\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return visible\n }\n\n /// Set the visibility of the outline panel.\n setOutlineVisible = (visible: boolean) => {\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const state = ctx.get(viewMenuStateCtx.key)\n if (state) {\n state.outlineVisible = visible\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return this\n }\n\n /// Get the configuration/state of the view menu (outline, background, title, cover, width, etc.)\n getViewMenuState = () => {\n let state: any = null\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const viewState = ctx.get(viewMenuStateCtx.key)\n if (viewState) {\n state = {\n outlineVisible: viewState.outlineVisible,\n outlinePosition: viewState.outlinePosition,\n outlineWidth: viewState.outlineWidth,\n documentBackground: viewState.documentBackground,\n showTitle: viewState.showTitle,\n showCover: viewState.showCover,\n coverUrl: viewState.coverUrl,\n editorWidth: viewState.editorWidth,\n }\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return state\n }\n\n /// Update/set the state of the view menu\n setViewMenuState = (state: Partial<ViewMenuState>) => {\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const viewState = ctx.get(viewMenuStateCtx.key)\n if (viewState) {\n Object.assign(viewState, state)\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return this\n }\n}\n"],"names":["CrepeFeature","$ctx","reactive","createSlice","EditorStatus","editorViewCtx","getMarkdown","listener","listenerCtx","Editor","rootCtx","defaultValueCtx","editorViewOptionsCtx","indentConfig","uploadConfig","ctx","imageBlockConfig","commonmark","history","indent","trailing","clipboard","upload","gfm"],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sources":["../../src/feature/index.ts","../../src/feature/attachment/config.ts","../../src/feature/fixed-toolbar/view-menu-state.ts","../../src/feature/inline-diff/config.ts","../../src/core/locale.ts","../../src/core/slice.ts","../../src/core/builder.ts"],"sourcesContent":["import type { AttachmentFeatureConfig } from './attachment/config'\nimport type { BlockEditFeatureConfig } from './block-edit'\nimport type { CodeMirrorFeatureConfig } from './code-mirror'\nimport type { CursorFeatureConfig } from './cursor'\nimport type { DiffBlockFeatureConfig } from './diff-block'\nimport type { FixedToolbarFeatureConfig } from './fixed-toolbar'\nimport type { ImageBlockFeatureConfig } from './image-block'\nimport type { InlineDiffFeatureConfig } from './inline-diff'\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 /// Fixed formatting toolbar that is always visible at the top of the editor.\n FixedToolbar = 'fixed-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 /// File attachment uploads\n Attachment = 'attachment',\n\n /// Inline diff comparison between two document versions, similar to Word track changes.\n InlineDiff = 'inline-diff',\n\n /// Diff comparison block for showing code differences\n DiffBlock = 'diff-block',\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.FixedToolbar]?: FixedToolbarFeatureConfig\n [CrepeFeature.CodeMirror]?: CodeMirrorFeatureConfig\n [CrepeFeature.Table]?: TableFeatureConfig\n [CrepeFeature.Latex]?: LatexFeatureConfig\n [CrepeFeature.Attachment]?: AttachmentFeatureConfig\n [CrepeFeature.InlineDiff]?: InlineDiffFeatureConfig\n [CrepeFeature.DiffBlock]?: DiffBlockFeatureConfig\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.FixedToolbar]: true,\n [CrepeFeature.CodeMirror]: true,\n [CrepeFeature.Table]: true,\n [CrepeFeature.Latex]: true,\n [CrepeFeature.Attachment]: true,\n [CrepeFeature.InlineDiff]: false,\n [CrepeFeature.DiffBlock]: true,\n}\n","import { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport interface AttachmentFeatureConfig {\n onUpload: (file: File) => Promise<{ url: string; name: string; size: number }>\n uploadButton: string\n uploadPlaceholderText: string\n downloadText: string\n}\n\nexport const attachmentConfig = $ctx(\n {\n onUpload: async (file: File) => {\n return {\n url: URL.createObjectURL(file),\n name: file.name,\n size: file.size,\n }\n },\n uploadButton: 'Upload file',\n uploadPlaceholderText: 'or paste link',\n downloadText: 'Download',\n } as AttachmentFeatureConfig,\n 'attachmentConfig'\n)\n","// @ts-ignore\nimport { reactive } from 'vue'\n\nexport type OutlinePosition = 'left' | 'right'\nexport type EditorWidth = 'default' | 'wide' | 'full'\n\nexport interface ViewMenuState {\n outlineVisible: boolean\n outlinePosition: OutlinePosition\n outlineWidth: number\n documentBackground: string | null\n showTitle: boolean\n showCover: boolean\n coverUrl: string\n editorWidth: EditorWidth\n fixedToolbarVisible: boolean\n}\n\nexport const editorWidthMap: Record<EditorWidth, string> = {\n default: '820px',\n wide: '1020px',\n full: 'none',\n}\n\nexport const createViewMenuState = () =>\n reactive<ViewMenuState>({\n outlineVisible: false,\n outlinePosition: 'left',\n outlineWidth: 250,\n documentBackground: '#FFFFFF',\n showTitle: false,\n showCover: false,\n coverUrl: '',\n editorWidth: 'default',\n fixedToolbarVisible: true,\n })\n\nimport { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport const viewMenuStateCtx = $ctx(createViewMenuState(), 'viewMenuStateCtx')\n","import { $ctx } from '@jvs-milkdown/kit/utils'\n\nexport interface InlineDiffConfig {\n addedClass: string\n deletedClass: string\n}\n\nexport interface InlineDiffApi {\n showDiff: (oldMarkdown: string, newMarkdown?: string) => void\n hideDiff: () => void\n isShowing: () => boolean\n}\n\nexport const inlineDiffConfig = $ctx(\n {\n addedClass: 'crepe-diff-added',\n deletedClass: 'crepe-diff-deleted',\n } as InlineDiffConfig,\n 'inlineDiffConfigCtx'\n)\n\nconst noopApi: InlineDiffApi = {\n showDiff: () => {},\n hideDiff: () => {},\n isShowing: () => false,\n}\n\nexport const inlineDiffApiCtx = $ctx(noopApi, 'inlineDiffApiCtx')\n","import type { Ctx } from '@jvs-milkdown/kit/ctx'\n\nimport { createSlice } from '@jvs-milkdown/kit/ctx'\n\nexport const zhCN = {\n // block handle\n 'handle.add': '插入内容',\n 'handle.menu': '点击打开菜单',\n 'handle.drag': '拖拽移动位置',\n // placeholder\n 'placeholder.text': \"输入正文或 '/' 快速插入内容\",\n\n // toolbar\n 'toolbar.heading': '标题',\n 'toolbar.formatting': '格式',\n 'toolbar.function': '功能',\n 'toolbar.formatPainter': '格式刷',\n\n // menu bar\n 'menuBar.file': '文件',\n 'menuBar.edit': '编辑',\n 'menuBar.view': '视图',\n 'menuBar.insert': '插入',\n 'menuBar.format': '格式',\n\n // view menu\n 'view.outline': '大纲面板',\n 'view.outlineLeft': '在左侧显示',\n 'view.outlineRight': '在右侧显示',\n 'view.docBackground': '文档背景色',\n 'view.title': '显示标题',\n 'view.cover': '显示封面',\n 'view.editorWidth': '内容宽度',\n 'view.widthDefault': '默认',\n 'view.widthWide': '较宽',\n 'view.widthFull': '全宽',\n\n // code-mirror\n 'codeMirror.searchPlaceholder': '搜索语言',\n 'codeMirror.noResultText': '无结果',\n 'codeMirror.previewToggleOptionEdit': '编辑',\n 'codeMirror.previewToggleOptionHide': '隐藏',\n 'codeMirror.previewLabel': '预览',\n 'codeMirror.wrapText': '自动换行',\n\n // link-tooltip\n 'linkTooltip.pasteLink': '粘贴链接...',\n\n // image-block\n 'imageBlock.inlineUploadButton': '上传',\n 'imageBlock.inlineUploadPlaceholder': '或粘贴链接',\n 'imageBlock.blockUploadButton': '上传文件',\n 'imageBlock.blockUploadPlaceholder': '或粘贴链接',\n 'imageBlock.blockCaptionPlaceholder': '写下图片描述...',\n 'imageBlock.blockConfirmButton': '确定',\n\n // attachment-block\n 'attachmentBlock.uploadButton': '上传文件',\n 'attachmentBlock.uploadPlaceholderText': '或点击上传',\n 'attachmentBlock.download': '下载',\n\n // menu categories\n 'menu.group.text': '正文',\n 'menu.group.block': '段落',\n 'menu.group.list': '列表',\n 'menu.group.advanced': '高级',\n\n // menu items\n 'menu.item.text': '普通文本',\n 'menu.item.h1': '标题 1',\n 'menu.item.h2': '标题 2',\n 'menu.item.h3': '标题 3',\n 'menu.item.h4': '标题 4',\n 'menu.item.h5': '标题 5',\n 'menu.item.h6': '标题 6',\n 'menu.item.quote': '引用',\n 'menu.item.divider': '分割线',\n 'menu.item.bulletList': '无序列表',\n 'menu.item.orderedList': '有序列表',\n 'menu.item.taskList': '任务列表',\n 'menu.item.image': '图片',\n 'menu.item.attachment': '视频或文件',\n 'menu.item.code': '代码块',\n 'menu.item.table': '表格',\n 'menu.item.math': '公式',\n 'menu.item.bold': '加粗',\n 'menu.item.italic': '斜体',\n 'menu.item.strikethrough': '删除线',\n 'menu.item.underline': '下划线',\n 'menu.item.highlight': '高亮',\n 'menu.item.lineCode': '行内代码',\n 'menu.item.link': '链接',\n\n // menu tooltips\n 'menu.tooltip.text': '普通文本 (Ctrl+Alt+0)',\n 'menu.tooltip.h1': '标题 1 (Ctrl+Alt+1)\\nMarkdown: # 空格',\n 'menu.tooltip.h2': '标题 2 (Ctrl+Alt+2)\\nMarkdown: ## 空格',\n 'menu.tooltip.h3': '标题 3 (Ctrl+Alt+3)\\nMarkdown: ### 空格',\n 'menu.tooltip.h4': '标题 4 (Ctrl+Alt+4)\\nMarkdown: #### 空格',\n 'menu.tooltip.h5': '标题 5 (Ctrl+Alt+5)\\nMarkdown: ##### 空格',\n 'menu.tooltip.h6': '标题 6 (Ctrl+Alt+6)\\nMarkdown: ###### 空格',\n 'menu.tooltip.quote': '引用 (Ctrl+Shift+9)\\nMarkdown: > 空格',\n 'menu.tooltip.divider': '分割线\\nMarkdown: --- 空格',\n 'menu.tooltip.bulletList':\n '无序列表 (Ctrl+Shift+8)\\nMarkdown: - 空格 或 * 空格',\n 'menu.tooltip.orderedList': '有序列表 (Ctrl+Shift+7)\\nMarkdown: 1. 空格',\n 'menu.tooltip.taskList': '任务列表\\nMarkdown: - [ ] 空格',\n 'menu.tooltip.image': '图片\\nMarkdown: ![alt](url)',\n 'menu.tooltip.code': '代码块 (Ctrl+Shift+\\\\)\\nMarkdown: ``` 回车',\n 'menu.tooltip.table': '表格\\nMarkdown: | | |',\n 'menu.tooltip.math': '公式\\nMarkdown: $$ 回车',\n\n // custom block menu items\n 'customMenu.indentAndAlign': '缩进和对齐',\n 'customMenu.color': '颜色',\n 'customMenu.cut': '剪切',\n 'customMenu.copy': '复制',\n 'customMenu.delete': '删除',\n 'customMenu.addBelow': '在下方添加',\n 'customMenu.alignLeft': '左对齐',\n 'customMenu.alignCenter': '居中对齐',\n 'customMenu.alignRight': '右对齐',\n 'customMenu.increaseIndent': '增加缩进',\n 'customMenu.decreaseIndent': '减少缩进',\n 'customMenu.textColor': '字体颜色',\n 'customMenu.bgColor': '背景颜色',\n 'customMenu.restoreDefault': '恢复默认',\n 'customMenu.colorDefault': '默认',\n 'customMenu.colorRed': '红色',\n 'customMenu.colorOrange': '橙色',\n 'customMenu.colorYellow': '黄色',\n 'customMenu.colorGreen': '绿色',\n 'customMenu.colorBlue': '蓝色',\n 'customMenu.colorPurple': '紫色',\n 'customMenu.colorGray': '灰色',\n 'customMenu.insertTable': '插入支持富文本的表格',\n 'customMenu.export': '导出',\n 'customMenu.import': '导入',\n\n 'customMenu.fontDefault': '默认',\n 'font.fangSong': '仿宋',\n 'font.stFangsong': '华文仿宋',\n 'font.stSong': '华文宋体',\n 'font.stKaiti': '华文楷体',\n 'font.simSun': '宋体',\n 'font.microsoftYaHei': '微软雅黑',\n 'font.kaiTi': '楷体',\n 'font.simHei': '黑体',\n\n // latex\n 'latex.escToExit': '按 ESC 完成输入',\n 'latex.helpDoc': '查看帮助文档',\n 'latex.emptyPlaceholder': '添加 LaTeX 公式',\n 'latex.inputPlaceholder': '请输入公式',\n\n // shortcuts\n 'shortcuts.title': '键盘快捷键',\n 'shortcuts.formatting': '文本格式',\n 'shortcuts.bold': '加粗',\n 'shortcuts.italic': '斜体',\n 'shortcuts.underline': '下划线',\n 'shortcuts.strikethrough': '删除线',\n 'shortcuts.inlineCode': '行内代码',\n 'shortcuts.highlight': '高亮',\n 'shortcuts.paragraph': '段落',\n 'shortcuts.heading': '标题',\n 'shortcuts.block': '块级元素',\n 'shortcuts.codeBlock': '代码块',\n 'shortcuts.blockquote': '引用',\n 'shortcuts.orderedList': '有序列表',\n 'shortcuts.bulletList': '无序列表',\n 'shortcuts.indent': '增加缩进',\n 'shortcuts.outdent': '减少缩进',\n 'shortcuts.hardBreak': '换行',\n 'shortcuts.history': '历史记录',\n 'shortcuts.undo': '撤销',\n 'shortcuts.redo': '重做',\n\n // inline-diff\n 'inlineDiff.accept': '接受',\n 'inlineDiff.reject': '拒绝',\n}\n\nexport const enUS: typeof zhCN = {\n 'handle.add': 'Add content',\n 'handle.menu': 'Open menu',\n 'handle.drag': 'Drag to move',\n 'placeholder.text': \"Type '/' to use slash menu\",\n\n 'toolbar.heading': 'Heading',\n 'toolbar.formatting': 'Formatting',\n 'toolbar.function': 'Function',\n 'toolbar.formatPainter': 'Format Painter',\n\n 'menuBar.file': 'File',\n 'menuBar.edit': 'Edit',\n 'menuBar.view': 'View',\n 'menuBar.insert': 'Insert',\n 'menuBar.format': 'Format',\n\n 'view.outline': 'Outline Panel',\n 'view.outlineLeft': 'Show on Left',\n 'view.outlineRight': 'Show on Right',\n 'view.docBackground': 'Document Background',\n 'view.title': 'Show Title',\n 'view.cover': 'Show Cover',\n 'view.editorWidth': 'Content Width',\n 'view.widthDefault': 'Default',\n 'view.widthWide': 'Wide',\n 'view.widthFull': 'Full Width',\n\n 'codeMirror.searchPlaceholder': 'Search language',\n 'codeMirror.noResultText': 'No result',\n 'codeMirror.previewToggleOptionEdit': 'Edit',\n 'codeMirror.previewToggleOptionHide': 'Hide',\n 'codeMirror.previewLabel': 'Preview',\n 'codeMirror.wrapText': 'Wrap',\n\n 'linkTooltip.pasteLink': 'Paste link...',\n\n 'imageBlock.inlineUploadButton': 'Upload',\n 'imageBlock.inlineUploadPlaceholder': 'or paste link',\n 'imageBlock.blockUploadButton': 'Upload file',\n 'imageBlock.blockUploadPlaceholder': 'or paste link',\n 'imageBlock.blockCaptionPlaceholder': 'Write Image Caption',\n 'imageBlock.blockConfirmButton': 'Confirm',\n\n 'attachmentBlock.uploadButton': 'Upload file',\n 'attachmentBlock.uploadPlaceholderText': 'or click to upload',\n 'attachmentBlock.download': 'Download',\n\n 'menu.group.text': 'Text',\n 'menu.group.block': 'Block',\n 'menu.group.list': 'List',\n 'menu.group.advanced': 'Advanced',\n\n 'menu.item.text': 'Text',\n 'menu.item.h1': 'Heading 1',\n 'menu.item.h2': 'Heading 2',\n 'menu.item.h3': 'Heading 3',\n 'menu.item.h4': 'Heading 4',\n 'menu.item.h5': 'Heading 5',\n 'menu.item.h6': 'Heading 6',\n 'menu.item.quote': 'Quote',\n 'menu.item.divider': 'Divider',\n 'menu.item.bulletList': 'Bullet List',\n 'menu.item.orderedList': 'Ordered List',\n 'menu.item.taskList': 'Task List',\n 'menu.item.image': 'Image',\n 'menu.item.attachment': 'Video or File',\n 'menu.item.code': 'Code',\n 'menu.item.table': 'Table',\n 'menu.item.math': 'Math',\n 'menu.item.bold': 'Bold',\n 'menu.item.italic': 'Italic',\n 'menu.item.strikethrough': 'Strikethrough',\n 'menu.item.underline': 'Underline',\n 'menu.item.highlight': 'Highlight',\n 'menu.item.lineCode': 'Inline Code',\n 'menu.item.link': 'Link',\n\n 'menu.tooltip.text': 'Text (Ctrl+Alt+0)',\n 'menu.tooltip.h1': 'Heading 1 (Ctrl+Alt+1)\\nMarkdown: # Space',\n 'menu.tooltip.h2': 'Heading 2 (Ctrl+Alt+2)\\nMarkdown: ## Space',\n 'menu.tooltip.h3': 'Heading 3 (Ctrl+Alt+3)\\nMarkdown: ### Space',\n 'menu.tooltip.h4': 'Heading 4 (Ctrl+Alt+4)\\nMarkdown: #### Space',\n 'menu.tooltip.h5': 'Heading 5 (Ctrl+Alt+5)\\nMarkdown: ##### Space',\n 'menu.tooltip.h6': 'Heading 6 (Ctrl+Alt+6)\\nMarkdown: ###### Space',\n 'menu.tooltip.quote': 'Quote (Ctrl+Shift+9)\\nMarkdown: > Space',\n 'menu.tooltip.divider': 'Divider\\nMarkdown: --- Space',\n 'menu.tooltip.bulletList':\n 'Bullet List (Ctrl+Shift+8)\\nMarkdown: - Space or * Space',\n 'menu.tooltip.orderedList': 'Ordered List (Ctrl+Shift+7)\\nMarkdown: 1. Space',\n 'menu.tooltip.taskList': 'Task List\\nMarkdown: - [ ] Space',\n 'menu.tooltip.image': 'Image\\nMarkdown: ![alt](url)',\n 'menu.tooltip.code': 'Code Block (Ctrl+Shift+\\\\)\\nMarkdown: ``` Enter',\n 'menu.tooltip.table': 'Table\\nMarkdown: | | |',\n 'menu.tooltip.math': 'Math\\nMarkdown: $$ Enter',\n\n 'customMenu.indentAndAlign': 'Indent & Align',\n 'customMenu.color': 'Color',\n 'customMenu.cut': 'Cut',\n 'customMenu.copy': 'Copy',\n 'customMenu.delete': 'Delete',\n 'customMenu.addBelow': 'Add below',\n 'customMenu.alignLeft': 'Align Left',\n 'customMenu.alignCenter': 'Align Center',\n 'customMenu.alignRight': 'Align Right',\n 'customMenu.increaseIndent': 'Increase Indent',\n 'customMenu.decreaseIndent': 'Decrease Indent',\n 'customMenu.textColor': 'Text Color',\n 'customMenu.bgColor': 'Background Color',\n 'customMenu.restoreDefault': 'Restore Default',\n 'customMenu.colorDefault': 'Default',\n 'customMenu.colorRed': 'Red',\n 'customMenu.colorOrange': 'Orange',\n 'customMenu.colorYellow': 'Yellow',\n 'customMenu.colorGreen': 'Green',\n 'customMenu.colorBlue': 'Blue',\n 'customMenu.colorPurple': 'Purple',\n 'customMenu.colorGray': 'Gray',\n 'customMenu.insertTable': 'Insert Table',\n 'customMenu.export': 'Export',\n 'customMenu.import': 'Import',\n\n 'customMenu.fontDefault': 'Default',\n 'font.fangSong': 'FangSong',\n 'font.stFangsong': 'STFangsong',\n 'font.stSong': 'STSong',\n 'font.stKaiti': 'STKaiti',\n 'font.simSun': 'SimSun',\n 'font.microsoftYaHei': 'Microsoft YaHei',\n 'font.kaiTi': 'KaiTi',\n 'font.simHei': 'SimHei',\n\n 'latex.escToExit': 'Press ESC to finish',\n 'latex.helpDoc': 'Help Doc',\n 'latex.emptyPlaceholder': 'Add LaTeX',\n 'latex.inputPlaceholder': 'Please enter formula',\n\n 'shortcuts.title': 'Keyboard Shortcuts',\n 'shortcuts.formatting': 'Text Formatting',\n 'shortcuts.bold': 'Bold',\n 'shortcuts.italic': 'Italic',\n 'shortcuts.underline': 'Underline',\n 'shortcuts.strikethrough': 'Strikethrough',\n 'shortcuts.inlineCode': 'Inline Code',\n 'shortcuts.highlight': 'Highlight',\n 'shortcuts.paragraph': 'Paragraph',\n 'shortcuts.heading': 'Heading',\n 'shortcuts.block': 'Block Elements',\n 'shortcuts.codeBlock': 'Code Block',\n 'shortcuts.blockquote': 'Blockquote',\n 'shortcuts.orderedList': 'Ordered List',\n 'shortcuts.bulletList': 'Bullet List',\n 'shortcuts.indent': 'Indent',\n 'shortcuts.outdent': 'Outdent',\n 'shortcuts.hardBreak': 'Hard Break',\n 'shortcuts.history': 'History',\n 'shortcuts.undo': 'Undo',\n 'shortcuts.redo': 'Redo',\n\n 'inlineDiff.accept': 'Accept',\n 'inlineDiff.reject': 'Reject',\n}\n\nexport type CrepeTranslations = typeof zhCN\n\nexport const translationsCtx = createSlice<\n Record<string, Partial<CrepeTranslations>>\n>(\n {\n 'zh-CN': zhCN,\n 'en-US': enUS,\n },\n 'translationsCtx'\n)\n\nexport const localeCtx = createSlice('zh-CN', 'localeCtx')\n\nexport function i18n(ctx: Ctx, key: keyof CrepeTranslations): string {\n const translations = ctx.get(translationsCtx)\n const locale = ctx.get(localeCtx)\n return (\n translations[locale]?.[key] ??\n translations['zh-CN']?.[key] ??\n enUS[key] ??\n key\n )\n}\n","import { createSlice, type Ctx } from '@jvs-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 '@jvs-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 '@jvs-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\nexport { localeCtx, translationsCtx } from './locale'\n","import { imageBlockConfig } from '@jvs-milkdown/kit/component/image-block'\nimport {\n type DefaultValue,\n defaultValueCtx,\n Editor,\n EditorStatus,\n editorViewCtx,\n editorViewOptionsCtx,\n rootCtx,\n} from '@jvs-milkdown/kit/core'\nimport { clipboard } from '@jvs-milkdown/kit/plugin/clipboard'\nimport { history } from '@jvs-milkdown/kit/plugin/history'\nimport { indent, indentConfig } from '@jvs-milkdown/kit/plugin/indent'\nimport {\n listener,\n listenerCtx,\n type ListenerManager,\n} from '@jvs-milkdown/kit/plugin/listener'\nimport { trailing } from '@jvs-milkdown/kit/plugin/trailing'\nimport { upload, uploadConfig } from '@jvs-milkdown/kit/plugin/upload'\nimport { commonmark } from '@jvs-milkdown/kit/preset/commonmark'\nimport { gfm } from '@jvs-milkdown/kit/preset/gfm'\nimport { getMarkdown } from '@jvs-milkdown/kit/utils'\n\nimport type { CrepeFeatureConfig } from '../feature'\nimport type { DefineFeature } from '../feature/shared'\n\nimport { CrepeFeature } from '../feature'\nimport { attachmentConfig } from '../feature/attachment/config'\nimport {\n viewMenuStateCtx,\n type ViewMenuState,\n} from '../feature/fixed-toolbar/view-menu-state'\nimport { inlineDiffApiCtx } from '../feature/inline-diff/config'\nimport { zhCN, enUS, type CrepeTranslations } from './locale'\nimport {\n CrepeCtx,\n FeaturesCtx,\n localeCtx,\n translationsCtx,\n useCrepeFeatures,\n} 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 /// The locale of the editor.\n locale?: string\n\n /// The user-defined translation dictionaries.\n translations?: Record<string, Partial<CrepeTranslations>>\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({\n root,\n defaultValue = '',\n locale = 'zh-CN',\n translations,\n }: CrepeBuilderConfig = {}) {\n this.#rootElement =\n (typeof root === 'string' ? document.querySelector(root) : root) ??\n document.body\n\n const mergedTranslations: Record<string, Partial<CrepeTranslations>> = {\n 'zh-CN': { ...zhCN },\n 'en-US': { ...enUS },\n }\n if (translations) {\n for (const [lang, dict] of Object.entries(translations)) {\n mergedTranslations[lang] = {\n ...mergedTranslations[lang],\n ...dict,\n }\n }\n }\n\n this.#editor = Editor.make()\n .config((ctx) => {\n ctx.inject(CrepeCtx, this)\n ctx.inject(FeaturesCtx, [])\n ctx.inject(localeCtx, locale)\n ctx.inject(translationsCtx, mergedTranslations)\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 ctx.update(uploadConfig.key, (prev) => ({\n ...prev,\n uploader: async (files, schema, ctx) => {\n const features = useCrepeFeatures(ctx).get()\n const hasImageBlock = features.includes(CrepeFeature.ImageBlock)\n const hasAttachment = features.includes(CrepeFeature.Attachment)\n\n const imageNodeType = hasImageBlock\n ? schema.nodes['image-block']\n : schema.nodes['image']\n\n const attachmentNodeType = hasAttachment\n ? schema.nodes['attachment']\n : undefined\n\n const onImageUpload = hasImageBlock\n ? ctx.get(imageBlockConfig.key).onUpload\n : undefined\n\n const onAttachmentUpload = hasAttachment\n ? ctx.get(attachmentConfig.key).onUpload\n : undefined\n\n const tasks: Promise<any>[] = []\n\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i)\n if (!file) continue\n\n if (file.type.includes('image')) {\n if (!imageNodeType) continue\n tasks.push(\n (async () => {\n const src = onImageUpload\n ? await onImageUpload(file)\n : URL.createObjectURL(file)\n return imageNodeType.createAndFill({ src })!\n })()\n )\n } else {\n if (!attachmentNodeType) continue\n tasks.push(\n (async () => {\n let finalFile = file\n if (file.type.includes('video/')) {\n if (!/\\.[a-z0-9]+$/i.test(file.name)) {\n const ext = file.type.split('/')[1] || 'mp4'\n // Keep original file properties but rename\n finalFile = new File([file], `${file.name}.${ext}`, {\n type: file.type,\n })\n }\n }\n\n const { url, name, size } = onAttachmentUpload\n ? await onAttachmentUpload(finalFile)\n : {\n url: URL.createObjectURL(finalFile),\n name: finalFile.name,\n size: finalFile.size,\n }\n return attachmentNodeType.createAndFill({\n src: url,\n name,\n size,\n })!\n })()\n )\n }\n }\n\n const nodes = await Promise.all(tasks)\n return nodes.filter((n: any) => n !== null) as any\n },\n }))\n })\n .use(commonmark)\n .use(listener)\n .use(history)\n .use(indent)\n .use(trailing)\n .use(clipboard)\n .use(upload)\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 /// Show inline diff between two markdown versions.\n showDiff = (oldMarkdown: string, newMarkdown: string) => {\n this.#editor.action((ctx) => {\n const api = ctx.get(inlineDiffApiCtx.key)\n api.showDiff(oldMarkdown, newMarkdown)\n })\n return this\n }\n\n /// Hide inline diff and return to editing mode.\n hideDiff = () => {\n this.#editor.action((ctx) => {\n const api = ctx.get(inlineDiffApiCtx.key)\n api.hideDiff()\n })\n return this\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 /// Get the visibility of the outline panel.\n get outlineVisible() {\n let visible = false\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const state = ctx.get(viewMenuStateCtx.key)\n if (state) {\n visible = state.outlineVisible\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return visible\n }\n\n /// Set the visibility of the outline panel.\n setOutlineVisible = (visible: boolean) => {\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const state = ctx.get(viewMenuStateCtx.key)\n if (state) {\n state.outlineVisible = visible\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return this\n }\n\n /// Get the configuration/state of the view menu (outline, background, title, cover, width, etc.)\n getViewMenuState = () => {\n let state: any = null\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const viewState = ctx.get(viewMenuStateCtx.key)\n if (viewState) {\n state = {\n outlineVisible: viewState.outlineVisible,\n outlinePosition: viewState.outlinePosition,\n outlineWidth: viewState.outlineWidth,\n documentBackground: viewState.documentBackground,\n showTitle: viewState.showTitle,\n showCover: viewState.showCover,\n coverUrl: viewState.coverUrl,\n editorWidth: viewState.editorWidth,\n }\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return state\n }\n\n /// Update/set the state of the view menu\n setViewMenuState = (state: Partial<ViewMenuState>) => {\n this.#editor.action((ctx) => {\n if (this.#editor.status === EditorStatus.Created) {\n try {\n const viewState = ctx.get(viewMenuStateCtx.key)\n if (viewState) {\n Object.assign(viewState, state)\n }\n } catch (e) {\n // Ignore if FixedToolbar feature is not loaded\n }\n }\n })\n return this\n }\n}\n"],"names":["CrepeFeature","$ctx","reactive","createSlice","EditorStatus","editorViewCtx","getMarkdown","listener","listenerCtx","Editor","rootCtx","defaultValueCtx","editorViewOptionsCtx","indentConfig","uploadConfig","ctx","imageBlockConfig","commonmark","history","indent","trailing","clipboard","upload","gfm"],"mappings":"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"}
@@ -379,6 +379,29 @@ var CrepeFeature = /* @__PURE__ */ ((CrepeFeature2) => {
379
379
  return CrepeFeature2;
380
380
  })(CrepeFeature || {});
381
381
 
382
+ const listeners = /* @__PURE__ */ new Set();
383
+ let _popupCount = 0;
384
+ function getIsAnyPopupOpen() {
385
+ return _popupCount > 0;
386
+ }
387
+ function addPopupChangeListener(fn) {
388
+ listeners.add(fn);
389
+ return () => listeners.delete(fn);
390
+ }
391
+ function incrementPopupCount() {
392
+ const wasZero = _popupCount === 0;
393
+ _popupCount++;
394
+ if (wasZero) {
395
+ listeners.forEach((fn) => fn());
396
+ }
397
+ }
398
+ function decrementPopupCount() {
399
+ _popupCount = Math.max(0, _popupCount - 1);
400
+ if (_popupCount === 0) {
401
+ listeners.forEach((fn) => fn());
402
+ }
403
+ }
404
+
382
405
  const remarkTextColorPlugin = utils.$remark(
383
406
  "remarkTextColor",
384
407
  () => function() {
@@ -1036,29 +1059,6 @@ const formatPainterIcon = `
1036
1059
  </svg>
1037
1060
  `;
1038
1061
 
1039
- const listeners = /* @__PURE__ */ new Set();
1040
- let _popupCount = 0;
1041
- function getIsAnyPopupOpen() {
1042
- return _popupCount > 0;
1043
- }
1044
- function addPopupChangeListener(fn) {
1045
- listeners.add(fn);
1046
- return () => listeners.delete(fn);
1047
- }
1048
- function incrementPopupCount() {
1049
- const wasZero = _popupCount === 0;
1050
- _popupCount++;
1051
- if (wasZero) {
1052
- listeners.forEach((fn) => fn());
1053
- }
1054
- }
1055
- function decrementPopupCount() {
1056
- _popupCount = Math.max(0, _popupCount - 1);
1057
- if (_popupCount === 0) {
1058
- listeners.forEach((fn) => fn());
1059
- }
1060
- }
1061
-
1062
1062
  function keepAlive(..._args) {
1063
1063
  }
1064
1064
 
@@ -4165,7 +4165,7 @@ const Toolbar = vue.defineComponent({
4165
4165
  ctx: { type: Object, required: true },
4166
4166
  hide: { type: Function, required: true },
4167
4167
  show: { type: Object, required: true },
4168
- selection: { type: Object, required: true },
4168
+ state: { type: Object, required: true },
4169
4169
  config: { type: Object, required: false },
4170
4170
  isFixed: { type: Boolean, required: false }
4171
4171
  },
@@ -4767,17 +4767,17 @@ const Toolbar = vue.defineComponent({
4767
4767
  if (ctx) fn(ctx);
4768
4768
  };
4769
4769
  function checkActive(checker) {
4770
- var _a;
4771
- keepAlive(props.selection.value);
4772
- const status = (_a = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _a.status;
4770
+ var _a, _b;
4771
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4772
+ const status = (_b = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _b.status;
4773
4773
  if (status !== core.EditorStatus.Created) return false;
4774
4774
  return checker(ctx);
4775
4775
  }
4776
4776
  const blockGroups = vue.computed(() => getGroups$1("", void 0, ctx));
4777
4777
  const activeBlockItem = vue.computed(() => {
4778
- var _a;
4779
- keepAlive(props.selection.value);
4780
- const status = (_a = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _a.status;
4778
+ var _a, _b;
4779
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4780
+ const status = (_b = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _b.status;
4781
4781
  if (status !== core.EditorStatus.Created) return null;
4782
4782
  const view = ctx.get(core.editorViewCtx);
4783
4783
  const { $from } = view.state.selection;
@@ -4815,9 +4815,9 @@ const Toolbar = vue.defineComponent({
4815
4815
  return targetIcon;
4816
4816
  });
4817
4817
  const currentAlignIndent = vue.computed(() => {
4818
- var _a;
4819
- keepAlive(props.selection.value);
4820
- const status = (_a = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _a.status;
4818
+ var _a, _b;
4819
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4820
+ const status = (_b = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _b.status;
4821
4821
  if (status !== core.EditorStatus.Created) return { align: "left", indent: 0 };
4822
4822
  const view = ctx.get(core.editorViewCtx);
4823
4823
  let align = "left";
@@ -4887,13 +4887,15 @@ const Toolbar = vue.defineComponent({
4887
4887
  }
4888
4888
  };
4889
4889
  const canMerge = vue.computed(() => {
4890
- keepAlive(props.selection.value);
4890
+ var _a;
4891
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4891
4892
  const view = ctx == null ? void 0 : ctx.get(core.editorViewCtx);
4892
4893
  if (!view) return false;
4893
4894
  return tables.mergeCells(view.state);
4894
4895
  });
4895
4896
  const canSplit = vue.computed(() => {
4896
- keepAlive(props.selection.value);
4897
+ var _a;
4898
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4897
4899
  const view = ctx == null ? void 0 : ctx.get(core.editorViewCtx);
4898
4900
  if (!view) return false;
4899
4901
  return tables.splitCell(view.state);
@@ -4953,16 +4955,16 @@ const Toolbar = vue.defineComponent({
4953
4955
  showAlignMenu.value = false;
4954
4956
  };
4955
4957
  const currentColorState = vue.computed(() => {
4956
- var _a;
4957
- keepAlive(props.selection.value);
4958
- const status = (_a = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _a.status;
4958
+ var _a, _b;
4959
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
4960
+ const status = (_b = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _b.status;
4959
4961
  if (status !== core.EditorStatus.Created)
4960
4962
  return { textColor: null, bgColor: null };
4961
4963
  const view = ctx.get(core.editorViewCtx);
4962
4964
  const { state } = view;
4963
4965
  const schema = ctx.get(core.schemaCtx);
4964
- const tcHasMark = schema.marks[textColorSchema.id];
4965
- const bcHasMark = schema.marks[bgColorSchema.id];
4966
+ const tcHasMark = schema.marks["textColor"];
4967
+ const bcHasMark = schema.marks["bgColor"];
4966
4968
  if (!tcHasMark || !bcHasMark) return { textColor: null, bgColor: null };
4967
4969
  const tcType = textColorSchema.type(ctx);
4968
4970
  const bcType = bgColorSchema.type(ctx);
@@ -5009,8 +5011,8 @@ const Toolbar = vue.defineComponent({
5009
5011
  const { tr } = state;
5010
5012
  const { from, to, empty } = state.selection;
5011
5013
  const schema = ctx.get(core.schemaCtx);
5012
- const tcHasMark = schema.marks[textColorSchema.id];
5013
- const bcHasMark = schema.marks[bgColorSchema.id];
5014
+ const tcHasMark = schema.marks["textColor"];
5015
+ const bcHasMark = schema.marks["bgColor"];
5014
5016
  if (!tcHasMark || !bcHasMark) return;
5015
5017
  const textColorType = textColorSchema.type(ctx);
5016
5018
  const bgColorType = bgColorSchema.type(ctx);
@@ -5026,29 +5028,37 @@ const Toolbar = vue.defineComponent({
5026
5028
  showColorMenu.value = false;
5027
5029
  };
5028
5030
  const currentFontState = vue.computed(() => {
5029
- var _a;
5030
- keepAlive(props.selection.value);
5031
- const status = (_a = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _a.status;
5031
+ var _a, _b;
5032
+ keepAlive(props.state, (_a = props.state) == null ? void 0 : _a.value);
5033
+ const status = (_b = ctx == null ? void 0 : ctx.get(core.editorCtx)) == null ? void 0 : _b.status;
5032
5034
  if (status !== core.EditorStatus.Created)
5033
5035
  return { fontFamily: null, fontSize: null };
5034
5036
  const view = ctx.get(core.editorViewCtx);
5035
5037
  const { state } = view;
5036
5038
  const schema = ctx.get(core.schemaCtx);
5037
- const ffHasMark = schema.marks[fontFamilySchema.id];
5038
- const fsHasMark = schema.marks[fontSizeSchema.id];
5039
- if (!ffHasMark || !fsHasMark) return { fontFamily: null, fontSize: null };
5039
+ const ffHasMark = schema.marks["fontFamily"];
5040
+ const fsHasMark = schema.marks["fontSize"];
5041
+ if (!ffHasMark || !fsHasMark) {
5042
+ return { fontFamily: null, fontSize: null };
5043
+ }
5040
5044
  const ffType = fontFamilySchema.type(ctx);
5041
5045
  const fsType = fontSizeSchema.type(ctx);
5042
5046
  const { $cursor, ranges } = state.selection;
5047
+ let result = {
5048
+ fontFamily: null,
5049
+ fontSize: null
5050
+ };
5043
5051
  if ($cursor) {
5044
5052
  let fontFamily = null;
5045
5053
  let fontSize = null;
5046
5054
  const marks = state.storedMarks || $cursor.marks();
5047
5055
  for (const mark of marks) {
5048
- if (mark.type === ffType) fontFamily = mark.attrs.fontFamily;
5049
- if (mark.type === fsType) fontSize = mark.attrs.fontSize;
5056
+ if (mark.type === ffType)
5057
+ fontFamily = mark.attrs.fontFamily || null;
5058
+ if (mark.type === fsType)
5059
+ fontSize = mark.attrs.fontSize || null;
5050
5060
  }
5051
- return { fontFamily, fontSize };
5061
+ result = { fontFamily, fontSize };
5052
5062
  } else {
5053
5063
  const fontFamilies = /* @__PURE__ */ new Set();
5054
5064
  const fontSizes = /* @__PURE__ */ new Set();
@@ -5058,15 +5068,20 @@ const Toolbar = vue.defineComponent({
5058
5068
  if (node.isText) {
5059
5069
  const ffMark = ffType.isInSet(node.marks);
5060
5070
  const fsMark = fsType.isInSet(node.marks);
5061
- fontFamilies.add(ffMark ? ffMark.attrs.fontFamily : null);
5062
- fontSizes.add(fsMark ? fsMark.attrs.fontSize : null);
5071
+ fontFamilies.add(
5072
+ ffMark ? ffMark.attrs.fontFamily : null
5073
+ );
5074
+ fontSizes.add(
5075
+ fsMark ? fsMark.attrs.fontSize : null
5076
+ );
5063
5077
  }
5064
5078
  });
5065
5079
  }
5066
5080
  const fontFamily = fontFamilies.size === 1 ? Array.from(fontFamilies)[0] : "mixed";
5067
5081
  const fontSize = fontSizes.size === 1 ? Array.from(fontSizes)[0] : "mixed";
5068
- return { fontFamily, fontSize };
5082
+ result = { fontFamily, fontSize };
5069
5083
  }
5084
+ return result;
5070
5085
  });
5071
5086
  const setFontFamily = (fontFamily) => {
5072
5087
  const commands = ctx.get(core.commandsCtx);
@@ -5297,7 +5312,11 @@ const Toolbar = vue.defineComponent({
5297
5312
  color: "#363B4C"
5298
5313
  }
5299
5314
  },
5300
- currentFontState.value.fontFamily && currentFontState.value.fontFamily !== "mixed" ? currentFontState.value.fontFamily.split(",")[0].replace(/['"]/g, "") || (ctx ? i18n(ctx, "customMenu.fontDefault") : "\u9ED8\u8BA4") : ctx ? i18n(ctx, "customMenu.fontDefault") : "\u9ED8\u8BA4"
5315
+ (() => {
5316
+ const fontState = currentFontState.value;
5317
+ const fontFamily = fontState == null ? void 0 : fontState.fontFamily;
5318
+ return fontFamily && fontFamily !== "mixed" ? fontFamily.split(",")[0].replace(/['"]/g, "") || (ctx ? i18n(ctx, "customMenu.fontDefault") : "\u9ED8\u8BA4") : ctx ? i18n(ctx, "customMenu.fontDefault") : "\u9ED8\u8BA4";
5319
+ })()
5301
5320
  ),
5302
5321
  /* @__PURE__ */ vue.h(
5303
5322
  "span",
@@ -5327,7 +5346,10 @@ const Toolbar = vue.defineComponent({
5327
5346
  flexShrink: 0
5328
5347
  }
5329
5348
  },
5330
- /* @__PURE__ */ vue.h("span", { style: { fontSize: "13px", color: "#363B4C" } }, currentFontState.value.fontSize && currentFontState.value.fontSize !== "mixed" ? currentFontState.value.fontSize : "16px"),
5349
+ /* @__PURE__ */ vue.h("span", { style: { fontSize: "13px", color: "#363B4C" } }, (() => {
5350
+ const fs = currentFontState.value.fontSize;
5351
+ return fs && fs !== "mixed" ? fs : "16px";
5352
+ })()),
5331
5353
  /* @__PURE__ */ vue.h(
5332
5354
  "span",
5333
5355
  {
@@ -6431,21 +6453,21 @@ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot
6431
6453
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6432
6454
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
6433
6455
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
6434
- var _tooltipProvider, _content, _app, _selection, _show, _mousePressed, _removePopupListener, _onDocumentMouseUp;
6456
+ var _tooltipProvider, _content, _app, _state, _show, _mousePressed, _removePopupListener, _onDocumentMouseUp;
6435
6457
  const toolbarTooltip = tooltip.tooltipFactory("CREPE_TOOLBAR");
6436
6458
  class ToolbarView {
6437
6459
  constructor(ctx, view, config) {
6438
6460
  __privateAdd(this, _tooltipProvider);
6439
6461
  __privateAdd(this, _content);
6440
6462
  __privateAdd(this, _app);
6441
- __privateAdd(this, _selection);
6463
+ __privateAdd(this, _state);
6442
6464
  __privateAdd(this, _show, vue.ref(false));
6443
6465
  __privateAdd(this, _mousePressed, false);
6444
6466
  __privateAdd(this, _removePopupListener);
6445
6467
  __privateAdd(this, _onDocumentMouseUp);
6446
6468
  this.update = (view, prevState) => {
6447
6469
  __privateGet(this, _tooltipProvider).update(view, prevState);
6448
- __privateGet(this, _selection).value = view.state.selection;
6470
+ __privateGet(this, _state).value = view.state;
6449
6471
  };
6450
6472
  this.destroy = () => {
6451
6473
  var _a;
@@ -6462,12 +6484,12 @@ class ToolbarView {
6462
6484
  };
6463
6485
  const content = document.createElement("div");
6464
6486
  content.className = "milkdown-toolbar";
6465
- __privateSet(this, _selection, vue.shallowRef(view.state.selection));
6487
+ __privateSet(this, _state, vue.shallowRef(view.state));
6466
6488
  const app = vue.createApp(Toolbar, {
6467
6489
  ctx,
6468
6490
  hide: this.hide,
6469
6491
  config,
6470
- selection: __privateGet(this, _selection),
6492
+ state: __privateGet(this, _state),
6471
6493
  show: __privateGet(this, _show)
6472
6494
  });
6473
6495
  app.mount(content);
@@ -6531,7 +6553,7 @@ class ToolbarView {
6531
6553
  _tooltipProvider = new WeakMap();
6532
6554
  _content = new WeakMap();
6533
6555
  _app = new WeakMap();
6534
- _selection = new WeakMap();
6556
+ _state = new WeakMap();
6535
6557
  _show = new WeakMap();
6536
6558
  _mousePressed = new WeakMap();
6537
6559
  _removePopupListener = new WeakMap();