123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- import { Node } from 'prosemirror-model';
- import { StepMap } from 'prosemirror-transform';
- /**
- Stores metadata for a part of a change.
- */
- declare class Span<Data = any> {
- /**
- The length of this span.
- */
- readonly length: number;
- /**
- The data associated with this span.
- */
- readonly data: Data;
- }
- /**
- A replaced range with metadata associated with it.
- */
- declare class Change<Data = any> {
- /**
- The start of the range deleted/replaced in the old document.
- */
- readonly fromA: number;
- /**
- The end of the range in the old document.
- */
- readonly toA: number;
- /**
- The start of the range inserted in the new document.
- */
- readonly fromB: number;
- /**
- The end of the range in the new document.
- */
- readonly toB: number;
- /**
- Data associated with the deleted content. The length of these
- spans adds up to `this.toA - this.fromA`.
- */
- readonly deleted: readonly Span<Data>[];
- /**
- Data associated with the inserted content. Length adds up to
- `this.toB - this.toA`.
- */
- readonly inserted: readonly Span<Data>[];
- /**
- This merges two changesets (the end document of x should be the
- start document of y) into a single one spanning the start of x to
- the end of y.
- */
- static merge<Data>(x: readonly Change<Data>[], y: readonly Change<Data>[], combine: (dataA: Data, dataB: Data) => Data): readonly Change<Data>[];
- }
- /**
- Simplifies a set of changes for presentation. This makes the
- assumption that having both insertions and deletions within a word
- is confusing, and, when such changes occur without a word boundary
- between them, they should be expanded to cover the entire set of
- words (in the new document) they touch. An exception is made for
- single-character replacements.
- */
- declare function simplifyChanges(changes: readonly Change[], doc: Node): Change<any>[];
- /**
- A change set tracks the changes to a document from a given point
- in the past. It condenses a number of step maps down to a flat
- sequence of replacements, and simplifies replacments that
- partially undo themselves by comparing their content.
- */
- declare class ChangeSet<Data = any> {
- /**
- Replaced regions.
- */
- readonly changes: readonly Change<Data>[];
- /**
- Computes a new changeset by adding the given step maps and
- metadata (either as an array, per-map, or as a single value to be
- associated with all maps) to the current set. Will not mutate the
- old set.
-
- Note that due to simplification that happens after each add,
- incrementally adding steps might create a different final set
- than adding all those changes at once, since different document
- tokens might be matched during simplification depending on the
- boundaries of the current changed ranges.
- */
- addSteps(newDoc: Node, maps: readonly StepMap[], data: Data | readonly Data[]): ChangeSet<Data>;
- /**
- The starting document of the change set.
- */
- get startDoc(): Node;
- /**
- Map the span's data values in the given set through a function
- and construct a new set with the resulting data.
- */
- map(f: (range: Span<Data>) => Data): ChangeSet<Data>;
- /**
- Compare two changesets and return the range in which they are
- changed, if any. If the document changed between the maps, pass
- the maps for the steps that changed it as second argument, and
- make sure the method is called on the old set and passed the new
- set. The returned positions will be in new document coordinates.
- */
- changedRange(b: ChangeSet, maps?: readonly StepMap[]): {
- from: number;
- to: number;
- } | null;
- /**
- Create a changeset with the given base object and configuration.
- The `combine` function is used to compare and combine metadata—it
- should return null when metadata isn't compatible, and a combined
- version for a merged range when it is.
- */
- static create<Data = any>(doc: Node, combine?: (dataA: Data, dataB: Data) => Data): ChangeSet<Data>;
- }
- export { Change, ChangeSet, Span, simplifyChanges };
|