1 | import {useEffectEvent as $ispOf$useEffectEvent, getOwnerDocument as $ispOf$getOwnerDocument} from "@react-aria/utils";
|
2 | import {useRef as $ispOf$useRef, useEffect as $ispOf$useEffect} from "react";
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | function $e0b6e0b68ec7f50f$export$872b660ac5a1ff98(props) {
|
21 | let { ref: ref, onInteractOutside: onInteractOutside, isDisabled: isDisabled, onInteractOutsideStart: onInteractOutsideStart } = props;
|
22 | let stateRef = (0, $ispOf$useRef)({
|
23 | isPointerDown: false,
|
24 | ignoreEmulatedMouseEvents: false
|
25 | });
|
26 | let onPointerDown = (0, $ispOf$useEffectEvent)((e)=>{
|
27 | if (onInteractOutside && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) {
|
28 | if (onInteractOutsideStart) onInteractOutsideStart(e);
|
29 | stateRef.current.isPointerDown = true;
|
30 | }
|
31 | });
|
32 | let triggerInteractOutside = (0, $ispOf$useEffectEvent)((e)=>{
|
33 | if (onInteractOutside) onInteractOutside(e);
|
34 | });
|
35 | (0, $ispOf$useEffect)(()=>{
|
36 | let state = stateRef.current;
|
37 | if (isDisabled) return;
|
38 | const element = ref.current;
|
39 | const documentObject = (0, $ispOf$getOwnerDocument)(element);
|
40 |
|
41 | if (typeof PointerEvent !== 'undefined') {
|
42 | let onPointerUp = (e)=>{
|
43 | if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);
|
44 | state.isPointerDown = false;
|
45 | };
|
46 |
|
47 | documentObject.addEventListener('pointerdown', onPointerDown, true);
|
48 | documentObject.addEventListener('pointerup', onPointerUp, true);
|
49 | return ()=>{
|
50 | documentObject.removeEventListener('pointerdown', onPointerDown, true);
|
51 | documentObject.removeEventListener('pointerup', onPointerUp, true);
|
52 | };
|
53 | } else {
|
54 | let onMouseUp = (e)=>{
|
55 | if (state.ignoreEmulatedMouseEvents) state.ignoreEmulatedMouseEvents = false;
|
56 | else if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);
|
57 | state.isPointerDown = false;
|
58 | };
|
59 | let onTouchEnd = (e)=>{
|
60 | state.ignoreEmulatedMouseEvents = true;
|
61 | if (state.isPointerDown && $e0b6e0b68ec7f50f$var$isValidEvent(e, ref)) triggerInteractOutside(e);
|
62 | state.isPointerDown = false;
|
63 | };
|
64 | documentObject.addEventListener('mousedown', onPointerDown, true);
|
65 | documentObject.addEventListener('mouseup', onMouseUp, true);
|
66 | documentObject.addEventListener('touchstart', onPointerDown, true);
|
67 | documentObject.addEventListener('touchend', onTouchEnd, true);
|
68 | return ()=>{
|
69 | documentObject.removeEventListener('mousedown', onPointerDown, true);
|
70 | documentObject.removeEventListener('mouseup', onMouseUp, true);
|
71 | documentObject.removeEventListener('touchstart', onPointerDown, true);
|
72 | documentObject.removeEventListener('touchend', onTouchEnd, true);
|
73 | };
|
74 | }
|
75 | }, [
|
76 | ref,
|
77 | isDisabled,
|
78 | onPointerDown,
|
79 | triggerInteractOutside
|
80 | ]);
|
81 | }
|
82 | function $e0b6e0b68ec7f50f$var$isValidEvent(event, ref) {
|
83 | if (event.button > 0) return false;
|
84 | if (event.target) {
|
85 |
|
86 | const ownerDocument = event.target.ownerDocument;
|
87 | if (!ownerDocument || !ownerDocument.documentElement.contains(event.target)) return false;
|
88 |
|
89 | if (event.target.closest('[data-react-aria-top-layer]')) return false;
|
90 | }
|
91 | return ref.current && !ref.current.contains(event.target);
|
92 | }
|
93 |
|
94 |
|
95 | export {$e0b6e0b68ec7f50f$export$872b660ac5a1ff98 as useInteractOutside};
|
96 |
|