export type InteractOutsideEvent = PointerEvent | MouseEvent | TouchEvent; export type InteractOutsideInterceptEventType = 'pointerdown' | 'pointerup' | 'mousedown' | 'mouseup' | 'touchstart' | 'touchend' | 'click'; export type InteractOutsideInterceptHandler = (ev: HTMLElementEventMap[E], computedEventData?: ComputedEventData) => void; /** * Some event data is lost when the event is delayed, debounced or throttled * as described in the dom-spec - https://dom.spec.whatwg.org/#event-path * For this reason we can pre-save any needed data and store * it here before being passed on the related events * */ export type ComputedEventData = { shadowTarget?: EventTarget; }; export type InteractOutsideConfig = { /** * Callback fired when an outside interaction event completes, * which is either a `pointerup`, `mouseup`, or `touchend` * event, depending on the user's input device. */ onInteractOutside?: (e: InteractOutsideEvent, computedEventData?: ComputedEventData) => void; /** * Callback fired when an outside interaction event starts, * which is either a `pointerdown`, `mousedown`, or `touchstart` * event, depending on the user's input device. * * This callback is useful when you want to know when the user * begins an outside interaction, but before the interaction * completes. */ onInteractOutsideStart?: (e: InteractOutsideEvent) => void; /** * Whether or not outside interactions should be handled. * @default true */ enabled?: boolean; };