import { Range } from 'slate'

A range of a Slate Document. Ranges in Slate are modeled after a combination of the DOM Selection API and the DOM Range API, using terms like "anchor", "focus" and "collapsed".

The "anchor" is the fixed point in a range, and the "focus" is the non-fixed point, which may move when you move the cursor (eg. when pressing Shift + Right Arrow).

Often times, you don't need to specifically know which point is the "anchor" and which is the "focus", and you just need to know which comes first and last in the document. For these cases, there are many convenience equivalent properties and methods referring to the "start" and "end" points.

Properties

Range({
anchorKey: String,
anchorOffset: Number,
focusKey: String,
focusOffset: Number,
isFocused: Boolean,
isBackward: Boolean
})

anchorKey

String

The key of the text node at the range's anchor point.

anchorOffset

Number

The number of characters from the start of the text node at the range's anchor point.

focusKey

String

The key of the text node at the range's focus point.

focusOffset

Number

The number of characters from the start of the text node at the range's focus point.

isBackward

Boolean

Whether the range is backward. A range is considered "backward" when its focus point references a location earlier in the document than its anchor point.

isFocused

Boolean

Whether the range currently has focus.

kind

String

A string with a value of 'range'.

Computed Properties

These properties aren't supplied when creating a range, but are instead computed based on the real properties.

isBlurred

Boolean

The opposite of isFocused, for convenience.

isCollapsed

Boolean

Whether the range is collapsed. A range is considered "collapsed" when the anchor point and focus point of the range are the same.

isExpanded

Boolean

The opposite of isCollapsed, for convenience.

isForward

Boolean

The opposite of isBackward, for convenience.

startKey

startOffset

endKey

endOffset

A few convenience properties for accessing the first and last point of the range. When the range is forward, start refers to the anchor point and end refers to the focus point. And when it's backward they are reversed.

Static Methods

Range.create

Range.create(properties: Object) => Range

Create a new Range instance with properties.

Range.fromJSON

Range.fromJSON(object: Object) => Range

Create a range from a JSON object.

Range.isRange

Range.isRange(maybeRange: Any) => Boolean

Returns a boolean if the passed in argument is a Range.

Instance Methods

toJSON

toJSON() => Object

Returns a JSON representation of the range.

Checking Methods

has{Edge}AtStartOf

has{Edge}AtStartOf(node: Node) => Boolean

Determine whether a range has an edge at the start of a node. Where {Edge} can be one of: Anchor, Focus, Start, End or Edge (referring to either point).

has{Edge}AtEndOf

has{Edge}AtEndOf(node: Node) => Boolean

Determine whether a range has an edge at the end of a node. Where {Edge} can be one of: Anchor, Focus, Start, End or Edge (referring to either point).

has{Edge}Between

has{Edge}Between(node: Node, start: Number, end: Number) => Boolean

Determine whether a range has an edge in a node between its start and end offset. Where {Edge} can be one of: Anchor, Focus, Start, End or Edge (referring to either point).

has{Edge}In

has{Edge}In(node: Node) => Boolean

Determine whether a range has an edge inside a node. Where {Edge} can be one of: Anchor, Focus, Start, End or Edge (referring to either point).

isAtStartOf

isAtStartOf(node: Node) => Boolean

Determine whether the range is at the start of a node.

isAtEndOf

isAtEndOf(node: Node) => Boolean

Determine whether the range is at the end of a node.

Was this page helpful? Let us know how we did: