@tamagui/dismissable 1.142.0 → 2.0.0-1
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/dist/cjs/Dismissable.cjs +11 -11
- package/dist/cjs/Dismissable.js +67 -70
- package/dist/cjs/Dismissable.js.map +1 -1
- package/dist/esm/Dismissable.js +67 -70
- package/dist/esm/Dismissable.js.map +1 -1
- package/dist/esm/Dismissable.mjs +9 -9
- package/dist/esm/Dismissable.mjs.map +1 -1
- package/dist/jsx/Dismissable.js +67 -70
- package/dist/jsx/Dismissable.js.map +1 -1
- package/dist/jsx/Dismissable.mjs +9 -9
- package/dist/jsx/Dismissable.mjs.map +1 -1
- package/package.json +7 -7
- package/src/Dismissable.tsx +137 -133
- package/src/DismissableProps.tsx +1 -1
- package/types/Dismissable.d.ts +3 -1
- package/types/Dismissable.d.ts.map +1 -1
- package/types/DismissableProps.d.ts +1 -1
- package/types/DismissableProps.d.ts.map +1 -1
package/dist/cjs/Dismissable.cjs
CHANGED
|
@@ -37,7 +37,7 @@ __export(Dismissable_exports, {
|
|
|
37
37
|
});
|
|
38
38
|
module.exports = __toCommonJS(Dismissable_exports);
|
|
39
39
|
var import_compose_refs = require("@tamagui/compose-refs"),
|
|
40
|
-
|
|
40
|
+
import_core = require("@tamagui/core"),
|
|
41
41
|
import_use_escape_keydown = require("@tamagui/use-escape-keydown"),
|
|
42
42
|
import_use_event = require("@tamagui/use-event"),
|
|
43
43
|
React = __toESM(require("react"), 1),
|
|
@@ -65,8 +65,11 @@ const DismissableContext = React.createContext({
|
|
|
65
65
|
onFocusOutside,
|
|
66
66
|
onInteractOutside,
|
|
67
67
|
onDismiss,
|
|
68
|
+
asChild,
|
|
69
|
+
children,
|
|
68
70
|
...layerProps
|
|
69
71
|
} = props,
|
|
72
|
+
Comp = asChild ? import_core.Slot : import_core.Stack,
|
|
70
73
|
context = React.useContext(DismissableContext),
|
|
71
74
|
[node, setNode] = React.useState(null),
|
|
72
75
|
[, force] = React.useState({}),
|
|
@@ -101,18 +104,15 @@ const DismissableContext = React.createContext({
|
|
|
101
104
|
force({});
|
|
102
105
|
};
|
|
103
106
|
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
104
|
-
}, []), /* @__PURE__ */(0, import_jsx_runtime.jsx)(
|
|
107
|
+
}, []), /* @__PURE__ */(0, import_jsx_runtime.jsx)(Comp, {
|
|
105
108
|
...layerProps,
|
|
106
109
|
ref: composedRefs,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
onFocusCapture: (0, import_helpers.composeEventHandlers)(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
114
|
-
onBlurCapture: (0, import_helpers.composeEventHandlers)(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
115
|
-
onPointerDownCapture: (0, import_helpers.composeEventHandlers)(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture)
|
|
110
|
+
display: "contents",
|
|
111
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
112
|
+
onFocusCapture: (0, import_core.composeEventHandlers)(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
113
|
+
onBlurCapture: (0, import_core.composeEventHandlers)(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
114
|
+
onPointerDownCapture: (0, import_core.composeEventHandlers)(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture),
|
|
115
|
+
children
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
118
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
package/dist/cjs/Dismissable.js
CHANGED
|
@@ -27,7 +27,7 @@ __export(Dismissable_exports, {
|
|
|
27
27
|
dispatchDiscreteCustomEvent: () => dispatchDiscreteCustomEvent
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(Dismissable_exports);
|
|
30
|
-
var import_compose_refs = require("@tamagui/compose-refs"),
|
|
30
|
+
var import_compose_refs = require("@tamagui/compose-refs"), import_core = require("@tamagui/core"), import_use_escape_keydown = require("@tamagui/use-escape-keydown"), import_use_event = require("@tamagui/use-event"), React = __toESM(require("react"), 1), ReactDOM = __toESM(require("react-dom"), 1), import_jsx_runtime = require("react/jsx-runtime");
|
|
31
31
|
function dispatchDiscreteCustomEvent(target, event) {
|
|
32
32
|
target && ReactDOM.flushSync(() => target.dispatchEvent(event));
|
|
33
33
|
}
|
|
@@ -37,76 +37,73 @@ const DismissableContext = React.createContext({
|
|
|
37
37
|
layers: /* @__PURE__ */ new Set(),
|
|
38
38
|
layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),
|
|
39
39
|
branches: /* @__PURE__ */ new Set()
|
|
40
|
-
}), Dismissable = React.forwardRef(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
)
|
|
59
|
-
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
60
|
-
}), focusOutside = useFocusOutside((event) => {
|
|
61
|
-
const target = event.target;
|
|
62
|
-
[...context.branches].some(
|
|
63
|
-
(branch) => branch.contains(target)
|
|
64
|
-
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
65
|
-
});
|
|
66
|
-
return (0, import_use_escape_keydown.useEscapeKeydown)((event) => {
|
|
67
|
-
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
68
|
-
}), React.useEffect(() => {
|
|
69
|
-
if (node)
|
|
70
|
-
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
71
|
-
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
72
|
-
};
|
|
73
|
-
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
74
|
-
if (!forceUnmount)
|
|
75
|
-
return () => {
|
|
76
|
-
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
77
|
-
};
|
|
78
|
-
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
79
|
-
const handleUpdate = () => {
|
|
80
|
-
force({});
|
|
81
|
-
};
|
|
82
|
-
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
83
|
-
}, []), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
84
|
-
"div",
|
|
85
|
-
{
|
|
86
|
-
...layerProps,
|
|
87
|
-
ref: composedRefs,
|
|
88
|
-
style: {
|
|
89
|
-
display: "contents",
|
|
90
|
-
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
91
|
-
// @ts-ignore
|
|
92
|
-
...props.style
|
|
93
|
-
},
|
|
94
|
-
onFocusCapture: (0, import_helpers.composeEventHandlers)(
|
|
95
|
-
props.onFocusCapture,
|
|
96
|
-
focusOutside.onFocusCapture
|
|
97
|
-
),
|
|
98
|
-
onBlurCapture: (0, import_helpers.composeEventHandlers)(
|
|
99
|
-
props.onBlurCapture,
|
|
100
|
-
focusOutside.onBlurCapture
|
|
101
|
-
),
|
|
102
|
-
onPointerDownCapture: (0, import_helpers.composeEventHandlers)(
|
|
103
|
-
props.onPointerDownCapture,
|
|
104
|
-
pointerDownOutside.onPointerDownCapture
|
|
105
|
-
)
|
|
106
|
-
}
|
|
40
|
+
}), Dismissable = React.forwardRef((props, forwardedRef) => {
|
|
41
|
+
const {
|
|
42
|
+
disableOutsidePointerEvents = !1,
|
|
43
|
+
forceUnmount,
|
|
44
|
+
onEscapeKeyDown,
|
|
45
|
+
onPointerDownOutside,
|
|
46
|
+
onFocusOutside,
|
|
47
|
+
onInteractOutside,
|
|
48
|
+
onDismiss,
|
|
49
|
+
asChild,
|
|
50
|
+
children,
|
|
51
|
+
...layerProps
|
|
52
|
+
} = props, Comp = asChild ? import_core.Slot : import_core.Stack, context = React.useContext(DismissableContext), [node, setNode] = React.useState(null), [, force] = React.useState({}), composedRefs = (0, import_compose_refs.useComposedRefs)(forwardedRef, (node2) => setNode(node2)), layers = Array.from(context.layers), [highestLayerWithOutsidePointerEventsDisabled] = [
|
|
53
|
+
...context.layersWithOutsidePointerEventsDisabled
|
|
54
|
+
].slice(-1), highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(
|
|
55
|
+
highestLayerWithOutsidePointerEventsDisabled
|
|
56
|
+
), index = node ? layers.indexOf(node) : -1, isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0, isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex, pointerDownOutside = usePointerDownOutside((event) => {
|
|
57
|
+
const target = event.target, isPointerDownOnBranch = [...context.branches].some(
|
|
58
|
+
(branch) => branch.contains(target)
|
|
107
59
|
);
|
|
108
|
-
|
|
109
|
-
)
|
|
60
|
+
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
61
|
+
}), focusOutside = useFocusOutside((event) => {
|
|
62
|
+
const target = event.target;
|
|
63
|
+
[...context.branches].some(
|
|
64
|
+
(branch) => branch.contains(target)
|
|
65
|
+
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
66
|
+
});
|
|
67
|
+
return (0, import_use_escape_keydown.useEscapeKeydown)((event) => {
|
|
68
|
+
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
69
|
+
}), React.useEffect(() => {
|
|
70
|
+
if (node)
|
|
71
|
+
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
72
|
+
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
73
|
+
};
|
|
74
|
+
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
75
|
+
if (!forceUnmount)
|
|
76
|
+
return () => {
|
|
77
|
+
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
78
|
+
};
|
|
79
|
+
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
80
|
+
const handleUpdate = () => {
|
|
81
|
+
force({});
|
|
82
|
+
};
|
|
83
|
+
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
84
|
+
}, []), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
85
|
+
Comp,
|
|
86
|
+
{
|
|
87
|
+
...layerProps,
|
|
88
|
+
ref: composedRefs,
|
|
89
|
+
display: "contents",
|
|
90
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
91
|
+
onFocusCapture: (0, import_core.composeEventHandlers)(
|
|
92
|
+
props.onFocusCapture,
|
|
93
|
+
focusOutside.onFocusCapture
|
|
94
|
+
),
|
|
95
|
+
onBlurCapture: (0, import_core.composeEventHandlers)(
|
|
96
|
+
props.onBlurCapture,
|
|
97
|
+
focusOutside.onBlurCapture
|
|
98
|
+
),
|
|
99
|
+
onPointerDownCapture: (0, import_core.composeEventHandlers)(
|
|
100
|
+
props.onPointerDownCapture,
|
|
101
|
+
pointerDownOutside.onPointerDownCapture
|
|
102
|
+
),
|
|
103
|
+
children
|
|
104
|
+
}
|
|
105
|
+
);
|
|
106
|
+
});
|
|
110
107
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
111
108
|
const BRANCH_NAME = "DismissableBranch", DismissableBranch = React.forwardRef(
|
|
112
109
|
(props, forwardedRef) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Dismissable.tsx"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,0BAAgC,kCAChC,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["node"]
|
|
6
6
|
}
|
package/dist/esm/Dismissable.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
-
import { composeEventHandlers } from "@tamagui/
|
|
2
|
+
import { Slot, Stack, composeEventHandlers } from "@tamagui/core";
|
|
3
3
|
import { useEscapeKeydown } from "@tamagui/use-escape-keydown";
|
|
4
4
|
import { useEvent } from "@tamagui/use-event";
|
|
5
5
|
import * as React from "react";
|
|
@@ -14,76 +14,73 @@ const DismissableContext = React.createContext({
|
|
|
14
14
|
layers: /* @__PURE__ */ new Set(),
|
|
15
15
|
layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),
|
|
16
16
|
branches: /* @__PURE__ */ new Set()
|
|
17
|
-
}), Dismissable = React.forwardRef(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
37
|
-
}), focusOutside = useFocusOutside((event) => {
|
|
38
|
-
const target = event.target;
|
|
39
|
-
[...context.branches].some(
|
|
40
|
-
(branch) => branch.contains(target)
|
|
41
|
-
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
42
|
-
});
|
|
43
|
-
return useEscapeKeydown((event) => {
|
|
44
|
-
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
45
|
-
}), React.useEffect(() => {
|
|
46
|
-
if (node)
|
|
47
|
-
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
48
|
-
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
49
|
-
};
|
|
50
|
-
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
51
|
-
if (!forceUnmount)
|
|
52
|
-
return () => {
|
|
53
|
-
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
54
|
-
};
|
|
55
|
-
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
56
|
-
const handleUpdate = () => {
|
|
57
|
-
force({});
|
|
58
|
-
};
|
|
59
|
-
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
60
|
-
}, []), /* @__PURE__ */ jsx(
|
|
61
|
-
"div",
|
|
62
|
-
{
|
|
63
|
-
...layerProps,
|
|
64
|
-
ref: composedRefs,
|
|
65
|
-
style: {
|
|
66
|
-
display: "contents",
|
|
67
|
-
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
68
|
-
// @ts-ignore
|
|
69
|
-
...props.style
|
|
70
|
-
},
|
|
71
|
-
onFocusCapture: composeEventHandlers(
|
|
72
|
-
props.onFocusCapture,
|
|
73
|
-
focusOutside.onFocusCapture
|
|
74
|
-
),
|
|
75
|
-
onBlurCapture: composeEventHandlers(
|
|
76
|
-
props.onBlurCapture,
|
|
77
|
-
focusOutside.onBlurCapture
|
|
78
|
-
),
|
|
79
|
-
onPointerDownCapture: composeEventHandlers(
|
|
80
|
-
props.onPointerDownCapture,
|
|
81
|
-
pointerDownOutside.onPointerDownCapture
|
|
82
|
-
)
|
|
83
|
-
}
|
|
17
|
+
}), Dismissable = React.forwardRef((props, forwardedRef) => {
|
|
18
|
+
const {
|
|
19
|
+
disableOutsidePointerEvents = !1,
|
|
20
|
+
forceUnmount,
|
|
21
|
+
onEscapeKeyDown,
|
|
22
|
+
onPointerDownOutside,
|
|
23
|
+
onFocusOutside,
|
|
24
|
+
onInteractOutside,
|
|
25
|
+
onDismiss,
|
|
26
|
+
asChild,
|
|
27
|
+
children,
|
|
28
|
+
...layerProps
|
|
29
|
+
} = props, Comp = asChild ? Slot : Stack, context = React.useContext(DismissableContext), [node, setNode] = React.useState(null), [, force] = React.useState({}), composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)), layers = Array.from(context.layers), [highestLayerWithOutsidePointerEventsDisabled] = [
|
|
30
|
+
...context.layersWithOutsidePointerEventsDisabled
|
|
31
|
+
].slice(-1), highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(
|
|
32
|
+
highestLayerWithOutsidePointerEventsDisabled
|
|
33
|
+
), index = node ? layers.indexOf(node) : -1, isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0, isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex, pointerDownOutside = usePointerDownOutside((event) => {
|
|
34
|
+
const target = event.target, isPointerDownOnBranch = [...context.branches].some(
|
|
35
|
+
(branch) => branch.contains(target)
|
|
84
36
|
);
|
|
85
|
-
|
|
86
|
-
)
|
|
37
|
+
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
38
|
+
}), focusOutside = useFocusOutside((event) => {
|
|
39
|
+
const target = event.target;
|
|
40
|
+
[...context.branches].some(
|
|
41
|
+
(branch) => branch.contains(target)
|
|
42
|
+
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
43
|
+
});
|
|
44
|
+
return useEscapeKeydown((event) => {
|
|
45
|
+
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
46
|
+
}), React.useEffect(() => {
|
|
47
|
+
if (node)
|
|
48
|
+
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
49
|
+
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
50
|
+
};
|
|
51
|
+
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
52
|
+
if (!forceUnmount)
|
|
53
|
+
return () => {
|
|
54
|
+
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
55
|
+
};
|
|
56
|
+
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
57
|
+
const handleUpdate = () => {
|
|
58
|
+
force({});
|
|
59
|
+
};
|
|
60
|
+
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
61
|
+
}, []), /* @__PURE__ */ jsx(
|
|
62
|
+
Comp,
|
|
63
|
+
{
|
|
64
|
+
...layerProps,
|
|
65
|
+
ref: composedRefs,
|
|
66
|
+
display: "contents",
|
|
67
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
68
|
+
onFocusCapture: composeEventHandlers(
|
|
69
|
+
props.onFocusCapture,
|
|
70
|
+
focusOutside.onFocusCapture
|
|
71
|
+
),
|
|
72
|
+
onBlurCapture: composeEventHandlers(
|
|
73
|
+
props.onBlurCapture,
|
|
74
|
+
focusOutside.onBlurCapture
|
|
75
|
+
),
|
|
76
|
+
onPointerDownCapture: composeEventHandlers(
|
|
77
|
+
props.onPointerDownCapture,
|
|
78
|
+
pointerDownOutside.onPointerDownCapture
|
|
79
|
+
),
|
|
80
|
+
children
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
});
|
|
87
84
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
88
85
|
const BRANCH_NAME = "DismissableBranch", DismissableBranch = React.forwardRef(
|
|
89
86
|
(props, forwardedRef) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Dismissable.tsx"],
|
|
4
|
-
"mappings": "AAGA,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["node"]
|
|
6
6
|
}
|
package/dist/esm/Dismissable.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
-
import { composeEventHandlers } from "@tamagui/
|
|
2
|
+
import { Slot, Stack, composeEventHandlers } from "@tamagui/core";
|
|
3
3
|
import { useEscapeKeydown } from "@tamagui/use-escape-keydown";
|
|
4
4
|
import { useEvent } from "@tamagui/use-event";
|
|
5
5
|
import * as React from "react";
|
|
@@ -27,8 +27,11 @@ const DismissableContext = React.createContext({
|
|
|
27
27
|
onFocusOutside,
|
|
28
28
|
onInteractOutside,
|
|
29
29
|
onDismiss,
|
|
30
|
+
asChild,
|
|
31
|
+
children,
|
|
30
32
|
...layerProps
|
|
31
33
|
} = props,
|
|
34
|
+
Comp = asChild ? Slot : Stack,
|
|
32
35
|
context = React.useContext(DismissableContext),
|
|
33
36
|
[node, setNode] = React.useState(null),
|
|
34
37
|
[, force] = React.useState({}),
|
|
@@ -63,18 +66,15 @@ const DismissableContext = React.createContext({
|
|
|
63
66
|
force({});
|
|
64
67
|
};
|
|
65
68
|
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
66
|
-
}, []), /* @__PURE__ */jsx(
|
|
69
|
+
}, []), /* @__PURE__ */jsx(Comp, {
|
|
67
70
|
...layerProps,
|
|
68
71
|
ref: composedRefs,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
72
|
-
// @ts-ignore
|
|
73
|
-
...props.style
|
|
74
|
-
},
|
|
72
|
+
display: "contents",
|
|
73
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
75
74
|
onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
76
75
|
onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
77
|
-
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture)
|
|
76
|
+
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture),
|
|
77
|
+
children
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useComposedRefs","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableContext","createContext","layers","Set","layersWithOutsidePointerEventsDisabled","branches","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","context","useContext","node","setNode","useState","force","composedRefs","node2","Array","from","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","size","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","defaultPrevented","focusOutside","useFocusOutside","preventDefault","useEffect","document","body","style","pointerEvents","add","dispatchUpdate","delete","handleUpdate","addEventListener","removeEventListener","ref","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","useRef","current","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":"AAGA,SAASA,eAAA,QAAuB;AAChC,SAASC,oBAAA,QAA4B;
|
|
1
|
+
{"version":3,"names":["useComposedRefs","Slot","Stack","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableContext","createContext","layers","Set","layersWithOutsidePointerEventsDisabled","branches","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","asChild","children","layerProps","Comp","context","useContext","node","setNode","useState","force","composedRefs","node2","Array","from","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","size","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","defaultPrevented","focusOutside","useFocusOutside","preventDefault","useEffect","document","body","style","pointerEvents","add","dispatchUpdate","delete","handleUpdate","addEventListener","removeEventListener","ref","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","useRef","current","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":"AAGA,SAASA,eAAA,QAAuB;AAChC,SAASC,IAAA,EAAMC,KAAA,EAAOC,oBAAA,QAA4B;AAClD,SAASC,gBAAA,QAAwB;AACjC,SAASC,QAAA,QAAgB;AACzB,YAAYC,KAAA,MAAW;AACvB,YAAYC,QAAA,MAAc;AA8ItB,SAAAC,GAAA;AA1IG,SAASC,4BACdC,MAAA,EACAC,KAAA,EACA;EACID,MAAA,IAAQH,QAAA,CAASK,SAAA,CAAU,MAAMF,MAAA,CAAOG,aAAA,CAAcF,KAAK,CAAC;AAClE;AAMA,MAAMG,sBAAA,GAAyB;EACzBC,cAAA,GAAiB;EACjBC,oBAAA,GAAuB;EACvBC,aAAA,GAAgB;AAEtB,IAAIC,yBAAA;AAEJ,MAAMC,kBAAA,GAAqBb,KAAA,CAAMc,aAAA,CAAc;IAC7CC,MAAA,EAAQ,mBAAIC,GAAA,CAAoB;IAChCC,sCAAA,EAAwC,mBAAID,GAAA,CAAoB;IAChEE,QAAA,EAAU,mBAAIF,GAAA,CAAoB;EACpC,CAAC;EAEKG,WAAA,GAAcnB,KAAA,CAAMoB,UAAA,CAGxB,CAACC,KAAA,EAAOC,YAAA,KAAiB;IACzB,MAAM;QACJC,2BAAA,GAA8B;QAC9BC,YAAA;QACAC,eAAA;QACAC,oBAAA;QACAC,cAAA;QACAC,iBAAA;QACAC,SAAA;QACAC,OAAA;QACAC,QAAA;QACA,GAAGC;MACL,IAAIX,KAAA;MACEY,IAAA,GAAQH,OAAA,GAAUnC,IAAA,GAAOC,KAAA;MACzBsC,OAAA,GAAUlC,KAAA,CAAMmC,UAAA,CAAWtB,kBAAkB;MAC7C,CAACuB,IAAA,EAAMC,OAAO,IAAIrC,KAAA,CAAMsC,QAAA,CAAgC,IAAI;MAC5D,GAAGC,KAAK,IAAIvC,KAAA,CAAMsC,QAAA,CAAS,CAAC,CAAC;MAC7BE,YAAA,GAAe9C,eAAA,CAAgB4B,YAAA,EAAemB,KAAA,IAASJ,OAAA,CAAQI,KAAI,CAAC;MACpE1B,MAAA,GAAS2B,KAAA,CAAMC,IAAA,CAAKT,OAAA,CAAQnB,MAAM;MAElC,CAAC6B,4CAA4C,IAAI,CACrD,GAAGV,OAAA,CAAQjB,sCAAA,CACb,CAAE4B,KAAA,CAAM,EAAE;MACJC,iDAAA,GAAoD/B,MAAA,CAAOgC,OAAA,CAC/DH,4CACF;MAEMI,KAAA,GAAQZ,IAAA,GAAOrB,MAAA,CAAOgC,OAAA,CAAQX,IAAI,IAAI;MACtCa,2BAAA,GACJf,OAAA,CAAQjB,sCAAA,CAAuCiC,IAAA,GAAO;MAClDC,sBAAA,GACJH,KAAA,IAASF,iDAAA;MAELM,kBAAA,GAAqBC,qBAAA,CAAuBhD,KAAA,IAAU;QAC1D,MAAMD,MAAA,GAASC,KAAA,CAAMD,MAAA;UACfkD,qBAAA,GAAwB,CAAC,GAAGpB,OAAA,CAAQhB,QAAQ,EAAEqC,IAAA,CAAMC,MAAA,IACxDA,MAAA,CAAOC,QAAA,CAASrD,MAAM,CACxB;QACI,CAAC+C,sBAAA,IAA0BG,qBAAA,KAC/B5B,oBAAA,GAAuBrB,KAAK,GAC5BuB,iBAAA,GAAoBvB,KAAK,GACpBA,KAAA,CAAMqD,gBAAA,IAAkB7B,SAAA,GAAY;MAC3C,CAAC;MAEK8B,YAAA,GAAeC,eAAA,CAAiBvD,KAAA,IAAU;QAC9C,MAAMD,MAAA,GAASC,KAAA,CAAMD,MAAA;QACG,CAAC,GAAG8B,OAAA,CAAQhB,QAAQ,EAAEqC,IAAA,CAAMC,MAAA,IAClDA,MAAA,CAAOC,QAAA,CAASrD,MAAM,CACxB,MAEAuB,cAAA,GAAiBtB,KAAK,GACtBuB,iBAAA,GAAoBvB,KAAK,GACpBA,KAAA,CAAMqD,gBAAA,IAAkB7B,SAAA,GAAY;MAC3C,CAAC;IAED,OAAA/B,gBAAA,CAAkBO,KAAA,IAAU;MACH2C,KAAA,KAAUd,OAAA,CAAQnB,MAAA,CAAOmC,IAAA,GAAO,MAEvDzB,eAAA,GAAkBpB,KAAK,GACnB,CAACA,KAAA,CAAMqD,gBAAA,IAAoB7B,SAAA,KAC7BxB,KAAA,CAAMwD,cAAA,CAAe,GACrBhC,SAAA,CAAU;IAEd,CAAC,GAED7B,KAAA,CAAM8D,SAAA,CAAU,MAAM;MACpB,IAAK1B,IAAA,EACL,OAAIb,2BAAA,KACEW,OAAA,CAAQjB,sCAAA,CAAuCiC,IAAA,KAAS,MAC1DtC,yBAAA,GAA4BmD,QAAA,CAASC,IAAA,CAAKC,KAAA,CAAMC,aAAA,EAChDH,QAAA,CAASC,IAAA,CAAKC,KAAA,CAAMC,aAAA,GAAgB,SAEtChC,OAAA,CAAQjB,sCAAA,CAAuCkD,GAAA,CAAI/B,IAAI,IAEzDF,OAAA,CAAQnB,MAAA,CAAOoD,GAAA,CAAI/B,IAAI,GACvBgC,cAAA,CAAe,GACR,MAAM;QAET7C,2BAAA,IACAW,OAAA,CAAQjB,sCAAA,CAAuCiC,IAAA,KAAS,MAExDa,QAAA,CAASC,IAAA,CAAKC,KAAA,CAAMC,aAAA,GAAgBtD,yBAAA;MAExC;IACF,GAAG,CAACwB,IAAA,EAAMb,2BAAA,EAA6BW,OAAO,CAAC,GAQ/ClC,KAAA,CAAM8D,SAAA,CAAU,MAAM;MACpB,IAAI,CAAAtC,YAAA,EACJ,OAAO,MAAM;QACNY,IAAA,KACLF,OAAA,CAAQnB,MAAA,CAAOsD,MAAA,CAAOjC,IAAI,GAC1BF,OAAA,CAAQjB,sCAAA,CAAuCoD,MAAA,CAAOjC,IAAI,GAC1DgC,cAAA,CAAe;MACjB;IACF,GAAG,CAAChC,IAAA,EAAMF,OAAA,EAASV,YAAY,CAAC,GAEhCxB,KAAA,CAAM8D,SAAA,CAAU,MAAM;MACpB,MAAMQ,YAAA,GAAeA,CAAA,KAAM;QACzB/B,KAAA,CAAM,CAAC,CAAC;MACV;MACA,OAAAwB,QAAA,CAASQ,gBAAA,CAAiB9D,cAAA,EAAgB6D,YAAY,GAC/C,MAAMP,QAAA,CAASS,mBAAA,CAAoB/D,cAAA,EAAgB6D,YAAY;IACxE,GAAG,EAAE,GAGH,eAAApE,GAAA,CAAC+B,IAAA;MACE,GAAGD,UAAA;MAEJyC,GAAA,EAAKjC,YAAA;MACLkC,OAAA,EAAQ;MACRR,aAAA,EACEjB,2BAAA,GACIE,sBAAA,GACE,SACA,SACF;MAENwB,cAAA,EAAgB9E,oBAAA,CACdwB,KAAA,CAAMsD,cAAA,EACNhB,YAAA,CAAagB,cACf;MACAC,aAAA,EAAe/E,oBAAA,CACbwB,KAAA,CAAMuD,aAAA,EACNjB,YAAA,CAAaiB,aACf;MACAC,oBAAA,EAAsBhF,oBAAA,CACpBwB,KAAA,CAAMwD,oBAAA,EACNzB,kBAAA,CAAmByB,oBACrB;MAEC9C;IAAA,CACH;EAEJ,CAAC;AAEDZ,WAAA,CAAY2D,WAAA,GAActE,sBAAA;AAM1B,MAAMuE,WAAA,GAAc;EAEdC,iBAAA,GAAoBhF,KAAA,CAAMoB,UAAA,CAC9B,CAACC,KAAA,EAAOC,YAAA,KAAiB;IACvB,MAAMY,OAAA,GAAUlC,KAAA,CAAMmC,UAAA,CAAWtB,kBAAkB;MAC7C4D,GAAA,GAAMzE,KAAA,CAAMiF,MAAA,CAAuB,IAAI;MACvCzC,YAAA,GAAe9C,eAAA,CAAgB4B,YAAA,EAAcmD,GAAG;IAEtD,OAAAzE,KAAA,CAAM8D,SAAA,CAAU,MAAM;MACpB,MAAM1B,IAAA,GAAOqC,GAAA,CAAIS,OAAA;MACjB,IAAI9C,IAAA,EACF,OAAAF,OAAA,CAAQhB,QAAA,CAASiD,GAAA,CAAI/B,IAAI,GAClB,MAAM;QACXF,OAAA,CAAQhB,QAAA,CAASmD,MAAA,CAAOjC,IAAI;MAC9B;IAEJ,GAAG,CAACF,OAAA,CAAQhB,QAAQ,CAAC,GAEd,eAAAhB,GAAA,CAAC;MAAI+D,KAAA,EAAO;QAAES,OAAA,EAAS;MAAW;MAAI,GAAGrD,KAAA;MAAOoD,GAAA,EAAKjC;IAAA,CAAc;EAC5E,CACF;AAEAwC,iBAAA,CAAkBF,WAAA,GAAcC,WAAA;AAYhC,SAAS1B,sBACP3B,oBAAA,EACA;EACA,MAAMyD,wBAAA,GAA2BpF,QAAA,CAAS2B,oBAAoB;IACxD0D,2BAAA,GAA8BpF,KAAA,CAAMiF,MAAA,CAAO,EAAK;IAChDI,cAAA,GAAiBrF,KAAA,CAAMiF,MAAA,CAAO,MAAM,CAAC,CAAC;EAE5C,OAAAjF,KAAA,CAAM8D,SAAA,CAAU,MAAM;IACpB,MAAMwB,iBAAA,GAAqBjF,KAAA,IAAwB;QACjD,IAAIA,KAAA,CAAMD,MAAA,IAAU,CAACgF,2BAAA,CAA4BF,OAAA,EAAS;UAGxD,IAASK,wCAAA,GAAT,SAAAA,CAAA,EAAoD;YAClDC,4BAAA,CACE9E,oBAAA,EACAyE,wBAAA,EACAM,WAAA,EACA;cAAEC,QAAA,EAAU;YAAK,CACnB;UACF;UATA,MAAMD,WAAA,GAAc;YAAEE,aAAA,EAAetF;UAAM;UAuBvCA,KAAA,CAAMuF,WAAA,KAAgB,WACxB7B,QAAA,CAASS,mBAAA,CAAoB,SAASa,cAAA,CAAeH,OAAO,GAC5DG,cAAA,CAAeH,OAAA,GAAUK,wCAAA,EACzBxB,QAAA,CAASQ,gBAAA,CAAiB,SAASc,cAAA,CAAeH,OAAA,EAAS;YAAEW,IAAA,EAAM;UAAK,CAAC,KAEzEN,wCAAA,CAAyC;QAE7C;QACAH,2BAAA,CAA4BF,OAAA,GAAU;MACxC;MAcMY,OAAA,GAAUC,UAAA,CAAW,MAAM;QAC/BhC,QAAA,CAASQ,gBAAA,CAAiB,eAAee,iBAAiB;MAC5D,GAAG,CAAC;IACJ,OAAO,MAAM;MACXU,MAAA,CAAOC,YAAA,CAAaH,OAAO,GAC3B/B,QAAA,CAASS,mBAAA,CAAoB,eAAec,iBAAiB,GAC7DvB,QAAA,CAASS,mBAAA,CAAoB,SAASa,cAAA,CAAeH,OAAO;IAC9D;EACF,GAAG,CAACC,wBAAwB,CAAC,GAEtB;IAAA;IAELN,oBAAA,EAAsBA,CAAA,KAAM;MAC1BO,2BAAA,CAA4BF,OAAA,GAAU;IACxC;EACF;AACF;AAMA,SAAStB,gBAAgBjC,cAAA,EAAqD;EAC5E,MAAMuE,kBAAA,GAAqBnG,QAAA,CAAS4B,cAAc;IAC5CwE,yBAAA,GAA4BnG,KAAA,CAAMiF,MAAA,CAAO,EAAK;EAEpD,OAAAjF,KAAA,CAAM8D,SAAA,CAAU,MAAM;IACpB,MAAMsC,WAAA,GAAe/F,KAAA,IAAsB;MACrCA,KAAA,CAAMD,MAAA,IAAU,CAAC+F,yBAAA,CAA0BjB,OAAA,IAE7CM,4BAAA,CAA6B7E,aAAA,EAAeuF,kBAAA,EADxB;QAAEP,aAAA,EAAetF;MAAM,GACkC;QAC3EqF,QAAA,EAAU;MACZ,CAAC;IAEL;IACA,OAAA3B,QAAA,CAASQ,gBAAA,CAAiB,WAAW6B,WAAW,GACzC,MAAMrC,QAAA,CAASS,mBAAA,CAAoB,WAAW4B,WAAW;EAClE,GAAG,CAACF,kBAAkB,CAAC,GAEhB;IACLvB,cAAA,EAAgBA,CAAA,KAAM;MACpBwB,yBAAA,CAA0BjB,OAAA,GAAU;IACtC;IACAN,aAAA,EAAeA,CAAA,KAAM;MACnBuB,yBAAA,CAA0BjB,OAAA,GAAU;IACtC;EACF;AACF;AAEA,SAASd,eAAA,EAAiB;EACxB,MAAM/D,KAAA,GAAQ,IAAIgG,WAAA,CAAY5F,cAAc;EAC5CsD,QAAA,CAASxD,aAAA,CAAcF,KAAK;AAC9B;AAEA,SAASmF,6BACPc,IAAA,EACAC,OAAA,EACAC,MAAA,EACA;EAAEd;AAAS,GACX;EACA,MAAMtF,MAAA,GAASoG,MAAA,CAAOb,aAAA,CAAcvF,MAAA;IAC9BC,KAAA,GAAQ,IAAIgG,WAAA,CAAYC,IAAA,EAAM;MAAEG,OAAA,EAAS;MAAOC,UAAA,EAAY;MAAMF;IAAO,CAAC;EAC5ED,OAAA,IAASnG,MAAA,CAAOmE,gBAAA,CAAiB+B,IAAA,EAAMC,OAAA,EAA0B;IAAEV,IAAA,EAAM;EAAK,CAAC,GAE/EH,QAAA,GACFvF,2BAAA,CAA4BC,MAAA,EAAQC,KAAK,IAEzCD,MAAA,CAAOG,aAAA,CAAcF,KAAK;AAE9B","ignoreList":[]}
|
package/dist/jsx/Dismissable.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
-
import { composeEventHandlers } from "@tamagui/
|
|
2
|
+
import { Slot, Stack, composeEventHandlers } from "@tamagui/core";
|
|
3
3
|
import { useEscapeKeydown } from "@tamagui/use-escape-keydown";
|
|
4
4
|
import { useEvent } from "@tamagui/use-event";
|
|
5
5
|
import * as React from "react";
|
|
@@ -14,76 +14,73 @@ const DismissableContext = React.createContext({
|
|
|
14
14
|
layers: /* @__PURE__ */ new Set(),
|
|
15
15
|
layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),
|
|
16
16
|
branches: /* @__PURE__ */ new Set()
|
|
17
|
-
}), Dismissable = React.forwardRef(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
37
|
-
}), focusOutside = useFocusOutside((event) => {
|
|
38
|
-
const target = event.target;
|
|
39
|
-
[...context.branches].some(
|
|
40
|
-
(branch) => branch.contains(target)
|
|
41
|
-
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
42
|
-
});
|
|
43
|
-
return useEscapeKeydown((event) => {
|
|
44
|
-
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
45
|
-
}), React.useEffect(() => {
|
|
46
|
-
if (node)
|
|
47
|
-
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
48
|
-
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
49
|
-
};
|
|
50
|
-
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
51
|
-
if (!forceUnmount)
|
|
52
|
-
return () => {
|
|
53
|
-
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
54
|
-
};
|
|
55
|
-
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
56
|
-
const handleUpdate = () => {
|
|
57
|
-
force({});
|
|
58
|
-
};
|
|
59
|
-
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
60
|
-
}, []), /* @__PURE__ */ jsx(
|
|
61
|
-
"div",
|
|
62
|
-
{
|
|
63
|
-
...layerProps,
|
|
64
|
-
ref: composedRefs,
|
|
65
|
-
style: {
|
|
66
|
-
display: "contents",
|
|
67
|
-
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
68
|
-
// @ts-ignore
|
|
69
|
-
...props.style
|
|
70
|
-
},
|
|
71
|
-
onFocusCapture: composeEventHandlers(
|
|
72
|
-
props.onFocusCapture,
|
|
73
|
-
focusOutside.onFocusCapture
|
|
74
|
-
),
|
|
75
|
-
onBlurCapture: composeEventHandlers(
|
|
76
|
-
props.onBlurCapture,
|
|
77
|
-
focusOutside.onBlurCapture
|
|
78
|
-
),
|
|
79
|
-
onPointerDownCapture: composeEventHandlers(
|
|
80
|
-
props.onPointerDownCapture,
|
|
81
|
-
pointerDownOutside.onPointerDownCapture
|
|
82
|
-
)
|
|
83
|
-
}
|
|
17
|
+
}), Dismissable = React.forwardRef((props, forwardedRef) => {
|
|
18
|
+
const {
|
|
19
|
+
disableOutsidePointerEvents = !1,
|
|
20
|
+
forceUnmount,
|
|
21
|
+
onEscapeKeyDown,
|
|
22
|
+
onPointerDownOutside,
|
|
23
|
+
onFocusOutside,
|
|
24
|
+
onInteractOutside,
|
|
25
|
+
onDismiss,
|
|
26
|
+
asChild,
|
|
27
|
+
children,
|
|
28
|
+
...layerProps
|
|
29
|
+
} = props, Comp = asChild ? Slot : Stack, context = React.useContext(DismissableContext), [node, setNode] = React.useState(null), [, force] = React.useState({}), composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2)), layers = Array.from(context.layers), [highestLayerWithOutsidePointerEventsDisabled] = [
|
|
30
|
+
...context.layersWithOutsidePointerEventsDisabled
|
|
31
|
+
].slice(-1), highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(
|
|
32
|
+
highestLayerWithOutsidePointerEventsDisabled
|
|
33
|
+
), index = node ? layers.indexOf(node) : -1, isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0, isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex, pointerDownOutside = usePointerDownOutside((event) => {
|
|
34
|
+
const target = event.target, isPointerDownOnBranch = [...context.branches].some(
|
|
35
|
+
(branch) => branch.contains(target)
|
|
84
36
|
);
|
|
85
|
-
|
|
86
|
-
)
|
|
37
|
+
!isPointerEventsEnabled || isPointerDownOnBranch || (onPointerDownOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
38
|
+
}), focusOutside = useFocusOutside((event) => {
|
|
39
|
+
const target = event.target;
|
|
40
|
+
[...context.branches].some(
|
|
41
|
+
(branch) => branch.contains(target)
|
|
42
|
+
) || (onFocusOutside?.(event), onInteractOutside?.(event), event.defaultPrevented || onDismiss?.());
|
|
43
|
+
});
|
|
44
|
+
return useEscapeKeydown((event) => {
|
|
45
|
+
index === context.layers.size - 1 && (onEscapeKeyDown?.(event), !event.defaultPrevented && onDismiss && (event.preventDefault(), onDismiss()));
|
|
46
|
+
}), React.useEffect(() => {
|
|
47
|
+
if (node)
|
|
48
|
+
return disableOutsidePointerEvents && (context.layersWithOutsidePointerEventsDisabled.size === 0 && (originalBodyPointerEvents = document.body.style.pointerEvents, document.body.style.pointerEvents = "none"), context.layersWithOutsidePointerEventsDisabled.add(node)), context.layers.add(node), dispatchUpdate(), () => {
|
|
49
|
+
disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1 && (document.body.style.pointerEvents = originalBodyPointerEvents);
|
|
50
|
+
};
|
|
51
|
+
}, [node, disableOutsidePointerEvents, context]), React.useEffect(() => {
|
|
52
|
+
if (!forceUnmount)
|
|
53
|
+
return () => {
|
|
54
|
+
node && (context.layers.delete(node), context.layersWithOutsidePointerEventsDisabled.delete(node), dispatchUpdate());
|
|
55
|
+
};
|
|
56
|
+
}, [node, context, forceUnmount]), React.useEffect(() => {
|
|
57
|
+
const handleUpdate = () => {
|
|
58
|
+
force({});
|
|
59
|
+
};
|
|
60
|
+
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
61
|
+
}, []), /* @__PURE__ */ jsx(
|
|
62
|
+
Comp,
|
|
63
|
+
{
|
|
64
|
+
...layerProps,
|
|
65
|
+
ref: composedRefs,
|
|
66
|
+
display: "contents",
|
|
67
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
68
|
+
onFocusCapture: composeEventHandlers(
|
|
69
|
+
props.onFocusCapture,
|
|
70
|
+
focusOutside.onFocusCapture
|
|
71
|
+
),
|
|
72
|
+
onBlurCapture: composeEventHandlers(
|
|
73
|
+
props.onBlurCapture,
|
|
74
|
+
focusOutside.onBlurCapture
|
|
75
|
+
),
|
|
76
|
+
onPointerDownCapture: composeEventHandlers(
|
|
77
|
+
props.onPointerDownCapture,
|
|
78
|
+
pointerDownOutside.onPointerDownCapture
|
|
79
|
+
),
|
|
80
|
+
children
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
});
|
|
87
84
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
88
85
|
const BRANCH_NAME = "DismissableBranch", DismissableBranch = React.forwardRef(
|
|
89
86
|
(props, forwardedRef) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/Dismissable.tsx"],
|
|
4
|
-
"mappings": "AAGA,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["node"]
|
|
6
6
|
}
|
package/dist/jsx/Dismissable.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
-
import { composeEventHandlers } from "@tamagui/
|
|
2
|
+
import { Slot, Stack, composeEventHandlers } from "@tamagui/core";
|
|
3
3
|
import { useEscapeKeydown } from "@tamagui/use-escape-keydown";
|
|
4
4
|
import { useEvent } from "@tamagui/use-event";
|
|
5
5
|
import * as React from "react";
|
|
@@ -27,8 +27,11 @@ const DismissableContext = React.createContext({
|
|
|
27
27
|
onFocusOutside,
|
|
28
28
|
onInteractOutside,
|
|
29
29
|
onDismiss,
|
|
30
|
+
asChild,
|
|
31
|
+
children,
|
|
30
32
|
...layerProps
|
|
31
33
|
} = props,
|
|
34
|
+
Comp = asChild ? Slot : Stack,
|
|
32
35
|
context = React.useContext(DismissableContext),
|
|
33
36
|
[node, setNode] = React.useState(null),
|
|
34
37
|
[, force] = React.useState({}),
|
|
@@ -63,18 +66,15 @@ const DismissableContext = React.createContext({
|
|
|
63
66
|
force({});
|
|
64
67
|
};
|
|
65
68
|
return document.addEventListener(CONTEXT_UPDATE, handleUpdate), () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
|
|
66
|
-
}, []), /* @__PURE__ */jsx(
|
|
69
|
+
}, []), /* @__PURE__ */jsx(Comp, {
|
|
67
70
|
...layerProps,
|
|
68
71
|
ref: composedRefs,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
72
|
-
// @ts-ignore
|
|
73
|
-
...props.style
|
|
74
|
-
},
|
|
72
|
+
display: "contents",
|
|
73
|
+
pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
|
|
75
74
|
onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),
|
|
76
75
|
onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),
|
|
77
|
-
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture)
|
|
76
|
+
onPointerDownCapture: composeEventHandlers(props.onPointerDownCapture, pointerDownOutside.onPointerDownCapture),
|
|
77
|
+
children
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useComposedRefs","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableContext","createContext","layers","Set","layersWithOutsidePointerEventsDisabled","branches","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","context","useContext","node","setNode","useState","force","composedRefs","node2","Array","from","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","size","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","defaultPrevented","focusOutside","useFocusOutside","preventDefault","useEffect","document","body","style","pointerEvents","add","dispatchUpdate","delete","handleUpdate","addEventListener","removeEventListener","ref","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","useRef","current","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":"AAGA,SAASA,eAAA,QAAuB;AAChC,SAASC,oBAAA,QAA4B;
|
|
1
|
+
{"version":3,"names":["useComposedRefs","Slot","Stack","composeEventHandlers","useEscapeKeydown","useEvent","React","ReactDOM","jsx","dispatchDiscreteCustomEvent","target","event","flushSync","dispatchEvent","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableContext","createContext","layers","Set","layersWithOutsidePointerEventsDisabled","branches","Dismissable","forwardRef","props","forwardedRef","disableOutsidePointerEvents","forceUnmount","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","asChild","children","layerProps","Comp","context","useContext","node","setNode","useState","force","composedRefs","node2","Array","from","highestLayerWithOutsidePointerEventsDisabled","slice","highestLayerWithOutsidePointerEventsDisabledIndex","indexOf","index","isBodyPointerEventsDisabled","size","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","some","branch","contains","defaultPrevented","focusOutside","useFocusOutside","preventDefault","useEffect","document","body","style","pointerEvents","add","dispatchUpdate","delete","handleUpdate","addEventListener","removeEventListener","ref","display","onFocusCapture","onBlurCapture","onPointerDownCapture","displayName","BRANCH_NAME","DismissableBranch","useRef","current","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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/dismissable",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-001",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": true,
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@tamagui/compose-refs": "
|
|
41
|
-
"@tamagui/core": "
|
|
42
|
-
"@tamagui/helpers": "
|
|
43
|
-
"@tamagui/use-escape-keydown": "
|
|
44
|
-
"@tamagui/use-event": "
|
|
40
|
+
"@tamagui/compose-refs": "2.0.0-001",
|
|
41
|
+
"@tamagui/core": "2.0.0-001",
|
|
42
|
+
"@tamagui/helpers": "2.0.0-001",
|
|
43
|
+
"@tamagui/use-escape-keydown": "2.0.0-001",
|
|
44
|
+
"@tamagui/use-event": "2.0.0-001"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@tamagui/build": "
|
|
47
|
+
"@tamagui/build": "2.0.0-001",
|
|
48
48
|
"react": "*",
|
|
49
49
|
"react-dom": "*"
|
|
50
50
|
},
|
package/src/Dismissable.tsx
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// https://github.com/radix-ui/primitives/blob/cfd8dcba5fa6a0e751486af418d05a7b88a7f541/packages/react/dismissable-layer/src/DismissableLayer.tsx#L324
|
|
3
3
|
|
|
4
4
|
import { useComposedRefs } from '@tamagui/compose-refs'
|
|
5
|
-
import { composeEventHandlers } from '@tamagui/
|
|
5
|
+
import { Slot, Stack, composeEventHandlers } from '@tamagui/core'
|
|
6
6
|
import { useEscapeKeydown } from '@tamagui/use-escape-keydown'
|
|
7
7
|
import { useEvent } from '@tamagui/use-event'
|
|
8
8
|
import * as React from 'react'
|
|
@@ -34,145 +34,149 @@ const DismissableContext = React.createContext({
|
|
|
34
34
|
branches: new Set<HTMLDivElement>(),
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
-
const Dismissable = React.forwardRef<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
37
|
+
const Dismissable = React.forwardRef<
|
|
38
|
+
HTMLDivElement,
|
|
39
|
+
DismissableProps & { asChild?: boolean }
|
|
40
|
+
>((props, forwardedRef) => {
|
|
41
|
+
const {
|
|
42
|
+
disableOutsidePointerEvents = false,
|
|
43
|
+
forceUnmount,
|
|
44
|
+
onEscapeKeyDown,
|
|
45
|
+
onPointerDownOutside,
|
|
46
|
+
onFocusOutside,
|
|
47
|
+
onInteractOutside,
|
|
48
|
+
onDismiss,
|
|
49
|
+
asChild,
|
|
50
|
+
children,
|
|
51
|
+
...layerProps
|
|
52
|
+
} = props
|
|
53
|
+
const Comp = (asChild ? Slot : Stack) as any
|
|
54
|
+
const context = React.useContext(DismissableContext)
|
|
55
|
+
const [node, setNode] = React.useState<HTMLDivElement | null>(null)
|
|
56
|
+
const [, force] = React.useState({})
|
|
57
|
+
const composedRefs = useComposedRefs(forwardedRef, (node) => setNode(node))
|
|
58
|
+
const layers = Array.from(context.layers)
|
|
59
|
+
|
|
60
|
+
const [highestLayerWithOutsidePointerEventsDisabled] = [
|
|
61
|
+
...context.layersWithOutsidePointerEventsDisabled,
|
|
62
|
+
].slice(-1)
|
|
63
|
+
const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(
|
|
64
|
+
highestLayerWithOutsidePointerEventsDisabled
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
const index = node ? layers.indexOf(node) : -1
|
|
68
|
+
const isBodyPointerEventsDisabled =
|
|
69
|
+
context.layersWithOutsidePointerEventsDisabled.size > 0
|
|
70
|
+
const isPointerEventsEnabled =
|
|
71
|
+
index >= highestLayerWithOutsidePointerEventsDisabledIndex
|
|
72
|
+
|
|
73
|
+
const pointerDownOutside = usePointerDownOutside((event) => {
|
|
74
|
+
const target = event.target as HTMLDivElement
|
|
75
|
+
const isPointerDownOnBranch = [...context.branches].some((branch) =>
|
|
76
|
+
branch.contains(target)
|
|
60
77
|
)
|
|
78
|
+
if (!isPointerEventsEnabled || isPointerDownOnBranch) return
|
|
79
|
+
onPointerDownOutside?.(event)
|
|
80
|
+
onInteractOutside?.(event)
|
|
81
|
+
if (!event.defaultPrevented) onDismiss?.()
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
const focusOutside = useFocusOutside((event) => {
|
|
85
|
+
const target = event.target as HTMLDivElement
|
|
86
|
+
const isFocusInBranch = [...context.branches].some((branch) =>
|
|
87
|
+
branch.contains(target)
|
|
88
|
+
)
|
|
89
|
+
if (isFocusInBranch) return
|
|
90
|
+
onFocusOutside?.(event)
|
|
91
|
+
onInteractOutside?.(event)
|
|
92
|
+
if (!event.defaultPrevented) onDismiss?.()
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
useEscapeKeydown((event) => {
|
|
96
|
+
const isHighestLayer = index === context.layers.size - 1
|
|
97
|
+
if (!isHighestLayer) return
|
|
98
|
+
onEscapeKeyDown?.(event)
|
|
99
|
+
if (!event.defaultPrevented && onDismiss) {
|
|
100
|
+
event.preventDefault()
|
|
101
|
+
onDismiss()
|
|
102
|
+
}
|
|
103
|
+
})
|
|
61
104
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const pointerDownOutside = usePointerDownOutside((event) => {
|
|
69
|
-
const target = event.target as HTMLDivElement
|
|
70
|
-
const isPointerDownOnBranch = [...context.branches].some((branch) =>
|
|
71
|
-
branch.contains(target)
|
|
72
|
-
)
|
|
73
|
-
if (!isPointerEventsEnabled || isPointerDownOnBranch) return
|
|
74
|
-
onPointerDownOutside?.(event)
|
|
75
|
-
onInteractOutside?.(event)
|
|
76
|
-
if (!event.defaultPrevented) onDismiss?.()
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const focusOutside = useFocusOutside((event) => {
|
|
80
|
-
const target = event.target as HTMLDivElement
|
|
81
|
-
const isFocusInBranch = [...context.branches].some((branch) =>
|
|
82
|
-
branch.contains(target)
|
|
83
|
-
)
|
|
84
|
-
if (isFocusInBranch) return
|
|
85
|
-
onFocusOutside?.(event)
|
|
86
|
-
onInteractOutside?.(event)
|
|
87
|
-
if (!event.defaultPrevented) onDismiss?.()
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
useEscapeKeydown((event) => {
|
|
91
|
-
const isHighestLayer = index === context.layers.size - 1
|
|
92
|
-
if (!isHighestLayer) return
|
|
93
|
-
onEscapeKeyDown?.(event)
|
|
94
|
-
if (!event.defaultPrevented && onDismiss) {
|
|
95
|
-
event.preventDefault()
|
|
96
|
-
onDismiss()
|
|
105
|
+
React.useEffect(() => {
|
|
106
|
+
if (!node) return
|
|
107
|
+
if (disableOutsidePointerEvents) {
|
|
108
|
+
if (context.layersWithOutsidePointerEventsDisabled.size === 0) {
|
|
109
|
+
originalBodyPointerEvents = document.body.style.pointerEvents
|
|
110
|
+
document.body.style.pointerEvents = 'none'
|
|
97
111
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
context.layersWithOutsidePointerEventsDisabled.add(node)
|
|
113
|
+
}
|
|
114
|
+
context.layers.add(node)
|
|
115
|
+
dispatchUpdate()
|
|
116
|
+
return () => {
|
|
117
|
+
if (
|
|
118
|
+
disableOutsidePointerEvents &&
|
|
119
|
+
context.layersWithOutsidePointerEventsDisabled.size === 1
|
|
120
|
+
) {
|
|
121
|
+
document.body.style.pointerEvents = originalBodyPointerEvents
|
|
108
122
|
}
|
|
109
|
-
|
|
123
|
+
}
|
|
124
|
+
}, [node, disableOutsidePointerEvents, context])
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect
|
|
128
|
+
* because a change to `disableOutsidePointerEvents` would remove this layer from the stack
|
|
129
|
+
* and add it to the end again so the layering order wouldn't be _creation order_.
|
|
130
|
+
* We only want them to be removed from context stacks when unmounted.
|
|
131
|
+
*/
|
|
132
|
+
React.useEffect(() => {
|
|
133
|
+
if (forceUnmount) return
|
|
134
|
+
return () => {
|
|
135
|
+
if (!node) return
|
|
136
|
+
context.layers.delete(node)
|
|
137
|
+
context.layersWithOutsidePointerEventsDisabled.delete(node)
|
|
110
138
|
dispatchUpdate()
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
disableOutsidePointerEvents &&
|
|
114
|
-
context.layersWithOutsidePointerEventsDisabled.size === 1
|
|
115
|
-
) {
|
|
116
|
-
document.body.style.pointerEvents = originalBodyPointerEvents
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}, [node, disableOutsidePointerEvents, context])
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect
|
|
123
|
-
* because a change to `disableOutsidePointerEvents` would remove this layer from the stack
|
|
124
|
-
* and add it to the end again so the layering order wouldn't be _creation order_.
|
|
125
|
-
* We only want them to be removed from context stacks when unmounted.
|
|
126
|
-
*/
|
|
127
|
-
React.useEffect(() => {
|
|
128
|
-
if (forceUnmount) return
|
|
129
|
-
return () => {
|
|
130
|
-
if (!node) return
|
|
131
|
-
context.layers.delete(node)
|
|
132
|
-
context.layersWithOutsidePointerEventsDisabled.delete(node)
|
|
133
|
-
dispatchUpdate()
|
|
134
|
-
}
|
|
135
|
-
}, [node, context, forceUnmount])
|
|
139
|
+
}
|
|
140
|
+
}, [node, context, forceUnmount])
|
|
136
141
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
React.useEffect(() => {
|
|
143
|
+
const handleUpdate = () => {
|
|
144
|
+
force({})
|
|
145
|
+
}
|
|
146
|
+
document.addEventListener(CONTEXT_UPDATE, handleUpdate)
|
|
147
|
+
return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate)
|
|
148
|
+
}, [])
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<Comp
|
|
152
|
+
{...layerProps}
|
|
153
|
+
// @ts-ignore
|
|
154
|
+
ref={composedRefs}
|
|
155
|
+
display="contents"
|
|
156
|
+
pointerEvents={
|
|
157
|
+
isBodyPointerEventsDisabled
|
|
158
|
+
? isPointerEventsEnabled
|
|
159
|
+
? 'auto'
|
|
160
|
+
: 'none'
|
|
161
|
+
: undefined
|
|
140
162
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
...props.style,
|
|
159
|
-
}}
|
|
160
|
-
onFocusCapture={composeEventHandlers(
|
|
161
|
-
props.onFocusCapture,
|
|
162
|
-
focusOutside.onFocusCapture
|
|
163
|
-
)}
|
|
164
|
-
onBlurCapture={composeEventHandlers(
|
|
165
|
-
props.onBlurCapture,
|
|
166
|
-
focusOutside.onBlurCapture
|
|
167
|
-
)}
|
|
168
|
-
onPointerDownCapture={composeEventHandlers(
|
|
169
|
-
props.onPointerDownCapture,
|
|
170
|
-
pointerDownOutside.onPointerDownCapture
|
|
171
|
-
)}
|
|
172
|
-
/>
|
|
173
|
-
)
|
|
174
|
-
}
|
|
175
|
-
)
|
|
163
|
+
onFocusCapture={composeEventHandlers(
|
|
164
|
+
props.onFocusCapture,
|
|
165
|
+
focusOutside.onFocusCapture
|
|
166
|
+
)}
|
|
167
|
+
onBlurCapture={composeEventHandlers(
|
|
168
|
+
props.onBlurCapture,
|
|
169
|
+
focusOutside.onBlurCapture
|
|
170
|
+
)}
|
|
171
|
+
onPointerDownCapture={composeEventHandlers(
|
|
172
|
+
props.onPointerDownCapture,
|
|
173
|
+
pointerDownOutside.onPointerDownCapture
|
|
174
|
+
)}
|
|
175
|
+
>
|
|
176
|
+
{children}
|
|
177
|
+
</Comp>
|
|
178
|
+
)
|
|
179
|
+
})
|
|
176
180
|
|
|
177
181
|
Dismissable.displayName = DISMISSABLE_LAYER_NAME
|
|
178
182
|
|
package/src/DismissableProps.tsx
CHANGED
|
@@ -13,7 +13,7 @@ export interface DismissableProps {
|
|
|
13
13
|
* Event handler called when the escape key is down.
|
|
14
14
|
* Can be prevented.
|
|
15
15
|
*/
|
|
16
|
-
onEscapeKeyDown?:
|
|
16
|
+
onEscapeKeyDown?: React.KeyboardEventHandler
|
|
17
17
|
/**
|
|
18
18
|
* Event handler called when the a `pointerdown` event happens outside of the `Dismissable`.
|
|
19
19
|
* Can be prevented.
|
package/types/Dismissable.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import type { DismissableBranchProps, DismissableProps } from './DismissableProps';
|
|
3
3
|
export declare function dispatchDiscreteCustomEvent<E extends CustomEvent>(target: E['target'], event: E): void;
|
|
4
|
-
declare const Dismissable: React.ForwardRefExoticComponent<DismissableProps &
|
|
4
|
+
declare const Dismissable: React.ForwardRefExoticComponent<DismissableProps & {
|
|
5
|
+
asChild?: boolean;
|
|
6
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
5
7
|
declare const DismissableBranch: React.ForwardRefExoticComponent<DismissableBranchProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
8
|
export type PointerDownOutsideEvent = CustomEvent<{
|
|
7
9
|
originalEvent: PointerEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dismissable.d.ts","sourceRoot":"","sources":["../src/Dismissable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAElF,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,WAAW,EAC/D,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,EAAE,CAAC,QAGT;AAmBD,QAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"Dismissable.d.ts","sourceRoot":"","sources":["../src/Dismissable.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAElF,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,WAAW,EAC/D,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,EACnB,KAAK,EAAE,CAAC,QAGT;AAmBD,QAAA,MAAM,WAAW;cAEgB,OAAO;wCA4ItC,CAAA;AAUF,QAAA,MAAM,iBAAiB,+FAkBtB,CAAA;AAMD,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAAC;IAAE,aAAa,EAAE,YAAY,CAAA;CAAE,CAAC,CAAA;AAClF,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,CAAC,CAAA;AAsI1E,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAA;AAEzC,YAAY,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -11,7 +11,7 @@ export interface DismissableProps {
|
|
|
11
11
|
* Event handler called when the escape key is down.
|
|
12
12
|
* Can be prevented.
|
|
13
13
|
*/
|
|
14
|
-
onEscapeKeyDown?:
|
|
14
|
+
onEscapeKeyDown?: React.KeyboardEventHandler;
|
|
15
15
|
/**
|
|
16
16
|
* Event handler called when the a `pointerdown` event happens outside of the `Dismissable`.
|
|
17
17
|
* Can be prevented.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DismissableProps.d.ts","sourceRoot":"","sources":["../src/DismissableProps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAE/E,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC;;;OAGG;IACH,eAAe,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"DismissableProps.d.ts","sourceRoot":"","sources":["../src/DismissableProps.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AAE/E,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAA;IACrC;;;OAGG;IACH,eAAe,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAA;IAC5C;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAA;IAC/D;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACnD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,GAAG,iBAAiB,KAAK,IAAI,CAAA;IAEhF;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB,oBAAoB,CAAC,EAAE,GAAG,CAAA;IAC1B,aAAa,CAAC,EAAE,GAAG,CAAA;IACnB,cAAc,CAAC,EAAE,GAAG,CAAA;IAEpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B"}
|