feat(canvas): replace repulsion with snap guides + drop suggestion
Remove ambient repulsion loop (shapes drifting apart at 60fps). Add Figma-style snap alignment guides during drag with magnetic stickiness, and ghost drop suggestion when shapes overlap after drop. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
4b08a02851
commit
ac402c29e9
|
|
@ -296,7 +296,6 @@ export class FolkShape extends FolkElement {
|
||||||
this.requestUpdate("rotation");
|
this.requestUpdate("rotation");
|
||||||
}
|
}
|
||||||
|
|
||||||
static GAP = 8; // minimum gap between shapes
|
|
||||||
static pushExemptTags = new Set(["folk-arrow", "folk-slide", "folk-shape"]);
|
static pushExemptTags = new Set(["folk-arrow", "folk-slide", "folk-shape"]);
|
||||||
|
|
||||||
#highlighted = false;
|
#highlighted = false;
|
||||||
|
|
|
||||||
|
|
@ -3971,8 +3971,9 @@
|
||||||
|
|
||||||
// Keyboard shortcuts for canvas tools
|
// Keyboard shortcuts for canvas tools
|
||||||
document.addEventListener("keydown", (e) => {
|
document.addEventListener("keydown", (e) => {
|
||||||
// Skip when typing in inputs
|
// Skip when typing in inputs (composedPath pierces shadow DOM)
|
||||||
if (e.target.tagName === "INPUT" || e.target.tagName === "TEXTAREA" || e.target.isContentEditable) return;
|
const t = e.composedPath()[0];
|
||||||
|
if (t?.tagName === "INPUT" || t?.tagName === "TEXTAREA" || t?.isContentEditable) return;
|
||||||
|
|
||||||
if (e.key === "Escape") {
|
if (e.key === "Escape") {
|
||||||
// Dismiss reminder widget if open
|
// Dismiss reminder widget if open
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue