{ "version": 3, "sources": ["../../../../src/lib/shapes/geo/GeoShapeUtil.tsx"], "sourcesContent": ["import {\n\tBaseBoxShapeUtil,\n\tDefaultFontFamilies,\n\tEditor,\n\tEllipse2d,\n\tGeometry2d,\n\tGroup2d,\n\tPI2,\n\tPolygon2d,\n\tPolyline2d,\n\tRectangle2d,\n\tSVGContainer,\n\tStadium2d,\n\tSvgExportContext,\n\tTAU,\n\tTLDefaultDashStyle,\n\tTLGeoShape,\n\tTLOnEditEndHandler,\n\tTLOnResizeHandler,\n\tTLShapeUtilCanvasSvgDef,\n\tVec2d,\n\tgeoShapeMigrations,\n\tgeoShapeProps,\n\tgetDefaultColorTheme,\n\tgetPolygonVertices,\n} from '@tldraw/editor'\n\nimport { HyperlinkButton } from '../shared/HyperlinkButton'\nimport { TextLabel } from '../shared/TextLabel'\nimport {\n\tFONT_FAMILIES,\n\tLABEL_FONT_SIZES,\n\tSTROKE_SIZES,\n\tTEXT_PROPS,\n} from '../shared/default-shape-constants'\nimport {\n\tgetFillDefForCanvas,\n\tgetFillDefForExport,\n\tgetFontDefForExport,\n} from '../shared/defaultStyleDefs'\nimport { getTextLabelSvgElement } from '../shared/getTextLabelSvgElement'\nimport { getRoundedInkyPolygonPath, getRoundedPolygonPoints } from '../shared/polygon-helpers'\nimport { cloudOutline, cloudSvgPath } from './cloudOutline'\nimport { DashStyleCloud, DashStyleCloudSvg } from './components/DashStyleCloud'\nimport { DashStyleEllipse, DashStyleEllipseSvg } from './components/DashStyleEllipse'\nimport { DashStyleOval, DashStyleOvalSvg } from './components/DashStyleOval'\nimport { DashStylePolygon, DashStylePolygonSvg } from './components/DashStylePolygon'\nimport { DrawStyleCloud, DrawStyleCloudSvg } from './components/DrawStyleCloud'\nimport { DrawStyleEllipseSvg, getEllipseIndicatorPath } from './components/DrawStyleEllipse'\nimport { DrawStylePolygon, DrawStylePolygonSvg } from './components/DrawStylePolygon'\nimport { SolidStyleCloud, SolidStyleCloudSvg } from './components/SolidStyleCloud'\nimport { SolidStyleEllipse, SolidStyleEllipseSvg } from './components/SolidStyleEllipse'\nimport {\n\tSolidStyleOval,\n\tSolidStyleOvalSvg,\n\tgetOvalIndicatorPath,\n} from './components/SolidStyleOval'\nimport { SolidStylePolygon, SolidStylePolygonSvg } from './components/SolidStylePolygon'\n\nconst LABEL_PADDING = 16\nconst MIN_SIZE_WITH_LABEL = 17 * 3\n\n/** @public */\nexport class GeoShapeUtil extends BaseBoxShapeUtil {\n\tstatic override type = 'geo' as const\n\tstatic override props = geoShapeProps\n\tstatic override migrations = geoShapeMigrations\n\n\toverride canEdit = () => true\n\n\toverride getDefaultProps(): TLGeoShape['props'] {\n\t\treturn {\n\t\t\tw: 100,\n\t\t\th: 100,\n\t\t\tgeo: 'rectangle',\n\t\t\tcolor: 'black',\n\t\t\tlabelColor: 'black',\n\t\t\tfill: 'none',\n\t\t\tdash: 'draw',\n\t\t\tsize: 'm',\n\t\t\tfont: 'draw',\n\t\t\ttext: '',\n\t\t\talign: 'middle',\n\t\t\tverticalAlign: 'middle',\n\t\t\tgrowY: 0,\n\t\t\turl: '',\n\t\t}\n\t}\n\n\toverride getGeometry(shape: TLGeoShape): Geometry2d {\n\t\tconst w = Math.max(1, shape.props.w)\n\t\tconst h = Math.max(1, shape.props.h + shape.props.growY)\n\t\tconst cx = w / 2\n\t\tconst cy = h / 2\n\n\t\tconst strokeWidth = STROKE_SIZES[shape.props.size]\n\t\tconst isFilled = shape.props.fill !== 'none' // || shape.props.text.trim().length > 0\n\n\t\tlet body: Geometry2d\n\n\t\tswitch (shape.props.geo) {\n\t\t\tcase 'cloud': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: cloudOutline(w, h, shape.id, shape.props.size),\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'triangle': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [new Vec2d(cx, 0), new Vec2d(w, h), new Vec2d(0, h)],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'diamond': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [new Vec2d(cx, 0), new Vec2d(w, cy), new Vec2d(cx, h), new Vec2d(0, cy)],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'pentagon': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: getPolygonVertices(w, h, 5),\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'hexagon': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: getPolygonVertices(w, h, 6),\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'octagon': {\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: getPolygonVertices(w, h, 8),\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'ellipse': {\n\t\t\t\tbody = new Ellipse2d({\n\t\t\t\t\twidth: w,\n\t\t\t\t\theight: h,\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'oval': {\n\t\t\t\tbody = new Stadium2d({\n\t\t\t\t\twidth: w,\n\t\t\t\t\theight: h,\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'star': {\n\t\t\t\t// Most of this code is to offset the center, a 5 point star\n\t\t\t\t// will need to be moved downward because from its center [0,0]\n\t\t\t\t// it will have a bigger minY than maxY. This is because it'll\n\t\t\t\t// have 2 points at the bottom.\n\t\t\t\tconst sides = 5\n\t\t\t\tconst step = PI2 / sides / 2\n\t\t\t\tconst rightMostIndex = Math.floor(sides / 4) * 2\n\t\t\t\tconst leftMostIndex = sides * 2 - rightMostIndex\n\t\t\t\tconst topMostIndex = 0\n\t\t\t\tconst bottomMostIndex = Math.floor(sides / 2) * 2\n\t\t\t\tconst maxX = (Math.cos(-TAU + rightMostIndex * step) * w) / 2\n\t\t\t\tconst minX = (Math.cos(-TAU + leftMostIndex * step) * w) / 2\n\n\t\t\t\tconst minY = (Math.sin(-TAU + topMostIndex * step) * h) / 2\n\t\t\t\tconst maxY = (Math.sin(-TAU + bottomMostIndex * step) * h) / 2\n\t\t\t\tconst diffX = w - Math.abs(maxX - minX)\n\t\t\t\tconst diffY = h - Math.abs(maxY - minY)\n\t\t\t\tconst offsetX = w / 2 + minX - (w / 2 - maxX)\n\t\t\t\tconst offsetY = h / 2 + minY - (h / 2 - maxY)\n\n\t\t\t\tconst ratio = 1\n\t\t\t\tconst cx = (w - offsetX) / 2\n\t\t\t\tconst cy = (h - offsetY) / 2\n\t\t\t\tconst ox = (w + diffX) / 2\n\t\t\t\tconst oy = (h + diffY) / 2\n\t\t\t\tconst ix = (ox * ratio) / 2\n\t\t\t\tconst iy = (oy * ratio) / 2\n\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: Array.from(Array(sides * 2)).map((_, i) => {\n\t\t\t\t\t\tconst theta = -TAU + i * step\n\t\t\t\t\t\treturn new Vec2d(\n\t\t\t\t\t\t\tcx + (i % 2 ? ix : ox) * Math.cos(theta),\n\t\t\t\t\t\t\tcy + (i % 2 ? iy : oy) * Math.sin(theta)\n\t\t\t\t\t\t)\n\t\t\t\t\t}),\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'rhombus': {\n\t\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(offset, 0),\n\t\t\t\t\t\tnew Vec2d(w, 0),\n\t\t\t\t\t\tnew Vec2d(w - offset, h),\n\t\t\t\t\t\tnew Vec2d(0, h),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'rhombus-2': {\n\t\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(0, 0),\n\t\t\t\t\t\tnew Vec2d(w - offset, 0),\n\t\t\t\t\t\tnew Vec2d(w, h),\n\t\t\t\t\t\tnew Vec2d(offset, h),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'trapezoid': {\n\t\t\t\tconst offset = Math.min(w * 0.38, h * 0.38)\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(offset, 0),\n\t\t\t\t\t\tnew Vec2d(w - offset, 0),\n\t\t\t\t\t\tnew Vec2d(w, h),\n\t\t\t\t\t\tnew Vec2d(0, h),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow-right': {\n\t\t\t\tconst ox = Math.min(w, h) * 0.38\n\t\t\t\tconst oy = h * 0.16\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(0, oy),\n\t\t\t\t\t\tnew Vec2d(w - ox, oy),\n\t\t\t\t\t\tnew Vec2d(w - ox, 0),\n\t\t\t\t\t\tnew Vec2d(w, h / 2),\n\t\t\t\t\t\tnew Vec2d(w - ox, h),\n\t\t\t\t\t\tnew Vec2d(w - ox, h - oy),\n\t\t\t\t\t\tnew Vec2d(0, h - oy),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow-left': {\n\t\t\t\tconst ox = Math.min(w, h) * 0.38\n\t\t\t\tconst oy = h * 0.16\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(ox, 0),\n\t\t\t\t\t\tnew Vec2d(ox, oy),\n\t\t\t\t\t\tnew Vec2d(w, oy),\n\t\t\t\t\t\tnew Vec2d(w, h - oy),\n\t\t\t\t\t\tnew Vec2d(ox, h - oy),\n\t\t\t\t\t\tnew Vec2d(ox, h),\n\t\t\t\t\t\tnew Vec2d(0, h / 2),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow-up': {\n\t\t\t\tconst ox = w * 0.16\n\t\t\t\tconst oy = Math.min(w, h) * 0.38\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(w / 2, 0),\n\t\t\t\t\t\tnew Vec2d(w, oy),\n\t\t\t\t\t\tnew Vec2d(w - ox, oy),\n\t\t\t\t\t\tnew Vec2d(w - ox, h),\n\t\t\t\t\t\tnew Vec2d(ox, h),\n\t\t\t\t\t\tnew Vec2d(ox, oy),\n\t\t\t\t\t\tnew Vec2d(0, oy),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow-down': {\n\t\t\t\tconst ox = w * 0.16\n\t\t\t\tconst oy = Math.min(w, h) * 0.38\n\t\t\t\tbody = new Polygon2d({\n\t\t\t\t\tpoints: [\n\t\t\t\t\t\tnew Vec2d(ox, 0),\n\t\t\t\t\t\tnew Vec2d(w - ox, 0),\n\t\t\t\t\t\tnew Vec2d(w - ox, h - oy),\n\t\t\t\t\t\tnew Vec2d(w, h - oy),\n\t\t\t\t\t\tnew Vec2d(w / 2, h),\n\t\t\t\t\t\tnew Vec2d(0, h - oy),\n\t\t\t\t\t\tnew Vec2d(ox, h - oy),\n\t\t\t\t\t],\n\t\t\t\t\tisFilled,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'check-box':\n\t\t\tcase 'x-box':\n\t\t\tcase 'rectangle': {\n\t\t\t\tbody = new Rectangle2d({\n\t\t\t\t\twidth: w,\n\t\t\t\t\theight: h,\n\t\t\t\t\tisFilled,\n\t\t\t\t\tisSnappable: true,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tconst labelSize = getLabelSize(this.editor, shape)\n\t\tconst labelWidth = Math.min(w, Math.max(labelSize.w, Math.min(32, Math.max(1, w - 8))))\n\t\tconst labelHeight = Math.min(h, Math.max(labelSize.h, Math.min(32, Math.max(1, w - 8))))\n\n\t\tconst lines = getLines(shape.props, strokeWidth)\n\t\tconst edges = lines ? lines.map((line) => new Polyline2d({ points: line })) : []\n\n\t\treturn new Group2d({\n\t\t\tchildren: [\n\t\t\t\tbody,\n\t\t\t\tnew Rectangle2d({\n\t\t\t\t\tx:\n\t\t\t\t\t\tshape.props.align === 'start'\n\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t: shape.props.align === 'end'\n\t\t\t\t\t\t\t? w - labelWidth\n\t\t\t\t\t\t\t: (w - labelWidth) / 2,\n\t\t\t\t\ty:\n\t\t\t\t\t\tshape.props.verticalAlign === 'start'\n\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t: shape.props.verticalAlign === 'end'\n\t\t\t\t\t\t\t? h - labelHeight\n\t\t\t\t\t\t\t: (h - labelHeight) / 2,\n\t\t\t\t\twidth: labelWidth,\n\t\t\t\t\theight: labelHeight,\n\t\t\t\t\tisFilled: true,\n\t\t\t\t\tisSnappable: false,\n\t\t\t\t\tisLabel: true,\n\t\t\t\t}),\n\t\t\t\t...edges,\n\t\t\t],\n\t\t\tisSnappable: false,\n\t\t})\n\t}\n\n\toverride onEditEnd: TLOnEditEndHandler = (shape) => {\n\t\tconst {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tprops: { text },\n\t\t} = shape\n\n\t\tif (text.trimEnd() !== shape.props.text) {\n\t\t\tthis.editor.updateShapes([\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\ttype,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttext: text.trimEnd(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t}\n\t}\n\n\tcomponent(shape: TLGeoShape) {\n\t\tconst { id, type, props } = shape\n\n\t\tconst strokeWidth = STROKE_SIZES[props.size]\n\n\t\tconst { w, color, labelColor, fill, dash, growY, font, align, verticalAlign, size, text } =\n\t\t\tprops\n\n\t\tconst getShape = () => {\n\t\t\tconst h = props.h + growY\n\n\t\t\tswitch (props.geo) {\n\t\t\t\tcase 'cloud': {\n\t\t\t\t\tif (dash === 'solid') {\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} else if (dash === 'dashed' || dash === 'dotted') {\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} else if (dash === 'draw') {\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\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'ellipse': {\n\t\t\t\t\tif (dash === 'solid') {\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} else if (dash === 'dashed' || dash === 'dotted') {\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} else if (dash === 'draw') {\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\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'oval': {\n\t\t\t\t\tif (dash === 'solid') {\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} else if (dash === 'dashed' || dash === 'dotted') {\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} else if (dash === 'draw') {\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\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst geometry = this.editor.getShapeGeometry(shape)\n\t\t\t\t\tconst outline =\n\t\t\t\t\t\tgeometry instanceof Group2d ? geometry.children[0].vertices : geometry.vertices\n\t\t\t\t\tconst lines = getLines(shape.props, strokeWidth)\n\n\t\t\t\t\tif (dash === 'solid') {\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} else if (dash === 'dashed' || dash === 'dotted') {\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} else if (dash === 'draw') {\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\t}\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{getShape()}\n\t\t\t\t\n\t\t\t\t{shape.props.url && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t)\n\t}\n\n\tindicator(shape: TLGeoShape) {\n\t\tconst { id, props } = shape\n\t\tconst { w, size } = props\n\t\tconst h = props.h + props.growY\n\n\t\tconst strokeWidth = STROKE_SIZES[size]\n\n\t\tswitch (props.geo) {\n\t\t\tcase 'ellipse': {\n\t\t\t\tif (props.dash === 'draw') {\n\t\t\t\t\treturn \n\t\t\t\t}\n\n\t\t\t\treturn \n\t\t\t}\n\t\t\tcase 'oval': {\n\t\t\t\treturn \n\t\t\t}\n\t\t\tcase 'cloud': {\n\t\t\t\treturn \n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tconst geometry = this.editor.getShapeGeometry(shape)\n\t\t\t\tconst outline =\n\t\t\t\t\tgeometry instanceof Group2d ? geometry.children[0].vertices : geometry.vertices\n\t\t\t\tlet path: string\n\n\t\t\t\tif (props.dash === 'draw') {\n\t\t\t\t\tconst polygonPoints = getRoundedPolygonPoints(id, outline, 0, strokeWidth * 2, 1)\n\t\t\t\t\tpath = getRoundedInkyPolygonPath(polygonPoints)\n\t\t\t\t} else {\n\t\t\t\t\tpath = 'M' + outline[0] + 'L' + outline.slice(1) + 'Z'\n\t\t\t\t}\n\n\t\t\t\tconst lines = getLines(shape.props, strokeWidth)\n\n\t\t\t\tif (lines) {\n\t\t\t\t\tfor (const [A, B] of lines) {\n\t\t\t\t\t\tpath += `M${A.x},${A.y}L${B.x},${B.y}`\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn \n\t\t\t}\n\t\t}\n\t}\n\n\toverride toSvg(shape: TLGeoShape, ctx: SvgExportContext) {\n\t\tconst { id, props } = shape\n\t\tconst strokeWidth = STROKE_SIZES[props.size]\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.isDarkMode })\n\t\tctx.addExportDef(getFillDefForExport(shape.props.fill, theme))\n\n\t\tlet svgElm: SVGElement\n\n\t\tswitch (props.geo) {\n\t\t\tcase 'ellipse': {\n\t\t\t\tswitch (props.dash) {\n\t\t\t\t\tcase 'draw':\n\t\t\t\t\t\tsvgElm = DrawStyleEllipseSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsvgElm = SolidStyleEllipseSvg({\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsvgElm = DashStyleEllipseSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tdash: props.dash,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcase 'oval': {\n\t\t\t\tswitch (props.dash) {\n\t\t\t\t\tcase 'draw':\n\t\t\t\t\t\tsvgElm = DashStyleOvalSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tdash: props.dash,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsvgElm = SolidStyleOvalSvg({\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsvgElm = DashStyleOvalSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tdash: props.dash,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcase 'cloud': {\n\t\t\t\tswitch (props.dash) {\n\t\t\t\t\tcase 'draw':\n\t\t\t\t\t\tsvgElm = DrawStyleCloudSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tsize: props.size,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsvgElm = SolidStyleCloudSvg({\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tsize: props.size,\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsvgElm = DashStyleCloudSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\tw: props.w,\n\t\t\t\t\t\t\th: props.h,\n\t\t\t\t\t\t\tdash: props.dash,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t\tsize: props.size,\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst geometry = this.editor.getShapeGeometry(shape)\n\t\t\t\tconst outline =\n\t\t\t\t\tgeometry instanceof Group2d ? geometry.children[0].vertices : geometry.vertices\n\t\t\t\tconst lines = getLines(shape.props, strokeWidth)\n\n\t\t\t\tswitch (props.dash) {\n\t\t\t\t\tcase 'draw':\n\t\t\t\t\t\tsvgElm = DrawStylePolygonSvg({\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\toutline,\n\t\t\t\t\t\t\tlines,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tcase 'solid':\n\t\t\t\t\t\tsvgElm = SolidStylePolygonSvg({\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\toutline,\n\t\t\t\t\t\t\tlines,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsvgElm = DashStylePolygonSvg({\n\t\t\t\t\t\t\tdash: props.dash,\n\t\t\t\t\t\t\tfill: props.fill,\n\t\t\t\t\t\t\tcolor: props.color,\n\t\t\t\t\t\t\tstrokeWidth,\n\t\t\t\t\t\t\toutline,\n\t\t\t\t\t\t\tlines,\n\t\t\t\t\t\t\ttheme,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (props.text) {\n\t\t\tconst bounds = this.editor.getShapeGeometry(shape).bounds\n\n\t\t\tctx.addExportDef(getFontDefForExport(shape.props.font))\n\n\t\t\tconst rootTextElm = getTextLabelSvgElement({\n\t\t\t\teditor: this.editor,\n\t\t\t\tshape,\n\t\t\t\tfont: DefaultFontFamilies[shape.props.font],\n\t\t\t\tbounds,\n\t\t\t})\n\n\t\t\tconst textElm = rootTextElm.cloneNode(true) as SVGTextElement\n\t\t\ttextElm.setAttribute('fill', theme[shape.props.labelColor].solid)\n\t\t\ttextElm.setAttribute('stroke', 'none')\n\n\t\t\tconst textBgEl = rootTextElm.cloneNode(true) as SVGTextElement\n\t\t\ttextBgEl.setAttribute('stroke-width', '2')\n\t\t\ttextBgEl.setAttribute('fill', theme.background)\n\t\t\ttextBgEl.setAttribute('stroke', theme.background)\n\n\t\t\tconst groupEl = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\t\tgroupEl.append(textBgEl)\n\t\t\tgroupEl.append(textElm)\n\n\t\t\tif (svgElm.nodeName === 'g') {\n\t\t\t\tsvgElm.appendChild(groupEl)\n\t\t\t\treturn svgElm\n\t\t\t} else {\n\t\t\t\tconst g = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\t\t\t\tg.appendChild(svgElm)\n\t\t\t\tg.appendChild(groupEl)\n\t\t\t\treturn g\n\t\t\t}\n\t\t}\n\n\t\treturn svgElm\n\t}\n\n\toverride getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[] {\n\t\treturn [getFillDefForCanvas()]\n\t}\n\n\toverride onResize: TLOnResizeHandler = (\n\t\tshape,\n\t\t{ handle, newPoint, scaleX, scaleY, initialShape }\n\t) => {\n\t\t// use the w/h from props here instead of the initialBounds here,\n\t\t// since cloud shapes calculated bounds can differ from the props w/h.\n\t\tlet w = initialShape.props.w * scaleX\n\t\tlet h = (initialShape.props.h + initialShape.props.growY) * scaleY\n\t\tlet overShrinkX = 0\n\t\tlet overShrinkY = 0\n\n\t\tif (shape.props.text.trim()) {\n\t\t\tlet newW = Math.max(Math.abs(w), MIN_SIZE_WITH_LABEL)\n\t\t\tlet newH = Math.max(Math.abs(h), MIN_SIZE_WITH_LABEL)\n\n\t\t\tif (newW < MIN_SIZE_WITH_LABEL && newH === MIN_SIZE_WITH_LABEL) {\n\t\t\t\tnewW = MIN_SIZE_WITH_LABEL\n\t\t\t}\n\n\t\t\tif (newW === MIN_SIZE_WITH_LABEL && newH < MIN_SIZE_WITH_LABEL) {\n\t\t\t\tnewH = MIN_SIZE_WITH_LABEL\n\t\t\t}\n\n\t\t\tconst labelSize = getLabelSize(this.editor, {\n\t\t\t\t...shape,\n\t\t\t\tprops: {\n\t\t\t\t\t...shape.props,\n\t\t\t\t\tw: newW,\n\t\t\t\t\th: newH,\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tconst nextW = Math.max(Math.abs(w), labelSize.w) * Math.sign(w)\n\t\t\tconst nextH = Math.max(Math.abs(h), labelSize.h) * Math.sign(h)\n\t\t\toverShrinkX = Math.abs(nextW) - Math.abs(w)\n\t\t\toverShrinkY = Math.abs(nextH) - Math.abs(h)\n\n\t\t\tw = nextW\n\t\t\th = nextH\n\t\t}\n\n\t\tconst offset = new Vec2d(0, 0)\n\n\t\t// x offsets\n\n\t\tif (scaleX < 0) {\n\t\t\toffset.x += w\n\t\t}\n\n\t\tif (handle === 'left' || handle === 'top_left' || handle === 'bottom_left') {\n\t\t\toffset.x += scaleX < 0 ? overShrinkX : -overShrinkX\n\t\t}\n\n\t\t// y offsets\n\n\t\tif (scaleY < 0) {\n\t\t\toffset.y += h\n\t\t}\n\n\t\tif (handle === 'top' || handle === 'top_left' || handle === 'top_right') {\n\t\t\toffset.y += scaleY < 0 ? overShrinkY : -overShrinkY\n\t\t}\n\n\t\tconst { x, y } = offset.rot(shape.rotation).add(newPoint)\n\n\t\treturn {\n\t\t\tx,\n\t\t\ty,\n\t\t\tprops: {\n\t\t\t\tw: Math.max(Math.abs(w), 1),\n\t\t\t\th: Math.max(Math.abs(h), 1),\n\t\t\t\tgrowY: 0,\n\t\t\t},\n\t\t}\n\t}\n\n\toverride onBeforeCreate = (shape: TLGeoShape) => {\n\t\tif (!shape.props.text) {\n\t\t\tif (shape.props.growY) {\n\t\t\t\t// No text / some growY, set growY to 0\n\t\t\t\treturn {\n\t\t\t\t\t...shape,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...shape.props,\n\t\t\t\t\t\tgrowY: 0,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No text / no growY, nothing to change\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tconst prevHeight = shape.props.h\n\t\tconst nextHeight = getLabelSize(this.editor, shape).h\n\n\t\tlet growY: number | null = null\n\n\t\tif (nextHeight > prevHeight) {\n\t\t\tgrowY = nextHeight - prevHeight\n\t\t} else {\n\t\t\tif (shape.props.growY) {\n\t\t\t\tgrowY = 0\n\t\t\t}\n\t\t}\n\n\t\tif (growY !== null) {\n\t\t\treturn {\n\t\t\t\t...shape,\n\t\t\t\tprops: {\n\t\t\t\t\t...shape.props,\n\t\t\t\t\tgrowY,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onBeforeUpdate = (prev: TLGeoShape, next: TLGeoShape) => {\n\t\tconst prevText = prev.props.text\n\t\tconst nextText = next.props.text\n\n\t\tif (\n\t\t\tprevText === nextText &&\n\t\t\tprev.props.font === next.props.font &&\n\t\t\tprev.props.size === next.props.size\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tif (prevText && !nextText) {\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tprops: {\n\t\t\t\t\t...next.props,\n\t\t\t\t\tgrowY: 0,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst prevWidth = prev.props.w\n\t\tconst prevHeight = prev.props.h\n\t\tconst nextSize = getLabelSize(this.editor, next)\n\t\tconst nextWidth = nextSize.w\n\t\tconst nextHeight = nextSize.h\n\n\t\t// When entering the first character in a label (not pasting in multiple characters...)\n\t\tif (!prevText && nextText && nextText.length === 1) {\n\t\t\tlet w = Math.max(prevWidth, nextWidth)\n\t\t\tlet h = Math.max(prevHeight, nextHeight)\n\n\t\t\t// If both the width and height were less than the minimum size, make the shape square\n\t\t\tif (prev.props.w < MIN_SIZE_WITH_LABEL && prev.props.h < MIN_SIZE_WITH_LABEL) {\n\t\t\t\tw = Math.max(w, MIN_SIZE_WITH_LABEL)\n\t\t\t\th = Math.max(h, MIN_SIZE_WITH_LABEL)\n\t\t\t\tw = Math.max(w, h)\n\t\t\t\th = Math.max(w, h)\n\t\t\t}\n\n\t\t\t// Don't set a growY\u2014at least, not until we've implemented a growX property\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tprops: {\n\t\t\t\t\t...next.props,\n\t\t\t\t\tw,\n\t\t\t\t\th,\n\t\t\t\t\tgrowY: 0,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tlet growY: number | null = null\n\n\t\tif (nextHeight > prevHeight) {\n\t\t\tgrowY = nextHeight - prevHeight\n\t\t} else {\n\t\t\tif (prev.props.growY) {\n\t\t\t\tgrowY = 0\n\t\t\t}\n\t\t}\n\n\t\tif (growY !== null) {\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tprops: {\n\t\t\t\t\t...next.props,\n\t\t\t\t\tgrowY,\n\t\t\t\t\tw: Math.max(next.props.w, nextWidth),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (nextWidth > prev.props.w) {\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tprops: {\n\t\t\t\t\t...next.props,\n\t\t\t\t\tw: nextWidth,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onDoubleClick = (shape: TLGeoShape) => {\n\t\t// Little easter egg: double-clicking a rectangle / checkbox while\n\t\t// holding alt will toggle between check-box and rectangle\n\t\tif (this.editor.inputs.altKey) {\n\t\t\tswitch (shape.props.geo) {\n\t\t\t\tcase 'rectangle': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...shape,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tgeo: 'check-box' as const,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcase 'check-box': {\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...shape,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tgeo: 'rectangle' as const,\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\n\t\treturn\n\t}\n}\n\nfunction getLabelSize(editor: Editor, shape: TLGeoShape) {\n\tconst text = shape.props.text\n\n\tif (!text) {\n\t\treturn { w: 0, h: 0 }\n\t}\n\n\tconst minSize = editor.textMeasure.measureText('w', {\n\t\t...TEXT_PROPS,\n\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\tfontSize: LABEL_FONT_SIZES[shape.props.size],\n\t\tmaxWidth: 100,\n\t})\n\n\t// TODO: Can I get these from somewhere?\n\tconst sizes = {\n\t\ts: 2,\n\t\tm: 3.5,\n\t\tl: 5,\n\t\txl: 10,\n\t}\n\n\tconst size = editor.textMeasure.measureText(text, {\n\t\t...TEXT_PROPS,\n\t\tfontFamily: FONT_FAMILIES[shape.props.font],\n\t\tfontSize: LABEL_FONT_SIZES[shape.props.size],\n\t\tminWidth: minSize.w + 'px',\n\t\tmaxWidth: Math.max(\n\t\t\t// Guard because a DOM nodes can't be less 0\n\t\t\t0,\n\t\t\t// A 'w' width that we're setting as the min-width\n\t\t\tMath.ceil(minSize.w + sizes[shape.props.size]),\n\t\t\t// The actual text size\n\t\t\tMath.ceil(shape.props.w - LABEL_PADDING * 2)\n\t\t),\n\t})\n\n\treturn {\n\t\tw: size.w + LABEL_PADDING * 2,\n\t\th: size.h + LABEL_PADDING * 2,\n\t}\n}\n\nfunction getLines(props: TLGeoShape['props'], sw: number) {\n\tswitch (props.geo) {\n\t\tcase 'x-box': {\n\t\t\treturn getXBoxLines(props.w, props.h, sw, props.dash)\n\t\t}\n\t\tcase 'check-box': {\n\t\t\treturn getCheckBoxLines(props.w, props.h)\n\t\t}\n\t\tdefault: {\n\t\t\treturn undefined\n\t\t}\n\t}\n}\n\nfunction getXBoxLines(w: number, h: number, sw: number, dash: TLDefaultDashStyle) {\n\tconst inset = dash === 'draw' ? 0.62 : 0\n\n\tif (dash === 'dashed') {\n\t\treturn [\n\t\t\t[new Vec2d(0, 0), new Vec2d(w / 2, h / 2)],\n\t\t\t[new Vec2d(w, h), new Vec2d(w / 2, h / 2)],\n\t\t\t[new Vec2d(0, h), new Vec2d(w / 2, h / 2)],\n\t\t\t[new Vec2d(w, 0), new Vec2d(w / 2, h / 2)],\n\t\t]\n\t}\n\n\tconst clampX = (x: number) => Math.max(0, Math.min(w, x))\n\tconst clampY = (y: number) => Math.max(0, Math.min(h, y))\n\n\treturn [\n\t\t[\n\t\t\tnew Vec2d(clampX(sw * inset), clampY(sw * inset)),\n\t\t\tnew Vec2d(clampX(w - sw * inset), clampY(h - sw * inset)),\n\t\t],\n\t\t[\n\t\t\tnew Vec2d(clampX(sw * inset), clampY(h - sw * inset)),\n\t\t\tnew Vec2d(clampX(w - sw * inset), clampY(sw * inset)),\n\t\t],\n\t]\n}\n\nfunction getCheckBoxLines(w: number, h: number) {\n\tconst size = Math.min(w, h) * 0.82\n\tconst ox = (w - size) / 2\n\tconst oy = (h - size) / 2\n\n\tconst clampX = (x: number) => Math.max(0, Math.min(w, x))\n\tconst clampY = (y: number) => Math.max(0, Math.min(h, y))\n\n\treturn [\n\t\t[\n\t\t\tnew Vec2d(clampX(ox + size * 0.25), clampY(oy + size * 0.52)),\n\t\t\tnew Vec2d(clampX(ox + size * 0.45), clampY(oy + size * 0.82)),\n\t\t],\n\t\t[\n\t\t\tnew Vec2d(clampX(ox + size * 0.45), clampY(oy + size * 0.82)),\n\t\t\tnew Vec2d(clampX(ox + size * 0.82), clampY(oy + size * 0.22)),\n\t\t],\n\t]\n}\n"], "mappings": "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", "names": ["cx", "cy"] }