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.
Languages
TypeScript
75.9%
JavaScript
12.3%
HTML
8.6%
CSS
2.6%
PHP
0.4%
Other
0.2%