{"version":3,"sources":["../../../../src/sensors/usePageLeave/core.ts"],"sourcesContent":["import { observable, type Observable, type OpaqueObject } from \"@legendapp/state\";\nimport { type DeepMaybeObservable, type ReadonlyObservable } from \"@usels/core\";\nimport { resolveWindowSource, type ConfigurableWindow } from \"@shared/configurable\";\nimport { createEventListener } from \"../../browser/useEventListener/core\";\n\nexport type UsePageLeaveOptions = ConfigurableWindow;\n\n/**\n * Framework-agnostic reactive page-leave detector.\n *\n * Returns an `Observable<boolean>` that is `true` while the mouse cursor is\n * outside the page (document) and `false` otherwise. Listens to `mouseout` on\n * the window plus `mouseleave` / `mouseenter` on the document. The target\n * window is resolved via `resolveWindowSource`, so `options.window` (plain,\n * Ref$, or Observable) is honored reactively.\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function createPageLeave(\n  options?: DeepMaybeObservable<UsePageLeaveOptions>\n): ReadonlyObservable<boolean> {\n  const opts$ = observable(options);\n  const win$ = resolveWindowSource(opts$.window as unknown as Observable<unknown>);\n  const doc$ = observable<OpaqueObject<Document> | null>(() => {\n    const win = win$.get();\n    return (win?.document ?? null) as OpaqueObject<Document> | null;\n  });\n\n  const isLeft$ = observable(false);\n\n  const onLeave = (event: MouseEvent) => {\n    const from =\n      event.relatedTarget || (event as MouseEvent & { toElement?: EventTarget | null }).toElement;\n    isLeft$.set(!from);\n  };\n\n  const onEnter = () => {\n    isLeft$.set(false);\n  };\n\n  createEventListener(win$, \"mouseout\", onLeave, { passive: true });\n  createEventListener(doc$, \"mouseleave\", onLeave, { passive: true });\n  createEventListener(doc$, \"mouseenter\", onEnter, { passive: true });\n\n  return isLeft$ as ReadonlyObservable<boolean>;\n}\n"],"mappings":"AAAA,SAAS,kBAAsD;AAE/D,SAAS,2BAAoD;AAC7D,SAAS,2BAA2B;AAAA;AAc7B,SAAS,gBACd,SAC6B;AAC7B,QAAM,QAAQ,WAAW,OAAO;AAChC,QAAM,OAAO,oBAAoB,MAAM,MAAwC;AAC/E,QAAM,OAAO,WAA0C,MAAM;AAC3D,UAAM,MAAM,KAAK,IAAI;AACrB,WAAQ,KAAK,YAAY;AAAA,EAC3B,CAAC;AAED,QAAM,UAAU,WAAW,KAAK;AAEhC,QAAM,UAAU,CAAC,UAAsB;AACrC,UAAM,OACJ,MAAM,iBAAkB,MAA0D;AACpF,YAAQ,IAAI,CAAC,IAAI;AAAA,EACnB;AAEA,QAAM,UAAU,MAAM;AACpB,YAAQ,IAAI,KAAK;AAAA,EACnB;AAEA,sBAAoB,MAAM,YAAY,SAAS,EAAE,SAAS,KAAK,CAAC;AAChE,sBAAoB,MAAM,cAAc,SAAS,EAAE,SAAS,KAAK,CAAC;AAClE,sBAAoB,MAAM,cAAc,SAAS,EAAE,SAAS,KAAK,CAAC;AAElE,SAAO;AACT;","names":[]}