feat: RefBoard v0.5.0 — PureRef-style shortcuts, clipboard fix, zoom normalization

- Add 40+ keyboard shortcuts via declarative registry system (shortcut-definitions.ts)
- Fix canvas tainting: patch crossOrigin before loadFromJSON in all paths (init, sync, undo/redo)
- Fix clipboard copy-to-system with proper async blob handling and error toasts
- Fix zoom wheel: normalize deltaY across mice/trackpads with consistent 8% step
- Add operations module: alignment, distribution, normalization, arrangement, flip, grayscale, lock, overlay compare
- Add breakSelection() to fix ActiveSelection relative coordinate bugs
- Add shortcuts help overlay (? / F1) auto-generated from registry
- Add grid overlay toggle (G key)
- Fix 10 shortcut bugs: Ctrl+Y/P conflicts, ? key matching, arrow conflicts, Ctrl+S intercept, context menu stale objects
This commit is contained in:
Hiren
2026-03-09 18:29:35 +05:30
parent 9e5c4ecdd0
commit cdeafce7ad
10 changed files with 1389 additions and 338 deletions
+13
View File
@@ -29,6 +29,7 @@ interface ToolbarProps {
onShareClick?: () => void;
onToggleLayers?: () => void;
showLayers?: boolean;
onToggleHelp?: () => void;
boardName?: string;
}
@@ -140,6 +141,7 @@ export default function Toolbar({
onShareClick,
onToggleLayers,
showLayers,
onToggleHelp,
}: ToolbarProps) {
const showStroke = activeTool === ToolType.PEN;
const showFontSize = activeTool === ToolType.TEXT;
@@ -268,6 +270,17 @@ export default function Toolbar({
</ActionBtn>
)}
{/* Help / shortcuts */}
{onToggleHelp && (
<ActionBtn onClick={onToggleHelp} title="Keyboard shortcuts (?)">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" stroke="currentColor" strokeWidth="1.5">
<circle cx="7" cy="7" r="6" />
<path d="M5.5 5.5a1.5 1.5 0 013 0c0 1-1.5 1-1.5 2" strokeLinecap="round" />
<circle cx="7" cy="10" r="0.5" fill="currentColor" stroke="none" />
</svg>
</ActionBtn>
)}
{/* Spacer */}
<div style={{ flex: 1 }} />