import { type as assertType } from "@heydovetail/assert"; import { Node, Schema } from "prosemirror-model"; import { Mapping, Step, StepMap, StepResult } from "prosemirror-transform"; import { RangeDeleteStep } from "./RangeDeleteStep"; import { Range } from "./types"; export interface RangeCreateJson { stepType: "range.create"; range: Range; } export class RangeCreateStep 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 RangeDeleteStep(this.range); } public map(mapping: Mapping) { return new RangeCreateStep({ ...this.range, from: mapping.map(this.range.from, 1), to: mapping.map(this.range.to, -1) }); } public merge() { return null; } public toJSON(): RangeCreateJson { return { stepType: "range.create", range: this.range }; } public static fromJSON(_: Schema, json: RangeCreateJson): RangeCreateStep { return new RangeCreateStep(json.range); } } Step.jsonID(assertType("range.create"), RangeCreateStep);