From 01c9807817c9c9c2c875bb02bac15c4124aac28a Mon Sep 17 00:00:00 2001 From: thzxx <1440196015@qq.com> Date: Sat, 25 Jul 2026 15:12:47 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=AE=E5=8A=A8=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=A0=8F=E8=B4=B4=E8=BF=91=E9=80=89=E4=B8=AD=E6=96=87=E5=AD=97?= =?UTF-8?q?=20+=20=E6=9E=84=E5=BB=BA=E6=9C=80=E6=96=B0=20dist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/metona-editor.cjs.js | 4557 ++++++++++++++++++++++++++++++++ dist/metona-editor.cjs.js.map | 1 + dist/metona-editor.d.ts | 678 +++++ dist/metona-editor.esm.js | 4512 ++++++++++++++++++++++++++++++++ dist/metona-editor.esm.js.map | 1 + dist/metona-editor.js | 4563 +++++++++++++++++++++++++++++++++ dist/metona-editor.js.map | 1 + dist/metona-editor.min.js | 1 + src/core.ts | 13 +- 9 files changed, 14324 insertions(+), 3 deletions(-) create mode 100644 dist/metona-editor.cjs.js create mode 100644 dist/metona-editor.cjs.js.map create mode 100644 dist/metona-editor.d.ts create mode 100644 dist/metona-editor.esm.js create mode 100644 dist/metona-editor.esm.js.map create mode 100644 dist/metona-editor.js create mode 100644 dist/metona-editor.js.map create mode 100644 dist/metona-editor.min.js diff --git a/dist/metona-editor.cjs.js b/dist/metona-editor.cjs.js new file mode 100644 index 0000000..44a827f --- /dev/null +++ b/dist/metona-editor.cjs.js @@ -0,0 +1,4557 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +/** + * MetonaEditor Utils — utility functions + * @module utils + * @version 0.2.0 + */ +/** Generate a unique ID */ +const generateId = () => { + return 'me-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8); +}; +/** HTML-escape a string */ +const escapeHTML = (s) => { + const str = String(s == null ? '' : s); + if (typeof document === 'undefined') { + return str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; +}; +/** Detect dark mode preference */ +const prefersDark = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return false; + return window.matchMedia('(prefers-color-scheme: dark)').matches; +}; +/** Check if running in browser */ +const isBrowser = () => { + return typeof window !== 'undefined' && typeof document !== 'undefined'; +}; + +/** + * MetonaEditor Icons — SVG toolbar icons + * @module icons + * @version 0.2.0 + */ +const ICONS = { + bold: ``, + italic: ``, + underline: ``, + strikethrough: ``, + h1: ``, + h2: ``, + h3: ``, + quote: ``, + code: ``, + link: ``, + image: ``, + table: ``, + ul: ``, + ol: ``, + indent: ``, + outdent: ``, + hr: ``, + undo: ``, + redo: ``, + preview: ``, + split: ``, + edit: ``, + fullscreen: ``, + theme: ``, +}; + +/** + * MetonaEditor Locales — translation data + * @module locales + * @version 0.2.3 + */ +const LOCALES = { + 'zh-CN': { + bold: '粗体', italic: '斜体', underline: '下划线', strikethrough: '删除线', + h1: '标题1', h2: '标题2', h3: '标题3', quote: '引用', code: '代码', + link: '链接', image: '图片', table: '表格', ul: '无序列表', ol: '有序列表', + indent: '增加缩进', outdent: '减少缩进', hr: '分隔线', undo: '撤销', redo: '重做', + edit: '编辑', split: '分屏', preview: '预览', fullscreen: '全屏', + fullscreenExit: '退出全屏', theme: '主题', light: '亮色', dark: '暗色', + auto: '自动', warm: '暖色', wordCount: '字数统计', characters: '字符', + words: '词数', lines: '行数', readingTime: '阅读', minutes: '分钟', + placeholder: '开始输入 Markdown...', empty: '暂无内容', copied: '已复制', + copyContent: '复制内容', copyHTML: '复制 HTML', copySuccess: '复制成功', + copyFailed: '复制失败', clearContent: '清空内容', clearConfirm: '确定要清空所有内容吗?', + linkPlaceholder: '请输入链接地址', imagePlaceholder: '请输入图片地址', + altPlaceholder: '请输入替代文本', tableRows: '行数', tableCols: '列数', + confirm: '确认', cancel: '取消', exportMarkdown: '导出 Markdown', + exportHTML: '导出 HTML', search: '搜索', replace: '替换', replaceAll: '全部替换', + searchPlaceholder: '查找内容', replacePlaceholder: '替换为', + findNext: '查找下一个', findPrev: '查找上一个', matchCase: '区分大小写', + wholeWord: '全字匹配', close: '关闭', open: '打开', save: '保存', + saved: '已保存', saving: '保存中...', delete: '删除', confirmDelete: '确定要删除吗?', + unsavedChanges: '有未保存的更改', error: '错误', success: '成功', + warning: '警告', info: '信息', loading: '加载中...', retry: '重试', + renderError: '渲染失败', + outline: '大纲', + cut: '剪切', copy: '复制', paste: '粘贴', selectAll: '全选', + }, + 'en-US': { + bold: 'Bold', italic: 'Italic', underline: 'Underline', strikethrough: 'Strikethrough', + h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', quote: 'Quote', code: 'Code', + link: 'Link', image: 'Image', table: 'Table', ul: 'Bullet List', ol: 'Numbered List', + indent: 'Indent', outdent: 'Outdent', hr: 'Horizontal Rule', undo: 'Undo', redo: 'Redo', + edit: 'Edit', split: 'Split', preview: 'Preview', fullscreen: 'Fullscreen', + fullscreenExit: 'Exit Fullscreen', theme: 'Theme', light: 'Light', dark: 'Dark', + auto: 'Auto', warm: 'Warm', wordCount: 'Word Count', characters: 'Characters', + words: 'Words', lines: 'Lines', readingTime: 'Reading', minutes: 'min', + placeholder: 'Start typing Markdown...', empty: 'No content', copied: 'Copied', + copyContent: 'Copy Content', copyHTML: 'Copy HTML', copySuccess: 'Copied successfully', + copyFailed: 'Copy failed', clearContent: 'Clear Content', clearConfirm: 'Clear all content?', + linkPlaceholder: 'Enter link URL', imagePlaceholder: 'Enter image URL', + altPlaceholder: 'Enter alt text', tableRows: 'Rows', tableCols: 'Columns', + confirm: 'Confirm', cancel: 'Cancel', exportMarkdown: 'Export Markdown', + exportHTML: 'Export HTML', search: 'Search', replace: 'Replace', replaceAll: 'Replace All', + searchPlaceholder: 'Find', replacePlaceholder: 'Replace with', + findNext: 'Find Next', findPrev: 'Find Previous', matchCase: 'Match Case', + wholeWord: 'Whole Word', close: 'Close', open: 'Open', save: 'Save', + saved: 'Saved', saving: 'Saving...', delete: 'Delete', confirmDelete: 'Are you sure you want to delete?', + unsavedChanges: 'You have unsaved changes', error: 'Error', success: 'Success', + warning: 'Warning', info: 'Info', loading: 'Loading...', retry: 'Retry', + renderError: 'Render failed', + outline: 'Outline', + cut: 'Cut', copy: 'Copy', paste: 'Paste', selectAll: 'Select All', + }, + ja: { + bold: '太字', italic: '斜体', underline: '下線', strikethrough: '打ち消し線', + h1: '見出し1', h2: '見出し2', h3: '見出し3', quote: '引用', code: 'コード', + link: 'リンク', image: '画像', table: '表', ul: '箇条書き', ol: '番号付きリスト', + indent: 'インデント', outdent: 'インデント解除', hr: '水平線', undo: '元に戻す', redo: 'やり直し', + edit: '編集', split: '分割', preview: 'プレビュー', fullscreen: '全画面', + fullscreenExit: '全画面解除', theme: 'テーマ', light: 'ライト', dark: 'ダーク', + auto: '自動', warm: 'ウォーム', wordCount: '文字数', characters: '文字', + words: '単語', lines: '行', readingTime: '読了時間', minutes: '分', + placeholder: 'Markdownを入力...', empty: '内容なし', copied: 'コピー済み', + copyContent: '内容をコピー', copyHTML: 'HTMLをコピー', copySuccess: 'コピー成功', + copyFailed: 'コピー失敗', clearContent: '内容をクリア', clearConfirm: 'すべての内容をクリアしますか?', + linkPlaceholder: 'リンクURLを入力', imagePlaceholder: '画像URLを入力', + altPlaceholder: '代替テキストを入力', tableRows: '行', tableCols: '列', + confirm: '確認', cancel: 'キャンセル', exportMarkdown: 'Markdownエクスポート', + exportHTML: 'HTMLエクスポート', search: '検索', replace: '置換', replaceAll: 'すべて置換', + searchPlaceholder: '検索', replacePlaceholder: '置換後', + findNext: '次を検索', findPrev: '前を検索', matchCase: '大文字小文字', + wholeWord: '単語単位', close: '閉じる', open: '開く', save: '保存', + saved: '保存済み', saving: '保存中...', delete: '削除', confirmDelete: '削除してもよろしいですか?', + unsavedChanges: '未保存の変更があります', error: 'エラー', success: '成功', + warning: '警告', info: '情報', loading: '読み込み中...', retry: '再試行', + renderError: 'レンダリング失敗', + outline: 'アウトライン', + cut: '切り取り', copy: 'コピー', paste: '貼り付け', selectAll: 'すべて選択', + }, + ko: { + bold: '굵게', italic: '기울임', underline: '밑줄', strikethrough: '취소선', + h1: '제목1', h2: '제목2', h3: '제목3', quote: '인용', code: '코드', + link: '링크', image: '이미지', table: '표', ul: '순서 없는 목록', ol: '순서 있는 목록', + indent: '들여쓰기', outdent: '내어쓰기', hr: '수평선', undo: '실행 취소', redo: '다시 실행', + edit: '편집', split: '분할', preview: '미리보기', fullscreen: '전체 화면', + fullscreenExit: '전체 화면 종료', theme: '테마', light: '라이트', dark: '다크', + auto: '자동', warm: '웜', wordCount: '글자 수', characters: '글자', + words: '단어', lines: '줄', readingTime: '읽기 시간', minutes: '분', + placeholder: 'Markdown 입력...', empty: '내용 없음', copied: '복사됨', + copyContent: '내용 복사', copyHTML: 'HTML 복사', copySuccess: '복사 성공', + copyFailed: '복사 실패', clearContent: '내용 지우기', clearConfirm: '모든 내용을 지우시겠습니까?', + linkPlaceholder: '링크 URL 입력', imagePlaceholder: '이미지 URL 입력', + altPlaceholder: '대체 텍스트 입력', tableRows: '행', tableCols: '열', + confirm: '확인', cancel: '취소', exportMarkdown: 'Markdown 내보내기', + exportHTML: 'HTML 내보내기', search: '검색', replace: '바꾸기', replaceAll: '모두 바꾸기', + searchPlaceholder: '찾기', replacePlaceholder: '바꿀 내용', + findNext: '다음 찾기', findPrev: '이전 찾기', matchCase: '대소문자 구분', + wholeWord: '단어 단위', close: '닫기', open: '열기', save: '저장', + saved: '저장됨', saving: '저장 중...', delete: '삭제', confirmDelete: '삭제하시겠습니까?', + unsavedChanges: '저장되지 않은 변경 사항이 있습니다', error: '오류', success: '성공', + warning: '경고', info: '정보', loading: '로딩 중...', retry: '재시도', + renderError: '렌더링 실패', + outline: '개요', + cut: '잘라내기', copy: '복사', paste: '붙여넣기', selectAll: '전체 선택', + }, + fr: { + bold: 'Gras', italic: 'Italique', underline: 'Souligné', strikethrough: 'Barré', + h1: 'Titre 1', h2: 'Titre 2', h3: 'Titre 3', quote: 'Citation', code: 'Code', + link: 'Lien', image: 'Image', table: 'Tableau', ul: 'Liste à puces', ol: 'Liste numérotée', + indent: 'Indenter', outdent: 'Désindenter', hr: 'Ligne horizontale', undo: 'Annuler', redo: 'Rétablir', + edit: 'Éditer', split: 'Fractionné', preview: 'Aperçu', fullscreen: 'Plein écran', + fullscreenExit: 'Quitter plein écran', theme: 'Thème', light: 'Clair', dark: 'Sombre', + auto: 'Auto', warm: 'Chaud', wordCount: 'Nombre de mots', characters: 'Caractères', + words: 'Mots', lines: 'Lignes', readingTime: 'Lecture', minutes: 'min', + placeholder: 'Commencez à taper Markdown...', empty: 'Aucun contenu', copied: 'Copié', + copyContent: 'Copier le contenu', copyHTML: 'Copier HTML', copySuccess: 'Copié avec succès', + copyFailed: 'Échec de la copie', clearContent: 'Effacer le contenu', clearConfirm: 'Effacer tout le contenu ?', + linkPlaceholder: 'Entrez l\'URL du lien', imagePlaceholder: 'Entrez l\'URL de l\'image', + altPlaceholder: 'Entrez le texte alternatif', tableRows: 'Lignes', tableCols: 'Colonnes', + confirm: 'Confirmer', cancel: 'Annuler', exportMarkdown: 'Exporter Markdown', + exportHTML: 'Exporter HTML', search: 'Rechercher', replace: 'Remplacer', replaceAll: 'Tout remplacer', + searchPlaceholder: 'Rechercher', replacePlaceholder: 'Remplacer par', + findNext: 'Suivant', findPrev: 'Précédent', matchCase: 'Respecter la casse', + wholeWord: 'Mot entier', close: 'Fermer', open: 'Ouvrir', save: 'Enregistrer', + saved: 'Enregistré', saving: 'Enregistrement...', delete: 'Supprimer', confirmDelete: 'Confirmer la suppression ?', + unsavedChanges: 'Modifications non enregistrées', error: 'Erreur', success: 'Succès', + warning: 'Avertissement', info: 'Info', loading: 'Chargement...', retry: 'Réessayer', + renderError: 'Échec du rendu', + outline: 'Plan', + cut: 'Couper', copy: 'Copier', paste: 'Coller', selectAll: 'Tout sélectionner', + }, + de: { + bold: 'Fett', italic: 'Kursiv', underline: 'Unterstrichen', strikethrough: 'Durchgestrichen', + h1: 'Überschrift 1', h2: 'Überschrift 2', h3: 'Überschrift 3', quote: 'Zitat', code: 'Code', + link: 'Link', image: 'Bild', table: 'Tabelle', ul: 'Aufzählung', ol: 'Nummerierte Liste', + indent: 'Einrücken', outdent: 'Ausrücken', hr: 'Trennlinie', undo: 'Rückgängig', redo: 'Wiederholen', + edit: 'Bearbeiten', split: 'Geteilt', preview: 'Vorschau', fullscreen: 'Vollbild', + fullscreenExit: 'Vollbild beenden', theme: 'Design', light: 'Hell', dark: 'Dunkel', + auto: 'Auto', warm: 'Warm', wordCount: 'Wörter', characters: 'Zeichen', + words: 'Wörter', lines: 'Zeilen', readingTime: 'Lesezeit', minutes: 'min', + placeholder: 'Markdown eingeben...', empty: 'Kein Inhalt', copied: 'Kopiert', + copyContent: 'Inhalt kopieren', copyHTML: 'HTML kopieren', copySuccess: 'Erfolgreich kopiert', + copyFailed: 'Kopieren fehlgeschlagen', clearContent: 'Inhalt löschen', clearConfirm: 'Gesamten Inhalt löschen?', + linkPlaceholder: 'Link-URL eingeben', imagePlaceholder: 'Bild-URL eingeben', + altPlaceholder: 'Alternativtext eingeben', tableRows: 'Zeilen', tableCols: 'Spalten', + confirm: 'Bestätigen', cancel: 'Abbrechen', exportMarkdown: 'Markdown exportieren', + exportHTML: 'HTML exportieren', search: 'Suchen', replace: 'Ersetzen', replaceAll: 'Alle ersetzen', + searchPlaceholder: 'Suchen', replacePlaceholder: 'Ersetzen mit', + findNext: 'Nächstes', findPrev: 'Vorheriges', matchCase: 'Groß-/Kleinschreibung', + wholeWord: 'Ganzes Wort', close: 'Schließen', open: 'Öffnen', save: 'Speichern', + saved: 'Gespeichert', saving: 'Speichern...', delete: 'Löschen', confirmDelete: 'Wirklich löschen?', + unsavedChanges: 'Ungespeicherte Änderungen', error: 'Fehler', success: 'Erfolg', + warning: 'Warnung', info: 'Info', loading: 'Laden...', retry: 'Wiederholen', + renderError: 'Rendern fehlgeschlagen', + outline: 'Gliederung', + cut: 'Ausschneiden', copy: 'Kopieren', paste: 'Einfügen', selectAll: 'Alles auswählen', + }, +}; + +/** + * MetonaEditor Constants — default configs, themes, animations + * @module constants + * @version 0.2.0 + */ +/** Default toolbar button sequence */ +const DEFAULT_TOOLBAR = [ + 'bold', 'italic', 'strikethrough', 'code', '|', + 'h1', 'h2', 'h3', '|', + 'quote', 'ul', 'ol', '|', + 'link', 'image', 'table', 'hr', '|', + 'undo', 'redo', '|', + 'edit', 'split', 'preview', 'fullscreen', +]; +/** Default options */ +const DEFAULTS = Object.freeze({ + value: '', + placeholder: '', + mode: 'split', + height: 400, + toolbar: DEFAULT_TOOLBAR, + wordCount: true, + autofocus: false, + spellcheck: false, + historyLimit: 100, + historyDebounce: 400, + syncScroll: true, + tabSize: 2, + readOnly: false, + lineNumbers: true, + outline: false, + autoBrackets: true, + zenMode: false, + wordWrap: true, + maxLength: 0, + theme: 'auto', + locale: 'zh-CN', + render: null, + highlight: null, + sanitize: null, + className: '', + style: {}, + plugins: [], + onChange: null, + onInput: null, + onFocus: null, + onBlur: null, + onSave: null, + onModeChange: null, + onFullscreen: null, + onCreate: null, + onDestroy: null, + onLinkClick: null, + floatingToolbar: true, +}); +const THEMES = { + light: { + bg: 'rgba(255, 255, 255, 0.96)', + text: '#1f2937', + border: 'rgba(0, 0, 0, 0.08)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.18), 0 4px 14px -4px rgba(0, 0, 0, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(0, 0, 0, 0.22), 0 6px 18px -4px rgba(0, 0, 0, 0.10)', + toolbarBg: 'rgba(248, 249, 250, 0.92)', + textareaBg: '#ffffff', + previewBg: '#ffffff', + codeBg: 'rgba(243, 244, 246, 1)', + codeText: '#1f2937', + accent: '#3b82f6', + muted: '#6b7280', + }, + dark: { + bg: 'rgba(28, 32, 40, 0.94)', + text: '#e6e8eb', + border: 'rgba(255, 255, 255, 0.1)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.6), 0 4px 14px -4px rgba(0, 0, 0, 0.4)', + hoverShadow: '0 14px 48px -8px rgba(0, 0, 0, 0.6), 0 6px 18px -4px rgba(0, 0, 0, 0.4)', + toolbarBg: 'rgba(22, 26, 33, 0.92)', + textareaBg: '#1c2028', + previewBg: '#1c2028', + codeBg: 'rgba(15, 18, 24, 1)', + codeText: '#e6e8eb', + accent: '#60a5fa', + muted: '#9ca3af', + }, + auto: 'auto', + warm: { + bg: 'rgba(255, 251, 235, 0.96)', + text: '#78350f', + border: 'rgba(245, 158, 11, 0.2)', + shadow: '0 10px 36px -10px rgba(245, 158, 11, 0.18), 0 4px 14px -4px rgba(245, 158, 11, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(245, 158, 11, 0.22), 0 6px 18px -4px rgba(245, 158, 11, 0.10)', + toolbarBg: 'rgba(254, 243, 199, 0.92)', + textareaBg: '#fffbeb', + previewBg: '#fffbeb', + codeBg: 'rgba(254, 215, 170, 0.6)', + codeText: '#78350f', + accent: '#d97706', + muted: '#a16207', + progressBg: 'rgba(217, 119, 6, 0.15)', + closeHoverBg: 'rgba(217, 119, 6, 0.2)', + }, +}; +const ANIMATIONS = { + slide: { enter: { transform: 'translateX(80px)', opacity: '0' }, leave: { transform: 'translateX(120%)', opacity: '0' }, duration: 400, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + fade: { enter: { opacity: '0', filter: 'blur(3px)' }, leave: { opacity: '0', filter: 'blur(3px)' }, duration: 500, easing: 'ease' }, + scale: { enter: { transform: 'scale(0.55)', opacity: '0' }, leave: { transform: 'scale(0.55)', opacity: '0' }, duration: 450, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, + bounce: { enter: { transform: 'translateY(-80px)', opacity: '0' }, leave: { transform: 'translateY(20px)', opacity: '0' }, duration: 650, easing: 'ease' }, + flip: { enter: { transform: 'perspective(500px) rotateX(-90deg)', opacity: '0' }, leave: { transform: 'perspective(500px) rotateX(90deg)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + rotate: { enter: { transform: 'rotate(-25deg) scale(0.6)', opacity: '0' }, leave: { transform: 'rotate(25deg) scale(0.6)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + zoom: { enter: { transform: 'scale(0.1)', opacity: '0' }, leave: { transform: 'scale(0.1)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, +}; +const EDIT_MODES = ['edit', 'split', 'preview']; +const TOOLBAR_ACTIONS = [ + 'bold', 'italic', 'strikethrough', 'underline', 'code', + 'h1', 'h2', 'h3', 'quote', 'ul', 'ol', 'indent', 'outdent', 'hr', + 'link', 'image', 'table', 'undo', 'redo', + 'edit', 'split', 'preview', 'fullscreen', +]; + +/** + * MetonaEditor Styles — CSS-in-JS injection + * @module styles + * @version 0.2.0 + */ +let styleElement = null; +const generateCSS = () => { + return `:root{--md-bg:#ffffff;--md-text:#1f2937;--md-border:rgba(0,0,0,0.08);--md-shadow:0 10px 36px -10px rgba(0,0,0,0.18),0 4px 14px -4px rgba(0,0,0,0.08);--md-hover-shadow:0 14px 48px -10px rgba(0,0,0,0.22),0 6px 18px -4px rgba(0,0,0,0.10);--md-toolbar-bg:rgba(248,249,250,0.92);--md-textarea-bg:#ffffff;--md-preview-bg:#ffffff;--md-code-bg:rgba(243,244,246,1);--md-code-text:#1f2937;--md-accent:#3b82f6;--md-muted:#6b7280;--md-radius:10px;--md-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;--md-mono:"SF Mono","Cascadia Code","Consolas","Liberation Mono","Courier New",monospace} +.me-wrapper{display:flex;flex-direction:column;box-sizing:border-box;border:1px solid var(--md-border);border-radius:var(--md-radius);overflow:hidden;background:var(--md-bg);color:var(--md-text);box-shadow:var(--md-shadow);font-family:var(--md-font);font-size:14px;line-height:1.6;position:relative;transition:box-shadow .25s,border-color .25s;width:100%} +.me-wrapper:hover{box-shadow:var(--md-hover-shadow)} +.me-wrapper.me-disabled{opacity:.6;pointer-events:none} +.me-wrapper *{box-sizing:border-box} +.me-wrapper.me-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;border-radius:0;border:0} +.me-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background:var(--md-toolbar-bg);border-bottom:1px solid var(--md-border);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);min-height:40px} +.me-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--md-text);cursor:pointer;transition:background .15s,color .15s,transform .1s;flex-shrink:0} +.me-btn:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-btn:active{transform:scale(.92)} +.me-btn.me-active{background:var(--md-accent);color:#fff} +.me-btn:disabled{opacity:.35;cursor:not-allowed;pointer-events:none} +.me-btn:focus-visible{outline:2px solid var(--md-accent);outline-offset:2px} +.me-btn:focus:not(:focus-visible){outline:none} +.me-btn svg{width:17px;height:17px;display:block} +.me-btn span{font-size:12px;font-weight:500} +.me-toolbar-sep{display:inline-block;width:1px;height:20px;background:var(--md-border);margin:0 4px;flex-shrink:0} +.me-toolbar-group{display:inline-flex;gap:2px;margin-left:auto;padding-left:6px;border-left:1px solid var(--md-border)} +.me-toolbar-group .me-btn{width:auto;padding:0 8px} +.me-body{display:flex;flex:1;min-height:0;position:relative} +.me-editor-pane,.me-preview-pane{flex:1 1 50%;min-width:0;overflow:hidden;position:relative} +.me-editor-inner{display:flex;height:100%;overflow:hidden;position:relative} +.me-gutter{flex:0 0 auto;min-width:36px;padding:16px 8px 16px 6px;overflow:hidden;background:var(--md-code-bg);border-right:1px solid var(--md-border);color:var(--md-muted);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;text-align:right;user-select:none;white-space:pre} +.me-gutter-line{padding-right:4px} +.me-gutter-active{color:var(--md-accent);font-weight:600;background:rgba(59,130,246,.08);border-radius:3px} +.me-divider{flex:0 0 1px;background:var(--md-border);cursor:col-resize;position:relative} +.me-divider::after{content:'';position:absolute;top:0;bottom:0;left:-3px;right:-3px} +.me-divider:hover{background:var(--md-accent)} +.me-textarea{width:100%;height:100%;padding:16px 18px;border:0;outline:0;resize:none;background:var(--md-textarea-bg);color:var(--md-text);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;display:block;white-space:pre-wrap;word-wrap:break-word;position:relative;z-index:1} +.me-textarea::placeholder{color:var(--md-muted);opacity:.7} +.me-textarea:focus{outline:0} +.me-preview-pane{overflow:auto;background:var(--md-preview-bg)} +.me-preview{padding:18px 22px;max-width:100%;word-wrap:break-word;overflow-wrap:break-word} +.me-body.me-mode-edit .me-preview-pane,.me-body.me-mode-edit .me-divider{display:none} +.me-body.me-mode-edit .me-editor-pane{flex:1 1 100%} +.me-body.me-mode-preview .me-editor-pane,.me-body.me-mode-preview .me-divider{display:none} +.me-body.me-mode-preview .me-preview-pane{flex:1 1 100%} +.me-preview>:first-child{margin-top:0} +.me-preview>:last-child{margin-bottom:0} +.me-preview h1,.me-preview h2,.me-preview h3,.me-preview h4,.me-preview h5,.me-preview h6{margin:1.4em 0 .6em;font-weight:650;line-height:1.3} +.me-preview h1{font-size:1.9em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h2{font-size:1.55em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h3{font-size:1.3em} +.me-preview h4{font-size:1.12em} +.me-preview h5{font-size:1em} +.me-preview h6{font-size:.9em;color:var(--md-muted)} +.me-preview p{margin:.7em 0} +.me-preview a{color:var(--md-accent);text-decoration:none} +.me-preview a:hover{text-decoration:underline} +.me-preview strong{font-weight:650} +.me-preview em{font-style:italic} +.me-preview del{text-decoration:line-through;opacity:.75} +.me-preview ul,.me-preview ol{margin:.6em 0;padding-left:1.6em} +.me-preview li{margin:.25em 0} +.me-preview li.me-task-item{list-style:none;margin-left:-1.4em} +.me-preview li.me-task-item input{margin-right:.5em;vertical-align:middle} +.me-preview blockquote{margin:.8em 0;padding:.4em 1em;border-left:3px solid var(--md-accent);background:var(--md-code-bg);border-radius:0 6px 6px 0;color:var(--md-text)} +.me-preview blockquote>:first-child{margin-top:0} +.me-preview blockquote>:last-child{margin-bottom:0} +.me-preview hr{border:0;height:1px;background:var(--md-border);margin:1.6em 0} +.me-preview code{font-family:var(--md-mono);font-size:.88em;padding:.15em .4em;background:var(--md-code-bg);color:var(--md-code-text);border-radius:4px} +.me-preview pre{margin:.9em 0;padding:14px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;border:1px solid var(--md-border)} +.me-code-title{font-family:var(--md-mono);font-size:.85em;padding:8px 14px;background:var(--md-border);border-radius:8px 8px 0 0;color:var(--md-text);margin:.9em 0 -0.9em;font-weight:600} +.me-code-title+pre{margin-top:0;border-radius:0 0 8px 8px;border-top:none} +.me-preview pre code{padding:0;background:transparent;color:var(--md-code-text);font-size:.9em;line-height:1.6;border-radius:0} +.me-preview img{max-width:100%;height:auto;border-radius:6px;vertical-align:middle} +.me-table-wrap{overflow-x:auto;margin:.9em 0} +.me-preview table{border-collapse:collapse;width:100%;font-size:.93em;display:block} +.me-preview th,.me-preview td{border:1px solid var(--md-border);padding:7px 12px;text-align:left} +.me-preview th{background:var(--md-code-bg);font-weight:600} +.me-preview tr:nth-child(even) td{background:var(--md-code-bg)} +.me-statusbar{display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:4px 12px;border-top:1px solid var(--md-border);background:var(--md-toolbar-bg);color:var(--md-muted);font-size:12px;min-height:26px} +.me-statusbar:empty{display:none} +.me-wrapper:focus-within{border-color:var(--md-accent)} +.me-textarea:focus-visible{outline:0} +@media(prefers-reduced-motion:reduce){.me-wrapper,.me-btn,.me-textarea{transition:none!important}} +.me-wrapper.me-fullscreen .me-preview,.me-wrapper.me-fullscreen .me-textarea{font-size:15px} +.me-wrapper.me-readonly .me-textarea{background:var(--md-code-bg);cursor:default;opacity:.88} +.me-wrapper.me-readonly .me-toolbar{opacity:.75} +.me-wrapper.me-readonly .me-btn:disabled{opacity:.3;cursor:not-allowed;pointer-events:none} +.me-preview mark{background:rgba(250,204,21,.3);color:inherit;padding:.1em .2em;border-radius:3px} +.me-preview sup{font-size:.75em;vertical-align:super;line-height:1} +.me-preview sub{font-size:.75em;vertical-align:sub;line-height:1} +.me-preview .me-math-block{display:block;margin:1.2em 0;padding:12px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;font-family:var(--md-mono);font-size:.95em;text-align:center} +.me-preview .me-math-inline{font-family:var(--md-mono);font-size:.95em;padding:.05em .2em} +.me-preview dl{margin:.8em 0} +.me-preview dt{font-weight:650;margin:.6em 0 .2em} +.me-preview dd{margin:0 0 .3em 1.6em;color:var(--md-text)} +.me-preview .me-footnote-ref a{font-size:.75em;vertical-align:super;text-decoration:none;color:var(--md-accent)} +.me-preview .me-footnotes{margin-top:2em;border-top:1px solid var(--md-border);padding-top:.8em;font-size:.9em;color:var(--md-muted)} +.me-preview .me-footnotes hr{display:none} +.me-preview .me-footnotes ol{padding-left:1.2em} +.me-preview .me-footnote-item{margin:.3em 0} +.me-preview .me-footnote-backref{text-decoration:none;color:var(--md-accent);margin-right:.4em} +.me-toast{position:absolute;bottom:16px;right:16px;z-index:30;display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:8px;font-size:13px;pointer-events:auto;cursor:pointer;opacity:0;transform:translateY(12px);transition:opacity .3s,transform .3s;box-shadow:0 6px 20px rgba(0,0,0,.15);max-width:360px} +.me-toast.me-toast-enter{opacity:1;transform:translateY(0)} +.me-toast.me-toast-leave{opacity:0;transform:translateY(12px)} +.me-toast-success{background:#10b981;color:#fff} +.me-toast-error{background:#ef4444;color:#fff} +.me-toast-warning{background:#f59e0b;color:#fff} +.me-toast-info{background:var(--md-accent,#3b82f6);color:#fff} +.me-toast-icon{font-weight:700;font-size:16px;flex-shrink:0} +.me-toast-msg{line-height:1.4} +.me-context-menu{position:fixed;z-index:40;min-width:180px;padding:4px 0;background:var(--md-bg);border:1px solid var(--md-border);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.18);font-size:13px} +.me-context-menu-item{display:flex;align-items:center;justify-content:space-between;padding:6px 14px;cursor:pointer;color:var(--md-text);transition:background .1s} +.me-context-menu-item:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-context-menu-sep{height:1px;background:var(--md-border);margin:4px 0} +.me-context-menu-shortcut{color:var(--md-muted);font-size:11px;margin-left:24px} +.me-context-menu-item.me-disabled{opacity:.4;cursor:not-allowed;pointer-events:none} +.me-outline{position:absolute;top:0;right:0;width:220px;height:100%;overflow-y:auto;background:var(--md-preview-bg);border-left:1px solid var(--md-border);padding:12px 14px;font-size:13px;z-index:15} +.me-outline-title{font-weight:650;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--md-border);color:var(--md-text)} +.me-outline ul{list-style:none;padding:0;margin:0} +.me-outline li{margin:2px 0} +.me-outline a{color:var(--md-muted);text-decoration:none;display:block;padding:2px 6px;border-radius:4px;transition:background .1s,color .1s} +.me-outline a:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-outline a.me-outline-active{background:var(--md-accent);color:#fff;font-weight:600} +.me-outline-l1 a{font-weight:600;color:var(--md-text)} +.me-outline-l2 a{padding-left:12px} +.me-outline-l3 a{padding-left:20px;font-size:12px} +.me-outline-l4 a{padding-left:28px;font-size:12px} +.me-wrapper.me-zen .me-body{max-width:820px;margin:0 auto} +.me-wrapper.me-zen .me-textarea{font-size:15px;line-height:1.8} +.me-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0} +@media print{.me-wrapper{border:0!important;box-shadow:none!important} +.me-toolbar,.me-statusbar,.me-divider{display:none!important} +.me-body.me-mode-split .me-editor-pane{display:none} +.me-body.me-mode-split .me-preview-pane{flex:1 1 100%!important} +.me-preview{padding:0!important;font-size:11pt} +.me-wrapper.me-fullscreen{position:static!important;width:auto!important;height:auto!important}} +[dir=rtl] .me-gutter{border-right:none;border-left:1px solid var(--md-border);text-align:left} +[dir=rtl] .me-gutter-line{padding-right:0;padding-left:4px} +[dir=rtl] .me-toolbar-group{margin-left:0;margin-right:auto;padding-left:0;padding-right:6px;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline{right:auto;left:0;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline-l2 a{padding-left:0;padding-right:12px} +[dir=rtl] .me-outline-l3 a{padding-left:0;padding-right:20px} +[dir=rtl] .me-outline-l4 a{padding-left:0;padding-right:28px} +[dir=rtl] .me-preview blockquote{border-left:none;border-right:3px solid var(--md-accent);border-radius:6px 0 0 6px} +[dir=rtl] .me-preview ul,[dir=rtl] .me-preview ol{padding-left:0;padding-right:1.6em} +[dir=rtl] .me-preview li.me-task-item{margin-left:0;margin-right:-1.4em} +[dir=rtl] .me-preview dd{margin-left:0;margin-right:1.6em} +[dir=rtl] .me-preview .me-footnotes ol{padding-left:0;padding-right:1.2em} +[dir=rtl] .me-preview .me-footnote-backref{margin-right:0;margin-left:.4em} +[dir=rtl] .me-search{right:auto;left:12px} +[dir=rtl] .me-toast{right:auto;left:16px} +[dir=rtl] .me-context-menu-shortcut{margin-left:0;margin-right:24px} +[dir=rtl] .me-statusbar{justify-content:flex-start}`; +}; +const injectStyles = () => { + if (typeof document === 'undefined') + return; + if (styleElement && document.getElementById('metona-editor-styles')) + return; + const css = generateCSS(); + styleElement = document.createElement('style'); + styleElement.id = 'metona-editor-styles'; + styleElement.textContent = css; + document.head.appendChild(styleElement); +}; + +/** + * MetonaEditor i18n — internationalization + * @module i18n + * @version 0.2.0 + */ +let currentLocale = 'zh-CN'; +let localeListeners = new Set(); +let fallbackLocale = 'zh-CN'; +const pluralRules = { + zh: () => 'other', + en: (n) => n === 1 ? 'one' : 'other', + ru: (n) => { + const m = n % 10, h = n % 100; + if (m === 1 && h !== 11) + return 'one'; + if (m >= 2 && m <= 4 && !(h >= 12 && h <= 14)) + return 'few'; + if (m === 0 || (m >= 5 && m <= 9) || (h >= 11 && h <= 14)) + return 'many'; + return 'other'; + }, +}; +const getPluralForm = (locale, count) => { + const lang = locale.split('-')[0].toLowerCase(); + const rule = pluralRules[lang] || pluralRules.en; + return rule(Math.abs(count)); +}; +const getCurrentLocale = () => currentLocale; +const setCurrentLocale = (locale) => { + let target = locale; + if (!LOCALES[target]) { + console.warn(`Locale "${target}" not found, falling back to "${fallbackLocale}"`); + target = fallbackLocale; + } + currentLocale = target; + notifyLocaleListeners(target); + saveLocale(target); +}; +const t = (key, params = {}, locale) => { + const loc = locale || currentLocale; + let translation = getTranslation(loc, key); + if (translation && typeof translation === 'object' && params.count !== undefined) { + const form = getPluralForm(loc, params.count); + translation = translation[form] || translation.other || key; + } + if (typeof translation === 'string') + return interpolate(translation, params); + if (loc !== fallbackLocale) { + let fb = getTranslation(fallbackLocale, key); + if (fb && typeof fb === 'object' && params.count !== undefined) { + const form = getPluralForm(fallbackLocale, params.count); + fb = fb[form] || fb.other; + } + if (typeof fb === 'string') + return interpolate(fb, params); + } + console.warn(`Translation missing for key "${key}" in locale "${loc}"`); + return key; +}; +const getTranslation = (locale, key) => { + const localeData = LOCALES[locale]; + if (!localeData) + return undefined; + const keys = key.split('.'); + let result = localeData; + for (const k of keys) { + if (result && typeof result === 'object' && k in result) { + result = result[k]; + } + else + return undefined; + } + return result; +}; +const interpolate = (str, params) => { + return str.replace(/\{(\w+)\}/g, (_match, key) => params[key] !== undefined ? String(params[key]) : _match); +}; +const hasTranslation = (key) => { + return getTranslation(currentLocale, key) !== undefined || getTranslation(fallbackLocale, key) !== undefined; +}; +const getTranslations = (locale) => LOCALES[locale] || {}; +const addTranslations = (locale, translations) => { + if (!LOCALES[locale]) + LOCALES[locale] = {}; + deepMergeI18n(LOCALES[locale], translations); +}; +const loadRemote = async (url, locale) => { + try { + const res = await fetch(url); + if (!res.ok) + throw new Error(`HTTP ${res.status}`); + const data = await res.json(); + addTranslations(locale, data); + return true; + } + catch (e) { + console.error(`MeEditor: failed to load locale "${locale}" from ${url}`, e); + return false; + } +}; +const deepMergeI18n = (target, source) => { + for (const key in source) { + if (source[key] instanceof Object && key in target && target[key] instanceof Object && !Array.isArray(source[key])) { + deepMergeI18n(target[key], source[key]); + } + else { + target[key] = source[key]; + } + } + return target; +}; +const getSupportedLocales = () => Object.keys(LOCALES); +const isLocaleSupported = (locale) => locale in LOCALES; +const getLocaleName = (locale) => { + const names = { + 'zh-CN': '简体中文', 'zh-TW': '繁體中文', 'en-US': 'English (US)', 'en-GB': 'English (UK)', + ja: '日本語', ko: '한국어', fr: 'Français', de: 'Deutsch', es: 'Español', pt: 'Português', + ru: 'Русский', ar: 'العربية', hi: 'हिन्दी', th: 'ไทย', + vi: 'Tiếng Việt', id: 'Bahasa Indonesia', tr: 'Türkçe', + it: 'Italiano', nl: 'Nederlands', pl: 'Polski', + }; + return names[locale] || locale; +}; +const getLocaleDirection = (locale) => { + const rtlLocales = ['ar', 'he', 'fa', 'ur', 'yi', 'ps', 'sd', 'ug', 'dv', 'ku', 'syr']; + const short = locale.split('-')[0].toLowerCase(); + return rtlLocales.includes(short) ? 'rtl' : 'ltr'; +}; +const formatNumber = (number, options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, options).format(number); + } + catch (_) { + return String(number); + } +}; +const formatCurrency = (amount, currency = 'USD', options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, { style: 'currency', currency, ...options }).format(amount); + } + catch (_) { + return String(amount); + } +}; +const formatDate = (date, options = {}) => { + try { + const d = date instanceof Date ? date : new Date(date); + return new Intl.DateTimeFormat(currentLocale, options).format(d); + } + catch (_) { + return String(date); + } +}; +const addLocaleListener = (fn) => { + localeListeners.add(fn); + return () => { localeListeners.delete(fn); }; +}; +const removeLocaleListener = (fn) => { localeListeners.delete(fn); }; +const clearLocaleListeners = () => { localeListeners.clear(); }; +const notifyLocaleListeners = (locale) => { + localeListeners.forEach((fn) => { + try { + fn(locale); + } + catch (e) { + console.error('Locale listener error:', e); + } + }); +}; +const saveLocale = (locale) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-locale', locale); + } + catch (_) { } + } +}; +const loadLocale = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-locale') || getDefaultLocale(); + } + catch (_) { } + } + return getDefaultLocale(); +}; +const getDefaultLocale = () => { + if (typeof navigator !== 'undefined') { + const browserLocale = navigator.language || navigator.userLanguage; + if (browserLocale && isLocaleSupported(browserLocale)) + return browserLocale; + const short = browserLocale?.split('-')[0]; + if (short && isLocaleSupported(short)) + return short; + } + return fallbackLocale; +}; +const initI18n = () => { + const saved = loadLocale(); + setCurrentLocale(saved); +}; +const switchLocale = (locale) => { setCurrentLocale(locale); }; +const createInstanceI18n = (editor) => { + let instanceLocale = editor.config?.locale || currentLocale || 'zh-CN'; + const instanceT = (key, params = {}) => t(key, params, instanceLocale); + const set = (locale) => { + if (!locale || instanceLocale === locale) + return instanceLocale; + instanceLocale = locale; + if (editor.el) { + editor.el.setAttribute('lang', locale); + editor.el.setAttribute('dir', getLocaleDirection(locale)); + } + if (editor.textarea) { + editor.textarea.placeholder = instanceT('placeholder') || ''; + editor.textarea.setAttribute('aria-label', instanceT('edit') || ''); + editor.textarea.setAttribute('dir', getLocaleDirection(locale)); + } + if (typeof editor._emit === 'function') { + editor._emit('localeChange', { locale, direction: getLocaleDirection(locale) }); + } + if (editor.toolbarEl) { + editor.toolbarEl.querySelectorAll('.me-btn').forEach((btn) => { + const action = btn.dataset.action || btn.dataset.mode; + if (action) { + const label = instanceT(action); + if (label && label !== action) { + btn.title = label; + btn.setAttribute('aria-label', label); + } + } + }); + } + return instanceLocale; + }; + return { + set, get: () => instanceLocale, getDirection: () => getLocaleDirection(instanceLocale), t: instanceT, + formatNumber: (n, opts) => { try { + return new Intl.NumberFormat(instanceLocale, opts).format(n); + } + catch (_) { + return String(n); + } }, + formatDate: (d, opts) => { try { + return new Intl.DateTimeFormat(instanceLocale, opts).format(d instanceof Date ? d : new Date(d)); + } + catch (_) { + return String(d); + } }, + }; +}; +const createI18nManager = () => ({ + t, getCurrentLocale, setCurrentLocale, switchLocale, + getFallbackLocale: () => fallbackLocale, setFallbackLocale: (locale) => { fallbackLocale = locale; }, + hasTranslation, getTranslations, addTranslations, loadRemote, + getSupportedLocales, isLocaleSupported, getLocaleName, getLocaleDirection, + formatNumber, formatCurrency, formatDate, addLocaleListener, removeLocaleListener, clearLocaleListeners, + initI18n, saveLocale, loadLocale, getDefaultLocale, createInstanceI18n, +}); +({ + 'zh-CN': { name: '简体中文', nativeName: '简体中文', direction: 'ltr', translations: LOCALES['zh-CN'] }, + 'en-US': { name: 'English (US)', nativeName: 'English (US)', direction: 'ltr', translations: LOCALES['en-US'] }, + ja: { name: '日本語', nativeName: '日本語', direction: 'ltr', translations: LOCALES['ja'] }, + ko: { name: '한국어', nativeName: '한국어', direction: 'ltr', translations: LOCALES['ko'] }, + fr: { name: 'Français', nativeName: 'Français', direction: 'ltr', translations: LOCALES['fr'] }, + de: { name: 'Deutsch', nativeName: 'Deutsch', direction: 'ltr', translations: LOCALES['de'] }, +}); +const i18nUtils = createI18nManager(); + +/** + * MetonaEditor Parser — lightweight Markdown parser (TypeScript) + * @module parser + * @version 0.2.0 + */ +// ============ Precompiled regex ============ +const RE_EMPTY = /^\s*$/; +const RE_ATX = /^(#{1,6})\s+(.+?)(?:\s+#{1,6})?\s*$/; +const RE_SETEXT_H1 = /^={3,}\s*$/; +const RE_SETEXT_H2 = /^-{3,}\s*$/; +const RE_FENCE_START = /^(\s{0,3})(`{3,}|~{3,})\s*([\w+#.-]*)(\s+[^\n]*?)?\s*$/; +const RE_HR = /^\s{0,3}([-*_])(\s*\1){2,}\s*$/; +const RE_QUOTE = /^\s{0,3}>\s?/; +const RE_UL = /^(\s*)([-*+])\s/; +const RE_OL = /^(\s*)(\d+)\.\s/; +const RE_TASK = /^\[([ xX])\]\s+(.*)$/; +const RE_TABLE_SEP = /^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/; +const RE_INDENT_CODE = /^( {4}|\t)/; +const RE_DEF_LIST = /^:\s+/; +const RE_FOOTNOTE_DEF = /^\[\^([^\]]+)\]:\s*/; +// ============ Emoji map ============ +const EMOJI_MAP = { + smile: '😊', grinning: '😀', joy: '😂', rofl: '🤣', wink: '😉', blush: '😊', innocent: '😇', + heart_eyes: '😍', kissing_heart: '😘', yum: '😋', stuck_out_tongue: '😛', sunglasses: '😎', + smirk: '😏', unamused: '😒', disappointed: '😞', worried: '😟', confused: '😕', + cry: '😢', sob: '😭', scream: '😱', angry: '😠', rage: '💢', triumph: '😤', sleepy: '😪', + dizzy_face: '😵', zipper_mouth: '🤐', nerd: '🤓', thinking: '🤔', rolling_eyes: '🙄', + expressionless: '😑', thumbsup: '👍', thumbsdown: '👎', clap: '👏', pray: '🙏', muscle: '💪', + ok: '👌', point_up: '👆', point_down: '👇', point_left: '👈', point_right: '👉', + raised_hands: '🙌', wave: '👋', punch: '👊', crossed_fingers: '🤞', + heart: '❤️', broken_heart: '💔', star: '⭐', star2: '🌟', fire: '🔥', rocket: '🚀', + check: '✅', cross: '❌', warning: '⚠️', info: 'ℹ️', question: '❓', exclamation: '❗', + bangbang: '‼️', grey_exclamation: '❕', bulb: '💡', book: '📖', memo: '📝', pin: '📌', + link: '🔗', lock: '🔒', unlock: '🔓', key: '🔑', hammer: '🔨', wrench: '🔧', + gear: '⚙️', tools: '🛠️', magnet: '🧲', zap: '⚡', cloud: '☁️', + sun: '☀️', moon: '🌙', rain: '🌧️', snow: '❄️', umbrella: '☂️', rainbow: '🌈', + tornado: '🌪️', fog: '🌫️', droplet: '💧', + coffee: '☕', pizza: '🍕', cake: '🎂', beer: '🍺', wine: '🍷', + hamburger: '🍔', fries: '🍟', apple: '🍎', banana: '🍌', grapes: '🍇', + watermelon: '🍉', strawberry: '🍓', peach: '🍑', cherry: '🍒', taco: '🌮', + tada: '🎉', gift: '🎁', crown: '👑', gem: '💎', ring: '💍', + confetti: '🎊', balloon: '🎈', ribbon: '🎀', medal: '🏅', trophy: '🏆', + eye: '👁️', ear: '👂', nose: '👃', tongue: '👅', lips: '👄', + brain: '🧠', speech: '💬', thought: '💭', anger: '💢', sweat: '💦', + one: '1️⃣', two: '2️⃣', three: '3️⃣', four: '4️⃣', five: '5️⃣', + six: '6️⃣', seven: '7️⃣', eight: '8️⃣', nine: '9️⃣', zero: '0️⃣', + arrow_up: '⬆️', arrow_down: '⬇️', arrow_left: '⬅️', arrow_right: '➡️', + arrow_upper_right: '↗️', arrow_lower_right: '↘️', arrow_lower_left: '↙️', arrow_upper_left: '↖️', + computer: '💻', phone: '📱', battery: '🔋', electric_plug: '🔌', + copyright: '©️', registered: '®️', tm: '™️', hundred: '💯', boom: '💥', dash: '💨', + hole: '🕳️', bomb: '💣', email: '📧', phone2: '📞', clock: '🕐', hourglass: '⏳', + calendar: '📅', money: '💰', shopping: '🛒', package: '📦', mailbox: '📫', + art: '🎨', music: '🎵', movie: '🎬', game: '🎮', sport: '⚽', + earth: '🌍', house: '🏠', car: '🚗', airplane: '✈️', ship: '🚢', +}; +// ============ Render cache ============ +const renderCache = new Map(); +const MAX_CACHE_SIZE = 300; +const cachedRenderInline = (text, env) => { + if (!text) + return ''; + if (!env.highlight && text.length < 600) { + const cached = renderCache.get(text); + if (cached !== undefined) + return cached; + const result = renderInline(text, env); + if (renderCache.size >= MAX_CACHE_SIZE) { + const firstKey = renderCache.keys().next().value; + renderCache.delete(firstKey); + } + renderCache.set(text, result); + return result; + } + return renderInline(text, env); +}; +const clearRenderCache = () => { renderCache.clear(); }; +// ============ Security utils ============ +const safeUrl = (url) => { + if (!url) + return ''; + const u = String(url).trim(); + if (/^(javascript|vbscript|file):/i.test(u)) + return ''; + if (/^data:/i.test(u)) { + if (!/^data:image\//i.test(u)) + return ''; + if (u.length > 500000) + return ''; + } + return u; +}; +const slugify = (text) => { + let slug = String(text).normalize('NFKC').toLowerCase() + .replace(/[^\w\u4e00-\u9fff\u3400-\u4dbf\s-]/g, '') + .trim().replace(/\s+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, ''); + return slug || 'heading'; +}; +// ============ Block handler registry ============ +const blockHandlers = []; +const registerBlockHandler = (handler) => { + blockHandlers.push(handler); + blockHandlers.sort((a, b) => a.priority - b.priority); +}; +const isBlockStart = (line) => { + if (RE_EMPTY.test(line) || RE_FENCE_START.test(line) || RE_ATX.test(line)) + return true; + if (RE_HR.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return true; + if (RE_FOOTNOTE_DEF.test(line) || RE_DEF_LIST.test(line)) + return true; + if (/^\$\$/.test(line)) + return true; + return false; +}; +// Register all built-in block handlers +registerBlockHandler({ name: 'refDef', priority: 0.1, + test: (line) => { + // Must not match footnote definitions: [^id]: text + if (/^\[\^/.test(line)) + return null; + const m = line.match(/^\[([^\]]+)\]:\s*(?:<(\S+)>|(\S+))(?:\s+['"\(](.*?)['"\)])?\s*$/); + return m ? m : null; + }, + parse: (_lines, i, match, _tokens, _footnotes, refs) => { + const refId = match[1].toLowerCase(); + const url = match[2] || match[3] || ''; + const title = match[4] || ''; + if (url && refs) { + refs[refId] = JSON.stringify({ url, title }); + } + return { token: null, newIndex: i + 1 }; + }, +}); +registerBlockHandler({ name: 'blank', priority: 0, + test: (line) => RE_EMPTY.test(line) ? true : null, + parse: (_lines, i) => ({ token: null, newIndex: i + 1 }), +}); +registerBlockHandler({ name: 'fencedCode', priority: 1, + test: (line) => { + const m = line.match(RE_FENCE_START); + if (!m) + return null; + // Reject fences where the info string contains backticks (false positives like ``` `code` ```) + const rest = (m[4] || ''); + if (rest.includes('`')) + return null; + return m; + }, + parse: (lines, i, match) => { + const fenceChar = match[2][0]; + const fenceLen = match[2].length; + const lang = match[3] || ''; + const rest = (match[4] || '').trim(); + // Parse info string: first word is lang, rest are key=value or standalone flags + const infoParts = rest ? rest.split(/\s+/).filter(Boolean) : []; + const attrs = {}; + for (let p = 0; p < infoParts.length; p++) { + const kv = infoParts[p].split('='); + if (kv.length === 2) + attrs[kv[0]] = kv[1]; + else + attrs[infoParts[p]] = 'true'; + } + const codeLines = []; + let j = i + 1; + while (j < lines.length) { + const cm = lines[j].match(/^(\s{0,3})(`{3,}|~{3,})\s*$/); + if (cm && cm[2][0] === fenceChar && cm[2].length >= fenceLen) + break; + codeLines.push(lines[j]); + j++; + } + if (j < lines.length) + j++; + return { token: { type: 'code', lang, content: codeLines.join('\n'), attrs }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'indentedCode', priority: 2, + test: (line) => { + if (!RE_INDENT_CODE.test(line)) + return null; + if (RE_ATX.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return null; + return true; + }, + parse: (lines, i) => { + const codeLines = []; + while (i < lines.length && RE_INDENT_CODE.test(lines[i])) { + codeLines.push(lines[i].replace(/^( {4}|\t)/, '')); + i++; + } + if (codeLines.length) + return { token: { type: 'code', lang: '', content: codeLines.join('\n'), indent: true }, newIndex: i }; + return { token: null, newIndex: i }; + }, +}); +registerBlockHandler({ name: 'atxHeading', priority: 3, + test: (line) => line.match(RE_ATX), + parse: (_lines, i, match) => ({ + token: { type: 'heading', level: match[1].length, text: match[2] }, newIndex: i + 1, + }), +}); +registerBlockHandler({ name: 'setextH1', priority: 4, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H1.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 1, text: lines[i] }, newIndex: i + 2 }), +}); +registerBlockHandler({ name: 'setextH2', priority: 5, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H2.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 2, text: lines[i] }, newIndex: i + 2 }), +}); +registerBlockHandler({ name: 'hr', priority: 6, + test: (line) => RE_HR.test(line) ? true : null, + parse: (_lines, i) => ({ token: { type: 'hr' }, newIndex: i + 1 }), +}); +registerBlockHandler({ name: 'blockquote', priority: 7, + test: (line) => RE_QUOTE.test(line) ? true : null, + parse: (lines, i) => { + const quoteLines = []; + while (i < lines.length && RE_QUOTE.test(lines[i])) { + quoteLines.push(lines[i].replace(RE_QUOTE, '')); + i++; + } + return { token: { type: 'quote', content: quoteLines.join('\n') }, newIndex: i }; + }, +}); +registerBlockHandler({ name: 'table', priority: 8, + test: (line, lines, i) => { + if (!/\|/.test(line) || i + 1 >= lines.length) + return null; + if (!isTableSeparator(lines[i + 1])) + return null; + return { header: line, align: parseAlign(lines[i + 1]) }; + }, + parse: (lines, i, match) => { + let j = i + 2; + const rows = []; + while (j < lines.length && /\|/.test(lines[j]) && !RE_EMPTY.test(lines[j])) { + rows.push(lines[j]); + j++; + } + return { token: { type: 'table', header: match.header, rows, align: match.align }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'ul', priority: 9, + test: (line) => line.match(RE_UL), + parse: (lines, i, match) => { + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, false); + return { token: { type: 'ul', items }, newIndex: endIdx }; + }, +}); +registerBlockHandler({ name: 'ol', priority: 10, + test: (line) => line.match(RE_OL), + parse: (lines, i, match) => { + const start = parseInt(match[2], 10); + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, true); + return { token: { type: 'ol', items, start }, newIndex: endIdx }; + }, +}); +registerBlockHandler({ name: 'footnoteDef', priority: 11, + test: (line) => line.match(RE_FOOTNOTE_DEF), + parse: (lines, i, match, _tokens, footnotes) => { + const fnId = match[1]; + const fnContent = lines[i].slice(match[0].length); + const fnLines = [fnContent]; + let j = i + 1; + while (j < lines.length && !RE_EMPTY.test(lines[j]) && !isBlockStart(lines[j])) { + fnLines.push(lines[j]); + j++; + } + footnotes[fnId] = fnLines.join(' '); + return { token: null, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'defList', priority: 12, + test: (line) => RE_DEF_LIST.test(line) ? true : null, + parse: (lines, i, _match, tokens) => { + const term = (tokens.length > 0 && tokens[tokens.length - 1].type === 'paragraph') ? tokens.pop().text : ''; + const defs = [lines[i].replace(RE_DEF_LIST, '')]; + let j = i + 1; + while (j < lines.length && RE_DEF_LIST.test(lines[j])) { + defs.push(lines[j].replace(RE_DEF_LIST, '')); + j++; + } + return { token: { type: 'defList', term, defs }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'mathBlock', priority: 13, + test: (line) => /^\$\$/.test(line) ? true : null, + parse: (lines, i) => { + const single = lines[i].match(/^\$\$([\s\S]+?)\$\$\s*$/); + if (single) + return { token: { type: 'mathBlock', content: single[1] }, newIndex: i + 1 }; + const mathLines = [lines[i].replace(/^\$\$/, '')]; + let j = i + 1; + while (j < lines.length && !/\$\$/.test(lines[j])) { + mathLines.push(lines[j]); + j++; + } + if (j < lines.length) { + mathLines.push(lines[j].replace(/\$\$\s*$/, '')); + j++; + } + return { token: { type: 'mathBlock', content: mathLines.join('\n') }, newIndex: j }; + }, +}); +// ============ Block parsing ============ +const parseTokens = (md) => { + if (md == null) + return { tokens: [], footnotes: {}, refs: {} }; + const text = String(md).replace(/\r\n?/g, '\n'); + const lines = text.split('\n'); + const tokens = []; + const footnotes = {}; + const refs = {}; + let i = 0; + while (i < lines.length) { + const line = lines[i]; + let handled = false; + for (const handler of blockHandlers) { + const match = handler.test(line, lines, i); + if (match !== null && match !== false) { + const result = handler.parse(lines, i, match, tokens, footnotes, refs); + if (result.token) + tokens.push(result.token); + i = result.newIndex; + handled = true; + break; + } + } + if (handled) + continue; + // Paragraph fallback + const para = []; + while (i < lines.length) { + const l = lines[i]; + if (RE_EMPTY.test(l)) + break; + if (isBlockStart(l)) + break; + if (i + 1 < lines.length && (RE_SETEXT_H1.test(lines[i + 1]) || RE_SETEXT_H2.test(lines[i + 1]))) + break; + if (/\|/.test(l) && i + 1 < lines.length && isTableSeparator(lines[i + 1])) + break; + para.push(l); + i++; + } + if (para.length) + tokens.push({ type: 'paragraph', text: para.join('\n') }); + } + return { tokens, footnotes, refs }; +}; +// ============ Token rendering ============ +const renderTokens = (tokens, env = {}, footnotes = {}) => { + let html = tokens.map((tok) => renderToken(tok, env)).join('\n'); + const fnIds = Object.keys(footnotes); + if (fnIds.length) { + html += '\n

    '; + fnIds.forEach((id) => { + html += `
  1. ${cachedRenderInline(footnotes[id], env)}
  2. `; + }); + html += '
'; + } + return html; +}; +const parseMarkdown = (md, env = {}) => { + const { tokens, footnotes, refs } = parseTokens(md); + return renderTokens(tokens, { ...env, refs }, footnotes); +}; +// ============ List parsing ============ +const parseList = (lines, startIdx, marker, baseIndent, isOl, olStart) => { + const items = []; + let i = startIdx; + const itemIndent = baseIndent + (isOl ? String(marker).length + 2 : 2); + while (i < lines.length) { + const line = lines[i]; + let itemMatch; + if (isOl) { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})\\d+\\.\\s`)); + if (!itemMatch) + break; + } + else { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})[-*+]\\s`)); + if (!itemMatch) + break; + } + let raw = line.slice(itemMatch[0].length); + const task = raw.match(RE_TASK); + let content = task ? task[2] : raw; + const checked = task ? task[1].toLowerCase() === 'x' : false; + const isTask = !!task; + i++; + const subContent = []; + const subTokens = []; + while (i < lines.length) { + const cl = lines[i]; + if (RE_EMPTY.test(cl)) { + let peek = i + 1; + while (peek < lines.length && RE_EMPTY.test(lines[peek])) + peek++; + if (peek < lines.length) { + const pl = lines[peek]; + const isCont = pl.length > itemIndent && pl[itemIndent] !== ' ' + ? false : new RegExp(`^\\s{${itemIndent},}`).test(pl); + if (isCont) { + subContent.push(''); + i++; + continue; + } + } + break; + } + if (isOl) { + if (new RegExp(`^(\\s{0,${baseIndent}})\\d+\\.\\s`).test(cl)) + break; + } + else { + if (new RegExp(`^(\\s{0,${baseIndent}})[-*+]\\s`).test(cl)) + break; + } + if (RE_QUOTE.test(cl) || RE_ATX.test(cl) || RE_HR.test(cl) || RE_FOOTNOTE_DEF.test(cl)) + break; + const nUl = cl.match(new RegExp(`^(\\s{${itemIndent},})([-*+])\\s`)); + const nOl = cl.match(new RegExp(`^(\\s{${itemIndent},})(\\d+)\\.\\s`)); + if (nUl || nOl) { + const isNOl = !!nOl; + const nM = isNOl ? nOl[2] : nUl[2]; + const nI = isNOl ? nOl[1].length : nUl[1].length; + const nS = isNOl ? parseInt(nOl[2], 10) : undefined; + const nested = parseList(lines, i, nM, nI, isNOl); + subTokens.push({ type: isNOl ? 'ol' : 'ul', items: nested.items, start: nS }); + i = nested.endIdx; + continue; + } + if (cl.length > itemIndent && cl.slice(0, itemIndent).trim() === '') { + subContent.push(cl.slice(itemIndent)); + } + else { + subContent.push(cl); + } + i++; + } + if (subContent.length) { + content = content ? content + '\n' + subContent.join('\n') : subContent.join('\n'); + } + items.push({ type: 'listItem', text: content, checked, task: isTask, subTokens: subTokens.length ? subTokens : undefined }); + } + return { items, endIdx: i }; +}; +// ============ Table utils ============ +const isTableSeparator = (line) => RE_TABLE_SEP.test(line) && /-/.test(line); +const parseAlign = (line) => { + const cells = line.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + return cells.map((c) => { + if (/^:/.test(c) && /:$/.test(c)) + return 'center'; + if (/:$/.test(c)) + return 'right'; + if (/^:/.test(c)) + return 'left'; + return 'left'; + }); +}; +// ============ Token renderer ============ +const renderToken = (tok, env, footnotes) => { + switch (tok.type) { + case 'heading': { + const id = slugify(tok.text); + return `${cachedRenderInline(tok.text, env)}`; + } + case 'paragraph': return `

${cachedRenderInline(tok.text, env)}

`; + case 'hr': return '
'; + case 'quote': return `
${parseMarkdown(tok.content, env)}
`; + case 'code': return renderCode(tok.content, tok.lang, env, tok.attrs); + case 'ul': return ``; + case 'ol': { + const sn = tok.start || 1; + const sa = sn > 1 ? ` start="${sn}"` : ''; + const body = tok.items.map((it, idx) => renderListItem(it, env, sn > 1 ? idx + sn : undefined)).join(''); + return `${body}`; + } + case 'table': return renderTable(tok, env); + case 'defList': { + let h = '
'; + h += `
${cachedRenderInline(tok.term, env)}
`; + tok.defs.forEach((d) => { h += `
${cachedRenderInline(d, env)}
`; }); + return h + '
'; + } + case 'mathBlock': return `
${escapeHTML(tok.content)}
`; + default: { + // Fallback: render unknown block types as styled div + const typeClass = `me-block-${tok.type}`; + const content = tok.content ? (typeof tok.content === 'string' ? cachedRenderInline(tok.content, env) : escapeHTML(String(tok.content))) : ''; + return `
${content}
`; + } + } +}; +const renderListItem = (it, env, idx) => { + if (it.task) { + const checked = it.checked ? ' checked' : ''; + let h = `
  • ${cachedRenderInline(it.text, env)}`; + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; + } + let h = idx != null ? `
  • ` : '
  • '; + h += cachedRenderInline(it.text, env); + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; +}; +const renderCode = (code, lang, env, attrs) => { + if (lang === 'mermaid') + return `
    ${escapeHTML(code)}
    `; + const langClass = lang ? ` class="language-${escapeHTML(lang)}"` : ''; + const titleHtml = attrs?.title ? `
    ${escapeHTML(attrs.title)}
    ` : ''; + if (env.highlight && typeof env.highlight === 'function' && lang) { + try { + const highlighted = env.highlight(code, lang); + if (typeof highlighted === 'string') + return `${titleHtml}
    ${highlighted}
    `; + } + catch (e) { + console.error('MeEditor highlight error:', e); + } + } + return `${titleHtml}
    ${escapeHTML(code)}
    `; +}; +const renderTable = (tok, env) => { + // Split respecting backslash-escaped pipes + const splitRow = (r) => { + const cells = []; + let current = ''; + let escaped = false; + for (let i = 0; i < r.length; i++) { + const ch = r[i]; + if (escaped) { + current += ch; + escaped = false; + } + else if (ch === '\\') { + escaped = true; + } + else if (ch === '|') { + cells.push(current.trim()); + current = ''; + } + else { + current += ch; + } + } + cells.push(current.trim()); + // Remove leading/trailing empty cells from outer pipes + if (cells.length > 0 && cells[0] === '') + cells.shift(); + if (cells.length > 0 && cells[cells.length - 1] === '') + cells.pop(); + return cells; + }; + const headers = splitRow(tok.header); + const align = tok.align || []; + const as = (i) => align[i] && align[i] !== 'left' ? ` style="text-align:${align[i]}"` : ''; + let h = '
    '; + h += headers.map((hd, i) => `${cachedRenderInline(hd, env)}`).join(''); + h += ''; + h += tok.rows.map((r) => { + const cells = splitRow(r); + return `${cells.map((c, i) => `${cachedRenderInline(c, env)}`).join('')}`; + }).join(''); + return h + '
    '; +}; +// ============ Inline rendering ============ +const renderInline = (text, env) => { + if (!text) + return ''; + const codes = []; + let s = extractInlineCodes(text, codes); + const protectedItems = []; + s = s.replace(/&(?:[a-zA-Z][a-zA-Z0-9]{1,31}|#\d{1,7}|#x[0-9a-fA-F]{1,6});/g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = s.replace(//g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = escapeHTML(s); + s = s.replace(/\u0005(\d+)\u0005/g, (_m, idx) => protectedItems[+idx] || _m); + s = scanInline(s, codes, env); + s = s.replace(/\u0000(\d+)\u0000/g, (_m, idx) => { + const code = codes[+idx]; + if (!code) + return _m; + return `${escapeHTML(code.content)}`; + }); + s = s.replace(/:([\w+-]+):/g, (m, name) => EMOJI_MAP[name] || m); + s = s.replace(/ \n/g, '
    \n'); + s = s.replace(/\n/g, '
    '); + return s; +}; +const extractInlineCodes = (text, codes) => { + let result = ''; + let i = 0; + while (i < text.length) { + if (text[i] === '`') { + let startLen = 1; + while (i + startLen < text.length && text[i + startLen] === '`') + startLen++; + let j = i + startLen; + let found = false; + while (j < text.length) { + const nextTick = text.indexOf('`', j); + if (nextTick === -1) + break; + let endLen = 1; + while (nextTick + endLen < text.length && text[nextTick + endLen] === '`') + endLen++; + if (endLen === startLen) { + const content = text.slice(i + startLen, nextTick); + codes.push({ content, len: startLen }); + result += `\u0000${codes.length - 1}\u0000`; + i = nextTick + endLen; + found = true; + break; + } + j = nextTick + endLen; + } + if (!found) { + result += text.slice(i, i + startLen); + i += startLen; + } + } + else { + result += text[i]; + i++; + } + } + return result; +}; +const INLINE_RE = new RegExp([ + '(\\*\\*\\*[^*\\n][^*\\n]*?\\*\\*\\*)', + '|(___[^_\\n][^_\\n]*?___)', + '|(!\\[[^\\]]*\\]\\([^)]+\\))', + '|(? { + const placeholderMap = new Map(); + s = s.replace(/\u0000\d+\u0000/g, (m) => { + const key = `\u0003${placeholderMap.size}\u0003`; + placeholderMap.set(key, m); + return key; + }); + s = s.replace(INLINE_RE, (fullMatch) => { + const match = fullMatch; + if (match.startsWith('***')) + return `${match.slice(3, -3)}`; + if (match.startsWith('___')) + return `${match.slice(3, -3)}`; + if (match.startsWith('![') && match.includes('](')) { + const m = match.match(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return escapeHTML(match); + const t = m[3] ? ` title="${m[3]}"` : ''; + return `${m[1]}`; + } + if (match.startsWith('![') && match.includes('][')) { + const m = match.match(/!\[([^\]]*)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return `${m[1]}`; + } + } + return `${m[1]}`; + } + if (match.startsWith('[') && match.includes('](')) { + const m = match.match(/\[([^\]]+)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return match; + const t = m[3] ? ` title="${m[3]}"` : ''; + const linkText = renderInline(m[1], env); + return `${linkText}`; + } + if (match.startsWith('[') && match.includes('][')) { + const m = match.match(/\[([^\]]+)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return escapeHTML(match); + } + } + return escapeHTML(match); + } + if (match.startsWith('<http')) { + const url = match.slice(4, -4); + const u = safeUrl(url); + return `${url}`; + } + if (match.startsWith('**')) + return `${match.slice(2, -2)}`; + if (match.startsWith('__')) + return `${match.slice(2, -2)}`; + if (match.startsWith('~~')) + return `${match.slice(2, -2)}`; + if (match.startsWith('==')) + return `${match.slice(2, -2)}`; + if (match.startsWith('*') && !match.startsWith('**') && !match.startsWith('***')) + return `${match.slice(1, -1)}`; + if (match.startsWith('_') && !match.startsWith('__') && !match.startsWith('___')) + return `${match.slice(1, -1)}`; + if (match.startsWith('^') && !match.startsWith('^^')) + return `${match.slice(1, -1)}`; + if (match.startsWith('~') && !match.startsWith('~~')) + return `${match.slice(1, -1)}`; + if (match.startsWith('$') && !match.startsWith('$$')) + return `${escapeHTML(match.slice(1, -1))}`; + if (/^\[\^/.test(match)) { + const fnId = match.slice(2, -1); + return `[${fnId}]`; + } + if (match.startsWith('\\') && match.length === 2) { + const escaped = match[1]; + if (/[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]/.test(escaped)) + return escaped; + return match; + } + return match; + }); + s = s.replace(/\u0003(\d+)\u0003/g, (m) => placeholderMap.get(m) || m); + return s; +}; + +/** + * MetonaEditor Plugins — plugin system v2 + * @module plugins + * @version 0.2.0 + */ +// ============ Plugin Manager ============ +class PluginManager { + constructor() { + this.plugins = new Map(); + } + register(name, plugin) { + if (this.plugins.has(name)) { + console.warn(`MeEditor: plugin "${name}" already registered`); + return this; + } + if (!plugin || typeof plugin !== 'object' || (!plugin.name && !name)) { + console.error(`MeEditor: invalid plugin "${name}"`); + return this; + } + this.plugins.set(name, { + version: plugin.version || '0.0.0', description: plugin.description || '', + depends: plugin.depends || [], priority: plugin.priority || 0, + ...plugin, name, enabled: true, + }); + return this; + } + unregister(name) { this.plugins.delete(name); return this; } + get(name) { return this.plugins.get(name) || null; } + has(name) { return this.plugins.has(name); } + getAll() { return Array.from(this.plugins.values()); } + getNames() { return Array.from(this.plugins.keys()); } + enable(name) { const p = this.plugins.get(name); if (p) + p.enabled = true; return this; } + disable(name) { const p = this.plugins.get(name); if (p) + p.enabled = false; return this; } + isEnabled(name) { const p = this.plugins.get(name); return p ? p.enabled : false; } + destroy() { this.plugins.clear(); } +} +const defaultPluginManager = new PluginManager(); +// ============ Topological sort ============ +const topologicalSort = (plugins) => { + const map = new Map(); + plugins.forEach((p) => map.set(p.name, p)); + const inDegree = new Map(); + const adj = new Map(); + plugins.forEach((p) => { inDegree.set(p.name, 0); adj.set(p.name, []); }); + plugins.forEach((p) => { + (p.depends || []).forEach((dep) => { + if (map.has(dep)) { + adj.get(dep).push(p.name); + inDegree.set(p.name, (inDegree.get(p.name) || 0) + 1); + } + else { + console.warn(`MeEditor: plugin "${p.name}" depends on unknown "${dep}"`); + } + }); + }); + const queue = []; + inDegree.forEach((deg, name) => { if (deg === 0) + queue.push(name); }); + const sorted = []; + while (queue.length) { + queue.sort((a, b) => ((map.get(b).priority || 0) - (map.get(a).priority || 0))); + const name = queue.shift(); + sorted.push(map.get(name)); + (adj.get(name) || []).forEach((n) => { inDegree.set(n, inDegree.get(n) - 1); if (inDegree.get(n) === 0) + queue.push(n); }); + } + if (sorted.length !== plugins.length) { + console.warn('MeEditor: circular dependency detected, falling back to original order'); + return plugins; + } + return sorted; +}; +// ============ Config validation ============ +const validateConfig = (schema = {}, config = {}) => { + const errors = []; + const patched = { ...config }; + for (const [key, rule] of Object.entries(schema)) { + const val = config[key]; + if (rule.required && (val === undefined || val === null)) { + errors.push(`"${key}" is required`); + continue; + } + if (val === undefined && rule.default !== undefined) { + patched[key] = rule.default; + continue; + } + if (val !== undefined && rule.type) { + const actual = Array.isArray(val) ? 'array' : typeof val; + if (actual !== rule.type) + errors.push(`"${key}" expected ${rule.type}, got ${actual}`); + } + if (val !== undefined && rule.enum && !rule.enum.includes(val)) + errors.push(`"${key}" must be one of [${rule.enum.join(', ')}]`); + if (val !== undefined && typeof rule.validator === 'function') { + try { + const r = rule.validator(val); + if (r !== true) + errors.push(`"${key}": ${r}`); + } + catch (e) { + errors.push(`"${key}": ${e.message}`); + } + } + } + return { valid: errors.length === 0, errors, patched }; +}; +// ============ Preset plugins ============ +const escapeAttr = (s) => String(s == null ? '' : s).replace(/&/g, '&').replace(/"/g, '"').replace(//g, '>'); +const autoSavePlugin = { + name: 'autoSave', version: '0.1.1', description: 'Auto-save to localStorage', priority: 100, + install(editor, options) { + if (!editor || typeof editor.getValue !== 'function') + return; + const opts = options || this; + const key = opts.key || ('me-draft-' + (editor.id || '')); + const delay = opts.delay || 1000; + const state = { _timer: null }; + const save = () => { + if (state._timer) { + clearTimeout(state._timer); + state._timer = null; + } + try { + localStorage.setItem(key, editor.getValue()); + if (typeof editor._emit === 'function') + editor._emit('autosave', { key, value: editor.getValue() }); + } + catch (e) { + console.warn('MeEditor autoSave:', e); + } + }; + const _onInput = () => { if (state._timer) + clearTimeout(state._timer); state._timer = setTimeout(save, delay); }; + const _onBlur = save; + const _onSave = save; + editor.on('change', _onInput); + editor.on('blur', _onBlur); + editor.on('save', _onSave); + editor.restoreDraft = () => { try { + const v = localStorage.getItem(key); + if (v != null) + editor.setValue(v); + return v; + } + catch (_) { + return null; + } }; + editor.clearDraft = () => { try { + localStorage.removeItem(key); + } + catch (_) { } return editor; }; + editor.getDraftKey = () => key; + editor.__autoSaveCleanup = { state, _onInput, _onBlur, _onSave, save }; + }, + destroy(editor) { + const cleanup = editor.__autoSaveCleanup; + if (cleanup) { + if (cleanup.state._timer) { + clearTimeout(cleanup.state._timer); + cleanup.state._timer = null; + } + if (editor && typeof editor.off === 'function') { + if (cleanup._onInput) + editor.off('change', cleanup._onInput); + if (cleanup._onBlur) + editor.off('blur', cleanup._onBlur); + if (cleanup._onSave) + editor.off('save', cleanup._onSave); + } + delete editor.__autoSaveCleanup; + } + }, +}; +const exportToolPlugin = { + name: 'exportTool', version: '0.1.0', description: 'Export Markdown/HTML', priority: 50, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const download = (filename, content, mime) => { + if (typeof document === 'undefined') + return; + const blob = new Blob([content], { type: mime + ';charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(() => URL.revokeObjectURL(url), 0); + }; + const stamp = () => { const d = new Date(); const pad = (n) => String(n).padStart(2, '0'); return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}`; }; + editor.exportMarkdown = (filename) => { download(filename || `metona-${stamp()}.md`, editor.getValue(), 'text/markdown'); return editor; }; + editor.exportHTML = (filename, opts = {}) => { + const title = opts.title || 'Document'; + const css = opts.css || ''; + const body = typeof editor.getHTML === 'function' ? editor.getHTML() : ''; + // Build minimal embedded CSS for the exported HTML + const embedCSS = opts.embedCSS !== false ? `` : ''; + download(filename || `metona-${stamp()}.html`, `\n\n\n\n\n${title}\n${css ? `` : ''}${embedCSS}\n\n\n${body}\n\n`, 'text/html'); + return editor; + }; + }, + destroy() { }, +}; +const searchReplacePlugin = { + name: 'searchReplace', version: '0.2.0', description: 'Search & Replace (Ctrl+F/H)', priority: 80, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + // Inject style once globally + if (!document.getElementById('me-search-style')) { + const style = document.createElement('style'); + style.id = 'me-search-style'; + style.textContent = `.me-search{position:absolute;top:8px;right:12px;z-index:20;display:flex;flex-direction:column;gap:6px;padding:8px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);font-size:13px;min-width:280px}.me-search-row{display:flex;gap:4px;align-items:center}.me-search input{flex:1;min-width:0;padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));border-radius:4px;background:var(--md-textarea-bg,#fff);color:var(--md-text,#1f2937);font-size:13px}.me-search input:focus{outline:none;border-color:var(--md-accent,#3b82f6)}.me-search button{padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));background:var(--md-bg,#fff);color:var(--md-text,#1f2937);border-radius:4px;cursor:pointer;font-size:12px;line-height:1}.me-search button:hover{background:var(--md-accent,#3b82f6);color:#fff;border-color:var(--md-accent,#3b82f6)}.me-search .me-search-count{color:var(--md-muted,#6b7280);font-size:12px;min-width:60px;text-align:center}.me-search .me-search-close{padding:2px 6px}`; + document.head.appendChild(style); + } + const state = { + _panel: null, + _regexMode: false, + _cleanup: null, + }; + const _updateReplaceVisible = () => { + if (!state._panel) + return; + const show = state._panel.dataset.replace === '1'; + const row = state._panel.querySelector('.me-search-replace-row'); + if (row) + row.style.display = show ? 'flex' : 'none'; + }; + const _close = () => { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + if (editor && editor.textarea) + editor.textarea.focus(); + }; + const _open = (showReplace) => { + if (state._panel) { + state._panel.dataset.replace = showReplace ? '1' : '0'; + _updateReplaceVisible(); + const inp = state._panel.querySelector('.me-search-find'); + if (inp) { + inp.focus(); + inp.select(); + } + return; + } + const selected = editor.textarea.value.substring(editor.textarea.selectionStart, editor.textarea.selectionEnd); + const panel = document.createElement('div'); + panel.className = 'me-search'; + panel.dataset.replace = showReplace ? '1' : '0'; + panel.innerHTML = `
    `; + editor.el.appendChild(panel); + state._panel = panel; + _updateReplaceVisible(); + state._regexMode = false; + const fi = panel.querySelector('.me-search-find'); + const ri = panel.querySelector('.me-search-replace'); + const ce = panel.querySelector('.me-search-count'); + const regexBtn = panel.querySelector('.me-search-regex'); + regexBtn.addEventListener('click', () => { + state._regexMode = !state._regexMode; + regexBtn.classList.toggle('me-active', state._regexMode); + lastIdxs = findAll(); + }); + const findAll = () => { + const q = fi.value; + if (!q) { + ce.textContent = ''; + return []; + } + const idxs = []; + let from = 0; + if (state._regexMode) { + try { + const re = new RegExp(q, 'g'); + let m; + while ((m = re.exec(editor.textarea.value)) !== null) { + idxs.push(m.index); + if (m[0].length === 0) + re.lastIndex++; + } + } + catch (_) { + ce.textContent = 'err'; + return []; + } + } + else { + while (true) { + const idx = editor.textarea.value.indexOf(q, from); + if (idx === -1) + break; + idxs.push(idx); + from = idx + q.length; + } + } + ce.textContent = idxs.length ? `${idxs.length}` : '0'; + return idxs; + }; + let lastIdxs = []; + const selectAt = (idx, len) => { + editor.textarea.focus(); + editor.textarea.setSelectionRange(idx, idx + (len || fi.value.length)); + }; + const findNext = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionEnd; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(cur)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let next = lastIdxs.find((i) => i >= cur); + if (next == null) + next = lastIdxs[0]; + selectAt(next, qlen); + }; + const findPrev = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionStart; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(Math.max(0, cur - 100), cur + 100)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let prev = -1; + for (let i = lastIdxs.length - 1; i >= 0; i--) { + if (lastIdxs[i] < cur) { + prev = lastIdxs[i]; + break; + } + } + if (prev === -1) + prev = lastIdxs[lastIdxs.length - 1]; + selectAt(prev, qlen); + }; + const replaceOne = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + const s = ta.selectionStart, e = ta.selectionEnd; + const matchText = ta.value.substring(s, e); + if (state._regexMode) { + try { + if (new RegExp(q).test(matchText)) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + } + catch (_) { } + } + else if (matchText === q) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findNext(); + }; + const replaceAll = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + if (state._regexMode) { + try { + ta.value = ta.value.replace(new RegExp(q, 'g'), r); + } + catch (_) { + return; + } + } + else { + ta.value = ta.value.split(q).join(r); + } + ta.setSelectionRange(0, 0); + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findAll(); + }; + fi.addEventListener('input', () => { lastIdxs = findAll(); }); + fi.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + e.shiftKey ? findPrev() : findNext(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + ri.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + replaceOne(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + panel.querySelector('.me-search-next').addEventListener('click', findNext); + panel.querySelector('.me-search-prev').addEventListener('click', findPrev); + panel.querySelector('.me-search-close').addEventListener('click', () => _close()); + panel.querySelector('.me-search-replace-one').addEventListener('click', replaceOne); + panel.querySelector('.me-search-replace-all').addEventListener('click', replaceAll); + fi.focus(); + fi.select(); + state._cleanup = () => { if (panel.parentNode) + panel.parentNode.removeChild(panel); }; + }; + const _onKeydown = (e) => { + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const k = e.key.toLowerCase(); + if (k === 'f') { + e.preventDefault(); + _open(false); + } + else if (k === 'h') { + e.preventDefault(); + _open(true); + } + else if (k === 'escape' && state._panel) { + _close(); + } + }; + editor.textarea.addEventListener('keydown', _onKeydown); + // Expose for tests + editor.__srState = state; + editor.__srOpen = _open; + editor.__srClose = _close; + editor.__srKeydown = _onKeydown; + }, + destroy(editor) { + const state = editor.__srState; + if (state) { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + } + const _onKeydown = editor.__srKeydown; + if (_onKeydown && editor && editor.textarea) { + editor.textarea.removeEventListener('keydown', _onKeydown); + } + delete editor.__srState; + delete editor.__srOpen; + delete editor.__srClose; + delete editor.__srKeydown; + }, +}; +const imagePastePlugin = { + name: 'imagePaste', version: '0.2.0', description: 'Paste image as base64', priority: 60, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + const _onPaste = (e) => { + const items = e.clipboardData?.items; + if (!items) + return; + for (const item of items) { + if (item.type?.startsWith('image/')) { + e.preventDefault(); + const reader = new FileReader(); + reader.onload = () => { editor.insert(`![image-${Date.now().toString(36)}.png](${reader.result})\n`); }; + reader.readAsDataURL(item.getAsFile()); + break; + } + } + }; + editor.textarea.addEventListener('paste', _onPaste); + editor.__ipOnPaste = _onPaste; + }, + destroy(editor) { + const _onPaste = editor.__ipOnPaste; + if (_onPaste && editor?.textarea) + editor.textarea.removeEventListener('paste', _onPaste); + delete editor.__ipOnPaste; + }, +}; +const shortcutHelpPlugin = { + name: 'shortcutHelp', version: '0.2.0', description: 'Press ? to show shortcuts', priority: 200, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + if (!document.getElementById('me-shortcut-style')) { + const s = document.createElement('style'); + s.id = 'me-shortcut-style'; + s.textContent = `.me-shortcut-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:50;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center}.me-shortcut-panel{background:var(--md-bg,#fff);border-radius:12px;padding:24px;max-width:560px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px rgba(0,0,0,0.3)}.me-shortcut-panel h3{font-size:16px;margin:0 0 16px;color:var(--md-text)}.me-shortcut-panel table{width:100%;border-collapse:collapse;font-size:13px}.me-shortcut-panel td{padding:6px 10px;border-bottom:1px solid var(--md-border)}.me-shortcut-panel td:first-child{font-family:var(--md-mono);font-size:12px;color:var(--md-accent);white-space:nowrap;width:40%}.me-shortcut-panel .me-shortcut-close{position:absolute;top:16px;right:20px;background:none;border:none;font-size:20px;cursor:pointer;color:var(--md-muted)}`; + document.head.appendChild(s); + } + let _panel = null; + const _close = () => { if (_panel) { + _panel.remove(); + _panel = null; + } }; + const _open = () => { + if (_panel) { + _close(); + return; + } + // i18n-aware shortcut labels + const builtin = [ + ['Ctrl+B', t('bold') || 'Bold'], ['Ctrl+I', t('italic') || 'Italic'], + ['Ctrl+U', t('underline') || 'Underline'], ['Ctrl+K', t('link') || 'Link'], + ['Ctrl+E', t('code') || 'Code'], ['Ctrl+1/2/3', t('h1') || 'Heading'], + ['Ctrl+Q', t('quote') || 'Quote'], ['Ctrl+Z', t('undo') || 'Undo'], + ['Ctrl+Y', t('redo') || 'Redo'], ['Ctrl+S', t('save') || 'Save'], + ['Ctrl+F', t('search') || 'Search'], ['Ctrl+H', t('replace') || 'Replace'], + ['Tab', t('indent') || 'Indent'], ['Shift+Tab', t('outdent') || 'Outdent'], + ['?', t('close') || 'Shortcuts'], + ]; + let rows = ''; + builtin.forEach(([c, d]) => { rows += `${c}${d}`; }); + const overlay = document.createElement('div'); + overlay.className = 'me-shortcut-overlay'; + overlay.innerHTML = `

    ⌨️ ${t('close') || 'Shortcuts'}

    ${rows}
    `; + overlay.addEventListener('click', (e) => { if (e.target === overlay || e.target.classList.contains('me-shortcut-close')) + _close(); }); + document.body.appendChild(overlay); + _panel = overlay; + }; + const _onKeydown = (e) => { + if (e.key === '?' && !e.ctrlKey && !e.metaKey && !e.altKey) { + e.preventDefault(); + _open(); + } + if (e.key === 'Escape' && _panel) + _close(); + }; + editor.textarea.addEventListener('keydown', _onKeydown); + editor.__shState = { _panel, _open, _close, _onKeydown }; + }, + destroy(editor) { + const state = editor.__shState; + if (state) { + if (state._panel) { + state._panel.remove(); + } + } + const _onKeydown = editor.__shState?._onKeydown; + if (_onKeydown && editor?.textarea) + editor.textarea.removeEventListener('keydown', _onKeydown); + delete editor.__shState; + }, +}; +const fileSystemPlugin = { + name: 'fileSystem', version: '0.2.0', description: 'File System Access API', priority: 90, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const hasAPI = typeof window !== 'undefined' && typeof window.showOpenFilePicker === 'function'; + let _fileHandle = null; + editor.openFile = async (opts = {}) => { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return null; + } + try { + const [handle] = await window.showOpenFilePicker({ types: [{ accept: { 'text/markdown': ['.md', '.txt', '.markdown'] } }], ...opts }); + _fileHandle = handle; + const file = await handle.getFile(); + const content = await file.text(); + editor.setValue(content); + editor._emit?.('fileOpened', { name: file.name, handle }); + return { name: file.name, content, handle }; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Open file error:', e); + return null; + } + }; + editor.saveFile = async (opts = {}) => { + let handle = _fileHandle; + if (!handle || opts.saveAs) { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return false; + } + try { + handle = await window.showSaveFilePicker({ types: [{ accept: { 'text/markdown': ['.md'] } }], suggestedName: opts.name || 'document.md' }); + _fileHandle = handle; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Save error:', e); + return false; + } + } + try { + const w = await handle.createWritable(); + await w.write(editor.getValue()); + await w.close(); + editor._emit?.('fileSaved', { handle }); + return true; + } + catch (e) { + _fileHandle = null; + if (!opts.saveAs) + return editor.saveFile({ ...opts, saveAs: true }); + console.error('Write error:', e); + return false; + } + }; + editor.saveFileAs = (name) => editor.saveFile({ saveAs: true, name }); + editor.getFileHandle = () => _fileHandle; + editor.__fsCleanup = { getHandle: () => _fileHandle }; + }, + destroy(editor) { + if (editor) { + delete editor.openFile; + delete editor.saveFile; + delete editor.saveFileAs; + delete editor.getFileHandle; + } + delete editor.__fsCleanup; + }, +}; +// ============ Preset plugins table ============ +const presetPlugins = { + autoSave: autoSavePlugin, exportTool: exportToolPlugin, searchReplace: searchReplacePlugin, + imagePaste: imagePastePlugin, shortcutHelp: shortcutHelpPlugin, fileSystem: fileSystemPlugin, +}; +// ============ Plugin utils ============ +const pluginUtils = { + createManager: () => new PluginManager(), + manager: defaultPluginManager, + register: (name, plugin) => defaultPluginManager.register(name, plugin), + unregister: (name) => defaultPluginManager.unregister(name), + get: (name) => defaultPluginManager.get(name), + has: (name) => defaultPluginManager.has(name), + getAll: () => defaultPluginManager.getAll(), + getNames: () => defaultPluginManager.getNames(), + enable: (name) => defaultPluginManager.enable(name), + disable: (name) => defaultPluginManager.disable(name), + isEnabled: (name) => defaultPluginManager.isEnabled(name), + getPreset: (name) => presetPlugins[name] ? { ...presetPlugins[name] } : null, + getAllPresets: () => Object.keys(presetPlugins).reduce((acc, k) => { acc[k] = { ...presetPlugins[k] }; return acc; }, {}), + createPlugin: (config = {}) => { + const result = { name: config.name || 'custom', version: config.version || '0.0.0', description: config.description || '', depends: config.depends || [], priority: config.priority || 0, install: () => { }, destroy: () => { }, ...config }; + if (typeof result.install !== 'function') + result.install = () => { }; + if (typeof result.destroy !== 'function') + result.destroy = () => { }; + return result; + }, + validatePlugin: (plugin) => { + const errors = []; + if (!plugin || typeof plugin !== 'object') + errors.push('plugin must be an object'); + if (plugin && !plugin.name) + errors.push('plugin must have a name'); + if (plugin && plugin.install && typeof plugin.install !== 'function') + errors.push('install must be a function'); + return { valid: errors.length === 0, errors }; + }, + topologicalSort, validateConfig, +}; + +/** + * MetonaEditor Themes — theme system + * @module themes + * @version 0.2.0 + */ +// ============ State ============ +let globalCurrentTheme = 'auto'; +let globalThemeListeners = new Set(); +let _sysWatchUnsub = null; +// ============ System theme ============ +const getSystemTheme = () => { + if (typeof window === 'undefined') + return 'light'; + return prefersDark() ? 'dark' : 'light'; +}; +const _watchSystem = (callback) => { + if (typeof window === 'undefined' || !window.matchMedia) + return () => { }; + const mql = window.matchMedia('(prefers-color-scheme: dark)'); + const handler = (e) => callback(e.matches ? 'dark' : 'light'); + mql.addEventListener('change', handler); + return () => mql.removeEventListener('change', handler); +}; +const watchSystemTheme = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return; + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } + _sysWatchUnsub = _watchSystem((sysTheme) => { + if (globalCurrentTheme === 'auto') + applyTheme('auto'); + }); +}; +const unwatchSystemTheme = () => { + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } +}; +// ============ Theme resolution ============ +const resolveTheme = (theme) => { + if (!theme || theme === 'auto') + return getSystemTheme(); + return theme; +}; +const getThemeConfig = (theme) => { + const resolved = resolveTheme(theme); + const config = THEMES[resolved]; + return (config && typeof config === 'object' ? config : THEMES.light); +}; +// ============ CSS variables ============ +const setThemeVariables = (config, target) => { + if (typeof document === 'undefined' || !config || typeof config !== 'object') + return; + const root = target || document.documentElement; + const vars = { + '--md-bg': config.bg, '--md-text': config.text, '--md-border': config.border, + '--md-shadow': config.shadow, '--md-hover-shadow': config.hoverShadow, + '--md-toolbar-bg': config.toolbarBg || config.bg, + '--md-textarea-bg': config.textareaBg || config.bg, + '--md-preview-bg': config.previewBg || config.bg, + '--md-code-bg': config.codeBg || 'rgba(127,127,127,0.1)', + '--md-code-text': config.codeText || config.text, + '--md-accent': config.accent || '#3b82f6', + '--md-muted': config.muted || '#9ca3af', + }; + for (const [k, v] of Object.entries(vars)) { + if (v !== undefined && v !== null) + root.style.setProperty(k, String(v)); + } + if (config.progressBg) + root.style.setProperty('--md-progress-bg', config.progressBg); + if (config.closeHoverBg) + root.style.setProperty('--md-close-hover-bg', config.closeHoverBg); +}; +const exportCSSVars = (el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return {}; + const style = getComputedStyle(root); + const varNames = ['--md-bg', '--md-text', '--md-border', '--md-shadow', '--md-hover-shadow', '--md-toolbar-bg', '--md-textarea-bg', '--md-preview-bg', '--md-code-bg', '--md-code-text', '--md-accent', '--md-muted']; + const result = {}; + varNames.forEach((name) => { const val = style.getPropertyValue(name).trim(); if (val) + result[name] = val; }); + return result; +}; +const getCSSVariable = (name, el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return ''; + const fullName = name.startsWith('--') ? name : `--md-${name}`; + return getComputedStyle(root).getPropertyValue(fullName).trim(); +}; +// ============ Apply theme ============ +const applyTheme = (theme) => { + globalCurrentTheme = theme; + const resolved = resolveTheme(theme); + if (typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolved); + document.documentElement.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + document.documentElement.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme)); + } + notifyGlobalListeners(theme, resolved); +}; +const applyThemeToElement = (theme, target) => { + if (!target || typeof document === 'undefined') + return; + const resolved = resolveTheme(theme); + target.setAttribute('data-md-theme', resolved); + target.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + if (resolved !== 'auto') + target.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme), target); +}; +const switchTheme = (theme) => { applyTheme(theme); saveTheme(theme); }; +const toggleTheme = () => { const r = getResolvedTheme(); switchTheme(r === 'dark' ? 'light' : 'dark'); }; +const resetToAuto = () => { switchTheme('auto'); }; +const getCurrentTheme = () => globalCurrentTheme; +const getResolvedTheme = () => resolveTheme(globalCurrentTheme); +// ============ Persistence ============ +const saveTheme = (theme) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-theme', theme); + } + catch (_) { } + } +}; +const loadTheme = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-theme') || 'auto'; + } + catch (_) { } + } + return 'auto'; +}; +// ============ Listeners ============ +const notifyGlobalListeners = (theme, resolved) => { + globalThemeListeners.forEach((fn) => { try { + fn(theme, resolved); + } + catch (e) { + console.error('Theme listener error:', e); + } }); +}; +const addThemeListener = (fn) => { + globalThemeListeners.add(fn); + return () => { globalThemeListeners.delete(fn); }; +}; +const removeThemeListener = (fn) => { globalThemeListeners.delete(fn); }; +const clearThemeListeners = () => { globalThemeListeners.clear(); }; +// ============ System watch ============ +const startSystemWatch = () => { watchSystemTheme(); }; +// ============ Init ============ +const initTheme = () => { applyTheme(loadTheme()); startSystemWatch(); }; +// ============ External follow ============ +const followExternalTheme = (options, onThemeChange) => { + if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') + return () => { }; + const { element = document.documentElement, attr = 'data-theme', classMap = null, callback = null } = options; + const detect = () => { + if (typeof callback === 'function') + return callback(element); + const attrVal = element.getAttribute(attr); + if (attrVal) + return attrVal; + if (classMap) { + for (const [cls, theme] of Object.entries(classMap)) { + if (element.classList.contains(cls)) + return theme; + } + } + const mdTheme = element.getAttribute('data-md-theme'); + if (mdTheme) + return mdTheme; + return null; + }; + let lastTheme = detect(); + if (lastTheme) + onThemeChange(lastTheme); + const observer = new MutationObserver(() => { const current = detect(); if (current && current !== lastTheme) { + lastTheme = current; + onThemeChange(current); + } }); + observer.observe(element, { attributes: true, attributeFilter: [attr, 'class', 'data-md-theme'] }); + return () => observer.disconnect(); +}; +const adoptFromParent = (container, onThemeDetected) => { + if (typeof document === 'undefined' || !container) + return () => { }; + const detect = () => { + let el = container.parentElement; + while (el) { + const t = el.getAttribute('data-md-theme'); + if (t) + return t; + if (el.classList.contains('theme-dark') || el.classList.contains('dark')) + return 'dark'; + if (el.classList.contains('theme-light') || el.classList.contains('light')) + return 'light'; + el = el.parentElement; + } + if (container.parentElement) { + const bg = getComputedStyle(container.parentElement).getPropertyValue('--md-bg').trim() || getComputedStyle(container.parentElement).backgroundColor; + if (bg) { + const rgb = bg.match(/\d+/g); + if (rgb && rgb.length >= 3) { + const brightness = (parseInt(rgb[0]) * 299 + parseInt(rgb[1]) * 587 + parseInt(rgb[2]) * 114) / 1000; + return brightness < 128 ? 'dark' : 'light'; + } + } + } + return null; + }; + const detected = detect(); + if (detected) + onThemeDetected(detected); + const observer = new MutationObserver(() => { const d = detect(); if (d) + onThemeDetected(d); }); + let target = container.parentElement; + while (target) { + observer.observe(target, { attributes: true, attributeFilter: ['class', 'data-md-theme', 'data-theme'] }); + target = target.parentElement; + if (target === document.documentElement) + break; + } + return () => observer.disconnect(); +}; +const watch = (source, onChange) => { + if (typeof source === 'function') { + const tick = () => { try { + const t = source(); + if (t) + onChange(t); + } + catch (_) { } }; + tick(); + const id = setInterval(tick, 500); + return () => clearInterval(id); + } + if (typeof source === 'string' && typeof document !== 'undefined') { + const el = document.querySelector(source); + if (!el) + return () => { }; + return followExternalTheme({ element: el, attr: 'data-theme' }, onChange); + } + return () => { }; +}; +// ============ Custom theme registration ============ +const registerTheme = (name, config = {}) => { + const baseName = config.extends || 'light'; + const base = (THEMES[baseName] || THEMES.light); + THEMES[name] = { + bg: config.bg || base.bg, text: config.text || base.text, border: config.border || base.border, + shadow: config.shadow || base.shadow, hoverShadow: config.hoverShadow || base.hoverShadow, + toolbarBg: config.toolbarBg || base.toolbarBg || base.bg, + textareaBg: config.textareaBg || base.textareaBg || base.bg, + previewBg: config.previewBg || base.previewBg || base.bg, + codeBg: config.codeBg || base.codeBg, codeText: config.codeText || base.codeText, + accent: config.accent || base.accent, muted: config.muted || base.muted, + progressBg: config.progressBg || base.progressBg, + closeHoverBg: config.closeHoverBg || base.closeHoverBg, + }; +}; +const unregisterTheme = (name) => { + if (name === 'light' || name === 'dark' || name === 'auto' || name === 'warm') { + console.warn('Cannot unregister built-in theme:', name); + return; + } + delete THEMES[name]; +}; +const getAllThemes = () => ({ ...THEMES }); +const getThemeNames = () => Object.keys(THEMES); +const hasTheme = (name) => name in THEMES; +// ============ Instance theme ============ +const createInstanceTheme = (editor) => { + let instanceTheme = editor.config?.theme || globalCurrentTheme || 'auto'; + const apply = (theme) => { + instanceTheme = theme; + const resolved = resolveTheme(theme); + const config = getThemeConfig(theme); + if (editor.el) { + ['me-theme-light', 'me-theme-dark', 'me-theme-warm'].forEach((c) => editor.el.classList.remove(c)); + if (resolved !== 'auto') + editor.el.classList.add(`me-theme-${resolved}`); + editor.el.setAttribute('data-md-theme', resolved); + setThemeVariables(config, editor.el); + } + if (typeof editor._emit === 'function') + editor._emit('themeChange', { theme, resolved, config }); + if (typeof editor.refresh === 'function') + editor.refresh(); + return instanceTheme; + }; + const get = () => instanceTheme; + const set = (theme) => apply(theme); + const toggle = () => { const r = resolveTheme(instanceTheme); return apply(r === 'dark' ? 'light' : 'dark'); }; + const getResolved = () => resolveTheme(instanceTheme); + const getConfig = () => getThemeConfig(instanceTheme); + const getVars = () => editor.el ? exportCSSVars(editor.el) : {}; + const syncWithElement = (element, opts = {}) => followExternalTheme({ element, attr: opts.attr || 'data-theme', classMap: opts.classMap, callback: opts.callback }, (detected) => apply(detected)); + const adopt = () => editor.container ? adoptFromParent(editor.container, (detected) => apply(detected)) : () => { }; + const watchExternal = (source) => watch(source, (theme) => apply(theme)); + apply(instanceTheme); + return { apply, get, set, toggle, getResolved, getConfig, getVars, syncWithElement, adopt, watch: watchExternal }; +}; +const presetThemes = { + light: { name: '浅色', description: '明亮清晰', config: THEMES.light }, + dark: { name: '深色', description: '护眼暗色', config: THEMES.dark }, + auto: { name: '自动', description: '跟随系统', config: 'auto' }, + warm: { name: '暖色', description: '温馨暖色', config: THEMES.warm }, +}; +// Ensure built-in themes in THEMES +for (const [name, theme] of Object.entries(presetThemes)) { + if (name !== 'auto' && theme.config !== 'auto') + THEMES[name] = theme.config; +} +const themeUtils = { + getSystemTheme, resolveTheme, getThemeConfig, watchSystemTheme, unwatchSystemTheme, + applyTheme, getCurrentTheme, getResolvedTheme, switchTheme, toggleTheme, resetToAuto, initTheme, + saveTheme, loadTheme, addThemeListener, removeThemeListener, clearThemeListeners, + registerTheme, unregisterTheme, getAllThemes, getThemeNames, hasTheme, + setThemeVariables, exportCSSVars, getCSSVariable, applyThemeToElement, + followExternalTheme, adoptFromParent, watch, createInstanceTheme, +}; + +/** + * MetonaEditor Core — MarkdownEditor class (TypeScript) + * @module core + * @version 0.2.0 + */ +const MODES = ['edit', 'split', 'preview']; +const TOAST_ICONS = { success: '✓', error: '✗', warning: '⚠', info: 'ℹ' }; +const BRACKET_PAIRS = { + '(': ')', '[': ']', '{': '}', '"': '"', "'": "'", '`': '`', '*': '*', '_': '_', +}; +const resolveThemeName = (theme) => { + if (theme && theme !== 'auto') + return theme; + return resolveTheme('auto'); +}; +class MarkdownEditor { + static on(name, fn) { + if (!this._hooks.has(name)) + this._hooks.set(name, []); + this._hooks.get(name).push(fn); + return () => this.off(name, fn); + } + static off(name, fn) { + const list = this._hooks.get(name); + if (list) + this._hooks.set(name, list.filter((f) => f !== fn)); + } + static trigger(name, instance) { + const list = this._hooks.get(name); + if (list) + list.forEach((fn) => { try { + fn(instance); + } + catch (e) { + console.error(`MeEditor hook "${name}" error:`, e); + } }); + } + constructor(container, options = {}) { + if (!isBrowser()) { + this._destroyed = true; + this._value = options.value || ''; + return this; + } + this.id = options.id || generateId(); + this.container = typeof container === 'string' ? document.querySelector(container) : container; + if (!this.container) { + console.error('MeEditor: container not found:', container); + this._destroyed = true; + return this; + } + this.config = { ...DEFAULTS, ...options }; + if (options.style && typeof options.style === 'object') { + this.config.style = { ...DEFAULTS.style, ...options.style }; + } + this._value = this.config.value || ''; + this._mode = MODES.includes(this.config.mode) ? this.config.mode : 'split'; + this._history = []; + this._historyIndex = -1; + this._cleanups = []; + this._plugins = []; + this._listeners = {}; + this._renderRaf = null; + this._historyTimer = null; + this._fullscreen = false; + this._destroyed = false; + this._lastRenderedValue = null; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + this._outlineTimer = null; + this._zenMode = false; + this._wordWrap = true; + this._syncing = false; + this._zenMouseHandler = null; + this._floatingToolbar = null; + this._selectionTimer = null; + this._floatingEnabled = this.config.floatingToolbar !== false; + this._renderFn = (typeof this.config.render === 'function') ? this.config.render : parseMarkdown; + this._highlightFn = (typeof this.config.highlight === 'function') ? this.config.highlight : null; + MarkdownEditor.trigger('beforeCreate', this); + injectStyles(); + this._buildDOM(); + this._themeCtx = createInstanceTheme(this); + this._i18nCtx = createInstanceI18n(this); + if (options.theme && typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolveTheme(options.theme)); + } + const resolvedThemeConfig = getThemeConfig(this.config.theme); + setThemeVariables(resolvedThemeConfig, this.el); + this._buildToolbar(); + this._updateModeButtons(); + this._bindToolbarKeyboard(); + this._initAriaLive(); + this._bindEvents(); + this._bindContextMenu(); + this._trackOutlineScroll(); + if (this.config.floatingToolbar !== false) + this._initFloatingToolbar(); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + if (Array.isArray(this.config.plugins)) { + const plugins = this.config.plugins.map((p) => { + if (typeof p === 'string') + return { ...presetPlugins[p], _isStringRef: true }; + return p; + }).filter(Boolean); + const sorted = topologicalSort(plugins); + sorted.forEach((p) => this.use(p)); + } + if (this.config.autofocus && !this.config.readOnly) + this.focus(); + if (typeof this.config.onCreate === 'function') { + try { + this.config.onCreate(this); + } + catch (e) { + console.error('onCreate error:', e); + } + } + MarkdownEditor.trigger('afterCreate', this); + } + _buildDOM() { + const wrapper = document.createElement('div'); + wrapper.className = `me-wrapper me-theme-${resolveThemeName(this.config.theme)}`; + if (this.config.readOnly) + wrapper.classList.add('me-readonly'); + wrapper.dataset.id = this.id; + wrapper.setAttribute('role', 'application'); + wrapper.setAttribute('aria-label', t('edit')); + if (this.config.className) { + this.config.className.split(/\s+/).filter(Boolean).forEach((c) => wrapper.classList.add(c)); + } + const h = this.config.height; + wrapper.style.height = typeof h === 'number' ? `${h}px` : (h || '400px'); + if (this.config.style && typeof this.config.style === 'object') { + Object.entries(this.config.style).forEach(([k, v]) => { if (v) + wrapper.style[k] = v; }); + } + const toolbar = document.createElement('div'); + toolbar.className = 'me-toolbar'; + toolbar.setAttribute('role', 'toolbar'); + const body = document.createElement('div'); + body.className = `me-body me-mode-${this._mode}`; + const editorPane = document.createElement('div'); + editorPane.className = 'me-editor-pane'; + const editorInner = document.createElement('div'); + editorInner.className = 'me-editor-inner'; + const gutter = document.createElement('div'); + gutter.className = 'me-gutter'; + if (!this.config.lineNumbers) + gutter.style.display = 'none'; + editorInner.appendChild(gutter); + const textarea = document.createElement('textarea'); + textarea.className = 'me-textarea'; + textarea.spellcheck = !!this.config.spellcheck; + textarea.readOnly = !!this.config.readOnly; + textarea.style.tabSize = String(this.config.tabSize || 2); + textarea.placeholder = this.config.placeholder || t('placeholder'); + textarea.setAttribute('aria-label', t('edit')); + editorInner.appendChild(textarea); + editorPane.appendChild(editorInner); + const divider = document.createElement('div'); + divider.className = 'me-divider'; + divider.setAttribute('role', 'separator'); + const previewPane = document.createElement('div'); + previewPane.className = 'me-preview-pane'; + previewPane.setAttribute('role', 'region'); + previewPane.setAttribute('aria-label', t('preview')); + const preview = document.createElement('div'); + preview.className = 'me-preview'; + previewPane.appendChild(preview); + body.appendChild(editorPane); + body.appendChild(divider); + body.appendChild(previewPane); + wrapper.appendChild(toolbar); + wrapper.appendChild(body); + let statusbar = null; + if (this.config.wordCount) { + statusbar = document.createElement('div'); + statusbar.className = 'me-statusbar'; + wrapper.appendChild(statusbar); + } + this.container.appendChild(wrapper); + this.el = wrapper; + this.toolbarEl = toolbar; + this.bodyEl = body; + this.editorPane = editorPane; + this.editorInner = editorInner; + this.gutter = gutter; + this.previewPane = previewPane; + this.dividerEl = divider; + this.textarea = textarea; + this.previewEl = preview; + this.statusEl = statusbar; + // Restore divider position if saved + this._restoreDividerPosition(); + } + _buildToolbar() { + const tools = this.config.toolbar; + if (!tools || !Array.isArray(tools) || tools.length === 0) + return; + const modeActions = []; + tools.forEach((item) => { + if (item === '|') { + const sep = document.createElement('span'); + sep.className = 'me-toolbar-sep'; + this.toolbarEl.appendChild(sep); + return; + } + if (item === 'edit' || item === 'split' || item === 'preview' || item === 'fullscreen') { + modeActions.push(item); + return; + } + this.toolbarEl.appendChild(this._createBtn(item)); + }); + if (modeActions.length) { + const group = document.createElement('div'); + group.className = 'me-toolbar-group'; + modeActions.forEach((item) => { + const btn = this._createBtn(item); + if (item === 'edit' || item === 'split' || item === 'preview') { + btn.dataset.mode = item; + if (item === this._mode) + btn.classList.add('me-active'); + } + group.appendChild(btn); + }); + this.toolbarEl.appendChild(group); + } + } + _createBtn(item) { + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-${item}`; + btn.dataset.action = item; + const label = t(item) || item; + btn.title = label; + btn.setAttribute('aria-label', label); + btn.innerHTML = ICONS[item] || `${escapeHTML(item)}`; + return btn; + } + _bindEvents() { + const ta = this.textarea; + const onInput = () => { + const oldValue = this._value; + this._value = ta.value; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', oldValue, this._value); + this._scheduleRender(); + this._scheduleHistory(); + this._updateWordCount(); + this._renderGutter(); + this._updateOutline(); + this._emit('input', this._value); + this._emit('change', this._value); + if (typeof this.config.onInput === 'function') { + try { + this.config.onInput(this._value, this); + } + catch (e) { + console.error(e); + } + } + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + }; + ta.addEventListener('input', onInput); + const onKeydown = (e) => { + if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey) + this._handleSmartEnter(e); + this._handleKeydown(e); + }; + ta.addEventListener('keydown', onKeydown); + const onKeypress = (e) => this._handleBracketAutoClose(e); + ta.addEventListener('keypress', onKeypress); + const onCursorActivity = () => { this._updateCurrentLine(); }; + ta.addEventListener('click', onCursorActivity); + ta.addEventListener('keyup', onCursorActivity); + const onScroll = () => { this._syncScroll(); }; + ta.addEventListener('scroll', onScroll); + const onPreviewScroll = () => { + if (!this.config.syncScroll || this._mode !== 'split') + return; + if (this._syncing) + return; + this._syncing = true; + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax <= 0) { + this._syncing = false; + return; + } + const ratio = this.previewPane.scrollTop / pmax; + const tmax = ta.scrollHeight - ta.clientHeight; + ta.scrollTop = ratio * tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ratio * tmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + }; + this.previewPane.addEventListener('scroll', onPreviewScroll); + const onFocus = () => { + this._emit('focus'); + if (typeof this.config.onFocus === 'function') { + try { + this.config.onFocus(this); + } + catch (e) { + console.error(e); + } + } + }; + const onBlur = () => { + this._emit('blur'); + if (typeof this.config.onBlur === 'function') { + try { + this.config.onBlur(this); + } + catch (e) { + console.error(e); + } + } + }; + ta.addEventListener('focus', onFocus); + ta.addEventListener('blur', onBlur); + const onPreviewClick = (e) => { + const a = e.target.closest('a'); + if (!a) + return; + const href = a.getAttribute('href'); + if (!href || href.startsWith('#')) + return; + e.preventDefault(); + this._emit('linkClick', { href, text: a.textContent }); + if (typeof this.config.onLinkClick === 'function') { + try { + this.config.onLinkClick(href, a.textContent, this); + } + catch (_) { } + return; + } + window.open(href, '_blank', 'noopener'); + }; + this.previewEl.addEventListener('click', onPreviewClick); + const onToolbarClick = (e) => { + const btn = e.target.closest('.me-btn'); + if (!btn) + return; + const mode = btn.dataset.mode; + if (mode) { + this.setMode(mode); + return; + } + const action = btn.dataset.action; + if (action) + this.exec(action); + }; + this.toolbarEl.addEventListener('click', onToolbarClick); + const onDividerDown = (e) => this._bindDividerDrag(e); + this.dividerEl.addEventListener('pointerdown', onDividerDown); + this._bindDragDrop(); + this._cleanups.push(() => { + ta.removeEventListener('input', onInput); + ta.removeEventListener('keydown', onKeydown); + ta.removeEventListener('keypress', onKeypress); + ta.removeEventListener('scroll', onScroll); + this.previewPane.removeEventListener('scroll', onPreviewScroll); + ta.removeEventListener('click', onCursorActivity); + ta.removeEventListener('keyup', onCursorActivity); + ta.removeEventListener('focus', onFocus); + ta.removeEventListener('blur', onBlur); + this.toolbarEl.removeEventListener('click', onToolbarClick); + this.dividerEl.removeEventListener('pointerdown', onDividerDown); + }); + } + _handleKeydown(e) { + if (e.key === 'Tab') { + e.preventDefault(); + this._handleTab(e.shiftKey); + return; + } + if (this._shortcuts.length) { + for (const sc of this._shortcuts) { + const ctrlOk = sc.ctrl ? (e.ctrlKey || e.metaKey) : !e.ctrlKey && !e.metaKey; + const shiftOk = sc.shift ? e.shiftKey : !e.shiftKey; + const altOk = sc.alt ? e.altKey : !e.altKey; + if (e.key.toLowerCase() === sc.key && ctrlOk && shiftOk && altOk) { + e.preventDefault(); + if (typeof sc.handler === 'string') + this.exec(sc.handler); + else if (typeof sc.handler === 'function') { + try { + sc.handler(this); + } + catch (err) { + console.error('Shortcut error:', err); + } + } + return; + } + } + } + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const key = e.key.toLowerCase(); + const shortcuts = { b: 'bold', i: 'italic', k: 'link', u: 'underline', e: 'code', '1': 'h1', '2': 'h2', '3': 'h3', q: 'quote' }; + if (key === 'z' && !e.shiftKey) { + e.preventDefault(); + this.undo(); + } + else if ((key === 'z' && e.shiftKey) || key === 'y') { + e.preventDefault(); + this.redo(); + } + else if (key === 's') { + e.preventDefault(); + this._emit('save', this._value); + if (typeof this.config.onSave === 'function') { + try { + this.config.onSave(this._value, this); + } + catch (err) { + console.error(err); + } + } + } + else if (shortcuts[key]) { + e.preventDefault(); + this.exec(shortcuts[key]); + } + } + _handleTab(shift) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const tabSize = this.config.tabSize || 0; + const tabStr = tabSize > 0 ? ' '.repeat(tabSize) : '\t'; + if (start === end) { + ta.value = ta.value.slice(0, start) + tabStr + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + tabStr.length; + } + else { + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const block = ta.value.slice(lineStart, end); + const lines = block.split('\n'); + let newBlock; + if (shift) { + newBlock = lines.map((l) => l.replace(/^(\t| {1,4})/, '')).join('\n'); + } + else { + newBlock = lines.map((l) => tabStr + l).join('\n'); + } + ta.value = ta.value.slice(0, lineStart) + newBlock + ta.value.slice(end); + ta.selectionStart = lineStart; + ta.selectionEnd = lineStart + newBlock.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + _bindDividerDrag(e) { + if (this._mode !== 'split') + return; + e.preventDefault(); + const startX = e.clientX; + const editorWidth = this.editorPane.getBoundingClientRect().width; + const totalWidth = this.bodyEl.getBoundingClientRect().width; + if (totalWidth <= 0) + return; + const divider = this.dividerEl; + const onMove = (ev) => { + const dx = ev.clientX - startX; + let newW = editorWidth + dx; + const min = 80; + const max = totalWidth - 80 - divider.offsetWidth; + newW = Math.max(min, Math.min(max, newW)); + const pct = (newW / totalWidth) * 100; + this.editorPane.style.flex = `0 0 ${pct}%`; + this.previewPane.style.flex = `1 1 ${100 - pct}%`; + }; + const onUp = () => { + window.removeEventListener('pointermove', onMove); + window.removeEventListener('pointerup', onUp); + this._saveDividerPosition(); + }; + window.addEventListener('pointermove', onMove); + window.addEventListener('pointerup', onUp); + } + _saveDividerPosition() { + try { + const epFlex = this.editorPane.style.flex; + if (epFlex) + localStorage.setItem('metona-editor-divider', epFlex); + } + catch (_) { } + } + _restoreDividerPosition() { + try { + const saved = localStorage.getItem('metona-editor-divider'); + if (saved && this._mode === 'split') { + this.editorPane.style.flex = saved; + this.previewPane.style.flex = '1 1 auto'; + } + } + catch (_) { } + } + _scheduleRender() { if (this._renderRaf) + return; this._renderRaf = requestAnimationFrame(() => { this._renderRaf = null; this._render(); }); } + _render() { + if (this._mode === 'edit') + return; + if (this._lastRenderedValue === this._value) + return; + this._lastRenderedValue = this._value; + MarkdownEditor.trigger('beforeRender', this); + this._emit('beforeRender', this); + let html; + try { + html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); + } + catch (err) { + console.error('MeEditor render error:', err); + html = `

    ${t('renderError')}: ${escapeHTML(err.message)}

    `; + } + if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error('sanitize error:', e); + } + } + this.previewEl.innerHTML = html; + this._renderGutter(); + MarkdownEditor.trigger('afterRender', this); + this._emit('afterRender', this); + } + _renderGutter() { + if (!this.config.lineNumbers || !this.gutter) + return; + const lines = this._value ? this._value.split('\n').length : 1; + const current = this.gutter.children.length; + if (current === lines) + return; + if (current < lines) { + // Add new line numbers + let h = ''; + for (let i = current + 1; i <= lines; i++) + h += `
    ${i}
    `; + this.gutter.insertAdjacentHTML('beforeend', h); + } + else { + // Remove excess line numbers + while (this.gutter.children.length > lines) { + this.gutter.removeChild(this.gutter.lastChild); + } + } + } + _updateCurrentLine() { + if (!this.gutter) + return; + const pos = this.textarea.selectionStart; + const lineNum = this._value.substring(0, pos).split('\n').length; + const prev = this.gutter.querySelector('.me-gutter-active'); + if (prev) + prev.classList.remove('me-gutter-active'); + const cur = this.gutter.children[lineNum - 1]; + if (cur) + cur.classList.add('me-gutter-active'); + } + _handleSmartEnter(e) { + const ta = this.textarea; + const start = ta.selectionStart; + const val = ta.value; + const lineStart = val.lastIndexOf('\n', start - 1) + 1; + const line = val.slice(lineStart, start); + const listMatch = line.match(/^(\s*)([-*+]|\d+\.)\s(.*)/); + if (listMatch) { + const indent = listMatch[1]; + const marker = listMatch[2]; + const content = listMatch[3]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + let nextMarker = marker; + if (/^\d+\.$/.test(marker)) { + const num = parseInt(marker, 10); + if (!isNaN(num)) + nextMarker = (num + 1) + '.'; + } + e.preventDefault(); + const insert = '\n' + indent + nextMarker + ' '; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + const quoteMatch = line.match(/^(\s*>+\s?)(.*)/); + if (quoteMatch) { + const prefix = quoteMatch[1]; + const content = quoteMatch[2]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + e.preventDefault(); + const insert = '\n' + prefix; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + } + } + _handleBracketAutoClose(e) { + if (!this.config.autoBrackets) + return; + const ta = this.textarea; + const key = e.key; + const close = BRACKET_PAIRS[key]; + if (!close) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start !== end) { + e.preventDefault(); + const selected = ta.value.slice(start, end); + const wrap = key + selected + close; + ta.value = ta.value.slice(0, start) + wrap + ta.value.slice(end); + ta.selectionStart = start + 1; + ta.selectionEnd = start + 1 + selected.length; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + return; + } + const nextChar = ta.value[start] || ''; + if (key === close) { + if (nextChar === close) { + e.preventDefault(); + ta.selectionStart = ta.selectionEnd = start + 1; + return; + } + if (/\w/.test(nextChar)) + return; + } + e.preventDefault(); + const pair = key + close; + ta.value = ta.value.slice(0, start) + pair + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + 1; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + } + _bindDragDrop() { + const ta = this.textarea; + if (!ta) + return; + const onDragOver = (e) => { e.preventDefault(); if (e.dataTransfer) + e.dataTransfer.dropEffect = 'copy'; }; + const onDrop = (e) => { + e.preventDefault(); + const files = e.dataTransfer?.files; + if (files && files.length) { + Array.from(files).forEach((file) => { + if (file.type.startsWith('image/')) { + const reader = new FileReader(); + reader.onload = () => { this.insert(`![${file.name}](${reader.result})\n`); }; + reader.readAsDataURL(file); + } + else if (file.type.startsWith('text/') || /\.(md|txt|js|ts|json|css|html|xml|yml|yaml)$/i.test(file.name)) { + const reader = new FileReader(); + reader.onload = () => this.insert(reader.result); + reader.readAsText(file); + } + }); + return; + } + const text = e.dataTransfer?.getData('text/plain'); + if (text) + this.insert(text); + }; + ta.addEventListener('dragover', onDragOver); + ta.addEventListener('drop', onDrop); + this._cleanups.push(() => { ta.removeEventListener('dragover', onDragOver); ta.removeEventListener('drop', onDrop); }); + } + _buildOutline() { + if (!this.config.outline || !this.previewEl) + return; + const old = this.el.querySelector('.me-outline'); + if (old) + old.remove(); + const headings = []; + const headingRe = /]*>(.+?)<\/h\1>/gi; + let m; + while ((m = headingRe.exec(this.previewEl.innerHTML)) !== null) { + headings.push({ level: parseInt(m[1], 10), id: m[2], text: m[3].replace(/<[^>]+>/g, '') }); + } + if (!headings.length) + return; + const panel = document.createElement('div'); + panel.className = 'me-outline'; + panel.innerHTML = `
    ${t('outline') || '大纲'}
    `; + const buildTree = (items, minLevel) => { + let h = ''; + }; + panel.innerHTML += buildTree(headings, 1); + this.el.appendChild(panel); + panel.addEventListener('click', (e) => { + const a = e.target.closest('a'); + if (!a) + return; + e.preventDefault(); + const id = a.getAttribute('href').slice(1); + const target = this.previewEl.querySelector('#' + CSS.escape(id)); + if (target) { + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); + const idx = this._value.indexOf(target.textContent || ''); + if (idx !== -1) { + this.textarea.focus(); + this.textarea.setSelectionRange(idx, idx); + } + } + }); + } + _updateOutline() { if (!this.config.outline) + return; if (this._outlineTimer) + clearTimeout(this._outlineTimer); this._outlineTimer = setTimeout(() => this._buildOutline(), 300); } + _trackOutlineScroll() { + if (!this.config.outline || !this.previewPane) + return; + let ticking = false; + const onScroll = () => { + if (ticking) + return; + ticking = true; + requestAnimationFrame(() => { + ticking = false; + if (!this.el) + return; + const panel = this.el.querySelector('.me-outline'); + if (!panel) + return; + const headings = this.previewEl.querySelectorAll('h1, h2, h3, h4, h5, h6'); + let activeId = ''; + const scrollTop = this.previewPane.scrollTop + 80; // offset for better UX + headings.forEach((h) => { + if (h.offsetTop <= scrollTop) { + activeId = h.id; + } + }); + panel.querySelectorAll('a').forEach((a) => { + a.classList.toggle('me-outline-active', a.getAttribute('href') === '#' + activeId); + }); + }); + }; + this.previewPane.addEventListener('scroll', onScroll, { passive: true }); + this._cleanups.push(() => this.previewPane.removeEventListener('scroll', onScroll)); + } + _scheduleHistory() { if (this._historyTimer) + clearTimeout(this._historyTimer); this._historyTimer = setTimeout(() => this._pushHistory(), this.config.historyDebounce || 400); } + _pushHistory() { + const cur = this._history[this._historyIndex]; + if (cur === this._value) + return; + this._history = this._history.slice(0, this._historyIndex + 1); + this._history.push(this._value); + const limit = this.config.historyLimit > 0 ? this.config.historyLimit : 100; + while (this._history.length > limit) + this._history.shift(); + this._historyIndex = this._history.length - 1; + } + undo() { if (this._historyIndex <= 0) + return this; this._historyIndex--; this._applyHistory(); return this; } + redo() { if (this._historyIndex >= this._history.length - 1) + return this; this._historyIndex++; this._applyHistory(); return this; } + canUndo() { return this._historyIndex > 0; } + canRedo() { return this._historyIndex < this._history.length - 1; } + _applyHistory() { + this._value = this._history[this._historyIndex]; + this.textarea.value = this._value; + this._render(); + this._renderGutter(); + this._updateWordCount(); + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + if (this.previewPane && this.config.syncScroll) + this.previewPane.scrollTop = 0; + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + exec(action, ...args) { + const actions = { + bold: () => this._wrapSelection('**', '**'), italic: () => this._wrapSelection('*', '*'), + strikethrough: () => this._wrapSelection('~~', '~~'), underline: () => this._wrapSelection('', ''), + code: () => this._wrapSelection('`', '`'), h1: () => this._toggleLinePrefix('# '), + h2: () => this._toggleLinePrefix('## '), h3: () => this._toggleLinePrefix('### '), + quote: () => this._toggleLinePrefix('> '), ul: () => this._toggleLinePrefix('- '), + ol: () => this._toggleLinePrefix('1. '), indent: () => this._handleTab(false), + outdent: () => this._handleTab(true), hr: () => this._insertBlock('\n---\n'), + link: () => this._insertLink(), image: () => this._insertImage(), table: () => this._insertTable(), + undo: () => this.undo(), redo: () => this.redo(), + edit: () => this.setMode('edit'), split: () => this.setMode('split'), + preview: () => this.setMode('preview'), fullscreen: () => this.toggleFullscreen(), + zen: () => this.toggleZen(), wordwrap: () => this.toggleWordWrap(), + formatTable: () => this._formatTable(), + }; + const fn = actions[action]; + if (fn) { + fn.apply(this, args); + return this; + } + if (this._customActions && typeof this._customActions[action] === 'function') { + try { + this._customActions[action].apply(this, args); + } + catch (e) { + console.error('custom action error:', e); + } + } + return this; + } + _wrapSelection(before, after) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const selected = ta.value.slice(start, end); + const text = selected || 'text'; + const inserted = before + text + after; + ta.value = ta.value.slice(0, start) + inserted + ta.value.slice(end); + ta.focus(); + if (selected) { + ta.selectionStart = start + before.length; + ta.selectionEnd = start + before.length + text.length; + } + else { + ta.selectionStart = ta.selectionEnd = start + before.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _toggleLinePrefix(prefix) { + const ta = this.textarea; + const start = ta.selectionStart; + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const lineEndPos = ta.value.indexOf('\n', start); + const lineEnd = lineEndPos === -1 ? ta.value.length : lineEndPos; + const line = ta.value.slice(lineStart, lineEnd); + const existingMatch = line.match(/^(#{1,6}\s*|>\s*|[-*+]\s*|\d+\.\s*)/); + let newLine; + if (existingMatch && existingMatch[0] === prefix) + newLine = line.slice(prefix.length); + else if (existingMatch) + newLine = prefix + line.slice(existingMatch[0].length); + else + newLine = prefix + line; + ta.value = ta.value.slice(0, lineStart) + newLine + ta.value.slice(lineEnd); + ta.focus(); + ta.selectionStart = ta.selectionEnd = lineStart + newLine.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertBlock(text) { + const ta = this.textarea; + const start = ta.selectionStart; + const before = ta.value.slice(0, start); + const needNL = before && !before.endsWith('\n'); + const insert = (needNL ? '\n' : '') + text; + ta.value = ta.value.slice(0, start) + insert + ta.value.slice(ta.selectionEnd); + ta.focus(); + const pos = start + insert.length; + ta.selectionStart = ta.selectionEnd = pos; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertLink() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('link') || 'link'; const url = 'https://'; const insert = `[${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 3; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertImage() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('image') || 'image'; const url = 'https://'; const insert = `![${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 4; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertTable(rows = 3, cols = 3) { const header = Array.from({ length: cols }, (_, i) => `${t('tableCols') || '列'}${i + 1}`).join(' | '); const sep = Array.from({ length: cols }, () => '---').join(' | '); let md = `| ${header} |\n| ${sep} |\n`; for (let r = 1; r < rows; r++) + md += `| ${Array.from({ length: cols }, () => ' ').join(' | ')} |\n`; this._insertBlock('\n' + md); } + _formatTable() { + const ta = this.textarea; + const start = ta.selectionStart; + // Find table boundaries around cursor + const before = ta.value.substring(0, start); + const after = ta.value.substring(start); + const blockStart = before.lastIndexOf('\n\n'); + const blockEnd = after.indexOf('\n\n'); + const tableStart = blockStart === -1 ? 0 : blockStart + 2; + const tableEnd = blockEnd === -1 ? ta.value.length : start + blockEnd; + const tableText = ta.value.substring(tableStart, tableEnd); + const lines = tableText.split('\n').filter((l) => l.includes('|')); + if (lines.length < 2) + return; // need at least header + separator + // Parse columns + const splitRow = (r) => r.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + const allCells = lines.map(splitRow); + const colCount = Math.max(...allCells.map((c) => c.length)); + // Calculate max width per column + const colWidths = Array(colCount).fill(3); + allCells.forEach((cells) => { + cells.forEach((cell, ci) => { + colWidths[ci] = Math.max(colWidths[ci], cell.trim().length); + }); + }); + // Rebuild table + const pad = (s, w) => { const padLen = w - s.length; return s + ' '.repeat(Math.max(0, padLen)); }; + const formatted = allCells.map((cells) => { + const padded = []; + for (let ci = 0; ci < colCount; ci++) { + padded.push(pad((cells[ci] || '').trim(), colWidths[ci])); + } + return '| ' + padded.join(' | ') + ' |'; + }); + // Replace in value + ta.value = ta.value.substring(0, tableStart) + formatted.join('\n') + ta.value.substring(tableEnd); + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + setMode(mode) { if (!MODES.includes(mode) || mode === this._mode) + return this; const taS = this.textarea.scrollTop; const pvS = this.previewPane.scrollTop; this._mode = mode; this.bodyEl.className = `me-body me-mode-${mode}`; this._updateModeButtons(); if (mode !== 'edit') + this._render(); this.textarea.scrollTop = taS; this.previewPane.scrollTop = pvS; this._emit('modeChange', mode); this._announce(`${t(mode) || mode} mode`); if (typeof this.config.onModeChange === 'function') { + try { + this.config.onModeChange(mode, this); + } + catch (e) { + console.error(e); + } + } return this; } + getMode() { return this._mode; } + _updateModeButtons() { + const isPreview = this._mode === 'preview'; + const isReadonly = this.config.readOnly; + this.toolbarEl.querySelectorAll('.me-btn').forEach((b) => { + const btn = b; + const mode = btn.dataset.mode; + const action = btn.dataset.action; + if (mode) { + btn.classList.toggle('me-active', mode === this._mode); + btn.disabled = false; + return; + } + if (action === 'fullscreen') { + btn.disabled = false; + return; + } + if (isReadonly) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + if (isPreview) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + btn.disabled = false; + }); + } + toggleFullscreen() { this._fullscreen = !this._fullscreen; this.el.classList.toggle('me-fullscreen', this._fullscreen); const fsBtn = this.toolbarEl.querySelector('.me-btn-fullscreen'); if (fsBtn) + fsBtn.title = this._fullscreen ? (t('fullscreenExit') || '退出全屏') : (t('fullscreen') || '全屏'); this._emit('fullscreen', this._fullscreen); if (typeof this.config.onFullscreen === 'function') { + try { + this.config.onFullscreen(this._fullscreen, this); + } + catch (e) { + console.error(e); + } + } return this; } + isFullscreen() { return this._fullscreen; } + exitFullscreen() { if (this._fullscreen) + this.toggleFullscreen(); return this; } + toggleZen() { + this._zenMode = !this._zenMode; + if (this.el) + this.el.classList.toggle('me-zen', this._zenMode); + if (this._zenMode && this.toolbarEl) { + this._zenMouseHandler = (e) => { this.toolbarEl.style.opacity = e.clientY < 40 ? '1' : '0'; this.toolbarEl.style.pointerEvents = e.clientY < 40 ? 'auto' : 'none'; }; + this.toolbarEl.style.transition = 'opacity 0.2s'; + this.toolbarEl.style.opacity = '0'; + this.toolbarEl.style.pointerEvents = 'none'; + document.addEventListener('mousemove', this._zenMouseHandler); + if (this.statusEl) + this.statusEl.style.display = 'none'; + } + else { + if (this._zenMouseHandler) { + document.removeEventListener('mousemove', this._zenMouseHandler); + this._zenMouseHandler = null; + } + if (this.toolbarEl) { + this.toolbarEl.style.opacity = ''; + this.toolbarEl.style.pointerEvents = ''; + this.toolbarEl.style.transition = ''; + } + if (this.statusEl) + this.statusEl.style.display = ''; + } + this._emit('zenChange', this._zenMode); + return this; + } + isZen() { return this._zenMode; } + toggleWordWrap() { this._wordWrap = !this._wordWrap; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + setWordWrap(on) { this._wordWrap = !!on; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + isWordWrap() { return this._wordWrap; } + _initFloatingToolbar() { + if (typeof document === 'undefined') + return; + // Inject floating toolbar CSS once globally + if (!document.getElementById('me-float-style')) { + const style = document.createElement('style'); + style.id = 'me-float-style'; + style.textContent = `.me-float-toolbar{position:absolute;z-index:25;display:flex;gap:4px;padding:4px 6px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;pointer-events:none}.me-float-toolbar.me-visible{opacity:1;transform:translateY(0);pointer-events:auto}.me-float-toolbar .me-btn{width:28px;height:28px}`; + document.head.appendChild(style); + } + if (!this._floatingEnabled) + return; + const ta = this.textarea; + const show = () => { + if (this._destroyed || this.config.readOnly || !this._floatingEnabled) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start === end) { + this._hideFloatingToolbar(); + return; + } + if (!this._floatingToolbar || !this._floatingToolbar.parentNode) + this._buildFloatingToolbar(); + // Position the toolbar near the selection + const rect = ta.getBoundingClientRect(); + const textBefore = ta.value.substring(0, start); + const lines = textBefore.split('\n'); + const currentLine = lines.length - 1; + const lineHeight = parseInt(getComputedStyle(ta).lineHeight, 10) || 22; + const paddingTop = parseInt(getComputedStyle(ta).paddingTop, 10) || 16; + const scrollOffset = ta.scrollTop; + // Place toolbar just above the selected line (4px gap) + const toolbarHeight = 36; + let top = rect.top + paddingTop + currentLine * lineHeight - scrollOffset - toolbarHeight - 4; + // Clamp: don't go above textarea + if (top < rect.top) + top = rect.top + 4; + if (top + toolbarHeight > rect.bottom) + top = rect.bottom - toolbarHeight - 4; + // Center horizontally near the middle of selection + let left = rect.left + (ta.selectionDirection !== 'backward' ? (ta.selectionEnd - ta.selectionStart) / 2 : 0) * 8 + 10; + if (left < rect.left) + left = rect.left + 4; + const maxLeft = rect.right - 200; + if (left > maxLeft) + left = maxLeft; + this._floatingToolbar.style.top = top + 'px'; + this._floatingToolbar.style.left = left + 'px'; + this._floatingToolbar.classList.add('me-visible'); + }; + const hide = () => { this._hideFloatingToolbar(); }; + let lastSelStart = ta.selectionStart; + let lastSelEnd = ta.selectionEnd; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !document.body.contains(ta) || !this._floatingEnabled) + return; + const s = ta.selectionStart; + const e = ta.selectionEnd; + if (s !== lastSelStart || e !== lastSelEnd) { + lastSelStart = s; + lastSelEnd = e; + const text = this._value.slice(s, e); + this._emit('selectionChange', { start: s, end: e, text }); + } + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + ta.addEventListener('mouseup', () => { if (this._floatingEnabled) + setTimeout(show, 0); }); + ta.addEventListener('keyup', () => { + if (!this._floatingEnabled) + return; + if (ta.selectionStart !== ta.selectionEnd) + setTimeout(show, 0); + else + setTimeout(hide, 0); + this._emit('cursorMove', this.getCursorPosition()); + }); + ta.addEventListener('blur', () => setTimeout(hide, 300)); + ta.addEventListener('click', () => { if (ta.selectionStart === ta.selectionEnd) + setTimeout(hide, 0); }); + } + toggleFloatingToolbar() { + this._floatingEnabled = !this._floatingEnabled; + if (this._floatingEnabled) { + // Re-enable: restart the interval + if (!this._selectionTimer) { + const ta = this.textarea; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !this._floatingEnabled) + return; + ta.selectionStart; + ta.selectionEnd; + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + } + } + else { + // Disable: clear interval and hide toolbar + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + if (this._floatingToolbar) { + if (this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + } + } + return this; + } + isFloatingToolbar() { return this._floatingEnabled; } + _buildFloatingToolbar() { + const bar = document.createElement('div'); + bar.className = 'me-float-toolbar'; + const actions = ['bold', 'italic', 'code', 'link', 'strikethrough']; + actions.forEach((action) => { + const btn = this._createBtn(action); + btn.addEventListener('mousedown', (e) => { + e.preventDefault(); + e.stopPropagation(); + this.exec(action); + // Keep selection after exec + setTimeout(() => this.textarea.focus(), 0); + }); + bar.appendChild(btn); + }); + this.editorPane.appendChild(bar); + this._floatingToolbar = bar; + } + _hideFloatingToolbar() { + if (this._floatingToolbar) { + this._floatingToolbar.classList.remove('me-visible'); + } + } + _bindToolbarKeyboard() { + if (!this.toolbarEl) + return; + const onKeydown = (e) => { + const btns = [...this.toolbarEl.querySelectorAll('.me-btn:not(:disabled)')]; + if (!btns.length) + return; + const idx = btns.indexOf(document.activeElement); + if (idx === -1) + return; + if (e.key === 'ArrowRight') { + e.preventDefault(); + btns[(idx + 1) % btns.length].focus(); + } + else if (e.key === 'ArrowLeft') { + e.preventDefault(); + btns[(idx - 1 + btns.length) % btns.length].focus(); + } + else if (e.key === 'Home') { + e.preventDefault(); + btns[0].focus(); + } + else if (e.key === 'End') { + e.preventDefault(); + btns[btns.length - 1].focus(); + } + }; + this.toolbarEl.addEventListener('keydown', onKeydown); + this._cleanups.push(() => this.toolbarEl.removeEventListener('keydown', onKeydown)); + } + _initAriaLive() { if (!this.el) + return; const live = document.createElement('div'); live.className = 'me-sr-only'; live.setAttribute('aria-live', 'polite'); live.setAttribute('aria-atomic', 'true'); this.el.appendChild(live); this._ariaLive = live; } + _announce(msg) { if (this._ariaLive) { + this._ariaLive.textContent = ''; + requestAnimationFrame(() => { this._ariaLive.textContent = msg; }); + } } + _syncScroll() { + if (this._syncing) + return; + this._syncing = true; + const ta = this.textarea; + if (!ta) { + this._syncing = false; + return; + } + const tmax = ta.scrollHeight - ta.clientHeight; + if (tmax <= 0) { + this._syncing = false; + return; + } + const ratio = ta.scrollTop / tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ta.scrollTop; + } + if (this.config.syncScroll && this._mode === 'split' && this.previewPane) { + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax > 0) + this.previewPane.scrollTop = ratio * pmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + } + _updateWordCount() { + if (!this.config.wordCount || !this.statusEl) + return; + const text = this._value || ''; + const chars = text.length; + const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; + const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; + const words = cnChars + enWords; + const lines = text ? text.split('\n').length : 0; + const readingMin = Math.max(1, Math.ceil(words / 300)); + this.statusEl.textContent = [`${t('characters')}: ${chars}`, `${t('words')}: ${words}`, `${t('lines')}: ${lines}`, `${t('readingTime')}: ${readingMin} ${t('minutes')}`].join(' · '); + } + getStats() { const text = this._value || ''; const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; return { characters: text.length, words: cnChars + enWords, chineseChars: cnChars, englishWords: enWords, lines: text ? text.split('\n').length : 0, readingTime: Math.max(1, Math.ceil((cnChars + enWords) / 300)), }; } + getSelectedText() { + if (!this.textarea) + return ''; + return this._value.slice(this.textarea.selectionStart, this.textarea.selectionEnd); + } + getCursorPosition() { + if (!this.textarea) + return { line: 1, column: 0 }; + const pos = this.textarea.selectionStart; + const before = this._value.substring(0, pos); + const line = before.split('\n').length; + const column = pos - before.lastIndexOf('\n') - 1; + return { line, column: column < 0 ? 0 : column }; + } + setCursorPosition(line, column = 0) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let pos = 0; + for (let i = 0; i < clampedLine - 1; i++) + pos += lines[i].length + 1; + pos += Math.min(column, lines[clampedLine - 1]?.length || 0); + this.textarea.focus(); + this.textarea.setSelectionRange(pos, pos); + return this; + } + scrollToLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + const lineHeight = 22; // approximate + this.textarea.scrollTop = (clampedLine - 1) * lineHeight; + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + return this; + } + selectLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let startPos = 0; + for (let i = 0; i < clampedLine - 1; i++) + startPos += lines[i].length + 1; + const endPos = startPos + lines[clampedLine - 1].length; + this.textarea.focus(); + this.textarea.setSelectionRange(startPos, endPos); + return this; + } + selectAll() { if (this.textarea) { + this.textarea.focus(); + this.textarea.select(); + } return this; } + replaceAll(search, replace, caseSensitive = true) { + if (!search) + return 0; + const flags = caseSensitive ? 'g' : 'gi'; + const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const re = new RegExp(escaped, flags); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + replaceAllRegex(pattern, replace) { + if (!pattern) + return 0; + const re = new RegExp(pattern, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g'); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + lineCount() { + return this._value ? this._value.split('\n').length : 0; + } + getLine(line) { + const lines = this._value.split('\n'); + const idx = line - 1; + if (idx < 0 || idx >= lines.length) + return ''; + return lines[idx]; + } + getValue() { return this._destroyed ? '' : this._value; } + setValue(md, opts = {}) { + if (this._destroyed) + return this; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', this._value, md); + this._value = md || ''; + this.textarea.value = this._value; + if (!opts.silent) + this._pushHistory(); + this._render(); + this._renderGutter(); + this._updateWordCount(); + this._updateOutline(); + if (this.gutter) + this.gutter.scrollTop = 0; + this.textarea.scrollTop = 0; + if (!opts.silent) { + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + return this; + } + getHTML() { MarkdownEditor.trigger('beforeRender', this); this._emit('beforeRender', this); let html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error(e); + } + } MarkdownEditor.trigger('afterRender', this); this._emit('afterRender', this); return html; } + refresh() { this._lastRenderedValue = null; this._render(); return this; } + copyAsMarkdown() { + if (typeof navigator !== 'undefined' && navigator.clipboard) { + navigator.clipboard.writeText(this._value).then(() => this._emit('copy', { type: 'markdown' })).catch(() => { }); + } + return this; + } + copyAsHTML() { + const html = this.getHTML(); + if (typeof navigator !== 'undefined' && navigator.clipboard) { + const blob = new Blob([html], { type: 'text/html' }); + const item = new ClipboardItem({ 'text/html': blob, 'text/plain': new Blob([this._value], { type: 'text/plain' }) }); + navigator.clipboard.write([item]).then(() => this._emit('copy', { type: 'html' })).catch(() => { }); + } + return this; + } + insert(text, opts = {}) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + ta.value = ta.value.slice(0, start) + text + ta.value.slice(opts.replace ? end : start); + ta.focus(); + ta.selectionStart = ta.selectionEnd = start + text.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return this; + } + wrap(before, after) { this._wrapSelection(before, after || before); return this; } + focus() { if (this.textarea) + this.textarea.focus(); return this; } + blur() { if (this.textarea) + this.textarea.blur(); return this; } + enable() { if (this.textarea) + this.textarea.disabled = false; if (this.el) + this.el.classList.remove('me-disabled'); return this; } + disable() { if (this.textarea) + this.textarea.disabled = true; if (this.el) + this.el.classList.add('me-disabled'); return this; } + isDisabled() { return this.textarea ? this.textarea.disabled : false; } + setReadOnly(readOnly) { this.config.readOnly = !!readOnly; if (this.textarea) + this.textarea.readOnly = !!readOnly; if (this.el) + this.el.classList.toggle('me-readonly', !!readOnly); this._updateModeButtons(); return this; } + isReadOnly() { return !!this.config.readOnly; } + on(name, fn) { if (!this._listeners[name]) + this._listeners[name] = []; this._listeners[name].push(fn); return () => this.off(name, fn); } + off(name, fn) { const list = this._listeners[name]; if (list) + this._listeners[name] = list.filter((f) => f !== fn); return this; } + _emit(name, ...args) { const list = this._listeners[name]; if (list) + list.forEach((fn) => { try { + fn(...args, this); + } + catch (e) { + console.error(`MeEditor event "${name}" error:`, e); + } }); } + use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return this; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return this; + } + const merged = { ...p, ...options }; + if (typeof merged.install === 'function') { + try { + const result = merged.install(this, options); + if (result && typeof result.then === 'function') { + result.catch((e) => console.error(`MeEditor: async plugin "${merged.name}" error:`, e)); + } + } + catch (e) { + console.error(`MeEditor: plugin "${merged.name}" install error:`, e); + } + } + this._plugins.push(merged); + return this; + } + unuse(name) { const idx = this._plugins.findIndex((p) => p.name === name); if (idx === -1) { + console.warn(`MeEditor: plugin "${name}" not found`); + return this; + } const plugin = this._plugins[idx]; if (typeof plugin.destroy === 'function') { + try { + plugin.destroy(this); + } + catch (e) { + console.error(`MeEditor: plugin "${name}" destroy error:`, e); + } + } this._plugins.splice(idx, 1); return this; } + getPlugins() { return [...this._plugins]; } + addToolbarButton(config) { + if (!config || !config.action) + return this; + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-custom-${config.action}`; + btn.title = config.title || config.action; + btn.setAttribute('aria-label', config.title || config.action); + btn.innerHTML = config.icon || `${escapeHTML(config.text || config.action)}`; + if (typeof config.onClick === 'function') { + btn.addEventListener('click', (e) => { e.stopPropagation(); config.onClick(this); }); + } + else if (config.action) { + btn.dataset.action = config.action; + this._customActions = this._customActions || {}; + this._customActions[config.action] = config.handler; + } + this.toolbarEl.insertBefore(btn, this.toolbarEl.querySelector('.me-toolbar-group') || null); + return this; + } + registerShortcut(combo, handler, description = '') { + if (!combo) + return this; + const parts = combo.toLowerCase().split('+'); + const key = parts.pop(); + const ctrl = parts.includes('ctrl') || parts.includes('cmd'); + const shift = parts.includes('shift'); + const alt = parts.includes('alt'); + const meta = parts.includes('meta'); + this._shortcuts.push({ combo, key, ctrl, shift, alt, meta, handler, description }); + return this; + } + unregisterShortcut(combo) { this._shortcuts = this._shortcuts.filter((s) => s.combo !== combo); return this; } + getShortcuts() { return [...this._shortcuts]; } + configureToolbar(tools) { if (!this.toolbarEl) + return this; this.config.toolbar = tools; this.toolbarEl.innerHTML = ''; this._buildToolbar(); return this; } + removeToolbarButton(action) { if (!this.toolbarEl) + return this; const btn = this.toolbarEl.querySelector(`.me-btn[data-action="${action}"], .me-btn[data-mode="${action}"]`); if (btn) + btn.remove(); return this; } + registerContextMenu(items = []) { this._contextMenuItems = items; return this; } + _bindContextMenu() { + if (!this.el) + return; + const onContextMenu = (e) => { + const existing = document.querySelector('.me-context-menu'); + if (existing) + existing.remove(); + this._showContextMenu(e); + }; + this.el.addEventListener('contextmenu', onContextMenu); + this._cleanups.push(() => this.el.removeEventListener('contextmenu', onContextMenu)); + } + _showContextMenu(e) { + e.preventDefault(); + const ta = this.textarea; + const hasSelection = ta && ta.selectionStart !== ta.selectionEnd; + const defaultItems = [ + { label: t('undo') || 'Undo', action: 'undo', shortcut: 'Ctrl+Z', disabled: !this.canUndo() }, + { label: t('redo') || 'Redo', action: 'redo', shortcut: 'Ctrl+Y', disabled: !this.canRedo() }, + { sep: true }, + { label: t('cut') || 'Cut', action: 'cut', shortcut: 'Ctrl+X', disabled: !hasSelection }, + { label: t('copy') || 'Copy', action: 'copy', shortcut: 'Ctrl+C', disabled: !hasSelection }, + { label: t('paste') || 'Paste', action: 'paste', shortcut: 'Ctrl+V', disabled: !!this.config.readOnly }, + { label: t('selectAll') || 'Select All', action: 'selectAll', shortcut: 'Ctrl+A' }, + ]; + const items = [...defaultItems]; + if (this._contextMenuItems.length) { + items.push({ sep: true }); + this._contextMenuItems.forEach((item) => items.push(item)); + } + const menu = document.createElement('div'); + menu.className = 'me-context-menu'; + menu.style.left = e.clientX + 'px'; + menu.style.top = e.clientY + 'px'; + // Adjust if off-screen + requestAnimationFrame(() => { + const rect = menu.getBoundingClientRect(); + if (rect.right > window.innerWidth) + menu.style.left = (e.clientX - rect.width) + 'px'; + if (rect.bottom > window.innerHeight) + menu.style.top = (e.clientY - rect.height) + 'px'; + }); + items.forEach((item) => { + if (item.sep) { + const sep = document.createElement('div'); + sep.className = 'me-context-menu-sep'; + menu.appendChild(sep); + return; + } + const el = document.createElement('div'); + el.className = 'me-context-menu-item'; + if (item.disabled) + el.classList.add('me-disabled'); + el.innerHTML = `${item.label}${item.shortcut ? `${item.shortcut}` : ''}`; + el.addEventListener('click', (ev) => { + ev.stopPropagation(); + if (item.disabled) + return; + if (item.onClick) { + item.onClick(); + } + else if (item.action) + this._execContextAction(item.action); + this._hideContextMenu(); + }); + menu.appendChild(el); + }); + document.body.appendChild(menu); + const close = (ev) => { + if (!menu.contains(ev.target)) { + this._hideContextMenu(); + } + }; + document.addEventListener('click', close, { once: true }); + document.addEventListener('keydown', (ev) => { if (ev.key === 'Escape') + this._hideContextMenu(); }, { once: true }); + } + _hideContextMenu() { + const menu = document.querySelector('.me-context-menu'); + if (menu) + menu.remove(); + } + _execContextAction(action) { + const ta = this.textarea; + if (!ta) + return; + switch (action) { + case 'undo': + this.undo(); + break; + case 'redo': + this.redo(); + break; + case 'cut': + document.execCommand('cut'); + break; + case 'copy': + document.execCommand('copy'); + break; + case 'paste': + document.execCommand('paste'); + break; + case 'selectAll': + ta.focus(); + ta.select(); + break; + default: + this.exec(action); + break; + } + } + toast(message, opts = {}) { + if (!this.el || typeof document === 'undefined') + return this; + const { type = 'info', duration = 3000, animation = 'fade' } = opts; + const toast = document.createElement('div'); + toast.className = `me-toast me-toast-${type} me-toast-${animation}`; + toast.innerHTML = `${TOAST_ICONS[type] || ''}${escapeHTML(String(message))}`; + this.el.appendChild(toast); + requestAnimationFrame(() => { toast.classList.add('me-toast-enter'); }); + const remove = () => { toast.classList.remove('me-toast-enter'); toast.classList.add('me-toast-leave'); setTimeout(() => { if (toast.parentNode) + toast.parentNode.removeChild(toast); }, 300); }; + if (duration > 0) + setTimeout(remove, duration); + toast.addEventListener('click', remove); + return this; + } + setLocale(locale) { if (this._i18nCtx) + this._i18nCtx.set(locale); return this; } + getLocale() { if (this._i18nCtx) + return this._i18nCtx.get(); return getCurrentLocale(); } + t(key, params) { if (this._i18nCtx) + return this._i18nCtx.t(key, params); return t(key, params); } + setTheme(theme) { if (!theme) + return this; this.config.theme = theme; if (this._themeCtx) + this._themeCtx.set(theme); return this; } + getTheme() { if (this._themeCtx) + return this._themeCtx.get(); return this.config.theme || 'auto'; } + getThemeContext() { return this._themeCtx || null; } + getStatus() { return { id: this.id, mode: this._mode, theme: this.getTheme(), locale: getCurrentLocale(), fullscreen: this._fullscreen, readOnly: this.config.readOnly || false, disabled: this.textarea ? this.textarea.disabled : false, destroyed: this._destroyed, plugins: this._plugins.map((p) => p.name || 'custom'), }; } + destroy() { + if (this._destroyed) + return; + MarkdownEditor.trigger('beforeDestroy', this); + if (this._renderRaf) + cancelAnimationFrame(this._renderRaf); + if (this._historyTimer) + clearTimeout(this._historyTimer); + if (this._outlineTimer) + clearTimeout(this._outlineTimer); + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + this._cleanups.forEach((fn) => { try { + fn(); + } + catch (_) { } }); + this._cleanups = []; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + if (this._floatingToolbar && this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + if (this.el) + this.el.querySelectorAll('.me-toast').forEach((t) => t.remove()); + this._plugins.forEach((p) => { if (typeof p.destroy === 'function') { + try { + p.destroy(this); + } + catch (_) { } + } }); + this._plugins = []; + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); + this.el = null; + this.textarea = null; + this.previewEl = null; + this._destroyed = true; + if (typeof this.config.onDestroy === 'function') { + try { + this.config.onDestroy(this); + } + catch (e) { + console.error(e); + } + } + this._emit('destroy'); + this._listeners = {}; + MarkdownEditor.trigger('afterDestroy', this); + } + isDestroyed() { return this._destroyed; } +} +MarkdownEditor._hooks = new Map(); + +/** + * MetonaEditor Animations — animation metadata + * @module animations + * @version 0.2.0 + */ +const animationMap = new Map(); +// Register built-in animations +for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); +} +const animationUtils = { + register(name, config) { + animationMap.set(name, { + name, + enter: config.enter || {}, + leave: config.leave || {}, + duration: config.duration || 300, + easing: config.easing || 'cubic-bezier(0.4, 0, 0.2, 1)', + }); + }, + unregister(name) { + animationMap.delete(name); + }, + get(name) { + return animationMap.get(name) || ANIMATIONS[name] || null; + }, + getAnimationNames() { + return Array.from(animationMap.keys()); + }, + getActiveCount() { + return 0; + }, + cancelAll() { + // CSS animations managed by browser natively + }, + reset() { + animationMap.clear(); + for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); + } + }, + destroy() { + animationMap.clear(); + }, +}; + +/** + * MetonaEditor — Type-safe, lightweight Markdown Editor + * @module metona-editor + * @version 0.2.3 + */ +const VERSION = '0.2.3'; +const globalPlugins = []; +MarkdownEditor.on('beforeCreate', (editor) => { + if (!editor || editor.isDestroyed()) + return; + globalPlugins.forEach((p) => { try { + editor.use(p); + } + catch (e) { + console.error('MeEditor global plugin install error:', e); + } }); +}); +function create(container, options = {}) { + return new MarkdownEditor(container, options); +} +function use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return api; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return api; + } + const merged = (options && typeof options === 'object' && Object.keys(options).length > 0) ? { ...p, ...options } : p; + globalPlugins.push(merged); + return api; +} +function on(name, fn) { return MarkdownEditor.on(name, fn); } +function off(name, fn) { MarkdownEditor.off(name, fn); return api; } +function setTheme(theme, _options) { if (themeUtils && typeof themeUtils.switchTheme === 'function') + themeUtils.switchTheme(theme); return api; } +function setLocale(locale) { if (i18nUtils && typeof i18nUtils.setCurrentLocale === 'function') + i18nUtils.setCurrentLocale(locale); return api; } +function destroy() { + if (themeUtils) { + try { + themeUtils.clearThemeListeners(); + } + catch (_) { } + try { + themeUtils.unwatchSystemTheme(); + } + catch (_) { } + } + if (i18nUtils) { + try { + i18nUtils.clearLocaleListeners(); + } + catch (_) { } + } + if (animationUtils) { + try { + animationUtils.cancelAll(); + } + catch (_) { } + } + globalPlugins.length = 0; +} +function getStatus() { + return { version: VERSION, theme: (themeUtils && typeof themeUtils.getCurrentTheme === 'function') ? themeUtils.getCurrentTheme() : 'auto', locale: (i18nUtils && typeof i18nUtils.getCurrentLocale === 'function') ? i18nUtils.getCurrentLocale() : 'zh-CN', globalPlugins: globalPlugins.map((p) => p.name || 'custom'), presetPlugins: Object.keys(presetPlugins || {}), }; +} +try { + if (typeof themeUtils === 'object' && typeof themeUtils.initTheme === 'function') + themeUtils.initTheme(); + if (typeof i18nUtils === 'object' && typeof i18nUtils.initI18n === 'function') + i18nUtils.initI18n(); +} +catch (_) { } +const api = { + VERSION, version: VERSION, + MarkdownEditor, Editor: MarkdownEditor, + create, use, on, off, setTheme, setLocale, destroy, getStatus, + parseMarkdown, parseTokens, renderTokens, safeUrl, slugify, clearRenderCache, registerBlockHandler, + themes: themeUtils, i18n: i18nUtils, animations: animationUtils, plugins: pluginUtils, presetPlugins, + topologicalSort, validateConfig, createInstanceI18n, loadRemote, + exportCSSVars, getCSSVariable, followExternalTheme, adoptFromParent, createInstanceTheme, + DEFAULTS, ICONS, THEMES, EDIT_MODES, DEFAULT_TOOLBAR, TOOLBAR_ACTIONS, +}; +if (typeof window !== 'undefined') { + window.MeEditor = api; +} + +exports.DEFAULTS = DEFAULTS; +exports.DEFAULT_TOOLBAR = DEFAULT_TOOLBAR; +exports.EDIT_MODES = EDIT_MODES; +exports.Editor = MarkdownEditor; +exports.ICONS = ICONS; +exports.MarkdownEditor = MarkdownEditor; +exports.MeEditor = api; +exports.THEMES = THEMES; +exports.TOOLBAR_ACTIONS = TOOLBAR_ACTIONS; +exports.VERSION = VERSION; +exports.adoptFromParent = adoptFromParent; +exports.animationUtils = animationUtils; +exports.api = api; +exports.clearRenderCache = clearRenderCache; +exports.create = create; +exports.createInstanceI18n = createInstanceI18n; +exports.createInstanceTheme = createInstanceTheme; +exports.default = api; +exports.destroy = destroy; +exports.exportCSSVars = exportCSSVars; +exports.followExternalTheme = followExternalTheme; +exports.getCSSVariable = getCSSVariable; +exports.getStatus = getStatus; +exports.i18nUtils = i18nUtils; +exports.loadRemote = loadRemote; +exports.meEditor = api; +exports.off = off; +exports.on = on; +exports.parseMarkdown = parseMarkdown; +exports.parseTokens = parseTokens; +exports.pluginUtils = pluginUtils; +exports.presetPlugins = presetPlugins; +exports.registerBlockHandler = registerBlockHandler; +exports.renderTokens = renderTokens; +exports.safeUrl = safeUrl; +exports.setLocale = setLocale; +exports.setTheme = setTheme; +exports.slugify = slugify; +exports.themeUtils = themeUtils; +exports.topologicalSort = topologicalSort; +exports.use = use; +exports.validateConfig = validateConfig; +//# sourceMappingURL=metona-editor.cjs.js.map diff --git a/dist/metona-editor.cjs.js.map b/dist/metona-editor.cjs.js.map new file mode 100644 index 0000000..a5cbec2 --- /dev/null +++ b/dist/metona-editor.cjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metona-editor.cjs.js","sources":["../src/utils.ts","../src/icons.ts","../src/locales.ts","../src/constants.ts","../src/styles.ts","../src/i18n.ts","../src/parser.ts","../src/plugins.ts","../src/themes.ts","../src/core.ts","../src/animations.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":["i18nT"],"mappings":"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"} \ No newline at end of file diff --git a/dist/metona-editor.d.ts b/dist/metona-editor.d.ts new file mode 100644 index 0000000..49fb553 --- /dev/null +++ b/dist/metona-editor.d.ts @@ -0,0 +1,678 @@ +/** + * MetonaEditor Plugins — plugin system v2 + * @module plugins + * @version 0.2.0 + */ +interface Plugin { + name: string; + version?: string; + description?: string; + depends?: string[]; + priority?: number; + install?: (editor: any) => void | Promise; + destroy?: (editor: any) => void; + [key: string]: any; +} +interface PluginSchema { + [key: string]: { + type?: string; + required?: boolean; + default?: any; + enum?: any[]; + validator?: (val: any) => boolean | string; + }; +} +declare class PluginManager { + plugins: Map; + register(name: string, plugin: Plugin): this; + unregister(name: string): this; + get(name: string): Plugin | null; + has(name: string): boolean; + getAll(): Plugin[]; + getNames(): string[]; + enable(name: string): this; + disable(name: string): this; + isEnabled(name: string): boolean; + destroy(): void; +} +declare const topologicalSort: (plugins: Plugin[]) => Plugin[]; +declare const validateConfig: (schema?: PluginSchema, config?: Record) => { + valid: boolean; + errors: string[]; + patched: Record; +}; +declare const presetPlugins: Record; +declare const pluginUtils: { + createManager: () => PluginManager; + manager: PluginManager; + register: (name: string, plugin: Plugin) => PluginManager; + unregister: (name: string) => PluginManager; + get: (name: string) => Plugin | null; + has: (name: string) => boolean; + getAll: () => Plugin[]; + getNames: () => string[]; + enable: (name: string) => PluginManager; + disable: (name: string) => PluginManager; + isEnabled: (name: string) => boolean; + getPreset: (name: string) => Plugin | null; + getAllPresets: () => Record; + createPlugin: (config?: Partial) => Plugin; + validatePlugin: (plugin: any) => { + valid: boolean; + errors: string[]; + }; + topologicalSort: (plugins: Plugin[]) => Plugin[]; + validateConfig: (schema?: PluginSchema, config?: Record) => { + valid: boolean; + errors: string[]; + patched: Record; + }; +}; + +declare const loadRemote: (url: string, locale: string) => Promise; +interface InstanceI18n { + set: (locale: string) => string; + get: () => string; + getDirection: () => 'ltr' | 'rtl'; + t: (key: string, params?: Record) => string; + formatNumber: (n: number, opts?: Intl.NumberFormatOptions) => string; + formatDate: (d: Date | string, opts?: Intl.DateTimeFormatOptions) => string; +} +declare const createInstanceI18n: (editor: any) => InstanceI18n; +declare const i18nUtils: { + t: (key: string, params?: Record, locale?: string) => string; + getCurrentLocale: () => string; + setCurrentLocale: (locale: string) => void; + switchLocale: (locale: string) => void; + getFallbackLocale: () => string; + setFallbackLocale: (locale: string) => void; + hasTranslation: (key: string) => boolean; + getTranslations: (locale: string) => Record; + addTranslations: (locale: string, translations: Record) => void; + loadRemote: (url: string, locale: string) => Promise; + getSupportedLocales: () => string[]; + isLocaleSupported: (locale: string) => boolean; + getLocaleName: (locale: string) => string; + getLocaleDirection: (locale: string) => "ltr" | "rtl"; + formatNumber: (number: number, options?: Intl.NumberFormatOptions) => string; + formatCurrency: (amount: number, currency?: string, options?: Intl.NumberFormatOptions) => string; + formatDate: (date: Date | string, options?: Intl.DateTimeFormatOptions) => string; + addLocaleListener: (fn: (locale: string) => void) => () => void; + removeLocaleListener: (fn: (locale: string) => void) => void; + clearLocaleListeners: () => void; + initI18n: () => void; + saveLocale: (locale: string) => void; + loadLocale: () => string; + getDefaultLocale: () => string; + createInstanceI18n: (editor: any) => InstanceI18n; +}; + +/** + * MetonaEditor Icons — SVG toolbar icons + * @module icons + * @version 0.2.0 + */ +declare const ICONS: Record; + +/** + * MetonaEditor Constants — default configs, themes, animations + * @module constants + * @version 0.2.0 + */ + +type EditMode = 'edit' | 'split' | 'preview'; +type ThemeName = 'light' | 'dark' | 'auto' | 'warm' | string; +type ToolbarItem = string | '|'; +interface RenderEnv { + highlight?: (code: string, lang: string) => string; + locale?: string; + refs?: Record; +} +interface EditorStyle { + color?: string; + backgroundColor?: string; + [key: string]: string | undefined; +} +interface EditorOptions { + value?: string; + placeholder?: string; + mode?: EditMode; + height?: number | string; + toolbar?: ToolbarItem[] | false; + wordCount?: boolean; + autofocus?: boolean; + spellcheck?: boolean; + historyLimit?: number; + historyDebounce?: number; + syncScroll?: boolean; + tabSize?: number; + readOnly?: boolean; + lineNumbers?: boolean; + outline?: boolean; + autoBrackets?: boolean; + zenMode?: boolean; + wordWrap?: boolean; + maxLength?: number; + theme?: ThemeName; + locale?: string; + render?: ((markdown: string, env: RenderEnv) => string) | null; + highlight?: ((code: string, lang: string) => string) | null; + sanitize?: ((html: string) => string) | null; + className?: string; + style?: EditorStyle; + plugins?: any[]; + id?: string; + onChange?: ((value: string, editor: any) => void) | null; + onInput?: ((value: string, editor: any) => void) | null; + onFocus?: ((editor: any) => void) | null; + onBlur?: ((editor: any) => void) | null; + onSave?: ((value: string, editor: any) => void) | null; + onModeChange?: ((mode: string, editor: any) => void) | null; + onFullscreen?: ((fullscreen: boolean, editor: any) => void) | null; + onCreate?: ((editor: any) => void) | null; + onDestroy?: ((editor: any) => void) | null; + onLinkClick?: ((href: string, text: string, editor: any) => void) | null; + floatingToolbar?: boolean; +} +interface ThemeConfig { + bg: string; + text: string; + border: string; + shadow: string; + hoverShadow?: string; + toolbarBg?: string; + textareaBg?: string; + previewBg?: string; + codeBg?: string; + codeText?: string; + accent?: string; + muted?: string; + progressBg?: string; + closeHoverBg?: string; +} +interface AnimationConfig { + name?: string; + enter: Record; + leave: Record; + duration: number; + easing: string; +} +/** Default toolbar button sequence */ +declare const DEFAULT_TOOLBAR: ToolbarItem[]; +/** Default options */ +declare const DEFAULTS: Readonly; + +declare const THEMES: Record; +declare const EDIT_MODES: EditMode[]; +declare const TOOLBAR_ACTIONS: string[]; + +/** + * MetonaEditor Parser — lightweight Markdown parser (TypeScript) + * @module parser + * @version 0.2.0 + */ + +interface Token { + type: string; + [key: string]: any; +} +interface ParseResult { + tokens: Token[]; + footnotes: Record; + refs: Record; +} +interface BlockHandler { + name: string; + priority: number; + test: (line: string, lines: string[], i: number) => any; + parse: (lines: string[], i: number, match: any, tokens: Token[], footnotes: Record, refs?: Record) => { + token: Token | null; + newIndex: number; + }; +} +declare const clearRenderCache: () => void; +declare const safeUrl: (url: string | null | undefined) => string; +declare const slugify: (text: string) => string; +declare const registerBlockHandler: (handler: BlockHandler) => void; +declare const parseTokens: (md: string | null | undefined) => ParseResult; +declare const renderTokens: (tokens: Token[], env?: RenderEnv, footnotes?: Record) => string; +declare const parseMarkdown: (md: string | null | undefined, env?: RenderEnv) => string; + +/** + * MetonaEditor Core — MarkdownEditor class (TypeScript) + * @module core + * @version 0.2.0 + */ + +declare class MarkdownEditor { + static _hooks: Map void)[]>; + static on(name: string, fn: (editor: MarkdownEditor) => void): () => void; + static off(name: string, fn: (editor: MarkdownEditor) => void): void; + static trigger(name: string, instance: MarkdownEditor): void; + id: string; + container: HTMLElement; + config: EditorOptions; + el: HTMLElement; + toolbarEl: HTMLElement; + bodyEl: HTMLElement; + editorPane: HTMLElement; + editorInner: HTMLElement; + previewPane: HTMLElement; + dividerEl: HTMLElement; + textarea: HTMLTextAreaElement; + previewEl: HTMLElement; + gutter: HTMLElement; + statusEl: HTMLElement | null; + _value: string; + _mode: EditMode; + _history: string[]; + _historyIndex: number; + _cleanups: Array<() => void>; + _plugins: any[]; + _listeners: Record void>>; + _renderRaf: number | null; + _historyTimer: ReturnType | null; + _fullscreen: boolean; + _destroyed: boolean; + _lastRenderedValue: string | null; + _shortcuts: any[]; + _contextMenuItems: any[]; + _customActions: Record void>; + _outlineTimer: ReturnType | null; + _zenMode: boolean; + _wordWrap: boolean; + _syncing: boolean; + _zenMouseHandler: ((e: MouseEvent) => void) | null; + _ariaLive: HTMLElement; + _renderFn: (md: string, env: RenderEnv) => string; + _highlightFn: ((code: string, lang: string) => string) | null; + _themeCtx: any; + _i18nCtx: InstanceI18n; + _floatingToolbar: HTMLElement | null; + _selectionTimer: ReturnType | null; + _floatingEnabled: boolean; + constructor(container: string | HTMLElement, options?: EditorOptions); + _buildDOM(): void; + _buildToolbar(): void; + _createBtn(item: string): HTMLButtonElement; + _bindEvents(): void; + _handleKeydown(e: KeyboardEvent): void; + _handleTab(shift: boolean): void; + _bindDividerDrag(e: PointerEvent): void; + _saveDividerPosition(): void; + _restoreDividerPosition(): void; + _scheduleRender(): void; + _render(): void; + _renderGutter(): void; + _updateCurrentLine(): void; + _handleSmartEnter(e: KeyboardEvent): void; + _handleBracketAutoClose(e: KeyboardEvent): void; + _bindDragDrop(): void; + _buildOutline(): void; + _updateOutline(): void; + _trackOutlineScroll(): void; + _scheduleHistory(): void; + _pushHistory(): void; + undo(): this; + redo(): this; + canUndo(): boolean; + canRedo(): boolean; + _applyHistory(): void; + exec(action: string, ...args: any[]): this; + _wrapSelection(before: string, after: string): void; + _toggleLinePrefix(prefix: string): void; + _insertBlock(text: string): void; + _insertLink(): void; + _insertImage(): void; + _insertTable(rows?: number, cols?: number): void; + _formatTable(): void; + setMode(mode: EditMode): this; + getMode(): EditMode; + _updateModeButtons(): void; + toggleFullscreen(): this; + isFullscreen(): boolean; + exitFullscreen(): this; + toggleZen(): this; + isZen(): boolean; + toggleWordWrap(): this; + setWordWrap(on: boolean): this; + isWordWrap(): boolean; + _initFloatingToolbar(): void; + toggleFloatingToolbar(): this; + isFloatingToolbar(): boolean; + _buildFloatingToolbar(): void; + _hideFloatingToolbar(): void; + _bindToolbarKeyboard(): void; + _initAriaLive(): void; + _announce(msg: string): void; + _syncScroll(): void; + _updateWordCount(): void; + getStats(): { + characters: number; + words: number; + chineseChars: number; + englishWords: number; + lines: number; + readingTime: number; + }; + getSelectedText(): string; + getCursorPosition(): { + line: number; + column: number; + }; + setCursorPosition(line: number, column?: number): this; + scrollToLine(line: number): this; + selectLine(line: number): this; + selectAll(): this; + replaceAll(search: string, replace: string, caseSensitive?: boolean): number; + replaceAllRegex(pattern: RegExp, replace: string): number; + lineCount(): number; + getLine(line: number): string; + getValue(): string; + setValue(md: string, opts?: { + silent?: boolean; + }): this; + getHTML(): string; + refresh(): this; + copyAsMarkdown(): this; + copyAsHTML(): this; + insert(text: string, opts?: { + replace?: boolean; + }): this; + wrap(before: string, after: string): this; + focus(): this; + blur(): this; + enable(): this; + disable(): this; + isDisabled(): boolean; + setReadOnly(readOnly: boolean): this; + isReadOnly(): boolean; + on(name: string, fn: (...args: any[]) => void): () => void; + off(name: string, fn: (...args: any[]) => void): this; + _emit(name: string, ...args: any[]): void; + use(plugin: string | any, options?: any): this; + unuse(name: string): this; + getPlugins(): any[]; + addToolbarButton(config: any): this; + registerShortcut(combo: string, handler: Function | string, description?: string): this; + unregisterShortcut(combo: string): this; + getShortcuts(): any[]; + configureToolbar(tools: ToolbarItem[]): this; + removeToolbarButton(action: string): this; + registerContextMenu(items?: any[]): this; + _bindContextMenu(): void; + _showContextMenu(e: MouseEvent): void; + _hideContextMenu(): void; + _execContextAction(action: string): void; + toast(message: string, opts?: { + type?: string; + duration?: number; + animation?: string; + }): this; + setLocale(locale: string): this; + getLocale(): string; + t(key: string, params?: Record): string; + setTheme(theme: ThemeName): this; + getTheme(): string; + getThemeContext(): any; + getStatus(): { + id: string; + mode: EditMode; + theme: string; + locale: string; + fullscreen: boolean; + readOnly: boolean; + disabled: boolean; + destroyed: boolean; + plugins: any[]; + }; + destroy(): void; + isDestroyed(): boolean; +} + +/** + * MetonaEditor Themes — theme system + * @module themes + * @version 0.2.0 + */ + +declare const exportCSSVars: (el?: HTMLElement) => Record; +declare const getCSSVariable: (name: string, el?: HTMLElement) => string; +declare const followExternalTheme: (options: { + element?: HTMLElement; + attr?: string; + classMap?: Record; + callback?: (el: HTMLElement) => string | null; +}, onThemeChange: (theme: string) => void) => () => void; +declare const adoptFromParent: (container: HTMLElement, onThemeDetected: (theme: string) => void) => () => void; +declare const createInstanceTheme: (editor: any) => any; +declare const themeUtils: { + getSystemTheme: () => "light" | "dark"; + resolveTheme: (theme: string) => string; + getThemeConfig: (theme: string) => ThemeConfig; + watchSystemTheme: () => void; + unwatchSystemTheme: () => void; + applyTheme: (theme: string) => void; + getCurrentTheme: () => string; + getResolvedTheme: () => string; + switchTheme: (theme: string) => void; + toggleTheme: () => void; + resetToAuto: () => void; + initTheme: () => void; + saveTheme: (theme: string) => void; + loadTheme: () => string; + addThemeListener: (fn: (theme: string, resolved: string) => void) => () => void; + removeThemeListener: (fn: (theme: string, resolved: string) => void) => void; + clearThemeListeners: () => void; + registerTheme: (name: string, config?: Partial & { + extends?: string; + }) => void; + unregisterTheme: (name: string) => void; + getAllThemes: () => Record; + getThemeNames: () => string[]; + hasTheme: (name: string) => boolean; + setThemeVariables: (config: ThemeConfig, target?: HTMLElement) => void; + exportCSSVars: (el?: HTMLElement) => Record; + getCSSVariable: (name: string, el?: HTMLElement) => string; + applyThemeToElement: (theme: string, target: HTMLElement) => void; + followExternalTheme: (options: { + element?: HTMLElement; + attr?: string; + classMap?: Record; + callback?: (el: HTMLElement) => string | null; + }, onThemeChange: (theme: string) => void) => () => void; + adoptFromParent: (container: HTMLElement, onThemeDetected: (theme: string) => void) => () => void; + watch: (source: Function | string, onChange: (theme: string) => void) => () => void; + createInstanceTheme: (editor: any) => any; +}; + +/** + * MetonaEditor Animations — animation metadata + * @module animations + * @version 0.2.0 + */ + +declare const animationUtils: { + register(name: string, config: Partial & { + enter?: Record; + leave?: Record; + }): void; + unregister(name: string): void; + get(name: string): AnimationConfig | null; + getAnimationNames(): string[]; + getActiveCount(): number; + cancelAll(): void; + reset(): void; + destroy(): void; +}; + +declare const VERSION = "0.2.3"; +declare function create(container: string | HTMLElement, options?: EditorOptions): MarkdownEditor; +declare function use(plugin: string | any, options?: any): typeof api; +declare function on(name: string, fn: (editor: MarkdownEditor) => void): () => void; +declare function off(name: string, fn: (editor: MarkdownEditor) => void): typeof api; +declare function setTheme(theme: ThemeName, _options?: any): typeof api; +declare function setLocale(locale: string): typeof api; +declare function destroy(): void; +declare function getStatus(): { + version: string; + theme: string; + locale: string; + globalPlugins: any[]; + presetPlugins: string[]; +}; +declare const api: { + VERSION: string; + version: string; + MarkdownEditor: typeof MarkdownEditor; + Editor: typeof MarkdownEditor; + create: typeof create; + use: typeof use; + on: typeof on; + off: typeof off; + setTheme: typeof setTheme; + setLocale: typeof setLocale; + destroy: typeof destroy; + getStatus: typeof getStatus; + parseMarkdown: (md: string | null | undefined, env?: RenderEnv) => string; + parseTokens: (md: string | null | undefined) => ParseResult; + renderTokens: (tokens: Token[], env?: RenderEnv, footnotes?: Record) => string; + safeUrl: (url: string | null | undefined) => string; + slugify: (text: string) => string; + clearRenderCache: () => void; + registerBlockHandler: (handler: BlockHandler) => void; + themes: { + getSystemTheme: () => "light" | "dark"; + resolveTheme: (theme: string) => string; + getThemeConfig: (theme: string) => ThemeConfig; + watchSystemTheme: () => void; + unwatchSystemTheme: () => void; + applyTheme: (theme: string) => void; + getCurrentTheme: () => string; + getResolvedTheme: () => string; + switchTheme: (theme: string) => void; + toggleTheme: () => void; + resetToAuto: () => void; + initTheme: () => void; + saveTheme: (theme: string) => void; + loadTheme: () => string; + addThemeListener: (fn: (theme: string, resolved: string) => void) => () => void; + removeThemeListener: (fn: (theme: string, resolved: string) => void) => void; + clearThemeListeners: () => void; + registerTheme: (name: string, config?: Partial & { + extends?: string; + }) => void; + unregisterTheme: (name: string) => void; + getAllThemes: () => Record; + getThemeNames: () => string[]; + hasTheme: (name: string) => boolean; + setThemeVariables: (config: ThemeConfig, target?: HTMLElement) => void; + exportCSSVars: (el?: HTMLElement) => Record; + getCSSVariable: (name: string, el?: HTMLElement) => string; + applyThemeToElement: (theme: string, target: HTMLElement) => void; + followExternalTheme: (options: { + element?: HTMLElement; + attr?: string; + classMap?: Record; + callback?: (el: HTMLElement) => string | null; + }, onThemeChange: (theme: string) => void) => () => void; + adoptFromParent: (container: HTMLElement, onThemeDetected: (theme: string) => void) => () => void; + watch: (source: Function | string, onChange: (theme: string) => void) => () => void; + createInstanceTheme: (editor: any) => any; + }; + i18n: { + t: (key: string, params?: Record, locale?: string) => string; + getCurrentLocale: () => string; + setCurrentLocale: (locale: string) => void; + switchLocale: (locale: string) => void; + getFallbackLocale: () => string; + setFallbackLocale: (locale: string) => void; + hasTranslation: (key: string) => boolean; + getTranslations: (locale: string) => Record; + addTranslations: (locale: string, translations: Record) => void; + loadRemote: (url: string, locale: string) => Promise; + getSupportedLocales: () => string[]; + isLocaleSupported: (locale: string) => boolean; + getLocaleName: (locale: string) => string; + getLocaleDirection: (locale: string) => "ltr" | "rtl"; + formatNumber: (number: number, options?: Intl.NumberFormatOptions) => string; + formatCurrency: (amount: number, currency?: string, options?: Intl.NumberFormatOptions) => string; + formatDate: (date: Date | string, options?: Intl.DateTimeFormatOptions) => string; + addLocaleListener: (fn: (locale: string) => void) => () => void; + removeLocaleListener: (fn: (locale: string) => void) => void; + clearLocaleListeners: () => void; + initI18n: () => void; + saveLocale: (locale: string) => void; + loadLocale: () => string; + getDefaultLocale: () => string; + createInstanceI18n: (editor: any) => InstanceI18n; + }; + animations: { + register(name: string, config: Partial & { + enter?: Record; + leave?: Record; + }): void; + unregister(name: string): void; + get(name: string): AnimationConfig | null; + getAnimationNames(): string[]; + getActiveCount(): number; + cancelAll(): void; + reset(): void; + destroy(): void; + }; + plugins: { + createManager: () => PluginManager; + manager: PluginManager; + register: (name: string, plugin: Plugin) => PluginManager; + unregister: (name: string) => PluginManager; + get: (name: string) => Plugin | null; + has: (name: string) => boolean; + getAll: () => Plugin[]; + getNames: () => string[]; + enable: (name: string) => PluginManager; + disable: (name: string) => PluginManager; + isEnabled: (name: string) => boolean; + getPreset: (name: string) => Plugin | null; + getAllPresets: () => Record; + createPlugin: (config?: Partial) => Plugin; + validatePlugin: (plugin: any) => { + valid: boolean; + errors: string[]; + }; + topologicalSort: (plugins: Plugin[]) => Plugin[]; + validateConfig: (schema?: PluginSchema, config?: Record) => { + valid: boolean; + errors: string[]; + patched: Record; + }; + }; + presetPlugins: Record; + topologicalSort: (plugins: Plugin[]) => Plugin[]; + validateConfig: (schema?: PluginSchema, config?: Record) => { + valid: boolean; + errors: string[]; + patched: Record; + }; + createInstanceI18n: (editor: any) => InstanceI18n; + loadRemote: (url: string, locale: string) => Promise; + exportCSSVars: (el?: HTMLElement) => Record; + getCSSVariable: (name: string, el?: HTMLElement) => string; + followExternalTheme: (options: { + element?: HTMLElement; + attr?: string; + classMap?: Record; + callback?: (el: HTMLElement) => string | null; + }, onThemeChange: (theme: string) => void) => () => void; + adoptFromParent: (container: HTMLElement, onThemeDetected: (theme: string) => void) => () => void; + createInstanceTheme: (editor: any) => any; + DEFAULTS: Readonly; + ICONS: Record; + THEMES: Record; + EDIT_MODES: EditMode[]; + DEFAULT_TOOLBAR: string[]; + TOOLBAR_ACTIONS: string[]; +}; + +export { DEFAULTS, DEFAULT_TOOLBAR, EDIT_MODES, MarkdownEditor as Editor, ICONS, MarkdownEditor, api as MeEditor, THEMES, TOOLBAR_ACTIONS, VERSION, adoptFromParent, animationUtils, api, clearRenderCache, create, createInstanceI18n, createInstanceTheme, api as default, destroy, exportCSSVars, followExternalTheme, getCSSVariable, getStatus, i18nUtils, loadRemote, api as meEditor, off, on, parseMarkdown, parseTokens, pluginUtils, presetPlugins, registerBlockHandler, renderTokens, safeUrl, setLocale, setTheme, slugify, themeUtils, topologicalSort, use, validateConfig }; diff --git a/dist/metona-editor.esm.js b/dist/metona-editor.esm.js new file mode 100644 index 0000000..c0751e3 --- /dev/null +++ b/dist/metona-editor.esm.js @@ -0,0 +1,4512 @@ +/** + * MetonaEditor Utils — utility functions + * @module utils + * @version 0.2.0 + */ +/** Generate a unique ID */ +const generateId = () => { + return 'me-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8); +}; +/** HTML-escape a string */ +const escapeHTML = (s) => { + const str = String(s == null ? '' : s); + if (typeof document === 'undefined') { + return str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; +}; +/** Detect dark mode preference */ +const prefersDark = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return false; + return window.matchMedia('(prefers-color-scheme: dark)').matches; +}; +/** Check if running in browser */ +const isBrowser = () => { + return typeof window !== 'undefined' && typeof document !== 'undefined'; +}; + +/** + * MetonaEditor Icons — SVG toolbar icons + * @module icons + * @version 0.2.0 + */ +const ICONS = { + bold: ``, + italic: ``, + underline: ``, + strikethrough: ``, + h1: ``, + h2: ``, + h3: ``, + quote: ``, + code: ``, + link: ``, + image: ``, + table: ``, + ul: ``, + ol: ``, + indent: ``, + outdent: ``, + hr: ``, + undo: ``, + redo: ``, + preview: ``, + split: ``, + edit: ``, + fullscreen: ``, + theme: ``, +}; + +/** + * MetonaEditor Locales — translation data + * @module locales + * @version 0.2.3 + */ +const LOCALES = { + 'zh-CN': { + bold: '粗体', italic: '斜体', underline: '下划线', strikethrough: '删除线', + h1: '标题1', h2: '标题2', h3: '标题3', quote: '引用', code: '代码', + link: '链接', image: '图片', table: '表格', ul: '无序列表', ol: '有序列表', + indent: '增加缩进', outdent: '减少缩进', hr: '分隔线', undo: '撤销', redo: '重做', + edit: '编辑', split: '分屏', preview: '预览', fullscreen: '全屏', + fullscreenExit: '退出全屏', theme: '主题', light: '亮色', dark: '暗色', + auto: '自动', warm: '暖色', wordCount: '字数统计', characters: '字符', + words: '词数', lines: '行数', readingTime: '阅读', minutes: '分钟', + placeholder: '开始输入 Markdown...', empty: '暂无内容', copied: '已复制', + copyContent: '复制内容', copyHTML: '复制 HTML', copySuccess: '复制成功', + copyFailed: '复制失败', clearContent: '清空内容', clearConfirm: '确定要清空所有内容吗?', + linkPlaceholder: '请输入链接地址', imagePlaceholder: '请输入图片地址', + altPlaceholder: '请输入替代文本', tableRows: '行数', tableCols: '列数', + confirm: '确认', cancel: '取消', exportMarkdown: '导出 Markdown', + exportHTML: '导出 HTML', search: '搜索', replace: '替换', replaceAll: '全部替换', + searchPlaceholder: '查找内容', replacePlaceholder: '替换为', + findNext: '查找下一个', findPrev: '查找上一个', matchCase: '区分大小写', + wholeWord: '全字匹配', close: '关闭', open: '打开', save: '保存', + saved: '已保存', saving: '保存中...', delete: '删除', confirmDelete: '确定要删除吗?', + unsavedChanges: '有未保存的更改', error: '错误', success: '成功', + warning: '警告', info: '信息', loading: '加载中...', retry: '重试', + renderError: '渲染失败', + outline: '大纲', + cut: '剪切', copy: '复制', paste: '粘贴', selectAll: '全选', + }, + 'en-US': { + bold: 'Bold', italic: 'Italic', underline: 'Underline', strikethrough: 'Strikethrough', + h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', quote: 'Quote', code: 'Code', + link: 'Link', image: 'Image', table: 'Table', ul: 'Bullet List', ol: 'Numbered List', + indent: 'Indent', outdent: 'Outdent', hr: 'Horizontal Rule', undo: 'Undo', redo: 'Redo', + edit: 'Edit', split: 'Split', preview: 'Preview', fullscreen: 'Fullscreen', + fullscreenExit: 'Exit Fullscreen', theme: 'Theme', light: 'Light', dark: 'Dark', + auto: 'Auto', warm: 'Warm', wordCount: 'Word Count', characters: 'Characters', + words: 'Words', lines: 'Lines', readingTime: 'Reading', minutes: 'min', + placeholder: 'Start typing Markdown...', empty: 'No content', copied: 'Copied', + copyContent: 'Copy Content', copyHTML: 'Copy HTML', copySuccess: 'Copied successfully', + copyFailed: 'Copy failed', clearContent: 'Clear Content', clearConfirm: 'Clear all content?', + linkPlaceholder: 'Enter link URL', imagePlaceholder: 'Enter image URL', + altPlaceholder: 'Enter alt text', tableRows: 'Rows', tableCols: 'Columns', + confirm: 'Confirm', cancel: 'Cancel', exportMarkdown: 'Export Markdown', + exportHTML: 'Export HTML', search: 'Search', replace: 'Replace', replaceAll: 'Replace All', + searchPlaceholder: 'Find', replacePlaceholder: 'Replace with', + findNext: 'Find Next', findPrev: 'Find Previous', matchCase: 'Match Case', + wholeWord: 'Whole Word', close: 'Close', open: 'Open', save: 'Save', + saved: 'Saved', saving: 'Saving...', delete: 'Delete', confirmDelete: 'Are you sure you want to delete?', + unsavedChanges: 'You have unsaved changes', error: 'Error', success: 'Success', + warning: 'Warning', info: 'Info', loading: 'Loading...', retry: 'Retry', + renderError: 'Render failed', + outline: 'Outline', + cut: 'Cut', copy: 'Copy', paste: 'Paste', selectAll: 'Select All', + }, + ja: { + bold: '太字', italic: '斜体', underline: '下線', strikethrough: '打ち消し線', + h1: '見出し1', h2: '見出し2', h3: '見出し3', quote: '引用', code: 'コード', + link: 'リンク', image: '画像', table: '表', ul: '箇条書き', ol: '番号付きリスト', + indent: 'インデント', outdent: 'インデント解除', hr: '水平線', undo: '元に戻す', redo: 'やり直し', + edit: '編集', split: '分割', preview: 'プレビュー', fullscreen: '全画面', + fullscreenExit: '全画面解除', theme: 'テーマ', light: 'ライト', dark: 'ダーク', + auto: '自動', warm: 'ウォーム', wordCount: '文字数', characters: '文字', + words: '単語', lines: '行', readingTime: '読了時間', minutes: '分', + placeholder: 'Markdownを入力...', empty: '内容なし', copied: 'コピー済み', + copyContent: '内容をコピー', copyHTML: 'HTMLをコピー', copySuccess: 'コピー成功', + copyFailed: 'コピー失敗', clearContent: '内容をクリア', clearConfirm: 'すべての内容をクリアしますか?', + linkPlaceholder: 'リンクURLを入力', imagePlaceholder: '画像URLを入力', + altPlaceholder: '代替テキストを入力', tableRows: '行', tableCols: '列', + confirm: '確認', cancel: 'キャンセル', exportMarkdown: 'Markdownエクスポート', + exportHTML: 'HTMLエクスポート', search: '検索', replace: '置換', replaceAll: 'すべて置換', + searchPlaceholder: '検索', replacePlaceholder: '置換後', + findNext: '次を検索', findPrev: '前を検索', matchCase: '大文字小文字', + wholeWord: '単語単位', close: '閉じる', open: '開く', save: '保存', + saved: '保存済み', saving: '保存中...', delete: '削除', confirmDelete: '削除してもよろしいですか?', + unsavedChanges: '未保存の変更があります', error: 'エラー', success: '成功', + warning: '警告', info: '情報', loading: '読み込み中...', retry: '再試行', + renderError: 'レンダリング失敗', + outline: 'アウトライン', + cut: '切り取り', copy: 'コピー', paste: '貼り付け', selectAll: 'すべて選択', + }, + ko: { + bold: '굵게', italic: '기울임', underline: '밑줄', strikethrough: '취소선', + h1: '제목1', h2: '제목2', h3: '제목3', quote: '인용', code: '코드', + link: '링크', image: '이미지', table: '표', ul: '순서 없는 목록', ol: '순서 있는 목록', + indent: '들여쓰기', outdent: '내어쓰기', hr: '수평선', undo: '실행 취소', redo: '다시 실행', + edit: '편집', split: '분할', preview: '미리보기', fullscreen: '전체 화면', + fullscreenExit: '전체 화면 종료', theme: '테마', light: '라이트', dark: '다크', + auto: '자동', warm: '웜', wordCount: '글자 수', characters: '글자', + words: '단어', lines: '줄', readingTime: '읽기 시간', minutes: '분', + placeholder: 'Markdown 입력...', empty: '내용 없음', copied: '복사됨', + copyContent: '내용 복사', copyHTML: 'HTML 복사', copySuccess: '복사 성공', + copyFailed: '복사 실패', clearContent: '내용 지우기', clearConfirm: '모든 내용을 지우시겠습니까?', + linkPlaceholder: '링크 URL 입력', imagePlaceholder: '이미지 URL 입력', + altPlaceholder: '대체 텍스트 입력', tableRows: '행', tableCols: '열', + confirm: '확인', cancel: '취소', exportMarkdown: 'Markdown 내보내기', + exportHTML: 'HTML 내보내기', search: '검색', replace: '바꾸기', replaceAll: '모두 바꾸기', + searchPlaceholder: '찾기', replacePlaceholder: '바꿀 내용', + findNext: '다음 찾기', findPrev: '이전 찾기', matchCase: '대소문자 구분', + wholeWord: '단어 단위', close: '닫기', open: '열기', save: '저장', + saved: '저장됨', saving: '저장 중...', delete: '삭제', confirmDelete: '삭제하시겠습니까?', + unsavedChanges: '저장되지 않은 변경 사항이 있습니다', error: '오류', success: '성공', + warning: '경고', info: '정보', loading: '로딩 중...', retry: '재시도', + renderError: '렌더링 실패', + outline: '개요', + cut: '잘라내기', copy: '복사', paste: '붙여넣기', selectAll: '전체 선택', + }, + fr: { + bold: 'Gras', italic: 'Italique', underline: 'Souligné', strikethrough: 'Barré', + h1: 'Titre 1', h2: 'Titre 2', h3: 'Titre 3', quote: 'Citation', code: 'Code', + link: 'Lien', image: 'Image', table: 'Tableau', ul: 'Liste à puces', ol: 'Liste numérotée', + indent: 'Indenter', outdent: 'Désindenter', hr: 'Ligne horizontale', undo: 'Annuler', redo: 'Rétablir', + edit: 'Éditer', split: 'Fractionné', preview: 'Aperçu', fullscreen: 'Plein écran', + fullscreenExit: 'Quitter plein écran', theme: 'Thème', light: 'Clair', dark: 'Sombre', + auto: 'Auto', warm: 'Chaud', wordCount: 'Nombre de mots', characters: 'Caractères', + words: 'Mots', lines: 'Lignes', readingTime: 'Lecture', minutes: 'min', + placeholder: 'Commencez à taper Markdown...', empty: 'Aucun contenu', copied: 'Copié', + copyContent: 'Copier le contenu', copyHTML: 'Copier HTML', copySuccess: 'Copié avec succès', + copyFailed: 'Échec de la copie', clearContent: 'Effacer le contenu', clearConfirm: 'Effacer tout le contenu ?', + linkPlaceholder: 'Entrez l\'URL du lien', imagePlaceholder: 'Entrez l\'URL de l\'image', + altPlaceholder: 'Entrez le texte alternatif', tableRows: 'Lignes', tableCols: 'Colonnes', + confirm: 'Confirmer', cancel: 'Annuler', exportMarkdown: 'Exporter Markdown', + exportHTML: 'Exporter HTML', search: 'Rechercher', replace: 'Remplacer', replaceAll: 'Tout remplacer', + searchPlaceholder: 'Rechercher', replacePlaceholder: 'Remplacer par', + findNext: 'Suivant', findPrev: 'Précédent', matchCase: 'Respecter la casse', + wholeWord: 'Mot entier', close: 'Fermer', open: 'Ouvrir', save: 'Enregistrer', + saved: 'Enregistré', saving: 'Enregistrement...', delete: 'Supprimer', confirmDelete: 'Confirmer la suppression ?', + unsavedChanges: 'Modifications non enregistrées', error: 'Erreur', success: 'Succès', + warning: 'Avertissement', info: 'Info', loading: 'Chargement...', retry: 'Réessayer', + renderError: 'Échec du rendu', + outline: 'Plan', + cut: 'Couper', copy: 'Copier', paste: 'Coller', selectAll: 'Tout sélectionner', + }, + de: { + bold: 'Fett', italic: 'Kursiv', underline: 'Unterstrichen', strikethrough: 'Durchgestrichen', + h1: 'Überschrift 1', h2: 'Überschrift 2', h3: 'Überschrift 3', quote: 'Zitat', code: 'Code', + link: 'Link', image: 'Bild', table: 'Tabelle', ul: 'Aufzählung', ol: 'Nummerierte Liste', + indent: 'Einrücken', outdent: 'Ausrücken', hr: 'Trennlinie', undo: 'Rückgängig', redo: 'Wiederholen', + edit: 'Bearbeiten', split: 'Geteilt', preview: 'Vorschau', fullscreen: 'Vollbild', + fullscreenExit: 'Vollbild beenden', theme: 'Design', light: 'Hell', dark: 'Dunkel', + auto: 'Auto', warm: 'Warm', wordCount: 'Wörter', characters: 'Zeichen', + words: 'Wörter', lines: 'Zeilen', readingTime: 'Lesezeit', minutes: 'min', + placeholder: 'Markdown eingeben...', empty: 'Kein Inhalt', copied: 'Kopiert', + copyContent: 'Inhalt kopieren', copyHTML: 'HTML kopieren', copySuccess: 'Erfolgreich kopiert', + copyFailed: 'Kopieren fehlgeschlagen', clearContent: 'Inhalt löschen', clearConfirm: 'Gesamten Inhalt löschen?', + linkPlaceholder: 'Link-URL eingeben', imagePlaceholder: 'Bild-URL eingeben', + altPlaceholder: 'Alternativtext eingeben', tableRows: 'Zeilen', tableCols: 'Spalten', + confirm: 'Bestätigen', cancel: 'Abbrechen', exportMarkdown: 'Markdown exportieren', + exportHTML: 'HTML exportieren', search: 'Suchen', replace: 'Ersetzen', replaceAll: 'Alle ersetzen', + searchPlaceholder: 'Suchen', replacePlaceholder: 'Ersetzen mit', + findNext: 'Nächstes', findPrev: 'Vorheriges', matchCase: 'Groß-/Kleinschreibung', + wholeWord: 'Ganzes Wort', close: 'Schließen', open: 'Öffnen', save: 'Speichern', + saved: 'Gespeichert', saving: 'Speichern...', delete: 'Löschen', confirmDelete: 'Wirklich löschen?', + unsavedChanges: 'Ungespeicherte Änderungen', error: 'Fehler', success: 'Erfolg', + warning: 'Warnung', info: 'Info', loading: 'Laden...', retry: 'Wiederholen', + renderError: 'Rendern fehlgeschlagen', + outline: 'Gliederung', + cut: 'Ausschneiden', copy: 'Kopieren', paste: 'Einfügen', selectAll: 'Alles auswählen', + }, +}; + +/** + * MetonaEditor Constants — default configs, themes, animations + * @module constants + * @version 0.2.0 + */ +/** Default toolbar button sequence */ +const DEFAULT_TOOLBAR = [ + 'bold', 'italic', 'strikethrough', 'code', '|', + 'h1', 'h2', 'h3', '|', + 'quote', 'ul', 'ol', '|', + 'link', 'image', 'table', 'hr', '|', + 'undo', 'redo', '|', + 'edit', 'split', 'preview', 'fullscreen', +]; +/** Default options */ +const DEFAULTS = Object.freeze({ + value: '', + placeholder: '', + mode: 'split', + height: 400, + toolbar: DEFAULT_TOOLBAR, + wordCount: true, + autofocus: false, + spellcheck: false, + historyLimit: 100, + historyDebounce: 400, + syncScroll: true, + tabSize: 2, + readOnly: false, + lineNumbers: true, + outline: false, + autoBrackets: true, + zenMode: false, + wordWrap: true, + maxLength: 0, + theme: 'auto', + locale: 'zh-CN', + render: null, + highlight: null, + sanitize: null, + className: '', + style: {}, + plugins: [], + onChange: null, + onInput: null, + onFocus: null, + onBlur: null, + onSave: null, + onModeChange: null, + onFullscreen: null, + onCreate: null, + onDestroy: null, + onLinkClick: null, + floatingToolbar: true, +}); +const THEMES = { + light: { + bg: 'rgba(255, 255, 255, 0.96)', + text: '#1f2937', + border: 'rgba(0, 0, 0, 0.08)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.18), 0 4px 14px -4px rgba(0, 0, 0, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(0, 0, 0, 0.22), 0 6px 18px -4px rgba(0, 0, 0, 0.10)', + toolbarBg: 'rgba(248, 249, 250, 0.92)', + textareaBg: '#ffffff', + previewBg: '#ffffff', + codeBg: 'rgba(243, 244, 246, 1)', + codeText: '#1f2937', + accent: '#3b82f6', + muted: '#6b7280', + }, + dark: { + bg: 'rgba(28, 32, 40, 0.94)', + text: '#e6e8eb', + border: 'rgba(255, 255, 255, 0.1)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.6), 0 4px 14px -4px rgba(0, 0, 0, 0.4)', + hoverShadow: '0 14px 48px -8px rgba(0, 0, 0, 0.6), 0 6px 18px -4px rgba(0, 0, 0, 0.4)', + toolbarBg: 'rgba(22, 26, 33, 0.92)', + textareaBg: '#1c2028', + previewBg: '#1c2028', + codeBg: 'rgba(15, 18, 24, 1)', + codeText: '#e6e8eb', + accent: '#60a5fa', + muted: '#9ca3af', + }, + auto: 'auto', + warm: { + bg: 'rgba(255, 251, 235, 0.96)', + text: '#78350f', + border: 'rgba(245, 158, 11, 0.2)', + shadow: '0 10px 36px -10px rgba(245, 158, 11, 0.18), 0 4px 14px -4px rgba(245, 158, 11, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(245, 158, 11, 0.22), 0 6px 18px -4px rgba(245, 158, 11, 0.10)', + toolbarBg: 'rgba(254, 243, 199, 0.92)', + textareaBg: '#fffbeb', + previewBg: '#fffbeb', + codeBg: 'rgba(254, 215, 170, 0.6)', + codeText: '#78350f', + accent: '#d97706', + muted: '#a16207', + progressBg: 'rgba(217, 119, 6, 0.15)', + closeHoverBg: 'rgba(217, 119, 6, 0.2)', + }, +}; +const ANIMATIONS = { + slide: { enter: { transform: 'translateX(80px)', opacity: '0' }, leave: { transform: 'translateX(120%)', opacity: '0' }, duration: 400, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + fade: { enter: { opacity: '0', filter: 'blur(3px)' }, leave: { opacity: '0', filter: 'blur(3px)' }, duration: 500, easing: 'ease' }, + scale: { enter: { transform: 'scale(0.55)', opacity: '0' }, leave: { transform: 'scale(0.55)', opacity: '0' }, duration: 450, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, + bounce: { enter: { transform: 'translateY(-80px)', opacity: '0' }, leave: { transform: 'translateY(20px)', opacity: '0' }, duration: 650, easing: 'ease' }, + flip: { enter: { transform: 'perspective(500px) rotateX(-90deg)', opacity: '0' }, leave: { transform: 'perspective(500px) rotateX(90deg)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + rotate: { enter: { transform: 'rotate(-25deg) scale(0.6)', opacity: '0' }, leave: { transform: 'rotate(25deg) scale(0.6)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + zoom: { enter: { transform: 'scale(0.1)', opacity: '0' }, leave: { transform: 'scale(0.1)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, +}; +const EDIT_MODES = ['edit', 'split', 'preview']; +const TOOLBAR_ACTIONS = [ + 'bold', 'italic', 'strikethrough', 'underline', 'code', + 'h1', 'h2', 'h3', 'quote', 'ul', 'ol', 'indent', 'outdent', 'hr', + 'link', 'image', 'table', 'undo', 'redo', + 'edit', 'split', 'preview', 'fullscreen', +]; + +/** + * MetonaEditor Styles — CSS-in-JS injection + * @module styles + * @version 0.2.0 + */ +let styleElement = null; +const generateCSS = () => { + return `:root{--md-bg:#ffffff;--md-text:#1f2937;--md-border:rgba(0,0,0,0.08);--md-shadow:0 10px 36px -10px rgba(0,0,0,0.18),0 4px 14px -4px rgba(0,0,0,0.08);--md-hover-shadow:0 14px 48px -10px rgba(0,0,0,0.22),0 6px 18px -4px rgba(0,0,0,0.10);--md-toolbar-bg:rgba(248,249,250,0.92);--md-textarea-bg:#ffffff;--md-preview-bg:#ffffff;--md-code-bg:rgba(243,244,246,1);--md-code-text:#1f2937;--md-accent:#3b82f6;--md-muted:#6b7280;--md-radius:10px;--md-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;--md-mono:"SF Mono","Cascadia Code","Consolas","Liberation Mono","Courier New",monospace} +.me-wrapper{display:flex;flex-direction:column;box-sizing:border-box;border:1px solid var(--md-border);border-radius:var(--md-radius);overflow:hidden;background:var(--md-bg);color:var(--md-text);box-shadow:var(--md-shadow);font-family:var(--md-font);font-size:14px;line-height:1.6;position:relative;transition:box-shadow .25s,border-color .25s;width:100%} +.me-wrapper:hover{box-shadow:var(--md-hover-shadow)} +.me-wrapper.me-disabled{opacity:.6;pointer-events:none} +.me-wrapper *{box-sizing:border-box} +.me-wrapper.me-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;border-radius:0;border:0} +.me-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background:var(--md-toolbar-bg);border-bottom:1px solid var(--md-border);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);min-height:40px} +.me-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--md-text);cursor:pointer;transition:background .15s,color .15s,transform .1s;flex-shrink:0} +.me-btn:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-btn:active{transform:scale(.92)} +.me-btn.me-active{background:var(--md-accent);color:#fff} +.me-btn:disabled{opacity:.35;cursor:not-allowed;pointer-events:none} +.me-btn:focus-visible{outline:2px solid var(--md-accent);outline-offset:2px} +.me-btn:focus:not(:focus-visible){outline:none} +.me-btn svg{width:17px;height:17px;display:block} +.me-btn span{font-size:12px;font-weight:500} +.me-toolbar-sep{display:inline-block;width:1px;height:20px;background:var(--md-border);margin:0 4px;flex-shrink:0} +.me-toolbar-group{display:inline-flex;gap:2px;margin-left:auto;padding-left:6px;border-left:1px solid var(--md-border)} +.me-toolbar-group .me-btn{width:auto;padding:0 8px} +.me-body{display:flex;flex:1;min-height:0;position:relative} +.me-editor-pane,.me-preview-pane{flex:1 1 50%;min-width:0;overflow:hidden;position:relative} +.me-editor-inner{display:flex;height:100%;overflow:hidden;position:relative} +.me-gutter{flex:0 0 auto;min-width:36px;padding:16px 8px 16px 6px;overflow:hidden;background:var(--md-code-bg);border-right:1px solid var(--md-border);color:var(--md-muted);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;text-align:right;user-select:none;white-space:pre} +.me-gutter-line{padding-right:4px} +.me-gutter-active{color:var(--md-accent);font-weight:600;background:rgba(59,130,246,.08);border-radius:3px} +.me-divider{flex:0 0 1px;background:var(--md-border);cursor:col-resize;position:relative} +.me-divider::after{content:'';position:absolute;top:0;bottom:0;left:-3px;right:-3px} +.me-divider:hover{background:var(--md-accent)} +.me-textarea{width:100%;height:100%;padding:16px 18px;border:0;outline:0;resize:none;background:var(--md-textarea-bg);color:var(--md-text);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;display:block;white-space:pre-wrap;word-wrap:break-word;position:relative;z-index:1} +.me-textarea::placeholder{color:var(--md-muted);opacity:.7} +.me-textarea:focus{outline:0} +.me-preview-pane{overflow:auto;background:var(--md-preview-bg)} +.me-preview{padding:18px 22px;max-width:100%;word-wrap:break-word;overflow-wrap:break-word} +.me-body.me-mode-edit .me-preview-pane,.me-body.me-mode-edit .me-divider{display:none} +.me-body.me-mode-edit .me-editor-pane{flex:1 1 100%} +.me-body.me-mode-preview .me-editor-pane,.me-body.me-mode-preview .me-divider{display:none} +.me-body.me-mode-preview .me-preview-pane{flex:1 1 100%} +.me-preview>:first-child{margin-top:0} +.me-preview>:last-child{margin-bottom:0} +.me-preview h1,.me-preview h2,.me-preview h3,.me-preview h4,.me-preview h5,.me-preview h6{margin:1.4em 0 .6em;font-weight:650;line-height:1.3} +.me-preview h1{font-size:1.9em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h2{font-size:1.55em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h3{font-size:1.3em} +.me-preview h4{font-size:1.12em} +.me-preview h5{font-size:1em} +.me-preview h6{font-size:.9em;color:var(--md-muted)} +.me-preview p{margin:.7em 0} +.me-preview a{color:var(--md-accent);text-decoration:none} +.me-preview a:hover{text-decoration:underline} +.me-preview strong{font-weight:650} +.me-preview em{font-style:italic} +.me-preview del{text-decoration:line-through;opacity:.75} +.me-preview ul,.me-preview ol{margin:.6em 0;padding-left:1.6em} +.me-preview li{margin:.25em 0} +.me-preview li.me-task-item{list-style:none;margin-left:-1.4em} +.me-preview li.me-task-item input{margin-right:.5em;vertical-align:middle} +.me-preview blockquote{margin:.8em 0;padding:.4em 1em;border-left:3px solid var(--md-accent);background:var(--md-code-bg);border-radius:0 6px 6px 0;color:var(--md-text)} +.me-preview blockquote>:first-child{margin-top:0} +.me-preview blockquote>:last-child{margin-bottom:0} +.me-preview hr{border:0;height:1px;background:var(--md-border);margin:1.6em 0} +.me-preview code{font-family:var(--md-mono);font-size:.88em;padding:.15em .4em;background:var(--md-code-bg);color:var(--md-code-text);border-radius:4px} +.me-preview pre{margin:.9em 0;padding:14px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;border:1px solid var(--md-border)} +.me-code-title{font-family:var(--md-mono);font-size:.85em;padding:8px 14px;background:var(--md-border);border-radius:8px 8px 0 0;color:var(--md-text);margin:.9em 0 -0.9em;font-weight:600} +.me-code-title+pre{margin-top:0;border-radius:0 0 8px 8px;border-top:none} +.me-preview pre code{padding:0;background:transparent;color:var(--md-code-text);font-size:.9em;line-height:1.6;border-radius:0} +.me-preview img{max-width:100%;height:auto;border-radius:6px;vertical-align:middle} +.me-table-wrap{overflow-x:auto;margin:.9em 0} +.me-preview table{border-collapse:collapse;width:100%;font-size:.93em;display:block} +.me-preview th,.me-preview td{border:1px solid var(--md-border);padding:7px 12px;text-align:left} +.me-preview th{background:var(--md-code-bg);font-weight:600} +.me-preview tr:nth-child(even) td{background:var(--md-code-bg)} +.me-statusbar{display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:4px 12px;border-top:1px solid var(--md-border);background:var(--md-toolbar-bg);color:var(--md-muted);font-size:12px;min-height:26px} +.me-statusbar:empty{display:none} +.me-wrapper:focus-within{border-color:var(--md-accent)} +.me-textarea:focus-visible{outline:0} +@media(prefers-reduced-motion:reduce){.me-wrapper,.me-btn,.me-textarea{transition:none!important}} +.me-wrapper.me-fullscreen .me-preview,.me-wrapper.me-fullscreen .me-textarea{font-size:15px} +.me-wrapper.me-readonly .me-textarea{background:var(--md-code-bg);cursor:default;opacity:.88} +.me-wrapper.me-readonly .me-toolbar{opacity:.75} +.me-wrapper.me-readonly .me-btn:disabled{opacity:.3;cursor:not-allowed;pointer-events:none} +.me-preview mark{background:rgba(250,204,21,.3);color:inherit;padding:.1em .2em;border-radius:3px} +.me-preview sup{font-size:.75em;vertical-align:super;line-height:1} +.me-preview sub{font-size:.75em;vertical-align:sub;line-height:1} +.me-preview .me-math-block{display:block;margin:1.2em 0;padding:12px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;font-family:var(--md-mono);font-size:.95em;text-align:center} +.me-preview .me-math-inline{font-family:var(--md-mono);font-size:.95em;padding:.05em .2em} +.me-preview dl{margin:.8em 0} +.me-preview dt{font-weight:650;margin:.6em 0 .2em} +.me-preview dd{margin:0 0 .3em 1.6em;color:var(--md-text)} +.me-preview .me-footnote-ref a{font-size:.75em;vertical-align:super;text-decoration:none;color:var(--md-accent)} +.me-preview .me-footnotes{margin-top:2em;border-top:1px solid var(--md-border);padding-top:.8em;font-size:.9em;color:var(--md-muted)} +.me-preview .me-footnotes hr{display:none} +.me-preview .me-footnotes ol{padding-left:1.2em} +.me-preview .me-footnote-item{margin:.3em 0} +.me-preview .me-footnote-backref{text-decoration:none;color:var(--md-accent);margin-right:.4em} +.me-toast{position:absolute;bottom:16px;right:16px;z-index:30;display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:8px;font-size:13px;pointer-events:auto;cursor:pointer;opacity:0;transform:translateY(12px);transition:opacity .3s,transform .3s;box-shadow:0 6px 20px rgba(0,0,0,.15);max-width:360px} +.me-toast.me-toast-enter{opacity:1;transform:translateY(0)} +.me-toast.me-toast-leave{opacity:0;transform:translateY(12px)} +.me-toast-success{background:#10b981;color:#fff} +.me-toast-error{background:#ef4444;color:#fff} +.me-toast-warning{background:#f59e0b;color:#fff} +.me-toast-info{background:var(--md-accent,#3b82f6);color:#fff} +.me-toast-icon{font-weight:700;font-size:16px;flex-shrink:0} +.me-toast-msg{line-height:1.4} +.me-context-menu{position:fixed;z-index:40;min-width:180px;padding:4px 0;background:var(--md-bg);border:1px solid var(--md-border);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.18);font-size:13px} +.me-context-menu-item{display:flex;align-items:center;justify-content:space-between;padding:6px 14px;cursor:pointer;color:var(--md-text);transition:background .1s} +.me-context-menu-item:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-context-menu-sep{height:1px;background:var(--md-border);margin:4px 0} +.me-context-menu-shortcut{color:var(--md-muted);font-size:11px;margin-left:24px} +.me-context-menu-item.me-disabled{opacity:.4;cursor:not-allowed;pointer-events:none} +.me-outline{position:absolute;top:0;right:0;width:220px;height:100%;overflow-y:auto;background:var(--md-preview-bg);border-left:1px solid var(--md-border);padding:12px 14px;font-size:13px;z-index:15} +.me-outline-title{font-weight:650;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--md-border);color:var(--md-text)} +.me-outline ul{list-style:none;padding:0;margin:0} +.me-outline li{margin:2px 0} +.me-outline a{color:var(--md-muted);text-decoration:none;display:block;padding:2px 6px;border-radius:4px;transition:background .1s,color .1s} +.me-outline a:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-outline a.me-outline-active{background:var(--md-accent);color:#fff;font-weight:600} +.me-outline-l1 a{font-weight:600;color:var(--md-text)} +.me-outline-l2 a{padding-left:12px} +.me-outline-l3 a{padding-left:20px;font-size:12px} +.me-outline-l4 a{padding-left:28px;font-size:12px} +.me-wrapper.me-zen .me-body{max-width:820px;margin:0 auto} +.me-wrapper.me-zen .me-textarea{font-size:15px;line-height:1.8} +.me-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0} +@media print{.me-wrapper{border:0!important;box-shadow:none!important} +.me-toolbar,.me-statusbar,.me-divider{display:none!important} +.me-body.me-mode-split .me-editor-pane{display:none} +.me-body.me-mode-split .me-preview-pane{flex:1 1 100%!important} +.me-preview{padding:0!important;font-size:11pt} +.me-wrapper.me-fullscreen{position:static!important;width:auto!important;height:auto!important}} +[dir=rtl] .me-gutter{border-right:none;border-left:1px solid var(--md-border);text-align:left} +[dir=rtl] .me-gutter-line{padding-right:0;padding-left:4px} +[dir=rtl] .me-toolbar-group{margin-left:0;margin-right:auto;padding-left:0;padding-right:6px;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline{right:auto;left:0;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline-l2 a{padding-left:0;padding-right:12px} +[dir=rtl] .me-outline-l3 a{padding-left:0;padding-right:20px} +[dir=rtl] .me-outline-l4 a{padding-left:0;padding-right:28px} +[dir=rtl] .me-preview blockquote{border-left:none;border-right:3px solid var(--md-accent);border-radius:6px 0 0 6px} +[dir=rtl] .me-preview ul,[dir=rtl] .me-preview ol{padding-left:0;padding-right:1.6em} +[dir=rtl] .me-preview li.me-task-item{margin-left:0;margin-right:-1.4em} +[dir=rtl] .me-preview dd{margin-left:0;margin-right:1.6em} +[dir=rtl] .me-preview .me-footnotes ol{padding-left:0;padding-right:1.2em} +[dir=rtl] .me-preview .me-footnote-backref{margin-right:0;margin-left:.4em} +[dir=rtl] .me-search{right:auto;left:12px} +[dir=rtl] .me-toast{right:auto;left:16px} +[dir=rtl] .me-context-menu-shortcut{margin-left:0;margin-right:24px} +[dir=rtl] .me-statusbar{justify-content:flex-start}`; +}; +const injectStyles = () => { + if (typeof document === 'undefined') + return; + if (styleElement && document.getElementById('metona-editor-styles')) + return; + const css = generateCSS(); + styleElement = document.createElement('style'); + styleElement.id = 'metona-editor-styles'; + styleElement.textContent = css; + document.head.appendChild(styleElement); +}; + +/** + * MetonaEditor i18n — internationalization + * @module i18n + * @version 0.2.0 + */ +let currentLocale = 'zh-CN'; +let localeListeners = new Set(); +let fallbackLocale = 'zh-CN'; +const pluralRules = { + zh: () => 'other', + en: (n) => n === 1 ? 'one' : 'other', + ru: (n) => { + const m = n % 10, h = n % 100; + if (m === 1 && h !== 11) + return 'one'; + if (m >= 2 && m <= 4 && !(h >= 12 && h <= 14)) + return 'few'; + if (m === 0 || (m >= 5 && m <= 9) || (h >= 11 && h <= 14)) + return 'many'; + return 'other'; + }, +}; +const getPluralForm = (locale, count) => { + const lang = locale.split('-')[0].toLowerCase(); + const rule = pluralRules[lang] || pluralRules.en; + return rule(Math.abs(count)); +}; +const getCurrentLocale = () => currentLocale; +const setCurrentLocale = (locale) => { + let target = locale; + if (!LOCALES[target]) { + console.warn(`Locale "${target}" not found, falling back to "${fallbackLocale}"`); + target = fallbackLocale; + } + currentLocale = target; + notifyLocaleListeners(target); + saveLocale(target); +}; +const t = (key, params = {}, locale) => { + const loc = locale || currentLocale; + let translation = getTranslation(loc, key); + if (translation && typeof translation === 'object' && params.count !== undefined) { + const form = getPluralForm(loc, params.count); + translation = translation[form] || translation.other || key; + } + if (typeof translation === 'string') + return interpolate(translation, params); + if (loc !== fallbackLocale) { + let fb = getTranslation(fallbackLocale, key); + if (fb && typeof fb === 'object' && params.count !== undefined) { + const form = getPluralForm(fallbackLocale, params.count); + fb = fb[form] || fb.other; + } + if (typeof fb === 'string') + return interpolate(fb, params); + } + console.warn(`Translation missing for key "${key}" in locale "${loc}"`); + return key; +}; +const getTranslation = (locale, key) => { + const localeData = LOCALES[locale]; + if (!localeData) + return undefined; + const keys = key.split('.'); + let result = localeData; + for (const k of keys) { + if (result && typeof result === 'object' && k in result) { + result = result[k]; + } + else + return undefined; + } + return result; +}; +const interpolate = (str, params) => { + return str.replace(/\{(\w+)\}/g, (_match, key) => params[key] !== undefined ? String(params[key]) : _match); +}; +const hasTranslation = (key) => { + return getTranslation(currentLocale, key) !== undefined || getTranslation(fallbackLocale, key) !== undefined; +}; +const getTranslations = (locale) => LOCALES[locale] || {}; +const addTranslations = (locale, translations) => { + if (!LOCALES[locale]) + LOCALES[locale] = {}; + deepMergeI18n(LOCALES[locale], translations); +}; +const loadRemote = async (url, locale) => { + try { + const res = await fetch(url); + if (!res.ok) + throw new Error(`HTTP ${res.status}`); + const data = await res.json(); + addTranslations(locale, data); + return true; + } + catch (e) { + console.error(`MeEditor: failed to load locale "${locale}" from ${url}`, e); + return false; + } +}; +const deepMergeI18n = (target, source) => { + for (const key in source) { + if (source[key] instanceof Object && key in target && target[key] instanceof Object && !Array.isArray(source[key])) { + deepMergeI18n(target[key], source[key]); + } + else { + target[key] = source[key]; + } + } + return target; +}; +const getSupportedLocales = () => Object.keys(LOCALES); +const isLocaleSupported = (locale) => locale in LOCALES; +const getLocaleName = (locale) => { + const names = { + 'zh-CN': '简体中文', 'zh-TW': '繁體中文', 'en-US': 'English (US)', 'en-GB': 'English (UK)', + ja: '日本語', ko: '한국어', fr: 'Français', de: 'Deutsch', es: 'Español', pt: 'Português', + ru: 'Русский', ar: 'العربية', hi: 'हिन्दी', th: 'ไทย', + vi: 'Tiếng Việt', id: 'Bahasa Indonesia', tr: 'Türkçe', + it: 'Italiano', nl: 'Nederlands', pl: 'Polski', + }; + return names[locale] || locale; +}; +const getLocaleDirection = (locale) => { + const rtlLocales = ['ar', 'he', 'fa', 'ur', 'yi', 'ps', 'sd', 'ug', 'dv', 'ku', 'syr']; + const short = locale.split('-')[0].toLowerCase(); + return rtlLocales.includes(short) ? 'rtl' : 'ltr'; +}; +const formatNumber = (number, options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, options).format(number); + } + catch (_) { + return String(number); + } +}; +const formatCurrency = (amount, currency = 'USD', options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, { style: 'currency', currency, ...options }).format(amount); + } + catch (_) { + return String(amount); + } +}; +const formatDate = (date, options = {}) => { + try { + const d = date instanceof Date ? date : new Date(date); + return new Intl.DateTimeFormat(currentLocale, options).format(d); + } + catch (_) { + return String(date); + } +}; +const addLocaleListener = (fn) => { + localeListeners.add(fn); + return () => { localeListeners.delete(fn); }; +}; +const removeLocaleListener = (fn) => { localeListeners.delete(fn); }; +const clearLocaleListeners = () => { localeListeners.clear(); }; +const notifyLocaleListeners = (locale) => { + localeListeners.forEach((fn) => { + try { + fn(locale); + } + catch (e) { + console.error('Locale listener error:', e); + } + }); +}; +const saveLocale = (locale) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-locale', locale); + } + catch (_) { } + } +}; +const loadLocale = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-locale') || getDefaultLocale(); + } + catch (_) { } + } + return getDefaultLocale(); +}; +const getDefaultLocale = () => { + if (typeof navigator !== 'undefined') { + const browserLocale = navigator.language || navigator.userLanguage; + if (browserLocale && isLocaleSupported(browserLocale)) + return browserLocale; + const short = browserLocale?.split('-')[0]; + if (short && isLocaleSupported(short)) + return short; + } + return fallbackLocale; +}; +const initI18n = () => { + const saved = loadLocale(); + setCurrentLocale(saved); +}; +const switchLocale = (locale) => { setCurrentLocale(locale); }; +const createInstanceI18n = (editor) => { + let instanceLocale = editor.config?.locale || currentLocale || 'zh-CN'; + const instanceT = (key, params = {}) => t(key, params, instanceLocale); + const set = (locale) => { + if (!locale || instanceLocale === locale) + return instanceLocale; + instanceLocale = locale; + if (editor.el) { + editor.el.setAttribute('lang', locale); + editor.el.setAttribute('dir', getLocaleDirection(locale)); + } + if (editor.textarea) { + editor.textarea.placeholder = instanceT('placeholder') || ''; + editor.textarea.setAttribute('aria-label', instanceT('edit') || ''); + editor.textarea.setAttribute('dir', getLocaleDirection(locale)); + } + if (typeof editor._emit === 'function') { + editor._emit('localeChange', { locale, direction: getLocaleDirection(locale) }); + } + if (editor.toolbarEl) { + editor.toolbarEl.querySelectorAll('.me-btn').forEach((btn) => { + const action = btn.dataset.action || btn.dataset.mode; + if (action) { + const label = instanceT(action); + if (label && label !== action) { + btn.title = label; + btn.setAttribute('aria-label', label); + } + } + }); + } + return instanceLocale; + }; + return { + set, get: () => instanceLocale, getDirection: () => getLocaleDirection(instanceLocale), t: instanceT, + formatNumber: (n, opts) => { try { + return new Intl.NumberFormat(instanceLocale, opts).format(n); + } + catch (_) { + return String(n); + } }, + formatDate: (d, opts) => { try { + return new Intl.DateTimeFormat(instanceLocale, opts).format(d instanceof Date ? d : new Date(d)); + } + catch (_) { + return String(d); + } }, + }; +}; +const createI18nManager = () => ({ + t, getCurrentLocale, setCurrentLocale, switchLocale, + getFallbackLocale: () => fallbackLocale, setFallbackLocale: (locale) => { fallbackLocale = locale; }, + hasTranslation, getTranslations, addTranslations, loadRemote, + getSupportedLocales, isLocaleSupported, getLocaleName, getLocaleDirection, + formatNumber, formatCurrency, formatDate, addLocaleListener, removeLocaleListener, clearLocaleListeners, + initI18n, saveLocale, loadLocale, getDefaultLocale, createInstanceI18n, +}); +({ + 'zh-CN': { name: '简体中文', nativeName: '简体中文', direction: 'ltr', translations: LOCALES['zh-CN'] }, + 'en-US': { name: 'English (US)', nativeName: 'English (US)', direction: 'ltr', translations: LOCALES['en-US'] }, + ja: { name: '日本語', nativeName: '日本語', direction: 'ltr', translations: LOCALES['ja'] }, + ko: { name: '한국어', nativeName: '한국어', direction: 'ltr', translations: LOCALES['ko'] }, + fr: { name: 'Français', nativeName: 'Français', direction: 'ltr', translations: LOCALES['fr'] }, + de: { name: 'Deutsch', nativeName: 'Deutsch', direction: 'ltr', translations: LOCALES['de'] }, +}); +const i18nUtils = createI18nManager(); + +/** + * MetonaEditor Parser — lightweight Markdown parser (TypeScript) + * @module parser + * @version 0.2.0 + */ +// ============ Precompiled regex ============ +const RE_EMPTY = /^\s*$/; +const RE_ATX = /^(#{1,6})\s+(.+?)(?:\s+#{1,6})?\s*$/; +const RE_SETEXT_H1 = /^={3,}\s*$/; +const RE_SETEXT_H2 = /^-{3,}\s*$/; +const RE_FENCE_START = /^(\s{0,3})(`{3,}|~{3,})\s*([\w+#.-]*)(\s+[^\n]*?)?\s*$/; +const RE_HR = /^\s{0,3}([-*_])(\s*\1){2,}\s*$/; +const RE_QUOTE = /^\s{0,3}>\s?/; +const RE_UL = /^(\s*)([-*+])\s/; +const RE_OL = /^(\s*)(\d+)\.\s/; +const RE_TASK = /^\[([ xX])\]\s+(.*)$/; +const RE_TABLE_SEP = /^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/; +const RE_INDENT_CODE = /^( {4}|\t)/; +const RE_DEF_LIST = /^:\s+/; +const RE_FOOTNOTE_DEF = /^\[\^([^\]]+)\]:\s*/; +// ============ Emoji map ============ +const EMOJI_MAP = { + smile: '😊', grinning: '😀', joy: '😂', rofl: '🤣', wink: '😉', blush: '😊', innocent: '😇', + heart_eyes: '😍', kissing_heart: '😘', yum: '😋', stuck_out_tongue: '😛', sunglasses: '😎', + smirk: '😏', unamused: '😒', disappointed: '😞', worried: '😟', confused: '😕', + cry: '😢', sob: '😭', scream: '😱', angry: '😠', rage: '💢', triumph: '😤', sleepy: '😪', + dizzy_face: '😵', zipper_mouth: '🤐', nerd: '🤓', thinking: '🤔', rolling_eyes: '🙄', + expressionless: '😑', thumbsup: '👍', thumbsdown: '👎', clap: '👏', pray: '🙏', muscle: '💪', + ok: '👌', point_up: '👆', point_down: '👇', point_left: '👈', point_right: '👉', + raised_hands: '🙌', wave: '👋', punch: '👊', crossed_fingers: '🤞', + heart: '❤️', broken_heart: '💔', star: '⭐', star2: '🌟', fire: '🔥', rocket: '🚀', + check: '✅', cross: '❌', warning: '⚠️', info: 'ℹ️', question: '❓', exclamation: '❗', + bangbang: '‼️', grey_exclamation: '❕', bulb: '💡', book: '📖', memo: '📝', pin: '📌', + link: '🔗', lock: '🔒', unlock: '🔓', key: '🔑', hammer: '🔨', wrench: '🔧', + gear: '⚙️', tools: '🛠️', magnet: '🧲', zap: '⚡', cloud: '☁️', + sun: '☀️', moon: '🌙', rain: '🌧️', snow: '❄️', umbrella: '☂️', rainbow: '🌈', + tornado: '🌪️', fog: '🌫️', droplet: '💧', + coffee: '☕', pizza: '🍕', cake: '🎂', beer: '🍺', wine: '🍷', + hamburger: '🍔', fries: '🍟', apple: '🍎', banana: '🍌', grapes: '🍇', + watermelon: '🍉', strawberry: '🍓', peach: '🍑', cherry: '🍒', taco: '🌮', + tada: '🎉', gift: '🎁', crown: '👑', gem: '💎', ring: '💍', + confetti: '🎊', balloon: '🎈', ribbon: '🎀', medal: '🏅', trophy: '🏆', + eye: '👁️', ear: '👂', nose: '👃', tongue: '👅', lips: '👄', + brain: '🧠', speech: '💬', thought: '💭', anger: '💢', sweat: '💦', + one: '1️⃣', two: '2️⃣', three: '3️⃣', four: '4️⃣', five: '5️⃣', + six: '6️⃣', seven: '7️⃣', eight: '8️⃣', nine: '9️⃣', zero: '0️⃣', + arrow_up: '⬆️', arrow_down: '⬇️', arrow_left: '⬅️', arrow_right: '➡️', + arrow_upper_right: '↗️', arrow_lower_right: '↘️', arrow_lower_left: '↙️', arrow_upper_left: '↖️', + computer: '💻', phone: '📱', battery: '🔋', electric_plug: '🔌', + copyright: '©️', registered: '®️', tm: '™️', hundred: '💯', boom: '💥', dash: '💨', + hole: '🕳️', bomb: '💣', email: '📧', phone2: '📞', clock: '🕐', hourglass: '⏳', + calendar: '📅', money: '💰', shopping: '🛒', package: '📦', mailbox: '📫', + art: '🎨', music: '🎵', movie: '🎬', game: '🎮', sport: '⚽', + earth: '🌍', house: '🏠', car: '🚗', airplane: '✈️', ship: '🚢', +}; +// ============ Render cache ============ +const renderCache = new Map(); +const MAX_CACHE_SIZE = 300; +const cachedRenderInline = (text, env) => { + if (!text) + return ''; + if (!env.highlight && text.length < 600) { + const cached = renderCache.get(text); + if (cached !== undefined) + return cached; + const result = renderInline(text, env); + if (renderCache.size >= MAX_CACHE_SIZE) { + const firstKey = renderCache.keys().next().value; + renderCache.delete(firstKey); + } + renderCache.set(text, result); + return result; + } + return renderInline(text, env); +}; +const clearRenderCache = () => { renderCache.clear(); }; +// ============ Security utils ============ +const safeUrl = (url) => { + if (!url) + return ''; + const u = String(url).trim(); + if (/^(javascript|vbscript|file):/i.test(u)) + return ''; + if (/^data:/i.test(u)) { + if (!/^data:image\//i.test(u)) + return ''; + if (u.length > 500000) + return ''; + } + return u; +}; +const slugify = (text) => { + let slug = String(text).normalize('NFKC').toLowerCase() + .replace(/[^\w\u4e00-\u9fff\u3400-\u4dbf\s-]/g, '') + .trim().replace(/\s+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, ''); + return slug || 'heading'; +}; +// ============ Block handler registry ============ +const blockHandlers = []; +const registerBlockHandler = (handler) => { + blockHandlers.push(handler); + blockHandlers.sort((a, b) => a.priority - b.priority); +}; +const isBlockStart = (line) => { + if (RE_EMPTY.test(line) || RE_FENCE_START.test(line) || RE_ATX.test(line)) + return true; + if (RE_HR.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return true; + if (RE_FOOTNOTE_DEF.test(line) || RE_DEF_LIST.test(line)) + return true; + if (/^\$\$/.test(line)) + return true; + return false; +}; +// Register all built-in block handlers +registerBlockHandler({ name: 'refDef', priority: 0.1, + test: (line) => { + // Must not match footnote definitions: [^id]: text + if (/^\[\^/.test(line)) + return null; + const m = line.match(/^\[([^\]]+)\]:\s*(?:<(\S+)>|(\S+))(?:\s+['"\(](.*?)['"\)])?\s*$/); + return m ? m : null; + }, + parse: (_lines, i, match, _tokens, _footnotes, refs) => { + const refId = match[1].toLowerCase(); + const url = match[2] || match[3] || ''; + const title = match[4] || ''; + if (url && refs) { + refs[refId] = JSON.stringify({ url, title }); + } + return { token: null, newIndex: i + 1 }; + }, +}); +registerBlockHandler({ name: 'blank', priority: 0, + test: (line) => RE_EMPTY.test(line) ? true : null, + parse: (_lines, i) => ({ token: null, newIndex: i + 1 }), +}); +registerBlockHandler({ name: 'fencedCode', priority: 1, + test: (line) => { + const m = line.match(RE_FENCE_START); + if (!m) + return null; + // Reject fences where the info string contains backticks (false positives like ``` `code` ```) + const rest = (m[4] || ''); + if (rest.includes('`')) + return null; + return m; + }, + parse: (lines, i, match) => { + const fenceChar = match[2][0]; + const fenceLen = match[2].length; + const lang = match[3] || ''; + const rest = (match[4] || '').trim(); + // Parse info string: first word is lang, rest are key=value or standalone flags + const infoParts = rest ? rest.split(/\s+/).filter(Boolean) : []; + const attrs = {}; + for (let p = 0; p < infoParts.length; p++) { + const kv = infoParts[p].split('='); + if (kv.length === 2) + attrs[kv[0]] = kv[1]; + else + attrs[infoParts[p]] = 'true'; + } + const codeLines = []; + let j = i + 1; + while (j < lines.length) { + const cm = lines[j].match(/^(\s{0,3})(`{3,}|~{3,})\s*$/); + if (cm && cm[2][0] === fenceChar && cm[2].length >= fenceLen) + break; + codeLines.push(lines[j]); + j++; + } + if (j < lines.length) + j++; + return { token: { type: 'code', lang, content: codeLines.join('\n'), attrs }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'indentedCode', priority: 2, + test: (line) => { + if (!RE_INDENT_CODE.test(line)) + return null; + if (RE_ATX.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return null; + return true; + }, + parse: (lines, i) => { + const codeLines = []; + while (i < lines.length && RE_INDENT_CODE.test(lines[i])) { + codeLines.push(lines[i].replace(/^( {4}|\t)/, '')); + i++; + } + if (codeLines.length) + return { token: { type: 'code', lang: '', content: codeLines.join('\n'), indent: true }, newIndex: i }; + return { token: null, newIndex: i }; + }, +}); +registerBlockHandler({ name: 'atxHeading', priority: 3, + test: (line) => line.match(RE_ATX), + parse: (_lines, i, match) => ({ + token: { type: 'heading', level: match[1].length, text: match[2] }, newIndex: i + 1, + }), +}); +registerBlockHandler({ name: 'setextH1', priority: 4, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H1.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 1, text: lines[i] }, newIndex: i + 2 }), +}); +registerBlockHandler({ name: 'setextH2', priority: 5, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H2.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 2, text: lines[i] }, newIndex: i + 2 }), +}); +registerBlockHandler({ name: 'hr', priority: 6, + test: (line) => RE_HR.test(line) ? true : null, + parse: (_lines, i) => ({ token: { type: 'hr' }, newIndex: i + 1 }), +}); +registerBlockHandler({ name: 'blockquote', priority: 7, + test: (line) => RE_QUOTE.test(line) ? true : null, + parse: (lines, i) => { + const quoteLines = []; + while (i < lines.length && RE_QUOTE.test(lines[i])) { + quoteLines.push(lines[i].replace(RE_QUOTE, '')); + i++; + } + return { token: { type: 'quote', content: quoteLines.join('\n') }, newIndex: i }; + }, +}); +registerBlockHandler({ name: 'table', priority: 8, + test: (line, lines, i) => { + if (!/\|/.test(line) || i + 1 >= lines.length) + return null; + if (!isTableSeparator(lines[i + 1])) + return null; + return { header: line, align: parseAlign(lines[i + 1]) }; + }, + parse: (lines, i, match) => { + let j = i + 2; + const rows = []; + while (j < lines.length && /\|/.test(lines[j]) && !RE_EMPTY.test(lines[j])) { + rows.push(lines[j]); + j++; + } + return { token: { type: 'table', header: match.header, rows, align: match.align }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'ul', priority: 9, + test: (line) => line.match(RE_UL), + parse: (lines, i, match) => { + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, false); + return { token: { type: 'ul', items }, newIndex: endIdx }; + }, +}); +registerBlockHandler({ name: 'ol', priority: 10, + test: (line) => line.match(RE_OL), + parse: (lines, i, match) => { + const start = parseInt(match[2], 10); + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, true); + return { token: { type: 'ol', items, start }, newIndex: endIdx }; + }, +}); +registerBlockHandler({ name: 'footnoteDef', priority: 11, + test: (line) => line.match(RE_FOOTNOTE_DEF), + parse: (lines, i, match, _tokens, footnotes) => { + const fnId = match[1]; + const fnContent = lines[i].slice(match[0].length); + const fnLines = [fnContent]; + let j = i + 1; + while (j < lines.length && !RE_EMPTY.test(lines[j]) && !isBlockStart(lines[j])) { + fnLines.push(lines[j]); + j++; + } + footnotes[fnId] = fnLines.join(' '); + return { token: null, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'defList', priority: 12, + test: (line) => RE_DEF_LIST.test(line) ? true : null, + parse: (lines, i, _match, tokens) => { + const term = (tokens.length > 0 && tokens[tokens.length - 1].type === 'paragraph') ? tokens.pop().text : ''; + const defs = [lines[i].replace(RE_DEF_LIST, '')]; + let j = i + 1; + while (j < lines.length && RE_DEF_LIST.test(lines[j])) { + defs.push(lines[j].replace(RE_DEF_LIST, '')); + j++; + } + return { token: { type: 'defList', term, defs }, newIndex: j }; + }, +}); +registerBlockHandler({ name: 'mathBlock', priority: 13, + test: (line) => /^\$\$/.test(line) ? true : null, + parse: (lines, i) => { + const single = lines[i].match(/^\$\$([\s\S]+?)\$\$\s*$/); + if (single) + return { token: { type: 'mathBlock', content: single[1] }, newIndex: i + 1 }; + const mathLines = [lines[i].replace(/^\$\$/, '')]; + let j = i + 1; + while (j < lines.length && !/\$\$/.test(lines[j])) { + mathLines.push(lines[j]); + j++; + } + if (j < lines.length) { + mathLines.push(lines[j].replace(/\$\$\s*$/, '')); + j++; + } + return { token: { type: 'mathBlock', content: mathLines.join('\n') }, newIndex: j }; + }, +}); +// ============ Block parsing ============ +const parseTokens = (md) => { + if (md == null) + return { tokens: [], footnotes: {}, refs: {} }; + const text = String(md).replace(/\r\n?/g, '\n'); + const lines = text.split('\n'); + const tokens = []; + const footnotes = {}; + const refs = {}; + let i = 0; + while (i < lines.length) { + const line = lines[i]; + let handled = false; + for (const handler of blockHandlers) { + const match = handler.test(line, lines, i); + if (match !== null && match !== false) { + const result = handler.parse(lines, i, match, tokens, footnotes, refs); + if (result.token) + tokens.push(result.token); + i = result.newIndex; + handled = true; + break; + } + } + if (handled) + continue; + // Paragraph fallback + const para = []; + while (i < lines.length) { + const l = lines[i]; + if (RE_EMPTY.test(l)) + break; + if (isBlockStart(l)) + break; + if (i + 1 < lines.length && (RE_SETEXT_H1.test(lines[i + 1]) || RE_SETEXT_H2.test(lines[i + 1]))) + break; + if (/\|/.test(l) && i + 1 < lines.length && isTableSeparator(lines[i + 1])) + break; + para.push(l); + i++; + } + if (para.length) + tokens.push({ type: 'paragraph', text: para.join('\n') }); + } + return { tokens, footnotes, refs }; +}; +// ============ Token rendering ============ +const renderTokens = (tokens, env = {}, footnotes = {}) => { + let html = tokens.map((tok) => renderToken(tok, env)).join('\n'); + const fnIds = Object.keys(footnotes); + if (fnIds.length) { + html += '\n

      '; + fnIds.forEach((id) => { + html += `
    1. ${cachedRenderInline(footnotes[id], env)}
    2. `; + }); + html += '
    '; + } + return html; +}; +const parseMarkdown = (md, env = {}) => { + const { tokens, footnotes, refs } = parseTokens(md); + return renderTokens(tokens, { ...env, refs }, footnotes); +}; +// ============ List parsing ============ +const parseList = (lines, startIdx, marker, baseIndent, isOl, olStart) => { + const items = []; + let i = startIdx; + const itemIndent = baseIndent + (isOl ? String(marker).length + 2 : 2); + while (i < lines.length) { + const line = lines[i]; + let itemMatch; + if (isOl) { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})\\d+\\.\\s`)); + if (!itemMatch) + break; + } + else { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})[-*+]\\s`)); + if (!itemMatch) + break; + } + let raw = line.slice(itemMatch[0].length); + const task = raw.match(RE_TASK); + let content = task ? task[2] : raw; + const checked = task ? task[1].toLowerCase() === 'x' : false; + const isTask = !!task; + i++; + const subContent = []; + const subTokens = []; + while (i < lines.length) { + const cl = lines[i]; + if (RE_EMPTY.test(cl)) { + let peek = i + 1; + while (peek < lines.length && RE_EMPTY.test(lines[peek])) + peek++; + if (peek < lines.length) { + const pl = lines[peek]; + const isCont = pl.length > itemIndent && pl[itemIndent] !== ' ' + ? false : new RegExp(`^\\s{${itemIndent},}`).test(pl); + if (isCont) { + subContent.push(''); + i++; + continue; + } + } + break; + } + if (isOl) { + if (new RegExp(`^(\\s{0,${baseIndent}})\\d+\\.\\s`).test(cl)) + break; + } + else { + if (new RegExp(`^(\\s{0,${baseIndent}})[-*+]\\s`).test(cl)) + break; + } + if (RE_QUOTE.test(cl) || RE_ATX.test(cl) || RE_HR.test(cl) || RE_FOOTNOTE_DEF.test(cl)) + break; + const nUl = cl.match(new RegExp(`^(\\s{${itemIndent},})([-*+])\\s`)); + const nOl = cl.match(new RegExp(`^(\\s{${itemIndent},})(\\d+)\\.\\s`)); + if (nUl || nOl) { + const isNOl = !!nOl; + const nM = isNOl ? nOl[2] : nUl[2]; + const nI = isNOl ? nOl[1].length : nUl[1].length; + const nS = isNOl ? parseInt(nOl[2], 10) : undefined; + const nested = parseList(lines, i, nM, nI, isNOl); + subTokens.push({ type: isNOl ? 'ol' : 'ul', items: nested.items, start: nS }); + i = nested.endIdx; + continue; + } + if (cl.length > itemIndent && cl.slice(0, itemIndent).trim() === '') { + subContent.push(cl.slice(itemIndent)); + } + else { + subContent.push(cl); + } + i++; + } + if (subContent.length) { + content = content ? content + '\n' + subContent.join('\n') : subContent.join('\n'); + } + items.push({ type: 'listItem', text: content, checked, task: isTask, subTokens: subTokens.length ? subTokens : undefined }); + } + return { items, endIdx: i }; +}; +// ============ Table utils ============ +const isTableSeparator = (line) => RE_TABLE_SEP.test(line) && /-/.test(line); +const parseAlign = (line) => { + const cells = line.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + return cells.map((c) => { + if (/^:/.test(c) && /:$/.test(c)) + return 'center'; + if (/:$/.test(c)) + return 'right'; + if (/^:/.test(c)) + return 'left'; + return 'left'; + }); +}; +// ============ Token renderer ============ +const renderToken = (tok, env, footnotes) => { + switch (tok.type) { + case 'heading': { + const id = slugify(tok.text); + return `${cachedRenderInline(tok.text, env)}`; + } + case 'paragraph': return `

    ${cachedRenderInline(tok.text, env)}

    `; + case 'hr': return '
    '; + case 'quote': return `
    ${parseMarkdown(tok.content, env)}
    `; + case 'code': return renderCode(tok.content, tok.lang, env, tok.attrs); + case 'ul': return `
      ${tok.items.map((it) => renderListItem(it, env)).join('')}
    `; + case 'ol': { + const sn = tok.start || 1; + const sa = sn > 1 ? ` start="${sn}"` : ''; + const body = tok.items.map((it, idx) => renderListItem(it, env, sn > 1 ? idx + sn : undefined)).join(''); + return `${body}`; + } + case 'table': return renderTable(tok, env); + case 'defList': { + let h = '
    '; + h += `
    ${cachedRenderInline(tok.term, env)}
    `; + tok.defs.forEach((d) => { h += `
    ${cachedRenderInline(d, env)}
    `; }); + return h + '
    '; + } + case 'mathBlock': return `
    ${escapeHTML(tok.content)}
    `; + default: { + // Fallback: render unknown block types as styled div + const typeClass = `me-block-${tok.type}`; + const content = tok.content ? (typeof tok.content === 'string' ? cachedRenderInline(tok.content, env) : escapeHTML(String(tok.content))) : ''; + return `
    ${content}
    `; + } + } +}; +const renderListItem = (it, env, idx) => { + if (it.task) { + const checked = it.checked ? ' checked' : ''; + let h = `
  • ${cachedRenderInline(it.text, env)}`; + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; + } + let h = idx != null ? `
  • ` : '
  • '; + h += cachedRenderInline(it.text, env); + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; +}; +const renderCode = (code, lang, env, attrs) => { + if (lang === 'mermaid') + return `
    ${escapeHTML(code)}
    `; + const langClass = lang ? ` class="language-${escapeHTML(lang)}"` : ''; + const titleHtml = attrs?.title ? `
    ${escapeHTML(attrs.title)}
    ` : ''; + if (env.highlight && typeof env.highlight === 'function' && lang) { + try { + const highlighted = env.highlight(code, lang); + if (typeof highlighted === 'string') + return `${titleHtml}
    ${highlighted}
    `; + } + catch (e) { + console.error('MeEditor highlight error:', e); + } + } + return `${titleHtml}
    ${escapeHTML(code)}
    `; +}; +const renderTable = (tok, env) => { + // Split respecting backslash-escaped pipes + const splitRow = (r) => { + const cells = []; + let current = ''; + let escaped = false; + for (let i = 0; i < r.length; i++) { + const ch = r[i]; + if (escaped) { + current += ch; + escaped = false; + } + else if (ch === '\\') { + escaped = true; + } + else if (ch === '|') { + cells.push(current.trim()); + current = ''; + } + else { + current += ch; + } + } + cells.push(current.trim()); + // Remove leading/trailing empty cells from outer pipes + if (cells.length > 0 && cells[0] === '') + cells.shift(); + if (cells.length > 0 && cells[cells.length - 1] === '') + cells.pop(); + return cells; + }; + const headers = splitRow(tok.header); + const align = tok.align || []; + const as = (i) => align[i] && align[i] !== 'left' ? ` style="text-align:${align[i]}"` : ''; + let h = '
    '; + h += headers.map((hd, i) => `${cachedRenderInline(hd, env)}`).join(''); + h += ''; + h += tok.rows.map((r) => { + const cells = splitRow(r); + return `${cells.map((c, i) => `${cachedRenderInline(c, env)}`).join('')}`; + }).join(''); + return h + '
    '; +}; +// ============ Inline rendering ============ +const renderInline = (text, env) => { + if (!text) + return ''; + const codes = []; + let s = extractInlineCodes(text, codes); + const protectedItems = []; + s = s.replace(/&(?:[a-zA-Z][a-zA-Z0-9]{1,31}|#\d{1,7}|#x[0-9a-fA-F]{1,6});/g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = s.replace(//g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = escapeHTML(s); + s = s.replace(/\u0005(\d+)\u0005/g, (_m, idx) => protectedItems[+idx] || _m); + s = scanInline(s, codes, env); + s = s.replace(/\u0000(\d+)\u0000/g, (_m, idx) => { + const code = codes[+idx]; + if (!code) + return _m; + return `${escapeHTML(code.content)}`; + }); + s = s.replace(/:([\w+-]+):/g, (m, name) => EMOJI_MAP[name] || m); + s = s.replace(/ \n/g, '
    \n'); + s = s.replace(/\n/g, '
    '); + return s; +}; +const extractInlineCodes = (text, codes) => { + let result = ''; + let i = 0; + while (i < text.length) { + if (text[i] === '`') { + let startLen = 1; + while (i + startLen < text.length && text[i + startLen] === '`') + startLen++; + let j = i + startLen; + let found = false; + while (j < text.length) { + const nextTick = text.indexOf('`', j); + if (nextTick === -1) + break; + let endLen = 1; + while (nextTick + endLen < text.length && text[nextTick + endLen] === '`') + endLen++; + if (endLen === startLen) { + const content = text.slice(i + startLen, nextTick); + codes.push({ content, len: startLen }); + result += `\u0000${codes.length - 1}\u0000`; + i = nextTick + endLen; + found = true; + break; + } + j = nextTick + endLen; + } + if (!found) { + result += text.slice(i, i + startLen); + i += startLen; + } + } + else { + result += text[i]; + i++; + } + } + return result; +}; +const INLINE_RE = new RegExp([ + '(\\*\\*\\*[^*\\n][^*\\n]*?\\*\\*\\*)', + '|(___[^_\\n][^_\\n]*?___)', + '|(!\\[[^\\]]*\\]\\([^)]+\\))', + '|(? { + const placeholderMap = new Map(); + s = s.replace(/\u0000\d+\u0000/g, (m) => { + const key = `\u0003${placeholderMap.size}\u0003`; + placeholderMap.set(key, m); + return key; + }); + s = s.replace(INLINE_RE, (fullMatch) => { + const match = fullMatch; + if (match.startsWith('***')) + return `${match.slice(3, -3)}`; + if (match.startsWith('___')) + return `${match.slice(3, -3)}`; + if (match.startsWith('![') && match.includes('](')) { + const m = match.match(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return escapeHTML(match); + const t = m[3] ? ` title="${m[3]}"` : ''; + return `${m[1]}`; + } + if (match.startsWith('![') && match.includes('][')) { + const m = match.match(/!\[([^\]]*)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return `${m[1]}`; + } + } + return `${m[1]}`; + } + if (match.startsWith('[') && match.includes('](')) { + const m = match.match(/\[([^\]]+)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return match; + const t = m[3] ? ` title="${m[3]}"` : ''; + const linkText = renderInline(m[1], env); + return `${linkText}`; + } + if (match.startsWith('[') && match.includes('][')) { + const m = match.match(/\[([^\]]+)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return escapeHTML(match); + } + } + return escapeHTML(match); + } + if (match.startsWith('<http')) { + const url = match.slice(4, -4); + const u = safeUrl(url); + return `${url}`; + } + if (match.startsWith('**')) + return `${match.slice(2, -2)}`; + if (match.startsWith('__')) + return `${match.slice(2, -2)}`; + if (match.startsWith('~~')) + return `${match.slice(2, -2)}`; + if (match.startsWith('==')) + return `${match.slice(2, -2)}`; + if (match.startsWith('*') && !match.startsWith('**') && !match.startsWith('***')) + return `${match.slice(1, -1)}`; + if (match.startsWith('_') && !match.startsWith('__') && !match.startsWith('___')) + return `${match.slice(1, -1)}`; + if (match.startsWith('^') && !match.startsWith('^^')) + return `${match.slice(1, -1)}`; + if (match.startsWith('~') && !match.startsWith('~~')) + return `${match.slice(1, -1)}`; + if (match.startsWith('$') && !match.startsWith('$$')) + return `${escapeHTML(match.slice(1, -1))}`; + if (/^\[\^/.test(match)) { + const fnId = match.slice(2, -1); + return `[${fnId}]`; + } + if (match.startsWith('\\') && match.length === 2) { + const escaped = match[1]; + if (/[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]/.test(escaped)) + return escaped; + return match; + } + return match; + }); + s = s.replace(/\u0003(\d+)\u0003/g, (m) => placeholderMap.get(m) || m); + return s; +}; + +/** + * MetonaEditor Plugins — plugin system v2 + * @module plugins + * @version 0.2.0 + */ +// ============ Plugin Manager ============ +class PluginManager { + constructor() { + this.plugins = new Map(); + } + register(name, plugin) { + if (this.plugins.has(name)) { + console.warn(`MeEditor: plugin "${name}" already registered`); + return this; + } + if (!plugin || typeof plugin !== 'object' || (!plugin.name && !name)) { + console.error(`MeEditor: invalid plugin "${name}"`); + return this; + } + this.plugins.set(name, { + version: plugin.version || '0.0.0', description: plugin.description || '', + depends: plugin.depends || [], priority: plugin.priority || 0, + ...plugin, name, enabled: true, + }); + return this; + } + unregister(name) { this.plugins.delete(name); return this; } + get(name) { return this.plugins.get(name) || null; } + has(name) { return this.plugins.has(name); } + getAll() { return Array.from(this.plugins.values()); } + getNames() { return Array.from(this.plugins.keys()); } + enable(name) { const p = this.plugins.get(name); if (p) + p.enabled = true; return this; } + disable(name) { const p = this.plugins.get(name); if (p) + p.enabled = false; return this; } + isEnabled(name) { const p = this.plugins.get(name); return p ? p.enabled : false; } + destroy() { this.plugins.clear(); } +} +const defaultPluginManager = new PluginManager(); +// ============ Topological sort ============ +const topologicalSort = (plugins) => { + const map = new Map(); + plugins.forEach((p) => map.set(p.name, p)); + const inDegree = new Map(); + const adj = new Map(); + plugins.forEach((p) => { inDegree.set(p.name, 0); adj.set(p.name, []); }); + plugins.forEach((p) => { + (p.depends || []).forEach((dep) => { + if (map.has(dep)) { + adj.get(dep).push(p.name); + inDegree.set(p.name, (inDegree.get(p.name) || 0) + 1); + } + else { + console.warn(`MeEditor: plugin "${p.name}" depends on unknown "${dep}"`); + } + }); + }); + const queue = []; + inDegree.forEach((deg, name) => { if (deg === 0) + queue.push(name); }); + const sorted = []; + while (queue.length) { + queue.sort((a, b) => ((map.get(b).priority || 0) - (map.get(a).priority || 0))); + const name = queue.shift(); + sorted.push(map.get(name)); + (adj.get(name) || []).forEach((n) => { inDegree.set(n, inDegree.get(n) - 1); if (inDegree.get(n) === 0) + queue.push(n); }); + } + if (sorted.length !== plugins.length) { + console.warn('MeEditor: circular dependency detected, falling back to original order'); + return plugins; + } + return sorted; +}; +// ============ Config validation ============ +const validateConfig = (schema = {}, config = {}) => { + const errors = []; + const patched = { ...config }; + for (const [key, rule] of Object.entries(schema)) { + const val = config[key]; + if (rule.required && (val === undefined || val === null)) { + errors.push(`"${key}" is required`); + continue; + } + if (val === undefined && rule.default !== undefined) { + patched[key] = rule.default; + continue; + } + if (val !== undefined && rule.type) { + const actual = Array.isArray(val) ? 'array' : typeof val; + if (actual !== rule.type) + errors.push(`"${key}" expected ${rule.type}, got ${actual}`); + } + if (val !== undefined && rule.enum && !rule.enum.includes(val)) + errors.push(`"${key}" must be one of [${rule.enum.join(', ')}]`); + if (val !== undefined && typeof rule.validator === 'function') { + try { + const r = rule.validator(val); + if (r !== true) + errors.push(`"${key}": ${r}`); + } + catch (e) { + errors.push(`"${key}": ${e.message}`); + } + } + } + return { valid: errors.length === 0, errors, patched }; +}; +// ============ Preset plugins ============ +const escapeAttr = (s) => String(s == null ? '' : s).replace(/&/g, '&').replace(/"/g, '"').replace(//g, '>'); +const autoSavePlugin = { + name: 'autoSave', version: '0.1.1', description: 'Auto-save to localStorage', priority: 100, + install(editor, options) { + if (!editor || typeof editor.getValue !== 'function') + return; + const opts = options || this; + const key = opts.key || ('me-draft-' + (editor.id || '')); + const delay = opts.delay || 1000; + const state = { _timer: null }; + const save = () => { + if (state._timer) { + clearTimeout(state._timer); + state._timer = null; + } + try { + localStorage.setItem(key, editor.getValue()); + if (typeof editor._emit === 'function') + editor._emit('autosave', { key, value: editor.getValue() }); + } + catch (e) { + console.warn('MeEditor autoSave:', e); + } + }; + const _onInput = () => { if (state._timer) + clearTimeout(state._timer); state._timer = setTimeout(save, delay); }; + const _onBlur = save; + const _onSave = save; + editor.on('change', _onInput); + editor.on('blur', _onBlur); + editor.on('save', _onSave); + editor.restoreDraft = () => { try { + const v = localStorage.getItem(key); + if (v != null) + editor.setValue(v); + return v; + } + catch (_) { + return null; + } }; + editor.clearDraft = () => { try { + localStorage.removeItem(key); + } + catch (_) { } return editor; }; + editor.getDraftKey = () => key; + editor.__autoSaveCleanup = { state, _onInput, _onBlur, _onSave, save }; + }, + destroy(editor) { + const cleanup = editor.__autoSaveCleanup; + if (cleanup) { + if (cleanup.state._timer) { + clearTimeout(cleanup.state._timer); + cleanup.state._timer = null; + } + if (editor && typeof editor.off === 'function') { + if (cleanup._onInput) + editor.off('change', cleanup._onInput); + if (cleanup._onBlur) + editor.off('blur', cleanup._onBlur); + if (cleanup._onSave) + editor.off('save', cleanup._onSave); + } + delete editor.__autoSaveCleanup; + } + }, +}; +const exportToolPlugin = { + name: 'exportTool', version: '0.1.0', description: 'Export Markdown/HTML', priority: 50, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const download = (filename, content, mime) => { + if (typeof document === 'undefined') + return; + const blob = new Blob([content], { type: mime + ';charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(() => URL.revokeObjectURL(url), 0); + }; + const stamp = () => { const d = new Date(); const pad = (n) => String(n).padStart(2, '0'); return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}`; }; + editor.exportMarkdown = (filename) => { download(filename || `metona-${stamp()}.md`, editor.getValue(), 'text/markdown'); return editor; }; + editor.exportHTML = (filename, opts = {}) => { + const title = opts.title || 'Document'; + const css = opts.css || ''; + const body = typeof editor.getHTML === 'function' ? editor.getHTML() : ''; + // Build minimal embedded CSS for the exported HTML + const embedCSS = opts.embedCSS !== false ? `` : ''; + download(filename || `metona-${stamp()}.html`, `\n\n\n\n\n${title}\n${css ? `` : ''}${embedCSS}\n\n\n${body}\n\n`, 'text/html'); + return editor; + }; + }, + destroy() { }, +}; +const searchReplacePlugin = { + name: 'searchReplace', version: '0.2.0', description: 'Search & Replace (Ctrl+F/H)', priority: 80, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + // Inject style once globally + if (!document.getElementById('me-search-style')) { + const style = document.createElement('style'); + style.id = 'me-search-style'; + style.textContent = `.me-search{position:absolute;top:8px;right:12px;z-index:20;display:flex;flex-direction:column;gap:6px;padding:8px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);font-size:13px;min-width:280px}.me-search-row{display:flex;gap:4px;align-items:center}.me-search input{flex:1;min-width:0;padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));border-radius:4px;background:var(--md-textarea-bg,#fff);color:var(--md-text,#1f2937);font-size:13px}.me-search input:focus{outline:none;border-color:var(--md-accent,#3b82f6)}.me-search button{padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));background:var(--md-bg,#fff);color:var(--md-text,#1f2937);border-radius:4px;cursor:pointer;font-size:12px;line-height:1}.me-search button:hover{background:var(--md-accent,#3b82f6);color:#fff;border-color:var(--md-accent,#3b82f6)}.me-search .me-search-count{color:var(--md-muted,#6b7280);font-size:12px;min-width:60px;text-align:center}.me-search .me-search-close{padding:2px 6px}`; + document.head.appendChild(style); + } + const state = { + _panel: null, + _regexMode: false, + _cleanup: null, + }; + const _updateReplaceVisible = () => { + if (!state._panel) + return; + const show = state._panel.dataset.replace === '1'; + const row = state._panel.querySelector('.me-search-replace-row'); + if (row) + row.style.display = show ? 'flex' : 'none'; + }; + const _close = () => { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + if (editor && editor.textarea) + editor.textarea.focus(); + }; + const _open = (showReplace) => { + if (state._panel) { + state._panel.dataset.replace = showReplace ? '1' : '0'; + _updateReplaceVisible(); + const inp = state._panel.querySelector('.me-search-find'); + if (inp) { + inp.focus(); + inp.select(); + } + return; + } + const selected = editor.textarea.value.substring(editor.textarea.selectionStart, editor.textarea.selectionEnd); + const panel = document.createElement('div'); + panel.className = 'me-search'; + panel.dataset.replace = showReplace ? '1' : '0'; + panel.innerHTML = `
    `; + editor.el.appendChild(panel); + state._panel = panel; + _updateReplaceVisible(); + state._regexMode = false; + const fi = panel.querySelector('.me-search-find'); + const ri = panel.querySelector('.me-search-replace'); + const ce = panel.querySelector('.me-search-count'); + const regexBtn = panel.querySelector('.me-search-regex'); + regexBtn.addEventListener('click', () => { + state._regexMode = !state._regexMode; + regexBtn.classList.toggle('me-active', state._regexMode); + lastIdxs = findAll(); + }); + const findAll = () => { + const q = fi.value; + if (!q) { + ce.textContent = ''; + return []; + } + const idxs = []; + let from = 0; + if (state._regexMode) { + try { + const re = new RegExp(q, 'g'); + let m; + while ((m = re.exec(editor.textarea.value)) !== null) { + idxs.push(m.index); + if (m[0].length === 0) + re.lastIndex++; + } + } + catch (_) { + ce.textContent = 'err'; + return []; + } + } + else { + while (true) { + const idx = editor.textarea.value.indexOf(q, from); + if (idx === -1) + break; + idxs.push(idx); + from = idx + q.length; + } + } + ce.textContent = idxs.length ? `${idxs.length}` : '0'; + return idxs; + }; + let lastIdxs = []; + const selectAt = (idx, len) => { + editor.textarea.focus(); + editor.textarea.setSelectionRange(idx, idx + (len || fi.value.length)); + }; + const findNext = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionEnd; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(cur)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let next = lastIdxs.find((i) => i >= cur); + if (next == null) + next = lastIdxs[0]; + selectAt(next, qlen); + }; + const findPrev = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionStart; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(Math.max(0, cur - 100), cur + 100)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let prev = -1; + for (let i = lastIdxs.length - 1; i >= 0; i--) { + if (lastIdxs[i] < cur) { + prev = lastIdxs[i]; + break; + } + } + if (prev === -1) + prev = lastIdxs[lastIdxs.length - 1]; + selectAt(prev, qlen); + }; + const replaceOne = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + const s = ta.selectionStart, e = ta.selectionEnd; + const matchText = ta.value.substring(s, e); + if (state._regexMode) { + try { + if (new RegExp(q).test(matchText)) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + } + catch (_) { } + } + else if (matchText === q) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findNext(); + }; + const replaceAll = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + if (state._regexMode) { + try { + ta.value = ta.value.replace(new RegExp(q, 'g'), r); + } + catch (_) { + return; + } + } + else { + ta.value = ta.value.split(q).join(r); + } + ta.setSelectionRange(0, 0); + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findAll(); + }; + fi.addEventListener('input', () => { lastIdxs = findAll(); }); + fi.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + e.shiftKey ? findPrev() : findNext(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + ri.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + replaceOne(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + panel.querySelector('.me-search-next').addEventListener('click', findNext); + panel.querySelector('.me-search-prev').addEventListener('click', findPrev); + panel.querySelector('.me-search-close').addEventListener('click', () => _close()); + panel.querySelector('.me-search-replace-one').addEventListener('click', replaceOne); + panel.querySelector('.me-search-replace-all').addEventListener('click', replaceAll); + fi.focus(); + fi.select(); + state._cleanup = () => { if (panel.parentNode) + panel.parentNode.removeChild(panel); }; + }; + const _onKeydown = (e) => { + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const k = e.key.toLowerCase(); + if (k === 'f') { + e.preventDefault(); + _open(false); + } + else if (k === 'h') { + e.preventDefault(); + _open(true); + } + else if (k === 'escape' && state._panel) { + _close(); + } + }; + editor.textarea.addEventListener('keydown', _onKeydown); + // Expose for tests + editor.__srState = state; + editor.__srOpen = _open; + editor.__srClose = _close; + editor.__srKeydown = _onKeydown; + }, + destroy(editor) { + const state = editor.__srState; + if (state) { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + } + const _onKeydown = editor.__srKeydown; + if (_onKeydown && editor && editor.textarea) { + editor.textarea.removeEventListener('keydown', _onKeydown); + } + delete editor.__srState; + delete editor.__srOpen; + delete editor.__srClose; + delete editor.__srKeydown; + }, +}; +const imagePastePlugin = { + name: 'imagePaste', version: '0.2.0', description: 'Paste image as base64', priority: 60, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + const _onPaste = (e) => { + const items = e.clipboardData?.items; + if (!items) + return; + for (const item of items) { + if (item.type?.startsWith('image/')) { + e.preventDefault(); + const reader = new FileReader(); + reader.onload = () => { editor.insert(`![image-${Date.now().toString(36)}.png](${reader.result})\n`); }; + reader.readAsDataURL(item.getAsFile()); + break; + } + } + }; + editor.textarea.addEventListener('paste', _onPaste); + editor.__ipOnPaste = _onPaste; + }, + destroy(editor) { + const _onPaste = editor.__ipOnPaste; + if (_onPaste && editor?.textarea) + editor.textarea.removeEventListener('paste', _onPaste); + delete editor.__ipOnPaste; + }, +}; +const shortcutHelpPlugin = { + name: 'shortcutHelp', version: '0.2.0', description: 'Press ? to show shortcuts', priority: 200, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + if (!document.getElementById('me-shortcut-style')) { + const s = document.createElement('style'); + s.id = 'me-shortcut-style'; + s.textContent = `.me-shortcut-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:50;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center}.me-shortcut-panel{background:var(--md-bg,#fff);border-radius:12px;padding:24px;max-width:560px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px rgba(0,0,0,0.3)}.me-shortcut-panel h3{font-size:16px;margin:0 0 16px;color:var(--md-text)}.me-shortcut-panel table{width:100%;border-collapse:collapse;font-size:13px}.me-shortcut-panel td{padding:6px 10px;border-bottom:1px solid var(--md-border)}.me-shortcut-panel td:first-child{font-family:var(--md-mono);font-size:12px;color:var(--md-accent);white-space:nowrap;width:40%}.me-shortcut-panel .me-shortcut-close{position:absolute;top:16px;right:20px;background:none;border:none;font-size:20px;cursor:pointer;color:var(--md-muted)}`; + document.head.appendChild(s); + } + let _panel = null; + const _close = () => { if (_panel) { + _panel.remove(); + _panel = null; + } }; + const _open = () => { + if (_panel) { + _close(); + return; + } + // i18n-aware shortcut labels + const builtin = [ + ['Ctrl+B', t('bold') || 'Bold'], ['Ctrl+I', t('italic') || 'Italic'], + ['Ctrl+U', t('underline') || 'Underline'], ['Ctrl+K', t('link') || 'Link'], + ['Ctrl+E', t('code') || 'Code'], ['Ctrl+1/2/3', t('h1') || 'Heading'], + ['Ctrl+Q', t('quote') || 'Quote'], ['Ctrl+Z', t('undo') || 'Undo'], + ['Ctrl+Y', t('redo') || 'Redo'], ['Ctrl+S', t('save') || 'Save'], + ['Ctrl+F', t('search') || 'Search'], ['Ctrl+H', t('replace') || 'Replace'], + ['Tab', t('indent') || 'Indent'], ['Shift+Tab', t('outdent') || 'Outdent'], + ['?', t('close') || 'Shortcuts'], + ]; + let rows = ''; + builtin.forEach(([c, d]) => { rows += `${c}${d}`; }); + const overlay = document.createElement('div'); + overlay.className = 'me-shortcut-overlay'; + overlay.innerHTML = `

    ⌨️ ${t('close') || 'Shortcuts'}

    ${rows}
    `; + overlay.addEventListener('click', (e) => { if (e.target === overlay || e.target.classList.contains('me-shortcut-close')) + _close(); }); + document.body.appendChild(overlay); + _panel = overlay; + }; + const _onKeydown = (e) => { + if (e.key === '?' && !e.ctrlKey && !e.metaKey && !e.altKey) { + e.preventDefault(); + _open(); + } + if (e.key === 'Escape' && _panel) + _close(); + }; + editor.textarea.addEventListener('keydown', _onKeydown); + editor.__shState = { _panel, _open, _close, _onKeydown }; + }, + destroy(editor) { + const state = editor.__shState; + if (state) { + if (state._panel) { + state._panel.remove(); + } + } + const _onKeydown = editor.__shState?._onKeydown; + if (_onKeydown && editor?.textarea) + editor.textarea.removeEventListener('keydown', _onKeydown); + delete editor.__shState; + }, +}; +const fileSystemPlugin = { + name: 'fileSystem', version: '0.2.0', description: 'File System Access API', priority: 90, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const hasAPI = typeof window !== 'undefined' && typeof window.showOpenFilePicker === 'function'; + let _fileHandle = null; + editor.openFile = async (opts = {}) => { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return null; + } + try { + const [handle] = await window.showOpenFilePicker({ types: [{ accept: { 'text/markdown': ['.md', '.txt', '.markdown'] } }], ...opts }); + _fileHandle = handle; + const file = await handle.getFile(); + const content = await file.text(); + editor.setValue(content); + editor._emit?.('fileOpened', { name: file.name, handle }); + return { name: file.name, content, handle }; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Open file error:', e); + return null; + } + }; + editor.saveFile = async (opts = {}) => { + let handle = _fileHandle; + if (!handle || opts.saveAs) { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return false; + } + try { + handle = await window.showSaveFilePicker({ types: [{ accept: { 'text/markdown': ['.md'] } }], suggestedName: opts.name || 'document.md' }); + _fileHandle = handle; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Save error:', e); + return false; + } + } + try { + const w = await handle.createWritable(); + await w.write(editor.getValue()); + await w.close(); + editor._emit?.('fileSaved', { handle }); + return true; + } + catch (e) { + _fileHandle = null; + if (!opts.saveAs) + return editor.saveFile({ ...opts, saveAs: true }); + console.error('Write error:', e); + return false; + } + }; + editor.saveFileAs = (name) => editor.saveFile({ saveAs: true, name }); + editor.getFileHandle = () => _fileHandle; + editor.__fsCleanup = { getHandle: () => _fileHandle }; + }, + destroy(editor) { + if (editor) { + delete editor.openFile; + delete editor.saveFile; + delete editor.saveFileAs; + delete editor.getFileHandle; + } + delete editor.__fsCleanup; + }, +}; +// ============ Preset plugins table ============ +const presetPlugins = { + autoSave: autoSavePlugin, exportTool: exportToolPlugin, searchReplace: searchReplacePlugin, + imagePaste: imagePastePlugin, shortcutHelp: shortcutHelpPlugin, fileSystem: fileSystemPlugin, +}; +// ============ Plugin utils ============ +const pluginUtils = { + createManager: () => new PluginManager(), + manager: defaultPluginManager, + register: (name, plugin) => defaultPluginManager.register(name, plugin), + unregister: (name) => defaultPluginManager.unregister(name), + get: (name) => defaultPluginManager.get(name), + has: (name) => defaultPluginManager.has(name), + getAll: () => defaultPluginManager.getAll(), + getNames: () => defaultPluginManager.getNames(), + enable: (name) => defaultPluginManager.enable(name), + disable: (name) => defaultPluginManager.disable(name), + isEnabled: (name) => defaultPluginManager.isEnabled(name), + getPreset: (name) => presetPlugins[name] ? { ...presetPlugins[name] } : null, + getAllPresets: () => Object.keys(presetPlugins).reduce((acc, k) => { acc[k] = { ...presetPlugins[k] }; return acc; }, {}), + createPlugin: (config = {}) => { + const result = { name: config.name || 'custom', version: config.version || '0.0.0', description: config.description || '', depends: config.depends || [], priority: config.priority || 0, install: () => { }, destroy: () => { }, ...config }; + if (typeof result.install !== 'function') + result.install = () => { }; + if (typeof result.destroy !== 'function') + result.destroy = () => { }; + return result; + }, + validatePlugin: (plugin) => { + const errors = []; + if (!plugin || typeof plugin !== 'object') + errors.push('plugin must be an object'); + if (plugin && !plugin.name) + errors.push('plugin must have a name'); + if (plugin && plugin.install && typeof plugin.install !== 'function') + errors.push('install must be a function'); + return { valid: errors.length === 0, errors }; + }, + topologicalSort, validateConfig, +}; + +/** + * MetonaEditor Themes — theme system + * @module themes + * @version 0.2.0 + */ +// ============ State ============ +let globalCurrentTheme = 'auto'; +let globalThemeListeners = new Set(); +let _sysWatchUnsub = null; +// ============ System theme ============ +const getSystemTheme = () => { + if (typeof window === 'undefined') + return 'light'; + return prefersDark() ? 'dark' : 'light'; +}; +const _watchSystem = (callback) => { + if (typeof window === 'undefined' || !window.matchMedia) + return () => { }; + const mql = window.matchMedia('(prefers-color-scheme: dark)'); + const handler = (e) => callback(e.matches ? 'dark' : 'light'); + mql.addEventListener('change', handler); + return () => mql.removeEventListener('change', handler); +}; +const watchSystemTheme = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return; + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } + _sysWatchUnsub = _watchSystem((sysTheme) => { + if (globalCurrentTheme === 'auto') + applyTheme('auto'); + }); +}; +const unwatchSystemTheme = () => { + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } +}; +// ============ Theme resolution ============ +const resolveTheme = (theme) => { + if (!theme || theme === 'auto') + return getSystemTheme(); + return theme; +}; +const getThemeConfig = (theme) => { + const resolved = resolveTheme(theme); + const config = THEMES[resolved]; + return (config && typeof config === 'object' ? config : THEMES.light); +}; +// ============ CSS variables ============ +const setThemeVariables = (config, target) => { + if (typeof document === 'undefined' || !config || typeof config !== 'object') + return; + const root = target || document.documentElement; + const vars = { + '--md-bg': config.bg, '--md-text': config.text, '--md-border': config.border, + '--md-shadow': config.shadow, '--md-hover-shadow': config.hoverShadow, + '--md-toolbar-bg': config.toolbarBg || config.bg, + '--md-textarea-bg': config.textareaBg || config.bg, + '--md-preview-bg': config.previewBg || config.bg, + '--md-code-bg': config.codeBg || 'rgba(127,127,127,0.1)', + '--md-code-text': config.codeText || config.text, + '--md-accent': config.accent || '#3b82f6', + '--md-muted': config.muted || '#9ca3af', + }; + for (const [k, v] of Object.entries(vars)) { + if (v !== undefined && v !== null) + root.style.setProperty(k, String(v)); + } + if (config.progressBg) + root.style.setProperty('--md-progress-bg', config.progressBg); + if (config.closeHoverBg) + root.style.setProperty('--md-close-hover-bg', config.closeHoverBg); +}; +const exportCSSVars = (el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return {}; + const style = getComputedStyle(root); + const varNames = ['--md-bg', '--md-text', '--md-border', '--md-shadow', '--md-hover-shadow', '--md-toolbar-bg', '--md-textarea-bg', '--md-preview-bg', '--md-code-bg', '--md-code-text', '--md-accent', '--md-muted']; + const result = {}; + varNames.forEach((name) => { const val = style.getPropertyValue(name).trim(); if (val) + result[name] = val; }); + return result; +}; +const getCSSVariable = (name, el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return ''; + const fullName = name.startsWith('--') ? name : `--md-${name}`; + return getComputedStyle(root).getPropertyValue(fullName).trim(); +}; +// ============ Apply theme ============ +const applyTheme = (theme) => { + globalCurrentTheme = theme; + const resolved = resolveTheme(theme); + if (typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolved); + document.documentElement.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + document.documentElement.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme)); + } + notifyGlobalListeners(theme, resolved); +}; +const applyThemeToElement = (theme, target) => { + if (!target || typeof document === 'undefined') + return; + const resolved = resolveTheme(theme); + target.setAttribute('data-md-theme', resolved); + target.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + if (resolved !== 'auto') + target.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme), target); +}; +const switchTheme = (theme) => { applyTheme(theme); saveTheme(theme); }; +const toggleTheme = () => { const r = getResolvedTheme(); switchTheme(r === 'dark' ? 'light' : 'dark'); }; +const resetToAuto = () => { switchTheme('auto'); }; +const getCurrentTheme = () => globalCurrentTheme; +const getResolvedTheme = () => resolveTheme(globalCurrentTheme); +// ============ Persistence ============ +const saveTheme = (theme) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-theme', theme); + } + catch (_) { } + } +}; +const loadTheme = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-theme') || 'auto'; + } + catch (_) { } + } + return 'auto'; +}; +// ============ Listeners ============ +const notifyGlobalListeners = (theme, resolved) => { + globalThemeListeners.forEach((fn) => { try { + fn(theme, resolved); + } + catch (e) { + console.error('Theme listener error:', e); + } }); +}; +const addThemeListener = (fn) => { + globalThemeListeners.add(fn); + return () => { globalThemeListeners.delete(fn); }; +}; +const removeThemeListener = (fn) => { globalThemeListeners.delete(fn); }; +const clearThemeListeners = () => { globalThemeListeners.clear(); }; +// ============ System watch ============ +const startSystemWatch = () => { watchSystemTheme(); }; +// ============ Init ============ +const initTheme = () => { applyTheme(loadTheme()); startSystemWatch(); }; +// ============ External follow ============ +const followExternalTheme = (options, onThemeChange) => { + if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') + return () => { }; + const { element = document.documentElement, attr = 'data-theme', classMap = null, callback = null } = options; + const detect = () => { + if (typeof callback === 'function') + return callback(element); + const attrVal = element.getAttribute(attr); + if (attrVal) + return attrVal; + if (classMap) { + for (const [cls, theme] of Object.entries(classMap)) { + if (element.classList.contains(cls)) + return theme; + } + } + const mdTheme = element.getAttribute('data-md-theme'); + if (mdTheme) + return mdTheme; + return null; + }; + let lastTheme = detect(); + if (lastTheme) + onThemeChange(lastTheme); + const observer = new MutationObserver(() => { const current = detect(); if (current && current !== lastTheme) { + lastTheme = current; + onThemeChange(current); + } }); + observer.observe(element, { attributes: true, attributeFilter: [attr, 'class', 'data-md-theme'] }); + return () => observer.disconnect(); +}; +const adoptFromParent = (container, onThemeDetected) => { + if (typeof document === 'undefined' || !container) + return () => { }; + const detect = () => { + let el = container.parentElement; + while (el) { + const t = el.getAttribute('data-md-theme'); + if (t) + return t; + if (el.classList.contains('theme-dark') || el.classList.contains('dark')) + return 'dark'; + if (el.classList.contains('theme-light') || el.classList.contains('light')) + return 'light'; + el = el.parentElement; + } + if (container.parentElement) { + const bg = getComputedStyle(container.parentElement).getPropertyValue('--md-bg').trim() || getComputedStyle(container.parentElement).backgroundColor; + if (bg) { + const rgb = bg.match(/\d+/g); + if (rgb && rgb.length >= 3) { + const brightness = (parseInt(rgb[0]) * 299 + parseInt(rgb[1]) * 587 + parseInt(rgb[2]) * 114) / 1000; + return brightness < 128 ? 'dark' : 'light'; + } + } + } + return null; + }; + const detected = detect(); + if (detected) + onThemeDetected(detected); + const observer = new MutationObserver(() => { const d = detect(); if (d) + onThemeDetected(d); }); + let target = container.parentElement; + while (target) { + observer.observe(target, { attributes: true, attributeFilter: ['class', 'data-md-theme', 'data-theme'] }); + target = target.parentElement; + if (target === document.documentElement) + break; + } + return () => observer.disconnect(); +}; +const watch = (source, onChange) => { + if (typeof source === 'function') { + const tick = () => { try { + const t = source(); + if (t) + onChange(t); + } + catch (_) { } }; + tick(); + const id = setInterval(tick, 500); + return () => clearInterval(id); + } + if (typeof source === 'string' && typeof document !== 'undefined') { + const el = document.querySelector(source); + if (!el) + return () => { }; + return followExternalTheme({ element: el, attr: 'data-theme' }, onChange); + } + return () => { }; +}; +// ============ Custom theme registration ============ +const registerTheme = (name, config = {}) => { + const baseName = config.extends || 'light'; + const base = (THEMES[baseName] || THEMES.light); + THEMES[name] = { + bg: config.bg || base.bg, text: config.text || base.text, border: config.border || base.border, + shadow: config.shadow || base.shadow, hoverShadow: config.hoverShadow || base.hoverShadow, + toolbarBg: config.toolbarBg || base.toolbarBg || base.bg, + textareaBg: config.textareaBg || base.textareaBg || base.bg, + previewBg: config.previewBg || base.previewBg || base.bg, + codeBg: config.codeBg || base.codeBg, codeText: config.codeText || base.codeText, + accent: config.accent || base.accent, muted: config.muted || base.muted, + progressBg: config.progressBg || base.progressBg, + closeHoverBg: config.closeHoverBg || base.closeHoverBg, + }; +}; +const unregisterTheme = (name) => { + if (name === 'light' || name === 'dark' || name === 'auto' || name === 'warm') { + console.warn('Cannot unregister built-in theme:', name); + return; + } + delete THEMES[name]; +}; +const getAllThemes = () => ({ ...THEMES }); +const getThemeNames = () => Object.keys(THEMES); +const hasTheme = (name) => name in THEMES; +// ============ Instance theme ============ +const createInstanceTheme = (editor) => { + let instanceTheme = editor.config?.theme || globalCurrentTheme || 'auto'; + const apply = (theme) => { + instanceTheme = theme; + const resolved = resolveTheme(theme); + const config = getThemeConfig(theme); + if (editor.el) { + ['me-theme-light', 'me-theme-dark', 'me-theme-warm'].forEach((c) => editor.el.classList.remove(c)); + if (resolved !== 'auto') + editor.el.classList.add(`me-theme-${resolved}`); + editor.el.setAttribute('data-md-theme', resolved); + setThemeVariables(config, editor.el); + } + if (typeof editor._emit === 'function') + editor._emit('themeChange', { theme, resolved, config }); + if (typeof editor.refresh === 'function') + editor.refresh(); + return instanceTheme; + }; + const get = () => instanceTheme; + const set = (theme) => apply(theme); + const toggle = () => { const r = resolveTheme(instanceTheme); return apply(r === 'dark' ? 'light' : 'dark'); }; + const getResolved = () => resolveTheme(instanceTheme); + const getConfig = () => getThemeConfig(instanceTheme); + const getVars = () => editor.el ? exportCSSVars(editor.el) : {}; + const syncWithElement = (element, opts = {}) => followExternalTheme({ element, attr: opts.attr || 'data-theme', classMap: opts.classMap, callback: opts.callback }, (detected) => apply(detected)); + const adopt = () => editor.container ? adoptFromParent(editor.container, (detected) => apply(detected)) : () => { }; + const watchExternal = (source) => watch(source, (theme) => apply(theme)); + apply(instanceTheme); + return { apply, get, set, toggle, getResolved, getConfig, getVars, syncWithElement, adopt, watch: watchExternal }; +}; +const presetThemes = { + light: { name: '浅色', description: '明亮清晰', config: THEMES.light }, + dark: { name: '深色', description: '护眼暗色', config: THEMES.dark }, + auto: { name: '自动', description: '跟随系统', config: 'auto' }, + warm: { name: '暖色', description: '温馨暖色', config: THEMES.warm }, +}; +// Ensure built-in themes in THEMES +for (const [name, theme] of Object.entries(presetThemes)) { + if (name !== 'auto' && theme.config !== 'auto') + THEMES[name] = theme.config; +} +const themeUtils = { + getSystemTheme, resolveTheme, getThemeConfig, watchSystemTheme, unwatchSystemTheme, + applyTheme, getCurrentTheme, getResolvedTheme, switchTheme, toggleTheme, resetToAuto, initTheme, + saveTheme, loadTheme, addThemeListener, removeThemeListener, clearThemeListeners, + registerTheme, unregisterTheme, getAllThemes, getThemeNames, hasTheme, + setThemeVariables, exportCSSVars, getCSSVariable, applyThemeToElement, + followExternalTheme, adoptFromParent, watch, createInstanceTheme, +}; + +/** + * MetonaEditor Core — MarkdownEditor class (TypeScript) + * @module core + * @version 0.2.0 + */ +const MODES = ['edit', 'split', 'preview']; +const TOAST_ICONS = { success: '✓', error: '✗', warning: '⚠', info: 'ℹ' }; +const BRACKET_PAIRS = { + '(': ')', '[': ']', '{': '}', '"': '"', "'": "'", '`': '`', '*': '*', '_': '_', +}; +const resolveThemeName = (theme) => { + if (theme && theme !== 'auto') + return theme; + return resolveTheme('auto'); +}; +class MarkdownEditor { + static on(name, fn) { + if (!this._hooks.has(name)) + this._hooks.set(name, []); + this._hooks.get(name).push(fn); + return () => this.off(name, fn); + } + static off(name, fn) { + const list = this._hooks.get(name); + if (list) + this._hooks.set(name, list.filter((f) => f !== fn)); + } + static trigger(name, instance) { + const list = this._hooks.get(name); + if (list) + list.forEach((fn) => { try { + fn(instance); + } + catch (e) { + console.error(`MeEditor hook "${name}" error:`, e); + } }); + } + constructor(container, options = {}) { + if (!isBrowser()) { + this._destroyed = true; + this._value = options.value || ''; + return this; + } + this.id = options.id || generateId(); + this.container = typeof container === 'string' ? document.querySelector(container) : container; + if (!this.container) { + console.error('MeEditor: container not found:', container); + this._destroyed = true; + return this; + } + this.config = { ...DEFAULTS, ...options }; + if (options.style && typeof options.style === 'object') { + this.config.style = { ...DEFAULTS.style, ...options.style }; + } + this._value = this.config.value || ''; + this._mode = MODES.includes(this.config.mode) ? this.config.mode : 'split'; + this._history = []; + this._historyIndex = -1; + this._cleanups = []; + this._plugins = []; + this._listeners = {}; + this._renderRaf = null; + this._historyTimer = null; + this._fullscreen = false; + this._destroyed = false; + this._lastRenderedValue = null; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + this._outlineTimer = null; + this._zenMode = false; + this._wordWrap = true; + this._syncing = false; + this._zenMouseHandler = null; + this._floatingToolbar = null; + this._selectionTimer = null; + this._floatingEnabled = this.config.floatingToolbar !== false; + this._renderFn = (typeof this.config.render === 'function') ? this.config.render : parseMarkdown; + this._highlightFn = (typeof this.config.highlight === 'function') ? this.config.highlight : null; + MarkdownEditor.trigger('beforeCreate', this); + injectStyles(); + this._buildDOM(); + this._themeCtx = createInstanceTheme(this); + this._i18nCtx = createInstanceI18n(this); + if (options.theme && typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolveTheme(options.theme)); + } + const resolvedThemeConfig = getThemeConfig(this.config.theme); + setThemeVariables(resolvedThemeConfig, this.el); + this._buildToolbar(); + this._updateModeButtons(); + this._bindToolbarKeyboard(); + this._initAriaLive(); + this._bindEvents(); + this._bindContextMenu(); + this._trackOutlineScroll(); + if (this.config.floatingToolbar !== false) + this._initFloatingToolbar(); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + if (Array.isArray(this.config.plugins)) { + const plugins = this.config.plugins.map((p) => { + if (typeof p === 'string') + return { ...presetPlugins[p], _isStringRef: true }; + return p; + }).filter(Boolean); + const sorted = topologicalSort(plugins); + sorted.forEach((p) => this.use(p)); + } + if (this.config.autofocus && !this.config.readOnly) + this.focus(); + if (typeof this.config.onCreate === 'function') { + try { + this.config.onCreate(this); + } + catch (e) { + console.error('onCreate error:', e); + } + } + MarkdownEditor.trigger('afterCreate', this); + } + _buildDOM() { + const wrapper = document.createElement('div'); + wrapper.className = `me-wrapper me-theme-${resolveThemeName(this.config.theme)}`; + if (this.config.readOnly) + wrapper.classList.add('me-readonly'); + wrapper.dataset.id = this.id; + wrapper.setAttribute('role', 'application'); + wrapper.setAttribute('aria-label', t('edit')); + if (this.config.className) { + this.config.className.split(/\s+/).filter(Boolean).forEach((c) => wrapper.classList.add(c)); + } + const h = this.config.height; + wrapper.style.height = typeof h === 'number' ? `${h}px` : (h || '400px'); + if (this.config.style && typeof this.config.style === 'object') { + Object.entries(this.config.style).forEach(([k, v]) => { if (v) + wrapper.style[k] = v; }); + } + const toolbar = document.createElement('div'); + toolbar.className = 'me-toolbar'; + toolbar.setAttribute('role', 'toolbar'); + const body = document.createElement('div'); + body.className = `me-body me-mode-${this._mode}`; + const editorPane = document.createElement('div'); + editorPane.className = 'me-editor-pane'; + const editorInner = document.createElement('div'); + editorInner.className = 'me-editor-inner'; + const gutter = document.createElement('div'); + gutter.className = 'me-gutter'; + if (!this.config.lineNumbers) + gutter.style.display = 'none'; + editorInner.appendChild(gutter); + const textarea = document.createElement('textarea'); + textarea.className = 'me-textarea'; + textarea.spellcheck = !!this.config.spellcheck; + textarea.readOnly = !!this.config.readOnly; + textarea.style.tabSize = String(this.config.tabSize || 2); + textarea.placeholder = this.config.placeholder || t('placeholder'); + textarea.setAttribute('aria-label', t('edit')); + editorInner.appendChild(textarea); + editorPane.appendChild(editorInner); + const divider = document.createElement('div'); + divider.className = 'me-divider'; + divider.setAttribute('role', 'separator'); + const previewPane = document.createElement('div'); + previewPane.className = 'me-preview-pane'; + previewPane.setAttribute('role', 'region'); + previewPane.setAttribute('aria-label', t('preview')); + const preview = document.createElement('div'); + preview.className = 'me-preview'; + previewPane.appendChild(preview); + body.appendChild(editorPane); + body.appendChild(divider); + body.appendChild(previewPane); + wrapper.appendChild(toolbar); + wrapper.appendChild(body); + let statusbar = null; + if (this.config.wordCount) { + statusbar = document.createElement('div'); + statusbar.className = 'me-statusbar'; + wrapper.appendChild(statusbar); + } + this.container.appendChild(wrapper); + this.el = wrapper; + this.toolbarEl = toolbar; + this.bodyEl = body; + this.editorPane = editorPane; + this.editorInner = editorInner; + this.gutter = gutter; + this.previewPane = previewPane; + this.dividerEl = divider; + this.textarea = textarea; + this.previewEl = preview; + this.statusEl = statusbar; + // Restore divider position if saved + this._restoreDividerPosition(); + } + _buildToolbar() { + const tools = this.config.toolbar; + if (!tools || !Array.isArray(tools) || tools.length === 0) + return; + const modeActions = []; + tools.forEach((item) => { + if (item === '|') { + const sep = document.createElement('span'); + sep.className = 'me-toolbar-sep'; + this.toolbarEl.appendChild(sep); + return; + } + if (item === 'edit' || item === 'split' || item === 'preview' || item === 'fullscreen') { + modeActions.push(item); + return; + } + this.toolbarEl.appendChild(this._createBtn(item)); + }); + if (modeActions.length) { + const group = document.createElement('div'); + group.className = 'me-toolbar-group'; + modeActions.forEach((item) => { + const btn = this._createBtn(item); + if (item === 'edit' || item === 'split' || item === 'preview') { + btn.dataset.mode = item; + if (item === this._mode) + btn.classList.add('me-active'); + } + group.appendChild(btn); + }); + this.toolbarEl.appendChild(group); + } + } + _createBtn(item) { + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-${item}`; + btn.dataset.action = item; + const label = t(item) || item; + btn.title = label; + btn.setAttribute('aria-label', label); + btn.innerHTML = ICONS[item] || `${escapeHTML(item)}`; + return btn; + } + _bindEvents() { + const ta = this.textarea; + const onInput = () => { + const oldValue = this._value; + this._value = ta.value; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', oldValue, this._value); + this._scheduleRender(); + this._scheduleHistory(); + this._updateWordCount(); + this._renderGutter(); + this._updateOutline(); + this._emit('input', this._value); + this._emit('change', this._value); + if (typeof this.config.onInput === 'function') { + try { + this.config.onInput(this._value, this); + } + catch (e) { + console.error(e); + } + } + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + }; + ta.addEventListener('input', onInput); + const onKeydown = (e) => { + if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey) + this._handleSmartEnter(e); + this._handleKeydown(e); + }; + ta.addEventListener('keydown', onKeydown); + const onKeypress = (e) => this._handleBracketAutoClose(e); + ta.addEventListener('keypress', onKeypress); + const onCursorActivity = () => { this._updateCurrentLine(); }; + ta.addEventListener('click', onCursorActivity); + ta.addEventListener('keyup', onCursorActivity); + const onScroll = () => { this._syncScroll(); }; + ta.addEventListener('scroll', onScroll); + const onPreviewScroll = () => { + if (!this.config.syncScroll || this._mode !== 'split') + return; + if (this._syncing) + return; + this._syncing = true; + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax <= 0) { + this._syncing = false; + return; + } + const ratio = this.previewPane.scrollTop / pmax; + const tmax = ta.scrollHeight - ta.clientHeight; + ta.scrollTop = ratio * tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ratio * tmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + }; + this.previewPane.addEventListener('scroll', onPreviewScroll); + const onFocus = () => { + this._emit('focus'); + if (typeof this.config.onFocus === 'function') { + try { + this.config.onFocus(this); + } + catch (e) { + console.error(e); + } + } + }; + const onBlur = () => { + this._emit('blur'); + if (typeof this.config.onBlur === 'function') { + try { + this.config.onBlur(this); + } + catch (e) { + console.error(e); + } + } + }; + ta.addEventListener('focus', onFocus); + ta.addEventListener('blur', onBlur); + const onPreviewClick = (e) => { + const a = e.target.closest('a'); + if (!a) + return; + const href = a.getAttribute('href'); + if (!href || href.startsWith('#')) + return; + e.preventDefault(); + this._emit('linkClick', { href, text: a.textContent }); + if (typeof this.config.onLinkClick === 'function') { + try { + this.config.onLinkClick(href, a.textContent, this); + } + catch (_) { } + return; + } + window.open(href, '_blank', 'noopener'); + }; + this.previewEl.addEventListener('click', onPreviewClick); + const onToolbarClick = (e) => { + const btn = e.target.closest('.me-btn'); + if (!btn) + return; + const mode = btn.dataset.mode; + if (mode) { + this.setMode(mode); + return; + } + const action = btn.dataset.action; + if (action) + this.exec(action); + }; + this.toolbarEl.addEventListener('click', onToolbarClick); + const onDividerDown = (e) => this._bindDividerDrag(e); + this.dividerEl.addEventListener('pointerdown', onDividerDown); + this._bindDragDrop(); + this._cleanups.push(() => { + ta.removeEventListener('input', onInput); + ta.removeEventListener('keydown', onKeydown); + ta.removeEventListener('keypress', onKeypress); + ta.removeEventListener('scroll', onScroll); + this.previewPane.removeEventListener('scroll', onPreviewScroll); + ta.removeEventListener('click', onCursorActivity); + ta.removeEventListener('keyup', onCursorActivity); + ta.removeEventListener('focus', onFocus); + ta.removeEventListener('blur', onBlur); + this.toolbarEl.removeEventListener('click', onToolbarClick); + this.dividerEl.removeEventListener('pointerdown', onDividerDown); + }); + } + _handleKeydown(e) { + if (e.key === 'Tab') { + e.preventDefault(); + this._handleTab(e.shiftKey); + return; + } + if (this._shortcuts.length) { + for (const sc of this._shortcuts) { + const ctrlOk = sc.ctrl ? (e.ctrlKey || e.metaKey) : !e.ctrlKey && !e.metaKey; + const shiftOk = sc.shift ? e.shiftKey : !e.shiftKey; + const altOk = sc.alt ? e.altKey : !e.altKey; + if (e.key.toLowerCase() === sc.key && ctrlOk && shiftOk && altOk) { + e.preventDefault(); + if (typeof sc.handler === 'string') + this.exec(sc.handler); + else if (typeof sc.handler === 'function') { + try { + sc.handler(this); + } + catch (err) { + console.error('Shortcut error:', err); + } + } + return; + } + } + } + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const key = e.key.toLowerCase(); + const shortcuts = { b: 'bold', i: 'italic', k: 'link', u: 'underline', e: 'code', '1': 'h1', '2': 'h2', '3': 'h3', q: 'quote' }; + if (key === 'z' && !e.shiftKey) { + e.preventDefault(); + this.undo(); + } + else if ((key === 'z' && e.shiftKey) || key === 'y') { + e.preventDefault(); + this.redo(); + } + else if (key === 's') { + e.preventDefault(); + this._emit('save', this._value); + if (typeof this.config.onSave === 'function') { + try { + this.config.onSave(this._value, this); + } + catch (err) { + console.error(err); + } + } + } + else if (shortcuts[key]) { + e.preventDefault(); + this.exec(shortcuts[key]); + } + } + _handleTab(shift) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const tabSize = this.config.tabSize || 0; + const tabStr = tabSize > 0 ? ' '.repeat(tabSize) : '\t'; + if (start === end) { + ta.value = ta.value.slice(0, start) + tabStr + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + tabStr.length; + } + else { + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const block = ta.value.slice(lineStart, end); + const lines = block.split('\n'); + let newBlock; + if (shift) { + newBlock = lines.map((l) => l.replace(/^(\t| {1,4})/, '')).join('\n'); + } + else { + newBlock = lines.map((l) => tabStr + l).join('\n'); + } + ta.value = ta.value.slice(0, lineStart) + newBlock + ta.value.slice(end); + ta.selectionStart = lineStart; + ta.selectionEnd = lineStart + newBlock.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + _bindDividerDrag(e) { + if (this._mode !== 'split') + return; + e.preventDefault(); + const startX = e.clientX; + const editorWidth = this.editorPane.getBoundingClientRect().width; + const totalWidth = this.bodyEl.getBoundingClientRect().width; + if (totalWidth <= 0) + return; + const divider = this.dividerEl; + const onMove = (ev) => { + const dx = ev.clientX - startX; + let newW = editorWidth + dx; + const min = 80; + const max = totalWidth - 80 - divider.offsetWidth; + newW = Math.max(min, Math.min(max, newW)); + const pct = (newW / totalWidth) * 100; + this.editorPane.style.flex = `0 0 ${pct}%`; + this.previewPane.style.flex = `1 1 ${100 - pct}%`; + }; + const onUp = () => { + window.removeEventListener('pointermove', onMove); + window.removeEventListener('pointerup', onUp); + this._saveDividerPosition(); + }; + window.addEventListener('pointermove', onMove); + window.addEventListener('pointerup', onUp); + } + _saveDividerPosition() { + try { + const epFlex = this.editorPane.style.flex; + if (epFlex) + localStorage.setItem('metona-editor-divider', epFlex); + } + catch (_) { } + } + _restoreDividerPosition() { + try { + const saved = localStorage.getItem('metona-editor-divider'); + if (saved && this._mode === 'split') { + this.editorPane.style.flex = saved; + this.previewPane.style.flex = '1 1 auto'; + } + } + catch (_) { } + } + _scheduleRender() { if (this._renderRaf) + return; this._renderRaf = requestAnimationFrame(() => { this._renderRaf = null; this._render(); }); } + _render() { + if (this._mode === 'edit') + return; + if (this._lastRenderedValue === this._value) + return; + this._lastRenderedValue = this._value; + MarkdownEditor.trigger('beforeRender', this); + this._emit('beforeRender', this); + let html; + try { + html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); + } + catch (err) { + console.error('MeEditor render error:', err); + html = `

    ${t('renderError')}: ${escapeHTML(err.message)}

    `; + } + if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error('sanitize error:', e); + } + } + this.previewEl.innerHTML = html; + this._renderGutter(); + MarkdownEditor.trigger('afterRender', this); + this._emit('afterRender', this); + } + _renderGutter() { + if (!this.config.lineNumbers || !this.gutter) + return; + const lines = this._value ? this._value.split('\n').length : 1; + const current = this.gutter.children.length; + if (current === lines) + return; + if (current < lines) { + // Add new line numbers + let h = ''; + for (let i = current + 1; i <= lines; i++) + h += `
    ${i}
    `; + this.gutter.insertAdjacentHTML('beforeend', h); + } + else { + // Remove excess line numbers + while (this.gutter.children.length > lines) { + this.gutter.removeChild(this.gutter.lastChild); + } + } + } + _updateCurrentLine() { + if (!this.gutter) + return; + const pos = this.textarea.selectionStart; + const lineNum = this._value.substring(0, pos).split('\n').length; + const prev = this.gutter.querySelector('.me-gutter-active'); + if (prev) + prev.classList.remove('me-gutter-active'); + const cur = this.gutter.children[lineNum - 1]; + if (cur) + cur.classList.add('me-gutter-active'); + } + _handleSmartEnter(e) { + const ta = this.textarea; + const start = ta.selectionStart; + const val = ta.value; + const lineStart = val.lastIndexOf('\n', start - 1) + 1; + const line = val.slice(lineStart, start); + const listMatch = line.match(/^(\s*)([-*+]|\d+\.)\s(.*)/); + if (listMatch) { + const indent = listMatch[1]; + const marker = listMatch[2]; + const content = listMatch[3]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + let nextMarker = marker; + if (/^\d+\.$/.test(marker)) { + const num = parseInt(marker, 10); + if (!isNaN(num)) + nextMarker = (num + 1) + '.'; + } + e.preventDefault(); + const insert = '\n' + indent + nextMarker + ' '; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + const quoteMatch = line.match(/^(\s*>+\s?)(.*)/); + if (quoteMatch) { + const prefix = quoteMatch[1]; + const content = quoteMatch[2]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + e.preventDefault(); + const insert = '\n' + prefix; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + } + } + _handleBracketAutoClose(e) { + if (!this.config.autoBrackets) + return; + const ta = this.textarea; + const key = e.key; + const close = BRACKET_PAIRS[key]; + if (!close) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start !== end) { + e.preventDefault(); + const selected = ta.value.slice(start, end); + const wrap = key + selected + close; + ta.value = ta.value.slice(0, start) + wrap + ta.value.slice(end); + ta.selectionStart = start + 1; + ta.selectionEnd = start + 1 + selected.length; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + return; + } + const nextChar = ta.value[start] || ''; + if (key === close) { + if (nextChar === close) { + e.preventDefault(); + ta.selectionStart = ta.selectionEnd = start + 1; + return; + } + if (/\w/.test(nextChar)) + return; + } + e.preventDefault(); + const pair = key + close; + ta.value = ta.value.slice(0, start) + pair + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + 1; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + } + _bindDragDrop() { + const ta = this.textarea; + if (!ta) + return; + const onDragOver = (e) => { e.preventDefault(); if (e.dataTransfer) + e.dataTransfer.dropEffect = 'copy'; }; + const onDrop = (e) => { + e.preventDefault(); + const files = e.dataTransfer?.files; + if (files && files.length) { + Array.from(files).forEach((file) => { + if (file.type.startsWith('image/')) { + const reader = new FileReader(); + reader.onload = () => { this.insert(`![${file.name}](${reader.result})\n`); }; + reader.readAsDataURL(file); + } + else if (file.type.startsWith('text/') || /\.(md|txt|js|ts|json|css|html|xml|yml|yaml)$/i.test(file.name)) { + const reader = new FileReader(); + reader.onload = () => this.insert(reader.result); + reader.readAsText(file); + } + }); + return; + } + const text = e.dataTransfer?.getData('text/plain'); + if (text) + this.insert(text); + }; + ta.addEventListener('dragover', onDragOver); + ta.addEventListener('drop', onDrop); + this._cleanups.push(() => { ta.removeEventListener('dragover', onDragOver); ta.removeEventListener('drop', onDrop); }); + } + _buildOutline() { + if (!this.config.outline || !this.previewEl) + return; + const old = this.el.querySelector('.me-outline'); + if (old) + old.remove(); + const headings = []; + const headingRe = /]*>(.+?)<\/h\1>/gi; + let m; + while ((m = headingRe.exec(this.previewEl.innerHTML)) !== null) { + headings.push({ level: parseInt(m[1], 10), id: m[2], text: m[3].replace(/<[^>]+>/g, '') }); + } + if (!headings.length) + return; + const panel = document.createElement('div'); + panel.className = 'me-outline'; + panel.innerHTML = `
    ${t('outline') || '大纲'}
    `; + const buildTree = (items, minLevel) => { + let h = '
      '; + let i = 0; + while (i < items.length) { + const item = items[i]; + if (item.level < minLevel) + break; + h += `
    • ${escapeHTML(item.text)}`; + const sub = []; + let j = i + 1; + while (j < items.length && items[j].level > item.level) { + sub.push(items[j]); + j++; + } + if (sub.length) + h += buildTree(sub, item.level + 1); + h += '
    • '; + i = j > i + 1 ? j : i + 1; + } + return h + '
    '; + }; + panel.innerHTML += buildTree(headings, 1); + this.el.appendChild(panel); + panel.addEventListener('click', (e) => { + const a = e.target.closest('a'); + if (!a) + return; + e.preventDefault(); + const id = a.getAttribute('href').slice(1); + const target = this.previewEl.querySelector('#' + CSS.escape(id)); + if (target) { + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); + const idx = this._value.indexOf(target.textContent || ''); + if (idx !== -1) { + this.textarea.focus(); + this.textarea.setSelectionRange(idx, idx); + } + } + }); + } + _updateOutline() { if (!this.config.outline) + return; if (this._outlineTimer) + clearTimeout(this._outlineTimer); this._outlineTimer = setTimeout(() => this._buildOutline(), 300); } + _trackOutlineScroll() { + if (!this.config.outline || !this.previewPane) + return; + let ticking = false; + const onScroll = () => { + if (ticking) + return; + ticking = true; + requestAnimationFrame(() => { + ticking = false; + if (!this.el) + return; + const panel = this.el.querySelector('.me-outline'); + if (!panel) + return; + const headings = this.previewEl.querySelectorAll('h1, h2, h3, h4, h5, h6'); + let activeId = ''; + const scrollTop = this.previewPane.scrollTop + 80; // offset for better UX + headings.forEach((h) => { + if (h.offsetTop <= scrollTop) { + activeId = h.id; + } + }); + panel.querySelectorAll('a').forEach((a) => { + a.classList.toggle('me-outline-active', a.getAttribute('href') === '#' + activeId); + }); + }); + }; + this.previewPane.addEventListener('scroll', onScroll, { passive: true }); + this._cleanups.push(() => this.previewPane.removeEventListener('scroll', onScroll)); + } + _scheduleHistory() { if (this._historyTimer) + clearTimeout(this._historyTimer); this._historyTimer = setTimeout(() => this._pushHistory(), this.config.historyDebounce || 400); } + _pushHistory() { + const cur = this._history[this._historyIndex]; + if (cur === this._value) + return; + this._history = this._history.slice(0, this._historyIndex + 1); + this._history.push(this._value); + const limit = this.config.historyLimit > 0 ? this.config.historyLimit : 100; + while (this._history.length > limit) + this._history.shift(); + this._historyIndex = this._history.length - 1; + } + undo() { if (this._historyIndex <= 0) + return this; this._historyIndex--; this._applyHistory(); return this; } + redo() { if (this._historyIndex >= this._history.length - 1) + return this; this._historyIndex++; this._applyHistory(); return this; } + canUndo() { return this._historyIndex > 0; } + canRedo() { return this._historyIndex < this._history.length - 1; } + _applyHistory() { + this._value = this._history[this._historyIndex]; + this.textarea.value = this._value; + this._render(); + this._renderGutter(); + this._updateWordCount(); + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + if (this.previewPane && this.config.syncScroll) + this.previewPane.scrollTop = 0; + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + exec(action, ...args) { + const actions = { + bold: () => this._wrapSelection('**', '**'), italic: () => this._wrapSelection('*', '*'), + strikethrough: () => this._wrapSelection('~~', '~~'), underline: () => this._wrapSelection('', ''), + code: () => this._wrapSelection('`', '`'), h1: () => this._toggleLinePrefix('# '), + h2: () => this._toggleLinePrefix('## '), h3: () => this._toggleLinePrefix('### '), + quote: () => this._toggleLinePrefix('> '), ul: () => this._toggleLinePrefix('- '), + ol: () => this._toggleLinePrefix('1. '), indent: () => this._handleTab(false), + outdent: () => this._handleTab(true), hr: () => this._insertBlock('\n---\n'), + link: () => this._insertLink(), image: () => this._insertImage(), table: () => this._insertTable(), + undo: () => this.undo(), redo: () => this.redo(), + edit: () => this.setMode('edit'), split: () => this.setMode('split'), + preview: () => this.setMode('preview'), fullscreen: () => this.toggleFullscreen(), + zen: () => this.toggleZen(), wordwrap: () => this.toggleWordWrap(), + formatTable: () => this._formatTable(), + }; + const fn = actions[action]; + if (fn) { + fn.apply(this, args); + return this; + } + if (this._customActions && typeof this._customActions[action] === 'function') { + try { + this._customActions[action].apply(this, args); + } + catch (e) { + console.error('custom action error:', e); + } + } + return this; + } + _wrapSelection(before, after) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const selected = ta.value.slice(start, end); + const text = selected || 'text'; + const inserted = before + text + after; + ta.value = ta.value.slice(0, start) + inserted + ta.value.slice(end); + ta.focus(); + if (selected) { + ta.selectionStart = start + before.length; + ta.selectionEnd = start + before.length + text.length; + } + else { + ta.selectionStart = ta.selectionEnd = start + before.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _toggleLinePrefix(prefix) { + const ta = this.textarea; + const start = ta.selectionStart; + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const lineEndPos = ta.value.indexOf('\n', start); + const lineEnd = lineEndPos === -1 ? ta.value.length : lineEndPos; + const line = ta.value.slice(lineStart, lineEnd); + const existingMatch = line.match(/^(#{1,6}\s*|>\s*|[-*+]\s*|\d+\.\s*)/); + let newLine; + if (existingMatch && existingMatch[0] === prefix) + newLine = line.slice(prefix.length); + else if (existingMatch) + newLine = prefix + line.slice(existingMatch[0].length); + else + newLine = prefix + line; + ta.value = ta.value.slice(0, lineStart) + newLine + ta.value.slice(lineEnd); + ta.focus(); + ta.selectionStart = ta.selectionEnd = lineStart + newLine.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertBlock(text) { + const ta = this.textarea; + const start = ta.selectionStart; + const before = ta.value.slice(0, start); + const needNL = before && !before.endsWith('\n'); + const insert = (needNL ? '\n' : '') + text; + ta.value = ta.value.slice(0, start) + insert + ta.value.slice(ta.selectionEnd); + ta.focus(); + const pos = start + insert.length; + ta.selectionStart = ta.selectionEnd = pos; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertLink() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('link') || 'link'; const url = 'https://'; const insert = `[${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 3; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertImage() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('image') || 'image'; const url = 'https://'; const insert = `![${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 4; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertTable(rows = 3, cols = 3) { const header = Array.from({ length: cols }, (_, i) => `${t('tableCols') || '列'}${i + 1}`).join(' | '); const sep = Array.from({ length: cols }, () => '---').join(' | '); let md = `| ${header} |\n| ${sep} |\n`; for (let r = 1; r < rows; r++) + md += `| ${Array.from({ length: cols }, () => ' ').join(' | ')} |\n`; this._insertBlock('\n' + md); } + _formatTable() { + const ta = this.textarea; + const start = ta.selectionStart; + // Find table boundaries around cursor + const before = ta.value.substring(0, start); + const after = ta.value.substring(start); + const blockStart = before.lastIndexOf('\n\n'); + const blockEnd = after.indexOf('\n\n'); + const tableStart = blockStart === -1 ? 0 : blockStart + 2; + const tableEnd = blockEnd === -1 ? ta.value.length : start + blockEnd; + const tableText = ta.value.substring(tableStart, tableEnd); + const lines = tableText.split('\n').filter((l) => l.includes('|')); + if (lines.length < 2) + return; // need at least header + separator + // Parse columns + const splitRow = (r) => r.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + const allCells = lines.map(splitRow); + const colCount = Math.max(...allCells.map((c) => c.length)); + // Calculate max width per column + const colWidths = Array(colCount).fill(3); + allCells.forEach((cells) => { + cells.forEach((cell, ci) => { + colWidths[ci] = Math.max(colWidths[ci], cell.trim().length); + }); + }); + // Rebuild table + const pad = (s, w) => { const padLen = w - s.length; return s + ' '.repeat(Math.max(0, padLen)); }; + const formatted = allCells.map((cells) => { + const padded = []; + for (let ci = 0; ci < colCount; ci++) { + padded.push(pad((cells[ci] || '').trim(), colWidths[ci])); + } + return '| ' + padded.join(' | ') + ' |'; + }); + // Replace in value + ta.value = ta.value.substring(0, tableStart) + formatted.join('\n') + ta.value.substring(tableEnd); + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + setMode(mode) { if (!MODES.includes(mode) || mode === this._mode) + return this; const taS = this.textarea.scrollTop; const pvS = this.previewPane.scrollTop; this._mode = mode; this.bodyEl.className = `me-body me-mode-${mode}`; this._updateModeButtons(); if (mode !== 'edit') + this._render(); this.textarea.scrollTop = taS; this.previewPane.scrollTop = pvS; this._emit('modeChange', mode); this._announce(`${t(mode) || mode} mode`); if (typeof this.config.onModeChange === 'function') { + try { + this.config.onModeChange(mode, this); + } + catch (e) { + console.error(e); + } + } return this; } + getMode() { return this._mode; } + _updateModeButtons() { + const isPreview = this._mode === 'preview'; + const isReadonly = this.config.readOnly; + this.toolbarEl.querySelectorAll('.me-btn').forEach((b) => { + const btn = b; + const mode = btn.dataset.mode; + const action = btn.dataset.action; + if (mode) { + btn.classList.toggle('me-active', mode === this._mode); + btn.disabled = false; + return; + } + if (action === 'fullscreen') { + btn.disabled = false; + return; + } + if (isReadonly) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + if (isPreview) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + btn.disabled = false; + }); + } + toggleFullscreen() { this._fullscreen = !this._fullscreen; this.el.classList.toggle('me-fullscreen', this._fullscreen); const fsBtn = this.toolbarEl.querySelector('.me-btn-fullscreen'); if (fsBtn) + fsBtn.title = this._fullscreen ? (t('fullscreenExit') || '退出全屏') : (t('fullscreen') || '全屏'); this._emit('fullscreen', this._fullscreen); if (typeof this.config.onFullscreen === 'function') { + try { + this.config.onFullscreen(this._fullscreen, this); + } + catch (e) { + console.error(e); + } + } return this; } + isFullscreen() { return this._fullscreen; } + exitFullscreen() { if (this._fullscreen) + this.toggleFullscreen(); return this; } + toggleZen() { + this._zenMode = !this._zenMode; + if (this.el) + this.el.classList.toggle('me-zen', this._zenMode); + if (this._zenMode && this.toolbarEl) { + this._zenMouseHandler = (e) => { this.toolbarEl.style.opacity = e.clientY < 40 ? '1' : '0'; this.toolbarEl.style.pointerEvents = e.clientY < 40 ? 'auto' : 'none'; }; + this.toolbarEl.style.transition = 'opacity 0.2s'; + this.toolbarEl.style.opacity = '0'; + this.toolbarEl.style.pointerEvents = 'none'; + document.addEventListener('mousemove', this._zenMouseHandler); + if (this.statusEl) + this.statusEl.style.display = 'none'; + } + else { + if (this._zenMouseHandler) { + document.removeEventListener('mousemove', this._zenMouseHandler); + this._zenMouseHandler = null; + } + if (this.toolbarEl) { + this.toolbarEl.style.opacity = ''; + this.toolbarEl.style.pointerEvents = ''; + this.toolbarEl.style.transition = ''; + } + if (this.statusEl) + this.statusEl.style.display = ''; + } + this._emit('zenChange', this._zenMode); + return this; + } + isZen() { return this._zenMode; } + toggleWordWrap() { this._wordWrap = !this._wordWrap; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + setWordWrap(on) { this._wordWrap = !!on; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + isWordWrap() { return this._wordWrap; } + _initFloatingToolbar() { + if (typeof document === 'undefined') + return; + // Inject floating toolbar CSS once globally + if (!document.getElementById('me-float-style')) { + const style = document.createElement('style'); + style.id = 'me-float-style'; + style.textContent = `.me-float-toolbar{position:absolute;z-index:25;display:flex;gap:4px;padding:4px 6px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;pointer-events:none}.me-float-toolbar.me-visible{opacity:1;transform:translateY(0);pointer-events:auto}.me-float-toolbar .me-btn{width:28px;height:28px}`; + document.head.appendChild(style); + } + if (!this._floatingEnabled) + return; + const ta = this.textarea; + const show = () => { + if (this._destroyed || this.config.readOnly || !this._floatingEnabled) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start === end) { + this._hideFloatingToolbar(); + return; + } + if (!this._floatingToolbar || !this._floatingToolbar.parentNode) + this._buildFloatingToolbar(); + // Position the toolbar near the selection + const rect = ta.getBoundingClientRect(); + const textBefore = ta.value.substring(0, start); + const lines = textBefore.split('\n'); + const currentLine = lines.length - 1; + const lineHeight = parseInt(getComputedStyle(ta).lineHeight, 10) || 22; + const paddingTop = parseInt(getComputedStyle(ta).paddingTop, 10) || 16; + const scrollOffset = ta.scrollTop; + // Place toolbar just above the selected line (4px gap) + const toolbarHeight = 36; + let top = rect.top + paddingTop + currentLine * lineHeight - scrollOffset - toolbarHeight - 4; + // Clamp: don't go above textarea + if (top < rect.top) + top = rect.top + 4; + if (top + toolbarHeight > rect.bottom) + top = rect.bottom - toolbarHeight - 4; + // Center horizontally near the middle of selection + let left = rect.left + (ta.selectionDirection !== 'backward' ? (ta.selectionEnd - ta.selectionStart) / 2 : 0) * 8 + 10; + if (left < rect.left) + left = rect.left + 4; + const maxLeft = rect.right - 200; + if (left > maxLeft) + left = maxLeft; + this._floatingToolbar.style.top = top + 'px'; + this._floatingToolbar.style.left = left + 'px'; + this._floatingToolbar.classList.add('me-visible'); + }; + const hide = () => { this._hideFloatingToolbar(); }; + let lastSelStart = ta.selectionStart; + let lastSelEnd = ta.selectionEnd; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !document.body.contains(ta) || !this._floatingEnabled) + return; + const s = ta.selectionStart; + const e = ta.selectionEnd; + if (s !== lastSelStart || e !== lastSelEnd) { + lastSelStart = s; + lastSelEnd = e; + const text = this._value.slice(s, e); + this._emit('selectionChange', { start: s, end: e, text }); + } + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + ta.addEventListener('mouseup', () => { if (this._floatingEnabled) + setTimeout(show, 0); }); + ta.addEventListener('keyup', () => { + if (!this._floatingEnabled) + return; + if (ta.selectionStart !== ta.selectionEnd) + setTimeout(show, 0); + else + setTimeout(hide, 0); + this._emit('cursorMove', this.getCursorPosition()); + }); + ta.addEventListener('blur', () => setTimeout(hide, 300)); + ta.addEventListener('click', () => { if (ta.selectionStart === ta.selectionEnd) + setTimeout(hide, 0); }); + } + toggleFloatingToolbar() { + this._floatingEnabled = !this._floatingEnabled; + if (this._floatingEnabled) { + // Re-enable: restart the interval + if (!this._selectionTimer) { + const ta = this.textarea; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !this._floatingEnabled) + return; + ta.selectionStart; + ta.selectionEnd; + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + } + } + else { + // Disable: clear interval and hide toolbar + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + if (this._floatingToolbar) { + if (this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + } + } + return this; + } + isFloatingToolbar() { return this._floatingEnabled; } + _buildFloatingToolbar() { + const bar = document.createElement('div'); + bar.className = 'me-float-toolbar'; + const actions = ['bold', 'italic', 'code', 'link', 'strikethrough']; + actions.forEach((action) => { + const btn = this._createBtn(action); + btn.addEventListener('mousedown', (e) => { + e.preventDefault(); + e.stopPropagation(); + this.exec(action); + // Keep selection after exec + setTimeout(() => this.textarea.focus(), 0); + }); + bar.appendChild(btn); + }); + this.editorPane.appendChild(bar); + this._floatingToolbar = bar; + } + _hideFloatingToolbar() { + if (this._floatingToolbar) { + this._floatingToolbar.classList.remove('me-visible'); + } + } + _bindToolbarKeyboard() { + if (!this.toolbarEl) + return; + const onKeydown = (e) => { + const btns = [...this.toolbarEl.querySelectorAll('.me-btn:not(:disabled)')]; + if (!btns.length) + return; + const idx = btns.indexOf(document.activeElement); + if (idx === -1) + return; + if (e.key === 'ArrowRight') { + e.preventDefault(); + btns[(idx + 1) % btns.length].focus(); + } + else if (e.key === 'ArrowLeft') { + e.preventDefault(); + btns[(idx - 1 + btns.length) % btns.length].focus(); + } + else if (e.key === 'Home') { + e.preventDefault(); + btns[0].focus(); + } + else if (e.key === 'End') { + e.preventDefault(); + btns[btns.length - 1].focus(); + } + }; + this.toolbarEl.addEventListener('keydown', onKeydown); + this._cleanups.push(() => this.toolbarEl.removeEventListener('keydown', onKeydown)); + } + _initAriaLive() { if (!this.el) + return; const live = document.createElement('div'); live.className = 'me-sr-only'; live.setAttribute('aria-live', 'polite'); live.setAttribute('aria-atomic', 'true'); this.el.appendChild(live); this._ariaLive = live; } + _announce(msg) { if (this._ariaLive) { + this._ariaLive.textContent = ''; + requestAnimationFrame(() => { this._ariaLive.textContent = msg; }); + } } + _syncScroll() { + if (this._syncing) + return; + this._syncing = true; + const ta = this.textarea; + if (!ta) { + this._syncing = false; + return; + } + const tmax = ta.scrollHeight - ta.clientHeight; + if (tmax <= 0) { + this._syncing = false; + return; + } + const ratio = ta.scrollTop / tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ta.scrollTop; + } + if (this.config.syncScroll && this._mode === 'split' && this.previewPane) { + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax > 0) + this.previewPane.scrollTop = ratio * pmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + } + _updateWordCount() { + if (!this.config.wordCount || !this.statusEl) + return; + const text = this._value || ''; + const chars = text.length; + const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; + const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; + const words = cnChars + enWords; + const lines = text ? text.split('\n').length : 0; + const readingMin = Math.max(1, Math.ceil(words / 300)); + this.statusEl.textContent = [`${t('characters')}: ${chars}`, `${t('words')}: ${words}`, `${t('lines')}: ${lines}`, `${t('readingTime')}: ${readingMin} ${t('minutes')}`].join(' · '); + } + getStats() { const text = this._value || ''; const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; return { characters: text.length, words: cnChars + enWords, chineseChars: cnChars, englishWords: enWords, lines: text ? text.split('\n').length : 0, readingTime: Math.max(1, Math.ceil((cnChars + enWords) / 300)), }; } + getSelectedText() { + if (!this.textarea) + return ''; + return this._value.slice(this.textarea.selectionStart, this.textarea.selectionEnd); + } + getCursorPosition() { + if (!this.textarea) + return { line: 1, column: 0 }; + const pos = this.textarea.selectionStart; + const before = this._value.substring(0, pos); + const line = before.split('\n').length; + const column = pos - before.lastIndexOf('\n') - 1; + return { line, column: column < 0 ? 0 : column }; + } + setCursorPosition(line, column = 0) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let pos = 0; + for (let i = 0; i < clampedLine - 1; i++) + pos += lines[i].length + 1; + pos += Math.min(column, lines[clampedLine - 1]?.length || 0); + this.textarea.focus(); + this.textarea.setSelectionRange(pos, pos); + return this; + } + scrollToLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + const lineHeight = 22; // approximate + this.textarea.scrollTop = (clampedLine - 1) * lineHeight; + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + return this; + } + selectLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let startPos = 0; + for (let i = 0; i < clampedLine - 1; i++) + startPos += lines[i].length + 1; + const endPos = startPos + lines[clampedLine - 1].length; + this.textarea.focus(); + this.textarea.setSelectionRange(startPos, endPos); + return this; + } + selectAll() { if (this.textarea) { + this.textarea.focus(); + this.textarea.select(); + } return this; } + replaceAll(search, replace, caseSensitive = true) { + if (!search) + return 0; + const flags = caseSensitive ? 'g' : 'gi'; + const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const re = new RegExp(escaped, flags); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + replaceAllRegex(pattern, replace) { + if (!pattern) + return 0; + const re = new RegExp(pattern, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g'); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + lineCount() { + return this._value ? this._value.split('\n').length : 0; + } + getLine(line) { + const lines = this._value.split('\n'); + const idx = line - 1; + if (idx < 0 || idx >= lines.length) + return ''; + return lines[idx]; + } + getValue() { return this._destroyed ? '' : this._value; } + setValue(md, opts = {}) { + if (this._destroyed) + return this; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', this._value, md); + this._value = md || ''; + this.textarea.value = this._value; + if (!opts.silent) + this._pushHistory(); + this._render(); + this._renderGutter(); + this._updateWordCount(); + this._updateOutline(); + if (this.gutter) + this.gutter.scrollTop = 0; + this.textarea.scrollTop = 0; + if (!opts.silent) { + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + return this; + } + getHTML() { MarkdownEditor.trigger('beforeRender', this); this._emit('beforeRender', this); let html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error(e); + } + } MarkdownEditor.trigger('afterRender', this); this._emit('afterRender', this); return html; } + refresh() { this._lastRenderedValue = null; this._render(); return this; } + copyAsMarkdown() { + if (typeof navigator !== 'undefined' && navigator.clipboard) { + navigator.clipboard.writeText(this._value).then(() => this._emit('copy', { type: 'markdown' })).catch(() => { }); + } + return this; + } + copyAsHTML() { + const html = this.getHTML(); + if (typeof navigator !== 'undefined' && navigator.clipboard) { + const blob = new Blob([html], { type: 'text/html' }); + const item = new ClipboardItem({ 'text/html': blob, 'text/plain': new Blob([this._value], { type: 'text/plain' }) }); + navigator.clipboard.write([item]).then(() => this._emit('copy', { type: 'html' })).catch(() => { }); + } + return this; + } + insert(text, opts = {}) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + ta.value = ta.value.slice(0, start) + text + ta.value.slice(opts.replace ? end : start); + ta.focus(); + ta.selectionStart = ta.selectionEnd = start + text.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return this; + } + wrap(before, after) { this._wrapSelection(before, after || before); return this; } + focus() { if (this.textarea) + this.textarea.focus(); return this; } + blur() { if (this.textarea) + this.textarea.blur(); return this; } + enable() { if (this.textarea) + this.textarea.disabled = false; if (this.el) + this.el.classList.remove('me-disabled'); return this; } + disable() { if (this.textarea) + this.textarea.disabled = true; if (this.el) + this.el.classList.add('me-disabled'); return this; } + isDisabled() { return this.textarea ? this.textarea.disabled : false; } + setReadOnly(readOnly) { this.config.readOnly = !!readOnly; if (this.textarea) + this.textarea.readOnly = !!readOnly; if (this.el) + this.el.classList.toggle('me-readonly', !!readOnly); this._updateModeButtons(); return this; } + isReadOnly() { return !!this.config.readOnly; } + on(name, fn) { if (!this._listeners[name]) + this._listeners[name] = []; this._listeners[name].push(fn); return () => this.off(name, fn); } + off(name, fn) { const list = this._listeners[name]; if (list) + this._listeners[name] = list.filter((f) => f !== fn); return this; } + _emit(name, ...args) { const list = this._listeners[name]; if (list) + list.forEach((fn) => { try { + fn(...args, this); + } + catch (e) { + console.error(`MeEditor event "${name}" error:`, e); + } }); } + use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return this; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return this; + } + const merged = { ...p, ...options }; + if (typeof merged.install === 'function') { + try { + const result = merged.install(this, options); + if (result && typeof result.then === 'function') { + result.catch((e) => console.error(`MeEditor: async plugin "${merged.name}" error:`, e)); + } + } + catch (e) { + console.error(`MeEditor: plugin "${merged.name}" install error:`, e); + } + } + this._plugins.push(merged); + return this; + } + unuse(name) { const idx = this._plugins.findIndex((p) => p.name === name); if (idx === -1) { + console.warn(`MeEditor: plugin "${name}" not found`); + return this; + } const plugin = this._plugins[idx]; if (typeof plugin.destroy === 'function') { + try { + plugin.destroy(this); + } + catch (e) { + console.error(`MeEditor: plugin "${name}" destroy error:`, e); + } + } this._plugins.splice(idx, 1); return this; } + getPlugins() { return [...this._plugins]; } + addToolbarButton(config) { + if (!config || !config.action) + return this; + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-custom-${config.action}`; + btn.title = config.title || config.action; + btn.setAttribute('aria-label', config.title || config.action); + btn.innerHTML = config.icon || `${escapeHTML(config.text || config.action)}`; + if (typeof config.onClick === 'function') { + btn.addEventListener('click', (e) => { e.stopPropagation(); config.onClick(this); }); + } + else if (config.action) { + btn.dataset.action = config.action; + this._customActions = this._customActions || {}; + this._customActions[config.action] = config.handler; + } + this.toolbarEl.insertBefore(btn, this.toolbarEl.querySelector('.me-toolbar-group') || null); + return this; + } + registerShortcut(combo, handler, description = '') { + if (!combo) + return this; + const parts = combo.toLowerCase().split('+'); + const key = parts.pop(); + const ctrl = parts.includes('ctrl') || parts.includes('cmd'); + const shift = parts.includes('shift'); + const alt = parts.includes('alt'); + const meta = parts.includes('meta'); + this._shortcuts.push({ combo, key, ctrl, shift, alt, meta, handler, description }); + return this; + } + unregisterShortcut(combo) { this._shortcuts = this._shortcuts.filter((s) => s.combo !== combo); return this; } + getShortcuts() { return [...this._shortcuts]; } + configureToolbar(tools) { if (!this.toolbarEl) + return this; this.config.toolbar = tools; this.toolbarEl.innerHTML = ''; this._buildToolbar(); return this; } + removeToolbarButton(action) { if (!this.toolbarEl) + return this; const btn = this.toolbarEl.querySelector(`.me-btn[data-action="${action}"], .me-btn[data-mode="${action}"]`); if (btn) + btn.remove(); return this; } + registerContextMenu(items = []) { this._contextMenuItems = items; return this; } + _bindContextMenu() { + if (!this.el) + return; + const onContextMenu = (e) => { + const existing = document.querySelector('.me-context-menu'); + if (existing) + existing.remove(); + this._showContextMenu(e); + }; + this.el.addEventListener('contextmenu', onContextMenu); + this._cleanups.push(() => this.el.removeEventListener('contextmenu', onContextMenu)); + } + _showContextMenu(e) { + e.preventDefault(); + const ta = this.textarea; + const hasSelection = ta && ta.selectionStart !== ta.selectionEnd; + const defaultItems = [ + { label: t('undo') || 'Undo', action: 'undo', shortcut: 'Ctrl+Z', disabled: !this.canUndo() }, + { label: t('redo') || 'Redo', action: 'redo', shortcut: 'Ctrl+Y', disabled: !this.canRedo() }, + { sep: true }, + { label: t('cut') || 'Cut', action: 'cut', shortcut: 'Ctrl+X', disabled: !hasSelection }, + { label: t('copy') || 'Copy', action: 'copy', shortcut: 'Ctrl+C', disabled: !hasSelection }, + { label: t('paste') || 'Paste', action: 'paste', shortcut: 'Ctrl+V', disabled: !!this.config.readOnly }, + { label: t('selectAll') || 'Select All', action: 'selectAll', shortcut: 'Ctrl+A' }, + ]; + const items = [...defaultItems]; + if (this._contextMenuItems.length) { + items.push({ sep: true }); + this._contextMenuItems.forEach((item) => items.push(item)); + } + const menu = document.createElement('div'); + menu.className = 'me-context-menu'; + menu.style.left = e.clientX + 'px'; + menu.style.top = e.clientY + 'px'; + // Adjust if off-screen + requestAnimationFrame(() => { + const rect = menu.getBoundingClientRect(); + if (rect.right > window.innerWidth) + menu.style.left = (e.clientX - rect.width) + 'px'; + if (rect.bottom > window.innerHeight) + menu.style.top = (e.clientY - rect.height) + 'px'; + }); + items.forEach((item) => { + if (item.sep) { + const sep = document.createElement('div'); + sep.className = 'me-context-menu-sep'; + menu.appendChild(sep); + return; + } + const el = document.createElement('div'); + el.className = 'me-context-menu-item'; + if (item.disabled) + el.classList.add('me-disabled'); + el.innerHTML = `${item.label}${item.shortcut ? `${item.shortcut}` : ''}`; + el.addEventListener('click', (ev) => { + ev.stopPropagation(); + if (item.disabled) + return; + if (item.onClick) { + item.onClick(); + } + else if (item.action) + this._execContextAction(item.action); + this._hideContextMenu(); + }); + menu.appendChild(el); + }); + document.body.appendChild(menu); + const close = (ev) => { + if (!menu.contains(ev.target)) { + this._hideContextMenu(); + } + }; + document.addEventListener('click', close, { once: true }); + document.addEventListener('keydown', (ev) => { if (ev.key === 'Escape') + this._hideContextMenu(); }, { once: true }); + } + _hideContextMenu() { + const menu = document.querySelector('.me-context-menu'); + if (menu) + menu.remove(); + } + _execContextAction(action) { + const ta = this.textarea; + if (!ta) + return; + switch (action) { + case 'undo': + this.undo(); + break; + case 'redo': + this.redo(); + break; + case 'cut': + document.execCommand('cut'); + break; + case 'copy': + document.execCommand('copy'); + break; + case 'paste': + document.execCommand('paste'); + break; + case 'selectAll': + ta.focus(); + ta.select(); + break; + default: + this.exec(action); + break; + } + } + toast(message, opts = {}) { + if (!this.el || typeof document === 'undefined') + return this; + const { type = 'info', duration = 3000, animation = 'fade' } = opts; + const toast = document.createElement('div'); + toast.className = `me-toast me-toast-${type} me-toast-${animation}`; + toast.innerHTML = `${TOAST_ICONS[type] || ''}${escapeHTML(String(message))}`; + this.el.appendChild(toast); + requestAnimationFrame(() => { toast.classList.add('me-toast-enter'); }); + const remove = () => { toast.classList.remove('me-toast-enter'); toast.classList.add('me-toast-leave'); setTimeout(() => { if (toast.parentNode) + toast.parentNode.removeChild(toast); }, 300); }; + if (duration > 0) + setTimeout(remove, duration); + toast.addEventListener('click', remove); + return this; + } + setLocale(locale) { if (this._i18nCtx) + this._i18nCtx.set(locale); return this; } + getLocale() { if (this._i18nCtx) + return this._i18nCtx.get(); return getCurrentLocale(); } + t(key, params) { if (this._i18nCtx) + return this._i18nCtx.t(key, params); return t(key, params); } + setTheme(theme) { if (!theme) + return this; this.config.theme = theme; if (this._themeCtx) + this._themeCtx.set(theme); return this; } + getTheme() { if (this._themeCtx) + return this._themeCtx.get(); return this.config.theme || 'auto'; } + getThemeContext() { return this._themeCtx || null; } + getStatus() { return { id: this.id, mode: this._mode, theme: this.getTheme(), locale: getCurrentLocale(), fullscreen: this._fullscreen, readOnly: this.config.readOnly || false, disabled: this.textarea ? this.textarea.disabled : false, destroyed: this._destroyed, plugins: this._plugins.map((p) => p.name || 'custom'), }; } + destroy() { + if (this._destroyed) + return; + MarkdownEditor.trigger('beforeDestroy', this); + if (this._renderRaf) + cancelAnimationFrame(this._renderRaf); + if (this._historyTimer) + clearTimeout(this._historyTimer); + if (this._outlineTimer) + clearTimeout(this._outlineTimer); + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + this._cleanups.forEach((fn) => { try { + fn(); + } + catch (_) { } }); + this._cleanups = []; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + if (this._floatingToolbar && this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + if (this.el) + this.el.querySelectorAll('.me-toast').forEach((t) => t.remove()); + this._plugins.forEach((p) => { if (typeof p.destroy === 'function') { + try { + p.destroy(this); + } + catch (_) { } + } }); + this._plugins = []; + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); + this.el = null; + this.textarea = null; + this.previewEl = null; + this._destroyed = true; + if (typeof this.config.onDestroy === 'function') { + try { + this.config.onDestroy(this); + } + catch (e) { + console.error(e); + } + } + this._emit('destroy'); + this._listeners = {}; + MarkdownEditor.trigger('afterDestroy', this); + } + isDestroyed() { return this._destroyed; } +} +MarkdownEditor._hooks = new Map(); + +/** + * MetonaEditor Animations — animation metadata + * @module animations + * @version 0.2.0 + */ +const animationMap = new Map(); +// Register built-in animations +for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); +} +const animationUtils = { + register(name, config) { + animationMap.set(name, { + name, + enter: config.enter || {}, + leave: config.leave || {}, + duration: config.duration || 300, + easing: config.easing || 'cubic-bezier(0.4, 0, 0.2, 1)', + }); + }, + unregister(name) { + animationMap.delete(name); + }, + get(name) { + return animationMap.get(name) || ANIMATIONS[name] || null; + }, + getAnimationNames() { + return Array.from(animationMap.keys()); + }, + getActiveCount() { + return 0; + }, + cancelAll() { + // CSS animations managed by browser natively + }, + reset() { + animationMap.clear(); + for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); + } + }, + destroy() { + animationMap.clear(); + }, +}; + +/** + * MetonaEditor — Type-safe, lightweight Markdown Editor + * @module metona-editor + * @version 0.2.3 + */ +const VERSION = '0.2.3'; +const globalPlugins = []; +MarkdownEditor.on('beforeCreate', (editor) => { + if (!editor || editor.isDestroyed()) + return; + globalPlugins.forEach((p) => { try { + editor.use(p); + } + catch (e) { + console.error('MeEditor global plugin install error:', e); + } }); +}); +function create(container, options = {}) { + return new MarkdownEditor(container, options); +} +function use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return api; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return api; + } + const merged = (options && typeof options === 'object' && Object.keys(options).length > 0) ? { ...p, ...options } : p; + globalPlugins.push(merged); + return api; +} +function on(name, fn) { return MarkdownEditor.on(name, fn); } +function off(name, fn) { MarkdownEditor.off(name, fn); return api; } +function setTheme(theme, _options) { if (themeUtils && typeof themeUtils.switchTheme === 'function') + themeUtils.switchTheme(theme); return api; } +function setLocale(locale) { if (i18nUtils && typeof i18nUtils.setCurrentLocale === 'function') + i18nUtils.setCurrentLocale(locale); return api; } +function destroy() { + if (themeUtils) { + try { + themeUtils.clearThemeListeners(); + } + catch (_) { } + try { + themeUtils.unwatchSystemTheme(); + } + catch (_) { } + } + if (i18nUtils) { + try { + i18nUtils.clearLocaleListeners(); + } + catch (_) { } + } + if (animationUtils) { + try { + animationUtils.cancelAll(); + } + catch (_) { } + } + globalPlugins.length = 0; +} +function getStatus() { + return { version: VERSION, theme: (themeUtils && typeof themeUtils.getCurrentTheme === 'function') ? themeUtils.getCurrentTheme() : 'auto', locale: (i18nUtils && typeof i18nUtils.getCurrentLocale === 'function') ? i18nUtils.getCurrentLocale() : 'zh-CN', globalPlugins: globalPlugins.map((p) => p.name || 'custom'), presetPlugins: Object.keys(presetPlugins || {}), }; +} +try { + if (typeof themeUtils === 'object' && typeof themeUtils.initTheme === 'function') + themeUtils.initTheme(); + if (typeof i18nUtils === 'object' && typeof i18nUtils.initI18n === 'function') + i18nUtils.initI18n(); +} +catch (_) { } +const api = { + VERSION, version: VERSION, + MarkdownEditor, Editor: MarkdownEditor, + create, use, on, off, setTheme, setLocale, destroy, getStatus, + parseMarkdown, parseTokens, renderTokens, safeUrl, slugify, clearRenderCache, registerBlockHandler, + themes: themeUtils, i18n: i18nUtils, animations: animationUtils, plugins: pluginUtils, presetPlugins, + topologicalSort, validateConfig, createInstanceI18n, loadRemote, + exportCSSVars, getCSSVariable, followExternalTheme, adoptFromParent, createInstanceTheme, + DEFAULTS, ICONS, THEMES, EDIT_MODES, DEFAULT_TOOLBAR, TOOLBAR_ACTIONS, +}; +if (typeof window !== 'undefined') { + window.MeEditor = api; +} + +export { DEFAULTS, DEFAULT_TOOLBAR, EDIT_MODES, MarkdownEditor as Editor, ICONS, MarkdownEditor, api as MeEditor, THEMES, TOOLBAR_ACTIONS, VERSION, adoptFromParent, animationUtils, api, clearRenderCache, create, createInstanceI18n, createInstanceTheme, api as default, destroy, exportCSSVars, followExternalTheme, getCSSVariable, getStatus, i18nUtils, loadRemote, api as meEditor, off, on, parseMarkdown, parseTokens, pluginUtils, presetPlugins, registerBlockHandler, renderTokens, safeUrl, setLocale, setTheme, slugify, themeUtils, topologicalSort, use, validateConfig }; +//# sourceMappingURL=metona-editor.esm.js.map diff --git a/dist/metona-editor.esm.js.map b/dist/metona-editor.esm.js.map new file mode 100644 index 0000000..ebf10e5 --- /dev/null +++ b/dist/metona-editor.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metona-editor.esm.js","sources":["../src/utils.ts","../src/icons.ts","../src/locales.ts","../src/constants.ts","../src/styles.ts","../src/i18n.ts","../src/parser.ts","../src/plugins.ts","../src/themes.ts","../src/core.ts","../src/animations.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":["i18nT"],"mappings":"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"} \ No newline at end of file diff --git a/dist/metona-editor.js b/dist/metona-editor.js new file mode 100644 index 0000000..cadf3de --- /dev/null +++ b/dist/metona-editor.js @@ -0,0 +1,4563 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MeEditor = {})); +})(this, (function (exports) { 'use strict'; + + /** + * MetonaEditor Utils — utility functions + * @module utils + * @version 0.2.0 + */ + /** Generate a unique ID */ + const generateId = () => { + return 'me-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 8); + }; + /** HTML-escape a string */ + const escapeHTML = (s) => { + const str = String(s == null ? '' : s); + if (typeof document === 'undefined') { + return str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); + } + const div = document.createElement('div'); + div.textContent = str; + return div.innerHTML; + }; + /** Detect dark mode preference */ + const prefersDark = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return false; + return window.matchMedia('(prefers-color-scheme: dark)').matches; + }; + /** Check if running in browser */ + const isBrowser = () => { + return typeof window !== 'undefined' && typeof document !== 'undefined'; + }; + + /** + * MetonaEditor Icons — SVG toolbar icons + * @module icons + * @version 0.2.0 + */ + const ICONS = { + bold: ``, + italic: ``, + underline: ``, + strikethrough: ``, + h1: ``, + h2: ``, + h3: ``, + quote: ``, + code: ``, + link: ``, + image: ``, + table: ``, + ul: ``, + ol: ``, + indent: ``, + outdent: ``, + hr: ``, + undo: ``, + redo: ``, + preview: ``, + split: ``, + edit: ``, + fullscreen: ``, + theme: ``, + }; + + /** + * MetonaEditor Locales — translation data + * @module locales + * @version 0.2.3 + */ + const LOCALES = { + 'zh-CN': { + bold: '粗体', italic: '斜体', underline: '下划线', strikethrough: '删除线', + h1: '标题1', h2: '标题2', h3: '标题3', quote: '引用', code: '代码', + link: '链接', image: '图片', table: '表格', ul: '无序列表', ol: '有序列表', + indent: '增加缩进', outdent: '减少缩进', hr: '分隔线', undo: '撤销', redo: '重做', + edit: '编辑', split: '分屏', preview: '预览', fullscreen: '全屏', + fullscreenExit: '退出全屏', theme: '主题', light: '亮色', dark: '暗色', + auto: '自动', warm: '暖色', wordCount: '字数统计', characters: '字符', + words: '词数', lines: '行数', readingTime: '阅读', minutes: '分钟', + placeholder: '开始输入 Markdown...', empty: '暂无内容', copied: '已复制', + copyContent: '复制内容', copyHTML: '复制 HTML', copySuccess: '复制成功', + copyFailed: '复制失败', clearContent: '清空内容', clearConfirm: '确定要清空所有内容吗?', + linkPlaceholder: '请输入链接地址', imagePlaceholder: '请输入图片地址', + altPlaceholder: '请输入替代文本', tableRows: '行数', tableCols: '列数', + confirm: '确认', cancel: '取消', exportMarkdown: '导出 Markdown', + exportHTML: '导出 HTML', search: '搜索', replace: '替换', replaceAll: '全部替换', + searchPlaceholder: '查找内容', replacePlaceholder: '替换为', + findNext: '查找下一个', findPrev: '查找上一个', matchCase: '区分大小写', + wholeWord: '全字匹配', close: '关闭', open: '打开', save: '保存', + saved: '已保存', saving: '保存中...', delete: '删除', confirmDelete: '确定要删除吗?', + unsavedChanges: '有未保存的更改', error: '错误', success: '成功', + warning: '警告', info: '信息', loading: '加载中...', retry: '重试', + renderError: '渲染失败', + outline: '大纲', + cut: '剪切', copy: '复制', paste: '粘贴', selectAll: '全选', + }, + 'en-US': { + bold: 'Bold', italic: 'Italic', underline: 'Underline', strikethrough: 'Strikethrough', + h1: 'Heading 1', h2: 'Heading 2', h3: 'Heading 3', quote: 'Quote', code: 'Code', + link: 'Link', image: 'Image', table: 'Table', ul: 'Bullet List', ol: 'Numbered List', + indent: 'Indent', outdent: 'Outdent', hr: 'Horizontal Rule', undo: 'Undo', redo: 'Redo', + edit: 'Edit', split: 'Split', preview: 'Preview', fullscreen: 'Fullscreen', + fullscreenExit: 'Exit Fullscreen', theme: 'Theme', light: 'Light', dark: 'Dark', + auto: 'Auto', warm: 'Warm', wordCount: 'Word Count', characters: 'Characters', + words: 'Words', lines: 'Lines', readingTime: 'Reading', minutes: 'min', + placeholder: 'Start typing Markdown...', empty: 'No content', copied: 'Copied', + copyContent: 'Copy Content', copyHTML: 'Copy HTML', copySuccess: 'Copied successfully', + copyFailed: 'Copy failed', clearContent: 'Clear Content', clearConfirm: 'Clear all content?', + linkPlaceholder: 'Enter link URL', imagePlaceholder: 'Enter image URL', + altPlaceholder: 'Enter alt text', tableRows: 'Rows', tableCols: 'Columns', + confirm: 'Confirm', cancel: 'Cancel', exportMarkdown: 'Export Markdown', + exportHTML: 'Export HTML', search: 'Search', replace: 'Replace', replaceAll: 'Replace All', + searchPlaceholder: 'Find', replacePlaceholder: 'Replace with', + findNext: 'Find Next', findPrev: 'Find Previous', matchCase: 'Match Case', + wholeWord: 'Whole Word', close: 'Close', open: 'Open', save: 'Save', + saved: 'Saved', saving: 'Saving...', delete: 'Delete', confirmDelete: 'Are you sure you want to delete?', + unsavedChanges: 'You have unsaved changes', error: 'Error', success: 'Success', + warning: 'Warning', info: 'Info', loading: 'Loading...', retry: 'Retry', + renderError: 'Render failed', + outline: 'Outline', + cut: 'Cut', copy: 'Copy', paste: 'Paste', selectAll: 'Select All', + }, + ja: { + bold: '太字', italic: '斜体', underline: '下線', strikethrough: '打ち消し線', + h1: '見出し1', h2: '見出し2', h3: '見出し3', quote: '引用', code: 'コード', + link: 'リンク', image: '画像', table: '表', ul: '箇条書き', ol: '番号付きリスト', + indent: 'インデント', outdent: 'インデント解除', hr: '水平線', undo: '元に戻す', redo: 'やり直し', + edit: '編集', split: '分割', preview: 'プレビュー', fullscreen: '全画面', + fullscreenExit: '全画面解除', theme: 'テーマ', light: 'ライト', dark: 'ダーク', + auto: '自動', warm: 'ウォーム', wordCount: '文字数', characters: '文字', + words: '単語', lines: '行', readingTime: '読了時間', minutes: '分', + placeholder: 'Markdownを入力...', empty: '内容なし', copied: 'コピー済み', + copyContent: '内容をコピー', copyHTML: 'HTMLをコピー', copySuccess: 'コピー成功', + copyFailed: 'コピー失敗', clearContent: '内容をクリア', clearConfirm: 'すべての内容をクリアしますか?', + linkPlaceholder: 'リンクURLを入力', imagePlaceholder: '画像URLを入力', + altPlaceholder: '代替テキストを入力', tableRows: '行', tableCols: '列', + confirm: '確認', cancel: 'キャンセル', exportMarkdown: 'Markdownエクスポート', + exportHTML: 'HTMLエクスポート', search: '検索', replace: '置換', replaceAll: 'すべて置換', + searchPlaceholder: '検索', replacePlaceholder: '置換後', + findNext: '次を検索', findPrev: '前を検索', matchCase: '大文字小文字', + wholeWord: '単語単位', close: '閉じる', open: '開く', save: '保存', + saved: '保存済み', saving: '保存中...', delete: '削除', confirmDelete: '削除してもよろしいですか?', + unsavedChanges: '未保存の変更があります', error: 'エラー', success: '成功', + warning: '警告', info: '情報', loading: '読み込み中...', retry: '再試行', + renderError: 'レンダリング失敗', + outline: 'アウトライン', + cut: '切り取り', copy: 'コピー', paste: '貼り付け', selectAll: 'すべて選択', + }, + ko: { + bold: '굵게', italic: '기울임', underline: '밑줄', strikethrough: '취소선', + h1: '제목1', h2: '제목2', h3: '제목3', quote: '인용', code: '코드', + link: '링크', image: '이미지', table: '표', ul: '순서 없는 목록', ol: '순서 있는 목록', + indent: '들여쓰기', outdent: '내어쓰기', hr: '수평선', undo: '실행 취소', redo: '다시 실행', + edit: '편집', split: '분할', preview: '미리보기', fullscreen: '전체 화면', + fullscreenExit: '전체 화면 종료', theme: '테마', light: '라이트', dark: '다크', + auto: '자동', warm: '웜', wordCount: '글자 수', characters: '글자', + words: '단어', lines: '줄', readingTime: '읽기 시간', minutes: '분', + placeholder: 'Markdown 입력...', empty: '내용 없음', copied: '복사됨', + copyContent: '내용 복사', copyHTML: 'HTML 복사', copySuccess: '복사 성공', + copyFailed: '복사 실패', clearContent: '내용 지우기', clearConfirm: '모든 내용을 지우시겠습니까?', + linkPlaceholder: '링크 URL 입력', imagePlaceholder: '이미지 URL 입력', + altPlaceholder: '대체 텍스트 입력', tableRows: '행', tableCols: '열', + confirm: '확인', cancel: '취소', exportMarkdown: 'Markdown 내보내기', + exportHTML: 'HTML 내보내기', search: '검색', replace: '바꾸기', replaceAll: '모두 바꾸기', + searchPlaceholder: '찾기', replacePlaceholder: '바꿀 내용', + findNext: '다음 찾기', findPrev: '이전 찾기', matchCase: '대소문자 구분', + wholeWord: '단어 단위', close: '닫기', open: '열기', save: '저장', + saved: '저장됨', saving: '저장 중...', delete: '삭제', confirmDelete: '삭제하시겠습니까?', + unsavedChanges: '저장되지 않은 변경 사항이 있습니다', error: '오류', success: '성공', + warning: '경고', info: '정보', loading: '로딩 중...', retry: '재시도', + renderError: '렌더링 실패', + outline: '개요', + cut: '잘라내기', copy: '복사', paste: '붙여넣기', selectAll: '전체 선택', + }, + fr: { + bold: 'Gras', italic: 'Italique', underline: 'Souligné', strikethrough: 'Barré', + h1: 'Titre 1', h2: 'Titre 2', h3: 'Titre 3', quote: 'Citation', code: 'Code', + link: 'Lien', image: 'Image', table: 'Tableau', ul: 'Liste à puces', ol: 'Liste numérotée', + indent: 'Indenter', outdent: 'Désindenter', hr: 'Ligne horizontale', undo: 'Annuler', redo: 'Rétablir', + edit: 'Éditer', split: 'Fractionné', preview: 'Aperçu', fullscreen: 'Plein écran', + fullscreenExit: 'Quitter plein écran', theme: 'Thème', light: 'Clair', dark: 'Sombre', + auto: 'Auto', warm: 'Chaud', wordCount: 'Nombre de mots', characters: 'Caractères', + words: 'Mots', lines: 'Lignes', readingTime: 'Lecture', minutes: 'min', + placeholder: 'Commencez à taper Markdown...', empty: 'Aucun contenu', copied: 'Copié', + copyContent: 'Copier le contenu', copyHTML: 'Copier HTML', copySuccess: 'Copié avec succès', + copyFailed: 'Échec de la copie', clearContent: 'Effacer le contenu', clearConfirm: 'Effacer tout le contenu ?', + linkPlaceholder: 'Entrez l\'URL du lien', imagePlaceholder: 'Entrez l\'URL de l\'image', + altPlaceholder: 'Entrez le texte alternatif', tableRows: 'Lignes', tableCols: 'Colonnes', + confirm: 'Confirmer', cancel: 'Annuler', exportMarkdown: 'Exporter Markdown', + exportHTML: 'Exporter HTML', search: 'Rechercher', replace: 'Remplacer', replaceAll: 'Tout remplacer', + searchPlaceholder: 'Rechercher', replacePlaceholder: 'Remplacer par', + findNext: 'Suivant', findPrev: 'Précédent', matchCase: 'Respecter la casse', + wholeWord: 'Mot entier', close: 'Fermer', open: 'Ouvrir', save: 'Enregistrer', + saved: 'Enregistré', saving: 'Enregistrement...', delete: 'Supprimer', confirmDelete: 'Confirmer la suppression ?', + unsavedChanges: 'Modifications non enregistrées', error: 'Erreur', success: 'Succès', + warning: 'Avertissement', info: 'Info', loading: 'Chargement...', retry: 'Réessayer', + renderError: 'Échec du rendu', + outline: 'Plan', + cut: 'Couper', copy: 'Copier', paste: 'Coller', selectAll: 'Tout sélectionner', + }, + de: { + bold: 'Fett', italic: 'Kursiv', underline: 'Unterstrichen', strikethrough: 'Durchgestrichen', + h1: 'Überschrift 1', h2: 'Überschrift 2', h3: 'Überschrift 3', quote: 'Zitat', code: 'Code', + link: 'Link', image: 'Bild', table: 'Tabelle', ul: 'Aufzählung', ol: 'Nummerierte Liste', + indent: 'Einrücken', outdent: 'Ausrücken', hr: 'Trennlinie', undo: 'Rückgängig', redo: 'Wiederholen', + edit: 'Bearbeiten', split: 'Geteilt', preview: 'Vorschau', fullscreen: 'Vollbild', + fullscreenExit: 'Vollbild beenden', theme: 'Design', light: 'Hell', dark: 'Dunkel', + auto: 'Auto', warm: 'Warm', wordCount: 'Wörter', characters: 'Zeichen', + words: 'Wörter', lines: 'Zeilen', readingTime: 'Lesezeit', minutes: 'min', + placeholder: 'Markdown eingeben...', empty: 'Kein Inhalt', copied: 'Kopiert', + copyContent: 'Inhalt kopieren', copyHTML: 'HTML kopieren', copySuccess: 'Erfolgreich kopiert', + copyFailed: 'Kopieren fehlgeschlagen', clearContent: 'Inhalt löschen', clearConfirm: 'Gesamten Inhalt löschen?', + linkPlaceholder: 'Link-URL eingeben', imagePlaceholder: 'Bild-URL eingeben', + altPlaceholder: 'Alternativtext eingeben', tableRows: 'Zeilen', tableCols: 'Spalten', + confirm: 'Bestätigen', cancel: 'Abbrechen', exportMarkdown: 'Markdown exportieren', + exportHTML: 'HTML exportieren', search: 'Suchen', replace: 'Ersetzen', replaceAll: 'Alle ersetzen', + searchPlaceholder: 'Suchen', replacePlaceholder: 'Ersetzen mit', + findNext: 'Nächstes', findPrev: 'Vorheriges', matchCase: 'Groß-/Kleinschreibung', + wholeWord: 'Ganzes Wort', close: 'Schließen', open: 'Öffnen', save: 'Speichern', + saved: 'Gespeichert', saving: 'Speichern...', delete: 'Löschen', confirmDelete: 'Wirklich löschen?', + unsavedChanges: 'Ungespeicherte Änderungen', error: 'Fehler', success: 'Erfolg', + warning: 'Warnung', info: 'Info', loading: 'Laden...', retry: 'Wiederholen', + renderError: 'Rendern fehlgeschlagen', + outline: 'Gliederung', + cut: 'Ausschneiden', copy: 'Kopieren', paste: 'Einfügen', selectAll: 'Alles auswählen', + }, + }; + + /** + * MetonaEditor Constants — default configs, themes, animations + * @module constants + * @version 0.2.0 + */ + /** Default toolbar button sequence */ + const DEFAULT_TOOLBAR = [ + 'bold', 'italic', 'strikethrough', 'code', '|', + 'h1', 'h2', 'h3', '|', + 'quote', 'ul', 'ol', '|', + 'link', 'image', 'table', 'hr', '|', + 'undo', 'redo', '|', + 'edit', 'split', 'preview', 'fullscreen', + ]; + /** Default options */ + const DEFAULTS = Object.freeze({ + value: '', + placeholder: '', + mode: 'split', + height: 400, + toolbar: DEFAULT_TOOLBAR, + wordCount: true, + autofocus: false, + spellcheck: false, + historyLimit: 100, + historyDebounce: 400, + syncScroll: true, + tabSize: 2, + readOnly: false, + lineNumbers: true, + outline: false, + autoBrackets: true, + zenMode: false, + wordWrap: true, + maxLength: 0, + theme: 'auto', + locale: 'zh-CN', + render: null, + highlight: null, + sanitize: null, + className: '', + style: {}, + plugins: [], + onChange: null, + onInput: null, + onFocus: null, + onBlur: null, + onSave: null, + onModeChange: null, + onFullscreen: null, + onCreate: null, + onDestroy: null, + onLinkClick: null, + floatingToolbar: true, + }); + const THEMES = { + light: { + bg: 'rgba(255, 255, 255, 0.96)', + text: '#1f2937', + border: 'rgba(0, 0, 0, 0.08)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.18), 0 4px 14px -4px rgba(0, 0, 0, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(0, 0, 0, 0.22), 0 6px 18px -4px rgba(0, 0, 0, 0.10)', + toolbarBg: 'rgba(248, 249, 250, 0.92)', + textareaBg: '#ffffff', + previewBg: '#ffffff', + codeBg: 'rgba(243, 244, 246, 1)', + codeText: '#1f2937', + accent: '#3b82f6', + muted: '#6b7280', + }, + dark: { + bg: 'rgba(28, 32, 40, 0.94)', + text: '#e6e8eb', + border: 'rgba(255, 255, 255, 0.1)', + shadow: '0 10px 36px -10px rgba(0, 0, 0, 0.6), 0 4px 14px -4px rgba(0, 0, 0, 0.4)', + hoverShadow: '0 14px 48px -8px rgba(0, 0, 0, 0.6), 0 6px 18px -4px rgba(0, 0, 0, 0.4)', + toolbarBg: 'rgba(22, 26, 33, 0.92)', + textareaBg: '#1c2028', + previewBg: '#1c2028', + codeBg: 'rgba(15, 18, 24, 1)', + codeText: '#e6e8eb', + accent: '#60a5fa', + muted: '#9ca3af', + }, + auto: 'auto', + warm: { + bg: 'rgba(255, 251, 235, 0.96)', + text: '#78350f', + border: 'rgba(245, 158, 11, 0.2)', + shadow: '0 10px 36px -10px rgba(245, 158, 11, 0.18), 0 4px 14px -4px rgba(245, 158, 11, 0.08)', + hoverShadow: '0 14px 48px -10px rgba(245, 158, 11, 0.22), 0 6px 18px -4px rgba(245, 158, 11, 0.10)', + toolbarBg: 'rgba(254, 243, 199, 0.92)', + textareaBg: '#fffbeb', + previewBg: '#fffbeb', + codeBg: 'rgba(254, 215, 170, 0.6)', + codeText: '#78350f', + accent: '#d97706', + muted: '#a16207', + progressBg: 'rgba(217, 119, 6, 0.15)', + closeHoverBg: 'rgba(217, 119, 6, 0.2)', + }, + }; + const ANIMATIONS = { + slide: { enter: { transform: 'translateX(80px)', opacity: '0' }, leave: { transform: 'translateX(120%)', opacity: '0' }, duration: 400, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + fade: { enter: { opacity: '0', filter: 'blur(3px)' }, leave: { opacity: '0', filter: 'blur(3px)' }, duration: 500, easing: 'ease' }, + scale: { enter: { transform: 'scale(0.55)', opacity: '0' }, leave: { transform: 'scale(0.55)', opacity: '0' }, duration: 450, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, + bounce: { enter: { transform: 'translateY(-80px)', opacity: '0' }, leave: { transform: 'translateY(20px)', opacity: '0' }, duration: 650, easing: 'ease' }, + flip: { enter: { transform: 'perspective(500px) rotateX(-90deg)', opacity: '0' }, leave: { transform: 'perspective(500px) rotateX(90deg)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + rotate: { enter: { transform: 'rotate(-25deg) scale(0.6)', opacity: '0' }, leave: { transform: 'rotate(25deg) scale(0.6)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' }, + zoom: { enter: { transform: 'scale(0.1)', opacity: '0' }, leave: { transform: 'scale(0.1)', opacity: '0' }, duration: 500, easing: 'cubic-bezier(0.34, 1.56, 0.64, 1)' }, + }; + const EDIT_MODES = ['edit', 'split', 'preview']; + const TOOLBAR_ACTIONS = [ + 'bold', 'italic', 'strikethrough', 'underline', 'code', + 'h1', 'h2', 'h3', 'quote', 'ul', 'ol', 'indent', 'outdent', 'hr', + 'link', 'image', 'table', 'undo', 'redo', + 'edit', 'split', 'preview', 'fullscreen', + ]; + + /** + * MetonaEditor Styles — CSS-in-JS injection + * @module styles + * @version 0.2.0 + */ + let styleElement = null; + const generateCSS = () => { + return `:root{--md-bg:#ffffff;--md-text:#1f2937;--md-border:rgba(0,0,0,0.08);--md-shadow:0 10px 36px -10px rgba(0,0,0,0.18),0 4px 14px -4px rgba(0,0,0,0.08);--md-hover-shadow:0 14px 48px -10px rgba(0,0,0,0.22),0 6px 18px -4px rgba(0,0,0,0.10);--md-toolbar-bg:rgba(248,249,250,0.92);--md-textarea-bg:#ffffff;--md-preview-bg:#ffffff;--md-code-bg:rgba(243,244,246,1);--md-code-text:#1f2937;--md-accent:#3b82f6;--md-muted:#6b7280;--md-radius:10px;--md-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;--md-mono:"SF Mono","Cascadia Code","Consolas","Liberation Mono","Courier New",monospace} +.me-wrapper{display:flex;flex-direction:column;box-sizing:border-box;border:1px solid var(--md-border);border-radius:var(--md-radius);overflow:hidden;background:var(--md-bg);color:var(--md-text);box-shadow:var(--md-shadow);font-family:var(--md-font);font-size:14px;line-height:1.6;position:relative;transition:box-shadow .25s,border-color .25s;width:100%} +.me-wrapper:hover{box-shadow:var(--md-hover-shadow)} +.me-wrapper.me-disabled{opacity:.6;pointer-events:none} +.me-wrapper *{box-sizing:border-box} +.me-wrapper.me-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;border-radius:0;border:0} +.me-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background:var(--md-toolbar-bg);border-bottom:1px solid var(--md-border);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);min-height:40px} +.me-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--md-text);cursor:pointer;transition:background .15s,color .15s,transform .1s;flex-shrink:0} +.me-btn:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-btn:active{transform:scale(.92)} +.me-btn.me-active{background:var(--md-accent);color:#fff} +.me-btn:disabled{opacity:.35;cursor:not-allowed;pointer-events:none} +.me-btn:focus-visible{outline:2px solid var(--md-accent);outline-offset:2px} +.me-btn:focus:not(:focus-visible){outline:none} +.me-btn svg{width:17px;height:17px;display:block} +.me-btn span{font-size:12px;font-weight:500} +.me-toolbar-sep{display:inline-block;width:1px;height:20px;background:var(--md-border);margin:0 4px;flex-shrink:0} +.me-toolbar-group{display:inline-flex;gap:2px;margin-left:auto;padding-left:6px;border-left:1px solid var(--md-border)} +.me-toolbar-group .me-btn{width:auto;padding:0 8px} +.me-body{display:flex;flex:1;min-height:0;position:relative} +.me-editor-pane,.me-preview-pane{flex:1 1 50%;min-width:0;overflow:hidden;position:relative} +.me-editor-inner{display:flex;height:100%;overflow:hidden;position:relative} +.me-gutter{flex:0 0 auto;min-width:36px;padding:16px 8px 16px 6px;overflow:hidden;background:var(--md-code-bg);border-right:1px solid var(--md-border);color:var(--md-muted);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;text-align:right;user-select:none;white-space:pre} +.me-gutter-line{padding-right:4px} +.me-gutter-active{color:var(--md-accent);font-weight:600;background:rgba(59,130,246,.08);border-radius:3px} +.me-divider{flex:0 0 1px;background:var(--md-border);cursor:col-resize;position:relative} +.me-divider::after{content:'';position:absolute;top:0;bottom:0;left:-3px;right:-3px} +.me-divider:hover{background:var(--md-accent)} +.me-textarea{width:100%;height:100%;padding:16px 18px;border:0;outline:0;resize:none;background:var(--md-textarea-bg);color:var(--md-text);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;display:block;white-space:pre-wrap;word-wrap:break-word;position:relative;z-index:1} +.me-textarea::placeholder{color:var(--md-muted);opacity:.7} +.me-textarea:focus{outline:0} +.me-preview-pane{overflow:auto;background:var(--md-preview-bg)} +.me-preview{padding:18px 22px;max-width:100%;word-wrap:break-word;overflow-wrap:break-word} +.me-body.me-mode-edit .me-preview-pane,.me-body.me-mode-edit .me-divider{display:none} +.me-body.me-mode-edit .me-editor-pane{flex:1 1 100%} +.me-body.me-mode-preview .me-editor-pane,.me-body.me-mode-preview .me-divider{display:none} +.me-body.me-mode-preview .me-preview-pane{flex:1 1 100%} +.me-preview>:first-child{margin-top:0} +.me-preview>:last-child{margin-bottom:0} +.me-preview h1,.me-preview h2,.me-preview h3,.me-preview h4,.me-preview h5,.me-preview h6{margin:1.4em 0 .6em;font-weight:650;line-height:1.3} +.me-preview h1{font-size:1.9em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h2{font-size:1.55em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)} +.me-preview h3{font-size:1.3em} +.me-preview h4{font-size:1.12em} +.me-preview h5{font-size:1em} +.me-preview h6{font-size:.9em;color:var(--md-muted)} +.me-preview p{margin:.7em 0} +.me-preview a{color:var(--md-accent);text-decoration:none} +.me-preview a:hover{text-decoration:underline} +.me-preview strong{font-weight:650} +.me-preview em{font-style:italic} +.me-preview del{text-decoration:line-through;opacity:.75} +.me-preview ul,.me-preview ol{margin:.6em 0;padding-left:1.6em} +.me-preview li{margin:.25em 0} +.me-preview li.me-task-item{list-style:none;margin-left:-1.4em} +.me-preview li.me-task-item input{margin-right:.5em;vertical-align:middle} +.me-preview blockquote{margin:.8em 0;padding:.4em 1em;border-left:3px solid var(--md-accent);background:var(--md-code-bg);border-radius:0 6px 6px 0;color:var(--md-text)} +.me-preview blockquote>:first-child{margin-top:0} +.me-preview blockquote>:last-child{margin-bottom:0} +.me-preview hr{border:0;height:1px;background:var(--md-border);margin:1.6em 0} +.me-preview code{font-family:var(--md-mono);font-size:.88em;padding:.15em .4em;background:var(--md-code-bg);color:var(--md-code-text);border-radius:4px} +.me-preview pre{margin:.9em 0;padding:14px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;border:1px solid var(--md-border)} +.me-code-title{font-family:var(--md-mono);font-size:.85em;padding:8px 14px;background:var(--md-border);border-radius:8px 8px 0 0;color:var(--md-text);margin:.9em 0 -0.9em;font-weight:600} +.me-code-title+pre{margin-top:0;border-radius:0 0 8px 8px;border-top:none} +.me-preview pre code{padding:0;background:transparent;color:var(--md-code-text);font-size:.9em;line-height:1.6;border-radius:0} +.me-preview img{max-width:100%;height:auto;border-radius:6px;vertical-align:middle} +.me-table-wrap{overflow-x:auto;margin:.9em 0} +.me-preview table{border-collapse:collapse;width:100%;font-size:.93em;display:block} +.me-preview th,.me-preview td{border:1px solid var(--md-border);padding:7px 12px;text-align:left} +.me-preview th{background:var(--md-code-bg);font-weight:600} +.me-preview tr:nth-child(even) td{background:var(--md-code-bg)} +.me-statusbar{display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:4px 12px;border-top:1px solid var(--md-border);background:var(--md-toolbar-bg);color:var(--md-muted);font-size:12px;min-height:26px} +.me-statusbar:empty{display:none} +.me-wrapper:focus-within{border-color:var(--md-accent)} +.me-textarea:focus-visible{outline:0} +@media(prefers-reduced-motion:reduce){.me-wrapper,.me-btn,.me-textarea{transition:none!important}} +.me-wrapper.me-fullscreen .me-preview,.me-wrapper.me-fullscreen .me-textarea{font-size:15px} +.me-wrapper.me-readonly .me-textarea{background:var(--md-code-bg);cursor:default;opacity:.88} +.me-wrapper.me-readonly .me-toolbar{opacity:.75} +.me-wrapper.me-readonly .me-btn:disabled{opacity:.3;cursor:not-allowed;pointer-events:none} +.me-preview mark{background:rgba(250,204,21,.3);color:inherit;padding:.1em .2em;border-radius:3px} +.me-preview sup{font-size:.75em;vertical-align:super;line-height:1} +.me-preview sub{font-size:.75em;vertical-align:sub;line-height:1} +.me-preview .me-math-block{display:block;margin:1.2em 0;padding:12px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;font-family:var(--md-mono);font-size:.95em;text-align:center} +.me-preview .me-math-inline{font-family:var(--md-mono);font-size:.95em;padding:.05em .2em} +.me-preview dl{margin:.8em 0} +.me-preview dt{font-weight:650;margin:.6em 0 .2em} +.me-preview dd{margin:0 0 .3em 1.6em;color:var(--md-text)} +.me-preview .me-footnote-ref a{font-size:.75em;vertical-align:super;text-decoration:none;color:var(--md-accent)} +.me-preview .me-footnotes{margin-top:2em;border-top:1px solid var(--md-border);padding-top:.8em;font-size:.9em;color:var(--md-muted)} +.me-preview .me-footnotes hr{display:none} +.me-preview .me-footnotes ol{padding-left:1.2em} +.me-preview .me-footnote-item{margin:.3em 0} +.me-preview .me-footnote-backref{text-decoration:none;color:var(--md-accent);margin-right:.4em} +.me-toast{position:absolute;bottom:16px;right:16px;z-index:30;display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:8px;font-size:13px;pointer-events:auto;cursor:pointer;opacity:0;transform:translateY(12px);transition:opacity .3s,transform .3s;box-shadow:0 6px 20px rgba(0,0,0,.15);max-width:360px} +.me-toast.me-toast-enter{opacity:1;transform:translateY(0)} +.me-toast.me-toast-leave{opacity:0;transform:translateY(12px)} +.me-toast-success{background:#10b981;color:#fff} +.me-toast-error{background:#ef4444;color:#fff} +.me-toast-warning{background:#f59e0b;color:#fff} +.me-toast-info{background:var(--md-accent,#3b82f6);color:#fff} +.me-toast-icon{font-weight:700;font-size:16px;flex-shrink:0} +.me-toast-msg{line-height:1.4} +.me-context-menu{position:fixed;z-index:40;min-width:180px;padding:4px 0;background:var(--md-bg);border:1px solid var(--md-border);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.18);font-size:13px} +.me-context-menu-item{display:flex;align-items:center;justify-content:space-between;padding:6px 14px;cursor:pointer;color:var(--md-text);transition:background .1s} +.me-context-menu-item:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-context-menu-sep{height:1px;background:var(--md-border);margin:4px 0} +.me-context-menu-shortcut{color:var(--md-muted);font-size:11px;margin-left:24px} +.me-context-menu-item.me-disabled{opacity:.4;cursor:not-allowed;pointer-events:none} +.me-outline{position:absolute;top:0;right:0;width:220px;height:100%;overflow-y:auto;background:var(--md-preview-bg);border-left:1px solid var(--md-border);padding:12px 14px;font-size:13px;z-index:15} +.me-outline-title{font-weight:650;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--md-border);color:var(--md-text)} +.me-outline ul{list-style:none;padding:0;margin:0} +.me-outline li{margin:2px 0} +.me-outline a{color:var(--md-muted);text-decoration:none;display:block;padding:2px 6px;border-radius:4px;transition:background .1s,color .1s} +.me-outline a:hover{background:var(--md-code-bg);color:var(--md-accent)} +.me-outline a.me-outline-active{background:var(--md-accent);color:#fff;font-weight:600} +.me-outline-l1 a{font-weight:600;color:var(--md-text)} +.me-outline-l2 a{padding-left:12px} +.me-outline-l3 a{padding-left:20px;font-size:12px} +.me-outline-l4 a{padding-left:28px;font-size:12px} +.me-wrapper.me-zen .me-body{max-width:820px;margin:0 auto} +.me-wrapper.me-zen .me-textarea{font-size:15px;line-height:1.8} +.me-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0} +@media print{.me-wrapper{border:0!important;box-shadow:none!important} +.me-toolbar,.me-statusbar,.me-divider{display:none!important} +.me-body.me-mode-split .me-editor-pane{display:none} +.me-body.me-mode-split .me-preview-pane{flex:1 1 100%!important} +.me-preview{padding:0!important;font-size:11pt} +.me-wrapper.me-fullscreen{position:static!important;width:auto!important;height:auto!important}} +[dir=rtl] .me-gutter{border-right:none;border-left:1px solid var(--md-border);text-align:left} +[dir=rtl] .me-gutter-line{padding-right:0;padding-left:4px} +[dir=rtl] .me-toolbar-group{margin-left:0;margin-right:auto;padding-left:0;padding-right:6px;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline{right:auto;left:0;border-left:none;border-right:1px solid var(--md-border)} +[dir=rtl] .me-outline-l2 a{padding-left:0;padding-right:12px} +[dir=rtl] .me-outline-l3 a{padding-left:0;padding-right:20px} +[dir=rtl] .me-outline-l4 a{padding-left:0;padding-right:28px} +[dir=rtl] .me-preview blockquote{border-left:none;border-right:3px solid var(--md-accent);border-radius:6px 0 0 6px} +[dir=rtl] .me-preview ul,[dir=rtl] .me-preview ol{padding-left:0;padding-right:1.6em} +[dir=rtl] .me-preview li.me-task-item{margin-left:0;margin-right:-1.4em} +[dir=rtl] .me-preview dd{margin-left:0;margin-right:1.6em} +[dir=rtl] .me-preview .me-footnotes ol{padding-left:0;padding-right:1.2em} +[dir=rtl] .me-preview .me-footnote-backref{margin-right:0;margin-left:.4em} +[dir=rtl] .me-search{right:auto;left:12px} +[dir=rtl] .me-toast{right:auto;left:16px} +[dir=rtl] .me-context-menu-shortcut{margin-left:0;margin-right:24px} +[dir=rtl] .me-statusbar{justify-content:flex-start}`; + }; + const injectStyles = () => { + if (typeof document === 'undefined') + return; + if (styleElement && document.getElementById('metona-editor-styles')) + return; + const css = generateCSS(); + styleElement = document.createElement('style'); + styleElement.id = 'metona-editor-styles'; + styleElement.textContent = css; + document.head.appendChild(styleElement); + }; + + /** + * MetonaEditor i18n — internationalization + * @module i18n + * @version 0.2.0 + */ + let currentLocale = 'zh-CN'; + let localeListeners = new Set(); + let fallbackLocale = 'zh-CN'; + const pluralRules = { + zh: () => 'other', + en: (n) => n === 1 ? 'one' : 'other', + ru: (n) => { + const m = n % 10, h = n % 100; + if (m === 1 && h !== 11) + return 'one'; + if (m >= 2 && m <= 4 && !(h >= 12 && h <= 14)) + return 'few'; + if (m === 0 || (m >= 5 && m <= 9) || (h >= 11 && h <= 14)) + return 'many'; + return 'other'; + }, + }; + const getPluralForm = (locale, count) => { + const lang = locale.split('-')[0].toLowerCase(); + const rule = pluralRules[lang] || pluralRules.en; + return rule(Math.abs(count)); + }; + const getCurrentLocale = () => currentLocale; + const setCurrentLocale = (locale) => { + let target = locale; + if (!LOCALES[target]) { + console.warn(`Locale "${target}" not found, falling back to "${fallbackLocale}"`); + target = fallbackLocale; + } + currentLocale = target; + notifyLocaleListeners(target); + saveLocale(target); + }; + const t = (key, params = {}, locale) => { + const loc = locale || currentLocale; + let translation = getTranslation(loc, key); + if (translation && typeof translation === 'object' && params.count !== undefined) { + const form = getPluralForm(loc, params.count); + translation = translation[form] || translation.other || key; + } + if (typeof translation === 'string') + return interpolate(translation, params); + if (loc !== fallbackLocale) { + let fb = getTranslation(fallbackLocale, key); + if (fb && typeof fb === 'object' && params.count !== undefined) { + const form = getPluralForm(fallbackLocale, params.count); + fb = fb[form] || fb.other; + } + if (typeof fb === 'string') + return interpolate(fb, params); + } + console.warn(`Translation missing for key "${key}" in locale "${loc}"`); + return key; + }; + const getTranslation = (locale, key) => { + const localeData = LOCALES[locale]; + if (!localeData) + return undefined; + const keys = key.split('.'); + let result = localeData; + for (const k of keys) { + if (result && typeof result === 'object' && k in result) { + result = result[k]; + } + else + return undefined; + } + return result; + }; + const interpolate = (str, params) => { + return str.replace(/\{(\w+)\}/g, (_match, key) => params[key] !== undefined ? String(params[key]) : _match); + }; + const hasTranslation = (key) => { + return getTranslation(currentLocale, key) !== undefined || getTranslation(fallbackLocale, key) !== undefined; + }; + const getTranslations = (locale) => LOCALES[locale] || {}; + const addTranslations = (locale, translations) => { + if (!LOCALES[locale]) + LOCALES[locale] = {}; + deepMergeI18n(LOCALES[locale], translations); + }; + const loadRemote = async (url, locale) => { + try { + const res = await fetch(url); + if (!res.ok) + throw new Error(`HTTP ${res.status}`); + const data = await res.json(); + addTranslations(locale, data); + return true; + } + catch (e) { + console.error(`MeEditor: failed to load locale "${locale}" from ${url}`, e); + return false; + } + }; + const deepMergeI18n = (target, source) => { + for (const key in source) { + if (source[key] instanceof Object && key in target && target[key] instanceof Object && !Array.isArray(source[key])) { + deepMergeI18n(target[key], source[key]); + } + else { + target[key] = source[key]; + } + } + return target; + }; + const getSupportedLocales = () => Object.keys(LOCALES); + const isLocaleSupported = (locale) => locale in LOCALES; + const getLocaleName = (locale) => { + const names = { + 'zh-CN': '简体中文', 'zh-TW': '繁體中文', 'en-US': 'English (US)', 'en-GB': 'English (UK)', + ja: '日本語', ko: '한국어', fr: 'Français', de: 'Deutsch', es: 'Español', pt: 'Português', + ru: 'Русский', ar: 'العربية', hi: 'हिन्दी', th: 'ไทย', + vi: 'Tiếng Việt', id: 'Bahasa Indonesia', tr: 'Türkçe', + it: 'Italiano', nl: 'Nederlands', pl: 'Polski', + }; + return names[locale] || locale; + }; + const getLocaleDirection = (locale) => { + const rtlLocales = ['ar', 'he', 'fa', 'ur', 'yi', 'ps', 'sd', 'ug', 'dv', 'ku', 'syr']; + const short = locale.split('-')[0].toLowerCase(); + return rtlLocales.includes(short) ? 'rtl' : 'ltr'; + }; + const formatNumber = (number, options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, options).format(number); + } + catch (_) { + return String(number); + } + }; + const formatCurrency = (amount, currency = 'USD', options = {}) => { + try { + return new Intl.NumberFormat(currentLocale, { style: 'currency', currency, ...options }).format(amount); + } + catch (_) { + return String(amount); + } + }; + const formatDate = (date, options = {}) => { + try { + const d = date instanceof Date ? date : new Date(date); + return new Intl.DateTimeFormat(currentLocale, options).format(d); + } + catch (_) { + return String(date); + } + }; + const addLocaleListener = (fn) => { + localeListeners.add(fn); + return () => { localeListeners.delete(fn); }; + }; + const removeLocaleListener = (fn) => { localeListeners.delete(fn); }; + const clearLocaleListeners = () => { localeListeners.clear(); }; + const notifyLocaleListeners = (locale) => { + localeListeners.forEach((fn) => { + try { + fn(locale); + } + catch (e) { + console.error('Locale listener error:', e); + } + }); + }; + const saveLocale = (locale) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-locale', locale); + } + catch (_) { } + } + }; + const loadLocale = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-locale') || getDefaultLocale(); + } + catch (_) { } + } + return getDefaultLocale(); + }; + const getDefaultLocale = () => { + if (typeof navigator !== 'undefined') { + const browserLocale = navigator.language || navigator.userLanguage; + if (browserLocale && isLocaleSupported(browserLocale)) + return browserLocale; + const short = browserLocale?.split('-')[0]; + if (short && isLocaleSupported(short)) + return short; + } + return fallbackLocale; + }; + const initI18n = () => { + const saved = loadLocale(); + setCurrentLocale(saved); + }; + const switchLocale = (locale) => { setCurrentLocale(locale); }; + const createInstanceI18n = (editor) => { + let instanceLocale = editor.config?.locale || currentLocale || 'zh-CN'; + const instanceT = (key, params = {}) => t(key, params, instanceLocale); + const set = (locale) => { + if (!locale || instanceLocale === locale) + return instanceLocale; + instanceLocale = locale; + if (editor.el) { + editor.el.setAttribute('lang', locale); + editor.el.setAttribute('dir', getLocaleDirection(locale)); + } + if (editor.textarea) { + editor.textarea.placeholder = instanceT('placeholder') || ''; + editor.textarea.setAttribute('aria-label', instanceT('edit') || ''); + editor.textarea.setAttribute('dir', getLocaleDirection(locale)); + } + if (typeof editor._emit === 'function') { + editor._emit('localeChange', { locale, direction: getLocaleDirection(locale) }); + } + if (editor.toolbarEl) { + editor.toolbarEl.querySelectorAll('.me-btn').forEach((btn) => { + const action = btn.dataset.action || btn.dataset.mode; + if (action) { + const label = instanceT(action); + if (label && label !== action) { + btn.title = label; + btn.setAttribute('aria-label', label); + } + } + }); + } + return instanceLocale; + }; + return { + set, get: () => instanceLocale, getDirection: () => getLocaleDirection(instanceLocale), t: instanceT, + formatNumber: (n, opts) => { try { + return new Intl.NumberFormat(instanceLocale, opts).format(n); + } + catch (_) { + return String(n); + } }, + formatDate: (d, opts) => { try { + return new Intl.DateTimeFormat(instanceLocale, opts).format(d instanceof Date ? d : new Date(d)); + } + catch (_) { + return String(d); + } }, + }; + }; + const createI18nManager = () => ({ + t, getCurrentLocale, setCurrentLocale, switchLocale, + getFallbackLocale: () => fallbackLocale, setFallbackLocale: (locale) => { fallbackLocale = locale; }, + hasTranslation, getTranslations, addTranslations, loadRemote, + getSupportedLocales, isLocaleSupported, getLocaleName, getLocaleDirection, + formatNumber, formatCurrency, formatDate, addLocaleListener, removeLocaleListener, clearLocaleListeners, + initI18n, saveLocale, loadLocale, getDefaultLocale, createInstanceI18n, + }); + ({ + 'zh-CN': { name: '简体中文', nativeName: '简体中文', direction: 'ltr', translations: LOCALES['zh-CN'] }, + 'en-US': { name: 'English (US)', nativeName: 'English (US)', direction: 'ltr', translations: LOCALES['en-US'] }, + ja: { name: '日本語', nativeName: '日本語', direction: 'ltr', translations: LOCALES['ja'] }, + ko: { name: '한국어', nativeName: '한국어', direction: 'ltr', translations: LOCALES['ko'] }, + fr: { name: 'Français', nativeName: 'Français', direction: 'ltr', translations: LOCALES['fr'] }, + de: { name: 'Deutsch', nativeName: 'Deutsch', direction: 'ltr', translations: LOCALES['de'] }, + }); + const i18nUtils = createI18nManager(); + + /** + * MetonaEditor Parser — lightweight Markdown parser (TypeScript) + * @module parser + * @version 0.2.0 + */ + // ============ Precompiled regex ============ + const RE_EMPTY = /^\s*$/; + const RE_ATX = /^(#{1,6})\s+(.+?)(?:\s+#{1,6})?\s*$/; + const RE_SETEXT_H1 = /^={3,}\s*$/; + const RE_SETEXT_H2 = /^-{3,}\s*$/; + const RE_FENCE_START = /^(\s{0,3})(`{3,}|~{3,})\s*([\w+#.-]*)(\s+[^\n]*?)?\s*$/; + const RE_HR = /^\s{0,3}([-*_])(\s*\1){2,}\s*$/; + const RE_QUOTE = /^\s{0,3}>\s?/; + const RE_UL = /^(\s*)([-*+])\s/; + const RE_OL = /^(\s*)(\d+)\.\s/; + const RE_TASK = /^\[([ xX])\]\s+(.*)$/; + const RE_TABLE_SEP = /^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/; + const RE_INDENT_CODE = /^( {4}|\t)/; + const RE_DEF_LIST = /^:\s+/; + const RE_FOOTNOTE_DEF = /^\[\^([^\]]+)\]:\s*/; + // ============ Emoji map ============ + const EMOJI_MAP = { + smile: '😊', grinning: '😀', joy: '😂', rofl: '🤣', wink: '😉', blush: '😊', innocent: '😇', + heart_eyes: '😍', kissing_heart: '😘', yum: '😋', stuck_out_tongue: '😛', sunglasses: '😎', + smirk: '😏', unamused: '😒', disappointed: '😞', worried: '😟', confused: '😕', + cry: '😢', sob: '😭', scream: '😱', angry: '😠', rage: '💢', triumph: '😤', sleepy: '😪', + dizzy_face: '😵', zipper_mouth: '🤐', nerd: '🤓', thinking: '🤔', rolling_eyes: '🙄', + expressionless: '😑', thumbsup: '👍', thumbsdown: '👎', clap: '👏', pray: '🙏', muscle: '💪', + ok: '👌', point_up: '👆', point_down: '👇', point_left: '👈', point_right: '👉', + raised_hands: '🙌', wave: '👋', punch: '👊', crossed_fingers: '🤞', + heart: '❤️', broken_heart: '💔', star: '⭐', star2: '🌟', fire: '🔥', rocket: '🚀', + check: '✅', cross: '❌', warning: '⚠️', info: 'ℹ️', question: '❓', exclamation: '❗', + bangbang: '‼️', grey_exclamation: '❕', bulb: '💡', book: '📖', memo: '📝', pin: '📌', + link: '🔗', lock: '🔒', unlock: '🔓', key: '🔑', hammer: '🔨', wrench: '🔧', + gear: '⚙️', tools: '🛠️', magnet: '🧲', zap: '⚡', cloud: '☁️', + sun: '☀️', moon: '🌙', rain: '🌧️', snow: '❄️', umbrella: '☂️', rainbow: '🌈', + tornado: '🌪️', fog: '🌫️', droplet: '💧', + coffee: '☕', pizza: '🍕', cake: '🎂', beer: '🍺', wine: '🍷', + hamburger: '🍔', fries: '🍟', apple: '🍎', banana: '🍌', grapes: '🍇', + watermelon: '🍉', strawberry: '🍓', peach: '🍑', cherry: '🍒', taco: '🌮', + tada: '🎉', gift: '🎁', crown: '👑', gem: '💎', ring: '💍', + confetti: '🎊', balloon: '🎈', ribbon: '🎀', medal: '🏅', trophy: '🏆', + eye: '👁️', ear: '👂', nose: '👃', tongue: '👅', lips: '👄', + brain: '🧠', speech: '💬', thought: '💭', anger: '💢', sweat: '💦', + one: '1️⃣', two: '2️⃣', three: '3️⃣', four: '4️⃣', five: '5️⃣', + six: '6️⃣', seven: '7️⃣', eight: '8️⃣', nine: '9️⃣', zero: '0️⃣', + arrow_up: '⬆️', arrow_down: '⬇️', arrow_left: '⬅️', arrow_right: '➡️', + arrow_upper_right: '↗️', arrow_lower_right: '↘️', arrow_lower_left: '↙️', arrow_upper_left: '↖️', + computer: '💻', phone: '📱', battery: '🔋', electric_plug: '🔌', + copyright: '©️', registered: '®️', tm: '™️', hundred: '💯', boom: '💥', dash: '💨', + hole: '🕳️', bomb: '💣', email: '📧', phone2: '📞', clock: '🕐', hourglass: '⏳', + calendar: '📅', money: '💰', shopping: '🛒', package: '📦', mailbox: '📫', + art: '🎨', music: '🎵', movie: '🎬', game: '🎮', sport: '⚽', + earth: '🌍', house: '🏠', car: '🚗', airplane: '✈️', ship: '🚢', + }; + // ============ Render cache ============ + const renderCache = new Map(); + const MAX_CACHE_SIZE = 300; + const cachedRenderInline = (text, env) => { + if (!text) + return ''; + if (!env.highlight && text.length < 600) { + const cached = renderCache.get(text); + if (cached !== undefined) + return cached; + const result = renderInline(text, env); + if (renderCache.size >= MAX_CACHE_SIZE) { + const firstKey = renderCache.keys().next().value; + renderCache.delete(firstKey); + } + renderCache.set(text, result); + return result; + } + return renderInline(text, env); + }; + const clearRenderCache = () => { renderCache.clear(); }; + // ============ Security utils ============ + const safeUrl = (url) => { + if (!url) + return ''; + const u = String(url).trim(); + if (/^(javascript|vbscript|file):/i.test(u)) + return ''; + if (/^data:/i.test(u)) { + if (!/^data:image\//i.test(u)) + return ''; + if (u.length > 500000) + return ''; + } + return u; + }; + const slugify = (text) => { + let slug = String(text).normalize('NFKC').toLowerCase() + .replace(/[^\w\u4e00-\u9fff\u3400-\u4dbf\s-]/g, '') + .trim().replace(/\s+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, ''); + return slug || 'heading'; + }; + // ============ Block handler registry ============ + const blockHandlers = []; + const registerBlockHandler = (handler) => { + blockHandlers.push(handler); + blockHandlers.sort((a, b) => a.priority - b.priority); + }; + const isBlockStart = (line) => { + if (RE_EMPTY.test(line) || RE_FENCE_START.test(line) || RE_ATX.test(line)) + return true; + if (RE_HR.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return true; + if (RE_FOOTNOTE_DEF.test(line) || RE_DEF_LIST.test(line)) + return true; + if (/^\$\$/.test(line)) + return true; + return false; + }; + // Register all built-in block handlers + registerBlockHandler({ name: 'refDef', priority: 0.1, + test: (line) => { + // Must not match footnote definitions: [^id]: text + if (/^\[\^/.test(line)) + return null; + const m = line.match(/^\[([^\]]+)\]:\s*(?:<(\S+)>|(\S+))(?:\s+['"\(](.*?)['"\)])?\s*$/); + return m ? m : null; + }, + parse: (_lines, i, match, _tokens, _footnotes, refs) => { + const refId = match[1].toLowerCase(); + const url = match[2] || match[3] || ''; + const title = match[4] || ''; + if (url && refs) { + refs[refId] = JSON.stringify({ url, title }); + } + return { token: null, newIndex: i + 1 }; + }, + }); + registerBlockHandler({ name: 'blank', priority: 0, + test: (line) => RE_EMPTY.test(line) ? true : null, + parse: (_lines, i) => ({ token: null, newIndex: i + 1 }), + }); + registerBlockHandler({ name: 'fencedCode', priority: 1, + test: (line) => { + const m = line.match(RE_FENCE_START); + if (!m) + return null; + // Reject fences where the info string contains backticks (false positives like ``` `code` ```) + const rest = (m[4] || ''); + if (rest.includes('`')) + return null; + return m; + }, + parse: (lines, i, match) => { + const fenceChar = match[2][0]; + const fenceLen = match[2].length; + const lang = match[3] || ''; + const rest = (match[4] || '').trim(); + // Parse info string: first word is lang, rest are key=value or standalone flags + const infoParts = rest ? rest.split(/\s+/).filter(Boolean) : []; + const attrs = {}; + for (let p = 0; p < infoParts.length; p++) { + const kv = infoParts[p].split('='); + if (kv.length === 2) + attrs[kv[0]] = kv[1]; + else + attrs[infoParts[p]] = 'true'; + } + const codeLines = []; + let j = i + 1; + while (j < lines.length) { + const cm = lines[j].match(/^(\s{0,3})(`{3,}|~{3,})\s*$/); + if (cm && cm[2][0] === fenceChar && cm[2].length >= fenceLen) + break; + codeLines.push(lines[j]); + j++; + } + if (j < lines.length) + j++; + return { token: { type: 'code', lang, content: codeLines.join('\n'), attrs }, newIndex: j }; + }, + }); + registerBlockHandler({ name: 'indentedCode', priority: 2, + test: (line) => { + if (!RE_INDENT_CODE.test(line)) + return null; + if (RE_ATX.test(line) || RE_QUOTE.test(line) || RE_UL.test(line) || RE_OL.test(line)) + return null; + return true; + }, + parse: (lines, i) => { + const codeLines = []; + while (i < lines.length && RE_INDENT_CODE.test(lines[i])) { + codeLines.push(lines[i].replace(/^( {4}|\t)/, '')); + i++; + } + if (codeLines.length) + return { token: { type: 'code', lang: '', content: codeLines.join('\n'), indent: true }, newIndex: i }; + return { token: null, newIndex: i }; + }, + }); + registerBlockHandler({ name: 'atxHeading', priority: 3, + test: (line) => line.match(RE_ATX), + parse: (_lines, i, match) => ({ + token: { type: 'heading', level: match[1].length, text: match[2] }, newIndex: i + 1, + }), + }); + registerBlockHandler({ name: 'setextH1', priority: 4, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H1.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 1, text: lines[i] }, newIndex: i + 2 }), + }); + registerBlockHandler({ name: 'setextH2', priority: 5, + test: (line, lines, i) => { + if (i + 1 >= lines.length) + return null; + if (!RE_SETEXT_H2.test(lines[i + 1])) + return null; + if (RE_EMPTY.test(line) || RE_UL.test(line) || RE_OL.test(line) || RE_QUOTE.test(line) || /^\s*`{3,}/.test(line)) + return null; + return true; + }, + parse: (lines, i) => ({ token: { type: 'heading', level: 2, text: lines[i] }, newIndex: i + 2 }), + }); + registerBlockHandler({ name: 'hr', priority: 6, + test: (line) => RE_HR.test(line) ? true : null, + parse: (_lines, i) => ({ token: { type: 'hr' }, newIndex: i + 1 }), + }); + registerBlockHandler({ name: 'blockquote', priority: 7, + test: (line) => RE_QUOTE.test(line) ? true : null, + parse: (lines, i) => { + const quoteLines = []; + while (i < lines.length && RE_QUOTE.test(lines[i])) { + quoteLines.push(lines[i].replace(RE_QUOTE, '')); + i++; + } + return { token: { type: 'quote', content: quoteLines.join('\n') }, newIndex: i }; + }, + }); + registerBlockHandler({ name: 'table', priority: 8, + test: (line, lines, i) => { + if (!/\|/.test(line) || i + 1 >= lines.length) + return null; + if (!isTableSeparator(lines[i + 1])) + return null; + return { header: line, align: parseAlign(lines[i + 1]) }; + }, + parse: (lines, i, match) => { + let j = i + 2; + const rows = []; + while (j < lines.length && /\|/.test(lines[j]) && !RE_EMPTY.test(lines[j])) { + rows.push(lines[j]); + j++; + } + return { token: { type: 'table', header: match.header, rows, align: match.align }, newIndex: j }; + }, + }); + registerBlockHandler({ name: 'ul', priority: 9, + test: (line) => line.match(RE_UL), + parse: (lines, i, match) => { + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, false); + return { token: { type: 'ul', items }, newIndex: endIdx }; + }, + }); + registerBlockHandler({ name: 'ol', priority: 10, + test: (line) => line.match(RE_OL), + parse: (lines, i, match) => { + const start = parseInt(match[2], 10); + const { items, endIdx } = parseList(lines, i, match[2], match[1].length, true); + return { token: { type: 'ol', items, start }, newIndex: endIdx }; + }, + }); + registerBlockHandler({ name: 'footnoteDef', priority: 11, + test: (line) => line.match(RE_FOOTNOTE_DEF), + parse: (lines, i, match, _tokens, footnotes) => { + const fnId = match[1]; + const fnContent = lines[i].slice(match[0].length); + const fnLines = [fnContent]; + let j = i + 1; + while (j < lines.length && !RE_EMPTY.test(lines[j]) && !isBlockStart(lines[j])) { + fnLines.push(lines[j]); + j++; + } + footnotes[fnId] = fnLines.join(' '); + return { token: null, newIndex: j }; + }, + }); + registerBlockHandler({ name: 'defList', priority: 12, + test: (line) => RE_DEF_LIST.test(line) ? true : null, + parse: (lines, i, _match, tokens) => { + const term = (tokens.length > 0 && tokens[tokens.length - 1].type === 'paragraph') ? tokens.pop().text : ''; + const defs = [lines[i].replace(RE_DEF_LIST, '')]; + let j = i + 1; + while (j < lines.length && RE_DEF_LIST.test(lines[j])) { + defs.push(lines[j].replace(RE_DEF_LIST, '')); + j++; + } + return { token: { type: 'defList', term, defs }, newIndex: j }; + }, + }); + registerBlockHandler({ name: 'mathBlock', priority: 13, + test: (line) => /^\$\$/.test(line) ? true : null, + parse: (lines, i) => { + const single = lines[i].match(/^\$\$([\s\S]+?)\$\$\s*$/); + if (single) + return { token: { type: 'mathBlock', content: single[1] }, newIndex: i + 1 }; + const mathLines = [lines[i].replace(/^\$\$/, '')]; + let j = i + 1; + while (j < lines.length && !/\$\$/.test(lines[j])) { + mathLines.push(lines[j]); + j++; + } + if (j < lines.length) { + mathLines.push(lines[j].replace(/\$\$\s*$/, '')); + j++; + } + return { token: { type: 'mathBlock', content: mathLines.join('\n') }, newIndex: j }; + }, + }); + // ============ Block parsing ============ + const parseTokens = (md) => { + if (md == null) + return { tokens: [], footnotes: {}, refs: {} }; + const text = String(md).replace(/\r\n?/g, '\n'); + const lines = text.split('\n'); + const tokens = []; + const footnotes = {}; + const refs = {}; + let i = 0; + while (i < lines.length) { + const line = lines[i]; + let handled = false; + for (const handler of blockHandlers) { + const match = handler.test(line, lines, i); + if (match !== null && match !== false) { + const result = handler.parse(lines, i, match, tokens, footnotes, refs); + if (result.token) + tokens.push(result.token); + i = result.newIndex; + handled = true; + break; + } + } + if (handled) + continue; + // Paragraph fallback + const para = []; + while (i < lines.length) { + const l = lines[i]; + if (RE_EMPTY.test(l)) + break; + if (isBlockStart(l)) + break; + if (i + 1 < lines.length && (RE_SETEXT_H1.test(lines[i + 1]) || RE_SETEXT_H2.test(lines[i + 1]))) + break; + if (/\|/.test(l) && i + 1 < lines.length && isTableSeparator(lines[i + 1])) + break; + para.push(l); + i++; + } + if (para.length) + tokens.push({ type: 'paragraph', text: para.join('\n') }); + } + return { tokens, footnotes, refs }; + }; + // ============ Token rendering ============ + const renderTokens = (tokens, env = {}, footnotes = {}) => { + let html = tokens.map((tok) => renderToken(tok, env)).join('\n'); + const fnIds = Object.keys(footnotes); + if (fnIds.length) { + html += '\n

      '; + fnIds.forEach((id) => { + html += `
    1. ${cachedRenderInline(footnotes[id], env)}
    2. `; + }); + html += '
    '; + } + return html; + }; + const parseMarkdown = (md, env = {}) => { + const { tokens, footnotes, refs } = parseTokens(md); + return renderTokens(tokens, { ...env, refs }, footnotes); + }; + // ============ List parsing ============ + const parseList = (lines, startIdx, marker, baseIndent, isOl, olStart) => { + const items = []; + let i = startIdx; + const itemIndent = baseIndent + (isOl ? String(marker).length + 2 : 2); + while (i < lines.length) { + const line = lines[i]; + let itemMatch; + if (isOl) { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})\\d+\\.\\s`)); + if (!itemMatch) + break; + } + else { + itemMatch = line.match(new RegExp(`^(\\s{${baseIndent}})[-*+]\\s`)); + if (!itemMatch) + break; + } + let raw = line.slice(itemMatch[0].length); + const task = raw.match(RE_TASK); + let content = task ? task[2] : raw; + const checked = task ? task[1].toLowerCase() === 'x' : false; + const isTask = !!task; + i++; + const subContent = []; + const subTokens = []; + while (i < lines.length) { + const cl = lines[i]; + if (RE_EMPTY.test(cl)) { + let peek = i + 1; + while (peek < lines.length && RE_EMPTY.test(lines[peek])) + peek++; + if (peek < lines.length) { + const pl = lines[peek]; + const isCont = pl.length > itemIndent && pl[itemIndent] !== ' ' + ? false : new RegExp(`^\\s{${itemIndent},}`).test(pl); + if (isCont) { + subContent.push(''); + i++; + continue; + } + } + break; + } + if (isOl) { + if (new RegExp(`^(\\s{0,${baseIndent}})\\d+\\.\\s`).test(cl)) + break; + } + else { + if (new RegExp(`^(\\s{0,${baseIndent}})[-*+]\\s`).test(cl)) + break; + } + if (RE_QUOTE.test(cl) || RE_ATX.test(cl) || RE_HR.test(cl) || RE_FOOTNOTE_DEF.test(cl)) + break; + const nUl = cl.match(new RegExp(`^(\\s{${itemIndent},})([-*+])\\s`)); + const nOl = cl.match(new RegExp(`^(\\s{${itemIndent},})(\\d+)\\.\\s`)); + if (nUl || nOl) { + const isNOl = !!nOl; + const nM = isNOl ? nOl[2] : nUl[2]; + const nI = isNOl ? nOl[1].length : nUl[1].length; + const nS = isNOl ? parseInt(nOl[2], 10) : undefined; + const nested = parseList(lines, i, nM, nI, isNOl); + subTokens.push({ type: isNOl ? 'ol' : 'ul', items: nested.items, start: nS }); + i = nested.endIdx; + continue; + } + if (cl.length > itemIndent && cl.slice(0, itemIndent).trim() === '') { + subContent.push(cl.slice(itemIndent)); + } + else { + subContent.push(cl); + } + i++; + } + if (subContent.length) { + content = content ? content + '\n' + subContent.join('\n') : subContent.join('\n'); + } + items.push({ type: 'listItem', text: content, checked, task: isTask, subTokens: subTokens.length ? subTokens : undefined }); + } + return { items, endIdx: i }; + }; + // ============ Table utils ============ + const isTableSeparator = (line) => RE_TABLE_SEP.test(line) && /-/.test(line); + const parseAlign = (line) => { + const cells = line.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + return cells.map((c) => { + if (/^:/.test(c) && /:$/.test(c)) + return 'center'; + if (/:$/.test(c)) + return 'right'; + if (/^:/.test(c)) + return 'left'; + return 'left'; + }); + }; + // ============ Token renderer ============ + const renderToken = (tok, env, footnotes) => { + switch (tok.type) { + case 'heading': { + const id = slugify(tok.text); + return `${cachedRenderInline(tok.text, env)}`; + } + case 'paragraph': return `

    ${cachedRenderInline(tok.text, env)}

    `; + case 'hr': return '
    '; + case 'quote': return `
    ${parseMarkdown(tok.content, env)}
    `; + case 'code': return renderCode(tok.content, tok.lang, env, tok.attrs); + case 'ul': return `
      ${tok.items.map((it) => renderListItem(it, env)).join('')}
    `; + case 'ol': { + const sn = tok.start || 1; + const sa = sn > 1 ? ` start="${sn}"` : ''; + const body = tok.items.map((it, idx) => renderListItem(it, env, sn > 1 ? idx + sn : undefined)).join(''); + return `${body}`; + } + case 'table': return renderTable(tok, env); + case 'defList': { + let h = '
    '; + h += `
    ${cachedRenderInline(tok.term, env)}
    `; + tok.defs.forEach((d) => { h += `
    ${cachedRenderInline(d, env)}
    `; }); + return h + '
    '; + } + case 'mathBlock': return `
    ${escapeHTML(tok.content)}
    `; + default: { + // Fallback: render unknown block types as styled div + const typeClass = `me-block-${tok.type}`; + const content = tok.content ? (typeof tok.content === 'string' ? cachedRenderInline(tok.content, env) : escapeHTML(String(tok.content))) : ''; + return `
    ${content}
    `; + } + } + }; + const renderListItem = (it, env, idx) => { + if (it.task) { + const checked = it.checked ? ' checked' : ''; + let h = `
  • ${cachedRenderInline(it.text, env)}`; + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; + } + let h = idx != null ? `
  • ` : '
  • '; + h += cachedRenderInline(it.text, env); + if (it.subTokens) + h += '\n' + it.subTokens.map((st) => renderToken(st, env)).join('\n'); + return h + '
  • '; + }; + const renderCode = (code, lang, env, attrs) => { + if (lang === 'mermaid') + return `
    ${escapeHTML(code)}
    `; + const langClass = lang ? ` class="language-${escapeHTML(lang)}"` : ''; + const titleHtml = attrs?.title ? `
    ${escapeHTML(attrs.title)}
    ` : ''; + if (env.highlight && typeof env.highlight === 'function' && lang) { + try { + const highlighted = env.highlight(code, lang); + if (typeof highlighted === 'string') + return `${titleHtml}
    ${highlighted}
    `; + } + catch (e) { + console.error('MeEditor highlight error:', e); + } + } + return `${titleHtml}
    ${escapeHTML(code)}
    `; + }; + const renderTable = (tok, env) => { + // Split respecting backslash-escaped pipes + const splitRow = (r) => { + const cells = []; + let current = ''; + let escaped = false; + for (let i = 0; i < r.length; i++) { + const ch = r[i]; + if (escaped) { + current += ch; + escaped = false; + } + else if (ch === '\\') { + escaped = true; + } + else if (ch === '|') { + cells.push(current.trim()); + current = ''; + } + else { + current += ch; + } + } + cells.push(current.trim()); + // Remove leading/trailing empty cells from outer pipes + if (cells.length > 0 && cells[0] === '') + cells.shift(); + if (cells.length > 0 && cells[cells.length - 1] === '') + cells.pop(); + return cells; + }; + const headers = splitRow(tok.header); + const align = tok.align || []; + const as = (i) => align[i] && align[i] !== 'left' ? ` style="text-align:${align[i]}"` : ''; + let h = '
    '; + h += headers.map((hd, i) => `${cachedRenderInline(hd, env)}`).join(''); + h += ''; + h += tok.rows.map((r) => { + const cells = splitRow(r); + return `${cells.map((c, i) => `${cachedRenderInline(c, env)}`).join('')}`; + }).join(''); + return h + '
    '; + }; + // ============ Inline rendering ============ + const renderInline = (text, env) => { + if (!text) + return ''; + const codes = []; + let s = extractInlineCodes(text, codes); + const protectedItems = []; + s = s.replace(/&(?:[a-zA-Z][a-zA-Z0-9]{1,31}|#\d{1,7}|#x[0-9a-fA-F]{1,6});/g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = s.replace(//g, (m) => { + protectedItems.push(m); + return `\u0005${protectedItems.length - 1}\u0005`; + }); + s = escapeHTML(s); + s = s.replace(/\u0005(\d+)\u0005/g, (_m, idx) => protectedItems[+idx] || _m); + s = scanInline(s, codes, env); + s = s.replace(/\u0000(\d+)\u0000/g, (_m, idx) => { + const code = codes[+idx]; + if (!code) + return _m; + return `${escapeHTML(code.content)}`; + }); + s = s.replace(/:([\w+-]+):/g, (m, name) => EMOJI_MAP[name] || m); + s = s.replace(/ \n/g, '
    \n'); + s = s.replace(/\n/g, '
    '); + return s; + }; + const extractInlineCodes = (text, codes) => { + let result = ''; + let i = 0; + while (i < text.length) { + if (text[i] === '`') { + let startLen = 1; + while (i + startLen < text.length && text[i + startLen] === '`') + startLen++; + let j = i + startLen; + let found = false; + while (j < text.length) { + const nextTick = text.indexOf('`', j); + if (nextTick === -1) + break; + let endLen = 1; + while (nextTick + endLen < text.length && text[nextTick + endLen] === '`') + endLen++; + if (endLen === startLen) { + const content = text.slice(i + startLen, nextTick); + codes.push({ content, len: startLen }); + result += `\u0000${codes.length - 1}\u0000`; + i = nextTick + endLen; + found = true; + break; + } + j = nextTick + endLen; + } + if (!found) { + result += text.slice(i, i + startLen); + i += startLen; + } + } + else { + result += text[i]; + i++; + } + } + return result; + }; + const INLINE_RE = new RegExp([ + '(\\*\\*\\*[^*\\n][^*\\n]*?\\*\\*\\*)', + '|(___[^_\\n][^_\\n]*?___)', + '|(!\\[[^\\]]*\\]\\([^)]+\\))', + '|(? { + const placeholderMap = new Map(); + s = s.replace(/\u0000\d+\u0000/g, (m) => { + const key = `\u0003${placeholderMap.size}\u0003`; + placeholderMap.set(key, m); + return key; + }); + s = s.replace(INLINE_RE, (fullMatch) => { + const match = fullMatch; + if (match.startsWith('***')) + return `${match.slice(3, -3)}`; + if (match.startsWith('___')) + return `${match.slice(3, -3)}`; + if (match.startsWith('![') && match.includes('](')) { + const m = match.match(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return escapeHTML(match); + const t = m[3] ? ` title="${m[3]}"` : ''; + return `${m[1]}`; + } + if (match.startsWith('![') && match.includes('][')) { + const m = match.match(/!\[([^\]]*)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return `${m[1]}`; + } + } + return `${m[1]}`; + } + if (match.startsWith('[') && match.includes('](')) { + const m = match.match(/\[([^\]]+)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/); + if (!m) + return match; + const u = safeUrl(m[2]); + if (!u) + return match; + const t = m[3] ? ` title="${m[3]}"` : ''; + const linkText = renderInline(m[1], env); + return `${linkText}`; + } + if (match.startsWith('[') && match.includes('][')) { + const m = match.match(/\[([^\]]+)\]\[([^\]]*)\]/); + if (!m) + return match; + const refKey = (m[2] || m[1]).toLowerCase(); + if (env.refs && env.refs[refKey]) { + try { + const ref = JSON.parse(env.refs[refKey]); + const u = safeUrl(ref.url); + if (!u) + return escapeHTML(match); + const t = ref.title ? ` title="${ref.title}"` : ''; + return `${m[1]}`; + } + catch (_) { + return escapeHTML(match); + } + } + return escapeHTML(match); + } + if (match.startsWith('<http')) { + const url = match.slice(4, -4); + const u = safeUrl(url); + return `${url}`; + } + if (match.startsWith('**')) + return `${match.slice(2, -2)}`; + if (match.startsWith('__')) + return `${match.slice(2, -2)}`; + if (match.startsWith('~~')) + return `${match.slice(2, -2)}`; + if (match.startsWith('==')) + return `${match.slice(2, -2)}`; + if (match.startsWith('*') && !match.startsWith('**') && !match.startsWith('***')) + return `${match.slice(1, -1)}`; + if (match.startsWith('_') && !match.startsWith('__') && !match.startsWith('___')) + return `${match.slice(1, -1)}`; + if (match.startsWith('^') && !match.startsWith('^^')) + return `${match.slice(1, -1)}`; + if (match.startsWith('~') && !match.startsWith('~~')) + return `${match.slice(1, -1)}`; + if (match.startsWith('$') && !match.startsWith('$$')) + return `${escapeHTML(match.slice(1, -1))}`; + if (/^\[\^/.test(match)) { + const fnId = match.slice(2, -1); + return `[${fnId}]`; + } + if (match.startsWith('\\') && match.length === 2) { + const escaped = match[1]; + if (/[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]/.test(escaped)) + return escaped; + return match; + } + return match; + }); + s = s.replace(/\u0003(\d+)\u0003/g, (m) => placeholderMap.get(m) || m); + return s; + }; + + /** + * MetonaEditor Plugins — plugin system v2 + * @module plugins + * @version 0.2.0 + */ + // ============ Plugin Manager ============ + class PluginManager { + constructor() { + this.plugins = new Map(); + } + register(name, plugin) { + if (this.plugins.has(name)) { + console.warn(`MeEditor: plugin "${name}" already registered`); + return this; + } + if (!plugin || typeof plugin !== 'object' || (!plugin.name && !name)) { + console.error(`MeEditor: invalid plugin "${name}"`); + return this; + } + this.plugins.set(name, { + version: plugin.version || '0.0.0', description: plugin.description || '', + depends: plugin.depends || [], priority: plugin.priority || 0, + ...plugin, name, enabled: true, + }); + return this; + } + unregister(name) { this.plugins.delete(name); return this; } + get(name) { return this.plugins.get(name) || null; } + has(name) { return this.plugins.has(name); } + getAll() { return Array.from(this.plugins.values()); } + getNames() { return Array.from(this.plugins.keys()); } + enable(name) { const p = this.plugins.get(name); if (p) + p.enabled = true; return this; } + disable(name) { const p = this.plugins.get(name); if (p) + p.enabled = false; return this; } + isEnabled(name) { const p = this.plugins.get(name); return p ? p.enabled : false; } + destroy() { this.plugins.clear(); } + } + const defaultPluginManager = new PluginManager(); + // ============ Topological sort ============ + const topologicalSort = (plugins) => { + const map = new Map(); + plugins.forEach((p) => map.set(p.name, p)); + const inDegree = new Map(); + const adj = new Map(); + plugins.forEach((p) => { inDegree.set(p.name, 0); adj.set(p.name, []); }); + plugins.forEach((p) => { + (p.depends || []).forEach((dep) => { + if (map.has(dep)) { + adj.get(dep).push(p.name); + inDegree.set(p.name, (inDegree.get(p.name) || 0) + 1); + } + else { + console.warn(`MeEditor: plugin "${p.name}" depends on unknown "${dep}"`); + } + }); + }); + const queue = []; + inDegree.forEach((deg, name) => { if (deg === 0) + queue.push(name); }); + const sorted = []; + while (queue.length) { + queue.sort((a, b) => ((map.get(b).priority || 0) - (map.get(a).priority || 0))); + const name = queue.shift(); + sorted.push(map.get(name)); + (adj.get(name) || []).forEach((n) => { inDegree.set(n, inDegree.get(n) - 1); if (inDegree.get(n) === 0) + queue.push(n); }); + } + if (sorted.length !== plugins.length) { + console.warn('MeEditor: circular dependency detected, falling back to original order'); + return plugins; + } + return sorted; + }; + // ============ Config validation ============ + const validateConfig = (schema = {}, config = {}) => { + const errors = []; + const patched = { ...config }; + for (const [key, rule] of Object.entries(schema)) { + const val = config[key]; + if (rule.required && (val === undefined || val === null)) { + errors.push(`"${key}" is required`); + continue; + } + if (val === undefined && rule.default !== undefined) { + patched[key] = rule.default; + continue; + } + if (val !== undefined && rule.type) { + const actual = Array.isArray(val) ? 'array' : typeof val; + if (actual !== rule.type) + errors.push(`"${key}" expected ${rule.type}, got ${actual}`); + } + if (val !== undefined && rule.enum && !rule.enum.includes(val)) + errors.push(`"${key}" must be one of [${rule.enum.join(', ')}]`); + if (val !== undefined && typeof rule.validator === 'function') { + try { + const r = rule.validator(val); + if (r !== true) + errors.push(`"${key}": ${r}`); + } + catch (e) { + errors.push(`"${key}": ${e.message}`); + } + } + } + return { valid: errors.length === 0, errors, patched }; + }; + // ============ Preset plugins ============ + const escapeAttr = (s) => String(s == null ? '' : s).replace(/&/g, '&').replace(/"/g, '"').replace(//g, '>'); + const autoSavePlugin = { + name: 'autoSave', version: '0.1.1', description: 'Auto-save to localStorage', priority: 100, + install(editor, options) { + if (!editor || typeof editor.getValue !== 'function') + return; + const opts = options || this; + const key = opts.key || ('me-draft-' + (editor.id || '')); + const delay = opts.delay || 1000; + const state = { _timer: null }; + const save = () => { + if (state._timer) { + clearTimeout(state._timer); + state._timer = null; + } + try { + localStorage.setItem(key, editor.getValue()); + if (typeof editor._emit === 'function') + editor._emit('autosave', { key, value: editor.getValue() }); + } + catch (e) { + console.warn('MeEditor autoSave:', e); + } + }; + const _onInput = () => { if (state._timer) + clearTimeout(state._timer); state._timer = setTimeout(save, delay); }; + const _onBlur = save; + const _onSave = save; + editor.on('change', _onInput); + editor.on('blur', _onBlur); + editor.on('save', _onSave); + editor.restoreDraft = () => { try { + const v = localStorage.getItem(key); + if (v != null) + editor.setValue(v); + return v; + } + catch (_) { + return null; + } }; + editor.clearDraft = () => { try { + localStorage.removeItem(key); + } + catch (_) { } return editor; }; + editor.getDraftKey = () => key; + editor.__autoSaveCleanup = { state, _onInput, _onBlur, _onSave, save }; + }, + destroy(editor) { + const cleanup = editor.__autoSaveCleanup; + if (cleanup) { + if (cleanup.state._timer) { + clearTimeout(cleanup.state._timer); + cleanup.state._timer = null; + } + if (editor && typeof editor.off === 'function') { + if (cleanup._onInput) + editor.off('change', cleanup._onInput); + if (cleanup._onBlur) + editor.off('blur', cleanup._onBlur); + if (cleanup._onSave) + editor.off('save', cleanup._onSave); + } + delete editor.__autoSaveCleanup; + } + }, + }; + const exportToolPlugin = { + name: 'exportTool', version: '0.1.0', description: 'Export Markdown/HTML', priority: 50, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const download = (filename, content, mime) => { + if (typeof document === 'undefined') + return; + const blob = new Blob([content], { type: mime + ';charset=utf-8' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + setTimeout(() => URL.revokeObjectURL(url), 0); + }; + const stamp = () => { const d = new Date(); const pad = (n) => String(n).padStart(2, '0'); return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}`; }; + editor.exportMarkdown = (filename) => { download(filename || `metona-${stamp()}.md`, editor.getValue(), 'text/markdown'); return editor; }; + editor.exportHTML = (filename, opts = {}) => { + const title = opts.title || 'Document'; + const css = opts.css || ''; + const body = typeof editor.getHTML === 'function' ? editor.getHTML() : ''; + // Build minimal embedded CSS for the exported HTML + const embedCSS = opts.embedCSS !== false ? `` : ''; + download(filename || `metona-${stamp()}.html`, `\n\n\n\n\n${title}\n${css ? `` : ''}${embedCSS}\n\n\n${body}\n\n`, 'text/html'); + return editor; + }; + }, + destroy() { }, + }; + const searchReplacePlugin = { + name: 'searchReplace', version: '0.2.0', description: 'Search & Replace (Ctrl+F/H)', priority: 80, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + // Inject style once globally + if (!document.getElementById('me-search-style')) { + const style = document.createElement('style'); + style.id = 'me-search-style'; + style.textContent = `.me-search{position:absolute;top:8px;right:12px;z-index:20;display:flex;flex-direction:column;gap:6px;padding:8px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);font-size:13px;min-width:280px}.me-search-row{display:flex;gap:4px;align-items:center}.me-search input{flex:1;min-width:0;padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));border-radius:4px;background:var(--md-textarea-bg,#fff);color:var(--md-text,#1f2937);font-size:13px}.me-search input:focus{outline:none;border-color:var(--md-accent,#3b82f6)}.me-search button{padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));background:var(--md-bg,#fff);color:var(--md-text,#1f2937);border-radius:4px;cursor:pointer;font-size:12px;line-height:1}.me-search button:hover{background:var(--md-accent,#3b82f6);color:#fff;border-color:var(--md-accent,#3b82f6)}.me-search .me-search-count{color:var(--md-muted,#6b7280);font-size:12px;min-width:60px;text-align:center}.me-search .me-search-close{padding:2px 6px}`; + document.head.appendChild(style); + } + const state = { + _panel: null, + _regexMode: false, + _cleanup: null, + }; + const _updateReplaceVisible = () => { + if (!state._panel) + return; + const show = state._panel.dataset.replace === '1'; + const row = state._panel.querySelector('.me-search-replace-row'); + if (row) + row.style.display = show ? 'flex' : 'none'; + }; + const _close = () => { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + if (editor && editor.textarea) + editor.textarea.focus(); + }; + const _open = (showReplace) => { + if (state._panel) { + state._panel.dataset.replace = showReplace ? '1' : '0'; + _updateReplaceVisible(); + const inp = state._panel.querySelector('.me-search-find'); + if (inp) { + inp.focus(); + inp.select(); + } + return; + } + const selected = editor.textarea.value.substring(editor.textarea.selectionStart, editor.textarea.selectionEnd); + const panel = document.createElement('div'); + panel.className = 'me-search'; + panel.dataset.replace = showReplace ? '1' : '0'; + panel.innerHTML = `
    `; + editor.el.appendChild(panel); + state._panel = panel; + _updateReplaceVisible(); + state._regexMode = false; + const fi = panel.querySelector('.me-search-find'); + const ri = panel.querySelector('.me-search-replace'); + const ce = panel.querySelector('.me-search-count'); + const regexBtn = panel.querySelector('.me-search-regex'); + regexBtn.addEventListener('click', () => { + state._regexMode = !state._regexMode; + regexBtn.classList.toggle('me-active', state._regexMode); + lastIdxs = findAll(); + }); + const findAll = () => { + const q = fi.value; + if (!q) { + ce.textContent = ''; + return []; + } + const idxs = []; + let from = 0; + if (state._regexMode) { + try { + const re = new RegExp(q, 'g'); + let m; + while ((m = re.exec(editor.textarea.value)) !== null) { + idxs.push(m.index); + if (m[0].length === 0) + re.lastIndex++; + } + } + catch (_) { + ce.textContent = 'err'; + return []; + } + } + else { + while (true) { + const idx = editor.textarea.value.indexOf(q, from); + if (idx === -1) + break; + idxs.push(idx); + from = idx + q.length; + } + } + ce.textContent = idxs.length ? `${idxs.length}` : '0'; + return idxs; + }; + let lastIdxs = []; + const selectAt = (idx, len) => { + editor.textarea.focus(); + editor.textarea.setSelectionRange(idx, idx + (len || fi.value.length)); + }; + const findNext = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionEnd; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(cur)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let next = lastIdxs.find((i) => i >= cur); + if (next == null) + next = lastIdxs[0]; + selectAt(next, qlen); + }; + const findPrev = () => { + lastIdxs = findAll(); + if (!lastIdxs.length) + return; + const cur = editor.textarea.selectionStart; + const qlen = state._regexMode ? (() => { try { + const m = new RegExp(fi.value).exec(editor.textarea.value.substring(Math.max(0, cur - 100), cur + 100)); + return m ? m[0].length : fi.value.length; + } + catch (_) { + return fi.value.length; + } })() : fi.value.length; + let prev = -1; + for (let i = lastIdxs.length - 1; i >= 0; i--) { + if (lastIdxs[i] < cur) { + prev = lastIdxs[i]; + break; + } + } + if (prev === -1) + prev = lastIdxs[lastIdxs.length - 1]; + selectAt(prev, qlen); + }; + const replaceOne = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + const s = ta.selectionStart, e = ta.selectionEnd; + const matchText = ta.value.substring(s, e); + if (state._regexMode) { + try { + if (new RegExp(q).test(matchText)) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + } + catch (_) { } + } + else if (matchText === q) { + ta.value = ta.value.substring(0, s) + r + ta.value.substring(e); + ta.setSelectionRange(s, s + r.length); + } + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findNext(); + }; + const replaceAll = () => { + const q = fi.value, r = ri.value; + if (!q) + return; + const ta = editor.textarea; + if (state._regexMode) { + try { + ta.value = ta.value.replace(new RegExp(q, 'g'), r); + } + catch (_) { + return; + } + } + else { + ta.value = ta.value.split(q).join(r); + } + ta.setSelectionRange(0, 0); + editor._value = ta.value; + if (typeof editor._pushHistory === 'function') + editor._pushHistory(); + if (typeof editor._render === 'function') + editor._render(); + if (typeof editor._emit === 'function') + editor._emit('change', editor._value); + findAll(); + }; + fi.addEventListener('input', () => { lastIdxs = findAll(); }); + fi.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + e.shiftKey ? findPrev() : findNext(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + ri.addEventListener('keydown', (e) => { if (e.key === 'Enter') { + e.preventDefault(); + replaceOne(); + } if (e.key === 'Escape') { + e.preventDefault(); + _close(); + } }); + panel.querySelector('.me-search-next').addEventListener('click', findNext); + panel.querySelector('.me-search-prev').addEventListener('click', findPrev); + panel.querySelector('.me-search-close').addEventListener('click', () => _close()); + panel.querySelector('.me-search-replace-one').addEventListener('click', replaceOne); + panel.querySelector('.me-search-replace-all').addEventListener('click', replaceAll); + fi.focus(); + fi.select(); + state._cleanup = () => { if (panel.parentNode) + panel.parentNode.removeChild(panel); }; + }; + const _onKeydown = (e) => { + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const k = e.key.toLowerCase(); + if (k === 'f') { + e.preventDefault(); + _open(false); + } + else if (k === 'h') { + e.preventDefault(); + _open(true); + } + else if (k === 'escape' && state._panel) { + _close(); + } + }; + editor.textarea.addEventListener('keydown', _onKeydown); + // Expose for tests + editor.__srState = state; + editor.__srOpen = _open; + editor.__srClose = _close; + editor.__srKeydown = _onKeydown; + }, + destroy(editor) { + const state = editor.__srState; + if (state) { + if (state._cleanup) { + state._cleanup(); + state._cleanup = null; + } + state._panel = null; + } + const _onKeydown = editor.__srKeydown; + if (_onKeydown && editor && editor.textarea) { + editor.textarea.removeEventListener('keydown', _onKeydown); + } + delete editor.__srState; + delete editor.__srOpen; + delete editor.__srClose; + delete editor.__srKeydown; + }, + }; + const imagePastePlugin = { + name: 'imagePaste', version: '0.2.0', description: 'Paste image as base64', priority: 60, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + const _onPaste = (e) => { + const items = e.clipboardData?.items; + if (!items) + return; + for (const item of items) { + if (item.type?.startsWith('image/')) { + e.preventDefault(); + const reader = new FileReader(); + reader.onload = () => { editor.insert(`![image-${Date.now().toString(36)}.png](${reader.result})\n`); }; + reader.readAsDataURL(item.getAsFile()); + break; + } + } + }; + editor.textarea.addEventListener('paste', _onPaste); + editor.__ipOnPaste = _onPaste; + }, + destroy(editor) { + const _onPaste = editor.__ipOnPaste; + if (_onPaste && editor?.textarea) + editor.textarea.removeEventListener('paste', _onPaste); + delete editor.__ipOnPaste; + }, + }; + const shortcutHelpPlugin = { + name: 'shortcutHelp', version: '0.2.0', description: 'Press ? to show shortcuts', priority: 200, + install(editor) { + if (!editor || !editor.textarea || typeof document === 'undefined') + return; + if (!document.getElementById('me-shortcut-style')) { + const s = document.createElement('style'); + s.id = 'me-shortcut-style'; + s.textContent = `.me-shortcut-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:50;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center}.me-shortcut-panel{background:var(--md-bg,#fff);border-radius:12px;padding:24px;max-width:560px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px rgba(0,0,0,0.3)}.me-shortcut-panel h3{font-size:16px;margin:0 0 16px;color:var(--md-text)}.me-shortcut-panel table{width:100%;border-collapse:collapse;font-size:13px}.me-shortcut-panel td{padding:6px 10px;border-bottom:1px solid var(--md-border)}.me-shortcut-panel td:first-child{font-family:var(--md-mono);font-size:12px;color:var(--md-accent);white-space:nowrap;width:40%}.me-shortcut-panel .me-shortcut-close{position:absolute;top:16px;right:20px;background:none;border:none;font-size:20px;cursor:pointer;color:var(--md-muted)}`; + document.head.appendChild(s); + } + let _panel = null; + const _close = () => { if (_panel) { + _panel.remove(); + _panel = null; + } }; + const _open = () => { + if (_panel) { + _close(); + return; + } + // i18n-aware shortcut labels + const builtin = [ + ['Ctrl+B', t('bold') || 'Bold'], ['Ctrl+I', t('italic') || 'Italic'], + ['Ctrl+U', t('underline') || 'Underline'], ['Ctrl+K', t('link') || 'Link'], + ['Ctrl+E', t('code') || 'Code'], ['Ctrl+1/2/3', t('h1') || 'Heading'], + ['Ctrl+Q', t('quote') || 'Quote'], ['Ctrl+Z', t('undo') || 'Undo'], + ['Ctrl+Y', t('redo') || 'Redo'], ['Ctrl+S', t('save') || 'Save'], + ['Ctrl+F', t('search') || 'Search'], ['Ctrl+H', t('replace') || 'Replace'], + ['Tab', t('indent') || 'Indent'], ['Shift+Tab', t('outdent') || 'Outdent'], + ['?', t('close') || 'Shortcuts'], + ]; + let rows = ''; + builtin.forEach(([c, d]) => { rows += `${c}${d}`; }); + const overlay = document.createElement('div'); + overlay.className = 'me-shortcut-overlay'; + overlay.innerHTML = `

    ⌨️ ${t('close') || 'Shortcuts'}

    ${rows}
    `; + overlay.addEventListener('click', (e) => { if (e.target === overlay || e.target.classList.contains('me-shortcut-close')) + _close(); }); + document.body.appendChild(overlay); + _panel = overlay; + }; + const _onKeydown = (e) => { + if (e.key === '?' && !e.ctrlKey && !e.metaKey && !e.altKey) { + e.preventDefault(); + _open(); + } + if (e.key === 'Escape' && _panel) + _close(); + }; + editor.textarea.addEventListener('keydown', _onKeydown); + editor.__shState = { _panel, _open, _close, _onKeydown }; + }, + destroy(editor) { + const state = editor.__shState; + if (state) { + if (state._panel) { + state._panel.remove(); + } + } + const _onKeydown = editor.__shState?._onKeydown; + if (_onKeydown && editor?.textarea) + editor.textarea.removeEventListener('keydown', _onKeydown); + delete editor.__shState; + }, + }; + const fileSystemPlugin = { + name: 'fileSystem', version: '0.2.0', description: 'File System Access API', priority: 90, + install(editor) { + if (!editor || typeof editor.getValue !== 'function') + return; + const hasAPI = typeof window !== 'undefined' && typeof window.showOpenFilePicker === 'function'; + let _fileHandle = null; + editor.openFile = async (opts = {}) => { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return null; + } + try { + const [handle] = await window.showOpenFilePicker({ types: [{ accept: { 'text/markdown': ['.md', '.txt', '.markdown'] } }], ...opts }); + _fileHandle = handle; + const file = await handle.getFile(); + const content = await file.text(); + editor.setValue(content); + editor._emit?.('fileOpened', { name: file.name, handle }); + return { name: file.name, content, handle }; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Open file error:', e); + return null; + } + }; + editor.saveFile = async (opts = {}) => { + let handle = _fileHandle; + if (!handle || opts.saveAs) { + if (!hasAPI) { + editor.toast?.('File System Access API not supported', { type: 'warning' }); + return false; + } + try { + handle = await window.showSaveFilePicker({ types: [{ accept: { 'text/markdown': ['.md'] } }], suggestedName: opts.name || 'document.md' }); + _fileHandle = handle; + } + catch (e) { + if (e.name !== 'AbortError') + console.error('Save error:', e); + return false; + } + } + try { + const w = await handle.createWritable(); + await w.write(editor.getValue()); + await w.close(); + editor._emit?.('fileSaved', { handle }); + return true; + } + catch (e) { + _fileHandle = null; + if (!opts.saveAs) + return editor.saveFile({ ...opts, saveAs: true }); + console.error('Write error:', e); + return false; + } + }; + editor.saveFileAs = (name) => editor.saveFile({ saveAs: true, name }); + editor.getFileHandle = () => _fileHandle; + editor.__fsCleanup = { getHandle: () => _fileHandle }; + }, + destroy(editor) { + if (editor) { + delete editor.openFile; + delete editor.saveFile; + delete editor.saveFileAs; + delete editor.getFileHandle; + } + delete editor.__fsCleanup; + }, + }; + // ============ Preset plugins table ============ + const presetPlugins = { + autoSave: autoSavePlugin, exportTool: exportToolPlugin, searchReplace: searchReplacePlugin, + imagePaste: imagePastePlugin, shortcutHelp: shortcutHelpPlugin, fileSystem: fileSystemPlugin, + }; + // ============ Plugin utils ============ + const pluginUtils = { + createManager: () => new PluginManager(), + manager: defaultPluginManager, + register: (name, plugin) => defaultPluginManager.register(name, plugin), + unregister: (name) => defaultPluginManager.unregister(name), + get: (name) => defaultPluginManager.get(name), + has: (name) => defaultPluginManager.has(name), + getAll: () => defaultPluginManager.getAll(), + getNames: () => defaultPluginManager.getNames(), + enable: (name) => defaultPluginManager.enable(name), + disable: (name) => defaultPluginManager.disable(name), + isEnabled: (name) => defaultPluginManager.isEnabled(name), + getPreset: (name) => presetPlugins[name] ? { ...presetPlugins[name] } : null, + getAllPresets: () => Object.keys(presetPlugins).reduce((acc, k) => { acc[k] = { ...presetPlugins[k] }; return acc; }, {}), + createPlugin: (config = {}) => { + const result = { name: config.name || 'custom', version: config.version || '0.0.0', description: config.description || '', depends: config.depends || [], priority: config.priority || 0, install: () => { }, destroy: () => { }, ...config }; + if (typeof result.install !== 'function') + result.install = () => { }; + if (typeof result.destroy !== 'function') + result.destroy = () => { }; + return result; + }, + validatePlugin: (plugin) => { + const errors = []; + if (!plugin || typeof plugin !== 'object') + errors.push('plugin must be an object'); + if (plugin && !plugin.name) + errors.push('plugin must have a name'); + if (plugin && plugin.install && typeof plugin.install !== 'function') + errors.push('install must be a function'); + return { valid: errors.length === 0, errors }; + }, + topologicalSort, validateConfig, + }; + + /** + * MetonaEditor Themes — theme system + * @module themes + * @version 0.2.0 + */ + // ============ State ============ + let globalCurrentTheme = 'auto'; + let globalThemeListeners = new Set(); + let _sysWatchUnsub = null; + // ============ System theme ============ + const getSystemTheme = () => { + if (typeof window === 'undefined') + return 'light'; + return prefersDark() ? 'dark' : 'light'; + }; + const _watchSystem = (callback) => { + if (typeof window === 'undefined' || !window.matchMedia) + return () => { }; + const mql = window.matchMedia('(prefers-color-scheme: dark)'); + const handler = (e) => callback(e.matches ? 'dark' : 'light'); + mql.addEventListener('change', handler); + return () => mql.removeEventListener('change', handler); + }; + const watchSystemTheme = () => { + if (typeof window === 'undefined' || !window.matchMedia) + return; + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } + _sysWatchUnsub = _watchSystem((sysTheme) => { + if (globalCurrentTheme === 'auto') + applyTheme('auto'); + }); + }; + const unwatchSystemTheme = () => { + if (_sysWatchUnsub) { + _sysWatchUnsub(); + _sysWatchUnsub = null; + } + }; + // ============ Theme resolution ============ + const resolveTheme = (theme) => { + if (!theme || theme === 'auto') + return getSystemTheme(); + return theme; + }; + const getThemeConfig = (theme) => { + const resolved = resolveTheme(theme); + const config = THEMES[resolved]; + return (config && typeof config === 'object' ? config : THEMES.light); + }; + // ============ CSS variables ============ + const setThemeVariables = (config, target) => { + if (typeof document === 'undefined' || !config || typeof config !== 'object') + return; + const root = target || document.documentElement; + const vars = { + '--md-bg': config.bg, '--md-text': config.text, '--md-border': config.border, + '--md-shadow': config.shadow, '--md-hover-shadow': config.hoverShadow, + '--md-toolbar-bg': config.toolbarBg || config.bg, + '--md-textarea-bg': config.textareaBg || config.bg, + '--md-preview-bg': config.previewBg || config.bg, + '--md-code-bg': config.codeBg || 'rgba(127,127,127,0.1)', + '--md-code-text': config.codeText || config.text, + '--md-accent': config.accent || '#3b82f6', + '--md-muted': config.muted || '#9ca3af', + }; + for (const [k, v] of Object.entries(vars)) { + if (v !== undefined && v !== null) + root.style.setProperty(k, String(v)); + } + if (config.progressBg) + root.style.setProperty('--md-progress-bg', config.progressBg); + if (config.closeHoverBg) + root.style.setProperty('--md-close-hover-bg', config.closeHoverBg); + }; + const exportCSSVars = (el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return {}; + const style = getComputedStyle(root); + const varNames = ['--md-bg', '--md-text', '--md-border', '--md-shadow', '--md-hover-shadow', '--md-toolbar-bg', '--md-textarea-bg', '--md-preview-bg', '--md-code-bg', '--md-code-text', '--md-accent', '--md-muted']; + const result = {}; + varNames.forEach((name) => { const val = style.getPropertyValue(name).trim(); if (val) + result[name] = val; }); + return result; + }; + const getCSSVariable = (name, el) => { + const root = el || document.documentElement; + if (typeof document === 'undefined') + return ''; + const fullName = name.startsWith('--') ? name : `--md-${name}`; + return getComputedStyle(root).getPropertyValue(fullName).trim(); + }; + // ============ Apply theme ============ + const applyTheme = (theme) => { + globalCurrentTheme = theme; + const resolved = resolveTheme(theme); + if (typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolved); + document.documentElement.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + document.documentElement.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme)); + } + notifyGlobalListeners(theme, resolved); + }; + const applyThemeToElement = (theme, target) => { + if (!target || typeof document === 'undefined') + return; + const resolved = resolveTheme(theme); + target.setAttribute('data-md-theme', resolved); + target.classList.remove('md-theme-light', 'md-theme-dark', 'md-theme-auto', 'md-theme-warm'); + if (resolved !== 'auto') + target.classList.add(`md-theme-${resolved}`); + setThemeVariables(getThemeConfig(theme), target); + }; + const switchTheme = (theme) => { applyTheme(theme); saveTheme(theme); }; + const toggleTheme = () => { const r = getResolvedTheme(); switchTheme(r === 'dark' ? 'light' : 'dark'); }; + const resetToAuto = () => { switchTheme('auto'); }; + const getCurrentTheme = () => globalCurrentTheme; + const getResolvedTheme = () => resolveTheme(globalCurrentTheme); + // ============ Persistence ============ + const saveTheme = (theme) => { + if (typeof localStorage !== 'undefined') { + try { + localStorage.setItem('metona-editor-theme', theme); + } + catch (_) { } + } + }; + const loadTheme = () => { + if (typeof localStorage !== 'undefined') { + try { + return localStorage.getItem('metona-editor-theme') || 'auto'; + } + catch (_) { } + } + return 'auto'; + }; + // ============ Listeners ============ + const notifyGlobalListeners = (theme, resolved) => { + globalThemeListeners.forEach((fn) => { try { + fn(theme, resolved); + } + catch (e) { + console.error('Theme listener error:', e); + } }); + }; + const addThemeListener = (fn) => { + globalThemeListeners.add(fn); + return () => { globalThemeListeners.delete(fn); }; + }; + const removeThemeListener = (fn) => { globalThemeListeners.delete(fn); }; + const clearThemeListeners = () => { globalThemeListeners.clear(); }; + // ============ System watch ============ + const startSystemWatch = () => { watchSystemTheme(); }; + // ============ Init ============ + const initTheme = () => { applyTheme(loadTheme()); startSystemWatch(); }; + // ============ External follow ============ + const followExternalTheme = (options, onThemeChange) => { + if (typeof document === 'undefined' || typeof MutationObserver === 'undefined') + return () => { }; + const { element = document.documentElement, attr = 'data-theme', classMap = null, callback = null } = options; + const detect = () => { + if (typeof callback === 'function') + return callback(element); + const attrVal = element.getAttribute(attr); + if (attrVal) + return attrVal; + if (classMap) { + for (const [cls, theme] of Object.entries(classMap)) { + if (element.classList.contains(cls)) + return theme; + } + } + const mdTheme = element.getAttribute('data-md-theme'); + if (mdTheme) + return mdTheme; + return null; + }; + let lastTheme = detect(); + if (lastTheme) + onThemeChange(lastTheme); + const observer = new MutationObserver(() => { const current = detect(); if (current && current !== lastTheme) { + lastTheme = current; + onThemeChange(current); + } }); + observer.observe(element, { attributes: true, attributeFilter: [attr, 'class', 'data-md-theme'] }); + return () => observer.disconnect(); + }; + const adoptFromParent = (container, onThemeDetected) => { + if (typeof document === 'undefined' || !container) + return () => { }; + const detect = () => { + let el = container.parentElement; + while (el) { + const t = el.getAttribute('data-md-theme'); + if (t) + return t; + if (el.classList.contains('theme-dark') || el.classList.contains('dark')) + return 'dark'; + if (el.classList.contains('theme-light') || el.classList.contains('light')) + return 'light'; + el = el.parentElement; + } + if (container.parentElement) { + const bg = getComputedStyle(container.parentElement).getPropertyValue('--md-bg').trim() || getComputedStyle(container.parentElement).backgroundColor; + if (bg) { + const rgb = bg.match(/\d+/g); + if (rgb && rgb.length >= 3) { + const brightness = (parseInt(rgb[0]) * 299 + parseInt(rgb[1]) * 587 + parseInt(rgb[2]) * 114) / 1000; + return brightness < 128 ? 'dark' : 'light'; + } + } + } + return null; + }; + const detected = detect(); + if (detected) + onThemeDetected(detected); + const observer = new MutationObserver(() => { const d = detect(); if (d) + onThemeDetected(d); }); + let target = container.parentElement; + while (target) { + observer.observe(target, { attributes: true, attributeFilter: ['class', 'data-md-theme', 'data-theme'] }); + target = target.parentElement; + if (target === document.documentElement) + break; + } + return () => observer.disconnect(); + }; + const watch = (source, onChange) => { + if (typeof source === 'function') { + const tick = () => { try { + const t = source(); + if (t) + onChange(t); + } + catch (_) { } }; + tick(); + const id = setInterval(tick, 500); + return () => clearInterval(id); + } + if (typeof source === 'string' && typeof document !== 'undefined') { + const el = document.querySelector(source); + if (!el) + return () => { }; + return followExternalTheme({ element: el, attr: 'data-theme' }, onChange); + } + return () => { }; + }; + // ============ Custom theme registration ============ + const registerTheme = (name, config = {}) => { + const baseName = config.extends || 'light'; + const base = (THEMES[baseName] || THEMES.light); + THEMES[name] = { + bg: config.bg || base.bg, text: config.text || base.text, border: config.border || base.border, + shadow: config.shadow || base.shadow, hoverShadow: config.hoverShadow || base.hoverShadow, + toolbarBg: config.toolbarBg || base.toolbarBg || base.bg, + textareaBg: config.textareaBg || base.textareaBg || base.bg, + previewBg: config.previewBg || base.previewBg || base.bg, + codeBg: config.codeBg || base.codeBg, codeText: config.codeText || base.codeText, + accent: config.accent || base.accent, muted: config.muted || base.muted, + progressBg: config.progressBg || base.progressBg, + closeHoverBg: config.closeHoverBg || base.closeHoverBg, + }; + }; + const unregisterTheme = (name) => { + if (name === 'light' || name === 'dark' || name === 'auto' || name === 'warm') { + console.warn('Cannot unregister built-in theme:', name); + return; + } + delete THEMES[name]; + }; + const getAllThemes = () => ({ ...THEMES }); + const getThemeNames = () => Object.keys(THEMES); + const hasTheme = (name) => name in THEMES; + // ============ Instance theme ============ + const createInstanceTheme = (editor) => { + let instanceTheme = editor.config?.theme || globalCurrentTheme || 'auto'; + const apply = (theme) => { + instanceTheme = theme; + const resolved = resolveTheme(theme); + const config = getThemeConfig(theme); + if (editor.el) { + ['me-theme-light', 'me-theme-dark', 'me-theme-warm'].forEach((c) => editor.el.classList.remove(c)); + if (resolved !== 'auto') + editor.el.classList.add(`me-theme-${resolved}`); + editor.el.setAttribute('data-md-theme', resolved); + setThemeVariables(config, editor.el); + } + if (typeof editor._emit === 'function') + editor._emit('themeChange', { theme, resolved, config }); + if (typeof editor.refresh === 'function') + editor.refresh(); + return instanceTheme; + }; + const get = () => instanceTheme; + const set = (theme) => apply(theme); + const toggle = () => { const r = resolveTheme(instanceTheme); return apply(r === 'dark' ? 'light' : 'dark'); }; + const getResolved = () => resolveTheme(instanceTheme); + const getConfig = () => getThemeConfig(instanceTheme); + const getVars = () => editor.el ? exportCSSVars(editor.el) : {}; + const syncWithElement = (element, opts = {}) => followExternalTheme({ element, attr: opts.attr || 'data-theme', classMap: opts.classMap, callback: opts.callback }, (detected) => apply(detected)); + const adopt = () => editor.container ? adoptFromParent(editor.container, (detected) => apply(detected)) : () => { }; + const watchExternal = (source) => watch(source, (theme) => apply(theme)); + apply(instanceTheme); + return { apply, get, set, toggle, getResolved, getConfig, getVars, syncWithElement, adopt, watch: watchExternal }; + }; + const presetThemes = { + light: { name: '浅色', description: '明亮清晰', config: THEMES.light }, + dark: { name: '深色', description: '护眼暗色', config: THEMES.dark }, + auto: { name: '自动', description: '跟随系统', config: 'auto' }, + warm: { name: '暖色', description: '温馨暖色', config: THEMES.warm }, + }; + // Ensure built-in themes in THEMES + for (const [name, theme] of Object.entries(presetThemes)) { + if (name !== 'auto' && theme.config !== 'auto') + THEMES[name] = theme.config; + } + const themeUtils = { + getSystemTheme, resolveTheme, getThemeConfig, watchSystemTheme, unwatchSystemTheme, + applyTheme, getCurrentTheme, getResolvedTheme, switchTheme, toggleTheme, resetToAuto, initTheme, + saveTheme, loadTheme, addThemeListener, removeThemeListener, clearThemeListeners, + registerTheme, unregisterTheme, getAllThemes, getThemeNames, hasTheme, + setThemeVariables, exportCSSVars, getCSSVariable, applyThemeToElement, + followExternalTheme, adoptFromParent, watch, createInstanceTheme, + }; + + /** + * MetonaEditor Core — MarkdownEditor class (TypeScript) + * @module core + * @version 0.2.0 + */ + const MODES = ['edit', 'split', 'preview']; + const TOAST_ICONS = { success: '✓', error: '✗', warning: '⚠', info: 'ℹ' }; + const BRACKET_PAIRS = { + '(': ')', '[': ']', '{': '}', '"': '"', "'": "'", '`': '`', '*': '*', '_': '_', + }; + const resolveThemeName = (theme) => { + if (theme && theme !== 'auto') + return theme; + return resolveTheme('auto'); + }; + class MarkdownEditor { + static on(name, fn) { + if (!this._hooks.has(name)) + this._hooks.set(name, []); + this._hooks.get(name).push(fn); + return () => this.off(name, fn); + } + static off(name, fn) { + const list = this._hooks.get(name); + if (list) + this._hooks.set(name, list.filter((f) => f !== fn)); + } + static trigger(name, instance) { + const list = this._hooks.get(name); + if (list) + list.forEach((fn) => { try { + fn(instance); + } + catch (e) { + console.error(`MeEditor hook "${name}" error:`, e); + } }); + } + constructor(container, options = {}) { + if (!isBrowser()) { + this._destroyed = true; + this._value = options.value || ''; + return this; + } + this.id = options.id || generateId(); + this.container = typeof container === 'string' ? document.querySelector(container) : container; + if (!this.container) { + console.error('MeEditor: container not found:', container); + this._destroyed = true; + return this; + } + this.config = { ...DEFAULTS, ...options }; + if (options.style && typeof options.style === 'object') { + this.config.style = { ...DEFAULTS.style, ...options.style }; + } + this._value = this.config.value || ''; + this._mode = MODES.includes(this.config.mode) ? this.config.mode : 'split'; + this._history = []; + this._historyIndex = -1; + this._cleanups = []; + this._plugins = []; + this._listeners = {}; + this._renderRaf = null; + this._historyTimer = null; + this._fullscreen = false; + this._destroyed = false; + this._lastRenderedValue = null; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + this._outlineTimer = null; + this._zenMode = false; + this._wordWrap = true; + this._syncing = false; + this._zenMouseHandler = null; + this._floatingToolbar = null; + this._selectionTimer = null; + this._floatingEnabled = this.config.floatingToolbar !== false; + this._renderFn = (typeof this.config.render === 'function') ? this.config.render : parseMarkdown; + this._highlightFn = (typeof this.config.highlight === 'function') ? this.config.highlight : null; + MarkdownEditor.trigger('beforeCreate', this); + injectStyles(); + this._buildDOM(); + this._themeCtx = createInstanceTheme(this); + this._i18nCtx = createInstanceI18n(this); + if (options.theme && typeof document !== 'undefined') { + document.documentElement.setAttribute('data-md-theme', resolveTheme(options.theme)); + } + const resolvedThemeConfig = getThemeConfig(this.config.theme); + setThemeVariables(resolvedThemeConfig, this.el); + this._buildToolbar(); + this._updateModeButtons(); + this._bindToolbarKeyboard(); + this._initAriaLive(); + this._bindEvents(); + this._bindContextMenu(); + this._trackOutlineScroll(); + if (this.config.floatingToolbar !== false) + this._initFloatingToolbar(); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + if (Array.isArray(this.config.plugins)) { + const plugins = this.config.plugins.map((p) => { + if (typeof p === 'string') + return { ...presetPlugins[p], _isStringRef: true }; + return p; + }).filter(Boolean); + const sorted = topologicalSort(plugins); + sorted.forEach((p) => this.use(p)); + } + if (this.config.autofocus && !this.config.readOnly) + this.focus(); + if (typeof this.config.onCreate === 'function') { + try { + this.config.onCreate(this); + } + catch (e) { + console.error('onCreate error:', e); + } + } + MarkdownEditor.trigger('afterCreate', this); + } + _buildDOM() { + const wrapper = document.createElement('div'); + wrapper.className = `me-wrapper me-theme-${resolveThemeName(this.config.theme)}`; + if (this.config.readOnly) + wrapper.classList.add('me-readonly'); + wrapper.dataset.id = this.id; + wrapper.setAttribute('role', 'application'); + wrapper.setAttribute('aria-label', t('edit')); + if (this.config.className) { + this.config.className.split(/\s+/).filter(Boolean).forEach((c) => wrapper.classList.add(c)); + } + const h = this.config.height; + wrapper.style.height = typeof h === 'number' ? `${h}px` : (h || '400px'); + if (this.config.style && typeof this.config.style === 'object') { + Object.entries(this.config.style).forEach(([k, v]) => { if (v) + wrapper.style[k] = v; }); + } + const toolbar = document.createElement('div'); + toolbar.className = 'me-toolbar'; + toolbar.setAttribute('role', 'toolbar'); + const body = document.createElement('div'); + body.className = `me-body me-mode-${this._mode}`; + const editorPane = document.createElement('div'); + editorPane.className = 'me-editor-pane'; + const editorInner = document.createElement('div'); + editorInner.className = 'me-editor-inner'; + const gutter = document.createElement('div'); + gutter.className = 'me-gutter'; + if (!this.config.lineNumbers) + gutter.style.display = 'none'; + editorInner.appendChild(gutter); + const textarea = document.createElement('textarea'); + textarea.className = 'me-textarea'; + textarea.spellcheck = !!this.config.spellcheck; + textarea.readOnly = !!this.config.readOnly; + textarea.style.tabSize = String(this.config.tabSize || 2); + textarea.placeholder = this.config.placeholder || t('placeholder'); + textarea.setAttribute('aria-label', t('edit')); + editorInner.appendChild(textarea); + editorPane.appendChild(editorInner); + const divider = document.createElement('div'); + divider.className = 'me-divider'; + divider.setAttribute('role', 'separator'); + const previewPane = document.createElement('div'); + previewPane.className = 'me-preview-pane'; + previewPane.setAttribute('role', 'region'); + previewPane.setAttribute('aria-label', t('preview')); + const preview = document.createElement('div'); + preview.className = 'me-preview'; + previewPane.appendChild(preview); + body.appendChild(editorPane); + body.appendChild(divider); + body.appendChild(previewPane); + wrapper.appendChild(toolbar); + wrapper.appendChild(body); + let statusbar = null; + if (this.config.wordCount) { + statusbar = document.createElement('div'); + statusbar.className = 'me-statusbar'; + wrapper.appendChild(statusbar); + } + this.container.appendChild(wrapper); + this.el = wrapper; + this.toolbarEl = toolbar; + this.bodyEl = body; + this.editorPane = editorPane; + this.editorInner = editorInner; + this.gutter = gutter; + this.previewPane = previewPane; + this.dividerEl = divider; + this.textarea = textarea; + this.previewEl = preview; + this.statusEl = statusbar; + // Restore divider position if saved + this._restoreDividerPosition(); + } + _buildToolbar() { + const tools = this.config.toolbar; + if (!tools || !Array.isArray(tools) || tools.length === 0) + return; + const modeActions = []; + tools.forEach((item) => { + if (item === '|') { + const sep = document.createElement('span'); + sep.className = 'me-toolbar-sep'; + this.toolbarEl.appendChild(sep); + return; + } + if (item === 'edit' || item === 'split' || item === 'preview' || item === 'fullscreen') { + modeActions.push(item); + return; + } + this.toolbarEl.appendChild(this._createBtn(item)); + }); + if (modeActions.length) { + const group = document.createElement('div'); + group.className = 'me-toolbar-group'; + modeActions.forEach((item) => { + const btn = this._createBtn(item); + if (item === 'edit' || item === 'split' || item === 'preview') { + btn.dataset.mode = item; + if (item === this._mode) + btn.classList.add('me-active'); + } + group.appendChild(btn); + }); + this.toolbarEl.appendChild(group); + } + } + _createBtn(item) { + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-${item}`; + btn.dataset.action = item; + const label = t(item) || item; + btn.title = label; + btn.setAttribute('aria-label', label); + btn.innerHTML = ICONS[item] || `${escapeHTML(item)}`; + return btn; + } + _bindEvents() { + const ta = this.textarea; + const onInput = () => { + const oldValue = this._value; + this._value = ta.value; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', oldValue, this._value); + this._scheduleRender(); + this._scheduleHistory(); + this._updateWordCount(); + this._renderGutter(); + this._updateOutline(); + this._emit('input', this._value); + this._emit('change', this._value); + if (typeof this.config.onInput === 'function') { + try { + this.config.onInput(this._value, this); + } + catch (e) { + console.error(e); + } + } + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + }; + ta.addEventListener('input', onInput); + const onKeydown = (e) => { + if (e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.metaKey) + this._handleSmartEnter(e); + this._handleKeydown(e); + }; + ta.addEventListener('keydown', onKeydown); + const onKeypress = (e) => this._handleBracketAutoClose(e); + ta.addEventListener('keypress', onKeypress); + const onCursorActivity = () => { this._updateCurrentLine(); }; + ta.addEventListener('click', onCursorActivity); + ta.addEventListener('keyup', onCursorActivity); + const onScroll = () => { this._syncScroll(); }; + ta.addEventListener('scroll', onScroll); + const onPreviewScroll = () => { + if (!this.config.syncScroll || this._mode !== 'split') + return; + if (this._syncing) + return; + this._syncing = true; + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax <= 0) { + this._syncing = false; + return; + } + const ratio = this.previewPane.scrollTop / pmax; + const tmax = ta.scrollHeight - ta.clientHeight; + ta.scrollTop = ratio * tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ratio * tmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + }; + this.previewPane.addEventListener('scroll', onPreviewScroll); + const onFocus = () => { + this._emit('focus'); + if (typeof this.config.onFocus === 'function') { + try { + this.config.onFocus(this); + } + catch (e) { + console.error(e); + } + } + }; + const onBlur = () => { + this._emit('blur'); + if (typeof this.config.onBlur === 'function') { + try { + this.config.onBlur(this); + } + catch (e) { + console.error(e); + } + } + }; + ta.addEventListener('focus', onFocus); + ta.addEventListener('blur', onBlur); + const onPreviewClick = (e) => { + const a = e.target.closest('a'); + if (!a) + return; + const href = a.getAttribute('href'); + if (!href || href.startsWith('#')) + return; + e.preventDefault(); + this._emit('linkClick', { href, text: a.textContent }); + if (typeof this.config.onLinkClick === 'function') { + try { + this.config.onLinkClick(href, a.textContent, this); + } + catch (_) { } + return; + } + window.open(href, '_blank', 'noopener'); + }; + this.previewEl.addEventListener('click', onPreviewClick); + const onToolbarClick = (e) => { + const btn = e.target.closest('.me-btn'); + if (!btn) + return; + const mode = btn.dataset.mode; + if (mode) { + this.setMode(mode); + return; + } + const action = btn.dataset.action; + if (action) + this.exec(action); + }; + this.toolbarEl.addEventListener('click', onToolbarClick); + const onDividerDown = (e) => this._bindDividerDrag(e); + this.dividerEl.addEventListener('pointerdown', onDividerDown); + this._bindDragDrop(); + this._cleanups.push(() => { + ta.removeEventListener('input', onInput); + ta.removeEventListener('keydown', onKeydown); + ta.removeEventListener('keypress', onKeypress); + ta.removeEventListener('scroll', onScroll); + this.previewPane.removeEventListener('scroll', onPreviewScroll); + ta.removeEventListener('click', onCursorActivity); + ta.removeEventListener('keyup', onCursorActivity); + ta.removeEventListener('focus', onFocus); + ta.removeEventListener('blur', onBlur); + this.toolbarEl.removeEventListener('click', onToolbarClick); + this.dividerEl.removeEventListener('pointerdown', onDividerDown); + }); + } + _handleKeydown(e) { + if (e.key === 'Tab') { + e.preventDefault(); + this._handleTab(e.shiftKey); + return; + } + if (this._shortcuts.length) { + for (const sc of this._shortcuts) { + const ctrlOk = sc.ctrl ? (e.ctrlKey || e.metaKey) : !e.ctrlKey && !e.metaKey; + const shiftOk = sc.shift ? e.shiftKey : !e.shiftKey; + const altOk = sc.alt ? e.altKey : !e.altKey; + if (e.key.toLowerCase() === sc.key && ctrlOk && shiftOk && altOk) { + e.preventDefault(); + if (typeof sc.handler === 'string') + this.exec(sc.handler); + else if (typeof sc.handler === 'function') { + try { + sc.handler(this); + } + catch (err) { + console.error('Shortcut error:', err); + } + } + return; + } + } + } + const mod = e.ctrlKey || e.metaKey; + if (!mod) + return; + const key = e.key.toLowerCase(); + const shortcuts = { b: 'bold', i: 'italic', k: 'link', u: 'underline', e: 'code', '1': 'h1', '2': 'h2', '3': 'h3', q: 'quote' }; + if (key === 'z' && !e.shiftKey) { + e.preventDefault(); + this.undo(); + } + else if ((key === 'z' && e.shiftKey) || key === 'y') { + e.preventDefault(); + this.redo(); + } + else if (key === 's') { + e.preventDefault(); + this._emit('save', this._value); + if (typeof this.config.onSave === 'function') { + try { + this.config.onSave(this._value, this); + } + catch (err) { + console.error(err); + } + } + } + else if (shortcuts[key]) { + e.preventDefault(); + this.exec(shortcuts[key]); + } + } + _handleTab(shift) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const tabSize = this.config.tabSize || 0; + const tabStr = tabSize > 0 ? ' '.repeat(tabSize) : '\t'; + if (start === end) { + ta.value = ta.value.slice(0, start) + tabStr + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + tabStr.length; + } + else { + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const block = ta.value.slice(lineStart, end); + const lines = block.split('\n'); + let newBlock; + if (shift) { + newBlock = lines.map((l) => l.replace(/^(\t| {1,4})/, '')).join('\n'); + } + else { + newBlock = lines.map((l) => tabStr + l).join('\n'); + } + ta.value = ta.value.slice(0, lineStart) + newBlock + ta.value.slice(end); + ta.selectionStart = lineStart; + ta.selectionEnd = lineStart + newBlock.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + _bindDividerDrag(e) { + if (this._mode !== 'split') + return; + e.preventDefault(); + const startX = e.clientX; + const editorWidth = this.editorPane.getBoundingClientRect().width; + const totalWidth = this.bodyEl.getBoundingClientRect().width; + if (totalWidth <= 0) + return; + const divider = this.dividerEl; + const onMove = (ev) => { + const dx = ev.clientX - startX; + let newW = editorWidth + dx; + const min = 80; + const max = totalWidth - 80 - divider.offsetWidth; + newW = Math.max(min, Math.min(max, newW)); + const pct = (newW / totalWidth) * 100; + this.editorPane.style.flex = `0 0 ${pct}%`; + this.previewPane.style.flex = `1 1 ${100 - pct}%`; + }; + const onUp = () => { + window.removeEventListener('pointermove', onMove); + window.removeEventListener('pointerup', onUp); + this._saveDividerPosition(); + }; + window.addEventListener('pointermove', onMove); + window.addEventListener('pointerup', onUp); + } + _saveDividerPosition() { + try { + const epFlex = this.editorPane.style.flex; + if (epFlex) + localStorage.setItem('metona-editor-divider', epFlex); + } + catch (_) { } + } + _restoreDividerPosition() { + try { + const saved = localStorage.getItem('metona-editor-divider'); + if (saved && this._mode === 'split') { + this.editorPane.style.flex = saved; + this.previewPane.style.flex = '1 1 auto'; + } + } + catch (_) { } + } + _scheduleRender() { if (this._renderRaf) + return; this._renderRaf = requestAnimationFrame(() => { this._renderRaf = null; this._render(); }); } + _render() { + if (this._mode === 'edit') + return; + if (this._lastRenderedValue === this._value) + return; + this._lastRenderedValue = this._value; + MarkdownEditor.trigger('beforeRender', this); + this._emit('beforeRender', this); + let html; + try { + html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); + } + catch (err) { + console.error('MeEditor render error:', err); + html = `

    ${t('renderError')}: ${escapeHTML(err.message)}

    `; + } + if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error('sanitize error:', e); + } + } + this.previewEl.innerHTML = html; + this._renderGutter(); + MarkdownEditor.trigger('afterRender', this); + this._emit('afterRender', this); + } + _renderGutter() { + if (!this.config.lineNumbers || !this.gutter) + return; + const lines = this._value ? this._value.split('\n').length : 1; + const current = this.gutter.children.length; + if (current === lines) + return; + if (current < lines) { + // Add new line numbers + let h = ''; + for (let i = current + 1; i <= lines; i++) + h += `
    ${i}
    `; + this.gutter.insertAdjacentHTML('beforeend', h); + } + else { + // Remove excess line numbers + while (this.gutter.children.length > lines) { + this.gutter.removeChild(this.gutter.lastChild); + } + } + } + _updateCurrentLine() { + if (!this.gutter) + return; + const pos = this.textarea.selectionStart; + const lineNum = this._value.substring(0, pos).split('\n').length; + const prev = this.gutter.querySelector('.me-gutter-active'); + if (prev) + prev.classList.remove('me-gutter-active'); + const cur = this.gutter.children[lineNum - 1]; + if (cur) + cur.classList.add('me-gutter-active'); + } + _handleSmartEnter(e) { + const ta = this.textarea; + const start = ta.selectionStart; + const val = ta.value; + const lineStart = val.lastIndexOf('\n', start - 1) + 1; + const line = val.slice(lineStart, start); + const listMatch = line.match(/^(\s*)([-*+]|\d+\.)\s(.*)/); + if (listMatch) { + const indent = listMatch[1]; + const marker = listMatch[2]; + const content = listMatch[3]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + let nextMarker = marker; + if (/^\d+\.$/.test(marker)) { + const num = parseInt(marker, 10); + if (!isNaN(num)) + nextMarker = (num + 1) + '.'; + } + e.preventDefault(); + const insert = '\n' + indent + nextMarker + ' '; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + const quoteMatch = line.match(/^(\s*>+\s?)(.*)/); + if (quoteMatch) { + const prefix = quoteMatch[1]; + const content = quoteMatch[2]; + if (!content.trim()) { + e.preventDefault(); + ta.value = val.slice(0, lineStart) + '\n' + val.slice(start); + ta.selectionStart = ta.selectionEnd = lineStart; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + return; + } + e.preventDefault(); + const insert = '\n' + prefix; + ta.value = val.slice(0, start) + insert + val.slice(ta.selectionEnd); + ta.selectionStart = ta.selectionEnd = start + insert.length; + this._value = ta.value; + this._pushHistory(); + this._renderGutter(); + this._emit('change', this._value); + } + } + _handleBracketAutoClose(e) { + if (!this.config.autoBrackets) + return; + const ta = this.textarea; + const key = e.key; + const close = BRACKET_PAIRS[key]; + if (!close) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start !== end) { + e.preventDefault(); + const selected = ta.value.slice(start, end); + const wrap = key + selected + close; + ta.value = ta.value.slice(0, start) + wrap + ta.value.slice(end); + ta.selectionStart = start + 1; + ta.selectionEnd = start + 1 + selected.length; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + return; + } + const nextChar = ta.value[start] || ''; + if (key === close) { + if (nextChar === close) { + e.preventDefault(); + ta.selectionStart = ta.selectionEnd = start + 1; + return; + } + if (/\w/.test(nextChar)) + return; + } + e.preventDefault(); + const pair = key + close; + ta.value = ta.value.slice(0, start) + pair + ta.value.slice(end); + ta.selectionStart = ta.selectionEnd = start + 1; + this._value = ta.value; + this._pushHistory(); + this._emit('change', this._value); + } + _bindDragDrop() { + const ta = this.textarea; + if (!ta) + return; + const onDragOver = (e) => { e.preventDefault(); if (e.dataTransfer) + e.dataTransfer.dropEffect = 'copy'; }; + const onDrop = (e) => { + e.preventDefault(); + const files = e.dataTransfer?.files; + if (files && files.length) { + Array.from(files).forEach((file) => { + if (file.type.startsWith('image/')) { + const reader = new FileReader(); + reader.onload = () => { this.insert(`![${file.name}](${reader.result})\n`); }; + reader.readAsDataURL(file); + } + else if (file.type.startsWith('text/') || /\.(md|txt|js|ts|json|css|html|xml|yml|yaml)$/i.test(file.name)) { + const reader = new FileReader(); + reader.onload = () => this.insert(reader.result); + reader.readAsText(file); + } + }); + return; + } + const text = e.dataTransfer?.getData('text/plain'); + if (text) + this.insert(text); + }; + ta.addEventListener('dragover', onDragOver); + ta.addEventListener('drop', onDrop); + this._cleanups.push(() => { ta.removeEventListener('dragover', onDragOver); ta.removeEventListener('drop', onDrop); }); + } + _buildOutline() { + if (!this.config.outline || !this.previewEl) + return; + const old = this.el.querySelector('.me-outline'); + if (old) + old.remove(); + const headings = []; + const headingRe = /]*>(.+?)<\/h\1>/gi; + let m; + while ((m = headingRe.exec(this.previewEl.innerHTML)) !== null) { + headings.push({ level: parseInt(m[1], 10), id: m[2], text: m[3].replace(/<[^>]+>/g, '') }); + } + if (!headings.length) + return; + const panel = document.createElement('div'); + panel.className = 'me-outline'; + panel.innerHTML = `
    ${t('outline') || '大纲'}
    `; + const buildTree = (items, minLevel) => { + let h = '
      '; + let i = 0; + while (i < items.length) { + const item = items[i]; + if (item.level < minLevel) + break; + h += `
    • ${escapeHTML(item.text)}`; + const sub = []; + let j = i + 1; + while (j < items.length && items[j].level > item.level) { + sub.push(items[j]); + j++; + } + if (sub.length) + h += buildTree(sub, item.level + 1); + h += '
    • '; + i = j > i + 1 ? j : i + 1; + } + return h + '
    '; + }; + panel.innerHTML += buildTree(headings, 1); + this.el.appendChild(panel); + panel.addEventListener('click', (e) => { + const a = e.target.closest('a'); + if (!a) + return; + e.preventDefault(); + const id = a.getAttribute('href').slice(1); + const target = this.previewEl.querySelector('#' + CSS.escape(id)); + if (target) { + target.scrollIntoView({ behavior: 'smooth', block: 'start' }); + const idx = this._value.indexOf(target.textContent || ''); + if (idx !== -1) { + this.textarea.focus(); + this.textarea.setSelectionRange(idx, idx); + } + } + }); + } + _updateOutline() { if (!this.config.outline) + return; if (this._outlineTimer) + clearTimeout(this._outlineTimer); this._outlineTimer = setTimeout(() => this._buildOutline(), 300); } + _trackOutlineScroll() { + if (!this.config.outline || !this.previewPane) + return; + let ticking = false; + const onScroll = () => { + if (ticking) + return; + ticking = true; + requestAnimationFrame(() => { + ticking = false; + if (!this.el) + return; + const panel = this.el.querySelector('.me-outline'); + if (!panel) + return; + const headings = this.previewEl.querySelectorAll('h1, h2, h3, h4, h5, h6'); + let activeId = ''; + const scrollTop = this.previewPane.scrollTop + 80; // offset for better UX + headings.forEach((h) => { + if (h.offsetTop <= scrollTop) { + activeId = h.id; + } + }); + panel.querySelectorAll('a').forEach((a) => { + a.classList.toggle('me-outline-active', a.getAttribute('href') === '#' + activeId); + }); + }); + }; + this.previewPane.addEventListener('scroll', onScroll, { passive: true }); + this._cleanups.push(() => this.previewPane.removeEventListener('scroll', onScroll)); + } + _scheduleHistory() { if (this._historyTimer) + clearTimeout(this._historyTimer); this._historyTimer = setTimeout(() => this._pushHistory(), this.config.historyDebounce || 400); } + _pushHistory() { + const cur = this._history[this._historyIndex]; + if (cur === this._value) + return; + this._history = this._history.slice(0, this._historyIndex + 1); + this._history.push(this._value); + const limit = this.config.historyLimit > 0 ? this.config.historyLimit : 100; + while (this._history.length > limit) + this._history.shift(); + this._historyIndex = this._history.length - 1; + } + undo() { if (this._historyIndex <= 0) + return this; this._historyIndex--; this._applyHistory(); return this; } + redo() { if (this._historyIndex >= this._history.length - 1) + return this; this._historyIndex++; this._applyHistory(); return this; } + canUndo() { return this._historyIndex > 0; } + canRedo() { return this._historyIndex < this._history.length - 1; } + _applyHistory() { + this._value = this._history[this._historyIndex]; + this.textarea.value = this._value; + this._render(); + this._renderGutter(); + this._updateWordCount(); + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + if (this.previewPane && this.config.syncScroll) + this.previewPane.scrollTop = 0; + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + exec(action, ...args) { + const actions = { + bold: () => this._wrapSelection('**', '**'), italic: () => this._wrapSelection('*', '*'), + strikethrough: () => this._wrapSelection('~~', '~~'), underline: () => this._wrapSelection('', ''), + code: () => this._wrapSelection('`', '`'), h1: () => this._toggleLinePrefix('# '), + h2: () => this._toggleLinePrefix('## '), h3: () => this._toggleLinePrefix('### '), + quote: () => this._toggleLinePrefix('> '), ul: () => this._toggleLinePrefix('- '), + ol: () => this._toggleLinePrefix('1. '), indent: () => this._handleTab(false), + outdent: () => this._handleTab(true), hr: () => this._insertBlock('\n---\n'), + link: () => this._insertLink(), image: () => this._insertImage(), table: () => this._insertTable(), + undo: () => this.undo(), redo: () => this.redo(), + edit: () => this.setMode('edit'), split: () => this.setMode('split'), + preview: () => this.setMode('preview'), fullscreen: () => this.toggleFullscreen(), + zen: () => this.toggleZen(), wordwrap: () => this.toggleWordWrap(), + formatTable: () => this._formatTable(), + }; + const fn = actions[action]; + if (fn) { + fn.apply(this, args); + return this; + } + if (this._customActions && typeof this._customActions[action] === 'function') { + try { + this._customActions[action].apply(this, args); + } + catch (e) { + console.error('custom action error:', e); + } + } + return this; + } + _wrapSelection(before, after) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + const selected = ta.value.slice(start, end); + const text = selected || 'text'; + const inserted = before + text + after; + ta.value = ta.value.slice(0, start) + inserted + ta.value.slice(end); + ta.focus(); + if (selected) { + ta.selectionStart = start + before.length; + ta.selectionEnd = start + before.length + text.length; + } + else { + ta.selectionStart = ta.selectionEnd = start + before.length; + } + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _toggleLinePrefix(prefix) { + const ta = this.textarea; + const start = ta.selectionStart; + const lineStart = ta.value.lastIndexOf('\n', start - 1) + 1; + const lineEndPos = ta.value.indexOf('\n', start); + const lineEnd = lineEndPos === -1 ? ta.value.length : lineEndPos; + const line = ta.value.slice(lineStart, lineEnd); + const existingMatch = line.match(/^(#{1,6}\s*|>\s*|[-*+]\s*|\d+\.\s*)/); + let newLine; + if (existingMatch && existingMatch[0] === prefix) + newLine = line.slice(prefix.length); + else if (existingMatch) + newLine = prefix + line.slice(existingMatch[0].length); + else + newLine = prefix + line; + ta.value = ta.value.slice(0, lineStart) + newLine + ta.value.slice(lineEnd); + ta.focus(); + ta.selectionStart = ta.selectionEnd = lineStart + newLine.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertBlock(text) { + const ta = this.textarea; + const start = ta.selectionStart; + const before = ta.value.slice(0, start); + const needNL = before && !before.endsWith('\n'); + const insert = (needNL ? '\n' : '') + text; + ta.value = ta.value.slice(0, start) + insert + ta.value.slice(ta.selectionEnd); + ta.focus(); + const pos = start + insert.length; + ta.selectionStart = ta.selectionEnd = pos; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + } + _insertLink() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('link') || 'link'; const url = 'https://'; const insert = `[${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 3; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertImage() { const ta = this.textarea; const start = ta.selectionStart; const end = ta.selectionEnd; const sel = ta.value.slice(start, end) || t('image') || 'image'; const url = 'https://'; const insert = `![${sel}](${url})`; ta.value = ta.value.slice(0, start) + insert + ta.value.slice(end); ta.focus(); ta.selectionStart = start + sel.length + 4; ta.selectionEnd = ta.selectionStart + url.length; this._value = ta.value; this._pushHistory(); this._render(); this._emit('change', this._value); } + _insertTable(rows = 3, cols = 3) { const header = Array.from({ length: cols }, (_, i) => `${t('tableCols') || '列'}${i + 1}`).join(' | '); const sep = Array.from({ length: cols }, () => '---').join(' | '); let md = `| ${header} |\n| ${sep} |\n`; for (let r = 1; r < rows; r++) + md += `| ${Array.from({ length: cols }, () => ' ').join(' | ')} |\n`; this._insertBlock('\n' + md); } + _formatTable() { + const ta = this.textarea; + const start = ta.selectionStart; + // Find table boundaries around cursor + const before = ta.value.substring(0, start); + const after = ta.value.substring(start); + const blockStart = before.lastIndexOf('\n\n'); + const blockEnd = after.indexOf('\n\n'); + const tableStart = blockStart === -1 ? 0 : blockStart + 2; + const tableEnd = blockEnd === -1 ? ta.value.length : start + blockEnd; + const tableText = ta.value.substring(tableStart, tableEnd); + const lines = tableText.split('\n').filter((l) => l.includes('|')); + if (lines.length < 2) + return; // need at least header + separator + // Parse columns + const splitRow = (r) => r.replace(/^\s*\|?\s*|\s*\|?\s*$/g, '').split(/\s*\|\s*/); + const allCells = lines.map(splitRow); + const colCount = Math.max(...allCells.map((c) => c.length)); + // Calculate max width per column + const colWidths = Array(colCount).fill(3); + allCells.forEach((cells) => { + cells.forEach((cell, ci) => { + colWidths[ci] = Math.max(colWidths[ci], cell.trim().length); + }); + }); + // Rebuild table + const pad = (s, w) => { const padLen = w - s.length; return s + ' '.repeat(Math.max(0, padLen)); }; + const formatted = allCells.map((cells) => { + const padded = []; + for (let ci = 0; ci < colCount; ci++) { + padded.push(pad((cells[ci] || '').trim(), colWidths[ci])); + } + return '| ' + padded.join(' | ') + ' |'; + }); + // Replace in value + ta.value = ta.value.substring(0, tableStart) + formatted.join('\n') + ta.value.substring(tableEnd); + this._value = ta.value; + this._pushHistory(); + this._render(); + this._emit('change', this._value); + } + setMode(mode) { if (!MODES.includes(mode) || mode === this._mode) + return this; const taS = this.textarea.scrollTop; const pvS = this.previewPane.scrollTop; this._mode = mode; this.bodyEl.className = `me-body me-mode-${mode}`; this._updateModeButtons(); if (mode !== 'edit') + this._render(); this.textarea.scrollTop = taS; this.previewPane.scrollTop = pvS; this._emit('modeChange', mode); this._announce(`${t(mode) || mode} mode`); if (typeof this.config.onModeChange === 'function') { + try { + this.config.onModeChange(mode, this); + } + catch (e) { + console.error(e); + } + } return this; } + getMode() { return this._mode; } + _updateModeButtons() { + const isPreview = this._mode === 'preview'; + const isReadonly = this.config.readOnly; + this.toolbarEl.querySelectorAll('.me-btn').forEach((b) => { + const btn = b; + const mode = btn.dataset.mode; + const action = btn.dataset.action; + if (mode) { + btn.classList.toggle('me-active', mode === this._mode); + btn.disabled = false; + return; + } + if (action === 'fullscreen') { + btn.disabled = false; + return; + } + if (isReadonly) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + if (isPreview) { + btn.disabled = !(action === 'undo' || action === 'redo'); + return; + } + btn.disabled = false; + }); + } + toggleFullscreen() { this._fullscreen = !this._fullscreen; this.el.classList.toggle('me-fullscreen', this._fullscreen); const fsBtn = this.toolbarEl.querySelector('.me-btn-fullscreen'); if (fsBtn) + fsBtn.title = this._fullscreen ? (t('fullscreenExit') || '退出全屏') : (t('fullscreen') || '全屏'); this._emit('fullscreen', this._fullscreen); if (typeof this.config.onFullscreen === 'function') { + try { + this.config.onFullscreen(this._fullscreen, this); + } + catch (e) { + console.error(e); + } + } return this; } + isFullscreen() { return this._fullscreen; } + exitFullscreen() { if (this._fullscreen) + this.toggleFullscreen(); return this; } + toggleZen() { + this._zenMode = !this._zenMode; + if (this.el) + this.el.classList.toggle('me-zen', this._zenMode); + if (this._zenMode && this.toolbarEl) { + this._zenMouseHandler = (e) => { this.toolbarEl.style.opacity = e.clientY < 40 ? '1' : '0'; this.toolbarEl.style.pointerEvents = e.clientY < 40 ? 'auto' : 'none'; }; + this.toolbarEl.style.transition = 'opacity 0.2s'; + this.toolbarEl.style.opacity = '0'; + this.toolbarEl.style.pointerEvents = 'none'; + document.addEventListener('mousemove', this._zenMouseHandler); + if (this.statusEl) + this.statusEl.style.display = 'none'; + } + else { + if (this._zenMouseHandler) { + document.removeEventListener('mousemove', this._zenMouseHandler); + this._zenMouseHandler = null; + } + if (this.toolbarEl) { + this.toolbarEl.style.opacity = ''; + this.toolbarEl.style.pointerEvents = ''; + this.toolbarEl.style.transition = ''; + } + if (this.statusEl) + this.statusEl.style.display = ''; + } + this._emit('zenChange', this._zenMode); + return this; + } + isZen() { return this._zenMode; } + toggleWordWrap() { this._wordWrap = !this._wordWrap; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + setWordWrap(on) { this._wordWrap = !!on; if (this.textarea) + this.textarea.style.whiteSpace = this._wordWrap ? 'pre-wrap' : 'pre'; return this; } + isWordWrap() { return this._wordWrap; } + _initFloatingToolbar() { + if (typeof document === 'undefined') + return; + // Inject floating toolbar CSS once globally + if (!document.getElementById('me-float-style')) { + const style = document.createElement('style'); + style.id = 'me-float-style'; + style.textContent = `.me-float-toolbar{position:absolute;z-index:25;display:flex;gap:4px;padding:4px 6px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;pointer-events:none}.me-float-toolbar.me-visible{opacity:1;transform:translateY(0);pointer-events:auto}.me-float-toolbar .me-btn{width:28px;height:28px}`; + document.head.appendChild(style); + } + if (!this._floatingEnabled) + return; + const ta = this.textarea; + const show = () => { + if (this._destroyed || this.config.readOnly || !this._floatingEnabled) + return; + const start = ta.selectionStart; + const end = ta.selectionEnd; + if (start === end) { + this._hideFloatingToolbar(); + return; + } + if (!this._floatingToolbar || !this._floatingToolbar.parentNode) + this._buildFloatingToolbar(); + // Position the toolbar near the selection + const rect = ta.getBoundingClientRect(); + const textBefore = ta.value.substring(0, start); + const lines = textBefore.split('\n'); + const currentLine = lines.length - 1; + const lineHeight = parseInt(getComputedStyle(ta).lineHeight, 10) || 22; + const paddingTop = parseInt(getComputedStyle(ta).paddingTop, 10) || 16; + const scrollOffset = ta.scrollTop; + // Place toolbar just above the selected line (4px gap) + const toolbarHeight = 36; + let top = rect.top + paddingTop + currentLine * lineHeight - scrollOffset - toolbarHeight - 4; + // Clamp: don't go above textarea + if (top < rect.top) + top = rect.top + 4; + if (top + toolbarHeight > rect.bottom) + top = rect.bottom - toolbarHeight - 4; + // Center horizontally near the middle of selection + let left = rect.left + (ta.selectionDirection !== 'backward' ? (ta.selectionEnd - ta.selectionStart) / 2 : 0) * 8 + 10; + if (left < rect.left) + left = rect.left + 4; + const maxLeft = rect.right - 200; + if (left > maxLeft) + left = maxLeft; + this._floatingToolbar.style.top = top + 'px'; + this._floatingToolbar.style.left = left + 'px'; + this._floatingToolbar.classList.add('me-visible'); + }; + const hide = () => { this._hideFloatingToolbar(); }; + let lastSelStart = ta.selectionStart; + let lastSelEnd = ta.selectionEnd; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !document.body.contains(ta) || !this._floatingEnabled) + return; + const s = ta.selectionStart; + const e = ta.selectionEnd; + if (s !== lastSelStart || e !== lastSelEnd) { + lastSelStart = s; + lastSelEnd = e; + const text = this._value.slice(s, e); + this._emit('selectionChange', { start: s, end: e, text }); + } + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + ta.addEventListener('mouseup', () => { if (this._floatingEnabled) + setTimeout(show, 0); }); + ta.addEventListener('keyup', () => { + if (!this._floatingEnabled) + return; + if (ta.selectionStart !== ta.selectionEnd) + setTimeout(show, 0); + else + setTimeout(hide, 0); + this._emit('cursorMove', this.getCursorPosition()); + }); + ta.addEventListener('blur', () => setTimeout(hide, 300)); + ta.addEventListener('click', () => { if (ta.selectionStart === ta.selectionEnd) + setTimeout(hide, 0); }); + } + toggleFloatingToolbar() { + this._floatingEnabled = !this._floatingEnabled; + if (this._floatingEnabled) { + // Re-enable: restart the interval + if (!this._selectionTimer) { + const ta = this.textarea; + this._selectionTimer = setInterval(() => { + if (this._destroyed || !this._floatingEnabled) + return; + ta.selectionStart; + ta.selectionEnd; + }, 500); + this._cleanups.push(() => { if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } }); + } + } + else { + // Disable: clear interval and hide toolbar + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + if (this._floatingToolbar) { + if (this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + } + } + return this; + } + isFloatingToolbar() { return this._floatingEnabled; } + _buildFloatingToolbar() { + const bar = document.createElement('div'); + bar.className = 'me-float-toolbar'; + const actions = ['bold', 'italic', 'code', 'link', 'strikethrough']; + actions.forEach((action) => { + const btn = this._createBtn(action); + btn.addEventListener('mousedown', (e) => { + e.preventDefault(); + e.stopPropagation(); + this.exec(action); + // Keep selection after exec + setTimeout(() => this.textarea.focus(), 0); + }); + bar.appendChild(btn); + }); + this.editorPane.appendChild(bar); + this._floatingToolbar = bar; + } + _hideFloatingToolbar() { + if (this._floatingToolbar) { + this._floatingToolbar.classList.remove('me-visible'); + } + } + _bindToolbarKeyboard() { + if (!this.toolbarEl) + return; + const onKeydown = (e) => { + const btns = [...this.toolbarEl.querySelectorAll('.me-btn:not(:disabled)')]; + if (!btns.length) + return; + const idx = btns.indexOf(document.activeElement); + if (idx === -1) + return; + if (e.key === 'ArrowRight') { + e.preventDefault(); + btns[(idx + 1) % btns.length].focus(); + } + else if (e.key === 'ArrowLeft') { + e.preventDefault(); + btns[(idx - 1 + btns.length) % btns.length].focus(); + } + else if (e.key === 'Home') { + e.preventDefault(); + btns[0].focus(); + } + else if (e.key === 'End') { + e.preventDefault(); + btns[btns.length - 1].focus(); + } + }; + this.toolbarEl.addEventListener('keydown', onKeydown); + this._cleanups.push(() => this.toolbarEl.removeEventListener('keydown', onKeydown)); + } + _initAriaLive() { if (!this.el) + return; const live = document.createElement('div'); live.className = 'me-sr-only'; live.setAttribute('aria-live', 'polite'); live.setAttribute('aria-atomic', 'true'); this.el.appendChild(live); this._ariaLive = live; } + _announce(msg) { if (this._ariaLive) { + this._ariaLive.textContent = ''; + requestAnimationFrame(() => { this._ariaLive.textContent = msg; }); + } } + _syncScroll() { + if (this._syncing) + return; + this._syncing = true; + const ta = this.textarea; + if (!ta) { + this._syncing = false; + return; + } + const tmax = ta.scrollHeight - ta.clientHeight; + if (tmax <= 0) { + this._syncing = false; + return; + } + const ratio = ta.scrollTop / tmax; + if (this.gutter) { + const gmax = this.gutter.scrollHeight - this.gutter.clientHeight; + this.gutter.scrollTop = gmax > 0 ? ratio * gmax : ta.scrollTop; + } + if (this.config.syncScroll && this._mode === 'split' && this.previewPane) { + const pmax = this.previewPane.scrollHeight - this.previewPane.clientHeight; + if (pmax > 0) + this.previewPane.scrollTop = ratio * pmax; + } + requestAnimationFrame(() => { this._syncing = false; }); + } + _updateWordCount() { + if (!this.config.wordCount || !this.statusEl) + return; + const text = this._value || ''; + const chars = text.length; + const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; + const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; + const words = cnChars + enWords; + const lines = text ? text.split('\n').length : 0; + const readingMin = Math.max(1, Math.ceil(words / 300)); + this.statusEl.textContent = [`${t('characters')}: ${chars}`, `${t('words')}: ${words}`, `${t('lines')}: ${lines}`, `${t('readingTime')}: ${readingMin} ${t('minutes')}`].join(' · '); + } + getStats() { const text = this._value || ''; const cnChars = (text.match(/[\u4e00-\u9fa5]/g) || []).length; const enWords = (text.replace(/[\u4e00-\u9fa5]/g, ' ').match(/[a-zA-Z0-9]+/g) || []).length; return { characters: text.length, words: cnChars + enWords, chineseChars: cnChars, englishWords: enWords, lines: text ? text.split('\n').length : 0, readingTime: Math.max(1, Math.ceil((cnChars + enWords) / 300)), }; } + getSelectedText() { + if (!this.textarea) + return ''; + return this._value.slice(this.textarea.selectionStart, this.textarea.selectionEnd); + } + getCursorPosition() { + if (!this.textarea) + return { line: 1, column: 0 }; + const pos = this.textarea.selectionStart; + const before = this._value.substring(0, pos); + const line = before.split('\n').length; + const column = pos - before.lastIndexOf('\n') - 1; + return { line, column: column < 0 ? 0 : column }; + } + setCursorPosition(line, column = 0) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let pos = 0; + for (let i = 0; i < clampedLine - 1; i++) + pos += lines[i].length + 1; + pos += Math.min(column, lines[clampedLine - 1]?.length || 0); + this.textarea.focus(); + this.textarea.setSelectionRange(pos, pos); + return this; + } + scrollToLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + const lineHeight = 22; // approximate + this.textarea.scrollTop = (clampedLine - 1) * lineHeight; + if (this.gutter) + this.gutter.scrollTop = this.textarea.scrollTop; + return this; + } + selectLine(line) { + if (!this.textarea) + return this; + const lines = this._value.split('\n'); + const clampedLine = Math.max(1, Math.min(line, lines.length)); + let startPos = 0; + for (let i = 0; i < clampedLine - 1; i++) + startPos += lines[i].length + 1; + const endPos = startPos + lines[clampedLine - 1].length; + this.textarea.focus(); + this.textarea.setSelectionRange(startPos, endPos); + return this; + } + selectAll() { if (this.textarea) { + this.textarea.focus(); + this.textarea.select(); + } return this; } + replaceAll(search, replace, caseSensitive = true) { + if (!search) + return 0; + const flags = caseSensitive ? 'g' : 'gi'; + const escaped = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const re = new RegExp(escaped, flags); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + replaceAllRegex(pattern, replace) { + if (!pattern) + return 0; + const re = new RegExp(pattern, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g'); + const matches = this._value.match(re); + if (!matches) + return 0; + this._value = this._value.replace(re, replace); + this.textarea.value = this._value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return matches.length; + } + lineCount() { + return this._value ? this._value.split('\n').length : 0; + } + getLine(line) { + const lines = this._value.split('\n'); + const idx = line - 1; + if (idx < 0 || idx >= lines.length) + return ''; + return lines[idx]; + } + getValue() { return this._destroyed ? '' : this._value; } + setValue(md, opts = {}) { + if (this._destroyed) + return this; + MarkdownEditor.trigger('beforeChange', this); + this._emit('beforeChange', this._value, md); + this._value = md || ''; + this.textarea.value = this._value; + if (!opts.silent) + this._pushHistory(); + this._render(); + this._renderGutter(); + this._updateWordCount(); + this._updateOutline(); + if (this.gutter) + this.gutter.scrollTop = 0; + this.textarea.scrollTop = 0; + if (!opts.silent) { + this._emit('change', this._value); + if (typeof this.config.onChange === 'function') { + try { + this.config.onChange(this._value, this); + } + catch (e) { + console.error(e); + } + } + } + this._emit('afterChange', this._value); + MarkdownEditor.trigger('afterChange', this); + return this; + } + getHTML() { MarkdownEditor.trigger('beforeRender', this); this._emit('beforeRender', this); let html = this._renderFn(this._value, { highlight: this._highlightFn || undefined, locale: getCurrentLocale() }); if (typeof this.config.sanitize === 'function') { + try { + html = this.config.sanitize(html); + } + catch (e) { + console.error(e); + } + } MarkdownEditor.trigger('afterRender', this); this._emit('afterRender', this); return html; } + refresh() { this._lastRenderedValue = null; this._render(); return this; } + copyAsMarkdown() { + if (typeof navigator !== 'undefined' && navigator.clipboard) { + navigator.clipboard.writeText(this._value).then(() => this._emit('copy', { type: 'markdown' })).catch(() => { }); + } + return this; + } + copyAsHTML() { + const html = this.getHTML(); + if (typeof navigator !== 'undefined' && navigator.clipboard) { + const blob = new Blob([html], { type: 'text/html' }); + const item = new ClipboardItem({ 'text/html': blob, 'text/plain': new Blob([this._value], { type: 'text/plain' }) }); + navigator.clipboard.write([item]).then(() => this._emit('copy', { type: 'html' })).catch(() => { }); + } + return this; + } + insert(text, opts = {}) { + const ta = this.textarea; + const start = ta.selectionStart; + const end = ta.selectionEnd; + ta.value = ta.value.slice(0, start) + text + ta.value.slice(opts.replace ? end : start); + ta.focus(); + ta.selectionStart = ta.selectionEnd = start + text.length; + this._value = ta.value; + this._pushHistory(); + this._render(); + this._updateWordCount(); + this._emit('change', this._value); + return this; + } + wrap(before, after) { this._wrapSelection(before, after || before); return this; } + focus() { if (this.textarea) + this.textarea.focus(); return this; } + blur() { if (this.textarea) + this.textarea.blur(); return this; } + enable() { if (this.textarea) + this.textarea.disabled = false; if (this.el) + this.el.classList.remove('me-disabled'); return this; } + disable() { if (this.textarea) + this.textarea.disabled = true; if (this.el) + this.el.classList.add('me-disabled'); return this; } + isDisabled() { return this.textarea ? this.textarea.disabled : false; } + setReadOnly(readOnly) { this.config.readOnly = !!readOnly; if (this.textarea) + this.textarea.readOnly = !!readOnly; if (this.el) + this.el.classList.toggle('me-readonly', !!readOnly); this._updateModeButtons(); return this; } + isReadOnly() { return !!this.config.readOnly; } + on(name, fn) { if (!this._listeners[name]) + this._listeners[name] = []; this._listeners[name].push(fn); return () => this.off(name, fn); } + off(name, fn) { const list = this._listeners[name]; if (list) + this._listeners[name] = list.filter((f) => f !== fn); return this; } + _emit(name, ...args) { const list = this._listeners[name]; if (list) + list.forEach((fn) => { try { + fn(...args, this); + } + catch (e) { + console.error(`MeEditor event "${name}" error:`, e); + } }); } + use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return this; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return this; + } + const merged = { ...p, ...options }; + if (typeof merged.install === 'function') { + try { + const result = merged.install(this, options); + if (result && typeof result.then === 'function') { + result.catch((e) => console.error(`MeEditor: async plugin "${merged.name}" error:`, e)); + } + } + catch (e) { + console.error(`MeEditor: plugin "${merged.name}" install error:`, e); + } + } + this._plugins.push(merged); + return this; + } + unuse(name) { const idx = this._plugins.findIndex((p) => p.name === name); if (idx === -1) { + console.warn(`MeEditor: plugin "${name}" not found`); + return this; + } const plugin = this._plugins[idx]; if (typeof plugin.destroy === 'function') { + try { + plugin.destroy(this); + } + catch (e) { + console.error(`MeEditor: plugin "${name}" destroy error:`, e); + } + } this._plugins.splice(idx, 1); return this; } + getPlugins() { return [...this._plugins]; } + addToolbarButton(config) { + if (!config || !config.action) + return this; + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = `me-btn me-btn-custom-${config.action}`; + btn.title = config.title || config.action; + btn.setAttribute('aria-label', config.title || config.action); + btn.innerHTML = config.icon || `${escapeHTML(config.text || config.action)}`; + if (typeof config.onClick === 'function') { + btn.addEventListener('click', (e) => { e.stopPropagation(); config.onClick(this); }); + } + else if (config.action) { + btn.dataset.action = config.action; + this._customActions = this._customActions || {}; + this._customActions[config.action] = config.handler; + } + this.toolbarEl.insertBefore(btn, this.toolbarEl.querySelector('.me-toolbar-group') || null); + return this; + } + registerShortcut(combo, handler, description = '') { + if (!combo) + return this; + const parts = combo.toLowerCase().split('+'); + const key = parts.pop(); + const ctrl = parts.includes('ctrl') || parts.includes('cmd'); + const shift = parts.includes('shift'); + const alt = parts.includes('alt'); + const meta = parts.includes('meta'); + this._shortcuts.push({ combo, key, ctrl, shift, alt, meta, handler, description }); + return this; + } + unregisterShortcut(combo) { this._shortcuts = this._shortcuts.filter((s) => s.combo !== combo); return this; } + getShortcuts() { return [...this._shortcuts]; } + configureToolbar(tools) { if (!this.toolbarEl) + return this; this.config.toolbar = tools; this.toolbarEl.innerHTML = ''; this._buildToolbar(); return this; } + removeToolbarButton(action) { if (!this.toolbarEl) + return this; const btn = this.toolbarEl.querySelector(`.me-btn[data-action="${action}"], .me-btn[data-mode="${action}"]`); if (btn) + btn.remove(); return this; } + registerContextMenu(items = []) { this._contextMenuItems = items; return this; } + _bindContextMenu() { + if (!this.el) + return; + const onContextMenu = (e) => { + const existing = document.querySelector('.me-context-menu'); + if (existing) + existing.remove(); + this._showContextMenu(e); + }; + this.el.addEventListener('contextmenu', onContextMenu); + this._cleanups.push(() => this.el.removeEventListener('contextmenu', onContextMenu)); + } + _showContextMenu(e) { + e.preventDefault(); + const ta = this.textarea; + const hasSelection = ta && ta.selectionStart !== ta.selectionEnd; + const defaultItems = [ + { label: t('undo') || 'Undo', action: 'undo', shortcut: 'Ctrl+Z', disabled: !this.canUndo() }, + { label: t('redo') || 'Redo', action: 'redo', shortcut: 'Ctrl+Y', disabled: !this.canRedo() }, + { sep: true }, + { label: t('cut') || 'Cut', action: 'cut', shortcut: 'Ctrl+X', disabled: !hasSelection }, + { label: t('copy') || 'Copy', action: 'copy', shortcut: 'Ctrl+C', disabled: !hasSelection }, + { label: t('paste') || 'Paste', action: 'paste', shortcut: 'Ctrl+V', disabled: !!this.config.readOnly }, + { label: t('selectAll') || 'Select All', action: 'selectAll', shortcut: 'Ctrl+A' }, + ]; + const items = [...defaultItems]; + if (this._contextMenuItems.length) { + items.push({ sep: true }); + this._contextMenuItems.forEach((item) => items.push(item)); + } + const menu = document.createElement('div'); + menu.className = 'me-context-menu'; + menu.style.left = e.clientX + 'px'; + menu.style.top = e.clientY + 'px'; + // Adjust if off-screen + requestAnimationFrame(() => { + const rect = menu.getBoundingClientRect(); + if (rect.right > window.innerWidth) + menu.style.left = (e.clientX - rect.width) + 'px'; + if (rect.bottom > window.innerHeight) + menu.style.top = (e.clientY - rect.height) + 'px'; + }); + items.forEach((item) => { + if (item.sep) { + const sep = document.createElement('div'); + sep.className = 'me-context-menu-sep'; + menu.appendChild(sep); + return; + } + const el = document.createElement('div'); + el.className = 'me-context-menu-item'; + if (item.disabled) + el.classList.add('me-disabled'); + el.innerHTML = `${item.label}${item.shortcut ? `${item.shortcut}` : ''}`; + el.addEventListener('click', (ev) => { + ev.stopPropagation(); + if (item.disabled) + return; + if (item.onClick) { + item.onClick(); + } + else if (item.action) + this._execContextAction(item.action); + this._hideContextMenu(); + }); + menu.appendChild(el); + }); + document.body.appendChild(menu); + const close = (ev) => { + if (!menu.contains(ev.target)) { + this._hideContextMenu(); + } + }; + document.addEventListener('click', close, { once: true }); + document.addEventListener('keydown', (ev) => { if (ev.key === 'Escape') + this._hideContextMenu(); }, { once: true }); + } + _hideContextMenu() { + const menu = document.querySelector('.me-context-menu'); + if (menu) + menu.remove(); + } + _execContextAction(action) { + const ta = this.textarea; + if (!ta) + return; + switch (action) { + case 'undo': + this.undo(); + break; + case 'redo': + this.redo(); + break; + case 'cut': + document.execCommand('cut'); + break; + case 'copy': + document.execCommand('copy'); + break; + case 'paste': + document.execCommand('paste'); + break; + case 'selectAll': + ta.focus(); + ta.select(); + break; + default: + this.exec(action); + break; + } + } + toast(message, opts = {}) { + if (!this.el || typeof document === 'undefined') + return this; + const { type = 'info', duration = 3000, animation = 'fade' } = opts; + const toast = document.createElement('div'); + toast.className = `me-toast me-toast-${type} me-toast-${animation}`; + toast.innerHTML = `${TOAST_ICONS[type] || ''}${escapeHTML(String(message))}`; + this.el.appendChild(toast); + requestAnimationFrame(() => { toast.classList.add('me-toast-enter'); }); + const remove = () => { toast.classList.remove('me-toast-enter'); toast.classList.add('me-toast-leave'); setTimeout(() => { if (toast.parentNode) + toast.parentNode.removeChild(toast); }, 300); }; + if (duration > 0) + setTimeout(remove, duration); + toast.addEventListener('click', remove); + return this; + } + setLocale(locale) { if (this._i18nCtx) + this._i18nCtx.set(locale); return this; } + getLocale() { if (this._i18nCtx) + return this._i18nCtx.get(); return getCurrentLocale(); } + t(key, params) { if (this._i18nCtx) + return this._i18nCtx.t(key, params); return t(key, params); } + setTheme(theme) { if (!theme) + return this; this.config.theme = theme; if (this._themeCtx) + this._themeCtx.set(theme); return this; } + getTheme() { if (this._themeCtx) + return this._themeCtx.get(); return this.config.theme || 'auto'; } + getThemeContext() { return this._themeCtx || null; } + getStatus() { return { id: this.id, mode: this._mode, theme: this.getTheme(), locale: getCurrentLocale(), fullscreen: this._fullscreen, readOnly: this.config.readOnly || false, disabled: this.textarea ? this.textarea.disabled : false, destroyed: this._destroyed, plugins: this._plugins.map((p) => p.name || 'custom'), }; } + destroy() { + if (this._destroyed) + return; + MarkdownEditor.trigger('beforeDestroy', this); + if (this._renderRaf) + cancelAnimationFrame(this._renderRaf); + if (this._historyTimer) + clearTimeout(this._historyTimer); + if (this._outlineTimer) + clearTimeout(this._outlineTimer); + if (this._selectionTimer) { + clearInterval(this._selectionTimer); + this._selectionTimer = null; + } + this._cleanups.forEach((fn) => { try { + fn(); + } + catch (_) { } }); + this._cleanups = []; + this._shortcuts = []; + this._contextMenuItems = []; + this._customActions = {}; + if (this._floatingToolbar && this._floatingToolbar.parentNode) + this._floatingToolbar.parentNode.removeChild(this._floatingToolbar); + this._floatingToolbar = null; + if (this.el) + this.el.querySelectorAll('.me-toast').forEach((t) => t.remove()); + this._plugins.forEach((p) => { if (typeof p.destroy === 'function') { + try { + p.destroy(this); + } + catch (_) { } + } }); + this._plugins = []; + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); + this.el = null; + this.textarea = null; + this.previewEl = null; + this._destroyed = true; + if (typeof this.config.onDestroy === 'function') { + try { + this.config.onDestroy(this); + } + catch (e) { + console.error(e); + } + } + this._emit('destroy'); + this._listeners = {}; + MarkdownEditor.trigger('afterDestroy', this); + } + isDestroyed() { return this._destroyed; } + } + MarkdownEditor._hooks = new Map(); + + /** + * MetonaEditor Animations — animation metadata + * @module animations + * @version 0.2.0 + */ + const animationMap = new Map(); + // Register built-in animations + for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); + } + const animationUtils = { + register(name, config) { + animationMap.set(name, { + name, + enter: config.enter || {}, + leave: config.leave || {}, + duration: config.duration || 300, + easing: config.easing || 'cubic-bezier(0.4, 0, 0.2, 1)', + }); + }, + unregister(name) { + animationMap.delete(name); + }, + get(name) { + return animationMap.get(name) || ANIMATIONS[name] || null; + }, + getAnimationNames() { + return Array.from(animationMap.keys()); + }, + getActiveCount() { + return 0; + }, + cancelAll() { + // CSS animations managed by browser natively + }, + reset() { + animationMap.clear(); + for (const [name, config] of Object.entries(ANIMATIONS)) { + animationMap.set(name, config); + } + }, + destroy() { + animationMap.clear(); + }, + }; + + /** + * MetonaEditor — Type-safe, lightweight Markdown Editor + * @module metona-editor + * @version 0.2.3 + */ + const VERSION = '0.2.3'; + const globalPlugins = []; + MarkdownEditor.on('beforeCreate', (editor) => { + if (!editor || editor.isDestroyed()) + return; + globalPlugins.forEach((p) => { try { + editor.use(p); + } + catch (e) { + console.error('MeEditor global plugin install error:', e); + } }); + }); + function create(container, options = {}) { + return new MarkdownEditor(container, options); + } + function use(plugin, options = {}) { + let p = plugin; + if (typeof plugin === 'string') { + p = presetPlugins[plugin]; + if (!p) { + console.warn(`MeEditor: preset plugin "${plugin}" not found`); + return api; + } + } + if (!p || typeof p !== 'object') { + console.warn('MeEditor: invalid plugin'); + return api; + } + const merged = (options && typeof options === 'object' && Object.keys(options).length > 0) ? { ...p, ...options } : p; + globalPlugins.push(merged); + return api; + } + function on(name, fn) { return MarkdownEditor.on(name, fn); } + function off(name, fn) { MarkdownEditor.off(name, fn); return api; } + function setTheme(theme, _options) { if (themeUtils && typeof themeUtils.switchTheme === 'function') + themeUtils.switchTheme(theme); return api; } + function setLocale(locale) { if (i18nUtils && typeof i18nUtils.setCurrentLocale === 'function') + i18nUtils.setCurrentLocale(locale); return api; } + function destroy() { + if (themeUtils) { + try { + themeUtils.clearThemeListeners(); + } + catch (_) { } + try { + themeUtils.unwatchSystemTheme(); + } + catch (_) { } + } + if (i18nUtils) { + try { + i18nUtils.clearLocaleListeners(); + } + catch (_) { } + } + if (animationUtils) { + try { + animationUtils.cancelAll(); + } + catch (_) { } + } + globalPlugins.length = 0; + } + function getStatus() { + return { version: VERSION, theme: (themeUtils && typeof themeUtils.getCurrentTheme === 'function') ? themeUtils.getCurrentTheme() : 'auto', locale: (i18nUtils && typeof i18nUtils.getCurrentLocale === 'function') ? i18nUtils.getCurrentLocale() : 'zh-CN', globalPlugins: globalPlugins.map((p) => p.name || 'custom'), presetPlugins: Object.keys(presetPlugins || {}), }; + } + try { + if (typeof themeUtils === 'object' && typeof themeUtils.initTheme === 'function') + themeUtils.initTheme(); + if (typeof i18nUtils === 'object' && typeof i18nUtils.initI18n === 'function') + i18nUtils.initI18n(); + } + catch (_) { } + const api = { + VERSION, version: VERSION, + MarkdownEditor, Editor: MarkdownEditor, + create, use, on, off, setTheme, setLocale, destroy, getStatus, + parseMarkdown, parseTokens, renderTokens, safeUrl, slugify, clearRenderCache, registerBlockHandler, + themes: themeUtils, i18n: i18nUtils, animations: animationUtils, plugins: pluginUtils, presetPlugins, + topologicalSort, validateConfig, createInstanceI18n, loadRemote, + exportCSSVars, getCSSVariable, followExternalTheme, adoptFromParent, createInstanceTheme, + DEFAULTS, ICONS, THEMES, EDIT_MODES, DEFAULT_TOOLBAR, TOOLBAR_ACTIONS, + }; + if (typeof window !== 'undefined') { + window.MeEditor = api; + } + + exports.DEFAULTS = DEFAULTS; + exports.DEFAULT_TOOLBAR = DEFAULT_TOOLBAR; + exports.EDIT_MODES = EDIT_MODES; + exports.Editor = MarkdownEditor; + exports.ICONS = ICONS; + exports.MarkdownEditor = MarkdownEditor; + exports.MeEditor = api; + exports.THEMES = THEMES; + exports.TOOLBAR_ACTIONS = TOOLBAR_ACTIONS; + exports.VERSION = VERSION; + exports.adoptFromParent = adoptFromParent; + exports.animationUtils = animationUtils; + exports.api = api; + exports.clearRenderCache = clearRenderCache; + exports.create = create; + exports.createInstanceI18n = createInstanceI18n; + exports.createInstanceTheme = createInstanceTheme; + exports.default = api; + exports.destroy = destroy; + exports.exportCSSVars = exportCSSVars; + exports.followExternalTheme = followExternalTheme; + exports.getCSSVariable = getCSSVariable; + exports.getStatus = getStatus; + exports.i18nUtils = i18nUtils; + exports.loadRemote = loadRemote; + exports.meEditor = api; + exports.off = off; + exports.on = on; + exports.parseMarkdown = parseMarkdown; + exports.parseTokens = parseTokens; + exports.pluginUtils = pluginUtils; + exports.presetPlugins = presetPlugins; + exports.registerBlockHandler = registerBlockHandler; + exports.renderTokens = renderTokens; + exports.safeUrl = safeUrl; + exports.setLocale = setLocale; + exports.setTheme = setTheme; + exports.slugify = slugify; + exports.themeUtils = themeUtils; + exports.topologicalSort = topologicalSort; + exports.use = use; + exports.validateConfig = validateConfig; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +//# sourceMappingURL=metona-editor.js.map diff --git a/dist/metona-editor.js.map b/dist/metona-editor.js.map new file mode 100644 index 0000000..ab4b373 --- /dev/null +++ b/dist/metona-editor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"metona-editor.js","sources":["../src/utils.ts","../src/icons.ts","../src/locales.ts","../src/constants.ts","../src/styles.ts","../src/i18n.ts","../src/parser.ts","../src/plugins.ts","../src/themes.ts","../src/core.ts","../src/animations.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null],"names":["i18nT"],"mappings":"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"} \ No newline at end of file diff --git a/dist/metona-editor.min.js b/dist/metona-editor.min.js new file mode 100644 index 0000000..5a55e98 --- /dev/null +++ b/dist/metona-editor.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MeEditor={})}(this,function(e){"use strict";const t=e=>{const t=String(null==e?"":e);if("undefined"==typeof document)return t.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'");const n=document.createElement("div");return n.textContent=t,n.innerHTML},n={bold:'',italic:'',underline:'',strikethrough:'',h1:'',h2:'',h3:'',quote:'',code:'',link:'',image:'',table:'',ul:'',ol:'',indent:'',outdent:'',hr:'',undo:'',redo:'',preview:'',split:'',edit:'',fullscreen:'',theme:''},r={"zh-CN":{bold:"粗体",italic:"斜体",underline:"下划线",strikethrough:"删除线",h1:"标题1",h2:"标题2",h3:"标题3",quote:"引用",code:"代码",link:"链接",image:"图片",table:"表格",ul:"无序列表",ol:"有序列表",indent:"增加缩进",outdent:"减少缩进",hr:"分隔线",undo:"撤销",redo:"重做",edit:"编辑",split:"分屏",preview:"预览",fullscreen:"全屏",fullscreenExit:"退出全屏",theme:"主题",light:"亮色",dark:"暗色",auto:"自动",warm:"暖色",wordCount:"字数统计",characters:"字符",words:"词数",lines:"行数",readingTime:"阅读",minutes:"分钟",placeholder:"开始输入 Markdown...",empty:"暂无内容",copied:"已复制",copyContent:"复制内容",copyHTML:"复制 HTML",copySuccess:"复制成功",copyFailed:"复制失败",clearContent:"清空内容",clearConfirm:"确定要清空所有内容吗?",linkPlaceholder:"请输入链接地址",imagePlaceholder:"请输入图片地址",altPlaceholder:"请输入替代文本",tableRows:"行数",tableCols:"列数",confirm:"确认",cancel:"取消",exportMarkdown:"导出 Markdown",exportHTML:"导出 HTML",search:"搜索",replace:"替换",replaceAll:"全部替换",searchPlaceholder:"查找内容",replacePlaceholder:"替换为",findNext:"查找下一个",findPrev:"查找上一个",matchCase:"区分大小写",wholeWord:"全字匹配",close:"关闭",open:"打开",save:"保存",saved:"已保存",saving:"保存中...",delete:"删除",confirmDelete:"确定要删除吗?",unsavedChanges:"有未保存的更改",error:"错误",success:"成功",warning:"警告",info:"信息",loading:"加载中...",retry:"重试",renderError:"渲染失败",outline:"大纲",cut:"剪切",copy:"复制",paste:"粘贴",selectAll:"全选"},"en-US":{bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",h1:"Heading 1",h2:"Heading 2",h3:"Heading 3",quote:"Quote",code:"Code",link:"Link",image:"Image",table:"Table",ul:"Bullet List",ol:"Numbered List",indent:"Indent",outdent:"Outdent",hr:"Horizontal Rule",undo:"Undo",redo:"Redo",edit:"Edit",split:"Split",preview:"Preview",fullscreen:"Fullscreen",fullscreenExit:"Exit Fullscreen",theme:"Theme",light:"Light",dark:"Dark",auto:"Auto",warm:"Warm",wordCount:"Word Count",characters:"Characters",words:"Words",lines:"Lines",readingTime:"Reading",minutes:"min",placeholder:"Start typing Markdown...",empty:"No content",copied:"Copied",copyContent:"Copy Content",copyHTML:"Copy HTML",copySuccess:"Copied successfully",copyFailed:"Copy failed",clearContent:"Clear Content",clearConfirm:"Clear all content?",linkPlaceholder:"Enter link URL",imagePlaceholder:"Enter image URL",altPlaceholder:"Enter alt text",tableRows:"Rows",tableCols:"Columns",confirm:"Confirm",cancel:"Cancel",exportMarkdown:"Export Markdown",exportHTML:"Export HTML",search:"Search",replace:"Replace",replaceAll:"Replace All",searchPlaceholder:"Find",replacePlaceholder:"Replace with",findNext:"Find Next",findPrev:"Find Previous",matchCase:"Match Case",wholeWord:"Whole Word",close:"Close",open:"Open",save:"Save",saved:"Saved",saving:"Saving...",delete:"Delete",confirmDelete:"Are you sure you want to delete?",unsavedChanges:"You have unsaved changes",error:"Error",success:"Success",warning:"Warning",info:"Info",loading:"Loading...",retry:"Retry",renderError:"Render failed",outline:"Outline",cut:"Cut",copy:"Copy",paste:"Paste",selectAll:"Select All"},ja:{bold:"太字",italic:"斜体",underline:"下線",strikethrough:"打ち消し線",h1:"見出し1",h2:"見出し2",h3:"見出し3",quote:"引用",code:"コード",link:"リンク",image:"画像",table:"表",ul:"箇条書き",ol:"番号付きリスト",indent:"インデント",outdent:"インデント解除",hr:"水平線",undo:"元に戻す",redo:"やり直し",edit:"編集",split:"分割",preview:"プレビュー",fullscreen:"全画面",fullscreenExit:"全画面解除",theme:"テーマ",light:"ライト",dark:"ダーク",auto:"自動",warm:"ウォーム",wordCount:"文字数",characters:"文字",words:"単語",lines:"行",readingTime:"読了時間",minutes:"分",placeholder:"Markdownを入力...",empty:"内容なし",copied:"コピー済み",copyContent:"内容をコピー",copyHTML:"HTMLをコピー",copySuccess:"コピー成功",copyFailed:"コピー失敗",clearContent:"内容をクリア",clearConfirm:"すべての内容をクリアしますか?",linkPlaceholder:"リンクURLを入力",imagePlaceholder:"画像URLを入力",altPlaceholder:"代替テキストを入力",tableRows:"行",tableCols:"列",confirm:"確認",cancel:"キャンセル",exportMarkdown:"Markdownエクスポート",exportHTML:"HTMLエクスポート",search:"検索",replace:"置換",replaceAll:"すべて置換",searchPlaceholder:"検索",replacePlaceholder:"置換後",findNext:"次を検索",findPrev:"前を検索",matchCase:"大文字小文字",wholeWord:"単語単位",close:"閉じる",open:"開く",save:"保存",saved:"保存済み",saving:"保存中...",delete:"削除",confirmDelete:"削除してもよろしいですか?",unsavedChanges:"未保存の変更があります",error:"エラー",success:"成功",warning:"警告",info:"情報",loading:"読み込み中...",retry:"再試行",renderError:"レンダリング失敗",outline:"アウトライン",cut:"切り取り",copy:"コピー",paste:"貼り付け",selectAll:"すべて選択"},ko:{bold:"굵게",italic:"기울임",underline:"밑줄",strikethrough:"취소선",h1:"제목1",h2:"제목2",h3:"제목3",quote:"인용",code:"코드",link:"링크",image:"이미지",table:"표",ul:"순서 없는 목록",ol:"순서 있는 목록",indent:"들여쓰기",outdent:"내어쓰기",hr:"수평선",undo:"실행 취소",redo:"다시 실행",edit:"편집",split:"분할",preview:"미리보기",fullscreen:"전체 화면",fullscreenExit:"전체 화면 종료",theme:"테마",light:"라이트",dark:"다크",auto:"자동",warm:"웜",wordCount:"글자 수",characters:"글자",words:"단어",lines:"줄",readingTime:"읽기 시간",minutes:"분",placeholder:"Markdown 입력...",empty:"내용 없음",copied:"복사됨",copyContent:"내용 복사",copyHTML:"HTML 복사",copySuccess:"복사 성공",copyFailed:"복사 실패",clearContent:"내용 지우기",clearConfirm:"모든 내용을 지우시겠습니까?",linkPlaceholder:"링크 URL 입력",imagePlaceholder:"이미지 URL 입력",altPlaceholder:"대체 텍스트 입력",tableRows:"행",tableCols:"열",confirm:"확인",cancel:"취소",exportMarkdown:"Markdown 내보내기",exportHTML:"HTML 내보내기",search:"검색",replace:"바꾸기",replaceAll:"모두 바꾸기",searchPlaceholder:"찾기",replacePlaceholder:"바꿀 내용",findNext:"다음 찾기",findPrev:"이전 찾기",matchCase:"대소문자 구분",wholeWord:"단어 단위",close:"닫기",open:"열기",save:"저장",saved:"저장됨",saving:"저장 중...",delete:"삭제",confirmDelete:"삭제하시겠습니까?",unsavedChanges:"저장되지 않은 변경 사항이 있습니다",error:"오류",success:"성공",warning:"경고",info:"정보",loading:"로딩 중...",retry:"재시도",renderError:"렌더링 실패",outline:"개요",cut:"잘라내기",copy:"복사",paste:"붙여넣기",selectAll:"전체 선택"},fr:{bold:"Gras",italic:"Italique",underline:"Souligné",strikethrough:"Barré",h1:"Titre 1",h2:"Titre 2",h3:"Titre 3",quote:"Citation",code:"Code",link:"Lien",image:"Image",table:"Tableau",ul:"Liste à puces",ol:"Liste numérotée",indent:"Indenter",outdent:"Désindenter",hr:"Ligne horizontale",undo:"Annuler",redo:"Rétablir",edit:"Éditer",split:"Fractionné",preview:"Aperçu",fullscreen:"Plein écran",fullscreenExit:"Quitter plein écran",theme:"Thème",light:"Clair",dark:"Sombre",auto:"Auto",warm:"Chaud",wordCount:"Nombre de mots",characters:"Caractères",words:"Mots",lines:"Lignes",readingTime:"Lecture",minutes:"min",placeholder:"Commencez à taper Markdown...",empty:"Aucun contenu",copied:"Copié",copyContent:"Copier le contenu",copyHTML:"Copier HTML",copySuccess:"Copié avec succès",copyFailed:"Échec de la copie",clearContent:"Effacer le contenu",clearConfirm:"Effacer tout le contenu ?",linkPlaceholder:"Entrez l'URL du lien",imagePlaceholder:"Entrez l'URL de l'image",altPlaceholder:"Entrez le texte alternatif",tableRows:"Lignes",tableCols:"Colonnes",confirm:"Confirmer",cancel:"Annuler",exportMarkdown:"Exporter Markdown",exportHTML:"Exporter HTML",search:"Rechercher",replace:"Remplacer",replaceAll:"Tout remplacer",searchPlaceholder:"Rechercher",replacePlaceholder:"Remplacer par",findNext:"Suivant",findPrev:"Précédent",matchCase:"Respecter la casse",wholeWord:"Mot entier",close:"Fermer",open:"Ouvrir",save:"Enregistrer",saved:"Enregistré",saving:"Enregistrement...",delete:"Supprimer",confirmDelete:"Confirmer la suppression ?",unsavedChanges:"Modifications non enregistrées",error:"Erreur",success:"Succès",warning:"Avertissement",info:"Info",loading:"Chargement...",retry:"Réessayer",renderError:"Échec du rendu",outline:"Plan",cut:"Couper",copy:"Copier",paste:"Coller",selectAll:"Tout sélectionner"},de:{bold:"Fett",italic:"Kursiv",underline:"Unterstrichen",strikethrough:"Durchgestrichen",h1:"Überschrift 1",h2:"Überschrift 2",h3:"Überschrift 3",quote:"Zitat",code:"Code",link:"Link",image:"Bild",table:"Tabelle",ul:"Aufzählung",ol:"Nummerierte Liste",indent:"Einrücken",outdent:"Ausrücken",hr:"Trennlinie",undo:"Rückgängig",redo:"Wiederholen",edit:"Bearbeiten",split:"Geteilt",preview:"Vorschau",fullscreen:"Vollbild",fullscreenExit:"Vollbild beenden",theme:"Design",light:"Hell",dark:"Dunkel",auto:"Auto",warm:"Warm",wordCount:"Wörter",characters:"Zeichen",words:"Wörter",lines:"Zeilen",readingTime:"Lesezeit",minutes:"min",placeholder:"Markdown eingeben...",empty:"Kein Inhalt",copied:"Kopiert",copyContent:"Inhalt kopieren",copyHTML:"HTML kopieren",copySuccess:"Erfolgreich kopiert",copyFailed:"Kopieren fehlgeschlagen",clearContent:"Inhalt löschen",clearConfirm:"Gesamten Inhalt löschen?",linkPlaceholder:"Link-URL eingeben",imagePlaceholder:"Bild-URL eingeben",altPlaceholder:"Alternativtext eingeben",tableRows:"Zeilen",tableCols:"Spalten",confirm:"Bestätigen",cancel:"Abbrechen",exportMarkdown:"Markdown exportieren",exportHTML:"HTML exportieren",search:"Suchen",replace:"Ersetzen",replaceAll:"Alle ersetzen",searchPlaceholder:"Suchen",replacePlaceholder:"Ersetzen mit",findNext:"Nächstes",findPrev:"Vorheriges",matchCase:"Groß-/Kleinschreibung",wholeWord:"Ganzes Wort",close:"Schließen",open:"Öffnen",save:"Speichern",saved:"Gespeichert",saving:"Speichern...",delete:"Löschen",confirmDelete:"Wirklich löschen?",unsavedChanges:"Ungespeicherte Änderungen",error:"Fehler",success:"Erfolg",warning:"Warnung",info:"Info",loading:"Laden...",retry:"Wiederholen",renderError:"Rendern fehlgeschlagen",outline:"Gliederung",cut:"Ausschneiden",copy:"Kopieren",paste:"Einfügen",selectAll:"Alles auswählen"}},i=["bold","italic","strikethrough","code","|","h1","h2","h3","|","quote","ul","ol","|","link","image","table","hr","|","undo","redo","|","edit","split","preview","fullscreen"],o=Object.freeze({value:"",placeholder:"",mode:"split",height:400,toolbar:i,wordCount:!0,autofocus:!1,spellcheck:!1,historyLimit:100,historyDebounce:400,syncScroll:!0,tabSize:2,readOnly:!1,lineNumbers:!0,outline:!1,autoBrackets:!0,zenMode:!1,wordWrap:!0,maxLength:0,theme:"auto",locale:"zh-CN",render:null,highlight:null,sanitize:null,className:"",style:{},plugins:[],onChange:null,onInput:null,onFocus:null,onBlur:null,onSave:null,onModeChange:null,onFullscreen:null,onCreate:null,onDestroy:null,onLinkClick:null,floatingToolbar:!0}),s={light:{bg:"rgba(255, 255, 255, 0.96)",text:"#1f2937",border:"rgba(0, 0, 0, 0.08)",shadow:"0 10px 36px -10px rgba(0, 0, 0, 0.18), 0 4px 14px -4px rgba(0, 0, 0, 0.08)",hoverShadow:"0 14px 48px -10px rgba(0, 0, 0, 0.22), 0 6px 18px -4px rgba(0, 0, 0, 0.10)",toolbarBg:"rgba(248, 249, 250, 0.92)",textareaBg:"#ffffff",previewBg:"#ffffff",codeBg:"rgba(243, 244, 246, 1)",codeText:"#1f2937",accent:"#3b82f6",muted:"#6b7280"},dark:{bg:"rgba(28, 32, 40, 0.94)",text:"#e6e8eb",border:"rgba(255, 255, 255, 0.1)",shadow:"0 10px 36px -10px rgba(0, 0, 0, 0.6), 0 4px 14px -4px rgba(0, 0, 0, 0.4)",hoverShadow:"0 14px 48px -8px rgba(0, 0, 0, 0.6), 0 6px 18px -4px rgba(0, 0, 0, 0.4)",toolbarBg:"rgba(22, 26, 33, 0.92)",textareaBg:"#1c2028",previewBg:"#1c2028",codeBg:"rgba(15, 18, 24, 1)",codeText:"#e6e8eb",accent:"#60a5fa",muted:"#9ca3af"},auto:"auto",warm:{bg:"rgba(255, 251, 235, 0.96)",text:"#78350f",border:"rgba(245, 158, 11, 0.2)",shadow:"0 10px 36px -10px rgba(245, 158, 11, 0.18), 0 4px 14px -4px rgba(245, 158, 11, 0.08)",hoverShadow:"0 14px 48px -10px rgba(245, 158, 11, 0.22), 0 6px 18px -4px rgba(245, 158, 11, 0.10)",toolbarBg:"rgba(254, 243, 199, 0.92)",textareaBg:"#fffbeb",previewBg:"#fffbeb",codeBg:"rgba(254, 215, 170, 0.6)",codeText:"#78350f",accent:"#d97706",muted:"#a16207",progressBg:"rgba(217, 119, 6, 0.15)",closeHoverBg:"rgba(217, 119, 6, 0.2)"}},a={slide:{enter:{transform:"translateX(80px)",opacity:"0"},leave:{transform:"translateX(120%)",opacity:"0"},duration:400,easing:"cubic-bezier(0.25, 0.46, 0.45, 0.94)"},fade:{enter:{opacity:"0",filter:"blur(3px)"},leave:{opacity:"0",filter:"blur(3px)"},duration:500,easing:"ease"},scale:{enter:{transform:"scale(0.55)",opacity:"0"},leave:{transform:"scale(0.55)",opacity:"0"},duration:450,easing:"cubic-bezier(0.34, 1.56, 0.64, 1)"},bounce:{enter:{transform:"translateY(-80px)",opacity:"0"},leave:{transform:"translateY(20px)",opacity:"0"},duration:650,easing:"ease"},flip:{enter:{transform:"perspective(500px) rotateX(-90deg)",opacity:"0"},leave:{transform:"perspective(500px) rotateX(90deg)",opacity:"0"},duration:500,easing:"cubic-bezier(0.25, 0.46, 0.45, 0.94)"},rotate:{enter:{transform:"rotate(-25deg) scale(0.6)",opacity:"0"},leave:{transform:"rotate(25deg) scale(0.6)",opacity:"0"},duration:500,easing:"cubic-bezier(0.25, 0.46, 0.45, 0.94)"},zoom:{enter:{transform:"scale(0.1)",opacity:"0"},leave:{transform:"scale(0.1)",opacity:"0"},duration:500,easing:"cubic-bezier(0.34, 1.56, 0.64, 1)"}},l=["edit","split","preview"],c=["bold","italic","strikethrough","underline","code","h1","h2","h3","quote","ul","ol","indent","outdent","hr","link","image","table","undo","redo","edit","split","preview","fullscreen"];let d=null,h="zh-CN",u=new Set,p="zh-CN";const m={zh:()=>"other",en:e=>1===e?"one":"other",ru:e=>{const t=e%10,n=e%100;return 1===t&&11!==n?"one":t>=2&&t<=4&&!(n>=12&&n<=14)?"few":0===t||t>=5&&t<=9||n>=11&&n<=14?"many":"other"}},g=(e,t)=>{const n=e.split("-")[0].toLowerCase();return(m[n]||m.en)(Math.abs(t))},f=()=>h,v=e=>{let t=e;r[t]||(t=p),h=t,T(t),S(t)},b=(e,t={},n)=>{const r=n||h;let i=y(r,e);if(i&&"object"==typeof i&&void 0!==t.count&&(i=i[g(r,t.count)]||i.other||e),"string"==typeof i)return x(i,t);if(r!==p){let n=y(p,e);if(n&&"object"==typeof n&&void 0!==t.count&&(n=n[g(p,t.count)]||n.other),"string"==typeof n)return x(n,t)}return e},y=(e,t)=>{const n=r[e];if(!n)return;const i=t.split(".");let o=n;for(const e of i){if(!o||"object"!=typeof o||!(e in o))return;o=o[e]}return o},x=(e,t)=>e.replace(/\{(\w+)\}/g,(e,n)=>void 0!==t[n]?String(t[n]):e),_=(e,t)=>{r[e]||(r[e]={}),k(r[e],t)},w=async(e,t)=>{try{const n=await fetch(e);if(!n.ok)throw new Error(`HTTP ${n.status}`);const r=await n.json();return _(t,r),!0}catch(e){return!1}},k=(e,t)=>{for(const n in t)t[n]instanceof Object&&n in e&&e[n]instanceof Object&&!Array.isArray(t[n])?k(e[n],t[n]):e[n]=t[n];return e},E=e=>e in r,C=e=>{const t=e.split("-")[0].toLowerCase();return["ar","he","fa","ur","yi","ps","sd","ug","dv","ku","syr"].includes(t)?"rtl":"ltr"},T=e=>{u.forEach(t=>{try{t(e)}catch(e){}})},S=e=>{if("undefined"!=typeof localStorage)try{localStorage.setItem("metona-editor-locale",e)}catch(e){}},L=()=>{if("undefined"!=typeof localStorage)try{return localStorage.getItem("metona-editor-locale")||M()}catch(e){}return M()},M=()=>{if("undefined"!=typeof navigator){const e=navigator.language||navigator.userLanguage;if(e&&E(e))return e;const t=e?.split("-")[0];if(t&&E(t))return t}return p},$=e=>{let t=e.config?.locale||h||"zh-CN";const n=(e,n={})=>b(e,n,t);return{set:r=>r&&t!==r?(t=r,e.el&&(e.el.setAttribute("lang",r),e.el.setAttribute("dir",C(r))),e.textarea&&(e.textarea.placeholder=n("placeholder")||"",e.textarea.setAttribute("aria-label",n("edit")||""),e.textarea.setAttribute("dir",C(r))),"function"==typeof e._emit&&e._emit("localeChange",{locale:r,direction:C(r)}),e.toolbarEl&&e.toolbarEl.querySelectorAll(".me-btn").forEach(e=>{const t=e.dataset.action||e.dataset.mode;if(t){const r=n(t);r&&r!==t&&(e.title=r,e.setAttribute("aria-label",r))}}),t):t,get:()=>t,getDirection:()=>C(t),t:n,formatNumber:(e,n)=>{try{return new Intl.NumberFormat(t,n).format(e)}catch(t){return String(e)}},formatDate:(e,n)=>{try{return new Intl.DateTimeFormat(t,n).format(e instanceof Date?e:new Date(e))}catch(t){return String(e)}}}};r["zh-CN"],r["en-US"],r.ja,r.ko,r.fr,r.de;const A={t:b,getCurrentLocale:f,setCurrentLocale:v,switchLocale:e=>{v(e)},getFallbackLocale:()=>p,setFallbackLocale:e=>{p=e},hasTranslation:e=>void 0!==y(h,e)||void 0!==y(p,e),getTranslations:e=>r[e]||{},addTranslations:_,loadRemote:w,getSupportedLocales:()=>Object.keys(r),isLocaleSupported:E,getLocaleName:e=>({"zh-CN":"简体中文","zh-TW":"繁體中文","en-US":"English (US)","en-GB":"English (UK)",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",es:"Español",pt:"Português",ru:"Русский",ar:"العربية",hi:"हिन्दी",th:"ไทย",vi:"Tiếng Việt",id:"Bahasa Indonesia",tr:"Türkçe",it:"Italiano",nl:"Nederlands",pl:"Polski"}[e]||e),getLocaleDirection:C,formatNumber:(e,t={})=>{try{return new Intl.NumberFormat(h,t).format(e)}catch(t){return String(e)}},formatCurrency:(e,t="USD",n={})=>{try{return new Intl.NumberFormat(h,{style:"currency",currency:t,...n}).format(e)}catch(t){return String(e)}},formatDate:(e,t={})=>{try{const n=e instanceof Date?e:new Date(e);return new Intl.DateTimeFormat(h,t).format(n)}catch(t){return String(e)}},addLocaleListener:e=>(u.add(e),()=>{u.delete(e)}),removeLocaleListener:e=>{u.delete(e)},clearLocaleListeners:()=>{u.clear()},initI18n:()=>{const e=L();v(e)},saveLocale:S,loadLocale:L,getDefaultLocale:M,createInstanceI18n:$},z=/^\s*$/,I=/^(#{1,6})\s+(.+?)(?:\s+#{1,6})?\s*$/,H=/^={3,}\s*$/,B=/^-{3,}\s*$/,P=/^(\s{0,3})(`{3,}|~{3,})\s*([\w+#.-]*)(\s+[^\n]*?)?\s*$/,R=/^\s{0,3}([-*_])(\s*\1){2,}\s*$/,D=/^\s{0,3}>\s?/,F=/^(\s*)([-*+])\s/,j=/^(\s*)(\d+)\.\s/,O=/^\[([ xX])\]\s+(.*)$/,N=/^\s*\|?\s*:?-+:?\s*(\|\s*:?-+:?\s*)*\|?\s*$/,W=/^( {4}|\t)/,q=/^:\s+/,V=/^\[\^([^\]]+)\]:\s*/,U={smile:"😊",grinning:"😀",joy:"😂",rofl:"🤣",wink:"😉",blush:"😊",innocent:"😇",heart_eyes:"😍",kissing_heart:"😘",yum:"😋",stuck_out_tongue:"😛",sunglasses:"😎",smirk:"😏",unamused:"😒",disappointed:"😞",worried:"😟",confused:"😕",cry:"😢",sob:"😭",scream:"😱",angry:"😠",rage:"💢",triumph:"😤",sleepy:"😪",dizzy_face:"😵",zipper_mouth:"🤐",nerd:"🤓",thinking:"🤔",rolling_eyes:"🙄",expressionless:"😑",thumbsup:"👍",thumbsdown:"👎",clap:"👏",pray:"🙏",muscle:"💪",ok:"👌",point_up:"👆",point_down:"👇",point_left:"👈",point_right:"👉",raised_hands:"🙌",wave:"👋",punch:"👊",crossed_fingers:"🤞",heart:"❤️",broken_heart:"💔",star:"⭐",star2:"🌟",fire:"🔥",rocket:"🚀",check:"✅",cross:"❌",warning:"⚠️",info:"ℹ️",question:"❓",exclamation:"❗",bangbang:"‼️",grey_exclamation:"❕",bulb:"💡",book:"📖",memo:"📝",pin:"📌",link:"🔗",lock:"🔒",unlock:"🔓",key:"🔑",hammer:"🔨",wrench:"🔧",gear:"⚙️",tools:"🛠️",magnet:"🧲",zap:"⚡",cloud:"☁️",sun:"☀️",moon:"🌙",rain:"🌧️",snow:"❄️",umbrella:"☂️",rainbow:"🌈",tornado:"🌪️",fog:"🌫️",droplet:"💧",coffee:"☕",pizza:"🍕",cake:"🎂",beer:"🍺",wine:"🍷",hamburger:"🍔",fries:"🍟",apple:"🍎",banana:"🍌",grapes:"🍇",watermelon:"🍉",strawberry:"🍓",peach:"🍑",cherry:"🍒",taco:"🌮",tada:"🎉",gift:"🎁",crown:"👑",gem:"💎",ring:"💍",confetti:"🎊",balloon:"🎈",ribbon:"🎀",medal:"🏅",trophy:"🏆",eye:"👁️",ear:"👂",nose:"👃",tongue:"👅",lips:"👄",brain:"🧠",speech:"💬",thought:"💭",anger:"💢",sweat:"💦",one:"1️⃣",two:"2️⃣",three:"3️⃣",four:"4️⃣",five:"5️⃣",six:"6️⃣",seven:"7️⃣",eight:"8️⃣",nine:"9️⃣",zero:"0️⃣",arrow_up:"⬆️",arrow_down:"⬇️",arrow_left:"⬅️",arrow_right:"➡️",arrow_upper_right:"↗️",arrow_lower_right:"↘️",arrow_lower_left:"↙️",arrow_upper_left:"↖️",computer:"💻",phone:"📱",battery:"🔋",electric_plug:"🔌",copyright:"©️",registered:"®️",tm:"™️",hundred:"💯",boom:"💥",dash:"💨",hole:"🕳️",bomb:"💣",email:"📧",phone2:"📞",clock:"🕐",hourglass:"⏳",calendar:"📅",money:"💰",shopping:"🛒",package:"📦",mailbox:"📫",art:"🎨",music:"🎵",movie:"🎬",game:"🎮",sport:"⚽",earth:"🌍",house:"🏠",car:"🚗",airplane:"✈️",ship:"🚢"},K=new Map,G=(e,t)=>{if(!e)return"";if(!t.highlight&&e.length<600){const n=K.get(e);if(void 0!==n)return n;const r=he(e,t);if(K.size>=300){const e=K.keys().next().value;K.delete(e)}return K.set(e,r),r}return he(e,t)},Y=()=>{K.clear()},Z=e=>{if(!e)return"";const t=String(e).trim();if(/^(javascript|vbscript|file):/i.test(t))return"";if(/^data:/i.test(t)){if(!/^data:image\//i.test(t))return"";if(t.length>5e5)return""}return t},X=e=>String(e).normalize("NFKC").toLowerCase().replace(/[^\w\u4e00-\u9fff\u3400-\u4dbf\s-]/g,"").trim().replace(/\s+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")||"heading",Q=[],J=e=>{Q.push(e),Q.sort((e,t)=>e.priority-t.priority)},ee=e=>!!(z.test(e)||P.test(e)||I.test(e)||R.test(e)||D.test(e)||F.test(e)||j.test(e)||V.test(e)||q.test(e)||/^\$\$/.test(e));J({name:"refDef",priority:.1,test:e=>{if(/^\[\^/.test(e))return null;return e.match(/^\[([^\]]+)\]:\s*(?:<(\S+)>|(\S+))(?:\s+['"\(](.*?)['"\)])?\s*$/)||null},parse:(e,t,n,r,i,o)=>{const s=n[1].toLowerCase(),a=n[2]||n[3]||"",l=n[4]||"";return a&&o&&(o[s]=JSON.stringify({url:a,title:l})),{token:null,newIndex:t+1}}}),J({name:"blank",priority:0,test:e=>!!z.test(e)||null,parse:(e,t)=>({token:null,newIndex:t+1})}),J({name:"fencedCode",priority:1,test:e=>{const t=e.match(P);return t?(t[4]||"").includes("`")?null:t:null},parse:(e,t,n)=>{const r=n[2][0],i=n[2].length,o=n[3]||"",s=(n[4]||"").trim(),a=s?s.split(/\s+/).filter(Boolean):[],l={};for(let e=0;e=i)break;c.push(e[d]),d++}return dW.test(e)&&!(I.test(e)||D.test(e)||F.test(e)||j.test(e))||null,parse:(e,t)=>{const n=[];for(;te.match(I),parse:(e,t,n)=>({token:{type:"heading",level:n[1].length,text:n[2]},newIndex:t+1})}),J({name:"setextH1",priority:4,test:(e,t,n)=>n+1>=t.length?null:H.test(t[n+1])&&!(z.test(e)||F.test(e)||j.test(e)||D.test(e)||/^\s*`{3,}/.test(e))||null,parse:(e,t)=>({token:{type:"heading",level:1,text:e[t]},newIndex:t+2})}),J({name:"setextH2",priority:5,test:(e,t,n)=>n+1>=t.length?null:B.test(t[n+1])&&!(z.test(e)||F.test(e)||j.test(e)||D.test(e)||/^\s*`{3,}/.test(e))||null,parse:(e,t)=>({token:{type:"heading",level:2,text:e[t]},newIndex:t+2})}),J({name:"hr",priority:6,test:e=>!!R.test(e)||null,parse:(e,t)=>({token:{type:"hr"},newIndex:t+1})}),J({name:"blockquote",priority:7,test:e=>!!D.test(e)||null,parse:(e,t)=>{const n=[];for(;t!/\|/.test(e)||n+1>=t.length?null:oe(t[n+1])?{header:e,align:se(t[n+1])}:null,parse:(e,t,n)=>{let r=t+2;const i=[];for(;re.match(F),parse:(e,t,n)=>{const{items:r,endIdx:i}=ie(e,t,n[2],n[1].length,!1);return{token:{type:"ul",items:r},newIndex:i}}}),J({name:"ol",priority:10,test:e=>e.match(j),parse:(e,t,n)=>{const r=parseInt(n[2],10),{items:i,endIdx:o}=ie(e,t,n[2],n[1].length,!0);return{token:{type:"ol",items:i,start:r},newIndex:o}}}),J({name:"footnoteDef",priority:11,test:e=>e.match(V),parse:(e,t,n,r,i)=>{const o=n[1],s=[e[t].slice(n[0].length)];let a=t+1;for(;a!!q.test(e)||null,parse:(e,t,n,r)=>{const i=r.length>0&&"paragraph"===r[r.length-1].type?r.pop().text:"",o=[e[t].replace(q,"")];let s=t+1;for(;s!!/^\$\$/.test(e)||null,parse:(e,t)=>{const n=e[t].match(/^\$\$([\s\S]+?)\$\$\s*$/);if(n)return{token:{type:"mathBlock",content:n[1]},newIndex:t+1};const r=[e[t].replace(/^\$\$/,"")];let i=t+1;for(;i{if(null==e)return{tokens:[],footnotes:{},refs:{}};const t=String(e).replace(/\r\n?/g,"\n").split("\n"),n=[],r={},i={};let o=0;for(;o{let r=e.map(e=>ae(e,t)).join("\n");const i=Object.keys(n);return i.length&&(r+='\n

      ',i.forEach(e=>{r+=`
    1. ${G(n[e],t)}
    2. `}),r+="
    "),r},re=(e,t={})=>{const{tokens:n,footnotes:r,refs:i}=te(e);return ne(n,{...t,refs:i},r)},ie=(e,t,n,r,i,o)=>{const s=[];let a=t;const l=r+(i?String(n).length+2:2);for(;al&&" "!==n[l])&&new RegExp(`^\\s{${l},}`).test(n)){p.push(""),a++;continue}}break}if(i){if(new RegExp(`^(\\s{0,${r}})\\d+\\.\\s`).test(t))break}else if(new RegExp(`^(\\s{0,${r}})[-*+]\\s`).test(t))break;if(D.test(t)||I.test(t)||R.test(t)||V.test(t))break;const n=t.match(new RegExp(`^(\\s{${l},})([-*+])\\s`)),o=t.match(new RegExp(`^(\\s{${l},})(\\d+)\\.\\s`));if(n||o){const t=!!o,r=t?o[2]:n[2],i=t?o[1].length:n[1].length,s=t?parseInt(o[2],10):void 0,l=ie(e,a,r,i,t);m.push({type:t?"ol":"ul",items:l.items,start:s}),a=l.endIdx;continue}t.length>l&&""===t.slice(0,l).trim()?p.push(t.slice(l)):p.push(t),a++}p.length&&(d=d?d+"\n"+p.join("\n"):p.join("\n")),s.push({type:"listItem",text:d,checked:h,task:u,subTokens:m.length?m:void 0})}return{items:s,endIdx:a}},oe=e=>N.test(e)&&/-/.test(e),se=e=>e.replace(/^\s*\|?\s*|\s*\|?\s*$/g,"").split(/\s*\|\s*/).map(e=>/^:/.test(e)&&/:$/.test(e)?"center":/:$/.test(e)?"right":(/^:/.test(e),"left")),ae=(e,n,r)=>{switch(e.type){case"heading":{const t=X(e.text);return`${G(e.text,n)}`}case"paragraph":return`

    ${G(e.text,n)}

    `;case"hr":return"
    ";case"quote":return`
    ${re(e.content,n)}
    `;case"code":return ce(e.content,e.lang,n,e.attrs);case"ul":return`
      ${e.items.map(e=>le(e,n)).join("")}
    `;case"ol":{const t=e.start||1;return`1?` start="${t}"`:""}>${e.items.map((e,r)=>le(e,n,t>1?r+t:void 0)).join("")}`}case"table":return de(e,n);case"defList":{let t="
    ";return t+=`
    ${G(e.term,n)}
    `,e.defs.forEach(e=>{t+=`
    ${G(e,n)}
    `}),t+"
    "}case"mathBlock":return`
    ${t(e.content)}
    `;default:return`
    ${e.content?"string"==typeof e.content?G(e.content,n):t(String(e.content)):""}
    `}},le=(e,t,n)=>{if(e.task){let n=`
  • ${G(e.text,t)}`;return e.subTokens&&(n+="\n"+e.subTokens.map(e=>ae(e,t)).join("\n")),n+"
  • "}let r=null!=n?`
  • `:"
  • ";return r+=G(e.text,t),e.subTokens&&(r+="\n"+e.subTokens.map(e=>ae(e,t)).join("\n")),r+"
  • "},ce=(e,n,r,i)=>{if("mermaid"===n)return`
    ${t(e)}
    `;const o=n?` class="language-${t(n)}"`:"",s=i?.title?`
    ${t(i.title)}
    `:"";if(r.highlight&&"function"==typeof r.highlight&&n)try{const t=r.highlight(e,n);if("string"==typeof t)return`${s}
    ${t}
    `}catch(e){}return`${s}
    ${t(e)}
    `},de=(e,t)=>{const n=e=>{const t=[];let n="",r=!1;for(let i=0;i0&&""===t[0]&&t.shift(),t.length>0&&""===t[t.length-1]&&t.pop(),t},r=n(e.header),i=e.align||[],o=e=>i[e]&&"left"!==i[e]?` style="text-align:${i[e]}"`:"";let s='
    ';return s+=r.map((e,n)=>`${G(e,t)}`).join(""),s+="",s+=e.rows.map(e=>`${n(e).map((e,n)=>`${G(e,t)}`).join("")}`).join(""),s+"
    "},he=(e,n)=>{if(!e)return"";const r=[];let i=ue(e,r);const o=[];return i=i.replace(/&(?:[a-zA-Z][a-zA-Z0-9]{1,31}|#\d{1,7}|#x[0-9a-fA-F]{1,6});/g,e=>(o.push(e),`${o.length-1}`)),i=i.replace(//g,e=>(o.push(e),`${o.length-1}`)),i=t(i),i=i.replace(/\u0005(\d+)\u0005/g,(e,t)=>o[+t]||e),i=me(i,r,n),i=i.replace(/\u0000(\d+)\u0000/g,(e,n)=>{const i=r[+n];return i?`${t(i.content)}`:e}),i=i.replace(/:([\w+-]+):/g,(e,t)=>U[t]||e),i=i.replace(/ \n/g,"
    \n"),i=i.replace(/\n/g,"
    "),i},ue=(e,t)=>{let n="",r=0;for(;r{const i=new Map;return e=(e=e.replace(/\u0000\d+\u0000/g,e=>{const t=`${i.size}`;return i.set(t,e),t})).replace(pe,e=>{const n=e;if(n.startsWith("***"))return`${n.slice(3,-3)}`;if(n.startsWith("___"))return`${n.slice(3,-3)}`;if(n.startsWith("![")&&n.includes("](")){const e=n.match(/!\[([^\]]*)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/);if(!e)return n;const r=Z(e[2]);if(!r)return t(n);const i=e[3]?` title="${e[3]}"`:"";return`${e[1]}`}if(n.startsWith("![")&&n.includes("][")){const e=n.match(/!\[([^\]]*)\]\[([^\]]*)\]/);if(!e)return n;const i=(e[2]||e[1]).toLowerCase();if(r.refs&&r.refs[i])try{const o=JSON.parse(r.refs[i]),s=Z(o.url);if(!s)return t(n);const a=o.title?` title="${o.title}"`:"";return`${e[1]}`}catch(t){return`${e[1]}`}return`${e[1]}`}if(n.startsWith("[")&&n.includes("](")){const e=n.match(/\[([^\]]+)\]\(([^)\s]+)(?:\s+['"](.+?)['"])?\s*\)/);if(!e)return n;const t=Z(e[2]);return t?`${he(e[1],r)}`:n}if(n.startsWith("[")&&n.includes("][")){const e=n.match(/\[([^\]]+)\]\[([^\]]*)\]/);if(!e)return n;const i=(e[2]||e[1]).toLowerCase();if(r.refs&&r.refs[i])try{const o=JSON.parse(r.refs[i]),s=Z(o.url);return s?`${e[1]}`:t(n)}catch(e){return t(n)}return t(n)}if(n.startsWith("<http")){const e=n.slice(4,-4);return`${e}`}if(n.startsWith("**"))return`${n.slice(2,-2)}`;if(n.startsWith("__"))return`${n.slice(2,-2)}`;if(n.startsWith("~~"))return`${n.slice(2,-2)}`;if(n.startsWith("=="))return`${n.slice(2,-2)}`;if(n.startsWith("*")&&!n.startsWith("**")&&!n.startsWith("***"))return`${n.slice(1,-1)}`;if(n.startsWith("_")&&!n.startsWith("__")&&!n.startsWith("___"))return`${n.slice(1,-1)}`;if(n.startsWith("^")&&!n.startsWith("^^"))return`${n.slice(1,-1)}`;if(n.startsWith("~")&&!n.startsWith("~~"))return`${n.slice(1,-1)}`;if(n.startsWith("$")&&!n.startsWith("$$"))return`${t(n.slice(1,-1))}`;if(/^\[\^/.test(n)){const e=n.slice(2,-1);return`[${e}]`}if(n.startsWith("\\")&&2===n.length){const e=n[1];return/[!"#$%&'()*+,\-./:;<=>?@\[\\\]^_`{|}~]/.test(e)?e:n}return n}),e.replace(/\u0003(\d+)\u0003/g,e=>i.get(e)||e)};class ge{constructor(){this.plugins=new Map}register(e,t){return this.plugins.has(e)?this:t&&"object"==typeof t&&(t.name||e)?(this.plugins.set(e,{version:t.version||"0.0.0",description:t.description||"",depends:t.depends||[],priority:t.priority||0,...t,name:e,enabled:!0}),this):this}unregister(e){return this.plugins.delete(e),this}get(e){return this.plugins.get(e)||null}has(e){return this.plugins.has(e)}getAll(){return Array.from(this.plugins.values())}getNames(){return Array.from(this.plugins.keys())}enable(e){const t=this.plugins.get(e);return t&&(t.enabled=!0),this}disable(e){const t=this.plugins.get(e);return t&&(t.enabled=!1),this}isEnabled(e){const t=this.plugins.get(e);return!!t&&t.enabled}destroy(){this.plugins.clear()}}const fe=new ge,ve=e=>{const t=new Map;e.forEach(e=>t.set(e.name,e));const n=new Map,r=new Map;e.forEach(e=>{n.set(e.name,0),r.set(e.name,[])}),e.forEach(e=>{(e.depends||[]).forEach(i=>{t.has(i)&&(r.get(i).push(e.name),n.set(e.name,(n.get(e.name)||0)+1))})});const i=[];n.forEach((e,t)=>{0===e&&i.push(t)});const o=[];for(;i.length;){i.sort((e,n)=>(t.get(n).priority||0)-(t.get(e).priority||0));const e=i.shift();o.push(t.get(e)),(r.get(e)||[]).forEach(e=>{n.set(e,n.get(e)-1),0===n.get(e)&&i.push(e)})}return o.length!==e.length?e:o},be=(e={},t={})=>{const n=[],r={...t};for(const[i,o]of Object.entries(e)){const e=t[i];if(o.required&&null==e)n.push(`"${i}" is required`);else if(void 0!==e||void 0===o.default){if(void 0!==e&&o.type){const t=Array.isArray(e)?"array":typeof e;t!==o.type&&n.push(`"${i}" expected ${o.type}, got ${t}`)}if(void 0!==e&&o.enum&&!o.enum.includes(e)&&n.push(`"${i}" must be one of [${o.enum.join(", ")}]`),void 0!==e&&"function"==typeof o.validator)try{const t=o.validator(e);!0!==t&&n.push(`"${i}": ${t}`)}catch(e){n.push(`"${i}": ${e.message}`)}}else r[i]=o.default}return{valid:0===n.length,errors:n,patched:r}},ye={autoSave:{name:"autoSave",version:"0.1.1",description:"Auto-save to localStorage",priority:100,install(e,t){if(!e||"function"!=typeof e.getValue)return;const n=t||this,r=n.key||"me-draft-"+(e.id||""),i=n.delay||1e3,o={_timer:null},s=()=>{o._timer&&(clearTimeout(o._timer),o._timer=null);try{localStorage.setItem(r,e.getValue()),"function"==typeof e._emit&&e._emit("autosave",{key:r,value:e.getValue()})}catch(e){}},a=()=>{o._timer&&clearTimeout(o._timer),o._timer=setTimeout(s,i)},l=s,c=s;e.on("change",a),e.on("blur",l),e.on("save",c),e.restoreDraft=()=>{try{const t=localStorage.getItem(r);return null!=t&&e.setValue(t),t}catch(e){return null}},e.clearDraft=()=>{try{localStorage.removeItem(r)}catch(e){}return e},e.getDraftKey=()=>r,e.__autoSaveCleanup={state:o,_onInput:a,_onBlur:l,_onSave:c,save:s}},destroy(e){const t=e.__autoSaveCleanup;t&&(t.state._timer&&(clearTimeout(t.state._timer),t.state._timer=null),e&&"function"==typeof e.off&&(t._onInput&&e.off("change",t._onInput),t._onBlur&&e.off("blur",t._onBlur),t._onSave&&e.off("save",t._onSave)),delete e.__autoSaveCleanup)}},exportTool:{name:"exportTool",version:"0.1.0",description:"Export Markdown/HTML",priority:50,install(e){if(!e||"function"!=typeof e.getValue)return;const t=(e,t,n)=>{if("undefined"==typeof document)return;const r=new Blob([t],{type:n+";charset=utf-8"}),i=URL.createObjectURL(r),o=document.createElement("a");o.href=i,o.download=e,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>URL.revokeObjectURL(i),0)},n=()=>{const e=new Date,t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}${t(e.getMonth()+1)}${t(e.getDate())}-${t(e.getHours())}${t(e.getMinutes())}`};e.exportMarkdown=r=>(t(r||`metona-${n()}.md`,e.getValue(),"text/markdown"),e),e.exportHTML=(r,i={})=>{const o=i.title||"Document",s=i.css||"",a="function"==typeof e.getHTML?e.getHTML():"",l=!1!==i.embedCSS?'':"";return t(r||`metona-${n()}.html`,`\n\n\n\n\n${o}\n${s?``:""}${l}\n\n\n${a}\n\n`,"text/html"),e}},destroy(){}},searchReplace:{name:"searchReplace",version:"0.2.0",description:"Search & Replace (Ctrl+F/H)",priority:80,install(e){if(!e||!e.textarea||"undefined"==typeof document)return;if(!document.getElementById("me-search-style")){const e=document.createElement("style");e.id="me-search-style",e.textContent=".me-search{position:absolute;top:8px;right:12px;z-index:20;display:flex;flex-direction:column;gap:6px;padding:8px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);font-size:13px;min-width:280px}.me-search-row{display:flex;gap:4px;align-items:center}.me-search input{flex:1;min-width:0;padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));border-radius:4px;background:var(--md-textarea-bg,#fff);color:var(--md-text,#1f2937);font-size:13px}.me-search input:focus{outline:none;border-color:var(--md-accent,#3b82f6)}.me-search button{padding:4px 8px;border:1px solid var(--md-border,rgba(0,0,0,0.15));background:var(--md-bg,#fff);color:var(--md-text,#1f2937);border-radius:4px;cursor:pointer;font-size:12px;line-height:1}.me-search button:hover{background:var(--md-accent,#3b82f6);color:#fff;border-color:var(--md-accent,#3b82f6)}.me-search .me-search-count{color:var(--md-muted,#6b7280);font-size:12px;min-width:60px;text-align:center}.me-search .me-search-close{padding:2px 6px}",document.head.appendChild(e)}const t={_panel:null,_regexMode:!1,_cleanup:null},n=()=>{if(!t._panel)return;const e="1"===t._panel.dataset.replace,n=t._panel.querySelector(".me-search-replace-row");n&&(n.style.display=e?"flex":"none")},r=()=>{t._cleanup&&(t._cleanup(),t._cleanup=null),t._panel=null,e&&e.textarea&&e.textarea.focus()},i=i=>{if(t._panel){t._panel.dataset.replace=i?"1":"0",n();const e=t._panel.querySelector(".me-search-find");return void(e&&(e.focus(),e.select()))}const o=e.textarea.value.substring(e.textarea.selectionStart,e.textarea.selectionEnd),s=document.createElement("div");var a;s.className="me-search",s.dataset.replace=i?"1":"0",s.innerHTML=`
    /g,">")}"/>
    `,e.el.appendChild(s),t._panel=s,n(),t._regexMode=!1;const l=s.querySelector(".me-search-find"),c=s.querySelector(".me-search-replace"),d=s.querySelector(".me-search-count"),h=s.querySelector(".me-search-regex");h.addEventListener("click",()=>{t._regexMode=!t._regexMode,h.classList.toggle("me-active",t._regexMode),p=u()});const u=()=>{const n=l.value;if(!n)return d.textContent="",[];const r=[];let i=0;if(t._regexMode)try{const t=new RegExp(n,"g");let i;for(;null!==(i=t.exec(e.textarea.value));)r.push(i.index),0===i[0].length&&t.lastIndex++}catch(e){return d.textContent="err",[]}else for(;;){const t=e.textarea.value.indexOf(n,i);if(-1===t)break;r.push(t),i=t+n.length}return d.textContent=r.length?`${r.length}`:"0",r};let p=[];const m=(t,n)=>{e.textarea.focus(),e.textarea.setSelectionRange(t,t+(n||l.value.length))},g=()=>{if(p=u(),!p.length)return;const n=e.textarea.selectionEnd,r=t._regexMode?(()=>{try{const t=new RegExp(l.value).exec(e.textarea.value.substring(n));return t?t[0].length:l.value.length}catch(e){return l.value.length}})():l.value.length;let i=p.find(e=>e>=n);null==i&&(i=p[0]),m(i,r)},f=()=>{if(p=u(),!p.length)return;const n=e.textarea.selectionStart,r=t._regexMode?(()=>{try{const t=new RegExp(l.value).exec(e.textarea.value.substring(Math.max(0,n-100),n+100));return t?t[0].length:l.value.length}catch(e){return l.value.length}})():l.value.length;let i=-1;for(let e=p.length-1;e>=0;e--)if(p[e]{const n=l.value,r=c.value;if(!n)return;const i=e.textarea,o=i.selectionStart,s=i.selectionEnd,a=i.value.substring(o,s);if(t._regexMode)try{new RegExp(n).test(a)&&(i.value=i.value.substring(0,o)+r+i.value.substring(s),i.setSelectionRange(o,o+r.length))}catch(e){}else a===n&&(i.value=i.value.substring(0,o)+r+i.value.substring(s),i.setSelectionRange(o,o+r.length));e._value=i.value,"function"==typeof e._pushHistory&&e._pushHistory(),"function"==typeof e._render&&e._render(),"function"==typeof e._emit&&e._emit("change",e._value),g()};l.addEventListener("input",()=>{p=u()}),l.addEventListener("keydown",e=>{"Enter"===e.key&&(e.preventDefault(),e.shiftKey?f():g()),"Escape"===e.key&&(e.preventDefault(),r())}),c.addEventListener("keydown",e=>{"Enter"===e.key&&(e.preventDefault(),v()),"Escape"===e.key&&(e.preventDefault(),r())}),s.querySelector(".me-search-next").addEventListener("click",g),s.querySelector(".me-search-prev").addEventListener("click",f),s.querySelector(".me-search-close").addEventListener("click",()=>r()),s.querySelector(".me-search-replace-one").addEventListener("click",v),s.querySelector(".me-search-replace-all").addEventListener("click",()=>{const n=l.value,r=c.value;if(!n)return;const i=e.textarea;if(t._regexMode)try{i.value=i.value.replace(new RegExp(n,"g"),r)}catch(e){return}else i.value=i.value.split(n).join(r);i.setSelectionRange(0,0),e._value=i.value,"function"==typeof e._pushHistory&&e._pushHistory(),"function"==typeof e._render&&e._render(),"function"==typeof e._emit&&e._emit("change",e._value),u()}),l.focus(),l.select(),t._cleanup=()=>{s.parentNode&&s.parentNode.removeChild(s)}},o=e=>{if(!e.ctrlKey&&!e.metaKey)return;const n=e.key.toLowerCase();"f"===n?(e.preventDefault(),i(!1)):"h"===n?(e.preventDefault(),i(!0)):"escape"===n&&t._panel&&r()};e.textarea.addEventListener("keydown",o),e.__srState=t,e.__srOpen=i,e.__srClose=r,e.__srKeydown=o},destroy(e){const t=e.__srState;t&&(t._cleanup&&(t._cleanup(),t._cleanup=null),t._panel=null);const n=e.__srKeydown;n&&e&&e.textarea&&e.textarea.removeEventListener("keydown",n),delete e.__srState,delete e.__srOpen,delete e.__srClose,delete e.__srKeydown}},imagePaste:{name:"imagePaste",version:"0.2.0",description:"Paste image as base64",priority:60,install(e){if(!e||!e.textarea||"undefined"==typeof document)return;const t=t=>{const n=t.clipboardData?.items;if(n)for(const r of n)if(r.type?.startsWith("image/")){t.preventDefault();const n=new FileReader;n.onload=()=>{e.insert(`![image-${Date.now().toString(36)}.png](${n.result})\n`)},n.readAsDataURL(r.getAsFile());break}};e.textarea.addEventListener("paste",t),e.__ipOnPaste=t},destroy(e){const t=e.__ipOnPaste;t&&e?.textarea&&e.textarea.removeEventListener("paste",t),delete e.__ipOnPaste}},shortcutHelp:{name:"shortcutHelp",version:"0.2.0",description:"Press ? to show shortcuts",priority:200,install(e){if(!e||!e.textarea||"undefined"==typeof document)return;if(!document.getElementById("me-shortcut-style")){const e=document.createElement("style");e.id="me-shortcut-style",e.textContent=".me-shortcut-overlay{position:fixed;top:0;left:0;right:0;bottom:0;z-index:50;background:rgba(0,0,0,0.5);display:flex;align-items:center;justify-content:center}.me-shortcut-panel{background:var(--md-bg,#fff);border-radius:12px;padding:24px;max-width:560px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px rgba(0,0,0,0.3)}.me-shortcut-panel h3{font-size:16px;margin:0 0 16px;color:var(--md-text)}.me-shortcut-panel table{width:100%;border-collapse:collapse;font-size:13px}.me-shortcut-panel td{padding:6px 10px;border-bottom:1px solid var(--md-border)}.me-shortcut-panel td:first-child{font-family:var(--md-mono);font-size:12px;color:var(--md-accent);white-space:nowrap;width:40%}.me-shortcut-panel .me-shortcut-close{position:absolute;top:16px;right:20px;background:none;border:none;font-size:20px;cursor:pointer;color:var(--md-muted)}",document.head.appendChild(e)}let t=null;const n=()=>{t&&(t.remove(),t=null)},r=()=>{if(t)return void n();const e=[["Ctrl+B",b("bold")||"Bold"],["Ctrl+I",b("italic")||"Italic"],["Ctrl+U",b("underline")||"Underline"],["Ctrl+K",b("link")||"Link"],["Ctrl+E",b("code")||"Code"],["Ctrl+1/2/3",b("h1")||"Heading"],["Ctrl+Q",b("quote")||"Quote"],["Ctrl+Z",b("undo")||"Undo"],["Ctrl+Y",b("redo")||"Redo"],["Ctrl+S",b("save")||"Save"],["Ctrl+F",b("search")||"Search"],["Ctrl+H",b("replace")||"Replace"],["Tab",b("indent")||"Indent"],["Shift+Tab",b("outdent")||"Outdent"],["?",b("close")||"Shortcuts"]];let r="";e.forEach(([e,t])=>{r+=`${e}${t}`});const i=document.createElement("div");i.className="me-shortcut-overlay",i.innerHTML=`

    ⌨️ ${b("close")||"Shortcuts"}

    ${r}
    `,i.addEventListener("click",e=>{(e.target===i||e.target.classList.contains("me-shortcut-close"))&&n()}),document.body.appendChild(i),t=i},i=e=>{"?"!==e.key||e.ctrlKey||e.metaKey||e.altKey||(e.preventDefault(),r()),"Escape"===e.key&&t&&n()};e.textarea.addEventListener("keydown",i),e.__shState={_panel:t,_open:r,_close:n,_onKeydown:i}},destroy(e){const t=e.__shState;t&&t._panel&&t._panel.remove();const n=e.__shState?._onKeydown;n&&e?.textarea&&e.textarea.removeEventListener("keydown",n),delete e.__shState}},fileSystem:{name:"fileSystem",version:"0.2.0",description:"File System Access API",priority:90,install(e){if(!e||"function"!=typeof e.getValue)return;const t="undefined"!=typeof window&&"function"==typeof window.showOpenFilePicker;let n=null;e.openFile=async(r={})=>{if(!t)return e.toast?.("File System Access API not supported",{type:"warning"}),null;try{const[t]=await window.showOpenFilePicker({types:[{accept:{"text/markdown":[".md",".txt",".markdown"]}}],...r});n=t;const i=await t.getFile(),o=await i.text();return e.setValue(o),e._emit?.("fileOpened",{name:i.name,handle:t}),{name:i.name,content:o,handle:t}}catch(e){return e.name,null}},e.saveFile=async(r={})=>{let i=n;if(!i||r.saveAs){if(!t)return e.toast?.("File System Access API not supported",{type:"warning"}),!1;try{i=await window.showSaveFilePicker({types:[{accept:{"text/markdown":[".md"]}}],suggestedName:r.name||"document.md"}),n=i}catch(e){return e.name,!1}}try{const t=await i.createWritable();return await t.write(e.getValue()),await t.close(),e._emit?.("fileSaved",{handle:i}),!0}catch(t){return n=null,!r.saveAs&&e.saveFile({...r,saveAs:!0})}},e.saveFileAs=t=>e.saveFile({saveAs:!0,name:t}),e.getFileHandle=()=>n,e.__fsCleanup={getHandle:()=>n}},destroy(e){e&&(delete e.openFile,delete e.saveFile,delete e.saveFileAs,delete e.getFileHandle),delete e.__fsCleanup}}},xe={createManager:()=>new ge,manager:fe,register:(e,t)=>fe.register(e,t),unregister:e=>fe.unregister(e),get:e=>fe.get(e),has:e=>fe.has(e),getAll:()=>fe.getAll(),getNames:()=>fe.getNames(),enable:e=>fe.enable(e),disable:e=>fe.disable(e),isEnabled:e=>fe.isEnabled(e),getPreset:e=>ye[e]?{...ye[e]}:null,getAllPresets:()=>Object.keys(ye).reduce((e,t)=>(e[t]={...ye[t]},e),{}),createPlugin:(e={})=>{const t={name:e.name||"custom",version:e.version||"0.0.0",description:e.description||"",depends:e.depends||[],priority:e.priority||0,install:()=>{},destroy:()=>{},...e};return"function"!=typeof t.install&&(t.install=()=>{}),"function"!=typeof t.destroy&&(t.destroy=()=>{}),t},validatePlugin:e=>{const t=[];return e&&"object"==typeof e||t.push("plugin must be an object"),e&&!e.name&&t.push("plugin must have a name"),e&&e.install&&"function"!=typeof e.install&&t.push("install must be a function"),{valid:0===t.length,errors:t}},topologicalSort:ve,validateConfig:be};let _e="auto",we=new Set,ke=null;const Ee=()=>"undefined"==typeof window?"light":"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",Ce=()=>{"undefined"!=typeof window&&window.matchMedia&&(ke&&(ke(),ke=null),ke=(()=>{if("undefined"==typeof window||!window.matchMedia)return()=>{};const e=window.matchMedia("(prefers-color-scheme: dark)"),t=e=>(e.matches,void("auto"===_e&&Ae("auto")));return e.addEventListener("change",t),()=>e.removeEventListener("change",t)})())},Te=e=>e&&"auto"!==e?e:Ee(),Se=e=>{const t=Te(e),n=s[t];return n&&"object"==typeof n?n:s.light},Le=(e,t)=>{if("undefined"==typeof document||!e||"object"!=typeof e)return;const n=t||document.documentElement,r={"--md-bg":e.bg,"--md-text":e.text,"--md-border":e.border,"--md-shadow":e.shadow,"--md-hover-shadow":e.hoverShadow,"--md-toolbar-bg":e.toolbarBg||e.bg,"--md-textarea-bg":e.textareaBg||e.bg,"--md-preview-bg":e.previewBg||e.bg,"--md-code-bg":e.codeBg||"rgba(127,127,127,0.1)","--md-code-text":e.codeText||e.text,"--md-accent":e.accent||"#3b82f6","--md-muted":e.muted||"#9ca3af"};for(const[e,t]of Object.entries(r))null!=t&&n.style.setProperty(e,String(t));e.progressBg&&n.style.setProperty("--md-progress-bg",e.progressBg),e.closeHoverBg&&n.style.setProperty("--md-close-hover-bg",e.closeHoverBg)},Me=e=>{const t=e||document.documentElement;if("undefined"==typeof document)return{};const n=getComputedStyle(t),r={};return["--md-bg","--md-text","--md-border","--md-shadow","--md-hover-shadow","--md-toolbar-bg","--md-textarea-bg","--md-preview-bg","--md-code-bg","--md-code-text","--md-accent","--md-muted"].forEach(e=>{const t=n.getPropertyValue(e).trim();t&&(r[e]=t)}),r},$e=(e,t)=>{const n=t||document.documentElement;if("undefined"==typeof document)return"";const r=e.startsWith("--")?e:`--md-${e}`;return getComputedStyle(n).getPropertyValue(r).trim()},Ae=e=>{_e=e;const t=Te(e);"undefined"!=typeof document&&(document.documentElement.setAttribute("data-md-theme",t),document.documentElement.classList.remove("md-theme-light","md-theme-dark","md-theme-auto","md-theme-warm"),document.documentElement.classList.add(`md-theme-${t}`),Le(Se(e))),Pe(e,t)},ze=e=>{Ae(e),He(e)},Ie=()=>Te(_e),He=e=>{if("undefined"!=typeof localStorage)try{localStorage.setItem("metona-editor-theme",e)}catch(e){}},Be=()=>{if("undefined"!=typeof localStorage)try{return localStorage.getItem("metona-editor-theme")||"auto"}catch(e){}return"auto"},Pe=(e,t)=>{we.forEach(n=>{try{n(e,t)}catch(e){}})},Re=(e,t)=>{if("undefined"==typeof document||"undefined"==typeof MutationObserver)return()=>{};const{element:n=document.documentElement,attr:r="data-theme",classMap:i=null,callback:o=null}=e,s=()=>{if("function"==typeof o)return o(n);const e=n.getAttribute(r);if(e)return e;if(i)for(const[e,t]of Object.entries(i))if(n.classList.contains(e))return t;return n.getAttribute("data-md-theme")||null};let a=s();a&&t(a);const l=new MutationObserver(()=>{const e=s();e&&e!==a&&(a=e,t(e))});return l.observe(n,{attributes:!0,attributeFilter:[r,"class","data-md-theme"]}),()=>l.disconnect()},De=(e,t)=>{if("undefined"==typeof document||!e)return()=>{};const n=()=>{let t=e.parentElement;for(;t;){const e=t.getAttribute("data-md-theme");if(e)return e;if(t.classList.contains("theme-dark")||t.classList.contains("dark"))return"dark";if(t.classList.contains("theme-light")||t.classList.contains("light"))return"light";t=t.parentElement}if(e.parentElement){const t=getComputedStyle(e.parentElement).getPropertyValue("--md-bg").trim()||getComputedStyle(e.parentElement).backgroundColor;if(t){const e=t.match(/\d+/g);if(e&&e.length>=3)return(299*parseInt(e[0])+587*parseInt(e[1])+114*parseInt(e[2]))/1e3<128?"dark":"light"}}return null},r=n();r&&t(r);const i=new MutationObserver(()=>{const e=n();e&&t(e)});let o=e.parentElement;for(;o&&(i.observe(o,{attributes:!0,attributeFilter:["class","data-md-theme","data-theme"]}),o=o.parentElement,o!==document.documentElement););return()=>i.disconnect()},Fe=(e,t)=>{if("function"==typeof e){const n=()=>{try{const n=e();n&&t(n)}catch(e){}};n();const r=setInterval(n,500);return()=>clearInterval(r)}if("string"==typeof e&&"undefined"!=typeof document){const n=document.querySelector(e);return n?Re({element:n,attr:"data-theme"},t):()=>{}}return()=>{}},je=e=>{let t=e.config?.theme||_e||"auto";const n=n=>{t=n;const r=Te(n),i=Se(n);return e.el&&(["me-theme-light","me-theme-dark","me-theme-warm"].forEach(t=>e.el.classList.remove(t)),"auto"!==r&&e.el.classList.add(`me-theme-${r}`),e.el.setAttribute("data-md-theme",r),Le(i,e.el)),"function"==typeof e._emit&&e._emit("themeChange",{theme:n,resolved:r,config:i}),"function"==typeof e.refresh&&e.refresh(),t};return n(t),{apply:n,get:()=>t,set:e=>n(e),toggle:()=>{const e=Te(t);return n("dark"===e?"light":"dark")},getResolved:()=>Te(t),getConfig:()=>Se(t),getVars:()=>e.el?Me(e.el):{},syncWithElement:(e,t={})=>Re({element:e,attr:t.attr||"data-theme",classMap:t.classMap,callback:t.callback},e=>n(e)),adopt:()=>e.container?De(e.container,e=>n(e)):()=>{},watch:e=>Fe(e,e=>n(e))}},Oe={light:{name:"浅色",description:"明亮清晰",config:s.light},dark:{name:"深色",description:"护眼暗色",config:s.dark},auto:{name:"自动",description:"跟随系统",config:"auto"},warm:{name:"暖色",description:"温馨暖色",config:s.warm}};for(const[e,t]of Object.entries(Oe))"auto"!==e&&"auto"!==t.config&&(s[e]=t.config);const Ne={getSystemTheme:Ee,resolveTheme:Te,getThemeConfig:Se,watchSystemTheme:Ce,unwatchSystemTheme:()=>{ke&&(ke(),ke=null)},applyTheme:Ae,getCurrentTheme:()=>_e,getResolvedTheme:Ie,switchTheme:ze,toggleTheme:()=>{const e=Ie();ze("dark"===e?"light":"dark")},resetToAuto:()=>{ze("auto")},initTheme:()=>{Ae(Be()),Ce()},saveTheme:He,loadTheme:Be,addThemeListener:e=>(we.add(e),()=>{we.delete(e)}),removeThemeListener:e=>{we.delete(e)},clearThemeListeners:()=>{we.clear()},registerTheme:(e,t={})=>{const n=t.extends||"light",r=s[n]||s.light;s[e]={bg:t.bg||r.bg,text:t.text||r.text,border:t.border||r.border,shadow:t.shadow||r.shadow,hoverShadow:t.hoverShadow||r.hoverShadow,toolbarBg:t.toolbarBg||r.toolbarBg||r.bg,textareaBg:t.textareaBg||r.textareaBg||r.bg,previewBg:t.previewBg||r.previewBg||r.bg,codeBg:t.codeBg||r.codeBg,codeText:t.codeText||r.codeText,accent:t.accent||r.accent,muted:t.muted||r.muted,progressBg:t.progressBg||r.progressBg,closeHoverBg:t.closeHoverBg||r.closeHoverBg}},unregisterTheme:e=>{"light"!==e&&"dark"!==e&&"auto"!==e&&"warm"!==e&&delete s[e]},getAllThemes:()=>({...s}),getThemeNames:()=>Object.keys(s),hasTheme:e=>e in s,setThemeVariables:Le,exportCSSVars:Me,getCSSVariable:$e,applyThemeToElement:(e,t)=>{if(!t||"undefined"==typeof document)return;const n=Te(e);t.setAttribute("data-md-theme",n),t.classList.remove("md-theme-light","md-theme-dark","md-theme-auto","md-theme-warm"),"auto"!==n&&t.classList.add(`md-theme-${n}`),Le(Se(e),t)},followExternalTheme:Re,adoptFromParent:De,watch:Fe,createInstanceTheme:je},We=["edit","split","preview"],qe={success:"✓",error:"✗",warning:"⚠",info:"ℹ"},Ve={"(":")","[":"]","{":"}",'"':'"',"'":"'","`":"`","*":"*",_:"_"};class Ue{static on(e,t){return this._hooks.has(e)||this._hooks.set(e,[]),this._hooks.get(e).push(t),()=>this.off(e,t)}static off(e,t){const n=this._hooks.get(e);n&&this._hooks.set(e,n.filter(e=>e!==t))}static trigger(e,t){const n=this._hooks.get(e);n&&n.forEach(e=>{try{e(t)}catch(e){}})}constructor(e,t={}){if("undefined"==typeof window||"undefined"==typeof document)return this._destroyed=!0,this._value=t.value||"",this;if(this.id=t.id||"me-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,8),this.container="string"==typeof e?document.querySelector(e):e,!this.container)return this._destroyed=!0,this;this.config={...o,...t},t.style&&"object"==typeof t.style&&(this.config.style={...o.style,...t.style}),this._value=this.config.value||"",this._mode=We.includes(this.config.mode)?this.config.mode:"split",this._history=[],this._historyIndex=-1,this._cleanups=[],this._plugins=[],this._listeners={},this._renderRaf=null,this._historyTimer=null,this._fullscreen=!1,this._destroyed=!1,this._lastRenderedValue=null,this._shortcuts=[],this._contextMenuItems=[],this._customActions={},this._outlineTimer=null,this._zenMode=!1,this._wordWrap=!0,this._syncing=!1,this._zenMouseHandler=null,this._floatingToolbar=null,this._selectionTimer=null,this._floatingEnabled=!1!==this.config.floatingToolbar,this._renderFn="function"==typeof this.config.render?this.config.render:re,this._highlightFn="function"==typeof this.config.highlight?this.config.highlight:null,Ue.trigger("beforeCreate",this),"undefined"!=typeof document&&(d&&document.getElementById("metona-editor-styles")||(d=document.createElement("style"),d.id="metona-editor-styles",d.textContent=':root{--md-bg:#ffffff;--md-text:#1f2937;--md-border:rgba(0,0,0,0.08);--md-shadow:0 10px 36px -10px rgba(0,0,0,0.18),0 4px 14px -4px rgba(0,0,0,0.08);--md-hover-shadow:0 14px 48px -10px rgba(0,0,0,0.22),0 6px 18px -4px rgba(0,0,0,0.10);--md-toolbar-bg:rgba(248,249,250,0.92);--md-textarea-bg:#ffffff;--md-preview-bg:#ffffff;--md-code-bg:rgba(243,244,246,1);--md-code-text:#1f2937;--md-accent:#3b82f6;--md-muted:#6b7280;--md-radius:10px;--md-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;--md-mono:"SF Mono","Cascadia Code","Consolas","Liberation Mono","Courier New",monospace}\n.me-wrapper{display:flex;flex-direction:column;box-sizing:border-box;border:1px solid var(--md-border);border-radius:var(--md-radius);overflow:hidden;background:var(--md-bg);color:var(--md-text);box-shadow:var(--md-shadow);font-family:var(--md-font);font-size:14px;line-height:1.6;position:relative;transition:box-shadow .25s,border-color .25s;width:100%}\n.me-wrapper:hover{box-shadow:var(--md-hover-shadow)}\n.me-wrapper.me-disabled{opacity:.6;pointer-events:none}\n.me-wrapper *{box-sizing:border-box}\n.me-wrapper.me-fullscreen{position:fixed;top:0;left:0;right:0;bottom:0;width:100vw;height:100vh;z-index:9999;border-radius:0;border:0}\n.me-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:2px;padding:6px 8px;background:var(--md-toolbar-bg);border-bottom:1px solid var(--md-border);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);min-height:40px}\n.me-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--md-text);cursor:pointer;transition:background .15s,color .15s,transform .1s;flex-shrink:0}\n.me-btn:hover{background:var(--md-code-bg);color:var(--md-accent)}\n.me-btn:active{transform:scale(.92)}\n.me-btn.me-active{background:var(--md-accent);color:#fff}\n.me-btn:disabled{opacity:.35;cursor:not-allowed;pointer-events:none}\n.me-btn:focus-visible{outline:2px solid var(--md-accent);outline-offset:2px}\n.me-btn:focus:not(:focus-visible){outline:none}\n.me-btn svg{width:17px;height:17px;display:block}\n.me-btn span{font-size:12px;font-weight:500}\n.me-toolbar-sep{display:inline-block;width:1px;height:20px;background:var(--md-border);margin:0 4px;flex-shrink:0}\n.me-toolbar-group{display:inline-flex;gap:2px;margin-left:auto;padding-left:6px;border-left:1px solid var(--md-border)}\n.me-toolbar-group .me-btn{width:auto;padding:0 8px}\n.me-body{display:flex;flex:1;min-height:0;position:relative}\n.me-editor-pane,.me-preview-pane{flex:1 1 50%;min-width:0;overflow:hidden;position:relative}\n.me-editor-inner{display:flex;height:100%;overflow:hidden;position:relative}\n.me-gutter{flex:0 0 auto;min-width:36px;padding:16px 8px 16px 6px;overflow:hidden;background:var(--md-code-bg);border-right:1px solid var(--md-border);color:var(--md-muted);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;text-align:right;user-select:none;white-space:pre}\n.me-gutter-line{padding-right:4px}\n.me-gutter-active{color:var(--md-accent);font-weight:600;background:rgba(59,130,246,.08);border-radius:3px}\n.me-divider{flex:0 0 1px;background:var(--md-border);cursor:col-resize;position:relative}\n.me-divider::after{content:\'\';position:absolute;top:0;bottom:0;left:-3px;right:-3px}\n.me-divider:hover{background:var(--md-accent)}\n.me-textarea{width:100%;height:100%;padding:16px 18px;border:0;outline:0;resize:none;background:var(--md-textarea-bg);color:var(--md-text);font-family:var(--md-mono);font-size:13.5px;line-height:1.7;display:block;white-space:pre-wrap;word-wrap:break-word;position:relative;z-index:1}\n.me-textarea::placeholder{color:var(--md-muted);opacity:.7}\n.me-textarea:focus{outline:0}\n.me-preview-pane{overflow:auto;background:var(--md-preview-bg)}\n.me-preview{padding:18px 22px;max-width:100%;word-wrap:break-word;overflow-wrap:break-word}\n.me-body.me-mode-edit .me-preview-pane,.me-body.me-mode-edit .me-divider{display:none}\n.me-body.me-mode-edit .me-editor-pane{flex:1 1 100%}\n.me-body.me-mode-preview .me-editor-pane,.me-body.me-mode-preview .me-divider{display:none}\n.me-body.me-mode-preview .me-preview-pane{flex:1 1 100%}\n.me-preview>:first-child{margin-top:0}\n.me-preview>:last-child{margin-bottom:0}\n.me-preview h1,.me-preview h2,.me-preview h3,.me-preview h4,.me-preview h5,.me-preview h6{margin:1.4em 0 .6em;font-weight:650;line-height:1.3}\n.me-preview h1{font-size:1.9em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)}\n.me-preview h2{font-size:1.55em;padding-bottom:.3em;border-bottom:1px solid var(--md-border)}\n.me-preview h3{font-size:1.3em}\n.me-preview h4{font-size:1.12em}\n.me-preview h5{font-size:1em}\n.me-preview h6{font-size:.9em;color:var(--md-muted)}\n.me-preview p{margin:.7em 0}\n.me-preview a{color:var(--md-accent);text-decoration:none}\n.me-preview a:hover{text-decoration:underline}\n.me-preview strong{font-weight:650}\n.me-preview em{font-style:italic}\n.me-preview del{text-decoration:line-through;opacity:.75}\n.me-preview ul,.me-preview ol{margin:.6em 0;padding-left:1.6em}\n.me-preview li{margin:.25em 0}\n.me-preview li.me-task-item{list-style:none;margin-left:-1.4em}\n.me-preview li.me-task-item input{margin-right:.5em;vertical-align:middle}\n.me-preview blockquote{margin:.8em 0;padding:.4em 1em;border-left:3px solid var(--md-accent);background:var(--md-code-bg);border-radius:0 6px 6px 0;color:var(--md-text)}\n.me-preview blockquote>:first-child{margin-top:0}\n.me-preview blockquote>:last-child{margin-bottom:0}\n.me-preview hr{border:0;height:1px;background:var(--md-border);margin:1.6em 0}\n.me-preview code{font-family:var(--md-mono);font-size:.88em;padding:.15em .4em;background:var(--md-code-bg);color:var(--md-code-text);border-radius:4px}\n.me-preview pre{margin:.9em 0;padding:14px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;border:1px solid var(--md-border)}\n.me-code-title{font-family:var(--md-mono);font-size:.85em;padding:8px 14px;background:var(--md-border);border-radius:8px 8px 0 0;color:var(--md-text);margin:.9em 0 -0.9em;font-weight:600}\n.me-code-title+pre{margin-top:0;border-radius:0 0 8px 8px;border-top:none}\n.me-preview pre code{padding:0;background:transparent;color:var(--md-code-text);font-size:.9em;line-height:1.6;border-radius:0}\n.me-preview img{max-width:100%;height:auto;border-radius:6px;vertical-align:middle}\n.me-table-wrap{overflow-x:auto;margin:.9em 0}\n.me-preview table{border-collapse:collapse;width:100%;font-size:.93em;display:block}\n.me-preview th,.me-preview td{border:1px solid var(--md-border);padding:7px 12px;text-align:left}\n.me-preview th{background:var(--md-code-bg);font-weight:600}\n.me-preview tr:nth-child(even) td{background:var(--md-code-bg)}\n.me-statusbar{display:flex;align-items:center;justify-content:flex-end;gap:14px;padding:4px 12px;border-top:1px solid var(--md-border);background:var(--md-toolbar-bg);color:var(--md-muted);font-size:12px;min-height:26px}\n.me-statusbar:empty{display:none}\n.me-wrapper:focus-within{border-color:var(--md-accent)}\n.me-textarea:focus-visible{outline:0}\n@media(prefers-reduced-motion:reduce){.me-wrapper,.me-btn,.me-textarea{transition:none!important}}\n.me-wrapper.me-fullscreen .me-preview,.me-wrapper.me-fullscreen .me-textarea{font-size:15px}\n.me-wrapper.me-readonly .me-textarea{background:var(--md-code-bg);cursor:default;opacity:.88}\n.me-wrapper.me-readonly .me-toolbar{opacity:.75}\n.me-wrapper.me-readonly .me-btn:disabled{opacity:.3;cursor:not-allowed;pointer-events:none}\n.me-preview mark{background:rgba(250,204,21,.3);color:inherit;padding:.1em .2em;border-radius:3px}\n.me-preview sup{font-size:.75em;vertical-align:super;line-height:1}\n.me-preview sub{font-size:.75em;vertical-align:sub;line-height:1}\n.me-preview .me-math-block{display:block;margin:1.2em 0;padding:12px 16px;background:var(--md-code-bg);border-radius:8px;overflow-x:auto;font-family:var(--md-mono);font-size:.95em;text-align:center}\n.me-preview .me-math-inline{font-family:var(--md-mono);font-size:.95em;padding:.05em .2em}\n.me-preview dl{margin:.8em 0}\n.me-preview dt{font-weight:650;margin:.6em 0 .2em}\n.me-preview dd{margin:0 0 .3em 1.6em;color:var(--md-text)}\n.me-preview .me-footnote-ref a{font-size:.75em;vertical-align:super;text-decoration:none;color:var(--md-accent)}\n.me-preview .me-footnotes{margin-top:2em;border-top:1px solid var(--md-border);padding-top:.8em;font-size:.9em;color:var(--md-muted)}\n.me-preview .me-footnotes hr{display:none}\n.me-preview .me-footnotes ol{padding-left:1.2em}\n.me-preview .me-footnote-item{margin:.3em 0}\n.me-preview .me-footnote-backref{text-decoration:none;color:var(--md-accent);margin-right:.4em}\n.me-toast{position:absolute;bottom:16px;right:16px;z-index:30;display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:8px;font-size:13px;pointer-events:auto;cursor:pointer;opacity:0;transform:translateY(12px);transition:opacity .3s,transform .3s;box-shadow:0 6px 20px rgba(0,0,0,.15);max-width:360px}\n.me-toast.me-toast-enter{opacity:1;transform:translateY(0)}\n.me-toast.me-toast-leave{opacity:0;transform:translateY(12px)}\n.me-toast-success{background:#10b981;color:#fff}\n.me-toast-error{background:#ef4444;color:#fff}\n.me-toast-warning{background:#f59e0b;color:#fff}\n.me-toast-info{background:var(--md-accent,#3b82f6);color:#fff}\n.me-toast-icon{font-weight:700;font-size:16px;flex-shrink:0}\n.me-toast-msg{line-height:1.4}\n.me-context-menu{position:fixed;z-index:40;min-width:180px;padding:4px 0;background:var(--md-bg);border:1px solid var(--md-border);border-radius:8px;box-shadow:0 8px 28px rgba(0,0,0,.18);font-size:13px}\n.me-context-menu-item{display:flex;align-items:center;justify-content:space-between;padding:6px 14px;cursor:pointer;color:var(--md-text);transition:background .1s}\n.me-context-menu-item:hover{background:var(--md-code-bg);color:var(--md-accent)}\n.me-context-menu-sep{height:1px;background:var(--md-border);margin:4px 0}\n.me-context-menu-shortcut{color:var(--md-muted);font-size:11px;margin-left:24px}\n.me-context-menu-item.me-disabled{opacity:.4;cursor:not-allowed;pointer-events:none}\n.me-outline{position:absolute;top:0;right:0;width:220px;height:100%;overflow-y:auto;background:var(--md-preview-bg);border-left:1px solid var(--md-border);padding:12px 14px;font-size:13px;z-index:15}\n.me-outline-title{font-weight:650;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--md-border);color:var(--md-text)}\n.me-outline ul{list-style:none;padding:0;margin:0}\n.me-outline li{margin:2px 0}\n.me-outline a{color:var(--md-muted);text-decoration:none;display:block;padding:2px 6px;border-radius:4px;transition:background .1s,color .1s}\n.me-outline a:hover{background:var(--md-code-bg);color:var(--md-accent)}\n.me-outline a.me-outline-active{background:var(--md-accent);color:#fff;font-weight:600}\n.me-outline-l1 a{font-weight:600;color:var(--md-text)}\n.me-outline-l2 a{padding-left:12px}\n.me-outline-l3 a{padding-left:20px;font-size:12px}\n.me-outline-l4 a{padding-left:28px;font-size:12px}\n.me-wrapper.me-zen .me-body{max-width:820px;margin:0 auto}\n.me-wrapper.me-zen .me-textarea{font-size:15px;line-height:1.8}\n.me-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n@media print{.me-wrapper{border:0!important;box-shadow:none!important}\n.me-toolbar,.me-statusbar,.me-divider{display:none!important}\n.me-body.me-mode-split .me-editor-pane{display:none}\n.me-body.me-mode-split .me-preview-pane{flex:1 1 100%!important}\n.me-preview{padding:0!important;font-size:11pt}\n.me-wrapper.me-fullscreen{position:static!important;width:auto!important;height:auto!important}}\n[dir=rtl] .me-gutter{border-right:none;border-left:1px solid var(--md-border);text-align:left}\n[dir=rtl] .me-gutter-line{padding-right:0;padding-left:4px}\n[dir=rtl] .me-toolbar-group{margin-left:0;margin-right:auto;padding-left:0;padding-right:6px;border-left:none;border-right:1px solid var(--md-border)}\n[dir=rtl] .me-outline{right:auto;left:0;border-left:none;border-right:1px solid var(--md-border)}\n[dir=rtl] .me-outline-l2 a{padding-left:0;padding-right:12px}\n[dir=rtl] .me-outline-l3 a{padding-left:0;padding-right:20px}\n[dir=rtl] .me-outline-l4 a{padding-left:0;padding-right:28px}\n[dir=rtl] .me-preview blockquote{border-left:none;border-right:3px solid var(--md-accent);border-radius:6px 0 0 6px}\n[dir=rtl] .me-preview ul,[dir=rtl] .me-preview ol{padding-left:0;padding-right:1.6em}\n[dir=rtl] .me-preview li.me-task-item{margin-left:0;margin-right:-1.4em}\n[dir=rtl] .me-preview dd{margin-left:0;margin-right:1.6em}\n[dir=rtl] .me-preview .me-footnotes ol{padding-left:0;padding-right:1.2em}\n[dir=rtl] .me-preview .me-footnote-backref{margin-right:0;margin-left:.4em}\n[dir=rtl] .me-search{right:auto;left:12px}\n[dir=rtl] .me-toast{right:auto;left:16px}\n[dir=rtl] .me-context-menu-shortcut{margin-left:0;margin-right:24px}\n[dir=rtl] .me-statusbar{justify-content:flex-start}',document.head.appendChild(d))),this._buildDOM(),this._themeCtx=je(this),this._i18nCtx=$(this),t.theme&&"undefined"!=typeof document&&document.documentElement.setAttribute("data-md-theme",Te(t.theme));const n=Se(this.config.theme);if(Le(n,this.el),this._buildToolbar(),this._updateModeButtons(),this._bindToolbarKeyboard(),this._initAriaLive(),this._bindEvents(),this._bindContextMenu(),this._trackOutlineScroll(),!1!==this.config.floatingToolbar&&this._initFloatingToolbar(),this.textarea.value=this._value,this._pushHistory(),this._render(),this._updateWordCount(),Array.isArray(this.config.plugins)){const e=this.config.plugins.map(e=>"string"==typeof e?{...ye[e],_isStringRef:!0}:e).filter(Boolean);ve(e).forEach(e=>this.use(e))}if(this.config.autofocus&&!this.config.readOnly&&this.focus(),"function"==typeof this.config.onCreate)try{this.config.onCreate(this)}catch(e){}Ue.trigger("afterCreate",this)}_buildDOM(){const e=document.createElement("div");var t;e.className=`me-wrapper me-theme-${t=this.config.theme,t&&"auto"!==t?t:Te("auto")}`,this.config.readOnly&&e.classList.add("me-readonly"),e.dataset.id=this.id,e.setAttribute("role","application"),e.setAttribute("aria-label",b("edit")),this.config.className&&this.config.className.split(/\s+/).filter(Boolean).forEach(t=>e.classList.add(t));const n=this.config.height;e.style.height="number"==typeof n?`${n}px`:n||"400px",this.config.style&&"object"==typeof this.config.style&&Object.entries(this.config.style).forEach(([t,n])=>{n&&(e.style[t]=n)});const r=document.createElement("div");r.className="me-toolbar",r.setAttribute("role","toolbar");const i=document.createElement("div");i.className=`me-body me-mode-${this._mode}`;const o=document.createElement("div");o.className="me-editor-pane";const s=document.createElement("div");s.className="me-editor-inner";const a=document.createElement("div");a.className="me-gutter",this.config.lineNumbers||(a.style.display="none"),s.appendChild(a);const l=document.createElement("textarea");l.className="me-textarea",l.spellcheck=!!this.config.spellcheck,l.readOnly=!!this.config.readOnly,l.style.tabSize=String(this.config.tabSize||2),l.placeholder=this.config.placeholder||b("placeholder"),l.setAttribute("aria-label",b("edit")),s.appendChild(l),o.appendChild(s);const c=document.createElement("div");c.className="me-divider",c.setAttribute("role","separator");const d=document.createElement("div");d.className="me-preview-pane",d.setAttribute("role","region"),d.setAttribute("aria-label",b("preview"));const h=document.createElement("div");h.className="me-preview",d.appendChild(h),i.appendChild(o),i.appendChild(c),i.appendChild(d),e.appendChild(r),e.appendChild(i);let u=null;this.config.wordCount&&(u=document.createElement("div"),u.className="me-statusbar",e.appendChild(u)),this.container.appendChild(e),this.el=e,this.toolbarEl=r,this.bodyEl=i,this.editorPane=o,this.editorInner=s,this.gutter=a,this.previewPane=d,this.dividerEl=c,this.textarea=l,this.previewEl=h,this.statusEl=u,this._restoreDividerPosition()}_buildToolbar(){const e=this.config.toolbar;if(!e||!Array.isArray(e)||0===e.length)return;const t=[];if(e.forEach(e=>{if("|"===e){const e=document.createElement("span");return e.className="me-toolbar-sep",void this.toolbarEl.appendChild(e)}"edit"!==e&&"split"!==e&&"preview"!==e&&"fullscreen"!==e?this.toolbarEl.appendChild(this._createBtn(e)):t.push(e)}),t.length){const e=document.createElement("div");e.className="me-toolbar-group",t.forEach(t=>{const n=this._createBtn(t);"edit"!==t&&"split"!==t&&"preview"!==t||(n.dataset.mode=t,t===this._mode&&n.classList.add("me-active")),e.appendChild(n)}),this.toolbarEl.appendChild(e)}}_createBtn(e){const r=document.createElement("button");r.type="button",r.className=`me-btn me-btn-${e}`,r.dataset.action=e;const i=b(e)||e;return r.title=i,r.setAttribute("aria-label",i),r.innerHTML=n[e]||`${t(e)}`,r}_bindEvents(){const e=this.textarea,t=()=>{const t=this._value;if(this._value=e.value,Ue.trigger("beforeChange",this),this._emit("beforeChange",t,this._value),this._scheduleRender(),this._scheduleHistory(),this._updateWordCount(),this._renderGutter(),this._updateOutline(),this._emit("input",this._value),this._emit("change",this._value),"function"==typeof this.config.onInput)try{this.config.onInput(this._value,this)}catch(e){}if("function"==typeof this.config.onChange)try{this.config.onChange(this._value,this)}catch(e){}this._emit("afterChange",this._value),Ue.trigger("afterChange",this)};e.addEventListener("input",t);const n=e=>{"Enter"!==e.key||e.shiftKey||e.ctrlKey||e.metaKey||this._handleSmartEnter(e),this._handleKeydown(e)};e.addEventListener("keydown",n);const r=e=>this._handleBracketAutoClose(e);e.addEventListener("keypress",r);const i=()=>{this._updateCurrentLine()};e.addEventListener("click",i),e.addEventListener("keyup",i);const o=()=>{this._syncScroll()};e.addEventListener("scroll",o);const s=()=>{if(!this.config.syncScroll||"split"!==this._mode)return;if(this._syncing)return;this._syncing=!0;const t=this.previewPane.scrollHeight-this.previewPane.clientHeight;if(t<=0)return void(this._syncing=!1);const n=this.previewPane.scrollTop/t,r=e.scrollHeight-e.clientHeight;if(e.scrollTop=n*r,this.gutter){const e=this.gutter.scrollHeight-this.gutter.clientHeight;this.gutter.scrollTop=e>0?n*e:n*r}requestAnimationFrame(()=>{this._syncing=!1})};this.previewPane.addEventListener("scroll",s);const a=()=>{if(this._emit("focus"),"function"==typeof this.config.onFocus)try{this.config.onFocus(this)}catch(e){}},l=()=>{if(this._emit("blur"),"function"==typeof this.config.onBlur)try{this.config.onBlur(this)}catch(e){}};e.addEventListener("focus",a),e.addEventListener("blur",l),this.previewEl.addEventListener("click",e=>{const t=e.target.closest("a");if(!t)return;const n=t.getAttribute("href");if(n&&!n.startsWith("#"))if(e.preventDefault(),this._emit("linkClick",{href:n,text:t.textContent}),"function"!=typeof this.config.onLinkClick)window.open(n,"_blank","noopener");else try{this.config.onLinkClick(n,t.textContent,this)}catch(e){}});const c=e=>{const t=e.target.closest(".me-btn");if(!t)return;const n=t.dataset.mode;if(n)return void this.setMode(n);const r=t.dataset.action;r&&this.exec(r)};this.toolbarEl.addEventListener("click",c);const d=e=>this._bindDividerDrag(e);this.dividerEl.addEventListener("pointerdown",d),this._bindDragDrop(),this._cleanups.push(()=>{e.removeEventListener("input",t),e.removeEventListener("keydown",n),e.removeEventListener("keypress",r),e.removeEventListener("scroll",o),this.previewPane.removeEventListener("scroll",s),e.removeEventListener("click",i),e.removeEventListener("keyup",i),e.removeEventListener("focus",a),e.removeEventListener("blur",l),this.toolbarEl.removeEventListener("click",c),this.dividerEl.removeEventListener("pointerdown",d)})}_handleKeydown(e){if("Tab"===e.key)return e.preventDefault(),void this._handleTab(e.shiftKey);if(this._shortcuts.length)for(const t of this._shortcuts){const n=t.ctrl?e.ctrlKey||e.metaKey:!e.ctrlKey&&!e.metaKey,r=t.shift?e.shiftKey:!e.shiftKey,i=t.alt?e.altKey:!e.altKey;if(e.key.toLowerCase()===t.key&&n&&r&&i){if(e.preventDefault(),"string"==typeof t.handler)this.exec(t.handler);else if("function"==typeof t.handler)try{t.handler(this)}catch(e){}return}}if(!e.ctrlKey&&!e.metaKey)return;const t=e.key.toLowerCase(),n={b:"bold",i:"italic",k:"link",u:"underline",e:"code",1:"h1",2:"h2",3:"h3",q:"quote"};if("z"!==t||e.shiftKey)if("z"===t&&e.shiftKey||"y"===t)e.preventDefault(),this.redo();else if("s"===t){if(e.preventDefault(),this._emit("save",this._value),"function"==typeof this.config.onSave)try{this.config.onSave(this._value,this)}catch(e){}}else n[t]&&(e.preventDefault(),this.exec(n[t]));else e.preventDefault(),this.undo()}_handleTab(e){const t=this.textarea,n=t.selectionStart,r=t.selectionEnd,i=this.config.tabSize||0,o=i>0?" ".repeat(i):"\t";if(n===r)t.value=t.value.slice(0,n)+o+t.value.slice(r),t.selectionStart=t.selectionEnd=n+o.length;else{const i=t.value.lastIndexOf("\n",n-1)+1,s=t.value.slice(i,r).split("\n");let a;a=e?s.map(e=>e.replace(/^(\t| {1,4})/,"")).join("\n"):s.map(e=>o+e).join("\n"),t.value=t.value.slice(0,i)+a+t.value.slice(r),t.selectionStart=i,t.selectionEnd=i+a.length}this._value=t.value,this._pushHistory(),this._render(),this._emit("change",this._value)}_bindDividerDrag(e){if("split"!==this._mode)return;e.preventDefault();const t=e.clientX,n=this.editorPane.getBoundingClientRect().width,r=this.bodyEl.getBoundingClientRect().width;if(r<=0)return;const i=this.dividerEl,o=e=>{const o=e.clientX-t;let s=n+o;const a=r-80-i.offsetWidth;s=Math.max(80,Math.min(a,s));const l=s/r*100;this.editorPane.style.flex=`0 0 ${l}%`,this.previewPane.style.flex=`1 1 ${100-l}%`},s=()=>{window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",s),this._saveDividerPosition()};window.addEventListener("pointermove",o),window.addEventListener("pointerup",s)}_saveDividerPosition(){try{const e=this.editorPane.style.flex;e&&localStorage.setItem("metona-editor-divider",e)}catch(e){}}_restoreDividerPosition(){try{const e=localStorage.getItem("metona-editor-divider");e&&"split"===this._mode&&(this.editorPane.style.flex=e,this.previewPane.style.flex="1 1 auto")}catch(e){}}_scheduleRender(){this._renderRaf||(this._renderRaf=requestAnimationFrame(()=>{this._renderRaf=null,this._render()}))}_render(){if("edit"===this._mode)return;if(this._lastRenderedValue===this._value)return;let e;this._lastRenderedValue=this._value,Ue.trigger("beforeRender",this),this._emit("beforeRender",this);try{e=this._renderFn(this._value,{highlight:this._highlightFn||void 0,locale:f()})}catch(n){e=`

    ${b("renderError")}: ${t(n.message)}

    `}if("function"==typeof this.config.sanitize)try{e=this.config.sanitize(e)}catch(e){}this.previewEl.innerHTML=e,this._renderGutter(),Ue.trigger("afterRender",this),this._emit("afterRender",this)}_renderGutter(){if(!this.config.lineNumbers||!this.gutter)return;const e=this._value?this._value.split("\n").length:1,t=this.gutter.children.length;if(t!==e)if(t${r}`;this.gutter.insertAdjacentHTML("beforeend",n)}else for(;this.gutter.children.length>e;)this.gutter.removeChild(this.gutter.lastChild)}_updateCurrentLine(){if(!this.gutter)return;const e=this.textarea.selectionStart,t=this._value.substring(0,e).split("\n").length,n=this.gutter.querySelector(".me-gutter-active");n&&n.classList.remove("me-gutter-active");const r=this.gutter.children[t-1];r&&r.classList.add("me-gutter-active")}_handleSmartEnter(e){const t=this.textarea,n=t.selectionStart,r=t.value,i=r.lastIndexOf("\n",n-1)+1,o=r.slice(i,n),s=o.match(/^(\s*)([-*+]|\d+\.)\s(.*)/);if(s){const o=s[1],a=s[2];if(!s[3].trim())return e.preventDefault(),t.value=r.slice(0,i)+"\n"+r.slice(n),t.selectionStart=t.selectionEnd=i,this._value=t.value,this._pushHistory(),this._renderGutter(),void this._emit("change",this._value);let l=a;if(/^\d+\.$/.test(a)){const e=parseInt(a,10);isNaN(e)||(l=e+1+".")}e.preventDefault();const c="\n"+o+l+" ";return t.value=r.slice(0,n)+c+r.slice(t.selectionEnd),t.selectionStart=t.selectionEnd=n+c.length,this._value=t.value,this._pushHistory(),this._renderGutter(),void this._emit("change",this._value)}const a=o.match(/^(\s*>+\s?)(.*)/);if(a){const o=a[1];if(!a[2].trim())return e.preventDefault(),t.value=r.slice(0,i)+"\n"+r.slice(n),t.selectionStart=t.selectionEnd=i,this._value=t.value,this._pushHistory(),this._renderGutter(),void this._emit("change",this._value);e.preventDefault();const s="\n"+o;t.value=r.slice(0,n)+s+r.slice(t.selectionEnd),t.selectionStart=t.selectionEnd=n+s.length,this._value=t.value,this._pushHistory(),this._renderGutter(),this._emit("change",this._value)}}_handleBracketAutoClose(e){if(!this.config.autoBrackets)return;const t=this.textarea,n=e.key,r=Ve[n];if(!r)return;const i=t.selectionStart,o=t.selectionEnd;if(i!==o){e.preventDefault();const s=t.value.slice(i,o),a=n+s+r;return t.value=t.value.slice(0,i)+a+t.value.slice(o),t.selectionStart=i+1,t.selectionEnd=i+1+s.length,this._value=t.value,this._pushHistory(),void this._emit("change",this._value)}const s=t.value[i]||"";if(n===r){if(s===r)return e.preventDefault(),void(t.selectionStart=t.selectionEnd=i+1);if(/\w/.test(s))return}e.preventDefault();const a=n+r;t.value=t.value.slice(0,i)+a+t.value.slice(o),t.selectionStart=t.selectionEnd=i+1,this._value=t.value,this._pushHistory(),this._emit("change",this._value)}_bindDragDrop(){const e=this.textarea;if(!e)return;const t=e=>{e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy")},n=e=>{e.preventDefault();const t=e.dataTransfer?.files;if(t&&t.length)return void Array.from(t).forEach(e=>{if(e.type.startsWith("image/")){const t=new FileReader;t.onload=()=>{this.insert(`![${e.name}](${t.result})\n`)},t.readAsDataURL(e)}else if(e.type.startsWith("text/")||/\.(md|txt|js|ts|json|css|html|xml|yml|yaml)$/i.test(e.name)){const t=new FileReader;t.onload=()=>this.insert(t.result),t.readAsText(e)}});const n=e.dataTransfer?.getData("text/plain");n&&this.insert(n)};e.addEventListener("dragover",t),e.addEventListener("drop",n),this._cleanups.push(()=>{e.removeEventListener("dragover",t),e.removeEventListener("drop",n)})}_buildOutline(){if(!this.config.outline||!this.previewEl)return;const e=this.el.querySelector(".me-outline");e&&e.remove();const n=[],r=/]*>(.+?)<\/h\1>/gi;let i;for(;null!==(i=r.exec(this.previewEl.innerHTML));)n.push({level:parseInt(i[1],10),id:i[2],text:i[3].replace(/<[^>]+>/g,"")});if(!n.length)return;const o=document.createElement("div");o.className="me-outline",o.innerHTML=`
    ${b("outline")||"大纲"}
    `;const s=(e,n)=>{let r="
      ",i=0;for(;i${t(o.text)}`;const a=[];let l=i+1;for(;lo.level;)a.push(e[l]),l++;a.length&&(r+=s(a,o.level+1)),r+="",i=l>i+1?l:i+1}return r+"
    "};o.innerHTML+=s(n,1),this.el.appendChild(o),o.addEventListener("click",e=>{const t=e.target.closest("a");if(!t)return;e.preventDefault();const n=t.getAttribute("href").slice(1),r=this.previewEl.querySelector("#"+CSS.escape(n));if(r){r.scrollIntoView({behavior:"smooth",block:"start"});const e=this._value.indexOf(r.textContent||"");-1!==e&&(this.textarea.focus(),this.textarea.setSelectionRange(e,e))}})}_updateOutline(){this.config.outline&&(this._outlineTimer&&clearTimeout(this._outlineTimer),this._outlineTimer=setTimeout(()=>this._buildOutline(),300))}_trackOutlineScroll(){if(!this.config.outline||!this.previewPane)return;let e=!1;const t=()=>{e||(e=!0,requestAnimationFrame(()=>{if(e=!1,!this.el)return;const t=this.el.querySelector(".me-outline");if(!t)return;const n=this.previewEl.querySelectorAll("h1, h2, h3, h4, h5, h6");let r="";const i=this.previewPane.scrollTop+80;n.forEach(e=>{e.offsetTop<=i&&(r=e.id)}),t.querySelectorAll("a").forEach(e=>{e.classList.toggle("me-outline-active",e.getAttribute("href")==="#"+r)})}))};this.previewPane.addEventListener("scroll",t,{passive:!0}),this._cleanups.push(()=>this.previewPane.removeEventListener("scroll",t))}_scheduleHistory(){this._historyTimer&&clearTimeout(this._historyTimer),this._historyTimer=setTimeout(()=>this._pushHistory(),this.config.historyDebounce||400)}_pushHistory(){if(this._history[this._historyIndex]===this._value)return;this._history=this._history.slice(0,this._historyIndex+1),this._history.push(this._value);const e=this.config.historyLimit>0?this.config.historyLimit:100;for(;this._history.length>e;)this._history.shift();this._historyIndex=this._history.length-1}undo(){return this._historyIndex<=0||(this._historyIndex--,this._applyHistory()),this}redo(){return this._historyIndex>=this._history.length-1||(this._historyIndex++,this._applyHistory()),this}canUndo(){return this._historyIndex>0}canRedo(){return this._historyIndexthis._wrapSelection("**","**"),italic:()=>this._wrapSelection("*","*"),strikethrough:()=>this._wrapSelection("~~","~~"),underline:()=>this._wrapSelection("",""),code:()=>this._wrapSelection("`","`"),h1:()=>this._toggleLinePrefix("# "),h2:()=>this._toggleLinePrefix("## "),h3:()=>this._toggleLinePrefix("### "),quote:()=>this._toggleLinePrefix("> "),ul:()=>this._toggleLinePrefix("- "),ol:()=>this._toggleLinePrefix("1. "),indent:()=>this._handleTab(!1),outdent:()=>this._handleTab(!0),hr:()=>this._insertBlock("\n---\n"),link:()=>this._insertLink(),image:()=>this._insertImage(),table:()=>this._insertTable(),undo:()=>this.undo(),redo:()=>this.redo(),edit:()=>this.setMode("edit"),split:()=>this.setMode("split"),preview:()=>this.setMode("preview"),fullscreen:()=>this.toggleFullscreen(),zen:()=>this.toggleZen(),wordwrap:()=>this.toggleWordWrap(),formatTable:()=>this._formatTable()}[e];if(n)return n.apply(this,t),this;if(this._customActions&&"function"==typeof this._customActions[e])try{this._customActions[e].apply(this,t)}catch(e){}return this}_wrapSelection(e,t){const n=this.textarea,r=n.selectionStart,i=n.selectionEnd,o=n.value.slice(r,i),s=o||"text",a=e+s+t;n.value=n.value.slice(0,r)+a+n.value.slice(i),n.focus(),o?(n.selectionStart=r+e.length,n.selectionEnd=r+e.length+s.length):n.selectionStart=n.selectionEnd=r+e.length,this._value=n.value,this._pushHistory(),this._render(),this._updateWordCount(),this._emit("change",this._value)}_toggleLinePrefix(e){const t=this.textarea,n=t.selectionStart,r=t.value.lastIndexOf("\n",n-1)+1,i=t.value.indexOf("\n",n),o=-1===i?t.value.length:i,s=t.value.slice(r,o),a=s.match(/^(#{1,6}\s*|>\s*|[-*+]\s*|\d+\.\s*)/);let l;l=a&&a[0]===e?s.slice(e.length):a?e+s.slice(a[0].length):e+s,t.value=t.value.slice(0,r)+l+t.value.slice(o),t.focus(),t.selectionStart=t.selectionEnd=r+l.length,this._value=t.value,this._pushHistory(),this._render(),this._updateWordCount(),this._emit("change",this._value)}_insertBlock(e){const t=this.textarea,n=t.selectionStart,r=t.value.slice(0,n),i=(r&&!r.endsWith("\n")?"\n":"")+e;t.value=t.value.slice(0,n)+i+t.value.slice(t.selectionEnd),t.focus();const o=n+i.length;t.selectionStart=t.selectionEnd=o,this._value=t.value,this._pushHistory(),this._render(),this._updateWordCount(),this._emit("change",this._value)}_insertLink(){const e=this.textarea,t=e.selectionStart,n=e.selectionEnd,r=e.value.slice(t,n)||b("link")||"link",i=`[${r}](https://)`;e.value=e.value.slice(0,t)+i+e.value.slice(n),e.focus(),e.selectionStart=t+r.length+3,e.selectionEnd=e.selectionStart+8,this._value=e.value,this._pushHistory(),this._render(),this._emit("change",this._value)}_insertImage(){const e=this.textarea,t=e.selectionStart,n=e.selectionEnd,r=e.value.slice(t,n)||b("image")||"image",i=`![${r}](https://)`;e.value=e.value.slice(0,t)+i+e.value.slice(n),e.focus(),e.selectionStart=t+r.length+4,e.selectionEnd=e.selectionStart+8,this._value=e.value,this._pushHistory(),this._render(),this._emit("change",this._value)}_insertTable(e=3,t=3){let n=`| ${Array.from({length:t},(e,t)=>`${b("tableCols")||"列"}${t+1}`).join(" | ")} |\n| ${Array.from({length:t},()=>"---").join(" | ")} |\n`;for(let r=1;r" ").join(" | ")} |\n`;this._insertBlock("\n"+n)}_formatTable(){const e=this.textarea,t=e.selectionStart,n=e.value.substring(0,t),r=e.value.substring(t),i=n.lastIndexOf("\n\n"),o=r.indexOf("\n\n"),s=-1===i?0:i+2,a=-1===o?e.value.length:t+o,l=e.value.substring(s,a).split("\n").filter(e=>e.includes("|"));if(l.length<2)return;const c=l.map(e=>e.replace(/^\s*\|?\s*|\s*\|?\s*$/g,"").split(/\s*\|\s*/)),d=Math.max(...c.map(e=>e.length)),h=Array(d).fill(3);c.forEach(e=>{e.forEach((e,t)=>{h[t]=Math.max(h[t],e.trim().length)})});const u=(e,t)=>{const n=t-e.length;return e+" ".repeat(Math.max(0,n))},p=c.map(e=>{const t=[];for(let n=0;n{const r=n,i=r.dataset.mode,o=r.dataset.action;if(i)return r.classList.toggle("me-active",i===this._mode),void(r.disabled=!1);r.disabled="fullscreen"!==o&&(t||!!e)&&!("undo"===o||"redo"===o)})}toggleFullscreen(){this._fullscreen=!this._fullscreen,this.el.classList.toggle("me-fullscreen",this._fullscreen);const e=this.toolbarEl.querySelector(".me-btn-fullscreen");if(e&&(e.title=this._fullscreen?b("fullscreenExit")||"退出全屏":b("fullscreen")||"全屏"),this._emit("fullscreen",this._fullscreen),"function"==typeof this.config.onFullscreen)try{this.config.onFullscreen(this._fullscreen,this)}catch(e){}return this}isFullscreen(){return this._fullscreen}exitFullscreen(){return this._fullscreen&&this.toggleFullscreen(),this}toggleZen(){return this._zenMode=!this._zenMode,this.el&&this.el.classList.toggle("me-zen",this._zenMode),this._zenMode&&this.toolbarEl?(this._zenMouseHandler=e=>{this.toolbarEl.style.opacity=e.clientY<40?"1":"0",this.toolbarEl.style.pointerEvents=e.clientY<40?"auto":"none"},this.toolbarEl.style.transition="opacity 0.2s",this.toolbarEl.style.opacity="0",this.toolbarEl.style.pointerEvents="none",document.addEventListener("mousemove",this._zenMouseHandler),this.statusEl&&(this.statusEl.style.display="none")):(this._zenMouseHandler&&(document.removeEventListener("mousemove",this._zenMouseHandler),this._zenMouseHandler=null),this.toolbarEl&&(this.toolbarEl.style.opacity="",this.toolbarEl.style.pointerEvents="",this.toolbarEl.style.transition=""),this.statusEl&&(this.statusEl.style.display="")),this._emit("zenChange",this._zenMode),this}isZen(){return this._zenMode}toggleWordWrap(){return this._wordWrap=!this._wordWrap,this.textarea&&(this.textarea.style.whiteSpace=this._wordWrap?"pre-wrap":"pre"),this}setWordWrap(e){return this._wordWrap=!!e,this.textarea&&(this.textarea.style.whiteSpace=this._wordWrap?"pre-wrap":"pre"),this}isWordWrap(){return this._wordWrap}_initFloatingToolbar(){if("undefined"==typeof document)return;if(!document.getElementById("me-float-style")){const e=document.createElement("style");e.id="me-float-style",e.textContent=".me-float-toolbar{position:absolute;z-index:25;display:flex;gap:4px;padding:4px 6px;background:var(--md-toolbar-bg,#f8f9fa);border:1px solid var(--md-border,rgba(0,0,0,0.1));border-radius:8px;box-shadow:0 8px 24px -8px rgba(0,0,0,0.2);opacity:0;transform:translateY(4px);transition:opacity .15s,transform .15s;pointer-events:none}.me-float-toolbar.me-visible{opacity:1;transform:translateY(0);pointer-events:auto}.me-float-toolbar .me-btn{width:28px;height:28px}",document.head.appendChild(e)}if(!this._floatingEnabled)return;const e=this.textarea,t=()=>{if(this._destroyed||this.config.readOnly||!this._floatingEnabled)return;const t=e.selectionStart;if(t===e.selectionEnd)return void this._hideFloatingToolbar();this._floatingToolbar&&this._floatingToolbar.parentNode||this._buildFloatingToolbar();const n=e.getBoundingClientRect(),r=e.value.substring(0,t).split("\n").length-1,i=parseInt(getComputedStyle(e).lineHeight,10)||22,o=parseInt(getComputedStyle(e).paddingTop,10)||16,s=e.scrollTop;let a=n.top+o+r*i-s-36-4;an.bottom&&(a=n.bottom-36-4);let l=n.left+8*("backward"!==e.selectionDirection?(e.selectionEnd-e.selectionStart)/2:0)+10;lc&&(l=c),this._floatingToolbar.style.top=a+"px",this._floatingToolbar.style.left=l+"px",this._floatingToolbar.classList.add("me-visible")},n=()=>{this._hideFloatingToolbar()};let r=e.selectionStart,i=e.selectionEnd;this._selectionTimer=setInterval(()=>{if(this._destroyed||!document.body.contains(e)||!this._floatingEnabled)return;const t=e.selectionStart,n=e.selectionEnd;if(t!==r||n!==i){r=t,i=n;const e=this._value.slice(t,n);this._emit("selectionChange",{start:t,end:n,text:e})}},500),this._cleanups.push(()=>{this._selectionTimer&&(clearInterval(this._selectionTimer),this._selectionTimer=null)}),e.addEventListener("mouseup",()=>{this._floatingEnabled&&setTimeout(t,0)}),e.addEventListener("keyup",()=>{this._floatingEnabled&&(e.selectionStart!==e.selectionEnd?setTimeout(t,0):setTimeout(n,0),this._emit("cursorMove",this.getCursorPosition()))}),e.addEventListener("blur",()=>setTimeout(n,300)),e.addEventListener("click",()=>{e.selectionStart===e.selectionEnd&&setTimeout(n,0)})}toggleFloatingToolbar(){if(this._floatingEnabled=!this._floatingEnabled,this._floatingEnabled){if(!this._selectionTimer){const e=this.textarea;this._selectionTimer=setInterval(()=>{!this._destroyed&&this._floatingEnabled&&(e.selectionStart,e.selectionEnd)},500),this._cleanups.push(()=>{this._selectionTimer&&(clearInterval(this._selectionTimer),this._selectionTimer=null)})}}else this._selectionTimer&&(clearInterval(this._selectionTimer),this._selectionTimer=null),this._floatingToolbar&&(this._floatingToolbar.parentNode&&this._floatingToolbar.parentNode.removeChild(this._floatingToolbar),this._floatingToolbar=null);return this}isFloatingToolbar(){return this._floatingEnabled}_buildFloatingToolbar(){const e=document.createElement("div");e.className="me-float-toolbar",["bold","italic","code","link","strikethrough"].forEach(t=>{const n=this._createBtn(t);n.addEventListener("mousedown",e=>{e.preventDefault(),e.stopPropagation(),this.exec(t),setTimeout(()=>this.textarea.focus(),0)}),e.appendChild(n)}),this.editorPane.appendChild(e),this._floatingToolbar=e}_hideFloatingToolbar(){this._floatingToolbar&&this._floatingToolbar.classList.remove("me-visible")}_bindToolbarKeyboard(){if(!this.toolbarEl)return;const e=e=>{const t=[...this.toolbarEl.querySelectorAll(".me-btn:not(:disabled)")];if(!t.length)return;const n=t.indexOf(document.activeElement);-1!==n&&("ArrowRight"===e.key?(e.preventDefault(),t[(n+1)%t.length].focus()):"ArrowLeft"===e.key?(e.preventDefault(),t[(n-1+t.length)%t.length].focus()):"Home"===e.key?(e.preventDefault(),t[0].focus()):"End"===e.key&&(e.preventDefault(),t[t.length-1].focus()))};this.toolbarEl.addEventListener("keydown",e),this._cleanups.push(()=>this.toolbarEl.removeEventListener("keydown",e))}_initAriaLive(){if(!this.el)return;const e=document.createElement("div");e.className="me-sr-only",e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),this.el.appendChild(e),this._ariaLive=e}_announce(e){this._ariaLive&&(this._ariaLive.textContent="",requestAnimationFrame(()=>{this._ariaLive.textContent=e}))}_syncScroll(){if(this._syncing)return;this._syncing=!0;const e=this.textarea;if(!e)return void(this._syncing=!1);const t=e.scrollHeight-e.clientHeight;if(t<=0)return void(this._syncing=!1);const n=e.scrollTop/t;if(this.gutter){const t=this.gutter.scrollHeight-this.gutter.clientHeight;this.gutter.scrollTop=t>0?n*t:e.scrollTop}if(this.config.syncScroll&&"split"===this._mode&&this.previewPane){const e=this.previewPane.scrollHeight-this.previewPane.clientHeight;e>0&&(this.previewPane.scrollTop=n*e)}requestAnimationFrame(()=>{this._syncing=!1})}_updateWordCount(){if(!this.config.wordCount||!this.statusEl)return;const e=this._value||"",t=e.length,n=(e.match(/[\u4e00-\u9fa5]/g)||[]).length+(e.replace(/[\u4e00-\u9fa5]/g," ").match(/[a-zA-Z0-9]+/g)||[]).length,r=e?e.split("\n").length:0,i=Math.max(1,Math.ceil(n/300));this.statusEl.textContent=[`${b("characters")}: ${t}`,`${b("words")}: ${n}`,`${b("lines")}: ${r}`,`${b("readingTime")}: ${i} ${b("minutes")}`].join(" · ")}getStats(){const e=this._value||"",t=(e.match(/[\u4e00-\u9fa5]/g)||[]).length,n=(e.replace(/[\u4e00-\u9fa5]/g," ").match(/[a-zA-Z0-9]+/g)||[]).length;return{characters:e.length,words:t+n,chineseChars:t,englishWords:n,lines:e?e.split("\n").length:0,readingTime:Math.max(1,Math.ceil((t+n)/300))}}getSelectedText(){return this.textarea?this._value.slice(this.textarea.selectionStart,this.textarea.selectionEnd):""}getCursorPosition(){if(!this.textarea)return{line:1,column:0};const e=this.textarea.selectionStart,t=this._value.substring(0,e),n=t.split("\n").length,r=e-t.lastIndexOf("\n")-1;return{line:n,column:r<0?0:r}}setCursorPosition(e,t=0){if(!this.textarea)return this;const n=this._value.split("\n"),r=Math.max(1,Math.min(e,n.length));let i=0;for(let e=0;e=t.length?"":t[n]}getValue(){return this._destroyed?"":this._value}setValue(e,t={}){if(this._destroyed)return this;if(Ue.trigger("beforeChange",this),this._emit("beforeChange",this._value,e),this._value=e||"",this.textarea.value=this._value,t.silent||this._pushHistory(),this._render(),this._renderGutter(),this._updateWordCount(),this._updateOutline(),this.gutter&&(this.gutter.scrollTop=0),this.textarea.scrollTop=0,!t.silent&&(this._emit("change",this._value),"function"==typeof this.config.onChange))try{this.config.onChange(this._value,this)}catch(e){}return this._emit("afterChange",this._value),Ue.trigger("afterChange",this),this}getHTML(){Ue.trigger("beforeRender",this),this._emit("beforeRender",this);let e=this._renderFn(this._value,{highlight:this._highlightFn||void 0,locale:f()});if("function"==typeof this.config.sanitize)try{e=this.config.sanitize(e)}catch(e){}return Ue.trigger("afterRender",this),this._emit("afterRender",this),e}refresh(){return this._lastRenderedValue=null,this._render(),this}copyAsMarkdown(){return"undefined"!=typeof navigator&&navigator.clipboard&&navigator.clipboard.writeText(this._value).then(()=>this._emit("copy",{type:"markdown"})).catch(()=>{}),this}copyAsHTML(){const e=this.getHTML();if("undefined"!=typeof navigator&&navigator.clipboard){const t=new Blob([e],{type:"text/html"}),n=new ClipboardItem({"text/html":t,"text/plain":new Blob([this._value],{type:"text/plain"})});navigator.clipboard.write([n]).then(()=>this._emit("copy",{type:"html"})).catch(()=>{})}return this}insert(e,t={}){const n=this.textarea,r=n.selectionStart,i=n.selectionEnd;return n.value=n.value.slice(0,r)+e+n.value.slice(t.replace?i:r),n.focus(),n.selectionStart=n.selectionEnd=r+e.length,this._value=n.value,this._pushHistory(),this._render(),this._updateWordCount(),this._emit("change",this._value),this}wrap(e,t){return this._wrapSelection(e,t||e),this}focus(){return this.textarea&&this.textarea.focus(),this}blur(){return this.textarea&&this.textarea.blur(),this}enable(){return this.textarea&&(this.textarea.disabled=!1),this.el&&this.el.classList.remove("me-disabled"),this}disable(){return this.textarea&&(this.textarea.disabled=!0),this.el&&this.el.classList.add("me-disabled"),this}isDisabled(){return!!this.textarea&&this.textarea.disabled}setReadOnly(e){return this.config.readOnly=!!e,this.textarea&&(this.textarea.readOnly=!!e),this.el&&this.el.classList.toggle("me-readonly",!!e),this._updateModeButtons(),this}isReadOnly(){return!!this.config.readOnly}on(e,t){return this._listeners[e]||(this._listeners[e]=[]),this._listeners[e].push(t),()=>this.off(e,t)}off(e,t){const n=this._listeners[e];return n&&(this._listeners[e]=n.filter(e=>e!==t)),this}_emit(e,...t){const n=this._listeners[e];n&&n.forEach(e=>{try{e(...t,this)}catch(e){}})}use(e,t={}){let n=e;if("string"==typeof e&&(n=ye[e],!n))return this;if(!n||"object"!=typeof n)return this;const r={...n,...t};if("function"==typeof r.install)try{const e=r.install(this,t);e&&"function"==typeof e.then&&e.catch(e=>{})}catch(e){}return this._plugins.push(r),this}unuse(e){const t=this._plugins.findIndex(t=>t.name===e);if(-1===t)return this;const n=this._plugins[t];if("function"==typeof n.destroy)try{n.destroy(this)}catch(e){}return this._plugins.splice(t,1),this}getPlugins(){return[...this._plugins]}addToolbarButton(e){if(!e||!e.action)return this;const n=document.createElement("button");return n.type="button",n.className=`me-btn me-btn-custom-${e.action}`,n.title=e.title||e.action,n.setAttribute("aria-label",e.title||e.action),n.innerHTML=e.icon||`${t(e.text||e.action)}`,"function"==typeof e.onClick?n.addEventListener("click",t=>{t.stopPropagation(),e.onClick(this)}):e.action&&(n.dataset.action=e.action,this._customActions=this._customActions||{},this._customActions[e.action]=e.handler),this.toolbarEl.insertBefore(n,this.toolbarEl.querySelector(".me-toolbar-group")||null),this}registerShortcut(e,t,n=""){if(!e)return this;const r=e.toLowerCase().split("+"),i=r.pop(),o=r.includes("ctrl")||r.includes("cmd"),s=r.includes("shift"),a=r.includes("alt"),l=r.includes("meta");return this._shortcuts.push({combo:e,key:i,ctrl:o,shift:s,alt:a,meta:l,handler:t,description:n}),this}unregisterShortcut(e){return this._shortcuts=this._shortcuts.filter(t=>t.combo!==e),this}getShortcuts(){return[...this._shortcuts]}configureToolbar(e){return this.toolbarEl?(this.config.toolbar=e,this.toolbarEl.innerHTML="",this._buildToolbar(),this):this}removeToolbarButton(e){if(!this.toolbarEl)return this;const t=this.toolbarEl.querySelector(`.me-btn[data-action="${e}"], .me-btn[data-mode="${e}"]`);return t&&t.remove(),this}registerContextMenu(e=[]){return this._contextMenuItems=e,this}_bindContextMenu(){if(!this.el)return;const e=e=>{const t=document.querySelector(".me-context-menu");t&&t.remove(),this._showContextMenu(e)};this.el.addEventListener("contextmenu",e),this._cleanups.push(()=>this.el.removeEventListener("contextmenu",e))}_showContextMenu(e){e.preventDefault();const t=this.textarea,n=t&&t.selectionStart!==t.selectionEnd,r=[{label:b("undo")||"Undo",action:"undo",shortcut:"Ctrl+Z",disabled:!this.canUndo()},{label:b("redo")||"Redo",action:"redo",shortcut:"Ctrl+Y",disabled:!this.canRedo()},{sep:!0},{label:b("cut")||"Cut",action:"cut",shortcut:"Ctrl+X",disabled:!n},{label:b("copy")||"Copy",action:"copy",shortcut:"Ctrl+C",disabled:!n},{label:b("paste")||"Paste",action:"paste",shortcut:"Ctrl+V",disabled:!!this.config.readOnly},{label:b("selectAll")||"Select All",action:"selectAll",shortcut:"Ctrl+A"}];this._contextMenuItems.length&&(r.push({sep:!0}),this._contextMenuItems.forEach(e=>r.push(e)));const i=document.createElement("div");i.className="me-context-menu",i.style.left=e.clientX+"px",i.style.top=e.clientY+"px",requestAnimationFrame(()=>{const t=i.getBoundingClientRect();t.right>window.innerWidth&&(i.style.left=e.clientX-t.width+"px"),t.bottom>window.innerHeight&&(i.style.top=e.clientY-t.height+"px")}),r.forEach(e=>{if(e.sep){const e=document.createElement("div");return e.className="me-context-menu-sep",void i.appendChild(e)}const t=document.createElement("div");t.className="me-context-menu-item",e.disabled&&t.classList.add("me-disabled"),t.innerHTML=`${e.label}${e.shortcut?`${e.shortcut}`:""}`,t.addEventListener("click",t=>{t.stopPropagation(),e.disabled||(e.onClick?e.onClick():e.action&&this._execContextAction(e.action),this._hideContextMenu())}),i.appendChild(t)}),document.body.appendChild(i),document.addEventListener("click",e=>{i.contains(e.target)||this._hideContextMenu()},{once:!0}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this._hideContextMenu()},{once:!0})}_hideContextMenu(){const e=document.querySelector(".me-context-menu");e&&e.remove()}_execContextAction(e){const t=this.textarea;if(t)switch(e){case"undo":this.undo();break;case"redo":this.redo();break;case"cut":document.execCommand("cut");break;case"copy":document.execCommand("copy");break;case"paste":document.execCommand("paste");break;case"selectAll":t.focus(),t.select();break;default:this.exec(e)}}toast(e,n={}){if(!this.el||"undefined"==typeof document)return this;const{type:r="info",duration:i=3e3,animation:o="fade"}=n,s=document.createElement("div");s.className=`me-toast me-toast-${r} me-toast-${o}`,s.innerHTML=`${qe[r]||""}${t(String(e))}`,this.el.appendChild(s),requestAnimationFrame(()=>{s.classList.add("me-toast-enter")});const a=()=>{s.classList.remove("me-toast-enter"),s.classList.add("me-toast-leave"),setTimeout(()=>{s.parentNode&&s.parentNode.removeChild(s)},300)};return i>0&&setTimeout(a,i),s.addEventListener("click",a),this}setLocale(e){return this._i18nCtx&&this._i18nCtx.set(e),this}getLocale(){return this._i18nCtx?this._i18nCtx.get():f()}t(e,t){return this._i18nCtx?this._i18nCtx.t(e,t):b(e,t)}setTheme(e){return e?(this.config.theme=e,this._themeCtx&&this._themeCtx.set(e),this):this}getTheme(){return this._themeCtx?this._themeCtx.get():this.config.theme||"auto"}getThemeContext(){return this._themeCtx||null}getStatus(){return{id:this.id,mode:this._mode,theme:this.getTheme(),locale:f(),fullscreen:this._fullscreen,readOnly:this.config.readOnly||!1,disabled:!!this.textarea&&this.textarea.disabled,destroyed:this._destroyed,plugins:this._plugins.map(e=>e.name||"custom")}}destroy(){if(!this._destroyed){if(Ue.trigger("beforeDestroy",this),this._renderRaf&&cancelAnimationFrame(this._renderRaf),this._historyTimer&&clearTimeout(this._historyTimer),this._outlineTimer&&clearTimeout(this._outlineTimer),this._selectionTimer&&(clearInterval(this._selectionTimer),this._selectionTimer=null),this._cleanups.forEach(e=>{try{e()}catch(e){}}),this._cleanups=[],this._shortcuts=[],this._contextMenuItems=[],this._customActions={},this._floatingToolbar&&this._floatingToolbar.parentNode&&this._floatingToolbar.parentNode.removeChild(this._floatingToolbar),this._floatingToolbar=null,this.el&&this.el.querySelectorAll(".me-toast").forEach(e=>e.remove()),this._plugins.forEach(e=>{if("function"==typeof e.destroy)try{e.destroy(this)}catch(e){}}),this._plugins=[],this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el),this.el=null,this.textarea=null,this.previewEl=null,this._destroyed=!0,"function"==typeof this.config.onDestroy)try{this.config.onDestroy(this)}catch(e){}this._emit("destroy"),this._listeners={},Ue.trigger("afterDestroy",this)}}isDestroyed(){return this._destroyed}}Ue._hooks=new Map;const Ke=new Map;for(const[e,t]of Object.entries(a))Ke.set(e,t);const Ge={register(e,t){Ke.set(e,{name:e,enter:t.enter||{},leave:t.leave||{},duration:t.duration||300,easing:t.easing||"cubic-bezier(0.4, 0, 0.2, 1)"})},unregister(e){Ke.delete(e)},get:e=>Ke.get(e)||a[e]||null,getAnimationNames:()=>Array.from(Ke.keys()),getActiveCount:()=>0,cancelAll(){},reset(){Ke.clear();for(const[e,t]of Object.entries(a))Ke.set(e,t)},destroy(){Ke.clear()}},Ye="0.2.3",Ze=[];function Xe(e,t={}){return new Ue(e,t)}function Qe(e,t={}){let n=e;if("string"==typeof e&&(n=ye[e],!n))return ot;if(!n||"object"!=typeof n)return ot;const r=t&&"object"==typeof t&&Object.keys(t).length>0?{...n,...t}:n;return Ze.push(r),ot}function Je(e,t){return Ue.on(e,t)}function et(e,t){return Ue.off(e,t),ot}function tt(e,t){return Ne&&"function"==typeof Ne.switchTheme&&Ne.switchTheme(e),ot}function nt(e){return A&&"function"==typeof A.setCurrentLocale&&A.setCurrentLocale(e),ot}function rt(){if(Ne){try{Ne.clearThemeListeners()}catch(e){}try{Ne.unwatchSystemTheme()}catch(e){}}if(A)try{A.clearLocaleListeners()}catch(e){}if(Ge)try{Ge.cancelAll()}catch(e){}Ze.length=0}function it(){return{version:Ye,theme:Ne&&"function"==typeof Ne.getCurrentTheme?Ne.getCurrentTheme():"auto",locale:A&&"function"==typeof A.getCurrentLocale?A.getCurrentLocale():"zh-CN",globalPlugins:Ze.map(e=>e.name||"custom"),presetPlugins:Object.keys(ye||{})}}Ue.on("beforeCreate",e=>{e&&!e.isDestroyed()&&Ze.forEach(t=>{try{e.use(t)}catch(e){}})});try{"function"==typeof Ne.initTheme&&Ne.initTheme(),"function"==typeof A.initI18n&&A.initI18n()}catch(e){}const ot={VERSION:Ye,version:Ye,MarkdownEditor:Ue,Editor:Ue,create:Xe,use:Qe,on:Je,off:et,setTheme:tt,setLocale:nt,destroy:rt,getStatus:it,parseMarkdown:re,parseTokens:te,renderTokens:ne,safeUrl:Z,slugify:X,clearRenderCache:Y,registerBlockHandler:J,themes:Ne,i18n:A,animations:Ge,plugins:xe,presetPlugins:ye,topologicalSort:ve,validateConfig:be,createInstanceI18n:$,loadRemote:w,exportCSSVars:Me,getCSSVariable:$e,followExternalTheme:Re,adoptFromParent:De,createInstanceTheme:je,DEFAULTS:o,ICONS:n,THEMES:s,EDIT_MODES:l,DEFAULT_TOOLBAR:i,TOOLBAR_ACTIONS:c};"undefined"!=typeof window&&(window.MeEditor=ot),e.DEFAULTS=o,e.DEFAULT_TOOLBAR=i,e.EDIT_MODES=l,e.Editor=Ue,e.ICONS=n,e.MarkdownEditor=Ue,e.MeEditor=ot,e.THEMES=s,e.TOOLBAR_ACTIONS=c,e.VERSION=Ye,e.adoptFromParent=De,e.animationUtils=Ge,e.api=ot,e.clearRenderCache=Y,e.create=Xe,e.createInstanceI18n=$,e.createInstanceTheme=je,e.default=ot,e.destroy=rt,e.exportCSSVars=Me,e.followExternalTheme=Re,e.getCSSVariable=$e,e.getStatus=it,e.i18nUtils=A,e.loadRemote=w,e.meEditor=ot,e.off=et,e.on=Je,e.parseMarkdown=re,e.parseTokens=te,e.pluginUtils=xe,e.presetPlugins=ye,e.registerBlockHandler=J,e.renderTokens=ne,e.safeUrl=Z,e.setLocale=nt,e.setTheme=tt,e.slugify=X,e.themeUtils=Ne,e.topologicalSort=ve,e.use=Qe,e.validateConfig=be,Object.defineProperty(e,"__esModule",{value:!0})}); diff --git a/src/core.ts b/src/core.ts index 2fba20a..0ef3a60 100644 --- a/src/core.ts +++ b/src/core.ts @@ -734,11 +734,18 @@ export class MarkdownEditor { const lines = textBefore.split('\n'); const currentLine = lines.length - 1; const lineHeight = parseInt(getComputedStyle(ta).lineHeight, 10) || 22; + const paddingTop = parseInt(getComputedStyle(ta).paddingTop, 10) || 16; + const scrollOffset = ta.scrollTop; - let top = rect.top + currentLine * lineHeight - 38; + // Place toolbar just above the selected line (4px gap) + const toolbarHeight = 36; + let top = rect.top + paddingTop + currentLine * lineHeight - scrollOffset - toolbarHeight - 4; + // Clamp: don't go above textarea + if (top < rect.top) top = rect.top + 4; + if (top + toolbarHeight > rect.bottom) top = rect.bottom - toolbarHeight - 4; + + // Center horizontally near the middle of selection let left = rect.left + (ta.selectionDirection !== 'backward' ? (ta.selectionEnd - ta.selectionStart) / 2 : 0) * 8 + 10; - - if (top < rect.top) top = rect.top + currentLine * lineHeight + lineHeight + 4; if (left < rect.left) left = rect.left + 4; const maxLeft = rect.right - 200; if (left > maxLeft) left = maxLeft;