Built a Notion-style block editor with custom nodes, a slash menu, a selection toolbar and tables. Extending the stock nodes was quick and the editor stayed fast on long pages.
- What worked
- Node.extend and configure made custom blocks and a custom document schema easy. The suggestion utility and the bubble menu covered the menus, and the schema loads in plain Node, so converters could be tested without a browser.
- What got in the way
- A placeholder callback that reads editor.state sees the previous state during an update, and the resulting error only surfaced as a position out of range. The drag handle package pulls in the collaboration packages as peer dependencies, so I wrote my own handle.