{ "version": 3, "sources": ["../../../../src/lib/shapes/line/LineShapeUtil.tsx"], "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n\tCubicSpline2d,\n\tPolyline2d,\n\tSVGContainer,\n\tShapeUtil,\n\tTLHandle,\n\tTLLineShape,\n\tTLOnHandleChangeHandler,\n\tTLOnResizeHandler,\n\tVec2d,\n\tWeakMapCache,\n\tdeepCopy,\n\tgetDefaultColorTheme,\n\tgetIndexBetween,\n\tlineShapeMigrations,\n\tlineShapeProps,\n\tsortByIndex,\n} from '@tldraw/editor'\n\nimport { ShapeFill, useDefaultColorTheme } from '../shared/ShapeFill'\nimport { STROKE_SIZES } from '../shared/default-shape-constants'\nimport { getPerfectDashProps } from '../shared/getPerfectDashProps'\nimport { getDrawLinePathData } from '../shared/polygon-helpers'\nimport { getLineDrawPath, getLineIndicatorPath } from './components/getLinePath'\nimport {\n\tgetSvgPathForBezierCurve,\n\tgetSvgPathForCubicSpline,\n\tgetSvgPathForEdge,\n\tgetSvgPathForLineGeometry,\n} from './components/svg'\n\nconst handlesCache = new WeakMapCache()\n\n/** @public */\nexport class LineShapeUtil extends ShapeUtil {\n\tstatic override type = 'line' as const\n\tstatic override props = lineShapeProps\n\tstatic override migrations = lineShapeMigrations\n\n\toverride hideResizeHandles = () => true\n\toverride hideRotateHandle = () => true\n\toverride hideSelectionBoundsFg = () => true\n\toverride hideSelectionBoundsBg = () => true\n\n\toverride getDefaultProps(): TLLineShape['props'] {\n\t\treturn {\n\t\t\tdash: 'draw',\n\t\t\tsize: 'm',\n\t\t\tcolor: 'black',\n\t\t\tspline: 'line',\n\t\t\thandles: {\n\t\t\t\tstart: {\n\t\t\t\t\tid: 'start',\n\t\t\t\t\ttype: 'vertex',\n\t\t\t\t\tcanBind: false,\n\t\t\t\t\tcanSnap: true,\n\t\t\t\t\tindex: 'a1',\n\t\t\t\t\tx: 0,\n\t\t\t\t\ty: 0,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\tid: 'end',\n\t\t\t\t\ttype: 'vertex',\n\t\t\t\t\tcanBind: false,\n\t\t\t\t\tcanSnap: true,\n\t\t\t\t\tindex: 'a2',\n\t\t\t\t\tx: 0.1,\n\t\t\t\t\ty: 0.1,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\tgetGeometry(shape: TLLineShape) {\n\t\t// todo: should we have min size?\n\t\treturn getGeometryForLineShape(shape)\n\t}\n\n\toverride getHandles(shape: TLLineShape) {\n\t\treturn handlesCache.get(shape.props, () => {\n\t\t\tconst handles = shape.props.handles\n\n\t\t\tconst spline = getGeometryForLineShape(shape)\n\n\t\t\tconst sortedHandles = Object.values(handles).sort(sortByIndex)\n\t\t\tconst results = sortedHandles.slice()\n\n\t\t\t// Add \"create\" handles between each vertex handle\n\t\t\tfor (let i = 0; i < spline.segments.length; i++) {\n\t\t\t\tconst segment = spline.segments[i]\n\t\t\t\tconst point = segment.midPoint()\n\t\t\t\tconst index = getIndexBetween(sortedHandles[i].index, sortedHandles[i + 1].index)\n\n\t\t\t\tresults.push({\n\t\t\t\t\tid: `mid-${i}`,\n\t\t\t\t\ttype: 'create',\n\t\t\t\t\tindex,\n\t\t\t\t\tx: point.x,\n\t\t\t\t\ty: point.y,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn results.sort(sortByIndex)\n\t\t})\n\t}\n\n\toverride getOutlineSegments(shape: TLLineShape) {\n\t\tconst spline = this.editor.getShapeGeometry(shape) as Polyline2d | CubicSpline2d\n\t\treturn spline.segments.map((s) => s.vertices)\n\t}\n\n\t// Events\n\n\toverride onResize: TLOnResizeHandler = (shape, info) => {\n\t\tconst { scaleX, scaleY } = info\n\n\t\tconst handles = deepCopy(shape.props.handles)\n\n\t\tObject.values(shape.props.handles).forEach(({ id, x, y }) => {\n\t\t\thandles[id].x = x * scaleX\n\t\t\thandles[id].y = y * scaleY\n\t\t})\n\n\t\treturn {\n\t\t\tprops: {\n\t\t\t\thandles,\n\t\t\t},\n\t\t}\n\t}\n\n\toverride onHandleChange: TLOnHandleChangeHandler = (shape, { handle }) => {\n\t\tconst next = deepCopy(shape)\n\n\t\tswitch (handle.id) {\n\t\t\tcase 'start':\n\t\t\tcase 'end': {\n\t\t\t\tnext.props.handles[handle.id] = {\n\t\t\t\t\t...next.props.handles[handle.id],\n\t\t\t\t\tx: handle.x,\n\t\t\t\t\ty: handle.y,\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst id = 'handle:' + handle.index\n\t\t\t\tconst existing = shape.props.handles[id]\n\n\t\t\t\tif (existing) {\n\t\t\t\t\tnext.props.handles[id] = {\n\t\t\t\t\t\t...existing,\n\t\t\t\t\t\tx: handle.x,\n\t\t\t\t\t\ty: handle.y,\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnext.props.handles[id] = {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: 'vertex',\n\t\t\t\t\t\tcanBind: false,\n\t\t\t\t\t\tindex: handle.index,\n\t\t\t\t\t\tx: handle.x,\n\t\t\t\t\t\ty: handle.y,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\treturn next\n\t}\n\n\tcomponent(shape: TLLineShape) {\n\t\tconst theme = useDefaultColorTheme()\n\t\tconst spline = getGeometryForLineShape(shape)\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tconst { dash, color } = shape.props\n\n\t\t// Line style lines\n\t\tif (shape.props.spline === 'line') {\n\t\t\tif (dash === 'solid') {\n\t\t\t\tconst outline = spline.points\n\t\t\t\tconst pathData = 'M' + outline[0] + 'L' + outline.slice(1)\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (dash === 'dashed' || dash === 'dotted') {\n\t\t\t\tconst outline = spline.points\n\t\t\t\tconst pathData = 'M' + outline[0] + 'L' + outline.slice(1)\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{spline.segments.map((segment, i) => {\n\t\t\t\t\t\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\t\t\t\t\t\t\tsegment.length,\n\t\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstyle: dash,\n\t\t\t\t\t\t\t\t\t\tstart: i > 0 ? 'outset' : 'none',\n\t\t\t\t\t\t\t\t\t\tend: i < spline.segments.length - 1 ? 'outset' : 'none',\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (dash === 'draw') {\n\t\t\t\tconst outline = spline.points\n\t\t\t\tconst [innerPathData, outerPathData] = getDrawLinePathData(shape.id, outline, strokeWidth)\n\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\t// Cubic style spline\n\t\tif (shape.props.spline === 'cubic') {\n\t\t\tconst splinePath = getSvgPathForLineGeometry(spline)\n\t\t\tif (dash === 'solid') {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (dash === 'dashed' || dash === 'dotted') {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{spline.segments.map((segment, i) => {\n\t\t\t\t\t\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\t\t\t\t\t\t\tsegment.length,\n\t\t\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tstyle: dash,\n\t\t\t\t\t\t\t\t\t\tstart: i > 0 ? 'outset' : 'none',\n\t\t\t\t\t\t\t\t\t\tend: i < spline.segments.length - 1 ? 'outset' : 'none',\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (dash === 'draw') {\n\t\t\t\treturn (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tindicator(shape: TLLineShape) {\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\t\tconst spline = getGeometryForLineShape(shape)\n\t\tconst { dash } = shape.props\n\n\t\tlet path: string\n\n\t\tif (shape.props.spline === 'line') {\n\t\t\tconst outline = spline.points\n\t\t\tif (dash === 'solid' || dash === 'dotted' || dash === 'dashed') {\n\t\t\t\tpath = 'M' + outline[0] + 'L' + outline.slice(1)\n\t\t\t} else {\n\t\t\t\tconst [innerPathData] = getDrawLinePathData(shape.id, outline, strokeWidth)\n\t\t\t\tpath = innerPathData\n\t\t\t}\n\t\t} else {\n\t\t\tpath = getLineIndicatorPath(shape, spline, strokeWidth)\n\t\t}\n\n\t\treturn \n\t}\n\n\toverride toSvg(shape: TLLineShape) {\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.isDarkMode })\n\t\tconst color = theme[shape.props.color].solid\n\t\tconst spline = getGeometryForLineShape(shape)\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\n\t\tswitch (shape.props.dash) {\n\t\t\tcase 'draw': {\n\t\t\t\tlet pathData: string\n\t\t\t\tif (spline instanceof CubicSpline2d) {\n\t\t\t\t\tpathData = getLineDrawPath(shape, spline, strokeWidth)\n\t\t\t\t} else {\n\t\t\t\t\tconst [_, outerPathData] = getDrawLinePathData(shape.id, spline.points, strokeWidth)\n\t\t\t\t\tpathData = outerPathData\n\t\t\t\t}\n\n\t\t\t\tconst p = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\t\t\t\tp.setAttribute('stroke-width', strokeWidth + 'px')\n\t\t\t\tp.setAttribute('stroke', color)\n\t\t\t\tp.setAttribute('fill', 'none')\n\t\t\t\tp.setAttribute('d', pathData)\n\n\t\t\t\treturn p\n\t\t\t}\n\t\t\tcase 'solid': {\n\t\t\t\tlet pathData: string\n\n\t\t\t\tif (spline instanceof CubicSpline2d) {\n\t\t\t\t\tpathData = getSvgPathForCubicSpline(spline, false)\n\t\t\t\t} else {\n\t\t\t\t\tconst outline = spline.points\n\t\t\t\t\tpathData = 'M' + outline[0] + 'L' + outline.slice(1)\n\t\t\t\t}\n\n\t\t\t\tconst p = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\t\t\t\tp.setAttribute('stroke-width', strokeWidth + 'px')\n\t\t\t\tp.setAttribute('stroke', color)\n\t\t\t\tp.setAttribute('fill', 'none')\n\t\t\t\tp.setAttribute('d', pathData)\n\n\t\t\t\treturn p\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst { segments } = spline\n\n\t\t\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\t\t\tg.setAttribute('stroke', color)\n\t\t\t\tg.setAttribute('stroke-width', strokeWidth.toString())\n\n\t\t\t\tconst fn = spline instanceof CubicSpline2d ? getSvgPathForBezierCurve : getSvgPathForEdge\n\n\t\t\t\tsegments.forEach((segment, i) => {\n\t\t\t\t\tconst path = document.createElementNS('http://www.w3.org/2000/svg', 'path')\n\t\t\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(\n\t\t\t\t\t\tsegment.length,\n\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tstyle: shape.props.dash,\n\t\t\t\t\t\t\tstart: i > 0 ? 'outset' : 'none',\n\t\t\t\t\t\t\tend: i < segments.length - 1 ? 'outset' : 'none',\n\t\t\t\t\t\t}\n\t\t\t\t\t)\n\n\t\t\t\t\tpath.setAttribute('stroke-dasharray', strokeDasharray.toString())\n\t\t\t\t\tpath.setAttribute('stroke-dashoffset', strokeDashoffset.toString())\n\t\t\t\t\tpath.setAttribute('d', fn(segment as any, true))\n\t\t\t\t\tpath.setAttribute('fill', 'none')\n\t\t\t\t\tg.appendChild(path)\n\t\t\t\t})\n\n\t\t\t\treturn g\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** @public */\nexport function getGeometryForLineShape(shape: TLLineShape): CubicSpline2d | Polyline2d {\n\tconst { spline, handles } = shape.props\n\tconst handlePoints = Object.values(handles).sort(sortByIndex).map(Vec2d.From)\n\n\tswitch (spline) {\n\t\tcase 'cubic': {\n\t\t\treturn new CubicSpline2d({ points: handlePoints })\n\t\t}\n\t\tcase 'line': {\n\t\t\treturn new Polyline2d({ points: handlePoints })\n\t\t}\n\t}\n}\n"], "mappings": "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", "names": [] }