CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-editorjs--editorjs

Block-style WYSIWYG editor that outputs clean JSON data instead of HTML markup.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

editor-core.mddocs/

Editor Core

The main EditorJS class provides the primary interface for creating and managing editor instances. It serves as the entry point for all editor functionality.

Capabilities

EditorJS Constructor

Creates a new editor instance with optional configuration.

/**
 * Creates a new Editor.js instance
 * @param configuration - Editor configuration object or holder element ID
 */
constructor(configuration?: EditorConfig | string);

Usage Examples:

import EditorJS from '@editorjs/editorjs';

// Basic initialization with element ID
const editor = new EditorJS('editorjs');

// Full configuration
const editor = new EditorJS({
  holder: 'editorjs',
  autofocus: true,
  placeholder: 'Start typing...',
  tools: {
    paragraph: {
      class: ParagraphTool,
      inlineToolbar: true
    }
  },
  data: {
    blocks: []
  },
  onReady: () => {
    console.log('Editor.js is ready to work!');
  },
  onChange: (api, event) => {
    console.log('Content changed:', event);
  }
});

Static Properties

Access to editor version information.

/**
 * Current version of Editor.js
 */
static readonly version: string;

Usage Examples:

console.log('Editor.js version:', EditorJS.version);

Instance Properties

Key properties available on editor instances.

/**
 * Promise that resolves when editor is fully initialized and ready to work
 */
readonly isReady: Promise<void>;

Usage Examples:

const editor = new EditorJS({ holder: 'editorjs' });

// Wait for editor to be ready before performing operations
await editor.isReady;
console.log('Editor is ready');

// Or use promise syntax
editor.isReady.then(() => {
  console.log('Editor is ready');
});

Data Operations

Core methods for saving and loading editor content.

/**
 * Saves current editor data as JSON
 * @returns Promise resolving to OutputData with blocks array
 */
save(): Promise<OutputData>;

/**
 * Renders data from JSON format into editor blocks
 * @param data - OutputData object containing blocks to render
 */
render(data: OutputData): Promise<void>;

/**
 * Removes all blocks from the editor
 */
clear(): void;

Usage Examples:

// Save editor content
const outputData = await editor.save();
console.log('Saved data:', outputData);
// Output: { version: "2.30.8", time: 1625097600000, blocks: [...] }

// Load content into editor
await editor.render({
  version: "2.30.8",
  time: 1625097600000,
  blocks: [
    {
      type: "paragraph",
      data: {
        text: "Hello World!"
      }
    },
    {
      type: "header",
      data: {
        text: "Chapter 1",
        level: 2
      }
    }
  ]
});

// Clear all content
editor.clear();

Focus Management

Methods for controlling editor focus state.

/**
 * Sets focus to the editor
 * @param atEnd - If true, places caret at the end of the last block
 * @returns true if focus was successfully set
 */
focus(atEnd?: boolean): boolean;

Usage Examples:

// Focus at beginning of editor
editor.focus();

// Focus at end of editor content
editor.focus(true);

// Check if focus was successful
const focused = editor.focus();
if (!focused) {
  console.log('Failed to focus editor');
}

Event System Integration

Methods for subscribing to and managing editor events.

/**
 * Subscribe to editor event
 * @param eventName - Name of the event to listen for
 * @param callback - Function to call when event is triggered
 */
on(eventName: string, callback: (data?: any) => void): void;

/**
 * Unsubscribe from editor event
 * @param eventName - Name of the event to stop listening for
 * @param callback - Function to remove from event listeners
 */
off(eventName: string, callback: (data?: any) => void): void;

/**
 * Trigger editor event
 * @param eventName - Name of the event to emit
 * @param data - Data to pass to event listeners
 */
emit(eventName: string, data: any): void;

Usage Examples:

// Subscribe to block added event
const onBlockAdded = (event) => {
  console.log('Block added:', event.detail);
};
editor.on('block-added', onBlockAdded);

// Unsubscribe from event
editor.off('block-added', onBlockAdded);

// Emit custom event
editor.emit('custom-event', { message: 'Hello from editor' });

// Listen for common events
editor.on('block-changed', (event) => {
  console.log('Block changed:', event);
});

editor.on('block-removed', (event) => {
  console.log('Block removed:', event);
});

Lifecycle Management

Methods for properly destroying editor instances.

/**
 * Destroy editor instance and clean up all resources
 * Removes DOM elements, event listeners, and frees memory
 */
destroy(): void;

Usage Examples:

// Clean up editor when no longer needed
editor.destroy();

// Typical usage in frameworks
useEffect(() => {
  const editor = new EditorJS({ holder: 'editorjs' });
  
  return () => {
    // Cleanup on component unmount
    editor.destroy();
  };
}, []);

Types

interface EditorConfig {
  holder?: string | HTMLElement;
  autofocus?: boolean;
  defaultBlock?: string;
  initialBlock?: string; // deprecated
  placeholder?: string | false;
  sanitizer?: SanitizerConfig;
  hideToolbar?: boolean;
  tools?: {[toolName: string]: ToolConstructable | ToolSettings};
  data?: OutputData;
  minHeight?: number;
  logLevel?: LogLevels;
  readOnly?: boolean;
  i18n?: I18nConfig;
  onReady?(): void;
  onChange?(api: API, event: BlockMutationEvent | BlockMutationEvent[]): void;
  inlineToolbar?: string[] | boolean;
  tunes?: string[];
  style?: { nonce?: string };
}

interface OutputData {
  version?: string;
  time?: number;
  blocks: OutputBlockData[];
}

interface OutputBlockData<Type extends string = string, Data extends object = any> {
  id?: string;
  type: Type;
  data: BlockToolData<Data>;
  tunes?: {[name: string]: BlockTuneData};
}

Install with Tessl CLI

npx tessl i tessl/npm-editorjs--editorjs

docs

block-management.md

caret-navigation.md

configuration.md

editor-core.md

event-system.md

index.md

tool-development.md

tile.json