Back to Plate

Code

content/docs/(plugins)/(marks)/code.mdx

53.0.83.8 KB
Original Source

Code applies the code leaf mark to inline text. Use Code Block for fenced or multiline code; this page is only for inline code spans.

<ComponentPreview name="basic-marks-demo" /> <PackageInfo>

Features

  • KEYS.code leaf mark.
  • Hard selection affinity.
  • HTML deserialization from code tags and Consolas font styles.
  • <code> rendering by default.
  • Registry CodeLeaf for styled inline code.
  • Optional Markdown-style input rule through CodeRules.
</PackageInfo>

Kit Usage

<Steps>

Add Basic Marks

BasicMarksKit includes CodePlugin, CodeLeaf, the backtick input rule, and a mod+e shortcut.

<ComponentSource name="basic-marks-kit" />
tsx
import { createPlateEditor } from 'platejs/react';

import { BasicMarksKit } from '@/components/editor/plugins/basic-marks-kit';

export const editor = createPlateEditor({
  plugins: [...BasicMarksKit],
});

Add A Toolbar Button

Use MarkToolbarButton with KEYS.code.

tsx
import { Code2Icon } from 'lucide-react';
import { KEYS } from 'platejs';

import { MarkToolbarButton } from '@/components/ui/mark-toolbar-button';

export function CodeToolbarButton() {
  return (
    <MarkToolbarButton nodeType={KEYS.code} tooltip="Code (⌘+E)">
      <Code2Icon />
    </MarkToolbarButton>
  );
}
</Steps>

Manual Usage

Install the mark package.

bash
npm install @platejs/basic-nodes

Add CodePlugin directly when you want the default <code> render.

tsx
import { CodePlugin } from '@platejs/basic-nodes/react';
import { createPlateEditor } from 'platejs/react';

export const editor = createPlateEditor({
  plugins: [CodePlugin],
});

Configure the registry leaf, input rule, and shortcut when you want the same behavior as the kit.

tsx
import { CodeRules } from '@platejs/basic-nodes';
import { CodePlugin } from '@platejs/basic-nodes/react';

import { CodeLeaf } from '@/components/ui/code-node';

export const codePlugin = CodePlugin.configure({
  inputRules: [CodeRules.markdown()],
  node: { component: CodeLeaf },
  shortcuts: { toggle: { keys: 'mod+e' } },
});

Ownership

SurfaceOwnerWhat It Does
BaseCodePlugin@platejs/basic-nodesHeadless inline code mark, HTML parser, render tag, selection rule, and toggle transform.
CodePlugin@platejs/basic-nodes/reactReact wrapper for the headless code mark.
CodeRules.markdown@platejs/basic-nodesOptional backtick input rule.
CodeLeafRegistry UIStyled inline code leaf using PlateLeaf.
CodeLeafStaticRegistry UIStatic rendering version using SlateLeaf.
BasicMarksKitRegistryAdds CodePlugin, CodeLeaf, CodeRules.markdown(), and mod+e.
MarkToolbarButtonRegistry UIReads active mark state and calls the mark toggle hook.

The package owns inline code semantics. The registry owns visual styling and toolbar placement.

Behavior

BehaviorSource
Mark keyKEYS.code
Leaf behaviornode.isLeaf: true
Toggle transformeditor.tf.code.toggle() calls editor.tf.toggleMark(type).
Selection affinityhard
HTML tagscode
HTML stylesfont-family: Consolas
HTML guardSkips code inside pre and paragraph-level Consolas blocks.
Render outputcode
Kit shortcutmod+e

API Reference

APIPackageUse
BaseCodePlugin@platejs/basic-nodesHeadless inline code plugin.
CodePlugin@platejs/basic-nodes/reactReact inline code plugin.
CodeRules.markdown()@platejs/basic-nodesCreates the backtick mark input rule.
tf.code.toggle()@platejs/basic-nodesToggles the inline code mark at the selection.
CodeLeafRegistry UIStyled client inline code leaf.
CodeLeafStaticRegistry UIStyled static inline code leaf.