Features
- Add indentation to block elements using Tab/Shift+Tab keyboard shortcuts.
- Apply consistent indentation with customizable offset and units.
- Injects an
indent
prop into targeted block elements. - Support for maximum indentation depth control.
Kit Usage
Installation
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.
- Configures
Paragraph
,Heading
,Blockquote
,CodeBlock
, andToggle
elements to support theindent
property. - Sets a custom offset of
24px
for indentation spacing. - Provides Tab/Shift+Tab keyboard shortcuts for indenting and outdenting.
Add Kit
Add the kit to your plugins:
import { createPlateEditor } from 'platejs/react';
import { IndentKit } from '@/components/editor/plugins/indent-kit';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
...IndentKit,
],
});
Manual Usage
Installation
pnpm add @platejs/indent
Add Plugin
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,
],
});
Configure Plugin
You can configure the IndentPlugin
to target specific elements and customize indentation behavior.
import { IndentPlugin } from '@platejs/indent/react';
import { KEYS } from 'platejs';
import { createPlateEditor } from 'platejs/react';
const editor = createPlateEditor({
plugins: [
// ...otherPlugins,
IndentPlugin.configure({
inject: {
nodeProps: {
styleKey: 'marginLeft',
},
targetPlugins: [...KEYS.heading, KEYS.p, KEYS.blockquote],
},
options: {
offset: 24,
unit: 'px',
indentMax: 10,
},
}),
],
});
inject.nodeProps.styleKey
: Maps the injected prop to the CSSmarginLeft
property.inject.targetPlugins
: An array of plugin keys indicating which element types can be indented.options.offset
: Indentation offset in pixels (default:24
).options.unit
: Unit for indentation values (default:'px'
).options.indentMax
: Maximum number of indentations allowed.
Add Toolbar Button
You can add IndentToolbarButton
to your Toolbar to control indentation.
Plugins
IndentPlugin
Plugin for indenting block elements. It injects an indent
prop into the elements specified by inject.targetPlugins
and applies marginLeft
styling.
inject.nodeProps.nodeKey optional string
The property name injected into target elements.
- Default:
'indent'
- Default:
inject.nodeProps.styleKey optional string
CSS property name for styling.
- Default:
'marginLeft'
- Default:
inject.targetPlugins optional string[]
Array of plugin keys to target for indent injection.
- Default:
['p']
- Default:
options.offset optional number
Indentation offset used in
(offset * element.indent) + unit
.- Default:
24
- Default:
options.unit optional string
Indentation unit used in
(offset * element.indent) + unit
.- Default:
'px'
- Default:
options.indentMax optional number
Maximum number of indentations allowed.
API
indent
Indents the selected block(s) in the editor.
outdent
Decrease the indentation of the selected blocks.
setIndent
Add offset to the indentation of the selected blocks.
offset optional number
Indentation offset used in
(offset * element.indent) + unit
.- Default:
1
- Default:
getNodesOptions optional EditorNodesOptions
Options to get nodes to indent.
setNodesProps optional object
Additional props to set on nodes to indent.
unsetNodesProps optional string[]
Additional props to unset on nodes to indent.
- Default:
[]
- Default:
Types
SetIndentOptions
Used to provide options for setting the indentation of a block of text.
Hooks
useIndentButton
A behavior hook for the indent button component.
useOutdentButton
A behavior hook for the outdent button component.