UNPKG

tldraw

Version:

A tiny little drawing editor.

8 lines (7 loc) 2.98 kB
{ "version": 3, "sources": ["../../../../../src/lib/shapes/frame/components/FrameHeading.tsx"], "sourcesContent": ["import { TLFrameShape, TLShapeId, useEditor, useIsEditing, useValue } from '@tldraw/editor'\nimport { useEffect, useRef } from 'react'\nimport { getFrameHeadingSide, getFrameHeadingTranslation } from '../frameHelpers'\nimport { FrameLabelInput } from './FrameLabelInput'\n\nexport function FrameHeading({\n\tid,\n\tname,\n\twidth,\n\theight,\n}: {\n\tid: TLShapeId\n\tname: string\n\twidth: number\n\theight: number\n}) {\n\tconst editor = useEditor()\n\tconst { side, translation } = useValue(\n\t\t'shape rotation',\n\t\t() => {\n\t\t\tconst shape = editor.getShape<TLFrameShape>(id)\n\t\t\tif (!shape) {\n\t\t\t\t// meh\n\t\t\t\treturn {\n\t\t\t\t\tside: 0,\n\t\t\t\t\ttranslation: 'translate(0, 0)',\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst labelSide = getFrameHeadingSide(editor, shape)\n\t\t\treturn {\n\t\t\t\tside: labelSide,\n\t\t\t\ttranslation: getFrameHeadingTranslation(shape, labelSide, false),\n\t\t\t}\n\t\t},\n\t\t[editor, id]\n\t)\n\n\tconst rInput = useRef<HTMLInputElement>(null)\n\tconst isEditing = useIsEditing(id)\n\n\tuseEffect(() => {\n\t\tconst el = rInput.current\n\t\tif (el && isEditing) {\n\t\t\t// On iOS, we must focus here\n\t\t\tel.focus()\n\t\t\tel.select()\n\t\t}\n\t}, [rInput, isEditing])\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"tl-frame-heading\"\n\t\t\tstyle={{\n\t\t\t\toverflow: isEditing ? 'visible' : 'hidden',\n\t\t\t\tmaxWidth: `calc(var(--tl-zoom) * ${\n\t\t\t\t\tside === 0 || side === 2 ? Math.ceil(width) : Math.ceil(height)\n\t\t\t\t}px + var(--space-5))`,\n\t\t\t\tbottom: '100%',\n\t\t\t\ttransform: `${translation} scale(var(--tl-scale)) translateX(calc(-1 * var(--space-3))`,\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"tl-frame-heading-hit-area\">\n\t\t\t\t<FrameLabelInput ref={rInput} id={id} name={name} isEditing={isEditing} />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n"], "mappings": "AA8DI;AA9DJ,SAAkC,WAAW,cAAc,gBAAgB;AAC3E,SAAS,WAAW,cAAc;AAClC,SAAS,qBAAqB,kCAAkC;AAChE,SAAS,uBAAuB;AAEzB,SAAS,aAAa;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAKG;AACF,QAAM,SAAS,UAAU;AACzB,QAAM,EAAE,MAAM,YAAY,IAAI;AAAA,IAC7B;AAAA,IACA,MAAM;AACL,YAAM,QAAQ,OAAO,SAAuB,EAAE;AAC9C,UAAI,CAAC,OAAO;AAEX,eAAO;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,QACd;AAAA,MACD;AACA,YAAM,YAAY,oBAAoB,QAAQ,KAAK;AACnD,aAAO;AAAA,QACN,MAAM;AAAA,QACN,aAAa,2BAA2B,OAAO,WAAW,KAAK;AAAA,MAChE;AAAA,IACD;AAAA,IACA,CAAC,QAAQ,EAAE;AAAA,EACZ;AAEA,QAAM,SAAS,OAAyB,IAAI;AAC5C,QAAM,YAAY,aAAa,EAAE;AAEjC,YAAU,MAAM;AACf,UAAM,KAAK,OAAO;AAClB,QAAI,MAAM,WAAW;AAEpB,SAAG,MAAM;AACT,SAAG,OAAO;AAAA,IACX;AAAA,EACD,GAAG,CAAC,QAAQ,SAAS,CAAC;AAEtB,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,OAAO;AAAA,QACN,UAAU,YAAY,YAAY;AAAA,QAClC,UAAU,yBACT,SAAS,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,CAC/D;AAAA,QACA,QAAQ;AAAA,QACR,WAAW,GAAG,WAAW;AAAA,MAC1B;AAAA,MAEA,8BAAC,SAAI,WAAU,6BACd,8BAAC,mBAAgB,KAAK,QAAQ,IAAQ,MAAY,WAAsB,GACzE;AAAA;AAAA,EACD;AAEF;", "names": [] }