UI polish Phase 2: deeper restyle (guides toggle, pages/layers panels, topbar, modal, context menu) #7
Reference in New Issue
Block a user
Delete Branch "ui-polish-phase2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fable UI review items 10-16 + design-consult tweaks. Editor-chrome only (no toHtml change). Scopes dashed guides to real droppables + Show Guides toggle; layers panel type-icons/indent/hover-sync (solid accent, decoupled from guides); topbar radius unification + icon-only Code/Preview w/ tooltips; pages panel neutral zones + outline Landing badge w/ home icon; templates modal hover; default header no dead links; context-menu icons. Two runtime bugs caught via Playwright (setNodeEvent stripped, tooltip offscreen) fixed. 572 tests.
🤖 Generated with Claude Code
Item 10: dashed canvas "guide" outlines were applied via blanket tag selectors (div/section/header/...), so a finished section showed 3-4 nested dashed boxes. RenderNode.tsx (the <Editor onRender> override) now tags each Craft.js droppable container's real DOM node with a `data-craft-node` attribute (node.data.isCanvas, excluding ROOT), and editor.css's guide rules target that attribute instead — a component's own internal wrapper markup is no longer mistaken for a drop target. Added a "Show guides" topbar toggle (default ON, persisted to localStorage), state lifted in EditorShell.tsx (mirrors how `device` is already lifted), flips `.guides-off` on Canvas.tsx's `.canvas-device-frame`. Item 12: Layers panel rows get per-type FA icons (keyed off the same craft.displayName used for the row label, seeded from BlocksPanel's choices), indent-guide lines connecting nested rows, and row hover highlights the matching canvas element (`data-layer-hovered`, written directly to the node's DOM via `query.node(id).get().dom` — NOT via `actions.setNodeEvent`, which is stripped from useEditor()'s public `actions` at runtime, not just in its TS type, and threw when called). Along the way, Craft.js's own connect() was found to already wire mouse hover to the same `hovered` node event internally (previously invisible because the matching CSS was dead) — RenderNode now also mirrors that onto `data-craft-hovered` for a real-mouse-hover canvas highlight, and both hover attributes plus the guide attribute are suppressed under `.guides-off` so the toggle stays airtight. Item 13: unified the topbar to one button radius (`.topbar-btn` 20px pill -> var(--radius-md)), demoted Code/Preview to icon-only with `data-tooltip`. Fixed a latent bug the new tooltips exposed: `[data-tooltip]` tooltips render above their trigger, but the topbar has no room above it (`body { overflow: hidden }`) — added a `.topbar` override to render those below instead. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>