'use client';
import * as React from 'react';
import { Plate, usePlateEditor } from 'platejs/react';
import { EditorKit } from '@/components/editor/editor-kit';
import { Editor, EditorContainer } from '@/components/ui/editor';
import { DEMO_VALUES } from './values/demo-values';
export default function Demo({ id }: { id: string }) {
const editor = usePlateEditor({
plugins: EditorKit,
value: DEMO_VALUES[id],
});
return (
<Plate editor={editor}>
<EditorContainer variant="demo">
<Editor />
</EditorContainer>
</Plate>
);
}
Kit Usage
Installation
The fastest way to add column functionality is with the ColumnKit
, which includes pre-configured ColumnPlugin
and ColumnItemPlugin
with Plate UI components.
'use client';
import { ColumnItemPlugin, ColumnPlugin } from '@platejs/layout/react';
import { ColumnElement, ColumnGroupElement } from '@/components/ui/column-node';
export const ColumnKit = [
ColumnPlugin.withComponent(ColumnGroupElement),
ColumnItemPlugin.withComponent(ColumnElement),
];
ColumnGroupElement
: Renders column group containers.ColumnElement
: Renders individual column items.
Add Kit
Add the kit to your plugins:
import { createPlateEditor } from 'platejs/react';
import { ColumnKit } from '@/components/editor/plugins/column-kit';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
...ColumnKit,
],
});
Manual Usage
Installation
pnpm add @platejs/layout
Add Plugins
Include the column plugins in your Plate plugins array when creating the editor.
import { ColumnPlugin, ColumnItemPlugin } from '@platejs/layout/react';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
ColumnPlugin,
ColumnItemPlugin,
],
});
Configure Plugins
Configure the plugins with custom components to render column layouts.
import { ColumnPlugin, ColumnItemPlugin } from '@platejs/layout/react';
import { createPlateEditor } from 'platejs/react';
import { ColumnGroupElement, ColumnElement } from '@/components/ui/column-node';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
ColumnPlugin.withComponent(ColumnGroupElement),
ColumnItemPlugin.withComponent(ColumnElement),
],
});
withComponent
: AssignsColumnGroupElement
to render column group containers andColumnElement
to render individual columns.
Turn Into Toolbar Button
You can add this item to the Turn Into Toolbar Button to convert blocks into column layouts:
{
icon: <Columns3Icon />,
label: '3 columns',
value: 'action_three_columns',
}
Plugins
ColumnPlugin
Add Column Plugin to your document.
ColumnItemPlugin
Add Column Item Plugin to your document.
Types
TColumnGroupElement
Extends TElement
.
TColumnElement
Extends TElement
.
Transforms
insertColumnGroup
Insert a columnGroup with two empty columns.
columns
: Array of column widths or number of equal-width columns (default: 2)- Other
InsertNodesOptions
to control insert behavior
Array of column widths or number of equal-width columns (default: 2)
Other options to control insert behavior
insertColumn
Insert an empty column.
moveMiddleColumn
Move the middle column to the left or right.
toggleColumnGroup
Convert a block into a column group layout or update an existing column group's layout.
- If the target block is not a column group, wraps it in a new column group with the specified number of columns
- If the target block is already a column group, updates its column layout using
setColumns
- The original content becomes the content of the first column
- Additional columns are created with empty paragraphs
setColumns
Update the column layout of an existing column group.
- When increasing columns:
- Keeps existing column content
- Adds new empty columns with specified widths
- When decreasing columns:
- Merges content from removed columns into the last remaining column
- Updates widths of remaining columns
- When keeping same number of columns:
- Only updates column widths
Hooks
useDebouncePopoverOpen
On This Page
FeaturesKit UsageInstallationAdd KitManual UsageInstallationAdd PluginsConfigure PluginsTurn Into Toolbar ButtonPluginsColumnPluginColumnItemPluginTypesTColumnGroupElementTColumnElementTransformsinsertColumnGroupinsertColumnmoveMiddleColumntoggleColumnGroupsetColumnsHooksuseDebouncePopoverOpen