Declarative extension API covering block registration, hooks, serializers, actions, paste interpreters, and Loro text style configuration.
- Extension class: hooks, serializers, actions, pasteInterpreters, loroTextStyles declared as plain objects
- Block class registry (type → Block subclass) and component registry (type → Svelte component)
- Type swap: updateChildren() re-instantiates a block when its Loro node type changes
- Action bus: nabu.exec(topic, data) wraps a private Pulse instance; extensions declare handlers via actions property
- Preset arrays (MinimalPreset, TextPreset, DocumentPreset, FullPreset) and factory functions (createFullEditor, createPersistedEditor, etc.)
- MegaBlock base class: updateChildren(), adoptChildren() for tree moves, serializeForClipboard() for recursive copy
- ListItem merge (Backspace): Block.consume() calls adoptChildren() to relocate sublists from victim to survivor