import { type as assertType } from "@heydovetail/assert"; import { Node, Schema } from "prosemirror-model"; import { Mapping, Step, StepMap, StepResult } from "prosemirror-transform"; import { RangeCreateStep } from "./RangeCreateStep"; import { Range } from "./types"; export interface RangeDeleteJson { stepType: "range.delete"; range: Range; } export class RangeDeleteStep extends Step { constructor(public readonly range: Readonly) { super(); } public apply(doc: Node) { return StepResult.ok(doc); } public getMap() { return new StepMap([]); } public invert() { return new RangeCreateStep(this.range); } public map(mapping: Readonly) { return new RangeDeleteStep({ ...this.range, from: mapping.map(this.range.from, 1), to: mapping.map(this.range.to, -1) }); } public merge() { return null; } public toJSON(): RangeDeleteJson { return { stepType: "range.delete", range: this.range }; } public static fromJSON(_: Schema, json: Readonly): RangeDeleteStep { return new RangeDeleteStep(json.range); } } Step.jsonID(assertType("range.delete"), RangeDeleteStep);