syncfusion-react-blockeditor — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-react-blockeditor (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The Syncfusion React BlockEditorComponent is a powerful block-based rich text editor that allows users to create, edit, and format content using a modern block architecture. Each piece of content (paragraphs, headings, lists, tables, code snippets) is a discrete, manageable block.
The BlockEditorComponent provides:
📄 Read: references/getting-started.md
📄 Read: references/built-in-blocks.md
📄 Read: references/block-editor-menus.md
📄 Read: references/drag-drop-and-content.md
enableDragAndDrop)blockDragStart, blockDragging, blockDropped)📄 Read: references/mentions-and-labels.md
users prop and UserModel interface for @mention featurelabelSettings prop and LabelItemModel interface for label featureContentType.Mention / ContentType.Label inline contentIMentionContentSettings / ILabelContentSettings📄 Read: references/methods-and-api.md
📄 Read: references/styling-and-appearance.md
📄 Read: references/advanced-features.md
📄 Read: references/accessibility.md
import { BlockEditorComponent } from '@syncfusion/ej2-react-blockeditor';
import { BlockModel, ContentType } from '@syncfusion/ej2-react-blockeditor';
import '@syncfusion/ej2-react-blockeditor/styles/material.css';
function App() {
// Define initial blocks
const blocksData: BlockModel[] = [
{
id: 'block-1',
blockType: 'Heading',
properties: { level: 1 },
content: [
{
contentType: ContentType.Text,
content: 'Welcome to Block Editor'
}
]
},
{
id: 'block-2',
blockType: 'Paragraph',
content: [
{
contentType: ContentType.Text,
content: 'This is your first paragraph. Click the "+" button to add more blocks.'
}
]
}
];
return (
<BlockEditorComponent
id="block-editor"
blocks={blocksData}
/>
);
}
export default App;const editorRef = React.useRef<BlockEditorComponent>(null);
const addNewBlock = () => {
const newBlock: BlockModel = {
blockType: 'Paragraph',
content: [
{
contentType: ContentType.Text,
content: 'New paragraph block'
}
]
};
editorRef.current?.addBlock(newBlock);
};const commandMenuSettings = {
itemSelect: (args) => {
console.log('Selected command:', args.command.label, args.command.id);
// Handle custom actions based on selected command
}
};const exportContent = () => {
const jsonContent = editorRef.current?.getDataAsJson();
console.log('Exported content:', jsonContent);
};<BlockEditorComponent
id="block-editor"
blocks={blocksData}
readOnly={true}
/>⚠️ PropstoolbarSettings,containerCssClass, andshowBlockHandledo not exist in the BlockEditor API and must not be used.
| Prop | Type | Description | |
|---|---|---|---|
id | string | Unique identifier for the component | |
blocks | BlockModel[] | Array of block objects defining content | |
readOnly | boolean | Enable read-only mode (default: false) | |
width | `string \ | number` | Width of the editor container (default: '100%') |
height | `string \ | number` | Height of the editor container |
commandMenuSettings | CommandMenuSettingsModel | Customize slash command (/) menu | |
contextMenuSettings | ContextMenuSettingsModel | Configure right-click context menu | |
inlineToolbarSettings | InlineToolbarSettingsModel | Configure inline text selection toolbar | |
blockActionMenuSettings | BlockActionMenuSettingsModel | Configure block action (⋮) menu | |
transformSettings | TransformSettingsModel | Configure block type transform menu | |
imageBlockSettings | ImageBlockSettingsModel | Configure image upload and rendering | |
codeBlockSettings | CodeBlockSettingsModel | Configure code block languages | |
pasteCleanupSettings | PasteCleanupSettingsModel | Control paste sanitization behavior | |
users | UserModel[] | User list for @mention feature | |
labelSettings | LabelSettingsModel | Label items and trigger char for label feature | |
enableDragAndDrop | boolean | Enable/disable drag-and-drop reordering (default: true) | |
undoRedoStack | number | Max number of undo/redo history steps | |
keyConfig | { [key: string]: string } | Custom keyboard shortcut mappings | |
locale | string | Localization language code (default: 'en-US') | |
blockChanged | EmitType<BlockChangedEventArgs> | Fires when block content changes |
Content Management System - Build a CMS with block-based editing, custom block types, and content export
Document Editor - Create a collaborative document editor with formatting, templates, and version control
Note-Taking App - Implement a personal notes app with nesting, tagging, and search capabilities
Blog Editor - Enable blog authors to write with rich formatting, media embeds, and preview
Knowledge Base - Build internal documentation with organized blocks, search, and linked references
Survey/Form Builder - Create dynamic surveys with conditional blocks and response capture
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.