{ "version": 3, "sources": ["../../../../../src/lib/shapes/geo/components/DashStylePolygon.tsx"], "sourcesContent": ["import { TLDefaultColorTheme, TLGeoShape, Vec2d, VecLike } from '@tldraw/editor'\nimport * as React from 'react'\nimport {\n\tShapeFill,\n\tgetShapeFillSvg,\n\tgetSvgWithShapeFill,\n\tuseDefaultColorTheme,\n} from '../../shared/ShapeFill'\nimport { getPerfectDashProps } from '../../shared/getPerfectDashProps'\n\nexport const DashStylePolygon = React.memo(function DashStylePolygon({\n\tdash,\n\tfill,\n\tcolor,\n\tstrokeWidth,\n\toutline,\n\tlines,\n}: Pick & {\n\tstrokeWidth: number\n\toutline: VecLike[]\n\tlines?: VecLike[][]\n}) {\n\tconst theme = useDefaultColorTheme()\n\tconst innerPath = 'M' + outline[0] + 'L' + outline.slice(1) + 'Z'\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\n\t\t\t\t{Array.from(Array(outline.length)).map((_, i) => {\n\t\t\t\t\tconst A = outline[i]\n\t\t\t\t\tconst B = outline[(i + 1) % outline.length]\n\n\t\t\t\t\tconst dist = Vec2d.Dist(A, B)\n\n\t\t\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(dist, strokeWidth, {\n\t\t\t\t\t\tstyle: dash,\n\t\t\t\t\t\tstart: 'outset',\n\t\t\t\t\t\tend: 'outset',\n\t\t\t\t\t})\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t\t{lines &&\n\t\t\t\t\tlines.map(([A, B], i) => {\n\t\t\t\t\t\tconst dist = Vec2d.Dist(A, B)\n\n\t\t\t\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(dist, strokeWidth, {\n\t\t\t\t\t\t\tstyle: dash,\n\t\t\t\t\t\t\tstart: 'skip',\n\t\t\t\t\t\t\tend: 'outset',\n\t\t\t\t\t\t\tsnap: dash === 'dotted' ? 4 : undefined,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\treturn (\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\n\t\t\n\t)\n})\n\nexport function DashStylePolygonSvg({\n\tdash,\n\tfill,\n\tcolor,\n\ttheme,\n\tstrokeWidth,\n\toutline,\n\tlines,\n}: Pick & {\n\toutline: VecLike[]\n\tstrokeWidth: number\n\ttheme: TLDefaultColorTheme\n\tlines?: VecLike[][]\n}) {\n\tconst strokeElement = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\tstrokeElement.setAttribute('stroke-width', strokeWidth.toString())\n\tstrokeElement.setAttribute('stroke', theme[color].solid)\n\tstrokeElement.setAttribute('fill', 'none')\n\n\tArray.from(Array(outline.length)).forEach((_, i) => {\n\t\tconst A = outline[i]\n\t\tconst B = outline[(i + 1) % outline.length]\n\n\t\tconst dist = Vec2d.Dist(A, B)\n\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(dist, strokeWidth, {\n\t\t\tstyle: dash,\n\t\t})\n\n\t\tconst line = document.createElementNS('http://www.w3.org/2000/svg', 'line')\n\t\tline.setAttribute('x1', A.x.toString())\n\t\tline.setAttribute('y1', A.y.toString())\n\t\tline.setAttribute('x2', B.x.toString())\n\t\tline.setAttribute('y2', B.y.toString())\n\t\tline.setAttribute('stroke-dasharray', strokeDasharray.toString())\n\t\tline.setAttribute('stroke-dashoffset', strokeDashoffset.toString())\n\n\t\tstrokeElement.appendChild(line)\n\t})\n\n\tif (lines) {\n\t\tfor (const [A, B] of lines) {\n\t\t\tconst dist = Vec2d.Dist(A, B)\n\t\t\tconst { strokeDasharray, strokeDashoffset } = getPerfectDashProps(dist, strokeWidth, {\n\t\t\t\tstyle: dash,\n\t\t\t\tstart: 'skip',\n\t\t\t\tend: 'skip',\n\t\t\t\tsnap: dash === 'dotted' ? 4 : 2,\n\t\t\t})\n\n\t\t\tconst line = document.createElementNS('http://www.w3.org/2000/svg', 'line')\n\t\t\tline.setAttribute('x1', A.x.toString())\n\t\t\tline.setAttribute('y1', A.y.toString())\n\t\t\tline.setAttribute('x2', B.x.toString())\n\t\t\tline.setAttribute('y2', B.y.toString())\n\t\t\tline.setAttribute('stroke-dasharray', strokeDasharray.toString())\n\t\t\tline.setAttribute('stroke-dashoffset', strokeDashoffset.toString())\n\n\t\t\tstrokeElement.appendChild(line)\n\t\t}\n\t}\n\n\t// Get the fill element, if any\n\tconst fillElement = getShapeFillSvg({\n\t\td: 'M' + outline[0] + 'L' + outline.slice(1) + 'Z',\n\t\tfill,\n\t\tcolor,\n\t\ttheme,\n\t})\n\n\treturn getSvgWithShapeFill(strokeElement, fillElement)\n}\n"], "mappings": "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", "names": ["DashStylePolygon"] }