{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "indent-docs",
  "title": "Indent",
  "description": "Documentation for Indent",
  "files": [
    {
      "path": "../../content/docs/(plugins)/(styles)/indent.mdx",
      "content": "---\ntitle: Indent\ndocs:\n  - route: /docs/components/indent-toolbar-button\n    title: Indent Toolbar Buttons\n---\n\n<ComponentPreview name=\"indent-demo\" />\n\n<PackageInfo>\n\n## Features\n\n- Add indentation to block elements using Tab/Shift+Tab keyboard shortcuts.\n- Apply consistent indentation with customizable offset and units.\n- Injects an `indent` prop into targeted block elements.\n- Support for maximum indentation depth control.\n\n</PackageInfo>\n\n## Kit Usage\n\n<Steps>\n\n### Installation\n\nThe fastest way to add indent functionality is with the `IndentKit`, which includes pre-configured `IndentPlugin` targeting paragraph, heading, blockquote, code block, and toggle elements.\n\n<ComponentSource name=\"indent-kit\" />\n\n- Configures `Paragraph`, `Heading`, `Blockquote`, `CodeBlock`, and `Toggle` elements to support the `indent` property.\n- Sets a custom offset of `24px` for indentation spacing.\n- Provides Tab/Shift+Tab keyboard shortcuts for indenting and outdenting.\n\n### Add Kit\n\nAdd the kit to your plugins:\n\n```tsx\nimport { createPlateEditor } from 'platejs/react';\nimport { IndentKit } from '@/components/editor/plugins/indent-kit';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    ...IndentKit,\n  ],\n});\n```\n\n</Steps>\n\n## Manual Usage\n\n<Steps>\n\n### Installation\n\n```bash\nnpm install @platejs/indent\n```\n\n### Add Plugin\n\nInclude `IndentPlugin` in your Plate plugins array when creating the editor.\n\n```tsx\nimport { IndentPlugin } from '@platejs/indent/react';\nimport { createPlateEditor } from 'platejs/react';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    IndentPlugin,\n  ],\n});\n```\n\n### Configure Plugin\n\nYou can configure the `IndentPlugin` to target specific elements and customize indentation behavior.\n\n```tsx\nimport { IndentPlugin } from '@platejs/indent/react';\nimport { KEYS } from 'platejs';\nimport { createPlateEditor } from 'platejs/react';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    IndentPlugin.configure({\n      inject: {\n        nodeProps: {\n          styleKey: 'marginLeft',\n        },\n        targetPlugins: [...KEYS.heading, KEYS.p, KEYS.blockquote],\n      },\n      options: {\n        offset: 24,\n        unit: 'px',\n        indentMax: 10,\n      },\n    }),\n  ],\n});\n```\n\n- `inject.nodeProps.styleKey`: Maps the injected prop to the CSS `marginLeft` property.\n- `inject.targetPlugins`: An array of plugin keys indicating which element types can be indented.\n- `options.offset`: Indentation offset in pixels (default: `24`).\n- `options.unit`: Unit for indentation values (default: `'px'`).\n- `options.indentMax`: Maximum number of indentations allowed.\n\n### Add Toolbar Button\n\nYou can add [`IndentToolbarButton`](/docs/components/indent-toolbar-button) to your [Toolbar](/docs/toolbar) to control indentation.\n\n</Steps>\n\n## Plugins\n\n### `IndentPlugin`\n\nPlugin for indenting block elements. It injects an `indent` prop into the elements specified by `inject.targetPlugins` and applies `marginLeft` styling.\n\n<API name=\"IndentPlugin\">\n<APIOptions type=\"object\">\n  <APIItem name=\"inject.nodeProps.nodeKey\" type=\"string\" optional>\n    The property name injected into target elements.\n    - **Default:** `'indent'`\n  </APIItem>\n  <APIItem name=\"inject.nodeProps.styleKey\" type=\"string\" optional>\n    CSS property name for styling.\n    - **Default:** `'marginLeft'`\n  </APIItem>\n  <APIItem name=\"inject.targetPlugins\" type=\"string[]\" optional>\n    Array of plugin keys to target for indent injection.\n    - **Default:** `['p']`\n  </APIItem>\n  <APIItem name=\"options.offset\" type=\"number\" optional>\n    Indentation offset used in `(offset * element.indent) + unit`.\n    - **Default:** `24`\n  </APIItem>\n  <APIItem name=\"options.unit\" type=\"string\" optional>\n    Indentation unit used in `(offset * element.indent) + unit`.\n    - **Default:** `'px'`\n  </APIItem>\n  <APIItem name=\"options.indentMax\" type=\"number\" optional>\n    Maximum number of indentations allowed.\n  </APIItem>\n</APIOptions>\n</API>\n\n## API\n\n### `indent`\n\nIndents the selected block(s) in the editor.\n\n<API name=\"indent\">\n  <APIOptions type=\"SetIndentOptions\" optional>\n    Options for indenting blocks.\n  </APIOptions>\n</API>\n\n### `outdent`\n\nDecrease the indentation of the selected blocks.\n\n<API name=\"outdent\">\n  <APIOptions type=\"SetIndentOptions\" optional>\n    Options for outdenting blocks.\n  </APIOptions>\n</API>\n\n### `setIndent`\n\nAdd offset to the indentation of the selected blocks.\n\n<API name=\"setIndent\">\n<APIOptions type=\"SetIndentOptions\">\n  <APIItem name=\"offset\" type=\"number\" optional>\n    Indentation offset used in `(offset * element.indent) + unit`.\n    - **Default:** `1`\n  </APIItem>\n  <APIItem name=\"getNodesOptions\" type=\"EditorNodesOptions\" optional>\n    Options to get nodes to indent.\n  </APIItem>\n  <APIItem name=\"setNodesProps\" type=\"object\" optional>\n    Additional props to set on nodes to indent.\n  </APIItem>\n  <APIItem name=\"unsetNodesProps\" type=\"string[]\" optional>\n    Additional props to unset on nodes to indent.\n    - **Default:** `[]`\n  </APIItem>\n</APIOptions>\n</API>\n\n## Types\n\n### `SetIndentOptions`\n\nUsed to provide options for setting the indentation of a block of text.\n\n<API name=\"SetIndentOptions\">\n<APIOptions>\n  <APIItem name=\"offset\" type=\"number\">\n    Change in indentation (1 to indent, -1 to outdent).\n    - **Default:** `1`\n  </APIItem>\n  <APIItem name=\"getNodesOptions\" type=\"EditorNodesOptions<V>\">\n    Additional `getNodes` options.\n  </APIItem>\n  <APIItem name=\"setNodesProps\" type=\"object\">\n    Additional `setNodes` options.\n  </APIItem>\n  <APIItem name=\"unsetNodesProps\" type=\"string[]\">\n    Properties to unset when indentation is 0.\n  </APIItem>\n</APIOptions>\n</API>\n\n## Hooks\n\n### `useIndentButton`\n\nA behavior hook for the indent button component.\n\n<API name=\"useIndentButton\">\n<APIReturns type=\"object\">\n  <APIItem name=\"props\" type=\"object\">\n    Props for the indent button.\n    <APISubList>\n      <APISubListItem parent=\"props\" name=\"onClick\" type=\"function\">\n        Callback to handle click event. Indents selected content and focuses editor.\n      </APISubListItem>\n    </APISubList>\n  </APIItem>\n</APIReturns>\n</API>\n\n### `useOutdentButton`\n\nA behavior hook for the outdent button component.\n\n<API name=\"useOutdentButton\">\n<APIReturns type=\"object\">\n  <APIItem name=\"props\" type=\"object\">\n    Props for the outdent button.\n    <APISubList>\n      <APISubListItem parent=\"props\" name=\"onClick\" type=\"function\">\n        Callback to handle click event. Outdents selected content and focuses editor.\n      </APISubListItem>\n    </APISubList>\n  </APIItem>\n</APIReturns>\n</API>",
      "type": "registry:file",
      "target": "content/docs/plate/(plugins)/(styles)/indent.mdx"
    }
  ],
  "type": "registry:file"
}