tldraw
Version:
A tiny little drawing editor.
8 lines (7 loc) • 3.18 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../../src/lib/shapes/shared/SvgTextLabel.tsx"],
"sourcesContent": ["import {\n\tBox,\n\tDefaultFontFamilies,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultVerticalAlignStyle,\n\tuseEditor,\n} from '@tldraw/editor'\nimport { createTextJsxFromSpans } from './createTextJsxFromSpans'\nimport { TEXT_PROPS } from './default-shape-constants'\nimport { getLegacyOffsetX } from './legacyProps'\nimport { useDefaultColorTheme } from './useDefaultColorTheme'\n\nexport function SvgTextLabel({\n\tfontSize,\n\tfont,\n\talign,\n\tverticalAlign,\n\ttext,\n\tlabelColor,\n\tbounds,\n\tpadding = 16,\n\tstroke = true,\n}: {\n\tfontSize: number\n\tfont: TLDefaultFontStyle\n\t// fill?: TLDefaultFillStyle\n\talign: TLDefaultHorizontalAlignStyle\n\tverticalAlign: TLDefaultVerticalAlignStyle\n\twrap?: boolean\n\ttext: string\n\tlabelColor: string\n\tbounds: Box\n\tpadding?: number\n\tstroke?: boolean\n}) {\n\tconst editor = useEditor()\n\tconst theme = useDefaultColorTheme()\n\n\tconst opts = {\n\t\tfontSize,\n\t\tfontFamily: DefaultFontFamilies[font],\n\t\ttextAlign: align,\n\t\tverticalTextAlign: verticalAlign,\n\t\twidth: Math.ceil(bounds.width),\n\t\theight: Math.ceil(bounds.height),\n\t\tpadding,\n\t\tlineHeight: TEXT_PROPS.lineHeight,\n\t\tfontStyle: 'normal',\n\t\tfontWeight: 'normal',\n\t\toverflow: 'wrap' as const,\n\t\toffsetX: 0,\n\t\toffsetY: 0,\n\t\tfill: labelColor,\n\t\tstroke: undefined as string | undefined,\n\t\tstrokeWidth: undefined as number | undefined,\n\t}\n\n\tconst spans = editor.textMeasure.measureTextSpans(text, opts)\n\tconst offsetX = getLegacyOffsetX(align, padding, spans, bounds.width)\n\tif (offsetX) {\n\t\topts.offsetX = offsetX\n\t}\n\n\topts.offsetX += bounds.x\n\topts.offsetY += bounds.y\n\n\tconst mainSpans = createTextJsxFromSpans(editor, spans, opts)\n\n\tlet outlineSpans = null\n\tif (stroke) {\n\t\topts.fill = theme.background\n\t\topts.stroke = theme.background\n\t\topts.strokeWidth = 2\n\t\toutlineSpans = createTextJsxFromSpans(editor, spans, opts)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{outlineSpans}\n\t\t\t{mainSpans}\n\t\t</>\n\t)\n}\n"],
"mappings": "AA8EE;AA9EF;AAAA,EAEC;AAAA,EAIA;AAAA,OACM;AACP,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AAE9B,SAAS,aAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,SAAS;AACV,GAYG;AACF,QAAM,SAAS,UAAU;AACzB,QAAM,QAAQ,qBAAqB;AAEnC,QAAM,OAAO;AAAA,IACZ;AAAA,IACA,YAAY,oBAAoB,IAAI;AAAA,IACpC,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,IAC7B,QAAQ,KAAK,KAAK,OAAO,MAAM;AAAA,IAC/B;AAAA,IACA,YAAY,WAAW;AAAA,IACvB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,aAAa;AAAA,EACd;AAEA,QAAM,QAAQ,OAAO,YAAY,iBAAiB,MAAM,IAAI;AAC5D,QAAM,UAAU,iBAAiB,OAAO,SAAS,OAAO,OAAO,KAAK;AACpE,MAAI,SAAS;AACZ,SAAK,UAAU;AAAA,EAChB;AAEA,OAAK,WAAW,OAAO;AACvB,OAAK,WAAW,OAAO;AAEvB,QAAM,YAAY,uBAAuB,QAAQ,OAAO,IAAI;AAE5D,MAAI,eAAe;AACnB,MAAI,QAAQ;AACX,SAAK,OAAO,MAAM;AAClB,SAAK,SAAS,MAAM;AACpB,SAAK,cAAc;AACnB,mBAAe,uBAAuB,QAAQ,OAAO,IAAI;AAAA,EAC1D;AAEA,SACC,iCACE;AAAA;AAAA,IACA;AAAA,KACF;AAEF;",
"names": []
}