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