content/docs/(plugins)/(marks)/strikethrough.mdx
Strikethrough applies the strikethrough leaf mark to selected text. The package owns the mark semantics; BasicMarksKit adds the Markdown-style input rule and shortcut.
KEYS.strikethrough leaf mark.s, del, strike, and line-through text decoration.<s> rendering by default.StrikethroughRules.MarkToolbarButton.BasicMarksKit includes StrikethroughPlugin, ~~ input rules, and a mod+shift+x shortcut.
import { createPlateEditor } from 'platejs/react';
import { BasicMarksKit } from '@/components/editor/plugins/basic-marks-kit';
export const editor = createPlateEditor({
plugins: [...BasicMarksKit],
});
Use MarkToolbarButton with KEYS.strikethrough.
import { StrikethroughIcon } from 'lucide-react';
import { KEYS } from 'platejs';
import { MarkToolbarButton } from '@/components/ui/mark-toolbar-button';
export function StrikethroughToolbarButton() {
return (
<MarkToolbarButton
nodeType={KEYS.strikethrough}
tooltip="Strikethrough"
>
<StrikethroughIcon />
</MarkToolbarButton>
);
}
Install the mark package.
npm install @platejs/basic-nodes
Add StrikethroughPlugin directly when you want the default <s> render.
import { StrikethroughPlugin } from '@platejs/basic-nodes/react';
import { createPlateEditor } from 'platejs/react';
export const editor = createPlateEditor({
plugins: [StrikethroughPlugin],
});
Configure the input rule and shortcut when you want the same behavior as the kit.
import { StrikethroughRules } from '@platejs/basic-nodes';
import { StrikethroughPlugin } from '@platejs/basic-nodes/react';
export const strikethroughPlugin = StrikethroughPlugin.configure({
inputRules: [StrikethroughRules.markdown()],
shortcuts: { toggle: { keys: 'mod+shift+x' } },
});
| Surface | Owner | What It Does |
|---|---|---|
BaseStrikethroughPlugin | @platejs/basic-nodes | Headless strikethrough mark, HTML parser, render tag, selection rule, and toggle transform. |
StrikethroughPlugin | @platejs/basic-nodes/react | React wrapper for the headless strikethrough mark. |
StrikethroughRules.markdown | @platejs/basic-nodes | Optional ~~ mark input rule factory. |
BasicMarksKit | Registry | Adds StrikethroughPlugin, the input rule, and mod+shift+x. |
MarkToolbarButton | Registry UI | Reads active mark state and calls the mark toggle hook. |
The package owns the mark. The registry owns shortcut configuration and toolbar placement.
| Behavior | Source |
|---|---|
| Mark key | KEYS.strikethrough |
| Leaf behavior | node.isLeaf: true |
| Toggle transform | editor.tf.strikethrough.toggle() calls editor.tf.toggleMark(type). |
| Selection affinity | directional |
| HTML tags | s, del, strike |
| HTML styles | text-decoration: line-through |
| HTML guard | Ignores descendants where textDecoration is none. |
| Render output | s |
| Kit input rule | StrikethroughRules.markdown() |
| Kit shortcut | mod+shift+x |
| API | Package | Use |
|---|---|---|
BaseStrikethroughPlugin | @platejs/basic-nodes | Headless strikethrough plugin. |
StrikethroughPlugin | @platejs/basic-nodes/react | React strikethrough plugin. |
StrikethroughRules.markdown() | @platejs/basic-nodes | Creates the ~~ mark input rule. |
tf.strikethrough.toggle() | @platejs/basic-nodes | Toggles the strikethrough mark at the selection. |