Back to Plate

Strikethrough

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

53.0.83.8 KB
Original Source

Strikethrough applies the strikethrough leaf mark to selected text. The package owns the mark semantics; BasicMarksKit adds the Markdown-style input rule and shortcut.

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

Features

  • KEYS.strikethrough leaf mark.
  • Directional selection affinity.
  • HTML deserialization from s, del, strike, and line-through text decoration.
  • <s> rendering by default.
  • Optional Markdown-style input rule through StrikethroughRules.
  • Toolbar support through MarkToolbarButton.
</PackageInfo>

Kit Usage

<Steps>

Add Basic Marks

BasicMarksKit includes StrikethroughPlugin, ~~ input rules, and a mod+shift+x 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.strikethrough.

tsx
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>
  );
}
</Steps>

Manual Usage

Install the mark package.

bash
npm install @platejs/basic-nodes

Add StrikethroughPlugin directly when you want the default <s> render.

tsx
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.

tsx
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' } },
});

Ownership

SurfaceOwnerWhat It Does
BaseStrikethroughPlugin@platejs/basic-nodesHeadless strikethrough mark, HTML parser, render tag, selection rule, and toggle transform.
StrikethroughPlugin@platejs/basic-nodes/reactReact wrapper for the headless strikethrough mark.
StrikethroughRules.markdown@platejs/basic-nodesOptional ~~ mark input rule factory.
BasicMarksKitRegistryAdds StrikethroughPlugin, the input rule, and mod+shift+x.
MarkToolbarButtonRegistry UIReads active mark state and calls the mark toggle hook.

The package owns the mark. The registry owns shortcut configuration and toolbar placement.

Behavior

BehaviorSource
Mark keyKEYS.strikethrough
Leaf behaviornode.isLeaf: true
Toggle transformeditor.tf.strikethrough.toggle() calls editor.tf.toggleMark(type).
Selection affinitydirectional
HTML tagss, del, strike
HTML stylestext-decoration: line-through
HTML guardIgnores descendants where textDecoration is none.
Render outputs
Kit input ruleStrikethroughRules.markdown()
Kit shortcutmod+shift+x

API Reference

APIPackageUse
BaseStrikethroughPlugin@platejs/basic-nodesHeadless strikethrough plugin.
StrikethroughPlugin@platejs/basic-nodes/reactReact strikethrough plugin.
StrikethroughRules.markdown()@platejs/basic-nodesCreates the ~~ mark input rule.
tf.strikethrough.toggle()@platejs/basic-nodesToggles the strikethrough mark at the selection.