{"version":3,"sources":["../../../../src/sensors/useElementHover/core.ts"],"sourcesContent":["import { observable } from \"@legendapp/state\";\nimport { onUnmount, type DeepMaybeObservable, type ReadonlyObservable } from \"@usels/core\";\nimport type { MaybeEventTarget } from \"../../types\";\nimport { createEventListener } from \"../../browser/useEventListener/core\";\n\nexport interface UseElementHoverOptions {\n  /** Delay in ms before entering hover state */\n  delayEnter?: number;\n  /** Delay in ms before leaving hover state */\n  delayLeave?: number;\n}\n\nexport type UseElementHoverReturn = ReadonlyObservable<boolean>;\n\n/**\n * Framework-agnostic reactive element hover tracker.\n *\n * Tracks whether a target element is being hovered via `mouseenter` /\n * `mouseleave` events. Supports optional enter/leave delays.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function createElementHover(\n  target: MaybeEventTarget,\n  options?: DeepMaybeObservable<UseElementHoverOptions>\n): UseElementHoverReturn {\n  const opts$ = observable(options);\n  const isHovered$ = observable(false);\n\n  let timer: ReturnType<typeof setTimeout> | undefined;\n\n  const cleanup = () => {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n      timer = undefined;\n    }\n  };\n\n  const toggle = (entering: boolean) => {\n    const delay = entering ? (opts$.peek()?.delayEnter ?? 0) : (opts$.peek()?.delayLeave ?? 0);\n    cleanup();\n    if (delay > 0) {\n      timer = setTimeout(() => isHovered$.set(entering), delay);\n    } else {\n      isHovered$.set(entering);\n    }\n  };\n\n  onUnmount(cleanup);\n\n  createEventListener(target, \"mouseenter\", () => toggle(true), { passive: true });\n  createEventListener(target, \"mouseleave\", () => toggle(false), { passive: true });\n\n  return isHovered$ as ReadonlyObservable<boolean>;\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAC3B,SAAS,iBAAoE;AAE7E,SAAS,2BAA2B;AAAA;AAkB7B,SAAS,mBACd,QACA,SACuB;AACvB,QAAM,QAAQ,WAAW,OAAO;AAChC,QAAM,aAAa,WAAW,KAAK;AAEnC,MAAI;AAEJ,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,QAAW;AACvB,mBAAa,KAAK;AAClB,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,aAAsB;AACpC,UAAM,QAAQ,WAAY,MAAM,KAAK,GAAG,cAAc,IAAM,MAAM,KAAK,GAAG,cAAc;AACxF,YAAQ;AACR,QAAI,QAAQ,GAAG;AACb,cAAQ,WAAW,MAAM,WAAW,IAAI,QAAQ,GAAG,KAAK;AAAA,IAC1D,OAAO;AACL,iBAAW,IAAI,QAAQ;AAAA,IACzB;AAAA,EACF;AAEA,YAAU,OAAO;AAEjB,sBAAoB,QAAQ,cAAc,MAAM,OAAO,IAAI,GAAG,EAAE,SAAS,KAAK,CAAC;AAC/E,sBAAoB,QAAQ,cAAc,MAAM,OAAO,KAAK,GAAG,EAAE,SAAS,KAAK,CAAC;AAEhF,SAAO;AACT;","names":[]}