Type Editor / @type-editor/state / selection/Selection / Selection
Class: Selection
Defined in: state/src/selection/Selection.ts:46
Superclass for editor selections. Every selection type should extend this. Should not be instantiated directly.
This abstract class provides the foundation for all selection types in the editor, including text selections, node selections, and all-document selections. It manages the selection's anchor, head, and ranges, along with methods to query and manipulate the selection state.
Note: made this class non-abstract due to issues with the compat module.
Extended by
Implements
PmSelection
Constructors
Constructor
new Selection(
$anchor,
$head,
ranges?): Selection;Defined in: state/src/selection/Selection.ts:120
Initialize a selection with the head and anchor and ranges. If no ranges are given, constructs a single range across $anchor and $head.
Parameters
| Parameter | Type | Description |
|---|---|---|
$anchor | ResolvedPos | The resolved anchor of the selection (the side that stays in place when the selection is modified). |
$head | ResolvedPos | The resolved head of the selection (the side that moves when the selection is modified). |
ranges? | readonly PmSelectionRange[] | Optional array of selection ranges. If not provided, a single range spanning from min to max of anchor and head will be created. |
Returns
Selection
Properties
| Property | Modifier | Type | Default value | Description | Defined in |
|---|---|---|---|---|---|
anchorPos | readonly | ResolvedPos | undefined | The resolved position of the selection's anchor (the immobile end). | state/src/selection/Selection.ts:92 |
headPos | readonly | ResolvedPos | undefined | The resolved position of the selection's head (the mobile end). | state/src/selection/Selection.ts:98 |
isVisible | protected | boolean | true | Controls whether the selection should be visible in the browser. Some selection types (like node selections) may be invisible. | state/src/selection/Selection.ts:105 |
selectionRanges | readonly | readonly PmSelectionRange[] | undefined | The array of selection ranges covered by this selection. Most selections have a single range, but some may span multiple ranges. | state/src/selection/Selection.ts:86 |
Accessors
$anchor
Get Signature
get $anchor(): ResolvedPos;Defined in: state/src/selection/Selection.ts:167
The resolved anchor position of the selection. The anchor is the immobile end of the selection - it stays in place when the user extends the selection by moving the head.
Returns
ResolvedPos
The resolved anchor position
Implementation of
PmSelection.$anchor;$cursor
Get Signature
get $cursor(): ResolvedPos;Defined in: state/src/selection/Selection.ts:138
The cursor position if this is an empty text selection, null otherwise
Returns
ResolvedPos
Implementation of
PmSelection.$cursor;$from
Get Signature
get $from(): ResolvedPos;Defined in: state/src/selection/Selection.ts:234
The resolved lower bound of the selection's main range. This provides access to the document structure at the start of the selection, allowing you to query the context and perform position-based operations.
Throws
If the selection has no ranges
Returns
ResolvedPos
The resolved starting position
Implementation of
PmSelection.$from;$head
Get Signature
get $head(): ResolvedPos;Defined in: state/src/selection/Selection.ts:178
The resolved head position of the selection. The head is the mobile end of the selection - it moves when the user extends or modifies the selection.
Returns
ResolvedPos
The resolved head position
Implementation of
PmSelection.$head;$to
Get Signature
get $to(): ResolvedPos;Defined in: state/src/selection/Selection.ts:249
The resolved upper bound of the selection's main range. This provides access to the document structure at the end of the selection, allowing you to query the context and perform position-based operations.
Throws
If the selection has no ranges
Returns
ResolvedPos
The resolved ending position
Implementation of
PmSelection.$to;anchor
Get Signature
get anchor(): number;Defined in: state/src/selection/Selection.ts:189
The selection's anchor, as an unresolved position. This is the integer position in the document where the anchor is located. The anchor is the immobile end of the selection.
Returns
number
The anchor position as a number
Implementation of
PmSelection.anchor;empty
Get Signature
get empty(): boolean;Defined in: state/src/selection/Selection.ts:263
Indicates whether the selection contains any content. A selection is empty when all its ranges have identical from and to positions, which typically represents a cursor position rather than a content selection.
Returns
boolean
True if the selection is empty (cursor), false if it spans content
Implementation of
PmSelection.empty;from
Get Signature
get from(): number;Defined in: state/src/selection/Selection.ts:211
The lower bound of the selection's main range. This is always the smaller position value, regardless of which end is the anchor or head. For a cursor selection, this equals to.
Returns
number
The starting position of the selection
Implementation of
PmSelection.from;head
Get Signature
get head(): number;Defined in: state/src/selection/Selection.ts:200
The selection's head, as an unresolved position. This is the integer position in the document where the head is located. The head is the mobile end of the selection that moves when extending it.
Returns
number
The head position as a number
Implementation of
PmSelection.head;node
Get Signature
get node(): Node_2;Defined in: state/src/selection/Selection.ts:145
The selected node if this is a node selection, null otherwise
Returns
Node_2
Implementation of
PmSelection.node;ranges
Get Signature
get ranges(): readonly SelectionRange[];Defined in: state/src/selection/Selection.ts:156
The ranges covered by the selection. For most selections, this will be a single range. Multiple ranges are used for selections that span non-contiguous parts of the document.
Returns
readonly SelectionRange[]
A readonly array of selection ranges
Implementation of
PmSelection.ranges;to
Get Signature
get to(): number;Defined in: state/src/selection/Selection.ts:222
The upper bound of the selection's main range. This is always the larger position value, regardless of which end is the anchor or head. For a cursor selection, this equals from.
Returns
number
The ending position of the selection
Implementation of
PmSelection.to;type
Get Signature
get type(): string;Defined in: state/src/selection/Selection.ts:131
The type identifier for this selection.
Returns
string
Always returns SelectionType.ALL
Implementation of
PmSelection.type;visible
Get Signature
get visible(): boolean;Defined in: state/src/selection/Selection.ts:274
Controls whether the selection should be visible to the user in the browser. Most selections are visible (highlighted), but some selection types like node selections may choose to be invisible.
Returns
boolean
True if the selection should be visible, false otherwise
Set Signature
set visible(isVisible): void;Defined in: state/src/selection/Selection.ts:283
Sets whether the selection should be visible to the user in the browser.
Parameters
| Parameter | Type | Description |
|---|---|---|
isVisible | boolean | True to make the selection visible, false to hide it |
Returns
void
Implementation of
PmSelection.visible;Methods
content()
content(): Slice;Defined in: state/src/selection/Selection.ts:601
Get the content of this selection as a slice. This extracts the document fragment that falls within the selection's range, preserving the structure and allowing it to be inserted elsewhere.
Returns
Slice
A slice containing the selected content
Implementation of
PmSelection.content;eq()
eq(_selection): boolean;Defined in: state/src/selection/Selection.ts:612
Test whether this selection is equal to another selection. Selections are equal if they have the same type and positions.
Parameters
| Parameter | Type | Description |
|---|---|---|
_selection | PmSelection | The selection to compare with |
Returns
boolean
True if the selections are equal, false otherwise
Implementation of
PmSelection.eq;getBookmark()
getBookmark(): SelectionBookmark;Defined in: state/src/selection/Selection.ts:623
Create a bookmark for this selection. The bookmark stores the selection's position information and can be used to restore the selection after document changes by mapping through those changes.
Returns
SelectionBookmark
A bookmark that can recreate this selection
Implementation of
PmSelection.getBookmark;isAllSelection()
isAllSelection(): boolean;Defined in: state/src/selection/Selection.ts:590
Check if this is an all selection.
Returns
boolean
True if this is an AllSelection instance
Implementation of
PmSelection.isAllSelection;isNodeSelection()
isNodeSelection(): boolean;Defined in: state/src/selection/Selection.ts:581
Check if this is a node selection.
Returns
boolean
True if this is a NodeSelection instance
Implementation of
PmSelection.isNodeSelection;isTextSelection()
isTextSelection(): boolean;Defined in: state/src/selection/Selection.ts:572
Check if this is a text selection.
Returns
boolean
True if this is a TextSelection instance
Implementation of
PmSelection.isTextSelection;map()
map(doc, mapping): Selection;Defined in: state/src/selection/Selection.ts:640
Map this selection through a mappable transformation. This updates the selection to reflect changes made to the document, adjusting positions and potentially changing the selection type if the mapped positions are no longer valid for the current type.
For example, if a text selection's positions are mapped to non-inline content, this will find a nearby valid selection instead.
Parameters
| Parameter | Type | Description |
|---|---|---|
doc | Node_2 | The new document after the transformation |
mapping | Mappable | The mappable transformation (e.g., from a transaction) |
Returns
Selection
A new selection mapped to the new document
Implementation of
PmSelection.map;replace()
replace(transaction, content?): void;Defined in: state/src/selection/Selection.ts:672
Replace the selection with a slice or, if no slice is given, delete the selection. Will append to the given transaction.
Parameters
| Parameter | Type | Default value |
|---|---|---|
transaction | PmTransaction | undefined |
content | Slice | Slice.empty |
Returns
void
Implementation of
PmSelection.replace;replaceWith()
replaceWith(transaction, node): void;Defined in: state/src/selection/Selection.ts:754
Replace the selection with the given node, appending the changes to the given transaction.
For multi-range selections, the first range is replaced with the node, and subsequent ranges are deleted. The selection is then positioned after the inserted node.
Parameters
| Parameter | Type | Description |
|---|---|---|
transaction | PmTransaction | The transaction to append the replacement to |
node | Node_2 | The node to insert in place of the selection |
Returns
void
Implementation of
PmSelection.replaceWith;toJSON()
toJSON(): SelectionJSON;Defined in: state/src/selection/Selection.ts:779
Convert this selection to a JSON-serializable representation. The JSON includes the selection type and position information.
Returns
SelectionJSON
A JSON object representing this selection
Implementation of
PmSelection.toJSON;atEnd()
static atEnd(doc): Selection;Defined in: state/src/selection/Selection.ts:335
Find the cursor or leaf node selection closest to the end of the given document. Will return an AllSelection if no valid position exists.
This is commonly used to position the cursor at the end of a document.
Parameters
| Parameter | Type | Description |
|---|---|---|
doc | Node_2 | The document node to find a selection in |
Returns
Selection
A selection at the end of the document
atStart()
static atStart(doc): Selection;Defined in: state/src/selection/Selection.ts:320
Find the cursor or leaf node selection closest to the start of the given document. Will return an AllSelection if no valid position exists.
This is commonly used to position the cursor at the beginning of a document.
Parameters
| Parameter | Type | Description |
|---|---|---|
doc | Node_2 | The document node to find a selection in |
Returns
Selection
A selection at the start of the document
between()
static between(
$anchor,
$head,
bias?): Selection;Defined in: state/src/selection/Selection.ts:412
Parameters
| Parameter | Type |
|---|---|
$anchor | ResolvedPos |
$head | ResolvedPos |
bias? | number |
Returns
Selection
findFrom()
static findFrom(
$pos,
dir,
textOnly?): Selection;Defined in: state/src/selection/Selection.ts:354
Find a valid cursor or leaf node selection starting at the given position and searching in the specified direction. When textOnly is true, only consider cursor selections (no node selections). Will return null when no valid selection position is found.
This method searches both within the current parent node and up the document tree to find a valid selection position.
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
$pos | ResolvedPos | undefined | The resolved position to start searching from |
dir | number | undefined | The search direction: negative for backward, positive for forward |
textOnly | boolean | false | If true, only return text/cursor selections (default: false) |
Returns
Selection
A valid selection, or null if none found
fromJSON()
static fromJSON(doc, json): Selection;Defined in: state/src/selection/Selection.ts:398
Deserialize the JSON representation of a selection. This factory method delegates to the appropriate selection type's fromJSON method based on the type field in the JSON.
Parameters
| Parameter | Type | Description |
|---|---|---|
doc | Node_2 | The document node in which to create the selection |
json | SelectionJSON | The JSON representation of the selection, must include a 'type' field |
Returns
Selection
A new EditorSelection instance of the appropriate type
Throws
If the JSON is invalid or contains an unknown selection type
isNodeSelectable()
static isNodeSelectable(node): boolean;Defined in: state/src/selection/Selection.ts:384
Determines whether the given node may be selected as a node selection. A node is selectable if it's not a text node and its type specification has not explicitly set selectable to false.
Parameters
| Parameter | Type | Description |
|---|---|---|
node | Node_2 | The node to check for selectability |
Returns
boolean
True if the node can be selected as a node selection, false otherwise
jsonID()
static jsonID(jsonId, jsonDeserializerClass): void;Defined in: state/src/selection/Selection.ts:72
Parameters
| Parameter | Type |
|---|---|
jsonId | string |
jsonDeserializerClass | JSONToSelectionDeserializer |
Returns
void
near()
static near($pos, bias?): Selection;Defined in: state/src/selection/Selection.ts:303
Find a valid cursor or leaf node selection near the given position. Searches in the direction specified by bias first, then tries the opposite direction if nothing is found. Falls back to an all-selection if no valid position exists.
This is useful for finding a valid selection position after document changes that may have invalidated the previous selection.
Parameters
| Parameter | Type | Default value | Description |
|---|---|---|---|
$pos | ResolvedPos | undefined | The resolved position to search from |
bias | number | 1 | The search direction bias: 1 for forward (default), -1 for backward |
Returns
Selection
A valid selection near the given position, or an all-selection
registerAllSelectionHandler()
protected static registerAllSelectionHandler(handler): void;Defined in: state/src/selection/Selection.ts:68
Parameters
| Parameter | Type |
|---|---|
handler | (...param) => PmSelection |
Returns
void
registerJsonDeserializerClass()
static registerJsonDeserializerClass(jsonId, jsonDeserializerClass): void;Defined in: state/src/selection/Selection.ts:76
Parameters
| Parameter | Type |
|---|---|
jsonId | string |
jsonDeserializerClass | JSONToSelectionDeserializer |
Returns
void
registerNodeSelectionHandler()
protected static registerNodeSelectionHandler(handler): void;Defined in: state/src/selection/Selection.ts:63
Parameters
| Parameter | Type |
|---|---|
handler | (...param) => PmSelection |
Returns
void
registerTextSelectionHandler()
protected static registerTextSelectionHandler(handler): void;Defined in: state/src/selection/Selection.ts:58
Parameters
| Parameter | Type |
|---|---|
handler | (...param) => PmSelection |
Returns
void
textSelectionBetween()
static textSelectionBetween(
$anchor,
$head,
bias?): Selection;Defined in: state/src/selection/Selection.ts:432
Return a text selection that spans the given positions or, if they aren't text positions, find a text selection near them. bias determines whether the method searches forward (default) or backwards (negative number) first. Will fall back to calling Selection.near when the document doesn't contain a valid text position.
This method ensures that both anchor and head are positioned in inline content, adjusting them if necessary while maintaining the intended selection direction.
Parameters
| Parameter | Type | Description |
|---|---|---|
$anchor | ResolvedPos | The desired anchor position (may be adjusted if not in inline content) |
$head | ResolvedPos | The desired head position (may be adjusted if not in inline content) |
bias? | number | Optional search direction bias: positive for forward, negative for backward |
Returns
Selection
A text selection between valid positions