feat: v0.2.1 — reference links, context menu, RTL, ja/ko, regex search, hooks, copy API
CI / test (16.x) (push) Canceled after 0s
CI / test (18.x) (push) Canceled after 0s
CI / test (20.x) (push) Canceled after 0s

## Added
- Reference link/image resolution: [text][ref] + ![alt][ref] with [ref]: url definitions
- Right-click context menu: undo/redo/cut/copy/paste/selectAll + custom items
- RTL CSS layout support for Arabic, Hebrew, Persian etc.
- Japanese (ja) and Korean (ko) locales with 60+ keys each
- Divider position localStorage persistence
- Regex search toggle in search/replace panel
- Export HTML with embedded CSS styles
- beforeChange / afterChange lifecycle hooks (instance + global)
- copyAsMarkdown() / copyAsHTML() clipboard APIs
- CHANGELOG.md, CONTRIBUTING.md, CI workflow (.github/workflows/ci.yml)
- 2 new test suites: index.test.ts, styles.test.ts (684 total tests, +74)

## Changed
- autoSave plugin: closure-based state per instance instead of this context
- Plugin install() now receives options as second argument
- RTL locale detection: now uses language prefix (ar-SA → RTL)
- Rollup dev mode: only builds UMD format
- prepublishOnly now includes typecheck + test
- Version bumped to 0.2.1

## Fixed
- [text][ref] now correctly renders as link (was raw text)
- ![alt][ref] no longer produces empty src
- autoSave plugin state isolation across multiple editor instances
- Footnote definitions no longer consumed by refDef handler
This commit is contained in:
2026-07-25 08:53:58 +08:00
parent 16464af0ae
commit 1cd5b63174
22 changed files with 1448 additions and 116 deletions
+56 -53
View File
@@ -55,61 +55,64 @@ export default [
},
plugins: [...basePlugins, ...devPlugins],
},
// ES Module
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.esm.js',
format: 'es',
exports: 'named',
sourcemap: true,
// Only build all formats in production
...(isDev ? [] : [
// ES Module
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.esm.js',
format: 'es',
exports: 'named',
sourcemap: true,
},
plugins: basePlugins,
},
plugins: basePlugins,
},
// CommonJS
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.cjs.js',
format: 'cjs',
exports: 'named',
sourcemap: true,
// CommonJS
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.cjs.js',
format: 'cjs',
exports: 'named',
sourcemap: true,
},
plugins: basePlugins,
},
plugins: basePlugins,
},
// UMD minified
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.min.js',
format: 'umd',
name: 'MeEditor',
exports: 'named',
sourcemap: false,
// UMD minified
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.min.js',
format: 'umd',
name: 'MeEditor',
exports: 'named',
sourcemap: false,
},
plugins: [
...basePlugins,
terser({
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log', 'console.warn'],
passes: 2,
},
format: { comments: false },
mangle: { toplevel: true },
}),
],
},
plugins: [
...basePlugins,
terser({
compress: {
drop_console: true,
drop_debugger: true,
pure_funcs: ['console.log', 'console.warn'],
passes: 2,
},
format: { comments: false },
mangle: { toplevel: true },
}),
],
},
// TypeScript declarations bundle
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.d.ts',
format: 'es',
// TypeScript declarations bundle
{
input: 'src/index.ts',
output: {
file: 'dist/metona-editor.d.ts',
format: 'es',
},
plugins: [
dts(),
],
},
plugins: [
dts(),
],
},
]),
];