1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-01-17 21:49:20 +01:00

Add API reference for Operation types

This commit is contained in:
Sunny Hirai 2023-04-12 18:50:52 -07:00
parent dd2dfbdfc7
commit 2ba167eadb
2 changed files with 127 additions and 0 deletions

View File

@ -48,6 +48,7 @@
- [RangeRef](api/locations/range-ref.md)
- [Span](api/locations/span.md)
- [Operation](api/operation.md)
- [Operation Types](api/operation-types.md)
- [Scrubber](api/scrubber.md)
## Libraries

126
docs/api/operation-types.md Normal file
View File

@ -0,0 +1,126 @@
# Operation Types
`Operation` objects define the low-level instructions that Slate editors use to apply changes to their internal state. Representing all changes as operations is what allows Slate editors to easily implement history, collaboration, and other features.
- [Node Operations](operation-types.md#node-operations)
- [Text Operations](operation-types.md#text-operations)
- [Selection Operation](operation-types.md#selection-operation)
- [Base Operation](operation-types.md#base-operation)
### Node Operations
Node operations operate on `Node` objects.
```typescript
// insert a new `Node`
type InsertNodeOperation = {
type: 'insert_node'
path: Path
node: Node
}
// merge two `Node` objects
type MergeNodeOperation = {
type: 'merge_node'
path: Path
position: number
properties: Partial<Node>
}
// move `Node` from one path to another
type MoveNodeOperation = {
type: 'move_node'
path: Path
newPath: Path
}
// Remove a `Node`
type RemoveNodeOperation = {
type: 'remove_node'
path: Path
node: Node
}
// Set properties of a `Node`
type SetNodeOperation = {
type: 'set_node'
path: Path
properties: Partial<Node>
newProperties: Partial<Node>
}
// Split a node into two separate `Node` objects
type SplitNodeOperation = {
type: 'split_node'
path: Path
position: number
properties: Partial<Node>
}
export type NodeOperation =
| InsertNodeOperation
| MergeNodeOperation
| MoveNodeOperation
| RemoveNodeOperation
| SetNodeOperation
| SplitNodeOperation
```
### Text Operations
Text operations operate on `Text` objects only.
Note: `Text` objects are `Node` objects so you can use `Node` operations on `Text` objects.
```typescript
// insert text into an existing `Text` node
type InsertTextOperation = {
type: 'insert_text'
path: Path
offset: number
text: string
}
// remove text from an existing `Text` node
type RemoveTextOperation = {
type: 'remove_text'
path: Path
offset: number
text: string
}
export type TextOperation = InsertTextOperation | RemoveTextOperation
```
### Selection Operation
Operation to set or unset a selection `Range`.
```typescript
type SetSelectionOperation =
| {
type: 'set_selection'
properties: null
newProperties: Range
}
| {
type: 'set_selection'
properties: Partial<Range>
newProperties: Partial<Range>
}
| {
type: 'set_selection'
properties: Range
newProperties: null
}
export type SelectionOperation = SetSelectionOperation
```
### Base Operation
The combination of all operation types.
```typescript
export type BaseOperation = NodeOperation | SelectionOperation | TextOperation
```