Loading...

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, and Toggle elements to support the indent 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 CSS marginLeft 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.

Optionsobject

  • inject.nodeProps.nodeKey optional string

    The property name injected into target elements.

    • Default: 'indent'
  • inject.nodeProps.styleKey optional string

    CSS property name for styling.

    • Default: 'marginLeft'
  • inject.targetPlugins optional string[]

    Array of plugin keys to target for indent injection.

    • Default: ['p']
  • options.offset optional number

    Indentation offset used in (offset * element.indent) + unit.

    • Default: 24
  • options.unit optional string

    Indentation unit used in (offset * element.indent) + unit.

    • Default: 'px'
  • options.indentMax optional number

    Maximum number of indentations allowed.

API

indent

Indents the selected block(s) in the editor.

OptionsSetIndentOptions

    Options for indenting blocks.

outdent

Decrease the indentation of the selected blocks.

OptionsSetIndentOptions

    Options for outdenting blocks.

setIndent

Add offset to the indentation of the selected blocks.

OptionsSetIndentOptions

Collapse all
  • offset optional number

    Indentation offset used in (offset * element.indent) + unit.

    • Default: 1
  • 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: []

Types

SetIndentOptions

Used to provide options for setting the indentation of a block of text.

Options

Collapse all
  • offset number

    Change in indentation (1 to indent, -1 to outdent).

    • Default: 1
  • getNodesOptions EditorNodesOptions<V>

    Additional getNodes options.

  • setNodesProps object

    Additional setNodes options.

  • unsetNodesProps string[]

    Properties to unset when indentation is 0.

Hooks

useIndentButton

A behavior hook for the indent button component.

Returnsobject

Collapse all
  • props object

    Props for the indent button.

useOutdentButton

A behavior hook for the outdent button component.

Returnsobject

Collapse all
  • props object

    Props for the outdent button.