849f4323304f8d4b08591c06b43d6403098ff30a
The canonical Craft.js state from real saves shows that layout shells (Section, BackgroundSection, HeroSimple, FeaturesGrid, ColumnLayout, CTASection, FormContainer, Navbar, Footer) all serialize with isCanvas:false. Only Container instances are canvases. The shells use internal <Element canvas id="..."> linkedNodes for their drop targets. Our previous CANVAS_TYPES set claimed all those shells were canvases, which made Craft.js's toNodeTree walker hit an uncaught Invariant — the shell asserted "I'm a canvas" but its render ignores data.nodes, so the walker would chase phantom children.
Description
Visual drag-and-drop website builder using GrapesJS
Languages
TypeScript
52%
HTML
21.7%
JavaScript
21.5%
CSS
3.4%
PHP
1%
Other
0.4%