UNPKG

tldraw

Version:

A tiny little drawing editor.

51 lines (43 loc) 1.44 kB
import { VecLike } from '@tldraw/editor' import { TLArrowInfo } from './arrow-types' /* --------------------- Curved --------------------- */ /** * Get a solid path for a curved arrow's handles. * * @param info - The arrow info. * @public */ export function getCurvedArrowHandlePath(info: TLArrowInfo & { isStraight: false }) { const { start, end, handleArc: { radius, largeArcFlag, sweepFlag }, } = info return `M${start.handle.x},${start.handle.y} A${radius} ${radius} 0 ${largeArcFlag} ${sweepFlag} ${end.handle.x},${end.handle.y}` } /** * Get a solid path for a curved arrow's body. * * @param info - The arrow info. * @public */ export function getSolidCurvedArrowPath(info: TLArrowInfo & { isStraight: false }) { const { start, end, bodyArc: { radius, largeArcFlag, sweepFlag }, } = info return `M${start.point.x},${start.point.y} A${radius} ${radius} 0 ${largeArcFlag} ${sweepFlag} ${end.point.x},${end.point.y}` } /* -------------------- Straight -------------------- */ function getArrowPath(start: VecLike, end: VecLike) { return `M${start.x},${start.y}L${end.x},${end.y}` } /** @public */ export function getStraightArrowHandlePath(info: TLArrowInfo & { isStraight: true }) { return getArrowPath(info.start.handle, info.end.handle) } /** @public */ export function getSolidStraightArrowPath(info: TLArrowInfo & { isStraight: true }) { return getArrowPath(info.start.point, info.end.point) }