Skip to main content
Version: Next

@editora/plugins

Comprehensive plugin distribution package for Editora.

Installation

npm i @editora/plugins @editora/core

If you use plugin-driven UI (tables/dialogs/pickers), also import:

import "@editora/plugins/styles.css";

API Surface

SurfaceTypeNotes
HeadingPlugin, BoldPlugin, ItalicPlugin, UnderlinePlugin, StrikethroughPluginPlugin factoriesCore formatting plugins
ListPlugin, ChecklistPluginPlugin factoriesList and checklist behaviors
HistoryPluginPlugin factoryUndo/redo stack integration
LinkPlugin, TablePlugin, AnchorPlugin, EmbedIframePluginPlugin factoriesInsertion/structure plugins
BlockquotePlugin, CodePlugin, CodeSamplePluginPlugin factoriesQuote/code tooling
ClearFormattingPluginPlugin factoryFormatting reset behavior
FontSizePlugin, FontFamilyPlugin, LineHeightPluginPlugin factoriesTypography controls
TextAlignmentPlugin, IndentPlugin, DirectionPlugin, CapitalizationPluginPlugin factoriesLayout + writing direction controls
TextColorPlugin, BackgroundColorPluginPlugin factoriesColor tooling
MathPlugin, SpecialCharactersPlugin, EmojisPluginPlugin factoriesCharacter/math insertion
PreviewPlugin, PrintPlugin, FullscreenPluginPlugin factoriesViewing/output helpers
PageBreakPlugin, FootnotePlugin, MergeTagPlugin, TemplatePluginPlugin factoriesDocument authoring helpers
CommentsPlugin, SpellCheckPlugin, A11yCheckerPluginPlugin factoriesCollaboration + quality plugins
MediaManagerPlugin, DocumentManagerPluginPlugin factoriesManager-backed plugins
setMediaManagerConfig/getMediaManagerConfigFunctionsMedia manager runtime config
setDocumentManagerConfig/getDocumentManagerConfigFunctionsDocument manager runtime config
setGlobalApiConfig/getGlobalApiConfig/getGlobalApiHeaders/buildApiUrlFunctionsShared API config layer
ApiConfig, MediaManagerConfig, DocumentManagerConfigType exportsConfig contracts
@editora/plugins/liteEntry exportLightweight subset for smaller bundles
@editora/plugins/enterpriseEntry exportAdvanced/specialized workflow, compliance, and QA plugins
@editora/plugins/<plugin-name>Subpath exportsPer-plugin imports for tree-shaking/lazy loading
@editora/plugins/styles.cssCSS exportPlugin UI styles (table toolbar, dialogs, color pickers)

Entry Paths

All plugin entry paths are completely free (MIT) and fully customizable.

  • @editora/plugins: full catalog
  • @editora/plugins/lite: common/core subset
  • @editora/plugins/enterprise: advanced/specialized subset
  • @editora/plugins/<plugin-name>: granular subpath imports

Enterprise Subset Includes

  • MentionPlugin, TrackChangesPlugin, VersionDiffPlugin, ConditionalContentPlugin, DataBindingPlugin
  • ContentRulesPlugin, CitationsPlugin, ApprovalWorkflowPlugin, PIIRedactionPlugin, SmartPastePlugin
  • BlocksLibraryPlugin, DocSchemaPlugin, TranslationWorkflowPlugin, SlashCommandsPlugin
  • SpellCheckPlugin, A11yCheckerPlugin, CommentsPlugin, MergeTagPlugin, TemplatePlugin
  • MediaManagerPlugin, DocumentManagerPlugin

Usage Example

import {
BoldPlugin,
ItalicPlugin,
UnderlinePlugin,
HistoryPlugin,
TablePlugin,
SpellCheckPlugin,
} from "@editora/plugins";
import "@editora/plugins/styles.css";

const plugins = [
BoldPlugin(),
ItalicPlugin(),
UnderlinePlugin(),
HistoryPlugin(),
TablePlugin(),
SpellCheckPlugin(),
];

Merge Tag Functional Customization

import { MergeTagPlugin } from "@editora/plugins";

const mergeTag = MergeTagPlugin({
categories: [
{
id: "CUSTOMER",
name: "Customer",
tags: [
{ key: "first_name", label: "First Name", value: "{{customer.first_name}}", preview: "John" },
{ key: "email", label: "Email", value: "{{customer.email}}", preview: "john@acme.com" }
]
},
{
id: "ORDER",
name: "Order",
tags: [
{ key: "id", label: "Order ID", value: "{{order.id}}", preview: "#A-1024" }
]
}
],
defaultCategory: "CUSTOMER",
dialog: {
title: "Insert Variable",
searchPlaceholder: "Search variables...",
emptyStateText: "No variables found",
cancelText: "Close",
insertText: "Insert",
showPreview: true
},
tokenTemplate: "{value}" // supports {key} {label} {category} {value}
});

Template Plugin: Custom Template Registration

import { TemplatePlugin, addCustomTemplate } from "@editora/plugins";

addCustomTemplate({
id: "invoice-basic",
name: "Invoice (Basic)",
category: "Billing",
description: "Simple invoice template",
html: `
<h1>Invoice</h1>
<p><strong>Customer:</strong> {{customer.name}}</p>
<p><strong>Date:</strong> {{today}}</p>
<p><strong>Total:</strong> {{invoice.total}}</p>
`,
tags: ["invoice", "billing"],
});

const plugins = [TemplatePlugin()];

Best Practices

  • Keep toolbar commands aligned with loaded plugin set.
  • Validate structural plugins with undo/redo.
  • Lazy-load heavy, dialog-based plugins in app routes where needed.

Accessibility

Ensure all plugin dialogs and sidebars are keyboard accessible and announce state changes clearly.

Performance Notes

Prefer subpath imports, @editora/plugins/lite, or @editora/plugins/enterprise when you need a smaller default bundle.