@hanzogui/dismissable 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/cjs/Dismissable.cjs +287 -0
- package/dist/cjs/Dismissable.native.js +65 -0
- package/dist/cjs/Dismissable.native.js.map +1 -0
- package/dist/cjs/DismissableProps.cjs +16 -0
- package/dist/cjs/DismissableProps.native.js +19 -0
- package/dist/cjs/DismissableProps.native.js.map +1 -0
- package/dist/cjs/index.cjs +18 -0
- package/dist/cjs/index.native.js +21 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/esm/Dismissable.mjs +246 -0
- package/dist/esm/Dismissable.mjs.map +1 -0
- package/dist/esm/Dismissable.native.js +22 -0
- package/dist/esm/Dismissable.native.js.map +1 -0
- package/dist/esm/DismissableProps.mjs +2 -0
- package/dist/esm/DismissableProps.mjs.map +1 -0
- package/dist/esm/DismissableProps.native.js +2 -0
- package/dist/esm/DismissableProps.native.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +2 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/jsx/Dismissable.mjs +246 -0
- package/dist/jsx/Dismissable.mjs.map +1 -0
- package/dist/jsx/Dismissable.native.js +65 -0
- package/dist/jsx/Dismissable.native.js.map +1 -0
- package/dist/jsx/DismissableProps.mjs +2 -0
- package/dist/jsx/DismissableProps.mjs.map +1 -0
- package/dist/jsx/DismissableProps.native.js +19 -0
- package/dist/jsx/DismissableProps.native.js.map +1 -0
- package/dist/jsx/index.js +2 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/index.mjs +2 -0
- package/dist/jsx/index.mjs.map +1 -0
- package/dist/jsx/index.native.js +21 -0
- package/dist/jsx/index.native.js.map +1 -0
- package/package.json +53 -0
- package/src/Dismissable.native.tsx +39 -0
- package/src/Dismissable.tsx +507 -0
- package/src/DismissableProps.tsx +63 -0
- package/src/index.ts +1 -0
- package/types/Dismissable.d.ts +42 -0
- package/types/Dismissable.native.d.ts +10 -0
- package/types/DismissableProps.d.ts +57 -0
- package/types/index.d.ts +2 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { useComposedRefs } from "@hanzo/gui-compose-refs";
|
|
2
|
+
import { Slot, View, composeEventHandlers } from "@hanzo/gui-core";
|
|
3
|
+
import { useEscapeKeydown } from "@hanzo/gui-use-escape-keydown";
|
|
4
|
+
import { useEvent } from "@hanzo/gui-use-event";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import * as ReactDOM from "react-dom";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
function dispatchDiscreteCustomEvent(target, event) {
|
|
9
|
+
target && ReactDOM.flushSync(() => target.dispatchEvent(event));
|
|
10
|
+
}
|
|
11
|
+
const DISMISSABLE_LAYER_NAME = "Dismissable",
|
|
12
|
+
CONTEXT_UPDATE = "dismissable.update",
|
|
13
|
+
POINTER_DOWN_OUTSIDE = "dismissable.pointerDownOutside",
|
|
14
|
+
FOCUS_OUTSIDE = "dismissable.focusOutside";
|
|
15
|
+
let originalBodyPointerEvents;
|
|
16
|
+
const globalLayers = /* @__PURE__ */new Set(),
|
|
17
|
+
layerChangeListeners = /* @__PURE__ */new Set();
|
|
18
|
+
let layersWithPointerEventsDisabledCount = 0;
|
|
19
|
+
function notifyLayerChange() {
|
|
20
|
+
for (const listener of layerChangeListeners) listener();
|
|
21
|
+
}
|
|
22
|
+
function getDismissableLayerCount() {
|
|
23
|
+
return globalLayers.size;
|
|
24
|
+
}
|
|
25
|
+
function debugDismissableLayers() {
|
|
26
|
+
const layers = Array.from(globalLayers);
|
|
27
|
+
return console.log("[Dismissable] Active layers:", layers.length, layers), layers;
|
|
28
|
+
}
|
|
29
|
+
function useHasDismissableLayers() {
|
|
30
|
+
const [count, setCount] = React.useState(() => globalLayers.size);
|
|
31
|
+
return React.useEffect(() => {
|
|
32
|
+
setCount(globalLayers.size);
|
|
33
|
+
const update = () => setCount(globalLayers.size);
|
|
34
|
+
return layerChangeListeners.add(update), () => {
|
|
35
|
+
layerChangeListeners.delete(update);
|
|
36
|
+
};
|
|
37
|
+
}, []), count > 0;
|
|
38
|
+
}
|
|
39
|
+
const DismissableContext = React.createContext({
|
|
40
|
+
layers: /* @__PURE__ */new Set(),
|
|
41
|
+
layersWithOutsidePointerEventsDisabled: /* @__PURE__ */new Set(),
|
|
42
|
+
branches: /* @__PURE__ */new Set()
|
|
43
|
+
});
|
|
44
|
+
function useIsInsideDismissable(ref) {
|
|
45
|
+
const context = React.useContext(DismissableContext),
|
|
46
|
+
[isInside, setIsInside] = React.useState(!1);
|
|
47
|
+
return React.useEffect(() => {
|
|
48
|
+
const check = () => {
|
|
49
|
+
const el = ref.current;
|
|
50
|
+
if (!el) {
|
|
51
|
+
setIsInside(!1);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
for (const layer of context.layers) if (layer.contains(el)) {
|
|
55
|
+
setIsInside(!0);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
setIsInside(!1);
|
|
59
|
+
};
|
|
60
|
+
return check(), document.addEventListener(CONTEXT_UPDATE, check), () => document.removeEventListener(CONTEXT_UPDATE, check);
|
|
61
|
+
}, [context.layers, ref]), isInside;
|
|
62
|
+
}
|
|
63
|
+
function useDismissableLayersAbove(ref) {
|
|
64
|
+
const context = React.useContext(DismissableContext),
|
|
65
|
+
[count, setCount] = React.useState(0);
|
|
66
|
+
return React.useEffect(() => {
|
|
67
|
+
const check = () => {
|
|
68
|
+
const el = ref.current;
|
|
69
|
+
if (!el) {
|
|
70
|
+
setCount(0);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let above = 0;
|
|
74
|
+
for (const layer of context.layers) layer.contains(el) && above++;
|
|
75
|
+
setCount(above);
|
|
76
|
+
};
|
|
77
|
+
return check(), document.addEventListener(CONTEXT_UPDATE, check), () => document.removeEventListener(CONTEXT_UPDATE, check);
|
|
78
|
+
}, [context.layers, ref]), count;
|
|
79
|
+
}
|
|
80
|
+
const Dismissable = React.forwardRef((props, forwardedRef) => {
|
|
81
|
+
const {
|
|
82
|
+
disableOutsidePointerEvents = !1,
|
|
83
|
+
forceUnmount,
|
|
84
|
+
onEscapeKeyDown,
|
|
85
|
+
onPointerDownOutside,
|
|
86
|
+
onFocusOutside,
|
|
87
|
+
onInteractOutside,
|
|
88
|
+
onDismiss,
|
|
89
|
+
asChild,
|
|
90
|
+
children,
|
|
91
|
+
branches: branchesProp,
|
|
92
|
+
...layerProps
|
|
93
|
+
} = props,
|
|
94
|
+
Comp = asChild ? Slot : View,
|
|
95
|
+
context = React.useContext(DismissableContext),
|
|
96
|
+
[node, setNode] = React.useState(null),
|
|
97
|
+
[, force] = React.useState({}),
|
|
98
|
+
composedRefs = useComposedRefs(forwardedRef, node2 => setNode(node2)),
|
|
99
|
+
layers = Array.from(context.layers),
|
|
100
|
+
[highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1),
|
|
101
|
+
highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled),
|
|
102
|
+
index = node ? layers.indexOf(node) : -1,
|
|
103
|
+
isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0,
|
|
104
|
+
isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex,
|
|
105
|
+
pointerDownOutside = usePointerDownOutside(event => {
|
|
106
|
+
const target = event.target,
|
|
107
|
+
isPointerDownOnBranch = [...(branchesProp || context.branches)].some(branch => branch.contains(target));
|
|
108
|
+
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
109
|
+
}),
|
|
110
|
+
focusOutside = useFocusOutside(event => {
|
|
111
|
+
const target = event.target;
|
|
112
|
+
[...(branchesProp || context.branches)].some(branch => branch.contains(target)) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
113
|
+
}),
|
|
114
|
+
forceUnmountRef = React.useRef(forceUnmount);
|
|
115
|
+
return React.useEffect(() => {
|
|
116
|
+
forceUnmountRef.current = forceUnmount;
|
|
117
|
+
}, [forceUnmount]), useEscapeKeydown(event => {
|
|
118
|
+
if (forceUnmountRef.current) return;
|
|
119
|
+
const currentLayers = Array.from(context.layers);
|
|
120
|
+
(node ? currentLayers.indexOf(node) : -1) === currentLayers.length - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
121
|
+
}), React.useEffect(() => {
|
|
122
|
+
if (node && !forceUnmount) return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node), layersWithPointerEventsDisabledCount++), context.layers.add(node), globalLayers.add(node), (disableOutsidePointerEvents || layersWithPointerEventsDisabledCount > 0) && dispatchUpdate(), notifyLayerChange(), () => {
|
|
123
|
+
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
124
|
+
};
|
|
125
|
+
}, [node, disableOutsidePointerEvents, forceUnmount, context]), React.useEffect(() => {
|
|
126
|
+
if (!forceUnmount) return () => {
|
|
127
|
+
if (!node) return;
|
|
128
|
+
const hadPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.has(node);
|
|
129
|
+
context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), globalLayers.delete(node), layersWithPointerEventsDisabledCount > 0 && dispatchUpdate(), notifyLayerChange(), hadPointerEventsDisabled && layersWithPointerEventsDisabledCount--;
|
|
130
|
+
};
|
|
131
|
+
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
132
|
+
const handleUpdate = () => {
|
|
133
|
+
layersWithPointerEventsDisabledCount > 0 && force({});
|
|
134
|
+
};
|
|
135
|
+
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
136
|
+
}, []), /* @__PURE__ */jsx(Comp, {
|
|
137
|
+
...layerProps,
|
|
138
|
+
ref: composedRefs,
|
|
139
|
+
...(!asChild && {
|
|
140
|
+
display: "contents"
|
|
141
|
+
}),
|
|
142
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
143
|
+
onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
144
|
+
onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
145
|
+
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture),
|
|
146
|
+
children
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
150
|
+
const BRANCH_NAME = "DismissableBranch",
|
|
151
|
+
DismissableBranch = React.forwardRef((props, forwardedRef) => {
|
|
152
|
+
const {
|
|
153
|
+
branches: branchesProp,
|
|
154
|
+
...rest
|
|
155
|
+
} = props,
|
|
156
|
+
context = React.useContext(DismissableContext),
|
|
157
|
+
ref = React.useRef(null),
|
|
158
|
+
composedRefs = useComposedRefs(forwardedRef, ref);
|
|
159
|
+
return React.useEffect(() => {
|
|
160
|
+
const node = ref.current;
|
|
161
|
+
if (!(node instanceof HTMLElement)) return;
|
|
162
|
+
const branches = branchesProp || context.branches;
|
|
163
|
+
if (node && branches) return branches.add(node), () => {
|
|
164
|
+
branches.delete(node);
|
|
165
|
+
};
|
|
166
|
+
}, [branchesProp, context.branches]), /* @__PURE__ */jsx(View, {
|
|
167
|
+
asChild: "except-style",
|
|
168
|
+
...rest,
|
|
169
|
+
ref: composedRefs
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
DismissableBranch.displayName = BRANCH_NAME;
|
|
173
|
+
function usePointerDownOutside(onPointerDownOutside) {
|
|
174
|
+
const handlePointerDownOutside = useEvent(onPointerDownOutside),
|
|
175
|
+
isPointerInsideReactTreeRef = React.useRef(!1),
|
|
176
|
+
handleClickRef = React.useRef(() => {});
|
|
177
|
+
return React.useEffect(() => {
|
|
178
|
+
const handlePointerDown = event => {
|
|
179
|
+
if (event.target && !isPointerInsideReactTreeRef.current) {
|
|
180
|
+
let handleAndDispatchPointerDownOutsideEvent = function () {
|
|
181
|
+
handleAndDispatchCustomEvent(POINTER_DOWN_OUTSIDE, handlePointerDownOutside, eventDetail, {
|
|
182
|
+
discrete: !0
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
const eventDetail = {
|
|
186
|
+
originalEvent: event
|
|
187
|
+
};
|
|
188
|
+
event.pointerType === "touch" ? (document.removeEventListener("click", handleClickRef.current), handleClickRef.current = handleAndDispatchPointerDownOutsideEvent, document.addEventListener("click", handleClickRef.current, {
|
|
189
|
+
once: !0
|
|
190
|
+
})) : handleAndDispatchPointerDownOutsideEvent();
|
|
191
|
+
}
|
|
192
|
+
isPointerInsideReactTreeRef.current = !1;
|
|
193
|
+
},
|
|
194
|
+
timerId = setTimeout(() => {
|
|
195
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
196
|
+
}, 0);
|
|
197
|
+
return () => {
|
|
198
|
+
window.clearTimeout(timerId), document.removeEventListener("pointerdown", handlePointerDown), document.removeEventListener("click", handleClickRef.current);
|
|
199
|
+
};
|
|
200
|
+
}, [handlePointerDownOutside]), {
|
|
201
|
+
// ensures we check React component tree (not just DOM tree)
|
|
202
|
+
onPointerDownCapture: () => {
|
|
203
|
+
isPointerInsideReactTreeRef.current = !0;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function useFocusOutside(onFocusOutside) {
|
|
208
|
+
const handleFocusOutside = useEvent(onFocusOutside),
|
|
209
|
+
isFocusInsideReactTreeRef = React.useRef(!1);
|
|
210
|
+
return React.useEffect(() => {
|
|
211
|
+
const handleFocus = event => {
|
|
212
|
+
event.target && !isFocusInsideReactTreeRef.current && handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, {
|
|
213
|
+
originalEvent: event
|
|
214
|
+
}, {
|
|
215
|
+
discrete: !1
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
return document.addEventListener("focusin", handleFocus), () => document.removeEventListener("focusin", handleFocus);
|
|
219
|
+
}, [handleFocusOutside]), {
|
|
220
|
+
onFocusCapture: () => {
|
|
221
|
+
isFocusInsideReactTreeRef.current = !0;
|
|
222
|
+
},
|
|
223
|
+
onBlurCapture: () => {
|
|
224
|
+
isFocusInsideReactTreeRef.current = !1;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function dispatchUpdate() {
|
|
229
|
+
const event = new CustomEvent(CONTEXT_UPDATE);
|
|
230
|
+
document.dispatchEvent(event);
|
|
231
|
+
}
|
|
232
|
+
function handleAndDispatchCustomEvent(name, handler, detail, {
|
|
233
|
+
discrete
|
|
234
|
+
}) {
|
|
235
|
+
const target = detail.originalEvent.target,
|
|
236
|
+
event = new CustomEvent(name, {
|
|
237
|
+
bubbles: !1,
|
|
238
|
+
cancelable: !0,
|
|
239
|
+
detail
|
|
240
|
+
});
|
|
241
|
+
handler && target.addEventListener(name, handler, {
|
|
242
|
+
once: !0
|
|
243
|
+
}), discrete ? dispatchDiscreteCustomEvent(target, event) : target.dispatchEvent(event);
|
|
244
|
+
}
|
|
245
|
+
export { Dismissable, DismissableBranch, debugDismissableLayers, dispatchDiscreteCustomEvent, getDismissableLayerCount, useDismissableLayersAbove, useHasDismissableLayers, useIsInsideDismissable };
|
|
246
|
+
//# sourceMappingURL=Dismissable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useComposedRefs","Slot","View","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","globalLayers","Set","layerChangeListeners","layersWithPointerEventsDisabledCount","notifyLayerChange","listener","getDismissableLayerCount","size","debugDismissableLayers","layers","Array","from","console","log","length","useHasDismissableLayers","count","setCount","useState","useEffect","update","add","delete","DismissableContext","createContext","layersWithOutsidePointerEventsDisabled","branches","useIsInsideDismissable","ref","context","useContext","isInside","setIsInside","check","el","current","layer","contains","document","addEventListener","removeEventListener","useDismissableLayersAbove","above","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","asChild","children","branchesProp","layerProps","Comp","node","setNode","force","composedRefs","node2","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","defaultPrevented","focusOutside","useFocusOutside","forceUnmountRef","useRef","currentLayers","preventDefault","body","style","pointerEvents","dispatchUpdate","hadPointerEventsDisabled","has","handleUpdate","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","rest","HTMLElement","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent","handleAndDispatchCustomEvent","eventDetail","discrete","originalEvent","pointerType","once","timerId","setTimeout","window","clearTimeout","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","CustomEvent","name","handler","detail","bubbles","cancelable"],"sources":["../../src/Dismissable.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
function dispatchDiscreteCustomEvent(_target, _event) {}
|
|
3
|
+
function getDismissableLayerCount() {
|
|
4
|
+
return 0;
|
|
5
|
+
}
|
|
6
|
+
function useHasDismissableLayers() {
|
|
7
|
+
return !1;
|
|
8
|
+
}
|
|
9
|
+
function useIsInsideDismissable(_ref) {
|
|
10
|
+
return !1;
|
|
11
|
+
}
|
|
12
|
+
function useDismissableLayersAbove(_ref) {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
var Dismissable = /* @__PURE__ */React.forwardRef(function (props, _ref) {
|
|
16
|
+
return props.children;
|
|
17
|
+
}),
|
|
18
|
+
DismissableBranch = /* @__PURE__ */React.forwardRef(function (props, _ref) {
|
|
19
|
+
return props.children;
|
|
20
|
+
});
|
|
21
|
+
export { Dismissable, DismissableBranch, dispatchDiscreteCustomEvent, getDismissableLayerCount, useDismissableLayersAbove, useHasDismissableLayers, useIsInsideDismissable };
|
|
22
|
+
//# sourceMappingURL=Dismissable.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","dispatchDiscreteCustomEvent","_target","_event","getDismissableLayerCount","useHasDismissableLayers","useIsInsideDismissable","_ref","useDismissableLayersAbove","Dismissable","forwardRef","props","children","DismissableBranch"],"sources":["../../src/Dismissable.native.tsx"],"sourcesContent":[null],"mappings":"AAAA,OAAOA,KAAA,MAAW;AAEX,SAASC,4BAA4BC,OAAA,EAASC,MAAA,EAAQ,CAAC;AACvD,SAASC,yBAAA,EAA2B;EACvC,OAAO;AACX;AACO,SAASC,wBAAA,EAA0B;EACtC,OAAO;AACX;AACO,SAASC,uBAAuBC,IAAA,EAAM;EACzC,OAAO;AACX;AACO,SAASC,0BAA0BD,IAAA,EAAM;EAC5C,OAAO;AACX;AACO,IAAIE,WAAA,GAA4B,eAAAT,KAAA,CAAMU,UAAA,CAAW,UAASC,KAAA,EAAOJ,IAAA,EAAM;IAC1E,OAAOI,KAAA,CAAMC,QAAA;EACjB,CAAC;EACUC,iBAAA,GAAkC,eAAAb,KAAA,CAAMU,UAAA,CAAW,UAASC,KAAA,EAAOJ,IAAA,EAAM;IAChF,OAAOI,KAAA,CAAMC,QAAA;EACjB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { useComposedRefs } from "@hanzo/gui-compose-refs";
|
|
2
|
+
import { Slot, View, composeEventHandlers } from "@hanzo/gui-core";
|
|
3
|
+
import { useEscapeKeydown } from "@hanzo/gui-use-escape-keydown";
|
|
4
|
+
import { useEvent } from "@hanzo/gui-use-event";
|
|
5
|
+
import * as React from "react";
|
|
6
|
+
import * as ReactDOM from "react-dom";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
function dispatchDiscreteCustomEvent(target, event) {
|
|
9
|
+
target && ReactDOM.flushSync(() => target.dispatchEvent(event));
|
|
10
|
+
}
|
|
11
|
+
const DISMISSABLE_LAYER_NAME = "Dismissable",
|
|
12
|
+
CONTEXT_UPDATE = "dismissable.update",
|
|
13
|
+
POINTER_DOWN_OUTSIDE = "dismissable.pointerDownOutside",
|
|
14
|
+
FOCUS_OUTSIDE = "dismissable.focusOutside";
|
|
15
|
+
let originalBodyPointerEvents;
|
|
16
|
+
const globalLayers = /* @__PURE__ */new Set(),
|
|
17
|
+
layerChangeListeners = /* @__PURE__ */new Set();
|
|
18
|
+
let layersWithPointerEventsDisabledCount = 0;
|
|
19
|
+
function notifyLayerChange() {
|
|
20
|
+
for (const listener of layerChangeListeners) listener();
|
|
21
|
+
}
|
|
22
|
+
function getDismissableLayerCount() {
|
|
23
|
+
return globalLayers.size;
|
|
24
|
+
}
|
|
25
|
+
function debugDismissableLayers() {
|
|
26
|
+
const layers = Array.from(globalLayers);
|
|
27
|
+
return console.log("[Dismissable] Active layers:", layers.length, layers), layers;
|
|
28
|
+
}
|
|
29
|
+
function useHasDismissableLayers() {
|
|
30
|
+
const [count, setCount] = React.useState(() => globalLayers.size);
|
|
31
|
+
return React.useEffect(() => {
|
|
32
|
+
setCount(globalLayers.size);
|
|
33
|
+
const update = () => setCount(globalLayers.size);
|
|
34
|
+
return layerChangeListeners.add(update), () => {
|
|
35
|
+
layerChangeListeners.delete(update);
|
|
36
|
+
};
|
|
37
|
+
}, []), count > 0;
|
|
38
|
+
}
|
|
39
|
+
const DismissableContext = React.createContext({
|
|
40
|
+
layers: /* @__PURE__ */new Set(),
|
|
41
|
+
layersWithOutsidePointerEventsDisabled: /* @__PURE__ */new Set(),
|
|
42
|
+
branches: /* @__PURE__ */new Set()
|
|
43
|
+
});
|
|
44
|
+
function useIsInsideDismissable(ref) {
|
|
45
|
+
const context = React.useContext(DismissableContext),
|
|
46
|
+
[isInside, setIsInside] = React.useState(!1);
|
|
47
|
+
return React.useEffect(() => {
|
|
48
|
+
const check = () => {
|
|
49
|
+
const el = ref.current;
|
|
50
|
+
if (!el) {
|
|
51
|
+
setIsInside(!1);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
for (const layer of context.layers) if (layer.contains(el)) {
|
|
55
|
+
setIsInside(!0);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
setIsInside(!1);
|
|
59
|
+
};
|
|
60
|
+
return check(), document.addEventListener(CONTEXT_UPDATE, check), () => document.removeEventListener(CONTEXT_UPDATE, check);
|
|
61
|
+
}, [context.layers, ref]), isInside;
|
|
62
|
+
}
|
|
63
|
+
function useDismissableLayersAbove(ref) {
|
|
64
|
+
const context = React.useContext(DismissableContext),
|
|
65
|
+
[count, setCount] = React.useState(0);
|
|
66
|
+
return React.useEffect(() => {
|
|
67
|
+
const check = () => {
|
|
68
|
+
const el = ref.current;
|
|
69
|
+
if (!el) {
|
|
70
|
+
setCount(0);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let above = 0;
|
|
74
|
+
for (const layer of context.layers) layer.contains(el) && above++;
|
|
75
|
+
setCount(above);
|
|
76
|
+
};
|
|
77
|
+
return check(), document.addEventListener(CONTEXT_UPDATE, check), () => document.removeEventListener(CONTEXT_UPDATE, check);
|
|
78
|
+
}, [context.layers, ref]), count;
|
|
79
|
+
}
|
|
80
|
+
const Dismissable = React.forwardRef((props, forwardedRef) => {
|
|
81
|
+
const {
|
|
82
|
+
disableOutsidePointerEvents = !1,
|
|
83
|
+
forceUnmount,
|
|
84
|
+
onEscapeKeyDown,
|
|
85
|
+
onPointerDownOutside,
|
|
86
|
+
onFocusOutside,
|
|
87
|
+
onInteractOutside,
|
|
88
|
+
onDismiss,
|
|
89
|
+
asChild,
|
|
90
|
+
children,
|
|
91
|
+
branches: branchesProp,
|
|
92
|
+
...layerProps
|
|
93
|
+
} = props,
|
|
94
|
+
Comp = asChild ? Slot : View,
|
|
95
|
+
context = React.useContext(DismissableContext),
|
|
96
|
+
[node, setNode] = React.useState(null),
|
|
97
|
+
[, force] = React.useState({}),
|
|
98
|
+
composedRefs = useComposedRefs(forwardedRef, node2 => setNode(node2)),
|
|
99
|
+
layers = Array.from(context.layers),
|
|
100
|
+
[highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1),
|
|
101
|
+
highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled),
|
|
102
|
+
index = node ? layers.indexOf(node) : -1,
|
|
103
|
+
isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0,
|
|
104
|
+
isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex,
|
|
105
|
+
pointerDownOutside = usePointerDownOutside(event => {
|
|
106
|
+
const target = event.target,
|
|
107
|
+
isPointerDownOnBranch = [...(branchesProp || context.branches)].some(branch => branch.contains(target));
|
|
108
|
+
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
109
|
+
}),
|
|
110
|
+
focusOutside = useFocusOutside(event => {
|
|
111
|
+
const target = event.target;
|
|
112
|
+
[...(branchesProp || context.branches)].some(branch => branch.contains(target)) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
113
|
+
}),
|
|
114
|
+
forceUnmountRef = React.useRef(forceUnmount);
|
|
115
|
+
return React.useEffect(() => {
|
|
116
|
+
forceUnmountRef.current = forceUnmount;
|
|
117
|
+
}, [forceUnmount]), useEscapeKeydown(event => {
|
|
118
|
+
if (forceUnmountRef.current) return;
|
|
119
|
+
const currentLayers = Array.from(context.layers);
|
|
120
|
+
(node ? currentLayers.indexOf(node) : -1) === currentLayers.length - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
121
|
+
}), React.useEffect(() => {
|
|
122
|
+
if (node && !forceUnmount) return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node), layersWithPointerEventsDisabledCount++), context.layers.add(node), globalLayers.add(node), (disableOutsidePointerEvents || layersWithPointerEventsDisabledCount > 0) && dispatchUpdate(), notifyLayerChange(), () => {
|
|
123
|
+
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
124
|
+
};
|
|
125
|
+
}, [node, disableOutsidePointerEvents, forceUnmount, context]), React.useEffect(() => {
|
|
126
|
+
if (!forceUnmount) return () => {
|
|
127
|
+
if (!node) return;
|
|
128
|
+
const hadPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.has(node);
|
|
129
|
+
context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), globalLayers.delete(node), layersWithPointerEventsDisabledCount > 0 && dispatchUpdate(), notifyLayerChange(), hadPointerEventsDisabled && layersWithPointerEventsDisabledCount--;
|
|
130
|
+
};
|
|
131
|
+
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
132
|
+
const handleUpdate = () => {
|
|
133
|
+
layersWithPointerEventsDisabledCount > 0 && force({});
|
|
134
|
+
};
|
|
135
|
+
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
136
|
+
}, []), /* @__PURE__ */jsx(Comp, {
|
|
137
|
+
...layerProps,
|
|
138
|
+
ref: composedRefs,
|
|
139
|
+
...(!asChild && {
|
|
140
|
+
display: "contents"
|
|
141
|
+
}),
|
|
142
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
143
|
+
onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
144
|
+
onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
145
|
+
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture),
|
|
146
|
+
children
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
150
|
+
const BRANCH_NAME = "DismissableBranch",
|
|
151
|
+
DismissableBranch = React.forwardRef((props, forwardedRef) => {
|
|
152
|
+
const {
|
|
153
|
+
branches: branchesProp,
|
|
154
|
+
...rest
|
|
155
|
+
} = props,
|
|
156
|
+
context = React.useContext(DismissableContext),
|
|
157
|
+
ref = React.useRef(null),
|
|
158
|
+
composedRefs = useComposedRefs(forwardedRef, ref);
|
|
159
|
+
return React.useEffect(() => {
|
|
160
|
+
const node = ref.current;
|
|
161
|
+
if (!(node instanceof HTMLElement)) return;
|
|
162
|
+
const branches = branchesProp || context.branches;
|
|
163
|
+
if (node && branches) return branches.add(node), () => {
|
|
164
|
+
branches.delete(node);
|
|
165
|
+
};
|
|
166
|
+
}, [branchesProp, context.branches]), /* @__PURE__ */jsx(View, {
|
|
167
|
+
asChild: "except-style",
|
|
168
|
+
...rest,
|
|
169
|
+
ref: composedRefs
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
DismissableBranch.displayName = BRANCH_NAME;
|
|
173
|
+
function usePointerDownOutside(onPointerDownOutside) {
|
|
174
|
+
const handlePointerDownOutside = useEvent(onPointerDownOutside),
|
|
175
|
+
isPointerInsideReactTreeRef = React.useRef(!1),
|
|
176
|
+
handleClickRef = React.useRef(() => {});
|
|
177
|
+
return React.useEffect(() => {
|
|
178
|
+
const handlePointerDown = event => {
|
|
179
|
+
if (event.target && !isPointerInsideReactTreeRef.current) {
|
|
180
|
+
let handleAndDispatchPointerDownOutsideEvent = function () {
|
|
181
|
+
handleAndDispatchCustomEvent(POINTER_DOWN_OUTSIDE, handlePointerDownOutside, eventDetail, {
|
|
182
|
+
discrete: !0
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
const eventDetail = {
|
|
186
|
+
originalEvent: event
|
|
187
|
+
};
|
|
188
|
+
event.pointerType === "touch" ? (document.removeEventListener("click", handleClickRef.current), handleClickRef.current = handleAndDispatchPointerDownOutsideEvent, document.addEventListener("click", handleClickRef.current, {
|
|
189
|
+
once: !0
|
|
190
|
+
})) : handleAndDispatchPointerDownOutsideEvent();
|
|
191
|
+
}
|
|
192
|
+
isPointerInsideReactTreeRef.current = !1;
|
|
193
|
+
},
|
|
194
|
+
timerId = setTimeout(() => {
|
|
195
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
196
|
+
}, 0);
|
|
197
|
+
return () => {
|
|
198
|
+
window.clearTimeout(timerId), document.removeEventListener("pointerdown", handlePointerDown), document.removeEventListener("click", handleClickRef.current);
|
|
199
|
+
};
|
|
200
|
+
}, [handlePointerDownOutside]), {
|
|
201
|
+
// ensures we check React component tree (not just DOM tree)
|
|
202
|
+
onPointerDownCapture: () => {
|
|
203
|
+
isPointerInsideReactTreeRef.current = !0;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
function useFocusOutside(onFocusOutside) {
|
|
208
|
+
const handleFocusOutside = useEvent(onFocusOutside),
|
|
209
|
+
isFocusInsideReactTreeRef = React.useRef(!1);
|
|
210
|
+
return React.useEffect(() => {
|
|
211
|
+
const handleFocus = event => {
|
|
212
|
+
event.target && !isFocusInsideReactTreeRef.current && handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, {
|
|
213
|
+
originalEvent: event
|
|
214
|
+
}, {
|
|
215
|
+
discrete: !1
|
|
216
|
+
});
|
|
217
|
+
};
|
|
218
|
+
return document.addEventListener("focusin", handleFocus), () => document.removeEventListener("focusin", handleFocus);
|
|
219
|
+
}, [handleFocusOutside]), {
|
|
220
|
+
onFocusCapture: () => {
|
|
221
|
+
isFocusInsideReactTreeRef.current = !0;
|
|
222
|
+
},
|
|
223
|
+
onBlurCapture: () => {
|
|
224
|
+
isFocusInsideReactTreeRef.current = !1;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
function dispatchUpdate() {
|
|
229
|
+
const event = new CustomEvent(CONTEXT_UPDATE);
|
|
230
|
+
document.dispatchEvent(event);
|
|
231
|
+
}
|
|
232
|
+
function handleAndDispatchCustomEvent(name, handler, detail, {
|
|
233
|
+
discrete
|
|
234
|
+
}) {
|
|
235
|
+
const target = detail.originalEvent.target,
|
|
236
|
+
event = new CustomEvent(name, {
|
|
237
|
+
bubbles: !1,
|
|
238
|
+
cancelable: !0,
|
|
239
|
+
detail
|
|
240
|
+
});
|
|
241
|
+
handler && target.addEventListener(name, handler, {
|
|
242
|
+
once: !0
|
|
243
|
+
}), discrete ? dispatchDiscreteCustomEvent(target, event) : target.dispatchEvent(event);
|
|
244
|
+
}
|
|
245
|
+
export { Dismissable, DismissableBranch, debugDismissableLayers, dispatchDiscreteCustomEvent, getDismissableLayerCount, useDismissableLayersAbove, useHasDismissableLayers, useIsInsideDismissable };
|
|
246
|
+
//# sourceMappingURL=Dismissable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useComposedRefs","Slot","View","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","globalLayers","Set","layerChangeListeners","layersWithPointerEventsDisabledCount","notifyLayerChange","listener","getDismissableLayerCount","size","debugDismissableLayers","layers","Array","from","console","log","length","useHasDismissableLayers","count","setCount","useState","useEffect","update","add","delete","DismissableContext","createContext","layersWithOutsidePointerEventsDisabled","branches","useIsInsideDismissable","ref","context","useContext","isInside","setIsInside","check","el","current","layer","contains","document","addEventListener","removeEventListener","useDismissableLayersAbove","above","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","asChild","children","branchesProp","layerProps","Comp","node","setNode","force","composedRefs","node2","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","defaultPrevented","focusOutside","useFocusOutside","forceUnmountRef","useRef","currentLayers","preventDefault","body","style","pointerEvents","dispatchUpdate","hadPointerEventsDisabled","has","handleUpdate","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","rest","HTMLElement","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent","handleAndDispatchCustomEvent","eventDetail","discrete","originalEvent","pointerType","once","timerId","setTimeout","window","clearTimeout","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","CustomEvent","name","handler","detail","bubbles","cancelable"],"sources":["../../src/Dismissable.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|