{"version":3,"file":"index.mjs","sources":["../../extensions/westures_integration/index.ts"],"sourcesContent":["import wes from 'westures';\nimport { type Canvas, type CanvasEvents, type XY, util } from 'fabric';\n\ntype PinchEventData = {\n  centroid: XY;\n  event: PointerEvent;\n  phase: string;\n  type: 'pinch';\n  scale: number;\n  target: HTMLElement;\n};\n\ntype RotateEventData = {\n  centroid: XY;\n  event: PointerEvent;\n  phase: string;\n  type: 'rotate';\n  rotation: number;\n  target: HTMLElement;\n};\n\ntype TapEventData = {\n  centroid: XY;\n  event: PointerEvent;\n  phase: string;\n  type: 'tap';\n  target: HTMLElement;\n};\n\n/**\n * Register this handler on canvas.on('pinch', pinchEventHandler);\n * To get an out of the box functionality for the pinch to zoom\n */\nexport function pinchEventHandler(\n  this: Canvas,\n  { scale, target, scenePoint }: CanvasEvents['pinch'],\n) {\n  if (target && this.getActiveObject() === target) {\n    // if we are pinching on the active object, let's scale it\n    target.scaleX *= scale;\n    target.scaleY *= scale;\n  } else {\n    this.zoomToPoint(scenePoint, this.getZoom() * scale);\n  }\n}\n\nexport function rotateEventHandler(\n  this: Canvas,\n  { rotation, target }: CanvasEvents['rotate'],\n) {\n  if (target && this.getActiveObject() === target) {\n    target.rotate(target.angle + util.radiansToDegrees(rotation));\n  }\n}\n\nexport const tripleTapGesture = (canvas: Canvas) => {\n  return new wes.Tap(\n    canvas.upperCanvasEl,\n    ({ event }: TapEventData) => {\n      canvas.fireEventFromPointerEvent(\n        event,\n        'mouse:tripleclick',\n        'mousetripleclick',\n        undefined,\n      );\n      event.preventDefault();\n    },\n    {\n      numTaps: 3,\n      maxRetain: 400,\n    },\n  );\n};\n\nexport const doubleTapGesture = (canvas: Canvas) => {\n  return new wes.Tap(\n    canvas.upperCanvasEl,\n    ({ event }: TapEventData) => {\n      canvas.fireEventFromPointerEvent(\n        event,\n        'mouse:dblclick',\n        'mousedblclick',\n        undefined,\n      );\n      event.preventDefault();\n    },\n    {\n      numTaps: 2,\n      maxRetain: 300,\n    },\n  );\n};\n\nexport const pinchGesture = (canvas: Canvas) => {\n  return new wes.Pinch(\n    canvas.upperCanvasEl,\n    ({ scale, event }: PinchEventData) => {\n      canvas.fireEventFromPointerEvent(event, 'pinch', 'pinch', { scale });\n    },\n  );\n};\n\nexport const rotateGesture = (canvas: Canvas) => {\n  return new wes.Rotate(\n    canvas.upperCanvasEl,\n    ({ rotation, event }: RotateEventData) => {\n      canvas.fireEventFromPointerEvent(event, 'rotate', 'rotate', { rotation });\n    },\n  );\n};\n\n/**\n * Add a serie of gestures recognition on the canvas\n */\nexport const addGestures = (canvas: Canvas) => {\n  const canvasRegion = new wes.Region(canvas.upperCanvasEl);\n  canvas.addOrRemove(\n    (\n      el: HTMLElement,\n      ...args: Parameters<HTMLElement['removeEventListener']>\n    ) => el.removeEventListener(...args),\n  );\n  canvasRegion.addGesture(rotateGesture(canvas));\n  canvasRegion.addGesture(pinchGesture(canvas));\n  canvasRegion.addGesture(tripleTapGesture(canvas));\n  canvasRegion.addGesture(doubleTapGesture(canvas));\n  // add back events, excluding the click one\n  canvas.addOrRemove(\n    (el: HTMLElement, ...args: Parameters<HTMLElement['addEventListener']>) =>\n      el.addEventListener(...args),\n    true,\n  );\n};\n"],"names":["pinchEventHandler","_ref","scale","target","scenePoint","getActiveObject","scaleX","scaleY","zoomToPoint","getZoom","rotateEventHandler","_ref2","rotation","rotate","angle","util","radiansToDegrees","tripleTapGesture","canvas","wes","Tap","upperCanvasEl","_ref3","event","fireEventFromPointerEvent","undefined","preventDefault","numTaps","maxRetain","doubleTapGesture","_ref4","pinchGesture","Pinch","_ref5","rotateGesture","Rotate","_ref6","addGestures","canvasRegion","Region","addOrRemove","el","_len","arguments","length","args","Array","_key","removeEventListener","addGesture","_len2","_key2","addEventListener"],"mappings":"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"}