UNPKG

@tldraw/editor

Version:

tldraw infinite canvas SDK (editor).

8 lines (7 loc) 4.42 kB
{ "version": 3, "sources": ["../../../../../src/lib/editor/shapes/shared/resizeBox.ts"], "sourcesContent": ["import { VecModel } from '@tldraw/tlschema'\nimport { Box } from '../../../primitives/Box'\nimport { Vec } from '../../../primitives/Vec'\nimport { TLResizeHandle } from '../../types/selection-types'\nimport { TLBaseBoxShape } from '../BaseBoxShapeUtil'\nimport { TLResizeMode } from '../ShapeUtil'\n\n/** @public */\nexport interface ResizeBoxOptions {\n\tminWidth?: number\n\tmaxWidth?: number\n\tminHeight?: number\n\tmaxHeight?: number\n}\n\n/** @public */\nexport function resizeBox<T extends TLBaseBoxShape>(\n\tshape: T,\n\tinfo: {\n\t\tnewPoint: VecModel\n\t\thandle: TLResizeHandle\n\t\tmode: TLResizeMode\n\t\tscaleX: number\n\t\tscaleY: number\n\t\tinitialBounds: Box\n\t\tinitialShape: T\n\t},\n\topts = {} as ResizeBoxOptions\n): T {\n\tconst { newPoint, handle, scaleX, scaleY } = info\n\tconst { minWidth = 1, maxWidth = Infinity, minHeight = 1, maxHeight = Infinity } = opts\n\n\tlet w = shape.props.w * scaleX\n\tlet h = shape.props.h * scaleY\n\n\tconst offset = new Vec(0, 0)\n\n\tif (w > 0) {\n\t\tif (w < minWidth) {\n\t\t\tswitch (handle) {\n\t\t\t\tcase 'top_left':\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'bottom_left': {\n\t\t\t\t\toffset.x = w - minWidth\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'top':\n\t\t\t\tcase 'bottom': {\n\t\t\t\t\toffset.x = (w - minWidth) / 2\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\toffset.x = 0\n\t\t\t\t}\n\t\t\t}\n\t\t\tw = minWidth\n\t\t}\n\t} else {\n\t\toffset.x = w\n\t\tw = -w\n\t\tif (w < minWidth) {\n\t\t\tswitch (handle) {\n\t\t\t\tcase 'top_left':\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'bottom_left': {\n\t\t\t\t\toffset.x = -w\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\toffset.x = -minWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tw = minWidth\n\t\t}\n\t}\n\n\tif (h > 0) {\n\t\tif (h < minHeight) {\n\t\t\tswitch (handle) {\n\t\t\t\tcase 'top_left':\n\t\t\t\tcase 'top':\n\t\t\t\tcase 'top_right': {\n\t\t\t\t\toffset.y = h - minHeight\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'right':\n\t\t\t\tcase 'left': {\n\t\t\t\t\toffset.y = (h - minHeight) / 2\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\toffset.y = 0\n\t\t\t\t}\n\t\t\t}\n\n\t\t\th = minHeight\n\t\t}\n\t} else {\n\t\toffset.y = h\n\t\th = -h\n\t\tif (h < minHeight) {\n\t\t\tswitch (handle) {\n\t\t\t\tcase 'top_left':\n\t\t\t\tcase 'top':\n\t\t\t\tcase 'top_right': {\n\t\t\t\t\toffset.y = -h\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\toffset.y = -minHeight\n\t\t\t\t}\n\t\t\t}\n\t\t\th = minHeight\n\t\t}\n\t}\n\n\tconst { x, y } = offset.rot(shape.rotation).add(newPoint)\n\n\treturn {\n\t\t...shape,\n\t\tx,\n\t\ty,\n\t\tprops: {\n\t\t\tw: Math.min(maxWidth, w),\n\t\t\th: Math.min(maxHeight, h),\n\t\t},\n\t}\n}\n"], "mappings": "AAEA,SAAS,WAAW;AAcb,SAAS,UACf,OACA,MASA,OAAO,CAAC,GACJ;AACJ,QAAM,EAAE,UAAU,QAAQ,QAAQ,OAAO,IAAI;AAC7C,QAAM,EAAE,WAAW,GAAG,WAAW,UAAU,YAAY,GAAG,YAAY,SAAS,IAAI;AAEnF,MAAI,IAAI,MAAM,MAAM,IAAI;AACxB,MAAI,IAAI,MAAM,MAAM,IAAI;AAExB,QAAM,SAAS,IAAI,IAAI,GAAG,CAAC;AAE3B,MAAI,IAAI,GAAG;AACV,QAAI,IAAI,UAAU;AACjB,cAAQ,QAAQ;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,eAAe;AACnB,iBAAO,IAAI,IAAI;AACf;AAAA,QACD;AAAA,QACA,KAAK;AAAA,QACL,KAAK,UAAU;AACd,iBAAO,KAAK,IAAI,YAAY;AAC5B;AAAA,QACD;AAAA,QACA,SAAS;AACR,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AACA,UAAI;AAAA,IACL;AAAA,EACD,OAAO;AACN,WAAO,IAAI;AACX,QAAI,CAAC;AACL,QAAI,IAAI,UAAU;AACjB,cAAQ,QAAQ;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,eAAe;AACnB,iBAAO,IAAI,CAAC;AACZ;AAAA,QACD;AAAA,QACA,SAAS;AACR,iBAAO,IAAI,CAAC;AAAA,QACb;AAAA,MACD;AAEA,UAAI;AAAA,IACL;AAAA,EACD;AAEA,MAAI,IAAI,GAAG;AACV,QAAI,IAAI,WAAW;AAClB,cAAQ,QAAQ;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,aAAa;AACjB,iBAAO,IAAI,IAAI;AACf;AAAA,QACD;AAAA,QACA,KAAK;AAAA,QACL,KAAK,QAAQ;AACZ,iBAAO,KAAK,IAAI,aAAa;AAC7B;AAAA,QACD;AAAA,QACA,SAAS;AACR,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAEA,UAAI;AAAA,IACL;AAAA,EACD,OAAO;AACN,WAAO,IAAI;AACX,QAAI,CAAC;AACL,QAAI,IAAI,WAAW;AAClB,cAAQ,QAAQ;AAAA,QACf,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK,aAAa;AACjB,iBAAO,IAAI,CAAC;AACZ;AAAA,QACD;AAAA,QACA,SAAS;AACR,iBAAO,IAAI,CAAC;AAAA,QACb;AAAA,MACD;AACA,UAAI;AAAA,IACL;AAAA,EACD;AAEA,QAAM,EAAE,GAAG,EAAE,IAAI,OAAO,IAAI,MAAM,QAAQ,EAAE,IAAI,QAAQ;AAExD,SAAO;AAAA,IACN,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACN,GAAG,KAAK,IAAI,UAAU,CAAC;AAAA,MACvB,GAAG,KAAK,IAAI,WAAW,CAAC;AAAA,IACzB;AAAA,EACD;AACD;", "names": [] }