UNPKG

tldraw

Version:

A tiny little drawing editor.

8 lines (7 loc) 3.24 kB
{ "version": 3, "sources": ["../../../../src/lib/tools/ZoomTool/ZoomTool.ts"], "sourcesContent": ["import {\n\tStateNode,\n\tTLKeyboardEventInfo,\n\tTLPointerEventInfo,\n\tTLStateNodeConstructor,\n} from '@tldraw/editor'\nimport { Idle } from './childStates/Idle'\nimport { Pointing } from './childStates/Pointing'\nimport { ZoomBrushing } from './childStates/ZoomBrushing'\nimport { ZoomQuick } from './childStates/ZoomQuick'\n\n/** @public */\nexport class ZoomTool extends StateNode {\n\tstatic override id = 'zoom'\n\tstatic override initial = 'idle'\n\tstatic override children(): TLStateNodeConstructor[] {\n\t\treturn [Idle, Pointing, ZoomBrushing, ZoomQuick]\n\t}\n\tstatic override isLockable = false\n\n\tinfo = {} as TLPointerEventInfo & { onInteractionEnd?: string }\n\n\toverride onEnter(info: TLPointerEventInfo & { onInteractionEnd: string }) {\n\t\tthis.info = info\n\t\t// onInteractionEnd is a path like 'select.idle', extract just the tool ID for the mask\n\t\tconst toolId = info.onInteractionEnd?.split('.')[0]\n\t\tthis.parent.setCurrentToolIdMask(toolId)\n\t\tthis.updateCursor()\n\t}\n\n\toverride onExit() {\n\t\tthis.parent.setCurrentToolIdMask(undefined)\n\t\tthis.editor.updateInstanceState({ zoomBrush: null, cursor: { type: 'default', rotation: 0 } })\n\t}\n\n\toverride onKeyDown() {\n\t\tthis.updateCursor()\n\t}\n\n\toverride onKeyUp(info: TLKeyboardEventInfo) {\n\t\tthis.updateCursor()\n\n\t\t// Use toLowerCase to handle case when Shift is held (produces 'Z')\n\t\tif (info.key.toLowerCase() === 'z') {\n\t\t\tthis.complete()\n\t\t}\n\t}\n\n\toverride onInterrupt() {\n\t\tthis.complete()\n\t}\n\n\tprivate complete() {\n\t\t// onInteractionEnd is a path like 'select.idle', extract just the tool ID\n\t\tconst toolId = this.info.onInteractionEnd?.split('.')[0] ?? 'select'\n\t\tthis.editor.setCurrentTool(toolId)\n\t}\n\n\tprivate updateCursor() {\n\t\tif (this.editor.inputs.getAltKey() && !this.editor.isIn('zoom.zoom_quick')) {\n\t\t\tthis.editor.setCursor({ type: 'zoom-out', rotation: 0 })\n\t\t} else {\n\t\t\tthis.editor.setCursor({ type: 'zoom-in', rotation: 0 })\n\t\t}\n\t}\n}\n"], "mappings": "AAAA;AAAA,EACC;AAAA,OAIM;AACP,SAAS,YAAY;AACrB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAC7B,SAAS,iBAAiB;AAGnB,MAAM,iBAAiB,UAAU;AAAA,EACvC,OAAgB,KAAK;AAAA,EACrB,OAAgB,UAAU;AAAA,EAC1B,OAAgB,WAAqC;AACpD,WAAO,CAAC,MAAM,UAAU,cAAc,SAAS;AAAA,EAChD;AAAA,EACA,OAAgB,aAAa;AAAA,EAE7B,OAAO,CAAC;AAAA,EAEC,QAAQ,MAAyD;AACzE,SAAK,OAAO;AAEZ,UAAM,SAAS,KAAK,kBAAkB,MAAM,GAAG,EAAE,CAAC;AAClD,SAAK,OAAO,qBAAqB,MAAM;AACvC,SAAK,aAAa;AAAA,EACnB;AAAA,EAES,SAAS;AACjB,SAAK,OAAO,qBAAqB,MAAS;AAC1C,SAAK,OAAO,oBAAoB,EAAE,WAAW,MAAM,QAAQ,EAAE,MAAM,WAAW,UAAU,EAAE,EAAE,CAAC;AAAA,EAC9F;AAAA,EAES,YAAY;AACpB,SAAK,aAAa;AAAA,EACnB;AAAA,EAES,QAAQ,MAA2B;AAC3C,SAAK,aAAa;AAGlB,QAAI,KAAK,IAAI,YAAY,MAAM,KAAK;AACnC,WAAK,SAAS;AAAA,IACf;AAAA,EACD;AAAA,EAES,cAAc;AACtB,SAAK,SAAS;AAAA,EACf;AAAA,EAEQ,WAAW;AAElB,UAAM,SAAS,KAAK,KAAK,kBAAkB,MAAM,GAAG,EAAE,CAAC,KAAK;AAC5D,SAAK,OAAO,eAAe,MAAM;AAAA,EAClC;AAAA,EAEQ,eAAe;AACtB,QAAI,KAAK,OAAO,OAAO,UAAU,KAAK,CAAC,KAAK,OAAO,KAAK,iBAAiB,GAAG;AAC3E,WAAK,OAAO,UAAU,EAAE,MAAM,YAAY,UAAU,EAAE,CAAC;AAAA,IACxD,OAAO;AACN,WAAK,OAAO,UAAU,EAAE,MAAM,WAAW,UAAU,EAAE,CAAC;AAAA,IACvD;AAAA,EACD;AACD;", "names": [] }