{"version":3,"file":"index.mjs","names":[],"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"],"mappings":";;;;;;;AAiCA,SAAgB,kBAEd,EAAE,OAAO,QAAQ,cACjB;AACA,KAAI,UAAU,KAAK,iBAAiB,KAAK,QAAQ;AAE/C,SAAO,UAAU;AACjB,SAAO,UAAU;OAEjB,MAAK,YAAY,YAAY,KAAK,SAAS,GAAG,MAAM;;AAIxD,SAAgB,mBAEd,EAAE,UAAU,UACZ;AACA,KAAI,UAAU,KAAK,iBAAiB,KAAK,OACvC,QAAO,OAAO,OAAO,QAAQ,KAAK,iBAAiB,SAAS,CAAC;;AAIjE,MAAa,oBAAoB,WAAmB;AAClD,QAAO,IAAI,IAAI,IACb,OAAO,gBACN,EAAE,YAA0B;AAC3B,SAAO,0BACL,OACA,qBACA,oBACA,KAAA,EACD;AACD,QAAM,gBAAgB;IAExB;EACE,SAAS;EACT,WAAW;EACZ,CACF;;AAGH,MAAa,oBAAoB,WAAmB;AAClD,QAAO,IAAI,IAAI,IACb,OAAO,gBACN,EAAE,YAA0B;AAC3B,SAAO,0BACL,OACA,kBACA,iBACA,KAAA,EACD;AACD,QAAM,gBAAgB;IAExB;EACE,SAAS;EACT,WAAW;EACZ,CACF;;AAGH,MAAa,gBAAgB,WAAmB;AAC9C,QAAO,IAAI,IAAI,MACb,OAAO,gBACN,EAAE,OAAO,YAA4B;AACpC,SAAO,0BAA0B,OAAO,SAAS,SAAS,EAAE,OAAO,CAAC;GAEvE;;AAGH,MAAa,iBAAiB,WAAmB;AAC/C,QAAO,IAAI,IAAI,OACb,OAAO,gBACN,EAAE,UAAU,YAA6B;AACxC,SAAO,0BAA0B,OAAO,UAAU,UAAU,EAAE,UAAU,CAAC;GAE5E;;;;;AAMH,MAAa,eAAe,WAAmB;CAC7C,MAAM,eAAe,IAAI,IAAI,OAAO,OAAO,cAAc;AACzD,QAAO,aAEH,IACA,GAAG,SACA,GAAG,oBAAoB,GAAG,KAAK,CACrC;AACD,cAAa,WAAW,cAAc,OAAO,CAAC;AAC9C,cAAa,WAAW,aAAa,OAAO,CAAC;AAC7C,cAAa,WAAW,iBAAiB,OAAO,CAAC;AACjD,cAAa,WAAW,iBAAiB,OAAO,CAAC;AAEjD,QAAO,aACJ,IAAiB,GAAG,SACnB,GAAG,iBAAiB,GAAG,KAAK,EAC9B,KACD"}