The canvas — where the user sees and edits the page. Lives in packages/sdk/src/chrome/viewport/.
The canvas — where the user sees and edits the page. Lives in packages/sdk/src/chrome/viewport/.
useCanvasItemDrag / useCanvasItemResize / useStateCardPin / useLiveDomPin hooks.useViewportSetupEffects / useUnsavedChangesWarning / useCanvasEdgeResize etc. hooks + render parts)Header.tsx; split into BreakpointSwitcher / SideBySideRow + hooks)TabAtom, DeviceAtom, ViewAtom, IsolateAtom)Wraps every rendered node. Renders:
TbGripVertical) on hoverreact-tooltip (PAGEHUB_RTT_GLOBAL_ID)Tooltip rule: never title="" — always data-tooltip-id={PAGEHUB_RTT_GLOBAL_ID}. See .claude/rules/tooltips.md.
Top of canvas. Walks the selected node's ancestor chain to ROOT, displays as clickable trail. Click an ancestor to select it. Each item shows:
props.type)removeParentPrefixes strips redundant prefixes when names cascade (e.g. "Header > Header Container" → "Header > Container").
IsolateAtom (Zedux) holds the currently isolated page id. Header/footer share across pages; only the body of the isolated page renders. hasPageIsolation() is the read.