Design Canvas
The main canvas component for rendering and interacting with design elements.
Install
npx shadcn@latest add https://substrate.georgedrury.co.uk/r/design-canvasUsage
import { DesignCanvas } from "@/components/substrate/design-canvas"
export default function Editor() {
return (
<div className="h-screen w-screen">
<DesignCanvas />
</div>
)
}Features
- HTML5 Canvas 2D rendering with
requestAnimationFrameloop - DPR-aware sizing for sharp rendering on retina displays
- Dirty-flag optimization — only re-renders when state changes
- Pointer event handling for create, move, resize, pan, and marquee select
- Keyboard shortcuts for tool switching, undo/redo, delete, and zoom
- Cursor changes based on active tool
Theme variables
| Variable | Tailwind class | Fallback | Description |
|---|---|---|---|
--canvas | bg-canvas | --background | Canvas background colour |
--canvas-foreground | text-canvas-foreground | --foreground-muted | Grid dots and canvas UI |
Override in your globals.css :root / .dark blocks to theme the canvas.
Dependencies
The canvas component pulls in the full interaction stack:
tool-store— active tool stateuse-canvas-renderer— render loopuse-canvas-interaction— pointer eventsuse-keyboard-shortcuts— keyboard handling