feat: redesign linear elements 🎉 (#5501)

* feat: redesign arrows and lines

* set selectedLinearElement on pointerup

* fix tests

* fix lint

* set selectionLinearElement to null when element is not selected

* fix

* don't set selectedElementIds to empty object when linear element selected

* don't move arrows when clicked on bounding box

* don't consider bounding box when linear element selected

* better hitbox

* show pointer when over the points in linear elements

* highlight points when hovered

* tweak design whene editing linear element points

* tweak

* fix test

* fix multi point editing

* cleanup

* fix

* fix

* remove stroke when hovered

* account for zoom when hover

* review fix

* set selectedLinearElement to null when selectedElementIds doesn't contain the linear element

* remove hover affect when moved away from linear element

* don't set selectedLinearAElement if already set

* fix selection

* render reduced in test :p

* fix box selection for single linear element

* set selectedLinearElement when deselecting selected elements and linear element is selected

* don't show linear element handles when element locked

* selected linear element when only linear present and selected with selectAll

* don't set selectedLinearElement if already set

* store selectedLinearElement in browser to persist

* remove redundant checks

* test fix

* select linear element handles when user has finished multipoint editing

* fix snap

* add comments

* show bounding box for locked linear elements

* add stroke param to fillCircle and remove stroke when linear element point hovered

* set selectedLinearElement when thats the only element left when deselcting others

* skip tests instead of removing for rotation

* (un)bind on pointerUp when moving linear element points outside editor

* render bounding box for linear elements as a fallback on state mismatch

* simplify and remove type assertion

Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
Aakansha Doshi 2022-08-03 20:58:17 +05:30 committed by GitHub
parent fe7fbff7f6
commit 08ce7c7fc3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 600 additions and 210 deletions

View file

@ -4,6 +4,7 @@ import { getElementAbsoluteCoords, Bounds } from "./bounds";
import { rotate } from "../math";
import { Zoom } from "../types";
import { isTextElement } from ".";
import { isLinearElement } from "./typeChecks";
export type TransformHandleDirection =
| "n"
@ -59,8 +60,18 @@ const OMIT_SIDES_FOR_LINE_BACKSLASH = {
s: true,
n: true,
w: true,
};
const OMIT_SIDES_FOR_LINEAR_ELEMENT = {
e: true,
s: true,
n: true,
w: true,
nw: true,
se: true,
ne: true,
sw: true,
rotation: true,
};
const generateTransformHandle = (
@ -230,11 +241,9 @@ export const getTransformHandles = (
}
let omitSides: { [T in TransformHandleType]?: boolean } = {};
if (
element.type === "arrow" ||
element.type === "line" ||
element.type === "freedraw"
) {
if (isLinearElement(element)) {
omitSides = OMIT_SIDES_FOR_LINEAR_ELEMENT;
} else if (element.type === "freedraw") {
if (element.points.length === 2) {
// only check the last point because starting point is always (0,0)
const [, p1] = element.points;