bfcf6278e9f920b1d9761167358639db6e31cb65
Adds a "Reset to blank" control to each page row in PagesPanel, behind an inline confirmation matching the existing delete-confirmation UI. Blanks the target page's canvas to EMPTY_CANVAS (Task 8) via actions.deserialize. Since deserialize() acts on the live Frame, resetting a page that isn't on screen switches to it first (switchPage), then defers the blank via its own setTimeout(0) -- same-delay setTimeout callbacks fire in registration order, so switchPage's own deferred load (also setTimeout(0), registered first) always resolves before the blank does. Verified this ordering empirically by injecting the reversed-order regression and confirming the new ordering-sensitive integration test catches it. Ran the brief's undo-characterization test first: actions.deserialize() IS recorded in this @craftjs/core version's undo stack, so the confirmation dialog's "Ctrl+Z undoes this." claim is accurate and was kept. The reset button lives only in the per-page action row (not the separate Header/Footer zone-row block), verified structurally and by test. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Description
Visual drag-and-drop website builder using GrapesJS
3.5 MiB
Languages
TypeScript
64.8%
HTML
16.1%
JavaScript
14.9%
CSS
3.2%
PHP
0.7%
Other
0.3%