Input and toolbar
The browser reports what the user wants; bindings decide which command that becomes. The toolbar dispatches the same commands.
Order is a decision
Input and keyboard bindings resolve on the first match. An intent nobody binds runs natively, so an editor without lists does not break on insertUnorderedList.
Leaving the editor is Tab's default. Indenting on Tab is opt-in: bind EditorBindings.tabIndentation and set TabPolicy.IndentsUntilEscape, which is the way out. Ctrl+] and Ctrl+[ indent without Tab.
Typed commands with state
ToolbarAction.command binds a command and its payload to a state query. The bar has one tab stop, moves with the arrow keys, and marks pressed buttons as true, false or mixed.
The editors on these pages use grouped actions with Material Icons: history, marks, headings, quotes, lists, code blocks and tables.
Input methods stay unharmed
While an input method composes text, the view does not write to the region it owns. A composition is one undo step through HistoryBindings.groupCompositions.