import { Fn } from '@usels/core'; import { ConfigurableWindow } from '../../shared/configurable.mjs'; import { MaybeEventTarget } from '../../types.mjs'; import '@legendapp/state'; interface OnClickOutsideOptions extends ConfigurableWindow { /** * List of elements or CSS selectors that should not trigger the handler. */ ignore?: (string | MaybeEventTarget)[]; /** * Use capturing phase for internal event listener. * @default true */ capture?: boolean; /** * Run handler function if focus moves to an iframe. * @default false */ detectIframe?: boolean; /** * Return control functions (`stop`, `cancel`, `trigger`) instead of just `stop`. * @default false */ controls?: Controls; } type OnClickOutsideHandler = (event: (T["detectIframe"] extends true ? FocusEvent : never) | (T["controls"] extends true ? Event : never) | PointerEvent) => void; interface OnClickOutsideReturn { /** Remove all event listeners */ stop: Fn; /** Prevent the next outside click from triggering the handler */ cancel: Fn; /** Manually trigger the handler with a given event */ trigger: (event: Event) => void; } declare function createOnClickOutside>(target: MaybeEventTarget, handler: OnClickOutsideHandler, options?: T): Fn; declare function createOnClickOutside>(target: MaybeEventTarget, handler: OnClickOutsideHandler, options: T): OnClickOutsideReturn; export { type OnClickOutsideHandler, type OnClickOutsideOptions, type OnClickOutsideReturn, createOnClickOutside };