# Changelog All notable changes to MetonaEditor will be documented in this file. ## [0.2.5] - 2026-08-09 ### Fixed - **npm 发布配置**: `module` / `exports.import` 不再指向 TS 源码,产物改用标准 `.mjs` / `.cjs` 扩展名(此前 `"type": "module"` 导致 Node 将 `.js` 产物按 ESM 解析,`require()` 拿不到任何导出)。 - **XSS 属性注入**: 链接/图片的 `href`/`src`/`alt`/`title` 及代码块 `language-*` 类与标题属性现经属性级转义(`escapeHTML` 在浏览器环境不转义双引号,此前的属性拼接存在注入面)。 - **本地存储串扰**: 分隔条比例键改为 `metona-editor-divider-${id}`,多实例互不覆盖。 ### Added - **maxLength 生效**: 之前仅有类型与默认值,现绑定 textarea `maxlength` 并对 `setValue` / `insert` / `replaceAll` / `replaceAllRegex` 截断。 - **zenMode 初始状态**: 配置 `zenMode: true` 启动即进入专注模式(此前仅 `toggleZen()` 可进入)。 - **搜索面板大小写 / 全字匹配**: `matchCase` / `wholeWord` 翻译键此前存在但未实现,现补齐 UI 开关与匹配逻辑(普通与正则模式均支持,中文全字边界感知)。 - **内置轻量语法高亮**: 新模块 `src/highlight.ts`,零依赖 tokenizer,13 种语言,`MeEditor.highlight` 即插即用,输出 `me-hl-*` 类。 - **exportPDF**: exportTool 新增 `editor.exportPDF()`(隐藏 iframe + window.print)。 - **imagePaste 尺寸限制**: `editor.use('imagePaste', { maxSizeKB: 500 })`,超限 toast 警告。 - **性能基准**: `npm run bench`(parseMarkdown 1MB ≈ 51ms,highlight 200 函数 ≈ 1.2ms)。 ### Changed - **core.ts 拆分**: 命令、浮动工具栏、右键菜单、大纲 4 组方法拆至独立模块(`commands.ts` / `floating-toolbar.ts` / `context-menu.ts` / `outline.ts`),core 从 1162 行降至 865 行,API 完全兼容。 - **插件状态类型收紧**: 6 个预设插件的实例状态改用 Symbol 键存储(`EditorLike` 接口 + `pluginState` 助手),消灭 `(editor as any).__xxx` 魔法属性。 - **eslint type-aware**: 启用 `parserOptions.project` 与 `consistent-type-imports` / `no-unnecessary-type-assertion` 规则,0 errors。 - **CI 并行化**: 测试拆分为 parser / core / rest 三个并行 job,另设跨 Node 18/20/24 的 verify job(typecheck + lint + build)。 - **docs.html / README 补齐**: 光标选区 API、浮动工具栏、replaceAll、新事件、内置高亮文档。 - 版本同步 0.2.4 → 0.2.5,测试 725 → 768。 --- ## [0.2.4] - 2026-07-25 ### Changed - **Search panel redesigned**: Dark-themed glass-morphism design with SVG icons, smooth animation, improved spacing and focus states. - **README & site install instructions**: Complete npm/CDN/ESM/CJS/Browser import examples added. ### Fixed - **CI hang**: Removed `setInterval` polling in floating toolbar; now uses pure event-driven selection detection. - **Floating toolbar positioning**: Corrected coordinate system (viewport→pane-local) for accurate placement near selected text. - **Floating toolbar toggle button**: Now properly disables/enables via `toggleFloatingToolbar()` API. --- ## [0.2.3] - 2026-07-25 ### Added - **German (de) locale**: Complete translations for all 60+ UI keys. - **Floating format toolbar**: Auto-shows bold/italic/code/link/strikethrough buttons above text selection. - **Cursor/selection APIs**: `getSelectedText()`, `getCursorPosition()`, `setCursorPosition()`, `scrollToLine()`, `selectLine()`, `selectAll()`. - **Content manipulation APIs**: `replaceAll()`, `replaceAllRegex()`, `lineCount()`, `getLine()`. - **New events**: `selectionChange` and `cursorMove` emitted for cursor/selection tracking. - **`floatingToolbar` config option**: Enable/disable floating toolbar (default `true`). ### Changed - **`floatingToolbar` added to `DEFAULTS` and `EditorOptions` type**. - **6 locales now**: zh-CN, en-US, ja, ko, fr, de. ### Fixed - **`onLinkClick` type fix**: Removed `as any` cast; properly typed in `EditorOptions` and `DEFAULTS`. - **Version consistency**: All files synced to 0.2.3. --- ## [0.2.2] - 2026-07-25 ### Added - **French (fr) locale**: Complete translations for all 60+ UI keys. - **Outline scroll tracking**: Active heading auto-highlights in outline panel as you scroll. - **Table auto-format**: `exec('formatTable')` aligns column widths in Markdown tables. - **Code block title**: ` ```js title=hello.js ` renders a styled title bar above code blocks. - **Escaped pipe in tables**: `\|` in table cells no longer splits columns. - **Custom block token fallback render**: Unknown token types now render as `
` instead of empty string. - **Gutter incremental update**: Line number gutter uses DOM diff instead of full innerHTML replacement. - **694 tests** (up from 684). ### Changed - **All 6 plugins now use closure-based state** — searchReplace, imagePaste, shortcutHelp, fileSystem, autoSave refactored for thread safety. - **shortcutHelp plugin is now i18n-aware** — shortcut descriptions follow the active locale. - **Context menu labels (Cut/Copy/Paste/Select All) are now i18n-translated** across all 5 locales. - **Warm theme now includes `progressBg` and `closeHoverBg`** for completeness. - **Fenced code block regex improved** to capture optional info string attributes. ### Fixed - Plugin `this` context pollution eliminated for all 6 preset plugins. - Context menu labels no longer hardcoded to English. - Warm theme missing CSS variable fields restored. --- ## [0.2.1] - 2026-07-25 ### Added - **Reference link/image resolution**: Full support for `[text][ref]` and `![alt][ref]` syntax with `[ref]: url` definitions. - **Right-click context menu**: Built-in undo/redo/cut/copy/paste/selectAll with custom item support. - **RTL (Right-to-Left) CSS support**: Full RTL layout for Arabic, Hebrew, Persian and other RTL languages. - **Japanese (ja) and Korean (ko) locales**: Complete translations for all 60+ UI keys. - **Divider position persistence**: Split-view divider ratio saved to localStorage and restored on reload. - **Regex search support**: Toggle regex mode in search panel with `.*` button. - **Export HTML with embedded CSS**: `exportHTML` now includes minimal CSS styles for standalone viewing. - **`beforeChange` / `afterChange` lifecycle hooks**: Instance and global hooks that fire around content changes. - **`copyAsMarkdown()` / `copyAsHTML()` APIs**: Copy editor content to clipboard as Markdown or rich HTML. - **New test suites**: `tests/index.test.ts` (global API) and `tests/styles.test.ts` (CSS injection). - **684 tests** (up from 610), 9 test suites (up from 7). ### Changed - **autoSave plugin refactored**: Uses closure-based state per instance instead of `this` context, preventing state conflicts when the same plugin object is shared across multiple editors. - **Plugin `install()` now receives `options` as second argument** for cleaner API. - **RTL locale detection improved**: Now detects RTL by language prefix (e.g., `ar-SA` → RTL). ### Fixed - Reference link syntax `[text][ref]` now correctly resolves to links instead of raw text. - Reference image syntax `![alt][ref]` no longer produces empty `src=""`. - autoSave plugin state isolation when used across multiple editor instances. - Footnote definitions no longer incorrectly consumed by reference definition parser. --- ## [0.2.0] - 2026-07-23 ### Added - **TypeScript full rewrite**: All 12 source modules in TypeScript strict mode with complete type exports. - **Parser 99% line coverage**: Self-built Markdown parser with 14 block-level handlers. - **parseTokens / renderTokens API**: Separate tokenization and rendering for transform pipelines. - **registerBlockHandler**: Extensible block syntax via handler registration. - **610 tests**: Comprehensive test coverage across 7 suites. - **Triple emphasis `***text***`**: Bold+italic combined formatting. - **Link text inline formatting**: Bold, italic, and code within link text. - **Backslash escape**: `\*`, `\_`, `\\` for literal punctuation. - **Tab-indented code blocks**: Tab or 4-space indented code. ### Changed - **Plugin system v2**: Topological sort dependency management, 6 preset plugins. - **Theme system overhaul**: CSS variable-based, instance isolation, external theme following. - **i18n overhaul**: Instance-level locale isolation, plural rules, remote loading. --- ## [0.1.15] - 2026-07-21 ### Added - Parser short and medium-term improvements. - Triple emphasis syntax `***bold italic***`. - Link text inline formatting support. - Backslash escape sequences. - `parseTokens` / `renderTokens` separation API. --- ## [0.1.14] - 2026-07-20 ### Added - Syntax highlighting feature (reverted in 0.1.15). - Mermaid.js CDN support in demo page. --- ## [0.1.7] - 2026-07-19 ### Added - Line number gutter with active line highlighting. - Smart Enter (list/quote continuation). - Bracket auto-close with selection wrapping. - Outline panel. --- ## [0.1.6] - 2026-07-18 ### Added - `topologicalSort` for plugin dependency resolution. - `validateConfig` for plugin configuration validation. - `editor.unuse()` to uninstall plugins. - `editor.registerShortcut()` / `unregisterShortcut()`. - `editor.toast()` notification API. --- ## [0.1.5] - 2026-07-17 ### Added - Instance-level theme context (`createInstanceTheme`). - `followExternalTheme` / `adoptFromParent` for external theme following. - `exportCSSVars` / `getCSSVariable` for theme inspection. - `applyThemeToElement` for scoped theme application. --- ## [0.1.4] - 2026-07-16 ### Added - Setext headings (underlined H1/H2). - Nested lists (3+ levels). - Indented code blocks (4 spaces / tab). - HTML comment passthrough. - Entity reference protection. - Hard line breaks (2 trailing spaces). - Link titles with single quotes. - LaTeX math formulas (`$inline$` / `$$block$$`). - Footnotes `[^id]`. - Definition lists (`Term\n: definition`). - Backtick exact matching (`` ` ``). - Enhanced emoji set (150+). --- ## [0.1.3] - 2026-07-15 ### Fixed - `exec` custom action support via `_customActions`. - `refresh()` method for forced re-render. - Focus/blur event parameter fixes. --- ## [0.1.2] - 2026-07-14 ### Added - Highlight marker `==text==`. - Superscript `x^2^` and subscript `H~2~O`. - Emoji shortcodes `:smile:` (100+ emojis). - Table column alignment (`:---:`, `---:`). - Read-only mode with `readOnly` config and `setReadOnly()`. --- ## [0.1.0] - 2026-07-10 ### Added - Initial release. - Markdown editor with edit/split/preview modes. - Self-built parser (CommonMark + GFM). - Plugin system with autoSave, exportTool, searchReplace. - Theme system (light/dark/auto). - i18n (zh-CN/en-US). - Toolbar, shortcuts, history stack.