1 | import {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from "react";
|
2 | import {useLayoutEffect as $6dfIe$useLayoutEffect, useEffectEvent as $6dfIe$useEffectEvent} from "@react-aria/utils";
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | class $8a9cb279dc87e130$export$905e7fc544a71f36 {
|
17 | isDefaultPrevented() {
|
18 | return this.nativeEvent.defaultPrevented;
|
19 | }
|
20 | preventDefault() {
|
21 | this.defaultPrevented = true;
|
22 | this.nativeEvent.preventDefault();
|
23 | }
|
24 | stopPropagation() {
|
25 | this.nativeEvent.stopPropagation();
|
26 | this.isPropagationStopped = ()=>true;
|
27 | }
|
28 | isPropagationStopped() {
|
29 | return false;
|
30 | }
|
31 | persist() {}
|
32 | constructor(type, nativeEvent){
|
33 | this.nativeEvent = nativeEvent;
|
34 | this.target = nativeEvent.target;
|
35 | this.currentTarget = nativeEvent.currentTarget;
|
36 | this.relatedTarget = nativeEvent.relatedTarget;
|
37 | this.bubbles = nativeEvent.bubbles;
|
38 | this.cancelable = nativeEvent.cancelable;
|
39 | this.defaultPrevented = nativeEvent.defaultPrevented;
|
40 | this.eventPhase = nativeEvent.eventPhase;
|
41 | this.isTrusted = nativeEvent.isTrusted;
|
42 | this.timeStamp = nativeEvent.timeStamp;
|
43 | this.type = type;
|
44 | }
|
45 | }
|
46 | function $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {
|
47 | let stateRef = (0, $6dfIe$useRef)({
|
48 | isFocused: false,
|
49 | observer: null
|
50 | });
|
51 |
|
52 |
|
53 | (0, $6dfIe$useLayoutEffect)(()=>{
|
54 | const state = stateRef.current;
|
55 | return ()=>{
|
56 | if (state.observer) {
|
57 | state.observer.disconnect();
|
58 | state.observer = null;
|
59 | }
|
60 | };
|
61 | }, []);
|
62 | let dispatchBlur = (0, $6dfIe$useEffectEvent)((e)=>{
|
63 | onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
|
64 | });
|
65 |
|
66 | return (0, $6dfIe$useCallback)((e)=>{
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {
|
72 | stateRef.current.isFocused = true;
|
73 | let target = e.target;
|
74 | let onBlurHandler = (e)=>{
|
75 | stateRef.current.isFocused = false;
|
76 | if (target.disabled)
|
77 | dispatchBlur(new $8a9cb279dc87e130$export$905e7fc544a71f36('blur', e));
|
78 |
|
79 | if (stateRef.current.observer) {
|
80 | stateRef.current.observer.disconnect();
|
81 | stateRef.current.observer = null;
|
82 | }
|
83 | };
|
84 | target.addEventListener('focusout', onBlurHandler, {
|
85 | once: true
|
86 | });
|
87 | stateRef.current.observer = new MutationObserver(()=>{
|
88 | if (stateRef.current.isFocused && target.disabled) {
|
89 | var _stateRef_current_observer;
|
90 | (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();
|
91 | let relatedTargetEl = target === document.activeElement ? null : document.activeElement;
|
92 | target.dispatchEvent(new FocusEvent('blur', {
|
93 | relatedTarget: relatedTargetEl
|
94 | }));
|
95 | target.dispatchEvent(new FocusEvent('focusout', {
|
96 | bubbles: true,
|
97 | relatedTarget: relatedTargetEl
|
98 | }));
|
99 | }
|
100 | });
|
101 | stateRef.current.observer.observe(target, {
|
102 | attributes: true,
|
103 | attributeFilter: [
|
104 | 'disabled'
|
105 | ]
|
106 | });
|
107 | }
|
108 | }, [
|
109 | dispatchBlur
|
110 | ]);
|
111 | }
|
112 |
|
113 |
|
114 | export {$8a9cb279dc87e130$export$905e7fc544a71f36 as SyntheticFocusEvent, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent};
|
115 |
|