@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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/Dismissable.cjs +287 -0
  3. package/dist/cjs/Dismissable.native.js +65 -0
  4. package/dist/cjs/Dismissable.native.js.map +1 -0
  5. package/dist/cjs/DismissableProps.cjs +16 -0
  6. package/dist/cjs/DismissableProps.native.js +19 -0
  7. package/dist/cjs/DismissableProps.native.js.map +1 -0
  8. package/dist/cjs/index.cjs +18 -0
  9. package/dist/cjs/index.native.js +21 -0
  10. package/dist/cjs/index.native.js.map +1 -0
  11. package/dist/esm/Dismissable.mjs +246 -0
  12. package/dist/esm/Dismissable.mjs.map +1 -0
  13. package/dist/esm/Dismissable.native.js +22 -0
  14. package/dist/esm/Dismissable.native.js.map +1 -0
  15. package/dist/esm/DismissableProps.mjs +2 -0
  16. package/dist/esm/DismissableProps.mjs.map +1 -0
  17. package/dist/esm/DismissableProps.native.js +2 -0
  18. package/dist/esm/DismissableProps.native.js.map +1 -0
  19. package/dist/esm/index.js +2 -0
  20. package/dist/esm/index.js.map +1 -0
  21. package/dist/esm/index.mjs +2 -0
  22. package/dist/esm/index.mjs.map +1 -0
  23. package/dist/esm/index.native.js +2 -0
  24. package/dist/esm/index.native.js.map +1 -0
  25. package/dist/jsx/Dismissable.mjs +246 -0
  26. package/dist/jsx/Dismissable.mjs.map +1 -0
  27. package/dist/jsx/Dismissable.native.js +65 -0
  28. package/dist/jsx/Dismissable.native.js.map +1 -0
  29. package/dist/jsx/DismissableProps.mjs +2 -0
  30. package/dist/jsx/DismissableProps.mjs.map +1 -0
  31. package/dist/jsx/DismissableProps.native.js +19 -0
  32. package/dist/jsx/DismissableProps.native.js.map +1 -0
  33. package/dist/jsx/index.js +2 -0
  34. package/dist/jsx/index.js.map +1 -0
  35. package/dist/jsx/index.mjs +2 -0
  36. package/dist/jsx/index.mjs.map +1 -0
  37. package/dist/jsx/index.native.js +21 -0
  38. package/dist/jsx/index.native.js.map +1 -0
  39. package/package.json +53 -0
  40. package/src/Dismissable.native.tsx +39 -0
  41. package/src/Dismissable.tsx +507 -0
  42. package/src/DismissableProps.tsx +63 -0
  43. package/src/index.ts +1 -0
  44. package/types/Dismissable.d.ts +42 -0
  45. package/types/Dismissable.native.d.ts +10 -0
  46. package/types/DismissableProps.d.ts +57 -0
  47. 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,2 @@
1
+
2
+ //# sourceMappingURL=DismissableProps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=DismissableProps.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./Dismissable.mjs";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./Dismissable.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./Dismissable.native.js";
2
+ //# sourceMappingURL=index.native.js.map
@@ -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":[]}