{ "version": 3, "sources": ["../../../../../src/lib/shapes/arrow/toolStates/Pointing.ts"], "sourcesContent": ["import { StateNode, TLArrowShape, TLEventHandlers, createShapeId } from '@tldraw/editor'\n\nexport class Pointing extends StateNode {\n\tstatic override id = 'pointing'\n\n\tshape?: TLArrowShape\n\n\tmarkId = ''\n\n\toverride onEnter = () => {\n\t\tthis.didTimeout = false\n\n\t\tconst target = this.editor.getShapeAtPoint(this.editor.inputs.currentPagePoint, {\n\t\t\tfilter: (targetShape) => {\n\t\t\t\treturn !targetShape.isLocked && this.editor.getShapeUtil(targetShape).canBind(targetShape)\n\t\t\t},\n\t\t\tmargin: 0,\n\t\t\thitInside: true,\n\t\t\trenderingOnly: true,\n\t\t})\n\n\t\tif (!target) {\n\t\t\tthis.createArrowShape()\n\t\t} else {\n\t\t\tthis.editor.setHintingShapes([target.id])\n\t\t}\n\n\t\tthis.startPreciseTimeout()\n\t}\n\n\toverride onExit = () => {\n\t\tthis.shape = undefined\n\t\tthis.editor.setHintingShapes([])\n\t\tthis.clearPreciseTimeout()\n\t}\n\n\toverride onPointerMove: TLEventHandlers['onPointerMove'] = () => {\n\t\tif (this.editor.inputs.isDragging) {\n\t\t\tif (!this.shape) {\n\t\t\t\tthis.createArrowShape()\n\t\t\t}\n\n\t\t\tif (!this.shape) throw Error(`expected shape`)\n\n\t\t\tthis.updateArrowShapeEndHandle()\n\n\t\t\tthis.editor.setCurrentTool('select.dragging_handle', {\n\t\t\t\tshape: this.shape,\n\t\t\t\thandle: this.editor.getShapeHandles(this.shape)!.find((h) => h.id === 'end')!,\n\t\t\t\tisCreating: true,\n\t\t\t\tonInteractionEnd: 'arrow',\n\t\t\t})\n\t\t}\n\t}\n\n\toverride onPointerUp: TLEventHandlers['onPointerUp'] = () => {\n\t\tthis.cancel()\n\t}\n\n\toverride onCancel: TLEventHandlers['onCancel'] = () => {\n\t\tthis.cancel()\n\t}\n\n\toverride onComplete: TLEventHandlers['onComplete'] = () => {\n\t\tthis.cancel()\n\t}\n\n\toverride onInterrupt: TLEventHandlers['onInterrupt'] = () => {\n\t\tthis.cancel()\n\t}\n\n\tcancel() {\n\t\tif (this.shape) {\n\t\t\t// the arrow might not have been created yet!\n\t\t\tthis.editor.bailToMark(this.markId)\n\t\t}\n\t\tthis.editor.setHintingShapes([])\n\t\tthis.parent.transition('idle', {})\n\t}\n\n\tcreateArrowShape() {\n\t\tconst { originPagePoint } = this.editor.inputs\n\n\t\tconst id = createShapeId()\n\n\t\tthis.markId = `creating:${id}`\n\t\tthis.editor.mark(this.markId)\n\n\t\tthis.editor.createShapes([\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\ttype: 'arrow',\n\t\t\t\tx: originPagePoint.x,\n\t\t\t\ty: originPagePoint.y,\n\t\t\t},\n\t\t])\n\n\t\tconst shape = this.editor.getShape(id)\n\t\tif (!shape) throw Error(`expected shape`)\n\n\t\tconst handles = this.editor.getShapeHandles(shape)\n\t\tif (!handles) throw Error(`expected handles for arrow`)\n\n\t\tconst util = this.editor.getShapeUtil('arrow')\n\t\tconst startHandle = handles.find((h) => h.id === 'start')!\n\t\tconst change = util.onHandleChange?.(shape, {\n\t\t\thandle: { ...startHandle, x: 0, y: 0 },\n\t\t\tisPrecise: true,\n\t\t})\n\n\t\tif (change) {\n\t\t\tconst startTerminal = change.props?.start\n\t\t\tif (startTerminal?.type === 'binding') {\n\t\t\t\tthis.editor.setHintingShapes([startTerminal.boundShapeId])\n\t\t\t}\n\t\t\tthis.editor.updateShapes([change], { squashing: true })\n\t\t}\n\n\t\t// Cache the current shape after those changes\n\t\tthis.shape = this.editor.getShape(id)\n\t\tthis.editor.select(id)\n\t}\n\n\tupdateArrowShapeEndHandle() {\n\t\tconst shape = this.shape\n\t\tif (!shape) throw Error(`expected shape`)\n\n\t\tconst handles = this.editor.getShapeHandles(shape)\n\t\tif (!handles) throw Error(`expected handles for arrow`)\n\n\t\tconst shapeWithOutEndOffset = {\n\t\t\t...shape,\n\t\t\tprops: { ...shape.props, end: { ...shape.props.end, x: 0, y: 0 } },\n\t\t}\n\n\t\t// end update\n\t\t{\n\t\t\tconst util = this.editor.getShapeUtil('arrow')\n\t\t\tconst point = this.editor.getPointInShapeSpace(shape, this.editor.inputs.currentPagePoint)\n\t\t\tconst endHandle = handles.find((h) => h.id === 'end')!\n\t\t\tconst change = util.onHandleChange?.(shapeWithOutEndOffset, {\n\t\t\t\thandle: { ...endHandle, x: point.x, y: point.y },\n\t\t\t\tisPrecise: false, // sure about that?\n\t\t\t})\n\n\t\t\tif (change) {\n\t\t\t\tconst endTerminal = change.props?.end\n\t\t\t\tif (endTerminal?.type === 'binding') {\n\t\t\t\t\tthis.editor.setHintingShapes([endTerminal.boundShapeId])\n\t\t\t\t}\n\t\t\t\tthis.editor.updateShapes([change], { squashing: true })\n\t\t\t}\n\t\t}\n\n\t\t// start update\n\t\t{\n\t\t\tconst util = this.editor.getShapeUtil('arrow')\n\t\t\tconst startHandle = handles.find((h) => h.id === 'start')!\n\t\t\tconst change = util.onHandleChange?.(shapeWithOutEndOffset, {\n\t\t\t\thandle: { ...startHandle, x: 0, y: 0 },\n\t\t\t\tisPrecise: this.didTimeout, // sure about that?\n\t\t\t})\n\n\t\t\tif (change) {\n\t\t\t\tthis.editor.updateShapes([change], { squashing: true })\n\t\t\t}\n\t\t}\n\n\t\t// Cache the current shape after those changes\n\t\tthis.shape = this.editor.getShape(shape.id)\n\t}\n\n\tprivate preciseTimeout = -1\n\tprivate didTimeout = false\n\tprivate startPreciseTimeout() {\n\t\tthis.preciseTimeout = window.setTimeout(() => {\n\t\t\tif (!this.isActive) return\n\t\t\tthis.didTimeout = true\n\t\t}, 320)\n\t}\n\tprivate clearPreciseTimeout() {\n\t\tclearTimeout(this.preciseTimeout)\n\t}\n}\n"], "mappings": "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", "names": [] }