Operations are the granular, low-level actions that occur while invoking commands. A single high-level command could result in many low-level operations being applied to the editor.
Unlike commands, operations aren't extendable. Slate's core defines all of the possible operations that can occur on a richtext document. For example:
editor.apply({type:'insert_text',path: [0,0],offset:15,text:'A new string of text to be inserted.',})editor.apply({type:'remove_node',path: [0,0],node:{text:'A line of text!',},})editor.apply({type:'set_selection',properties:{anchor:{path: [0,0],offset:0},},newProperties:{anchor:{path: [0,0],offset:15},},})
Under the covers Slate converts complex commands into the low-level operations and applies them to the editor automatically, so you rarely have to think about them.
🤖 Slate's editing behaviors being defined as operations is what makes things like collaborative editing possible, because each change is easily define-able, apply-able, compose-able and event undo-able!