mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-26 00:27:28 +02:00
Split API reference so each object has its own page
This commit is contained in:
@@ -28,9 +28,17 @@
|
||||
## API
|
||||
|
||||
- [Transforms](./api/transforms.md)
|
||||
- [Nodes (Node, Editor, Element, Text)](./api/nodes.md)
|
||||
- [Locations (Path, Point, Range)](./api/locations.md)
|
||||
- [Refs (PointRef, RangeRef)](./api/refs.md)
|
||||
- [Node](./api/nodes.md)
|
||||
- [Editor](./api/editor.md)
|
||||
- [Element](./api/element.md)
|
||||
- [Text](./api/text.md)
|
||||
- [Location](./api/locations.md)
|
||||
- [Path](./api/path.md)
|
||||
- [Point](./api/point.md)
|
||||
- [Range](./api/range.md)
|
||||
- [Refs](./api/refs.md)
|
||||
- [PointRef](./api/point-ref.md)
|
||||
- [RangeRef](./api/range-ref.md)
|
||||
- [Miscellaneous](./api/miscellaneous.md)
|
||||
|
||||
## Libraries
|
||||
|
375
docs/api/editor.md
Normal file
375
docs/api/editor.md
Normal file
@@ -0,0 +1,375 @@
|
||||
# Editor
|
||||
|
||||
The `Editor` object stores all the state of a slate editor. It can be extended by plugins to add helpers and implement new behaviors.
|
||||
|
||||
```typescript
|
||||
interface Editor {
|
||||
children: Node[]
|
||||
selection: Range | null
|
||||
operations: Operation[]
|
||||
marks: Record<string, any> | null
|
||||
[key: string]: unknown
|
||||
|
||||
// Schema-specific node behaviors.
|
||||
isInline: (element: Element) => boolean
|
||||
isVoid: (element: Element) => boolean
|
||||
normalizeNode: (entry: NodeEntry) => void
|
||||
onChange: () => void
|
||||
|
||||
// Overrideable core actions.
|
||||
addMark: (key: string, value: any) => void
|
||||
apply: (operation: Operation) => void
|
||||
deleteBackward: (unit: 'character' | 'word' | 'line' | 'block') => void
|
||||
deleteForward: (unit: 'character' | 'word' | 'line' | 'block') => void
|
||||
deleteFragment: () => void
|
||||
insertBreak: () => void
|
||||
insertFragment: (fragment: Node[]) => void
|
||||
insertNode: (node: Node) => void
|
||||
insertText: (text: string) => void
|
||||
removeMark: (key: string) => void
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `above<T extends Ancestor>(editor: Editor, options?): NodeEntry | undefined`
|
||||
|
||||
Get the ancestor above a location in the document.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `addMark(editor: Editor, key: string, value: any): void`
|
||||
|
||||
Add a custom property to the leaf text nodes in the current selection.
|
||||
|
||||
If the selection is currently collapsed, the marks will be added to the
|
||||
`editor.marks` property instead, and applied when text is inserted next.
|
||||
|
||||
###### `after(editor: Editor, at: Location, options?): Point | undefined`
|
||||
|
||||
Get the point after a location.
|
||||
|
||||
Options: `{distance?: number, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', voids?: boolean}`
|
||||
|
||||
###### `before(editor: Editor, at: Location, options?): Point | undefined`
|
||||
|
||||
Get the point before a location.
|
||||
|
||||
Options: `{distance?: number, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', voids?: boolean}`
|
||||
|
||||
###### `deleteBackward(editor: Editor, options?): void`
|
||||
|
||||
Delete content in the editor backward from the current selection.
|
||||
|
||||
Options: `{unit?: 'character' | 'word' | 'line' | 'block'}`
|
||||
|
||||
###### `deleteForward(editor: Editor, options?): void`
|
||||
|
||||
Delete content in the editor forward from the current selection.
|
||||
|
||||
Options: `{unit?: 'character' | 'word' | 'line' | 'block'}`
|
||||
|
||||
###### `deleteFragment(editor: Editor): void`
|
||||
|
||||
Delete the content in the current selection.
|
||||
|
||||
###### `edges(editor: Editor, at: Location): [Point, Point]`
|
||||
|
||||
Get the start and end points of a location.
|
||||
|
||||
###### `end(editor: Editor, at: Location): Point`
|
||||
|
||||
Get the end point of a location.
|
||||
|
||||
###### `first(editor: Editor, at: Location): NodeEntry`
|
||||
|
||||
Get the first node at a location.
|
||||
|
||||
###### `fragment(editor: Editor, at: Location): Descendant[]`
|
||||
|
||||
Get the fragment at a location.
|
||||
|
||||
###### `hasBlocks(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has block children.
|
||||
|
||||
###### `hasInlines(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has inline and text children.
|
||||
|
||||
###### `hasTexts(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has text children.
|
||||
|
||||
###### `insertBreak(editor: Editor): void`
|
||||
|
||||
Insert a block break at the current selection.
|
||||
|
||||
###### `insertFragment(editor: Editor, fragment: Node[]): void`
|
||||
|
||||
Insert a fragment at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `insertNode(editor: Editor, node: Node): void`
|
||||
|
||||
Insert a node at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `insertText(editor: Editor, text: string): void`
|
||||
|
||||
Insert text at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `isBlock(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is a block `Element` object.
|
||||
|
||||
###### `isEditor(value: any): value is Editor`
|
||||
|
||||
Check if a value is an `Editor` object.
|
||||
|
||||
###### `isEnd(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is the end point of a location.
|
||||
|
||||
###### `isEdge(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is an edge of a location.
|
||||
|
||||
###### `isEmpty(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if an element is empty, accounting for void nodes.
|
||||
|
||||
###### `isInline(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is an inline `Element` object.
|
||||
|
||||
###### `isNormalizing(editor: Editor): boolean`
|
||||
|
||||
Check if the editor is currently normalizing after each operation.
|
||||
|
||||
###### `isStart(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is the start point of a location.
|
||||
|
||||
###### `isVoid(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is a void `Element` object.
|
||||
|
||||
###### `last(editor: Editor, at: Location): NodeEntry`
|
||||
|
||||
Get the last node at a location.
|
||||
|
||||
###### `leaf(editor: Editor, at: Location, options?): NodeEntry`
|
||||
|
||||
Get the leaf text node at a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `levels<T extends Node>(editor: Editor, options?): Generator<NodeEntry, void, undefined>`
|
||||
|
||||
Iterate through all of the levels at a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `next<T extends Descendant>(editor: Editor, options?): NodeEntry<T> | undefined`
|
||||
|
||||
Get the matching node in the branch of the document after a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `node(editor: Editor, at: Location, options?): NodeEntry`
|
||||
|
||||
Get the node at a location.
|
||||
|
||||
Options: `depth?: number, edge?: 'start' | 'end'`
|
||||
|
||||
###### `nodes(editor: Editor, options?): Generator<NodeEntry<T>, void, undefined>`
|
||||
|
||||
Iterate through all of the nodes in the Editor.
|
||||
|
||||
Options: `{at?: Location | Span, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', universal?: boolean, reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `normalize(editor: Editor, options?): void`
|
||||
|
||||
Normalize any dirty objects in the editor.
|
||||
|
||||
Options: `{force?: boolean}`
|
||||
|
||||
###### `parent(editor: Editor, at: Location, options?): NodeEntry<Ancestor>`
|
||||
|
||||
Get the parent node of a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `path(editor: Editor, at: Location, options?): Path`
|
||||
|
||||
Get the path of a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `pathRef(editor: Editor, path: Path, options?): PathRef`
|
||||
|
||||
Create a mutable ref for a `Path` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | null}`
|
||||
|
||||
###### `pathRefs(editor: Editor): Set<PathRef>`
|
||||
|
||||
Get the set of currently tracked path refs of the editor.
|
||||
|
||||
###### `point(editor: Editor, at: Location, options?): Point`
|
||||
|
||||
Get the start or end point of a location.
|
||||
|
||||
Options: `{edge?: 'start' | 'end'}`
|
||||
|
||||
###### `pointRef(editor: Editor, point: Point, options?): PointRef`
|
||||
|
||||
Create a mutable ref for a `Point` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | null}`
|
||||
|
||||
###### `pointRefs(editor: Editor): Set<PointRef>`
|
||||
|
||||
Get the set of currently tracked point refs of the editor.
|
||||
|
||||
###### `positions(editor: Editor, options?): Generator<Point, void, undefined>`
|
||||
|
||||
Iterate through all of the positions in the document where a `Point` can be
|
||||
placed.
|
||||
|
||||
By default it will move forward by individual offsets at a time, but you
|
||||
can pass the `unit: 'character'` option to moved forward one character, word,
|
||||
or line at at time.
|
||||
|
||||
Note: By default void nodes are treated as a single point and iteration
|
||||
will not happen inside their content unless you pass in true for the
|
||||
voids option, then iteration will occur.
|
||||
|
||||
Options: `{at?: Location, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `previous(editor: Editor, options?): NodeEntry<T> | undefined`
|
||||
|
||||
Get the matching node in the branch of the document before a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `range(editor: Editor, at: Location, to?: Location): Range`
|
||||
|
||||
Get a range of a location.
|
||||
|
||||
###### `rangeRef(editor: Editor, range: Range, options?): RangeRef`
|
||||
|
||||
Create a mutable ref for a `Range` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | 'outward' | 'inward' | null}`
|
||||
|
||||
###### `rangeRefs(editor: Editor): Set<RangeRef>`
|
||||
|
||||
Get the set of currently tracked range refs of the editor.
|
||||
|
||||
###### `removeMark(editor: Editor, key: string): void`
|
||||
|
||||
Remove a custom property from all of the leaf text nodes in the current
|
||||
selection.
|
||||
|
||||
If the selection is currently collapsed, the removal will be stored on
|
||||
`editor.marks` and applied to the text inserted next.
|
||||
|
||||
###### `start(editor: Editor, at: Location): Point`
|
||||
|
||||
Get the start point of a location.
|
||||
|
||||
###### `string(editor: Editor, at: Location, options?): string`
|
||||
|
||||
Get the text string content of a location.
|
||||
|
||||
Note: by default the text of void nodes is considered to be an empty
|
||||
string, regardless of content, unless you pass in true for the voids option
|
||||
|
||||
Options: : `{voids?: boolean}`
|
||||
|
||||
###### `unhangRange(editor: Editor, range: Range, options?): Range`
|
||||
|
||||
Convert a range into a non-hanging one.
|
||||
|
||||
Options: `{voids?: boolean}`
|
||||
|
||||
###### `void(editor: Editor, options?): NodeEntry<Element> | undefined`
|
||||
|
||||
Match a void node in the current branch of the editor.
|
||||
|
||||
Options: `{at?: Location, mode?: 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `withoutNormalizing(editor: Editor, fn: () => void): void`
|
||||
|
||||
Call a function, deferring normalization until after it completes.
|
||||
|
||||
### Instance methods
|
||||
|
||||
### Schema-specific methods to override
|
||||
|
||||
###### `isInline(element: Element)`
|
||||
|
||||
Check if a value is an inline `Element` object.
|
||||
|
||||
###### `isVoid(element: Element)`
|
||||
|
||||
Check if a value is a void `Element` object.
|
||||
|
||||
###### `normalizeNode(entry: NodeEntry)`
|
||||
|
||||
Normalize a Node according to the schema.
|
||||
|
||||
###### `onChange()`
|
||||
|
||||
Called when there is a change in the editor.
|
||||
|
||||
### Core actions
|
||||
|
||||
###### `addMark(key: string, value: any)`
|
||||
|
||||
Add a custom property to the leaf text nodes in the current selection. If the selection is currently collapsed, the marks will be added to the `editor.marks` property instead, and applied when text is inserted next.
|
||||
|
||||
###### `removeMark(key: string)`
|
||||
|
||||
Remove a custom property from the leaf text nodes in the current selection.
|
||||
|
||||
###### `deleteBackward(options?: {unit?: 'character' | 'word' | 'line' | 'block'})`
|
||||
|
||||
Delete content in the editor backward from the current selection.
|
||||
|
||||
###### `deleteForward(options?: {unit?: 'character' | 'word' | 'line' | 'block'})`
|
||||
|
||||
Delete content in the editor forward from the current selection.
|
||||
|
||||
###### `insertFragment(fragment: Node[])`
|
||||
|
||||
Insert a fragment at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `deleteFragment()`
|
||||
|
||||
Delete the content of the current selection.
|
||||
|
||||
###### `insertBreak()`
|
||||
|
||||
Insert a block break at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `insertNode(node: Node)`
|
||||
|
||||
Insert a node at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `insertText(text: string)`
|
||||
|
||||
Insert text at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `apply(operation: Operation)`
|
||||
|
||||
Apply an operation in the editor.
|
24
docs/api/element.md
Normal file
24
docs/api/element.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Element
|
||||
|
||||
`Element` objects are a type of node in a Slate document that contain other `Element` nodes or `Text` nodes. They can be either "blocks" or "inlines" depending on the Slate editor's configuration.
|
||||
|
||||
```typescript
|
||||
interface Element {
|
||||
children: Node[]
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `Element.isElement(value: any): value is Element`
|
||||
|
||||
Check if a `value` implements the `Element` interface.
|
||||
|
||||
###### `Element.isElementList(value: any): value is Element[]`
|
||||
|
||||
Check if a `value` is an array of `Element` objects.
|
||||
|
||||
###### `Element.matches(element: Element, props: Partial<Element>): boolean`
|
||||
|
||||
Check if an element matches a set of `props`. Note: This checks custom properties, but it does not ensure that any children are equivalent.
|
@@ -6,238 +6,12 @@ The `Location` interface is a union of the ways to refer to a specific location
|
||||
type Location = Path | Point | Range
|
||||
```
|
||||
|
||||
## Location
|
||||
- [Path](./api/path.md)
|
||||
- [Point](./api/point.md)
|
||||
- [Range](./api/range.md)
|
||||
|
||||
### Static methods
|
||||
## Static methods
|
||||
|
||||
###### `Location.isLocation(value: any): value is Location`
|
||||
|
||||
Check if a value implements the `Location` interface.
|
||||
|
||||
## Path
|
||||
|
||||
`Path` arrays are a list of indexes that describe a node's exact position in a Slate node tree. Although they are usually relative to the root `Editor` object, they can be relative to any `Node` object.
|
||||
|
||||
```typescript
|
||||
type Path = number[]
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `ancestors(path: Path, options: { reverse?: boolean } = {}): Path[]`
|
||||
|
||||
Get a list of ancestor paths for a given path.
|
||||
|
||||
The paths are sorted from deepest to shallowest ancestor. However, if the
|
||||
`reverse: true` option is passed, they are reversed.
|
||||
|
||||
###### `common(path: Path, another: Path): Path`
|
||||
|
||||
Get the common ancestor path of two paths.
|
||||
|
||||
###### `compare(path: Path, another: Path): -1 | 0 | 1`
|
||||
|
||||
Compare a path to another, returning an integer indicating whether the path
|
||||
was before, at, or after the other.
|
||||
|
||||
Note: Two paths of unequal length can still receive a `0` result if one is
|
||||
directly above or below the other. If you want exact matching, use
|
||||
[[Path.equals]] instead.
|
||||
|
||||
###### `endsAfter(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends after one of the indexes in another.
|
||||
|
||||
###### `endsAt(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends at one of the indexes in another.
|
||||
|
||||
###### `endsBefore(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends before one of the indexes in another.
|
||||
|
||||
###### `equals(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is exactly equal to another.
|
||||
|
||||
###### `hasPrevious(path: Path): boolean`
|
||||
|
||||
Check if the path of previous sibling node exists
|
||||
|
||||
###### `isAfter(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is after another.
|
||||
|
||||
###### `isAncestor(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is an ancestor of another.
|
||||
|
||||
###### `isBefore(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is before another.
|
||||
|
||||
###### `isChild(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a child of another.
|
||||
|
||||
###### `isCommon(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is equal to or an ancestor of another.
|
||||
|
||||
###### `isDescendant(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a descendant of another.
|
||||
|
||||
###### `isParent(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is the parent of another.
|
||||
|
||||
###### `isPath(value: any): value is Path`
|
||||
|
||||
Check is a value implements the `Path` interface.
|
||||
|
||||
###### `isSibling(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a sibling of another.
|
||||
|
||||
###### `levels(path: Path, options?): Path[]`
|
||||
|
||||
Get a list of paths at every level down to a path. Note: this is the same
|
||||
as `Path.ancestors`, but including the path itself.
|
||||
|
||||
The paths are sorted from shallowest to deepest. However, if the `reverse:
|
||||
true` option is passed, they are reversed.
|
||||
|
||||
Options: `{reverse?: boolean}`
|
||||
|
||||
###### `next(path: Path): Path`
|
||||
|
||||
Given a path, get the path to the next sibling node.
|
||||
|
||||
###### `parent(path: Path): Path`
|
||||
|
||||
Given a path, return a new path referring to the parent node above it.
|
||||
|
||||
###### `previous(path: Path): Path`
|
||||
|
||||
Given a path, get the path to the previous sibling node.
|
||||
|
||||
###### `relative(path: Path, ancestor: Path): Path`
|
||||
|
||||
Get a path relative to an ancestor.
|
||||
|
||||
###### `transform(path: Path, operation: Operation, options?): Path | null`
|
||||
|
||||
Transform a path by an operation.
|
||||
|
||||
Options: `{ affinity?: 'forward' | 'backward' | null }`
|
||||
|
||||
## Point
|
||||
|
||||
`Point` objects refer to a specific location in a text node in a Slate document. Its `path` refers to the location of the node in the tree, and its offset refers to distance into the node's string of text. Points may only refer to `Text` nodes.
|
||||
|
||||
```typescript
|
||||
interface Point {
|
||||
path: Path
|
||||
offset: number
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `Point.compare(point: Point, another: Point): -1 | 0 | 1`
|
||||
|
||||
Compare a `point` to `another`, returning an integer indicating whether the point was before, at or after the other.
|
||||
|
||||
###### `Point.isAfter(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is after `another`.
|
||||
|
||||
###### `Point.isBefore(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is before `another`.
|
||||
|
||||
###### `Point.equals(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is exactly equal to `another`.
|
||||
|
||||
###### `Point.isPoint(value: any): value is Point`
|
||||
|
||||
Check if a `value` implements the `Point` interface.
|
||||
|
||||
###### `Point.transform(point: Point, op: Operation, options?): Point | null`
|
||||
|
||||
Transform a `point` by an `op`.
|
||||
|
||||
Options: `{affinity?: 'forward' | 'backward' | null}`
|
||||
|
||||
## Range
|
||||
|
||||
`Range` objects are a set of points that refer to a specific span of a Slate document. They can define a span inside a single node or they can span across multiple nodes. The editor's `selection` is stored as a range.
|
||||
|
||||
```typescript
|
||||
interface Range {
|
||||
anchor: Point
|
||||
focus: Point
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `Range.edges(range: Range, options?): [Point, Point]`
|
||||
|
||||
Get the start and end points of a `range`, in the order in which they appear in the document.
|
||||
|
||||
Options: `{reverse?: boolean}`
|
||||
|
||||
###### `Range.end(range: Range): Point`
|
||||
|
||||
Get the end point of a `range`.
|
||||
|
||||
###### `Range.equals(range: Range, another: Range): boolean`
|
||||
|
||||
Check if a `range` is exactly equal to `another`.
|
||||
|
||||
###### `Range.includes(range: Range, target: Path | Point | Range): boolean`
|
||||
|
||||
Check if a `range` includes a path, a point, or part of another range.
|
||||
|
||||
###### `Range.intersection(range: Range, another: Range): Range | null`
|
||||
|
||||
Get the intersection of one `range` with `another`.
|
||||
|
||||
###### `Range.isBackward(range: Range): boolean`
|
||||
|
||||
Check if a `range` is backward, meaning that its anchor point appears _after_ its focus point in the document.
|
||||
|
||||
###### `Range.isCollapsed(range: Range): boolean`
|
||||
|
||||
Check if a `range` is collapsed, meaning that both its anchor and focus points refer to the exact same position in the document.
|
||||
|
||||
###### `Range.isExpanded(range: Range): boolean`
|
||||
|
||||
Check if a `range` is expanded. This is the opposite of `Range.isCollapsed` and is provided for legibility.
|
||||
|
||||
###### `Range.isForward(range: Range): boolean`
|
||||
|
||||
Check if a `range` is forward. This is the opposite of `Range.isBackward` and is provided for legibility.
|
||||
|
||||
###### `Range.isRange(value: any): value is Range`
|
||||
|
||||
Check if a `value` implements the `Range` interface.
|
||||
|
||||
###### `Range.points(range: Range): Generator<PointEntry>`
|
||||
|
||||
Iterate through all the point entries in a `range`.
|
||||
|
||||
###### `Range.start(range: Range): Point`
|
||||
|
||||
Get the start point of a `range`
|
||||
|
||||
###### `Range.transform(range: Range, op: Operation, options): Range | null`
|
||||
|
||||
Transform a `range` by an `op`.
|
||||
|
||||
Options: `{affinity: 'forward' | 'backward' | 'outward' | 'inward' | null}`
|
||||
|
@@ -1,4 +1,4 @@
|
||||
# Nodes
|
||||
# Node
|
||||
|
||||
The `Node` union type represents all of the different types of nodes that occur in a Slate document tree.
|
||||
|
||||
@@ -9,9 +9,11 @@ type Descendant = Element | Text
|
||||
type Ancestor = Editor | Element
|
||||
```
|
||||
|
||||
## Node
|
||||
- [Editor](./api/editor.md)
|
||||
- [Element](./api/element.md)
|
||||
- [Text](./api/text.md)
|
||||
|
||||
### Static methods
|
||||
## Static methods
|
||||
|
||||
###### `Node.ancestor(root: Node, path: Path): Ancestor`
|
||||
|
||||
@@ -114,435 +116,3 @@ Get the concatenated text string of a node's content. Note that this will not in
|
||||
Return a generator of all leaf text nodes in a root node.
|
||||
|
||||
Options: `{from?: Path, to?: Path, reverse?: boolean, pass?: (node: NodeEntry => boolean)}`
|
||||
|
||||
## Editor
|
||||
|
||||
The `Editor` object stores all the state of a slate editor. It can be extended by plugins to add helpers and implement new behaviors.
|
||||
|
||||
```typescript
|
||||
interface Editor {
|
||||
children: Node[]
|
||||
selection: Range | null
|
||||
operations: Operation[]
|
||||
marks: Record<string, any> | null
|
||||
[key: string]: unknown
|
||||
|
||||
// Schema-specific node behaviors.
|
||||
isInline: (element: Element) => boolean
|
||||
isVoid: (element: Element) => boolean
|
||||
normalizeNode: (entry: NodeEntry) => void
|
||||
onChange: () => void
|
||||
|
||||
// Overrideable core actions.
|
||||
addMark: (key: string, value: any) => void
|
||||
apply: (operation: Operation) => void
|
||||
deleteBackward: (unit: 'character' | 'word' | 'line' | 'block') => void
|
||||
deleteForward: (unit: 'character' | 'word' | 'line' | 'block') => void
|
||||
deleteFragment: () => void
|
||||
insertBreak: () => void
|
||||
insertFragment: (fragment: Node[]) => void
|
||||
insertNode: (node: Node) => void
|
||||
insertText: (text: string) => void
|
||||
removeMark: (key: string) => void
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `above<T extends Ancestor>(editor: Editor, options?): NodeEntry | undefined`
|
||||
|
||||
Get the ancestor above a location in the document.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `addMark(editor: Editor, key: string, value: any): void`
|
||||
|
||||
Add a custom property to the leaf text nodes in the current selection.
|
||||
|
||||
If the selection is currently collapsed, the marks will be added to the
|
||||
`editor.marks` property instead, and applied when text is inserted next.
|
||||
|
||||
###### `after(editor: Editor, at: Location, options?): Point | undefined`
|
||||
|
||||
Get the point after a location.
|
||||
|
||||
Options: `{distance?: number, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', voids?: boolean}`
|
||||
|
||||
###### `before(editor: Editor, at: Location, options?): Point | undefined`
|
||||
|
||||
Get the point before a location.
|
||||
|
||||
Options: `{distance?: number, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', voids?: boolean}`
|
||||
|
||||
###### `deleteBackward(editor: Editor, options?): void`
|
||||
|
||||
Delete content in the editor backward from the current selection.
|
||||
|
||||
Options: `{unit?: 'character' | 'word' | 'line' | 'block'}`
|
||||
|
||||
###### `deleteForward(editor: Editor, options?): void`
|
||||
|
||||
Delete content in the editor forward from the current selection.
|
||||
|
||||
Options: `{unit?: 'character' | 'word' | 'line' | 'block'}`
|
||||
|
||||
###### `deleteFragment(editor: Editor): void`
|
||||
|
||||
Delete the content in the current selection.
|
||||
|
||||
###### `edges(editor: Editor, at: Location): [Point, Point]`
|
||||
|
||||
Get the start and end points of a location.
|
||||
|
||||
###### `end(editor: Editor, at: Location): Point`
|
||||
|
||||
Get the end point of a location.
|
||||
|
||||
###### `first(editor: Editor, at: Location): NodeEntry`
|
||||
|
||||
Get the first node at a location.
|
||||
|
||||
###### `fragment(editor: Editor, at: Location): Descendant[]`
|
||||
|
||||
Get the fragment at a location.
|
||||
|
||||
###### `hasBlocks(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has block children.
|
||||
|
||||
###### `hasInlines(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has inline and text children.
|
||||
|
||||
###### `hasTexts(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if a node has text children.
|
||||
|
||||
###### `insertBreak(editor: Editor): void`
|
||||
|
||||
Insert a block break at the current selection.
|
||||
|
||||
###### `insertFragment(editor: Editor, fragment: Node[]): void`
|
||||
|
||||
Insert a fragment at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `insertNode(editor: Editor, node: Node): void`
|
||||
|
||||
Insert a node at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `insertText(editor: Editor, text: string): void`
|
||||
|
||||
Insert text at the current selection.
|
||||
|
||||
If the selection is currently expanded, it will be deleted first.
|
||||
|
||||
###### `isBlock(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is a block `Element` object.
|
||||
|
||||
###### `isEditor(value: any): value is Editor`
|
||||
|
||||
Check if a value is an `Editor` object.
|
||||
|
||||
###### `isEnd(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is the end point of a location.
|
||||
|
||||
###### `isEdge(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is an edge of a location.
|
||||
|
||||
###### `isEmpty(editor: Editor, element: Element): boolean`
|
||||
|
||||
Check if an element is empty, accounting for void nodes.
|
||||
|
||||
###### `isInline(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is an inline `Element` object.
|
||||
|
||||
###### `isNormalizing(editor: Editor): boolean`
|
||||
|
||||
Check if the editor is currently normalizing after each operation.
|
||||
|
||||
###### `isStart(editor: Editor, point: Point, at: Location): boolean`
|
||||
|
||||
Check if a point is the start point of a location.
|
||||
|
||||
###### `isVoid(editor: Editor, value: any): value is Element`
|
||||
|
||||
Check if a value is a void `Element` object.
|
||||
|
||||
###### `last(editor: Editor, at: Location): NodeEntry`
|
||||
|
||||
Get the last node at a location.
|
||||
|
||||
###### `leaf(editor: Editor, at: Location, options?): NodeEntry`
|
||||
|
||||
Get the leaf text node at a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `levels<T extends Node>(editor: Editor, options?): Generator<NodeEntry, void, undefined>`
|
||||
|
||||
Iterate through all of the levels at a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `next<T extends Descendant>(editor: Editor, options?): NodeEntry<T> | undefined`
|
||||
|
||||
Get the matching node in the branch of the document after a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `node(editor: Editor, at: Location, options?): NodeEntry`
|
||||
|
||||
Get the node at a location.
|
||||
|
||||
Options: `depth?: number, edge?: 'start' | 'end'`
|
||||
|
||||
###### `nodes(editor: Editor, options?): Generator<NodeEntry<T>, void, undefined>`
|
||||
|
||||
Iterate through all of the nodes in the Editor.
|
||||
|
||||
Options: `{at?: Location | Span, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', universal?: boolean, reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `normalize(editor: Editor, options?): void`
|
||||
|
||||
Normalize any dirty objects in the editor.
|
||||
|
||||
Options: `{force?: boolean}`
|
||||
|
||||
###### `parent(editor: Editor, at: Location, options?): NodeEntry<Ancestor>`
|
||||
|
||||
Get the parent node of a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `path(editor: Editor, at: Location, options?): Path`
|
||||
|
||||
Get the path of a location.
|
||||
|
||||
Options: `{depth?: number, edge?: 'start' | 'end'}`
|
||||
|
||||
###### `pathRef(editor: Editor, path: Path, options?): PathRef`
|
||||
|
||||
Create a mutable ref for a `Path` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | null}`
|
||||
|
||||
###### `pathRefs(editor: Editor): Set<PathRef>`
|
||||
|
||||
Get the set of currently tracked path refs of the editor.
|
||||
|
||||
###### `point(editor: Editor, at: Location, options?): Point`
|
||||
|
||||
Get the start or end point of a location.
|
||||
|
||||
Options: `{edge?: 'start' | 'end'}`
|
||||
|
||||
###### `pointRef(editor: Editor, point: Point, options?): PointRef`
|
||||
|
||||
Create a mutable ref for a `Point` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | null}`
|
||||
|
||||
###### `pointRefs(editor: Editor): Set<PointRef>`
|
||||
|
||||
Get the set of currently tracked point refs of the editor.
|
||||
|
||||
###### `positions(editor: Editor, options?): Generator<Point, void, undefined>`
|
||||
|
||||
Iterate through all of the positions in the document where a `Point` can be
|
||||
placed.
|
||||
|
||||
By default it will move forward by individual offsets at a time, but you
|
||||
can pass the `unit: 'character'` option to moved forward one character, word,
|
||||
or line at at time.
|
||||
|
||||
Note: By default void nodes are treated as a single point and iteration
|
||||
will not happen inside their content unless you pass in true for the
|
||||
voids option, then iteration will occur.
|
||||
|
||||
Options: `{at?: Location, unit?: 'offset' | 'character' | 'word' | 'line' | 'block', reverse?: boolean, voids?: boolean}`
|
||||
|
||||
###### `previous(editor: Editor, options?): NodeEntry<T> | undefined`
|
||||
|
||||
Get the matching node in the branch of the document before a location.
|
||||
|
||||
Options: `{at?: Location, match?: NodeMatch, mode?: 'all' | 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `range(editor: Editor, at: Location, to?: Location): Range`
|
||||
|
||||
Get a range of a location.
|
||||
|
||||
###### `rangeRef(editor: Editor, range: Range, options?): RangeRef`
|
||||
|
||||
Create a mutable ref for a `Range` object, which will stay in sync as new
|
||||
operations are applied to the editor.
|
||||
|
||||
Options: `{affinity?: 'backward' | 'forward' | 'outward' | 'inward' | null}`
|
||||
|
||||
###### `rangeRefs(editor: Editor): Set<RangeRef>`
|
||||
|
||||
Get the set of currently tracked range refs of the editor.
|
||||
|
||||
###### `removeMark(editor: Editor, key: string): void`
|
||||
|
||||
Remove a custom property from all of the leaf text nodes in the current
|
||||
selection.
|
||||
|
||||
If the selection is currently collapsed, the removal will be stored on
|
||||
`editor.marks` and applied to the text inserted next.
|
||||
|
||||
###### `start(editor: Editor, at: Location): Point`
|
||||
|
||||
Get the start point of a location.
|
||||
|
||||
###### `string(editor: Editor, at: Location, options?): string`
|
||||
|
||||
Get the text string content of a location.
|
||||
|
||||
Note: by default the text of void nodes is considered to be an empty
|
||||
string, regardless of content, unless you pass in true for the voids option
|
||||
|
||||
Options: : `{voids?: boolean}`
|
||||
|
||||
###### `unhangRange(editor: Editor, range: Range, options?): Range`
|
||||
|
||||
Convert a range into a non-hanging one.
|
||||
|
||||
Options: `{voids?: boolean}`
|
||||
|
||||
###### `void(editor: Editor, options?): NodeEntry<Element> | undefined`
|
||||
|
||||
Match a void node in the current branch of the editor.
|
||||
|
||||
Options: `{at?: Location, mode?: 'highest' | 'lowest', voids?: boolean}`
|
||||
|
||||
###### `withoutNormalizing(editor: Editor, fn: () => void): void`
|
||||
|
||||
Call a function, deferring normalization until after it completes.
|
||||
|
||||
### Instance methods
|
||||
|
||||
#### Schema-specific methods to override
|
||||
|
||||
###### `isInline(element: Element)`
|
||||
|
||||
Check if a value is an inline `Element` object.
|
||||
|
||||
###### `isVoid(element: Element)`
|
||||
|
||||
Check if a value is a void `Element` object.
|
||||
|
||||
###### `normalizeNode(entry: NodeEntry)`
|
||||
|
||||
Normalize a Node according to the schema.
|
||||
|
||||
###### `onChange()`
|
||||
|
||||
Called when there is a change in the editor.
|
||||
|
||||
#### Core actions
|
||||
|
||||
###### `addMark(key: string, value: any)`
|
||||
|
||||
Add a custom property to the leaf text nodes in the current selection. If the selection is currently collapsed, the marks will be added to the `editor.marks` property instead, and applied when text is inserted next.
|
||||
|
||||
###### `removeMark(key: string)`
|
||||
|
||||
Remove a custom property from the leaf text nodes in the current selection.
|
||||
|
||||
###### `deleteBackward(options?: {unit?: 'character' | 'word' | 'line' | 'block'})`
|
||||
|
||||
Delete content in the editor backward from the current selection.
|
||||
|
||||
###### `deleteForward(options?: {unit?: 'character' | 'word' | 'line' | 'block'})`
|
||||
|
||||
Delete content in the editor forward from the current selection.
|
||||
|
||||
###### `insertFragment(fragment: Node[])`
|
||||
|
||||
Insert a fragment at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `deleteFragment()`
|
||||
|
||||
Delete the content of the current selection.
|
||||
|
||||
###### `insertBreak()`
|
||||
|
||||
Insert a block break at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `insertNode(node: Node)`
|
||||
|
||||
Insert a node at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `insertText(text: string)`
|
||||
|
||||
Insert text at the current selection. If the selection is currently expanded, delete it first.
|
||||
|
||||
###### `apply(operation: Operation)`
|
||||
|
||||
Apply an operation in the editor.
|
||||
|
||||
## Element
|
||||
|
||||
`Element` objects are a type of node in a Slate document that contain other `Element` nodes or `Text` nodes. They can be either "blocks" or "inlines" depending on the Slate editor's configuration.
|
||||
|
||||
```typescript
|
||||
interface Element {
|
||||
children: Node[]
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `Element.isElement(value: any): value is Element`
|
||||
|
||||
Check if a `value` implements the `Element` interface.
|
||||
|
||||
###### `Element.isElementList(value: any): value is Element[]`
|
||||
|
||||
Check if a `value` is an array of `Element` objects.
|
||||
|
||||
###### `Element.matches(element: Element, props: Partial<Element>): boolean`
|
||||
|
||||
Check if an element matches a set of `props`. Note: This checks custom properties, but it does not ensure that any children are equivalent.
|
||||
|
||||
## Text
|
||||
|
||||
`Text` objects represent the nodes that contain the actual text content of a Slate document along with any formatting properties. They are always leaf nodes in the document tree as they cannot contain any children.
|
||||
|
||||
```typescript
|
||||
interface Text {
|
||||
text: string
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `Text.equals(text: Text, another: Text, options?): boolean`
|
||||
|
||||
Check if two text nodes are equal.
|
||||
|
||||
Options: `{loose?: boolean}`
|
||||
|
||||
###### `Text.isText(value: any): value is Text`
|
||||
|
||||
Check if a `value` implements the `Text` interface.
|
||||
|
||||
###### `Text.matches(text: Text, props: Partial<Text>): boolean`
|
||||
|
||||
Check if a `text` matches a set of `props`.
|
||||
|
||||
###### `Text.decorations(node: Text, decorations: Range[]): Text[]`
|
||||
|
||||
Get the leaves for a text node, given `decorations`.
|
||||
|
116
docs/api/path.md
Normal file
116
docs/api/path.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# Path
|
||||
|
||||
`Path` arrays are a list of indexes that describe a node's exact position in a Slate node tree. Although they are usually relative to the root `Editor` object, they can be relative to any `Node` object.
|
||||
|
||||
```typescript
|
||||
type Path = number[]
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `ancestors(path: Path, options: { reverse?: boolean } = {}): Path[]`
|
||||
|
||||
Get a list of ancestor paths for a given path.
|
||||
|
||||
The paths are sorted from deepest to shallowest ancestor. However, if the
|
||||
`reverse: true` option is passed, they are reversed.
|
||||
|
||||
###### `common(path: Path, another: Path): Path`
|
||||
|
||||
Get the common ancestor path of two paths.
|
||||
|
||||
###### `compare(path: Path, another: Path): -1 | 0 | 1`
|
||||
|
||||
Compare a path to another, returning an integer indicating whether the path
|
||||
was before, at, or after the other.
|
||||
|
||||
Note: Two paths of unequal length can still receive a `0` result if one is
|
||||
directly above or below the other. If you want exact matching, use
|
||||
[[Path.equals]] instead.
|
||||
|
||||
###### `endsAfter(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends after one of the indexes in another.
|
||||
|
||||
###### `endsAt(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends at one of the indexes in another.
|
||||
|
||||
###### `endsBefore(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path ends before one of the indexes in another.
|
||||
|
||||
###### `equals(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is exactly equal to another.
|
||||
|
||||
###### `hasPrevious(path: Path): boolean`
|
||||
|
||||
Check if the path of previous sibling node exists
|
||||
|
||||
###### `isAfter(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is after another.
|
||||
|
||||
###### `isAncestor(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is an ancestor of another.
|
||||
|
||||
###### `isBefore(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is before another.
|
||||
|
||||
###### `isChild(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a child of another.
|
||||
|
||||
###### `isCommon(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is equal to or an ancestor of another.
|
||||
|
||||
###### `isDescendant(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a descendant of another.
|
||||
|
||||
###### `isParent(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is the parent of another.
|
||||
|
||||
###### `isPath(value: any): value is Path`
|
||||
|
||||
Check is a value implements the `Path` interface.
|
||||
|
||||
###### `isSibling(path: Path, another: Path): boolean`
|
||||
|
||||
Check if a path is a sibling of another.
|
||||
|
||||
###### `levels(path: Path, options?): Path[]`
|
||||
|
||||
Get a list of paths at every level down to a path. Note: this is the same
|
||||
as `Path.ancestors`, but including the path itself.
|
||||
|
||||
The paths are sorted from shallowest to deepest. However, if the `reverse: true` option is passed, they are reversed.
|
||||
|
||||
Options: `{reverse?: boolean}`
|
||||
|
||||
###### `next(path: Path): Path`
|
||||
|
||||
Given a path, get the path to the next sibling node.
|
||||
|
||||
###### `parent(path: Path): Path`
|
||||
|
||||
Given a path, return a new path referring to the parent node above it.
|
||||
|
||||
###### `previous(path: Path): Path`
|
||||
|
||||
Given a path, get the path to the previous sibling node.
|
||||
|
||||
###### `relative(path: Path, ancestor: Path): Path`
|
||||
|
||||
Get a path relative to an ancestor.
|
||||
|
||||
###### `transform(path: Path, operation: Operation, options?): Path | null`
|
||||
|
||||
Transform a path by an operation.
|
||||
|
||||
Options: `{ affinity?: 'forward' | 'backward' | null }`
|
17
docs/api/point-ref.md
Normal file
17
docs/api/point-ref.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# PointRef
|
||||
|
||||
`PointRef` objects keep a specific point in a document synced over time as new operations are applied to the editor. You can access their property `current` at any time for the up-to-date `Point` value.
|
||||
|
||||
```typescript
|
||||
interface PointRef {
|
||||
current: Point | null
|
||||
affinity: 'forward' | 'backward' | null
|
||||
unref(): Point | null
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `PointRef.transform(ref: PointRef, op: Operation)`
|
||||
|
||||
Transform the point refs current value by an `op`.
|
39
docs/api/point.md
Normal file
39
docs/api/point.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Point
|
||||
|
||||
`Point` objects refer to a specific location in a text node in a Slate document. Its `path` refers to the location of the node in the tree, and its offset refers to distance into the node's string of text. Points may only refer to `Text` nodes.
|
||||
|
||||
```typescript
|
||||
interface Point {
|
||||
path: Path
|
||||
offset: number
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `Point.compare(point: Point, another: Point): -1 | 0 | 1`
|
||||
|
||||
Compare a `point` to `another`, returning an integer indicating whether the point was before, at or after the other.
|
||||
|
||||
###### `Point.isAfter(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is after `another`.
|
||||
|
||||
###### `Point.isBefore(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is before `another`.
|
||||
|
||||
###### `Point.equals(point: Point, another: Point): boolean`
|
||||
|
||||
Check if a `point` is exactly equal to `another`.
|
||||
|
||||
###### `Point.isPoint(value: any): value is Point`
|
||||
|
||||
Check if a `value` implements the `Point` interface.
|
||||
|
||||
###### `Point.transform(point: Point, op: Operation, options?): Point | null`
|
||||
|
||||
Transform a `point` by an `op`.
|
||||
|
||||
Options: `{affinity?: 'forward' | 'backward' | null}`
|
17
docs/api/range-ref.md
Normal file
17
docs/api/range-ref.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# RangeRef
|
||||
|
||||
`RangeRef` objects keep a specific range in a document synced over time as new operations are applied to the editor. You can access their property `current` at any time for the up-to-date `Range` value.
|
||||
|
||||
```typescript
|
||||
interface RangeRef {
|
||||
current: Range | null
|
||||
affinity: 'forward' | 'backward' | 'outward' | 'inward' | null
|
||||
unref(): Range | null
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `RangeRef.transform(ref: RangeRef, op: Operation)`
|
||||
|
||||
Transform the range refs current value by an `op`.
|
69
docs/api/range.md
Normal file
69
docs/api/range.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# Range
|
||||
|
||||
`Range` objects are a set of points that refer to a specific span of a Slate document. They can define a span inside a single node or they can span across multiple nodes. The editor's `selection` is stored as a range.
|
||||
|
||||
```typescript
|
||||
interface Range {
|
||||
anchor: Point
|
||||
focus: Point
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `Range.edges(range: Range, options?): [Point, Point]`
|
||||
|
||||
Get the start and end points of a `range`, in the order in which they appear in the document.
|
||||
|
||||
Options: `{reverse?: boolean}`
|
||||
|
||||
###### `Range.end(range: Range): Point`
|
||||
|
||||
Get the end point of a `range`.
|
||||
|
||||
###### `Range.equals(range: Range, another: Range): boolean`
|
||||
|
||||
Check if a `range` is exactly equal to `another`.
|
||||
|
||||
###### `Range.includes(range: Range, target: Path | Point | Range): boolean`
|
||||
|
||||
Check if a `range` includes a path, a point, or part of another range.
|
||||
|
||||
###### `Range.intersection(range: Range, another: Range): Range | null`
|
||||
|
||||
Get the intersection of one `range` with `another`.
|
||||
|
||||
###### `Range.isBackward(range: Range): boolean`
|
||||
|
||||
Check if a `range` is backward, meaning that its anchor point appears _after_ its focus point in the document.
|
||||
|
||||
###### `Range.isCollapsed(range: Range): boolean`
|
||||
|
||||
Check if a `range` is collapsed, meaning that both its anchor and focus points refer to the exact same position in the document.
|
||||
|
||||
###### `Range.isExpanded(range: Range): boolean`
|
||||
|
||||
Check if a `range` is expanded. This is the opposite of `Range.isCollapsed` and is provided for legibility.
|
||||
|
||||
###### `Range.isForward(range: Range): boolean`
|
||||
|
||||
Check if a `range` is forward. This is the opposite of `Range.isBackward` and is provided for legibility.
|
||||
|
||||
###### `Range.isRange(value: any): value is Range`
|
||||
|
||||
Check if a `value` implements the `Range` interface.
|
||||
|
||||
###### `Range.points(range: Range): Generator<PointEntry>`
|
||||
|
||||
Iterate through all the point entries in a `range`.
|
||||
|
||||
###### `Range.start(range: Range): Point`
|
||||
|
||||
Get the start point of a `range`
|
||||
|
||||
###### `Range.transform(range: Range, op: Operation, options): Range | null`
|
||||
|
||||
Transform a `range` by an `op`.
|
||||
|
||||
Options: `{affinity: 'forward' | 'backward' | 'outward' | 'inward' | null}`
|
@@ -1,39 +1,6 @@
|
||||
# Ref
|
||||
|
||||
`Ref` objects store up-to-date references to a `Point` or `Range` object in the document.
|
||||
`Ref` objects store up-to-date references to a `Point` or `Range` object in the document. They are named `PointRef` and `RangRef`.
|
||||
|
||||
## PointRef
|
||||
|
||||
`PointRef` objects keep a specific point in a document synced over time as new operations are applied to the editor. You can access their property `current` at any time for the up-to-date `Point` value.
|
||||
|
||||
```typescript
|
||||
interface PointRef {
|
||||
current: Point | null
|
||||
affinity: 'forward' | 'backward' | null
|
||||
unref(): Point | null
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `PointRef.transform(ref: PointRef, op: Operation)`
|
||||
|
||||
Transform the point refs current value by an `op`.
|
||||
|
||||
## RangeRef
|
||||
|
||||
`RangeRef` objects keep a specific range in a document synced over time as new operations are applied to the editor. You can access their property `current` at any time for the up-to-date `Range` value.
|
||||
|
||||
```typescript
|
||||
interface RangeRef {
|
||||
current: Range | null
|
||||
affinity: 'forward' | 'backward' | 'outward' | 'inward' | null
|
||||
unref(): Range | null
|
||||
}
|
||||
```
|
||||
|
||||
### Static methods
|
||||
|
||||
###### `RangeRef.transform(ref: RangeRef, op: Operation)`
|
||||
|
||||
Transform the range refs current value by an `op`.
|
||||
- [PointRef](./api/point-ref.md)
|
||||
- [RangeRef](./api/range-ref.md)
|
30
docs/api/text.md
Normal file
30
docs/api/text.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# Text
|
||||
|
||||
`Text` objects represent the nodes that contain the actual text content of a Slate document along with any formatting properties. They are always leaf nodes in the document tree as they cannot contain any children.
|
||||
|
||||
```typescript
|
||||
interface Text {
|
||||
text: string
|
||||
[key: string]: unknown
|
||||
}
|
||||
```
|
||||
|
||||
## Static methods
|
||||
|
||||
###### `Text.equals(text: Text, another: Text, options?): boolean`
|
||||
|
||||
Check if two text nodes are equal.
|
||||
|
||||
Options: `{loose?: boolean}`
|
||||
|
||||
###### `Text.isText(value: any): value is Text`
|
||||
|
||||
Check if a `value` implements the `Text` interface.
|
||||
|
||||
###### `Text.matches(text: Text, props: Partial<Text>): boolean`
|
||||
|
||||
Check if a `text` matches a set of `props`.
|
||||
|
||||
###### `Text.decorations(node: Text, decorations: Range[]): Text[]`
|
||||
|
||||
Get the leaves for a text node, given `decorations`.
|
Reference in New Issue
Block a user