mirror of
https://github.com/CharaChorder/DeviceManager.git
synced 2026-01-19 08:22:53 +00:00
1627 lines
57 KiB
TypeScript
1627 lines
57 KiB
TypeScript
import OrderedMap from 'orderedmap';
|
||
|
||
/**
|
||
A mark is a piece of information that can be attached to a node,
|
||
such as it being emphasized, in code font, or a link. It has a
|
||
type and optionally a set of attributes that provide further
|
||
information (such as the target of the link). Marks are created
|
||
through a `Schema`, which controls which types exist and which
|
||
attributes they have.
|
||
*/
|
||
declare class Mark {
|
||
/**
|
||
The type of this mark.
|
||
*/
|
||
readonly type: MarkType;
|
||
/**
|
||
The attributes associated with this mark.
|
||
*/
|
||
readonly attrs: Attrs;
|
||
/**
|
||
Given a set of marks, create a new set which contains this one as
|
||
well, in the right position. If this mark is already in the set,
|
||
the set itself is returned. If any marks that are set to be
|
||
[exclusive](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) with this mark are present,
|
||
those are replaced by this one.
|
||
*/
|
||
addToSet(set: readonly Mark[]): readonly Mark[];
|
||
/**
|
||
Remove this mark from the given set, returning a new set. If this
|
||
mark is not in the set, the set itself is returned.
|
||
*/
|
||
removeFromSet(set: readonly Mark[]): readonly Mark[];
|
||
/**
|
||
Test whether this mark is in the given set of marks.
|
||
*/
|
||
isInSet(set: readonly Mark[]): boolean;
|
||
/**
|
||
Test whether this mark has the same type and attributes as
|
||
another mark.
|
||
*/
|
||
eq(other: Mark): boolean;
|
||
/**
|
||
Convert this mark to a JSON-serializeable representation.
|
||
*/
|
||
toJSON(): any;
|
||
/**
|
||
Deserialize a mark from JSON.
|
||
*/
|
||
static fromJSON(schema: Schema, json: any): Mark;
|
||
/**
|
||
Test whether two sets of marks are identical.
|
||
*/
|
||
static sameSet(a: readonly Mark[], b: readonly Mark[]): boolean;
|
||
/**
|
||
Create a properly sorted mark set from null, a single mark, or an
|
||
unsorted array of marks.
|
||
*/
|
||
static setFrom(marks?: Mark | readonly Mark[] | null): readonly Mark[];
|
||
/**
|
||
The empty set of marks.
|
||
*/
|
||
static none: readonly Mark[];
|
||
}
|
||
|
||
declare type DOMNode = InstanceType<typeof window.Node>;
|
||
|
||
/**
|
||
A description of a DOM structure. Can be either a string, which is
|
||
interpreted as a text node, a DOM node, which is interpreted as
|
||
itself, a `{dom, contentDOM}` object, or an array.
|
||
|
||
An array describes a DOM element. The first value in the array
|
||
should be a string—the name of the DOM element, optionally prefixed
|
||
by a namespace URL and a space. If the second element is plain
|
||
object, it is interpreted as a set of attributes for the element.
|
||
Any elements after that (including the 2nd if it's not an attribute
|
||
object) are interpreted as children of the DOM elements, and must
|
||
either be valid `DOMOutputSpec` values, or the number zero.
|
||
|
||
The number zero (pronounced “hole”) is used to indicate the place
|
||
where a node's child nodes should be inserted. If it occurs in an
|
||
output spec, it should be the only child element in its parent
|
||
node.
|
||
*/
|
||
declare type DOMOutputSpec = string | DOMNode | {
|
||
dom: DOMNode;
|
||
contentDOM?: HTMLElement;
|
||
} | readonly [string, ...any[]];
|
||
/**
|
||
A DOM serializer knows how to convert ProseMirror nodes and
|
||
marks of various types to DOM nodes.
|
||
*/
|
||
declare class DOMSerializer {
|
||
/**
|
||
The node serialization functions.
|
||
*/
|
||
readonly nodes: {
|
||
[node: string]: (node: Node) => DOMOutputSpec;
|
||
};
|
||
/**
|
||
The mark serialization functions.
|
||
*/
|
||
readonly marks: {
|
||
[mark: string]: (mark: Mark, inline: boolean) => DOMOutputSpec;
|
||
};
|
||
/**
|
||
Create a serializer. `nodes` should map node names to functions
|
||
that take a node and return a description of the corresponding
|
||
DOM. `marks` does the same for mark names, but also gets an
|
||
argument that tells it whether the mark's content is block or
|
||
inline content (for typical use, it'll always be inline). A mark
|
||
serializer may be `null` to indicate that marks of that type
|
||
should not be serialized.
|
||
*/
|
||
constructor(
|
||
/**
|
||
The node serialization functions.
|
||
*/
|
||
nodes: {
|
||
[node: string]: (node: Node) => DOMOutputSpec;
|
||
},
|
||
/**
|
||
The mark serialization functions.
|
||
*/
|
||
marks: {
|
||
[mark: string]: (mark: Mark, inline: boolean) => DOMOutputSpec;
|
||
});
|
||
/**
|
||
Serialize the content of this fragment to a DOM fragment. When
|
||
not in the browser, the `document` option, containing a DOM
|
||
document, should be passed so that the serializer can create
|
||
nodes.
|
||
*/
|
||
serializeFragment(fragment: Fragment, options?: {
|
||
document?: Document;
|
||
}, target?: HTMLElement | DocumentFragment): HTMLElement | DocumentFragment;
|
||
/**
|
||
Serialize this node to a DOM node. This can be useful when you
|
||
need to serialize a part of a document, as opposed to the whole
|
||
document. To serialize a whole document, use
|
||
[`serializeFragment`](https://prosemirror.net/docs/ref/#model.DOMSerializer.serializeFragment) on
|
||
its [content](https://prosemirror.net/docs/ref/#model.Node.content).
|
||
*/
|
||
serializeNode(node: Node, options?: {
|
||
document?: Document;
|
||
}): globalThis.Node;
|
||
/**
|
||
Render an [output spec](https://prosemirror.net/docs/ref/#model.DOMOutputSpec) to a DOM node. If
|
||
the spec has a hole (zero) in it, `contentDOM` will point at the
|
||
node with the hole.
|
||
*/
|
||
static renderSpec(doc: Document, structure: DOMOutputSpec, xmlNS?: string | null): {
|
||
dom: DOMNode;
|
||
contentDOM?: HTMLElement;
|
||
};
|
||
/**
|
||
Build a serializer using the [`toDOM`](https://prosemirror.net/docs/ref/#model.NodeSpec.toDOM)
|
||
properties in a schema's node and mark specs.
|
||
*/
|
||
static fromSchema(schema: Schema): DOMSerializer;
|
||
/**
|
||
Gather the serializers in a schema's node specs into an object.
|
||
This can be useful as a base to build a custom serializer from.
|
||
*/
|
||
static nodesFromSchema(schema: Schema): {
|
||
[node: string]: (node: Node) => DOMOutputSpec;
|
||
};
|
||
/**
|
||
Gather the serializers in a schema's mark specs into an object.
|
||
*/
|
||
static marksFromSchema(schema: Schema): {
|
||
[mark: string]: (mark: Mark, inline: boolean) => DOMOutputSpec;
|
||
};
|
||
}
|
||
|
||
/**
|
||
You can [_resolve_](https://prosemirror.net/docs/ref/#model.Node.resolve) a position to get more
|
||
information about it. Objects of this class represent such a
|
||
resolved position, providing various pieces of context
|
||
information, and some helper methods.
|
||
|
||
Throughout this interface, methods that take an optional `depth`
|
||
parameter will interpret undefined as `this.depth` and negative
|
||
numbers as `this.depth + value`.
|
||
*/
|
||
declare class ResolvedPos {
|
||
/**
|
||
The position that was resolved.
|
||
*/
|
||
readonly pos: number;
|
||
/**
|
||
The offset this position has into its parent node.
|
||
*/
|
||
readonly parentOffset: number;
|
||
/**
|
||
The number of levels the parent node is from the root. If this
|
||
position points directly into the root node, it is 0. If it
|
||
points into a top-level paragraph, 1, and so on.
|
||
*/
|
||
depth: number;
|
||
/**
|
||
The parent node that the position points into. Note that even if
|
||
a position points into a text node, that node is not considered
|
||
the parent—text nodes are ‘flat’ in this model, and have no content.
|
||
*/
|
||
get parent(): Node;
|
||
/**
|
||
The root node in which the position was resolved.
|
||
*/
|
||
get doc(): Node;
|
||
/**
|
||
The ancestor node at the given level. `p.node(p.depth)` is the
|
||
same as `p.parent`.
|
||
*/
|
||
node(depth?: number | null): Node;
|
||
/**
|
||
The index into the ancestor at the given level. If this points
|
||
at the 3rd node in the 2nd paragraph on the top level, for
|
||
example, `p.index(0)` is 1 and `p.index(1)` is 2.
|
||
*/
|
||
index(depth?: number | null): number;
|
||
/**
|
||
The index pointing after this position into the ancestor at the
|
||
given level.
|
||
*/
|
||
indexAfter(depth?: number | null): number;
|
||
/**
|
||
The (absolute) position at the start of the node at the given
|
||
level.
|
||
*/
|
||
start(depth?: number | null): number;
|
||
/**
|
||
The (absolute) position at the end of the node at the given
|
||
level.
|
||
*/
|
||
end(depth?: number | null): number;
|
||
/**
|
||
The (absolute) position directly before the wrapping node at the
|
||
given level, or, when `depth` is `this.depth + 1`, the original
|
||
position.
|
||
*/
|
||
before(depth?: number | null): number;
|
||
/**
|
||
The (absolute) position directly after the wrapping node at the
|
||
given level, or the original position when `depth` is `this.depth + 1`.
|
||
*/
|
||
after(depth?: number | null): number;
|
||
/**
|
||
When this position points into a text node, this returns the
|
||
distance between the position and the start of the text node.
|
||
Will be zero for positions that point between nodes.
|
||
*/
|
||
get textOffset(): number;
|
||
/**
|
||
Get the node directly after the position, if any. If the position
|
||
points into a text node, only the part of that node after the
|
||
position is returned.
|
||
*/
|
||
get nodeAfter(): Node | null;
|
||
/**
|
||
Get the node directly before the position, if any. If the
|
||
position points into a text node, only the part of that node
|
||
before the position is returned.
|
||
*/
|
||
get nodeBefore(): Node | null;
|
||
/**
|
||
Get the position at the given index in the parent node at the
|
||
given depth (which defaults to `this.depth`).
|
||
*/
|
||
posAtIndex(index: number, depth?: number | null): number;
|
||
/**
|
||
Get the marks at this position, factoring in the surrounding
|
||
marks' [`inclusive`](https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive) property. If the
|
||
position is at the start of a non-empty node, the marks of the
|
||
node after it (if any) are returned.
|
||
*/
|
||
marks(): readonly Mark[];
|
||
/**
|
||
Get the marks after the current position, if any, except those
|
||
that are non-inclusive and not present at position `$end`. This
|
||
is mostly useful for getting the set of marks to preserve after a
|
||
deletion. Will return `null` if this position is at the end of
|
||
its parent node or its parent node isn't a textblock (in which
|
||
case no marks should be preserved).
|
||
*/
|
||
marksAcross($end: ResolvedPos): readonly Mark[] | null;
|
||
/**
|
||
The depth up to which this position and the given (non-resolved)
|
||
position share the same parent nodes.
|
||
*/
|
||
sharedDepth(pos: number): number;
|
||
/**
|
||
Returns a range based on the place where this position and the
|
||
given position diverge around block content. If both point into
|
||
the same textblock, for example, a range around that textblock
|
||
will be returned. If they point into different blocks, the range
|
||
around those blocks in their shared ancestor is returned. You can
|
||
pass in an optional predicate that will be called with a parent
|
||
node to see if a range into that parent is acceptable.
|
||
*/
|
||
blockRange(other?: ResolvedPos, pred?: (node: Node) => boolean): NodeRange | null;
|
||
/**
|
||
Query whether the given position shares the same parent node.
|
||
*/
|
||
sameParent(other: ResolvedPos): boolean;
|
||
/**
|
||
Return the greater of this and the given position.
|
||
*/
|
||
max(other: ResolvedPos): ResolvedPos;
|
||
/**
|
||
Return the smaller of this and the given position.
|
||
*/
|
||
min(other: ResolvedPos): ResolvedPos;
|
||
}
|
||
/**
|
||
Represents a flat range of content, i.e. one that starts and
|
||
ends in the same node.
|
||
*/
|
||
declare class NodeRange {
|
||
/**
|
||
A resolved position along the start of the content. May have a
|
||
`depth` greater than this object's `depth` property, since
|
||
these are the positions that were used to compute the range,
|
||
not re-resolved positions directly at its boundaries.
|
||
*/
|
||
readonly $from: ResolvedPos;
|
||
/**
|
||
A position along the end of the content. See
|
||
caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).
|
||
*/
|
||
readonly $to: ResolvedPos;
|
||
/**
|
||
The depth of the node that this range points into.
|
||
*/
|
||
readonly depth: number;
|
||
/**
|
||
Construct a node range. `$from` and `$to` should point into the
|
||
same node until at least the given `depth`, since a node range
|
||
denotes an adjacent set of nodes in a single parent node.
|
||
*/
|
||
constructor(
|
||
/**
|
||
A resolved position along the start of the content. May have a
|
||
`depth` greater than this object's `depth` property, since
|
||
these are the positions that were used to compute the range,
|
||
not re-resolved positions directly at its boundaries.
|
||
*/
|
||
$from: ResolvedPos,
|
||
/**
|
||
A position along the end of the content. See
|
||
caveat for [`$from`](https://prosemirror.net/docs/ref/#model.NodeRange.$from).
|
||
*/
|
||
$to: ResolvedPos,
|
||
/**
|
||
The depth of the node that this range points into.
|
||
*/
|
||
depth: number);
|
||
/**
|
||
The position at the start of the range.
|
||
*/
|
||
get start(): number;
|
||
/**
|
||
The position at the end of the range.
|
||
*/
|
||
get end(): number;
|
||
/**
|
||
The parent node that the range points into.
|
||
*/
|
||
get parent(): Node;
|
||
/**
|
||
The start index of the range in the parent node.
|
||
*/
|
||
get startIndex(): number;
|
||
/**
|
||
The end index of the range in the parent node.
|
||
*/
|
||
get endIndex(): number;
|
||
}
|
||
|
||
/**
|
||
Error type raised by [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) when
|
||
given an invalid replacement.
|
||
*/
|
||
declare class ReplaceError extends Error {
|
||
}
|
||
/**
|
||
A slice represents a piece cut out of a larger document. It
|
||
stores not only a fragment, but also the depth up to which nodes on
|
||
both side are ‘open’ (cut through).
|
||
*/
|
||
declare class Slice {
|
||
/**
|
||
The slice's content.
|
||
*/
|
||
readonly content: Fragment;
|
||
/**
|
||
The open depth at the start of the fragment.
|
||
*/
|
||
readonly openStart: number;
|
||
/**
|
||
The open depth at the end.
|
||
*/
|
||
readonly openEnd: number;
|
||
/**
|
||
Create a slice. When specifying a non-zero open depth, you must
|
||
make sure that there are nodes of at least that depth at the
|
||
appropriate side of the fragment—i.e. if the fragment is an
|
||
empty paragraph node, `openStart` and `openEnd` can't be greater
|
||
than 1.
|
||
|
||
It is not necessary for the content of open nodes to conform to
|
||
the schema's content constraints, though it should be a valid
|
||
start/end/middle for such a node, depending on which sides are
|
||
open.
|
||
*/
|
||
constructor(
|
||
/**
|
||
The slice's content.
|
||
*/
|
||
content: Fragment,
|
||
/**
|
||
The open depth at the start of the fragment.
|
||
*/
|
||
openStart: number,
|
||
/**
|
||
The open depth at the end.
|
||
*/
|
||
openEnd: number);
|
||
/**
|
||
The size this slice would add when inserted into a document.
|
||
*/
|
||
get size(): number;
|
||
/**
|
||
Tests whether this slice is equal to another slice.
|
||
*/
|
||
eq(other: Slice): boolean;
|
||
/**
|
||
Convert a slice to a JSON-serializable representation.
|
||
*/
|
||
toJSON(): any;
|
||
/**
|
||
Deserialize a slice from its JSON representation.
|
||
*/
|
||
static fromJSON(schema: Schema, json: any): Slice;
|
||
/**
|
||
Create a slice from a fragment by taking the maximum possible
|
||
open value on both side of the fragment.
|
||
*/
|
||
static maxOpen(fragment: Fragment, openIsolating?: boolean): Slice;
|
||
/**
|
||
The empty slice.
|
||
*/
|
||
static empty: Slice;
|
||
}
|
||
|
||
/**
|
||
These are the options recognized by the
|
||
[`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse) and
|
||
[`parseSlice`](https://prosemirror.net/docs/ref/#model.DOMParser.parseSlice) methods.
|
||
*/
|
||
interface ParseOptions {
|
||
/**
|
||
By default, whitespace is collapsed as per HTML's rules. Pass
|
||
`true` to preserve whitespace, but normalize newlines to
|
||
spaces, and `"full"` to preserve whitespace entirely.
|
||
*/
|
||
preserveWhitespace?: boolean | "full";
|
||
/**
|
||
When given, the parser will, beside parsing the content,
|
||
record the document positions of the given DOM positions. It
|
||
will do so by writing to the objects, adding a `pos` property
|
||
that holds the document position. DOM positions that are not
|
||
in the parsed content will not be written to.
|
||
*/
|
||
findPositions?: {
|
||
node: DOMNode;
|
||
offset: number;
|
||
pos?: number;
|
||
}[];
|
||
/**
|
||
The child node index to start parsing from.
|
||
*/
|
||
from?: number;
|
||
/**
|
||
The child node index to stop parsing at.
|
||
*/
|
||
to?: number;
|
||
/**
|
||
By default, the content is parsed into the schema's default
|
||
[top node type](https://prosemirror.net/docs/ref/#model.Schema.topNodeType). You can pass this
|
||
option to use the type and attributes from a different node
|
||
as the top container.
|
||
*/
|
||
topNode?: Node;
|
||
/**
|
||
Provide the starting content match that content parsed into the
|
||
top node is matched against.
|
||
*/
|
||
topMatch?: ContentMatch;
|
||
/**
|
||
A set of additional nodes to count as
|
||
[context](https://prosemirror.net/docs/ref/#model.ParseRule.context) when parsing, above the
|
||
given [top node](https://prosemirror.net/docs/ref/#model.ParseOptions.topNode).
|
||
*/
|
||
context?: ResolvedPos;
|
||
}
|
||
/**
|
||
A value that describes how to parse a given DOM node or inline
|
||
style as a ProseMirror node or mark.
|
||
*/
|
||
interface ParseRule {
|
||
/**
|
||
A CSS selector describing the kind of DOM elements to match. A
|
||
single rule should have _either_ a `tag` or a `style` property.
|
||
*/
|
||
tag?: string;
|
||
/**
|
||
The namespace to match. This should be used with `tag`.
|
||
Nodes are only matched when the namespace matches or this property
|
||
is null.
|
||
*/
|
||
namespace?: string;
|
||
/**
|
||
A CSS property name to match. When given, this rule matches
|
||
inline styles that list that property. May also have the form
|
||
`"property=value"`, in which case the rule only matches if the
|
||
property's value exactly matches the given value. (For more
|
||
complicated filters, use [`getAttrs`](https://prosemirror.net/docs/ref/#model.ParseRule.getAttrs)
|
||
and return false to indicate that the match failed.) Rules
|
||
matching styles may only produce [marks](https://prosemirror.net/docs/ref/#model.ParseRule.mark),
|
||
not nodes.
|
||
*/
|
||
style?: string;
|
||
/**
|
||
Can be used to change the order in which the parse rules in a
|
||
schema are tried. Those with higher priority come first. Rules
|
||
without a priority are counted as having priority 50. This
|
||
property is only meaningful in a schema—when directly
|
||
constructing a parser, the order of the rule array is used.
|
||
*/
|
||
priority?: number;
|
||
/**
|
||
By default, when a rule matches an element or style, no further
|
||
rules get a chance to match it. By setting this to `false`, you
|
||
indicate that even when this rule matches, other rules that come
|
||
after it should also run.
|
||
*/
|
||
consuming?: boolean;
|
||
/**
|
||
When given, restricts this rule to only match when the current
|
||
context—the parent nodes into which the content is being
|
||
parsed—matches this expression. Should contain one or more node
|
||
names or node group names followed by single or double slashes.
|
||
For example `"paragraph/"` means the rule only matches when the
|
||
parent node is a paragraph, `"blockquote/paragraph/"` restricts
|
||
it to be in a paragraph that is inside a blockquote, and
|
||
`"section//"` matches any position inside a section—a double
|
||
slash matches any sequence of ancestor nodes. To allow multiple
|
||
different contexts, they can be separated by a pipe (`|`)
|
||
character, as in `"blockquote/|list_item/"`.
|
||
*/
|
||
context?: string;
|
||
/**
|
||
The name of the node type to create when this rule matches. Only
|
||
valid for rules with a `tag` property, not for style rules. Each
|
||
rule should have one of a `node`, `mark`, `clearMark`, or
|
||
`ignore` property (except when it appears in a
|
||
[node](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM) or [mark
|
||
spec](https://prosemirror.net/docs/ref/#model.MarkSpec.parseDOM), in which case the `node` or
|
||
`mark` property will be derived from its position).
|
||
*/
|
||
node?: string;
|
||
/**
|
||
The name of the mark type to wrap the matched content in.
|
||
*/
|
||
mark?: string;
|
||
/**
|
||
[Style](https://prosemirror.net/docs/ref/#model.ParseRule.style) rules can remove marks from the
|
||
set of active marks.
|
||
*/
|
||
clearMark?: (mark: Mark) => boolean;
|
||
/**
|
||
When true, ignore content that matches this rule.
|
||
*/
|
||
ignore?: boolean;
|
||
/**
|
||
When true, finding an element that matches this rule will close
|
||
the current node.
|
||
*/
|
||
closeParent?: boolean;
|
||
/**
|
||
When true, ignore the node that matches this rule, but do parse
|
||
its content.
|
||
*/
|
||
skip?: boolean;
|
||
/**
|
||
Attributes for the node or mark created by this rule. When
|
||
`getAttrs` is provided, it takes precedence.
|
||
*/
|
||
attrs?: Attrs;
|
||
/**
|
||
A function used to compute the attributes for the node or mark
|
||
created by this rule. Can also be used to describe further
|
||
conditions the DOM element or style must match. When it returns
|
||
`false`, the rule won't match. When it returns null or undefined,
|
||
that is interpreted as an empty/default set of attributes.
|
||
|
||
Called with a DOM Element for `tag` rules, and with a string (the
|
||
style's value) for `style` rules.
|
||
*/
|
||
getAttrs?: (node: HTMLElement | string) => Attrs | false | null;
|
||
/**
|
||
For `tag` rules that produce non-leaf nodes or marks, by default
|
||
the content of the DOM element is parsed as content of the mark
|
||
or node. If the child nodes are in a descendent node, this may be
|
||
a CSS selector string that the parser must use to find the actual
|
||
content element, or a function that returns the actual content
|
||
element to the parser.
|
||
*/
|
||
contentElement?: string | HTMLElement | ((node: DOMNode) => HTMLElement);
|
||
/**
|
||
Can be used to override the content of a matched node. When
|
||
present, instead of parsing the node's child nodes, the result of
|
||
this function is used.
|
||
*/
|
||
getContent?: (node: DOMNode, schema: Schema) => Fragment;
|
||
/**
|
||
Controls whether whitespace should be preserved when parsing the
|
||
content inside the matched element. `false` means whitespace may
|
||
be collapsed, `true` means that whitespace should be preserved
|
||
but newlines normalized to spaces, and `"full"` means that
|
||
newlines should also be preserved.
|
||
*/
|
||
preserveWhitespace?: boolean | "full";
|
||
}
|
||
/**
|
||
A DOM parser represents a strategy for parsing DOM content into a
|
||
ProseMirror document conforming to a given schema. Its behavior is
|
||
defined by an array of [rules](https://prosemirror.net/docs/ref/#model.ParseRule).
|
||
*/
|
||
declare class DOMParser {
|
||
/**
|
||
The schema into which the parser parses.
|
||
*/
|
||
readonly schema: Schema;
|
||
/**
|
||
The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser
|
||
uses, in order of precedence.
|
||
*/
|
||
readonly rules: readonly ParseRule[];
|
||
/**
|
||
Create a parser that targets the given schema, using the given
|
||
parsing rules.
|
||
*/
|
||
constructor(
|
||
/**
|
||
The schema into which the parser parses.
|
||
*/
|
||
schema: Schema,
|
||
/**
|
||
The set of [parse rules](https://prosemirror.net/docs/ref/#model.ParseRule) that the parser
|
||
uses, in order of precedence.
|
||
*/
|
||
rules: readonly ParseRule[]);
|
||
/**
|
||
Parse a document from the content of a DOM node.
|
||
*/
|
||
parse(dom: DOMNode, options?: ParseOptions): Node;
|
||
/**
|
||
Parses the content of the given DOM node, like
|
||
[`parse`](https://prosemirror.net/docs/ref/#model.DOMParser.parse), and takes the same set of
|
||
options. But unlike that method, which produces a whole node,
|
||
this one returns a slice that is open at the sides, meaning that
|
||
the schema constraints aren't applied to the start of nodes to
|
||
the left of the input and the end of nodes at the end.
|
||
*/
|
||
parseSlice(dom: DOMNode, options?: ParseOptions): Slice;
|
||
/**
|
||
Construct a DOM parser using the parsing rules listed in a
|
||
schema's [node specs](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM), reordered by
|
||
[priority](https://prosemirror.net/docs/ref/#model.ParseRule.priority).
|
||
*/
|
||
static fromSchema(schema: Schema): DOMParser;
|
||
}
|
||
|
||
/**
|
||
An object holding the attributes of a node.
|
||
*/
|
||
declare type Attrs = {
|
||
readonly [attr: string]: any;
|
||
};
|
||
/**
|
||
Node types are objects allocated once per `Schema` and used to
|
||
[tag](https://prosemirror.net/docs/ref/#model.Node.type) `Node` instances. They contain information
|
||
about the node type, such as its name and what kind of node it
|
||
represents.
|
||
*/
|
||
declare class NodeType {
|
||
/**
|
||
The name the node type has in this schema.
|
||
*/
|
||
readonly name: string;
|
||
/**
|
||
A link back to the `Schema` the node type belongs to.
|
||
*/
|
||
readonly schema: Schema;
|
||
/**
|
||
The spec that this type is based on
|
||
*/
|
||
readonly spec: NodeSpec;
|
||
/**
|
||
True if this node type has inline content.
|
||
*/
|
||
inlineContent: boolean;
|
||
/**
|
||
True if this is a block type
|
||
*/
|
||
isBlock: boolean;
|
||
/**
|
||
True if this is the text node type.
|
||
*/
|
||
isText: boolean;
|
||
/**
|
||
True if this is an inline type.
|
||
*/
|
||
get isInline(): boolean;
|
||
/**
|
||
True if this is a textblock type, a block that contains inline
|
||
content.
|
||
*/
|
||
get isTextblock(): boolean;
|
||
/**
|
||
True for node types that allow no content.
|
||
*/
|
||
get isLeaf(): boolean;
|
||
/**
|
||
True when this node is an atom, i.e. when it does not have
|
||
directly editable content.
|
||
*/
|
||
get isAtom(): boolean;
|
||
/**
|
||
The starting match of the node type's content expression.
|
||
*/
|
||
contentMatch: ContentMatch;
|
||
/**
|
||
The set of marks allowed in this node. `null` means all marks
|
||
are allowed.
|
||
*/
|
||
markSet: readonly MarkType[] | null;
|
||
/**
|
||
The node type's [whitespace](https://prosemirror.net/docs/ref/#model.NodeSpec.whitespace) option.
|
||
*/
|
||
get whitespace(): "pre" | "normal";
|
||
/**
|
||
Tells you whether this node type has any required attributes.
|
||
*/
|
||
hasRequiredAttrs(): boolean;
|
||
/**
|
||
Indicates whether this node allows some of the same content as
|
||
the given node type.
|
||
*/
|
||
compatibleContent(other: NodeType): boolean;
|
||
/**
|
||
Create a `Node` of this type. The given attributes are
|
||
checked and defaulted (you can pass `null` to use the type's
|
||
defaults entirely, if no required attributes exist). `content`
|
||
may be a `Fragment`, a node, an array of nodes, or
|
||
`null`. Similarly `marks` may be `null` to default to the empty
|
||
set of marks.
|
||
*/
|
||
create(attrs?: Attrs | null, content?: Fragment | Node | readonly Node[] | null, marks?: readonly Mark[]): Node;
|
||
/**
|
||
Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content
|
||
against the node type's content restrictions, and throw an error
|
||
if it doesn't match.
|
||
*/
|
||
createChecked(attrs?: Attrs | null, content?: Fragment | Node | readonly Node[] | null, marks?: readonly Mark[]): Node;
|
||
/**
|
||
Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but see if it is
|
||
necessary to add nodes to the start or end of the given fragment
|
||
to make it fit the node. If no fitting wrapping can be found,
|
||
return null. Note that, due to the fact that required nodes can
|
||
always be created, this will always succeed if you pass null or
|
||
`Fragment.empty` as content.
|
||
*/
|
||
createAndFill(attrs?: Attrs | null, content?: Fragment | Node | readonly Node[] | null, marks?: readonly Mark[]): Node | null;
|
||
/**
|
||
Returns true if the given fragment is valid content for this node
|
||
type with the given attributes.
|
||
*/
|
||
validContent(content: Fragment): boolean;
|
||
/**
|
||
Check whether the given mark type is allowed in this node.
|
||
*/
|
||
allowsMarkType(markType: MarkType): boolean;
|
||
/**
|
||
Test whether the given set of marks are allowed in this node.
|
||
*/
|
||
allowsMarks(marks: readonly Mark[]): boolean;
|
||
/**
|
||
Removes the marks that are not allowed in this node from the given set.
|
||
*/
|
||
allowedMarks(marks: readonly Mark[]): readonly Mark[];
|
||
}
|
||
/**
|
||
Like nodes, marks (which are associated with nodes to signify
|
||
things like emphasis or being part of a link) are
|
||
[tagged](https://prosemirror.net/docs/ref/#model.Mark.type) with type objects, which are
|
||
instantiated once per `Schema`.
|
||
*/
|
||
declare class MarkType {
|
||
/**
|
||
The name of the mark type.
|
||
*/
|
||
readonly name: string;
|
||
/**
|
||
The schema that this mark type instance is part of.
|
||
*/
|
||
readonly schema: Schema;
|
||
/**
|
||
The spec on which the type is based.
|
||
*/
|
||
readonly spec: MarkSpec;
|
||
/**
|
||
Create a mark of this type. `attrs` may be `null` or an object
|
||
containing only some of the mark's attributes. The others, if
|
||
they have defaults, will be added.
|
||
*/
|
||
create(attrs?: Attrs | null): Mark;
|
||
/**
|
||
When there is a mark of this type in the given set, a new set
|
||
without it is returned. Otherwise, the input set is returned.
|
||
*/
|
||
removeFromSet(set: readonly Mark[]): readonly Mark[];
|
||
/**
|
||
Tests whether there is a mark of this type in the given set.
|
||
*/
|
||
isInSet(set: readonly Mark[]): Mark | undefined;
|
||
/**
|
||
Queries whether a given mark type is
|
||
[excluded](https://prosemirror.net/docs/ref/#model.MarkSpec.excludes) by this one.
|
||
*/
|
||
excludes(other: MarkType): boolean;
|
||
}
|
||
/**
|
||
An object describing a schema, as passed to the [`Schema`](https://prosemirror.net/docs/ref/#model.Schema)
|
||
constructor.
|
||
*/
|
||
interface SchemaSpec<Nodes extends string = any, Marks extends string = any> {
|
||
/**
|
||
The node types in this schema. Maps names to
|
||
[`NodeSpec`](https://prosemirror.net/docs/ref/#model.NodeSpec) objects that describe the node type
|
||
associated with that name. Their order is significant—it
|
||
determines which [parse rules](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM) take
|
||
precedence by default, and which nodes come first in a given
|
||
[group](https://prosemirror.net/docs/ref/#model.NodeSpec.group).
|
||
*/
|
||
nodes: {
|
||
[name in Nodes]: NodeSpec;
|
||
} | OrderedMap<NodeSpec>;
|
||
/**
|
||
The mark types that exist in this schema. The order in which they
|
||
are provided determines the order in which [mark
|
||
sets](https://prosemirror.net/docs/ref/#model.Mark.addToSet) are sorted and in which [parse
|
||
rules](https://prosemirror.net/docs/ref/#model.MarkSpec.parseDOM) are tried.
|
||
*/
|
||
marks?: {
|
||
[name in Marks]: MarkSpec;
|
||
} | OrderedMap<MarkSpec>;
|
||
/**
|
||
The name of the default top-level node for the schema. Defaults
|
||
to `"doc"`.
|
||
*/
|
||
topNode?: string;
|
||
}
|
||
/**
|
||
A description of a node type, used when defining a schema.
|
||
*/
|
||
interface NodeSpec {
|
||
/**
|
||
The content expression for this node, as described in the [schema
|
||
guide](/docs/guide/#schema.content_expressions). When not given,
|
||
the node does not allow any content.
|
||
*/
|
||
content?: string;
|
||
/**
|
||
The marks that are allowed inside of this node. May be a
|
||
space-separated string referring to mark names or groups, `"_"`
|
||
to explicitly allow all marks, or `""` to disallow marks. When
|
||
not given, nodes with inline content default to allowing all
|
||
marks, other nodes default to not allowing marks.
|
||
*/
|
||
marks?: string;
|
||
/**
|
||
The group or space-separated groups to which this node belongs,
|
||
which can be referred to in the content expressions for the
|
||
schema.
|
||
*/
|
||
group?: string;
|
||
/**
|
||
Should be set to true for inline nodes. (Implied for text nodes.)
|
||
*/
|
||
inline?: boolean;
|
||
/**
|
||
Can be set to true to indicate that, though this isn't a [leaf
|
||
node](https://prosemirror.net/docs/ref/#model.NodeType.isLeaf), it doesn't have directly editable
|
||
content and should be treated as a single unit in the view.
|
||
*/
|
||
atom?: boolean;
|
||
/**
|
||
The attributes that nodes of this type get.
|
||
*/
|
||
attrs?: {
|
||
[name: string]: AttributeSpec;
|
||
};
|
||
/**
|
||
Controls whether nodes of this type can be selected as a [node
|
||
selection](https://prosemirror.net/docs/ref/#state.NodeSelection). Defaults to true for non-text
|
||
nodes.
|
||
*/
|
||
selectable?: boolean;
|
||
/**
|
||
Determines whether nodes of this type can be dragged without
|
||
being selected. Defaults to false.
|
||
*/
|
||
draggable?: boolean;
|
||
/**
|
||
Can be used to indicate that this node contains code, which
|
||
causes some commands to behave differently.
|
||
*/
|
||
code?: boolean;
|
||
/**
|
||
Controls way whitespace in this a node is parsed. The default is
|
||
`"normal"`, which causes the [DOM parser](https://prosemirror.net/docs/ref/#model.DOMParser) to
|
||
collapse whitespace in normal mode, and normalize it (replacing
|
||
newlines and such with spaces) otherwise. `"pre"` causes the
|
||
parser to preserve spaces inside the node. When this option isn't
|
||
given, but [`code`](https://prosemirror.net/docs/ref/#model.NodeSpec.code) is true, `whitespace`
|
||
will default to `"pre"`. Note that this option doesn't influence
|
||
the way the node is rendered—that should be handled by `toDOM`
|
||
and/or styling.
|
||
*/
|
||
whitespace?: "pre" | "normal";
|
||
/**
|
||
Determines whether this node is considered an important parent
|
||
node during replace operations (such as paste). Non-defining (the
|
||
default) nodes get dropped when their entire content is replaced,
|
||
whereas defining nodes persist and wrap the inserted content.
|
||
*/
|
||
definingAsContext?: boolean;
|
||
/**
|
||
In inserted content the defining parents of the content are
|
||
preserved when possible. Typically, non-default-paragraph
|
||
textblock types, and possibly list items, are marked as defining.
|
||
*/
|
||
definingForContent?: boolean;
|
||
/**
|
||
When enabled, enables both
|
||
[`definingAsContext`](https://prosemirror.net/docs/ref/#model.NodeSpec.definingAsContext) and
|
||
[`definingForContent`](https://prosemirror.net/docs/ref/#model.NodeSpec.definingForContent).
|
||
*/
|
||
defining?: boolean;
|
||
/**
|
||
When enabled (default is false), the sides of nodes of this type
|
||
count as boundaries that regular editing operations, like
|
||
backspacing or lifting, won't cross. An example of a node that
|
||
should probably have this enabled is a table cell.
|
||
*/
|
||
isolating?: boolean;
|
||
/**
|
||
Defines the default way a node of this type should be serialized
|
||
to DOM/HTML (as used by
|
||
[`DOMSerializer.fromSchema`](https://prosemirror.net/docs/ref/#model.DOMSerializer^fromSchema)).
|
||
Should return a DOM node or an [array
|
||
structure](https://prosemirror.net/docs/ref/#model.DOMOutputSpec) that describes one, with an
|
||
optional number zero (“hole”) in it to indicate where the node's
|
||
content should be inserted.
|
||
|
||
For text nodes, the default is to create a text DOM node. Though
|
||
it is possible to create a serializer where text is rendered
|
||
differently, this is not supported inside the editor, so you
|
||
shouldn't override that in your text node spec.
|
||
*/
|
||
toDOM?: (node: Node) => DOMOutputSpec;
|
||
/**
|
||
Associates DOM parser information with this node, which can be
|
||
used by [`DOMParser.fromSchema`](https://prosemirror.net/docs/ref/#model.DOMParser^fromSchema) to
|
||
automatically derive a parser. The `node` field in the rules is
|
||
implied (the name of this node will be filled in automatically).
|
||
If you supply your own parser, you do not need to also specify
|
||
parsing rules in your schema.
|
||
*/
|
||
parseDOM?: readonly ParseRule[];
|
||
/**
|
||
Defines the default way a node of this type should be serialized
|
||
to a string representation for debugging (e.g. in error messages).
|
||
*/
|
||
toDebugString?: (node: Node) => string;
|
||
/**
|
||
Defines the default way a [leaf node](https://prosemirror.net/docs/ref/#model.NodeType.isLeaf) of
|
||
this type should be serialized to a string (as used by
|
||
[`Node.textBetween`](https://prosemirror.net/docs/ref/#model.Node^textBetween) and
|
||
[`Node.textContent`](https://prosemirror.net/docs/ref/#model.Node^textContent)).
|
||
*/
|
||
leafText?: (node: Node) => string;
|
||
/**
|
||
Node specs may include arbitrary properties that can be read by
|
||
other code via [`NodeType.spec`](https://prosemirror.net/docs/ref/#model.NodeType.spec).
|
||
*/
|
||
[key: string]: any;
|
||
}
|
||
/**
|
||
Used to define marks when creating a schema.
|
||
*/
|
||
interface MarkSpec {
|
||
/**
|
||
The attributes that marks of this type get.
|
||
*/
|
||
attrs?: {
|
||
[name: string]: AttributeSpec;
|
||
};
|
||
/**
|
||
Whether this mark should be active when the cursor is positioned
|
||
at its end (or at its start when that is also the start of the
|
||
parent node). Defaults to true.
|
||
*/
|
||
inclusive?: boolean;
|
||
/**
|
||
Determines which other marks this mark can coexist with. Should
|
||
be a space-separated strings naming other marks or groups of marks.
|
||
When a mark is [added](https://prosemirror.net/docs/ref/#model.Mark.addToSet) to a set, all marks
|
||
that it excludes are removed in the process. If the set contains
|
||
any mark that excludes the new mark but is not, itself, excluded
|
||
by the new mark, the mark can not be added an the set. You can
|
||
use the value `"_"` to indicate that the mark excludes all
|
||
marks in the schema.
|
||
|
||
Defaults to only being exclusive with marks of the same type. You
|
||
can set it to an empty string (or any string not containing the
|
||
mark's own name) to allow multiple marks of a given type to
|
||
coexist (as long as they have different attributes).
|
||
*/
|
||
excludes?: string;
|
||
/**
|
||
The group or space-separated groups to which this mark belongs.
|
||
*/
|
||
group?: string;
|
||
/**
|
||
Determines whether marks of this type can span multiple adjacent
|
||
nodes when serialized to DOM/HTML. Defaults to true.
|
||
*/
|
||
spanning?: boolean;
|
||
/**
|
||
Defines the default way marks of this type should be serialized
|
||
to DOM/HTML. When the resulting spec contains a hole, that is
|
||
where the marked content is placed. Otherwise, it is appended to
|
||
the top node.
|
||
*/
|
||
toDOM?: (mark: Mark, inline: boolean) => DOMOutputSpec;
|
||
/**
|
||
Associates DOM parser information with this mark (see the
|
||
corresponding [node spec field](https://prosemirror.net/docs/ref/#model.NodeSpec.parseDOM)). The
|
||
`mark` field in the rules is implied.
|
||
*/
|
||
parseDOM?: readonly ParseRule[];
|
||
/**
|
||
Mark specs can include additional properties that can be
|
||
inspected through [`MarkType.spec`](https://prosemirror.net/docs/ref/#model.MarkType.spec) when
|
||
working with the mark.
|
||
*/
|
||
[key: string]: any;
|
||
}
|
||
/**
|
||
Used to [define](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) attributes on nodes or
|
||
marks.
|
||
*/
|
||
interface AttributeSpec {
|
||
/**
|
||
The default value for this attribute, to use when no explicit
|
||
value is provided. Attributes that have no default must be
|
||
provided whenever a node or mark of a type that has them is
|
||
created.
|
||
*/
|
||
default?: any;
|
||
}
|
||
/**
|
||
A document schema. Holds [node](https://prosemirror.net/docs/ref/#model.NodeType) and [mark
|
||
type](https://prosemirror.net/docs/ref/#model.MarkType) objects for the nodes and marks that may
|
||
occur in conforming documents, and provides functionality for
|
||
creating and deserializing such documents.
|
||
|
||
When given, the type parameters provide the names of the nodes and
|
||
marks in this schema.
|
||
*/
|
||
declare class Schema<Nodes extends string = any, Marks extends string = any> {
|
||
/**
|
||
The [spec](https://prosemirror.net/docs/ref/#model.SchemaSpec) on which the schema is based,
|
||
with the added guarantee that its `nodes` and `marks`
|
||
properties are
|
||
[`OrderedMap`](https://github.com/marijnh/orderedmap) instances
|
||
(not raw objects).
|
||
*/
|
||
spec: {
|
||
nodes: OrderedMap<NodeSpec>;
|
||
marks: OrderedMap<MarkSpec>;
|
||
topNode?: string;
|
||
};
|
||
/**
|
||
An object mapping the schema's node names to node type objects.
|
||
*/
|
||
nodes: {
|
||
readonly [name in Nodes]: NodeType;
|
||
} & {
|
||
readonly [key: string]: NodeType;
|
||
};
|
||
/**
|
||
A map from mark names to mark type objects.
|
||
*/
|
||
marks: {
|
||
readonly [name in Marks]: MarkType;
|
||
} & {
|
||
readonly [key: string]: MarkType;
|
||
};
|
||
/**
|
||
Construct a schema from a schema [specification](https://prosemirror.net/docs/ref/#model.SchemaSpec).
|
||
*/
|
||
constructor(spec: SchemaSpec<Nodes, Marks>);
|
||
/**
|
||
The type of the [default top node](https://prosemirror.net/docs/ref/#model.SchemaSpec.topNode)
|
||
for this schema.
|
||
*/
|
||
topNodeType: NodeType;
|
||
/**
|
||
An object for storing whatever values modules may want to
|
||
compute and cache per schema. (If you want to store something
|
||
in it, try to use property names unlikely to clash.)
|
||
*/
|
||
cached: {
|
||
[key: string]: any;
|
||
};
|
||
/**
|
||
Create a node in this schema. The `type` may be a string or a
|
||
`NodeType` instance. Attributes will be extended with defaults,
|
||
`content` may be a `Fragment`, `null`, a `Node`, or an array of
|
||
nodes.
|
||
*/
|
||
node(type: string | NodeType, attrs?: Attrs | null, content?: Fragment | Node | readonly Node[], marks?: readonly Mark[]): Node;
|
||
/**
|
||
Create a text node in the schema. Empty text nodes are not
|
||
allowed.
|
||
*/
|
||
text(text: string, marks?: readonly Mark[] | null): Node;
|
||
/**
|
||
Create a mark with the given type and attributes.
|
||
*/
|
||
mark(type: string | MarkType, attrs?: Attrs | null): Mark;
|
||
/**
|
||
Deserialize a node from its JSON representation. This method is
|
||
bound.
|
||
*/
|
||
nodeFromJSON(json: any): Node;
|
||
/**
|
||
Deserialize a mark from its JSON representation. This method is
|
||
bound.
|
||
*/
|
||
markFromJSON(json: any): Mark;
|
||
}
|
||
|
||
/**
|
||
A fragment represents a node's collection of child nodes.
|
||
|
||
Like nodes, fragments are persistent data structures, and you
|
||
should not mutate them or their content. Rather, you create new
|
||
instances whenever needed. The API tries to make this easy.
|
||
*/
|
||
declare class Fragment {
|
||
/**
|
||
The size of the fragment, which is the total of the size of
|
||
its content nodes.
|
||
*/
|
||
readonly size: number;
|
||
/**
|
||
Invoke a callback for all descendant nodes between the given two
|
||
positions (relative to start of this fragment). Doesn't descend
|
||
into a node when the callback returns `false`.
|
||
*/
|
||
nodesBetween(from: number, to: number, f: (node: Node, start: number, parent: Node | null, index: number) => boolean | void, nodeStart?: number, parent?: Node): void;
|
||
/**
|
||
Call the given callback for every descendant node. `pos` will be
|
||
relative to the start of the fragment. The callback may return
|
||
`false` to prevent traversal of a given node's children.
|
||
*/
|
||
descendants(f: (node: Node, pos: number, parent: Node | null, index: number) => boolean | void): void;
|
||
/**
|
||
Extract the text between `from` and `to`. See the same method on
|
||
[`Node`](https://prosemirror.net/docs/ref/#model.Node.textBetween).
|
||
*/
|
||
textBetween(from: number, to: number, blockSeparator?: string | null, leafText?: string | null | ((leafNode: Node) => string)): string;
|
||
/**
|
||
Create a new fragment containing the combined content of this
|
||
fragment and the other.
|
||
*/
|
||
append(other: Fragment): Fragment;
|
||
/**
|
||
Cut out the sub-fragment between the two given positions.
|
||
*/
|
||
cut(from: number, to?: number): Fragment;
|
||
/**
|
||
Create a new fragment in which the node at the given index is
|
||
replaced by the given node.
|
||
*/
|
||
replaceChild(index: number, node: Node): Fragment;
|
||
/**
|
||
Create a new fragment by prepending the given node to this
|
||
fragment.
|
||
*/
|
||
addToStart(node: Node): Fragment;
|
||
/**
|
||
Create a new fragment by appending the given node to this
|
||
fragment.
|
||
*/
|
||
addToEnd(node: Node): Fragment;
|
||
/**
|
||
Compare this fragment to another one.
|
||
*/
|
||
eq(other: Fragment): boolean;
|
||
/**
|
||
The first child of the fragment, or `null` if it is empty.
|
||
*/
|
||
get firstChild(): Node | null;
|
||
/**
|
||
The last child of the fragment, or `null` if it is empty.
|
||
*/
|
||
get lastChild(): Node | null;
|
||
/**
|
||
The number of child nodes in this fragment.
|
||
*/
|
||
get childCount(): number;
|
||
/**
|
||
Get the child node at the given index. Raise an error when the
|
||
index is out of range.
|
||
*/
|
||
child(index: number): Node;
|
||
/**
|
||
Get the child node at the given index, if it exists.
|
||
*/
|
||
maybeChild(index: number): Node | null;
|
||
/**
|
||
Call `f` for every child node, passing the node, its offset
|
||
into this parent node, and its index.
|
||
*/
|
||
forEach(f: (node: Node, offset: number, index: number) => void): void;
|
||
/**
|
||
Find the first position at which this fragment and another
|
||
fragment differ, or `null` if they are the same.
|
||
*/
|
||
findDiffStart(other: Fragment, pos?: number): number | null;
|
||
/**
|
||
Find the first position, searching from the end, at which this
|
||
fragment and the given fragment differ, or `null` if they are
|
||
the same. Since this position will not be the same in both
|
||
nodes, an object with two separate positions is returned.
|
||
*/
|
||
findDiffEnd(other: Fragment, pos?: number, otherPos?: number): {
|
||
a: number;
|
||
b: number;
|
||
} | null;
|
||
/**
|
||
Find the index and inner offset corresponding to a given relative
|
||
position in this fragment. The result object will be reused
|
||
(overwritten) the next time the function is called. (Not public.)
|
||
*/
|
||
findIndex(pos: number, round?: number): {
|
||
index: number;
|
||
offset: number;
|
||
};
|
||
/**
|
||
Return a debugging string that describes this fragment.
|
||
*/
|
||
toString(): string;
|
||
/**
|
||
Create a JSON-serializeable representation of this fragment.
|
||
*/
|
||
toJSON(): any;
|
||
/**
|
||
Deserialize a fragment from its JSON representation.
|
||
*/
|
||
static fromJSON(schema: Schema, value: any): Fragment;
|
||
/**
|
||
Build a fragment from an array of nodes. Ensures that adjacent
|
||
text nodes with the same marks are joined together.
|
||
*/
|
||
static fromArray(array: readonly Node[]): Fragment;
|
||
/**
|
||
Create a fragment from something that can be interpreted as a
|
||
set of nodes. For `null`, it returns the empty fragment. For a
|
||
fragment, the fragment itself. For a node or array of nodes, a
|
||
fragment containing those nodes.
|
||
*/
|
||
static from(nodes?: Fragment | Node | readonly Node[] | null): Fragment;
|
||
/**
|
||
An empty fragment. Intended to be reused whenever a node doesn't
|
||
contain anything (rather than allocating a new empty fragment for
|
||
each leaf node).
|
||
*/
|
||
static empty: Fragment;
|
||
}
|
||
|
||
declare type MatchEdge = {
|
||
type: NodeType;
|
||
next: ContentMatch;
|
||
};
|
||
/**
|
||
Instances of this class represent a match state of a node type's
|
||
[content expression](https://prosemirror.net/docs/ref/#model.NodeSpec.content), and can be used to
|
||
find out whether further content matches here, and whether a given
|
||
position is a valid end of the node.
|
||
*/
|
||
declare class ContentMatch {
|
||
/**
|
||
True when this match state represents a valid end of the node.
|
||
*/
|
||
readonly validEnd: boolean;
|
||
/**
|
||
Match a node type, returning a match after that node if
|
||
successful.
|
||
*/
|
||
matchType(type: NodeType): ContentMatch | null;
|
||
/**
|
||
Try to match a fragment. Returns the resulting match when
|
||
successful.
|
||
*/
|
||
matchFragment(frag: Fragment, start?: number, end?: number): ContentMatch | null;
|
||
/**
|
||
Get the first matching node type at this match position that can
|
||
be generated.
|
||
*/
|
||
get defaultType(): NodeType | null;
|
||
/**
|
||
Try to match the given fragment, and if that fails, see if it can
|
||
be made to match by inserting nodes in front of it. When
|
||
successful, return a fragment of inserted nodes (which may be
|
||
empty if nothing had to be inserted). When `toEnd` is true, only
|
||
return a fragment if the resulting match goes to the end of the
|
||
content expression.
|
||
*/
|
||
fillBefore(after: Fragment, toEnd?: boolean, startIndex?: number): Fragment | null;
|
||
/**
|
||
Find a set of wrapping node types that would allow a node of the
|
||
given type to appear at this position. The result may be empty
|
||
(when it fits directly) and will be null when no such wrapping
|
||
exists.
|
||
*/
|
||
findWrapping(target: NodeType): readonly NodeType[] | null;
|
||
/**
|
||
The number of outgoing edges this node has in the finite
|
||
automaton that describes the content expression.
|
||
*/
|
||
get edgeCount(): number;
|
||
/**
|
||
Get the _n_th outgoing edge from this node in the finite
|
||
automaton that describes the content expression.
|
||
*/
|
||
edge(n: number): MatchEdge;
|
||
}
|
||
|
||
/**
|
||
This class represents a node in the tree that makes up a
|
||
ProseMirror document. So a document is an instance of `Node`, with
|
||
children that are also instances of `Node`.
|
||
|
||
Nodes are persistent data structures. Instead of changing them, you
|
||
create new ones with the content you want. Old ones keep pointing
|
||
at the old document shape. This is made cheaper by sharing
|
||
structure between the old and new data as much as possible, which a
|
||
tree shape like this (without back pointers) makes easy.
|
||
|
||
**Do not** directly mutate the properties of a `Node` object. See
|
||
[the guide](/docs/guide/#doc) for more information.
|
||
*/
|
||
declare class Node {
|
||
/**
|
||
The type of node that this is.
|
||
*/
|
||
readonly type: NodeType;
|
||
/**
|
||
An object mapping attribute names to values. The kind of
|
||
attributes allowed and required are
|
||
[determined](https://prosemirror.net/docs/ref/#model.NodeSpec.attrs) by the node type.
|
||
*/
|
||
readonly attrs: Attrs;
|
||
/**
|
||
The marks (things like whether it is emphasized or part of a
|
||
link) applied to this node.
|
||
*/
|
||
readonly marks: readonly Mark[];
|
||
/**
|
||
A container holding the node's children.
|
||
*/
|
||
readonly content: Fragment;
|
||
/**
|
||
For text nodes, this contains the node's text content.
|
||
*/
|
||
readonly text: string | undefined;
|
||
/**
|
||
The size of this node, as defined by the integer-based [indexing
|
||
scheme](/docs/guide/#doc.indexing). For text nodes, this is the
|
||
amount of characters. For other leaf nodes, it is one. For
|
||
non-leaf nodes, it is the size of the content plus two (the
|
||
start and end token).
|
||
*/
|
||
get nodeSize(): number;
|
||
/**
|
||
The number of children that the node has.
|
||
*/
|
||
get childCount(): number;
|
||
/**
|
||
Get the child node at the given index. Raises an error when the
|
||
index is out of range.
|
||
*/
|
||
child(index: number): Node;
|
||
/**
|
||
Get the child node at the given index, if it exists.
|
||
*/
|
||
maybeChild(index: number): Node | null;
|
||
/**
|
||
Call `f` for every child node, passing the node, its offset
|
||
into this parent node, and its index.
|
||
*/
|
||
forEach(f: (node: Node, offset: number, index: number) => void): void;
|
||
/**
|
||
Invoke a callback for all descendant nodes recursively between
|
||
the given two positions that are relative to start of this
|
||
node's content. The callback is invoked with the node, its
|
||
position relative to the original node (method receiver),
|
||
its parent node, and its child index. When the callback returns
|
||
false for a given node, that node's children will not be
|
||
recursed over. The last parameter can be used to specify a
|
||
starting position to count from.
|
||
*/
|
||
nodesBetween(from: number, to: number, f: (node: Node, pos: number, parent: Node | null, index: number) => void | boolean, startPos?: number): void;
|
||
/**
|
||
Call the given callback for every descendant node. Doesn't
|
||
descend into a node when the callback returns `false`.
|
||
*/
|
||
descendants(f: (node: Node, pos: number, parent: Node | null, index: number) => void | boolean): void;
|
||
/**
|
||
Concatenates all the text nodes found in this fragment and its
|
||
children.
|
||
*/
|
||
get textContent(): string;
|
||
/**
|
||
Get all text between positions `from` and `to`. When
|
||
`blockSeparator` is given, it will be inserted to separate text
|
||
from different block nodes. If `leafText` is given, it'll be
|
||
inserted for every non-text leaf node encountered, otherwise
|
||
[`leafText`](https://prosemirror.net/docs/ref/#model.NodeSpec^leafText) will be used.
|
||
*/
|
||
textBetween(from: number, to: number, blockSeparator?: string | null, leafText?: null | string | ((leafNode: Node) => string)): string;
|
||
/**
|
||
Returns this node's first child, or `null` if there are no
|
||
children.
|
||
*/
|
||
get firstChild(): Node | null;
|
||
/**
|
||
Returns this node's last child, or `null` if there are no
|
||
children.
|
||
*/
|
||
get lastChild(): Node | null;
|
||
/**
|
||
Test whether two nodes represent the same piece of document.
|
||
*/
|
||
eq(other: Node): boolean;
|
||
/**
|
||
Compare the markup (type, attributes, and marks) of this node to
|
||
those of another. Returns `true` if both have the same markup.
|
||
*/
|
||
sameMarkup(other: Node): boolean;
|
||
/**
|
||
Check whether this node's markup correspond to the given type,
|
||
attributes, and marks.
|
||
*/
|
||
hasMarkup(type: NodeType, attrs?: Attrs | null, marks?: readonly Mark[]): boolean;
|
||
/**
|
||
Create a new node with the same markup as this node, containing
|
||
the given content (or empty, if no content is given).
|
||
*/
|
||
copy(content?: Fragment | null): Node;
|
||
/**
|
||
Create a copy of this node, with the given set of marks instead
|
||
of the node's own marks.
|
||
*/
|
||
mark(marks: readonly Mark[]): Node;
|
||
/**
|
||
Create a copy of this node with only the content between the
|
||
given positions. If `to` is not given, it defaults to the end of
|
||
the node.
|
||
*/
|
||
cut(from: number, to?: number): Node;
|
||
/**
|
||
Cut out the part of the document between the given positions, and
|
||
return it as a `Slice` object.
|
||
*/
|
||
slice(from: number, to?: number, includeParents?: boolean): Slice;
|
||
/**
|
||
Replace the part of the document between the given positions with
|
||
the given slice. The slice must 'fit', meaning its open sides
|
||
must be able to connect to the surrounding content, and its
|
||
content nodes must be valid children for the node they are placed
|
||
into. If any of this is violated, an error of type
|
||
[`ReplaceError`](https://prosemirror.net/docs/ref/#model.ReplaceError) is thrown.
|
||
*/
|
||
replace(from: number, to: number, slice: Slice): Node;
|
||
/**
|
||
Find the node directly after the given position.
|
||
*/
|
||
nodeAt(pos: number): Node | null;
|
||
/**
|
||
Find the (direct) child node after the given offset, if any,
|
||
and return it along with its index and offset relative to this
|
||
node.
|
||
*/
|
||
childAfter(pos: number): {
|
||
node: Node | null;
|
||
index: number;
|
||
offset: number;
|
||
};
|
||
/**
|
||
Find the (direct) child node before the given offset, if any,
|
||
and return it along with its index and offset relative to this
|
||
node.
|
||
*/
|
||
childBefore(pos: number): {
|
||
node: Node | null;
|
||
index: number;
|
||
offset: number;
|
||
};
|
||
/**
|
||
Resolve the given position in the document, returning an
|
||
[object](https://prosemirror.net/docs/ref/#model.ResolvedPos) with information about its context.
|
||
*/
|
||
resolve(pos: number): ResolvedPos;
|
||
/**
|
||
Test whether a given mark or mark type occurs in this document
|
||
between the two given positions.
|
||
*/
|
||
rangeHasMark(from: number, to: number, type: Mark | MarkType): boolean;
|
||
/**
|
||
True when this is a block (non-inline node)
|
||
*/
|
||
get isBlock(): boolean;
|
||
/**
|
||
True when this is a textblock node, a block node with inline
|
||
content.
|
||
*/
|
||
get isTextblock(): boolean;
|
||
/**
|
||
True when this node allows inline content.
|
||
*/
|
||
get inlineContent(): boolean;
|
||
/**
|
||
True when this is an inline node (a text node or a node that can
|
||
appear among text).
|
||
*/
|
||
get isInline(): boolean;
|
||
/**
|
||
True when this is a text node.
|
||
*/
|
||
get isText(): boolean;
|
||
/**
|
||
True when this is a leaf node.
|
||
*/
|
||
get isLeaf(): boolean;
|
||
/**
|
||
True when this is an atom, i.e. when it does not have directly
|
||
editable content. This is usually the same as `isLeaf`, but can
|
||
be configured with the [`atom` property](https://prosemirror.net/docs/ref/#model.NodeSpec.atom)
|
||
on a node's spec (typically used when the node is displayed as
|
||
an uneditable [node view](https://prosemirror.net/docs/ref/#view.NodeView)).
|
||
*/
|
||
get isAtom(): boolean;
|
||
/**
|
||
Return a string representation of this node for debugging
|
||
purposes.
|
||
*/
|
||
toString(): string;
|
||
/**
|
||
Get the content match in this node at the given index.
|
||
*/
|
||
contentMatchAt(index: number): ContentMatch;
|
||
/**
|
||
Test whether replacing the range between `from` and `to` (by
|
||
child index) with the given replacement fragment (which defaults
|
||
to the empty fragment) would leave the node's content valid. You
|
||
can optionally pass `start` and `end` indices into the
|
||
replacement fragment.
|
||
*/
|
||
canReplace(from: number, to: number, replacement?: Fragment, start?: number, end?: number): boolean;
|
||
/**
|
||
Test whether replacing the range `from` to `to` (by index) with
|
||
a node of the given type would leave the node's content valid.
|
||
*/
|
||
canReplaceWith(from: number, to: number, type: NodeType, marks?: readonly Mark[]): boolean;
|
||
/**
|
||
Test whether the given node's content could be appended to this
|
||
node. If that node is empty, this will only return true if there
|
||
is at least one node type that can appear in both nodes (to avoid
|
||
merging completely incompatible nodes).
|
||
*/
|
||
canAppend(other: Node): boolean;
|
||
/**
|
||
Check whether this node and its descendants conform to the
|
||
schema, and raise error when they do not.
|
||
*/
|
||
check(): void;
|
||
/**
|
||
Return a JSON-serializeable representation of this node.
|
||
*/
|
||
toJSON(): any;
|
||
/**
|
||
Deserialize a node from its JSON representation.
|
||
*/
|
||
static fromJSON(schema: Schema, json: any): Node;
|
||
}
|
||
|
||
export { AttributeSpec, Attrs, ContentMatch, DOMOutputSpec, DOMParser, DOMSerializer, Fragment, Mark, MarkSpec, MarkType, Node, NodeRange, NodeSpec, NodeType, ParseOptions, ParseRule, ReplaceError, ResolvedPos, Schema, SchemaSpec, Slice };
|