import { Command, Mark, markInputRule, markPasteRule, } from '@tiptap/core' type StrikeCommand = () => Command declare module '@tiptap/core/src/Editor' { interface Commands { strike: StrikeCommand, } } export const inputRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))$/gm export const pasteRegex = /(?:^|\s)((?:~~)((?:[^~]+))(?:~~))/gm export default new Mark() .name('strike') .schema(() => ({ parseDOM: [ { tag: 's', }, { tag: 'del', }, { tag: 'strike', }, { style: 'text-decoration', getAttrs: node => (node === 'line-through' ? {} : false), }, ], toDOM: () => ['s', 0], })) .commands(({ name }) => ({ strike: () => ({ commands }) => { return commands.toggleMark(name) }, })) .keys(({ editor }) => ({ 'Mod-d': () => editor.strike(), })) .inputRules(({ type }) => [ markInputRule(inputRegex, type), ]) .pasteRules(({ type }) => [ markPasteRule(inputRegex, type), ]) .create()