The fastest way to add indent functionality is with the IndentKit, which includes pre-configured IndentPlugin targeting paragraph, heading, blockquote, code block, and toggle elements.
'use client';
import { IndentPlugin } from '@platejs/indent/react';
import { PLUGINS } from 'platejs';
export const IndentKit = [
IndentPlugin.configure({
initialState: {
offset: 24,
},
targetPlugins: [
PLUGINS.heading,
PLUGINS.paragraph,
PLUGINS.blockquote,
PLUGINS.codeBlock,
PLUGINS.toggle,
PLUGINS.image,
],
}),
];'use client';
import { IndentPlugin } from '@platejs/indent/react';
import { PLUGINS } from 'platejs';
export const IndentKit = [
IndentPlugin.configure({
initialState: {
offset: 24,
},
targetPlugins: [
PLUGINS.heading,
PLUGINS.paragraph,
PLUGINS.blockquote,
PLUGINS.codeBlock,
PLUGINS.toggle,
PLUGINS.image,
],
}),
];Paragraph, Heading, Blockquote, CodeBlock, and Toggle elements to support the indent property.24px for indentation spacing.Add the kit to your plugins:
import { createPlateEditor } from "platejs/react";
import { IndentKit } from "@/components/editor/indent";
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
...IndentKit,
],
});import { createPlateEditor } from "platejs/react";
import { IndentKit } from "@/components/editor/indent";
const editor = createPlateEditor
Include IndentPlugin in your Plate plugins array when creating the editor.
import { IndentPlugin } from "@platejs/indent/react";
import { createPlateEditor } from "platejs/react";
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
IndentPlugin,
],
});import { IndentPlugin } from "@platejs/indent/react";
import { createPlateEditor } from "platejs/react";
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
IndentPlugin,
],
});You can configure the IndentPlugin to target specific elements and customize indentation behavior.
import { IndentPlugin } from "@platejs/indent/react";
import { PLUGINS } from "platejs";
import { createPlateEditor } from "platejs/react";
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
IndentPlugin.configure({
targetPlugins: [
PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading,
PLUGINS.paragraph,
PLUGINS.blockquote,
],
inject: {
nodeProps: {
styleKey: "marginLeft",
inject.nodeProps.styleKey: Maps the injected prop to the CSS marginLeft property.targetPlugins: Element plugin descriptors or dynamic names whose nodes can store indentation.initialState.offset: Indentation offset in pixels (default: 24).initialState.unit: Unit for indentation values (default: 'px').initialState.indentMax: Maximum number of indentations allowed.You can add IndentToolbarButton to your Toolbar to control indentation.
Plugin for indenting block elements. It injects an indent prop into the elements specified by targetPlugins and applies marginLeft styling.
CSS property name for styling. - Default: 'marginLeft'
Element plugin descriptors or dynamic names targeted for indent storage and injection. -
Default: [BaseParagraphPlugin]
Indentation offset used in (offset * element.indent) + unit. -
Default: 24
Indentation unit used in (offset * element.indent) + unit. -
Default: 'px'
Maximum number of indentations allowed.
Indents the selected block(s) in the editor.
Decreases the indentation of the selected blocks.
Adds an offset to the indentation of the selected blocks.
Indentation offset used in (offset * element.indent) + unit. -
Default: 1
Node query and update options. match may further restrict target blocks.
Returns additional properties to set for the next indent value.
Additional persisted property keys to unset when indentation reaches zero. - Default: []
Used to provide options for setting the indentation of a block of text.
Toolbar components call the descriptor-scoped updates directly:
const { update } = useEditorPlugin(IndentPlugin);
<ToolbarButton onClick={() => update.increase()}>Indent</ToolbarButton>
<ToolbarButton onClick={() => update.decrease()}>Outdent</ToolbarButton>const { update } = useEditorPlugin(IndentPlugin);
<ToolbarButton onClick={() => update.increase()}>Indent</ToolbarButton>
<ToolbarButton onClick={() => update.decrease()}>Outdent</ToolbarButton>import { IndentPlugin } from "@platejs/indent/react";
import { PLUGINS } from "platejs";
import { createPlateEditor } from "platejs/react";
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
IndentPlugin.configure({
targetPlugins: [
PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading, PLUGINS.heading,
PLUGINS.paragraph,
PLUGINS.blockquote,
],
inject: {
nodeProps: {
styleKey: "marginLeft",
},
},
initialState: {
offset: 24,
unit: "px",
indentMax: 10,
},
}),
],
});