feat(core): implement figma controls

Signed-off-by: braks <78412429+bcakmakoglu@users.noreply.github.com>
This commit is contained in:
braks
2022-12-25 17:38:56 +01:00
committed by Braks
parent f319f6249d
commit fd79ab141d
21 changed files with 381 additions and 317 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
import type { EdgePositions, Getters, GraphEdge, GraphNode, HandleElement, Rect, Viewport, XYPosition } from '~/types'
import type { EdgePositions, Getters, GraphEdge, GraphNode, HandleElement, Rect, ViewportTransform, XYPosition } from '~/types'
import { Position } from '~/types'
export const getHandlePosition = (position: Position, rect: Rect, handle?: HandleElement): XYPosition => {
@@ -83,7 +83,7 @@ interface IsEdgeVisibleParams {
targetHeight: number
width: number
height: number
viewport: Viewport
viewport: ViewportTransform
}
export function isEdgeVisible({
+5 -5
View File
@@ -15,7 +15,7 @@ import type {
GraphNode,
Node,
Rect,
Viewport,
ViewportTransform,
XYPosition,
XYZPosition,
} from '~/types'
@@ -222,7 +222,7 @@ export const updateEdge = (oldEdge: Edge, newConnection: Connection, elements: E
export const pointToRendererPoint = (
{ x, y }: XYPosition,
{ x: tx, y: ty, zoom: tScale }: Viewport,
{ x: tx, y: ty, zoom: tScale }: ViewportTransform,
snapToGrid: boolean,
[snapX, snapY]: [number, number],
) => {
@@ -280,7 +280,7 @@ export const getRectOfNodes = (nodes: GraphNode[]) => {
return boxToRect(box)
}
export const graphPosToZoomedPos = ({ x, y }: XYPosition, { x: tx, y: ty, zoom: tScale }: Viewport): XYPosition => ({
export const graphPosToZoomedPos = ({ x, y }: XYPosition, { x: tx, y: ty, zoom: tScale }: ViewportTransform): XYPosition => ({
x: x * tScale + tx,
y: y * tScale + ty,
})
@@ -288,7 +288,7 @@ export const graphPosToZoomedPos = ({ x, y }: XYPosition, { x: tx, y: ty, zoom:
export const getNodesInside = (
nodes: GraphNode[],
rect: Rect,
{ x: tx, y: ty, zoom: tScale }: Viewport = { x: 0, y: 0, zoom: 1 },
{ x: tx, y: ty, zoom: tScale }: ViewportTransform = { x: 0, y: 0, zoom: 1 },
partially = false,
// set excludeNonSelectableNodes if you want to pay attention to the nodes "selectable" attribute
excludeNonSelectableNodes = false,
@@ -337,7 +337,7 @@ export const getTransformForBounds = (
x?: number
y?: number
} = { x: 0, y: 0 },
): Viewport => {
): ViewportTransform => {
const xZoom = width / (bounds.width * (1 + padding))
const yZoom = height / (bounds.height * (1 + padding))
const zoom = Math.min(xZoom, yZoom)