{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-same-target/index.ts"],"sourcesContent":["import { NOOP } from '@vue/shared'\n\nexport const useSameTarget = (handleClick?: (e: MouseEvent) => void) => {\n  if (!handleClick) {\n    return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP }\n  }\n\n  let mousedownTarget = false\n  let mouseupTarget = false\n  // refer to this https://javascript.info/mouse-events-basics\n  // events fired in the order: mousedown -> mouseup -> click\n  // we need to set the mousedown handle to false after click fired.\n  const onClick = (e: MouseEvent) => {\n    // if and only if\n    if (mousedownTarget && mouseupTarget) {\n      handleClick(e)\n    }\n    mousedownTarget = mouseupTarget = false\n  }\n\n  const onMousedown = (e: MouseEvent) => {\n    // marking current mousedown target.\n    mousedownTarget = e.target === e.currentTarget\n  }\n  const onMouseup = (e: MouseEvent) => {\n    // marking current mouseup target.\n    mouseupTarget = e.target === e.currentTarget\n  }\n\n  return { onClick, onMousedown, onMouseup }\n}\n"],"names":[],"mappings":";;AAEa,MAAA,aAAA,GAAgB,CAAC,WAA0C,KAAA;AACtE,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,OAAO,EAAE,OAAS,EAAA,IAAA,EAAM,WAAa,EAAA,IAAA,EAAM,WAAW,IAAK,EAAA,CAAA;AAAA,GAC7D;AAEA,EAAA,IAAI,eAAkB,GAAA,KAAA,CAAA;AACtB,EAAA,IAAI,aAAgB,GAAA,KAAA,CAAA;AAIpB,EAAM,MAAA,OAAA,GAAU,CAAC,CAAkB,KAAA;AAEjC,IAAA,IAAI,mBAAmB,aAAe,EAAA;AACpC,MAAA,WAAA,CAAY,CAAC,CAAA,CAAA;AAAA,KACf;AACA,IAAA,eAAA,GAAkB,aAAgB,GAAA,KAAA,CAAA;AAAA,GACpC,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,CAAkB,KAAA;AAErC,IAAkB,eAAA,GAAA,CAAA,CAAE,WAAW,CAAE,CAAA,aAAA,CAAA;AAAA,GACnC,CAAA;AACA,EAAM,MAAA,SAAA,GAAY,CAAC,CAAkB,KAAA;AAEnC,IAAgB,aAAA,GAAA,CAAA,CAAE,WAAW,CAAE,CAAA,aAAA,CAAA;AAAA,GACjC,CAAA;AAEA,EAAO,OAAA,EAAE,OAAS,EAAA,WAAA,EAAa,SAAU,EAAA,CAAA;AAC3C;;;;"}