@tamagui/react-native-web-internals 1.116.0 → 1.116.2
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/StyleSheet/__tests__/compiler-createReactDOMStyle-test.js +192 -0
- package/dist/cjs/StyleSheet/__tests__/compiler-test.js +378 -0
- package/dist/cjs/StyleSheet/__tests__/dom-createOrderedCSSStyleSheet-test.js +117 -0
- package/dist/cjs/StyleSheet/__tests__/index-test.js +347 -0
- package/dist/cjs/StyleSheet/__tests__/preprocess-test.js +77 -0
- package/dist/cjs/StyleSheet/__tests__/validate-test.js +18 -0
- package/dist/cjs/StyleSheet/compiler/createReactDOMStyle.js +121 -0
- package/dist/cjs/StyleSheet/compiler/hash.js +21 -0
- package/dist/cjs/StyleSheet/compiler/hyphenateStyleName.js +31 -0
- package/dist/cjs/StyleSheet/compiler/index.js +253 -0
- package/dist/cjs/StyleSheet/compiler/normalizeColor.js +42 -0
- package/dist/cjs/StyleSheet/compiler/normalizeValueWithProperty.js +45 -0
- package/dist/cjs/StyleSheet/compiler/resolveShadowValue.js +35 -0
- package/dist/cjs/StyleSheet/dom/createCSSStyleSheet.js +44 -0
- package/dist/cjs/StyleSheet/dom/createOrderedCSSStyleSheet.js +94 -0
- package/dist/cjs/StyleSheet/dom/index.js +74 -0
- package/dist/cjs/StyleSheet/index.js +52 -0
- package/dist/cjs/StyleSheet/preprocess.js +67 -0
- package/dist/cjs/StyleSheet/validate.js +66 -0
- package/dist/cjs/TextAncestorContext.js +24 -0
- package/dist/cjs/colorProps.js +32 -0
- package/dist/cjs/index.js +73 -0
- package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAccessibilityComponent-test.js +46 -0
- package/dist/cjs/modules/AccessibilityUtil/__tests__/propsToAriaRole-test.js +30 -0
- package/dist/cjs/modules/AccessibilityUtil/index.js +36 -0
- package/dist/cjs/modules/AccessibilityUtil/isDisabled.js +22 -0
- package/dist/cjs/modules/AccessibilityUtil/propsToAccessibilityComponent.js +60 -0
- package/dist/cjs/modules/AccessibilityUtil/propsToAriaRole.js +43 -0
- package/dist/cjs/modules/AssetRegistry/index.js +28 -0
- package/dist/cjs/modules/ImageLoader/index.js +102 -0
- package/dist/cjs/modules/InteractionManager.js +68 -0
- package/dist/cjs/modules/Platform/__tests__/index-test.js +46 -0
- package/dist/cjs/modules/Platform/index.js +26 -0
- package/dist/cjs/modules/TextInputState/index.js +59 -0
- package/dist/cjs/modules/UIManager/__tests__/index-test.js +66 -0
- package/dist/cjs/modules/UIManager/index.js +101 -0
- package/dist/cjs/modules/canUseDOM.js +23 -0
- package/dist/cjs/modules/createDOMProps/__tests__/index-test.js +106 -0
- package/dist/cjs/modules/createDOMProps/index.js +121 -0
- package/dist/cjs/modules/createEventHandle/__tests__/index-test.js +242 -0
- package/dist/cjs/modules/createEventHandle/index.js +74 -0
- package/dist/cjs/modules/dismissKeyboard/index.js +33 -0
- package/dist/cjs/modules/forwardedProps/index.js +145 -0
- package/dist/cjs/modules/getBoundingClientRect/index.js +25 -0
- package/dist/cjs/modules/invariant.js +35 -0
- package/dist/cjs/modules/isSelectionValid/index.js +27 -0
- package/dist/cjs/modules/isWebColor/index.js +22 -0
- package/dist/cjs/modules/mergeRefs/__tests__/index-test.js +34 -0
- package/dist/cjs/modules/mergeRefs/index.js +41 -0
- package/dist/cjs/modules/modality/__tests__/index-test.js +20 -0
- package/dist/cjs/modules/modality/index.js +90 -0
- package/dist/cjs/modules/multiplyStyleLengthValue/__tests__/index-test.js +28 -0
- package/dist/cjs/modules/multiplyStyleLengthValue/index.js +28 -0
- package/dist/cjs/modules/normalizeColor/index.js +40 -0
- package/dist/cjs/modules/pick/index.js +26 -0
- package/dist/cjs/modules/processColor/__tests__/index-test.js +64 -0
- package/dist/cjs/modules/processColor/index.js +36 -0
- package/dist/cjs/modules/requestIdleCallback/index.js +44 -0
- package/dist/cjs/modules/setValueForStyles/dangerousStyleValue.js +34 -0
- package/dist/cjs/modules/setValueForStyles/index.js +39 -0
- package/dist/cjs/modules/unitlessNumbers/index.js +80 -0
- package/dist/cjs/modules/useElementLayout/index.js +65 -0
- package/dist/cjs/modules/useEvent/__tests__/index-test.js +289 -0
- package/dist/cjs/modules/useEvent/index.js +45 -0
- package/dist/cjs/modules/useHover/__tests__/index-test.js +195 -0
- package/dist/cjs/modules/useHover/index.js +81 -0
- package/dist/cjs/modules/useLayoutEffect/index.js +31 -0
- package/dist/cjs/modules/useLocale/index.js +54 -0
- package/dist/cjs/modules/useLocale/isLocaleRTL.js +91 -0
- package/dist/cjs/modules/useMergeRefs/__tests__/index-test.js +68 -0
- package/dist/cjs/modules/useMergeRefs/index.js +36 -0
- package/dist/cjs/modules/usePlatformMethods/index.js +39 -0
- package/dist/cjs/modules/useStable/__tests__/index-test.js +69 -0
- package/dist/cjs/modules/useStable/index.js +34 -0
- package/dist/cjs/styleTypes.js +14 -0
- package/dist/cjs/types.js +14 -0
- package/package.json +7 -7
- /package/dist/cjs/StyleSheet/__tests__/{compiler-createReactDOMStyle-test.cjs.map → compiler-createReactDOMStyle-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/__tests__/{compiler-test.cjs.map → compiler-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/__tests__/{dom-createOrderedCSSStyleSheet-test.cjs.map → dom-createOrderedCSSStyleSheet-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/__tests__/{preprocess-test.cjs.map → preprocess-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/__tests__/{validate-test.cjs.map → validate-test.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{createReactDOMStyle.cjs.map → createReactDOMStyle.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{hash.cjs.map → hash.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{hyphenateStyleName.cjs.map → hyphenateStyleName.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{normalizeColor.cjs.map → normalizeColor.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{normalizeValueWithProperty.cjs.map → normalizeValueWithProperty.js.map} +0 -0
- /package/dist/cjs/StyleSheet/compiler/{resolveShadowValue.cjs.map → resolveShadowValue.js.map} +0 -0
- /package/dist/cjs/StyleSheet/dom/{createCSSStyleSheet.cjs.map → createCSSStyleSheet.js.map} +0 -0
- /package/dist/cjs/StyleSheet/dom/{createOrderedCSSStyleSheet.cjs.map → createOrderedCSSStyleSheet.js.map} +0 -0
- /package/dist/cjs/StyleSheet/dom/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/StyleSheet/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/StyleSheet/{preprocess.cjs.map → preprocess.js.map} +0 -0
- /package/dist/cjs/StyleSheet/{validate.cjs.map → validate.js.map} +0 -0
- /package/dist/cjs/{TextAncestorContext.cjs.map → TextAncestorContext.js.map} +0 -0
- /package/dist/cjs/{colorProps.cjs.map → colorProps.js.map} +0 -0
- /package/dist/cjs/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/__tests__/{propsToAccessibilityComponent-test.cjs.map → propsToAccessibilityComponent-test.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/__tests__/{propsToAriaRole-test.cjs.map → propsToAriaRole-test.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/{isDisabled.cjs.map → isDisabled.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/{propsToAccessibilityComponent.cjs.map → propsToAccessibilityComponent.js.map} +0 -0
- /package/dist/cjs/modules/AccessibilityUtil/{propsToAriaRole.cjs.map → propsToAriaRole.js.map} +0 -0
- /package/dist/cjs/modules/AssetRegistry/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/ImageLoader/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/{InteractionManager.cjs.map → InteractionManager.js.map} +0 -0
- /package/dist/cjs/modules/Platform/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/Platform/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/TextInputState/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/UIManager/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/UIManager/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/{canUseDOM.cjs.map → canUseDOM.js.map} +0 -0
- /package/dist/cjs/modules/createDOMProps/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/createDOMProps/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/createEventHandle/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/createEventHandle/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/dismissKeyboard/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/forwardedProps/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/getBoundingClientRect/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/{invariant.cjs.map → invariant.js.map} +0 -0
- /package/dist/cjs/modules/isSelectionValid/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/isWebColor/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/mergeRefs/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/mergeRefs/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/modality/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/modality/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/multiplyStyleLengthValue/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/multiplyStyleLengthValue/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/normalizeColor/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/pick/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/processColor/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/processColor/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/requestIdleCallback/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/setValueForStyles/{dangerousStyleValue.cjs.map → dangerousStyleValue.js.map} +0 -0
- /package/dist/cjs/modules/setValueForStyles/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/unitlessNumbers/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useElementLayout/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useEvent/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/useEvent/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useHover/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/useHover/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useLayoutEffect/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useLocale/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useLocale/{isLocaleRTL.cjs.map → isLocaleRTL.js.map} +0 -0
- /package/dist/cjs/modules/useMergeRefs/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/useMergeRefs/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/usePlatformMethods/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/modules/useStable/__tests__/{index-test.cjs.map → index-test.js.map} +0 -0
- /package/dist/cjs/modules/useStable/{index.cjs.map → index.js.map} +0 -0
- /package/dist/cjs/{styleTypes.cjs.map → styleTypes.js.map} +0 -0
- /package/dist/cjs/{types.cjs.map → types.js.map} +0 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from == "object" || typeof from == "function")
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
return to;
|
|
11
|
+
};
|
|
12
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
13
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
14
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
15
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
16
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
17
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
|
18
|
+
mod
|
|
19
|
+
));
|
|
20
|
+
var import_dom_event_testing_library = require("dom-event-testing-library"), React = __toESM(require("react")), ReactDOM = __toESM(require("react-dom")), import_test_utils = require("react-dom/test-utils"), import__ = __toESM(require("..")), import_jsx_runtime = require("react/jsx-runtime");
|
|
21
|
+
function createRoot(rootNode) {
|
|
22
|
+
return {
|
|
23
|
+
render(element) {
|
|
24
|
+
ReactDOM.render(element, rootNode);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
describe("use-event", () => {
|
|
29
|
+
let root, rootNode;
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
rootNode = document.createElement("div"), document.body.appendChild(rootNode), root = createRoot(rootNode);
|
|
32
|
+
}), afterEach(() => {
|
|
33
|
+
root.render(null), document.body.removeChild(rootNode), rootNode = null, root = null;
|
|
34
|
+
}), describe("setListener()", () => {
|
|
35
|
+
test("event dispatched on target", () => {
|
|
36
|
+
const listener = jest.fn(), targetRef = React.createRef();
|
|
37
|
+
function Component() {
|
|
38
|
+
const addClickListener = (0, import__.default)("click");
|
|
39
|
+
return React.useEffect(() => {
|
|
40
|
+
addClickListener(targetRef.current, listener);
|
|
41
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
42
|
+
}
|
|
43
|
+
(0, import_test_utils.act)(() => {
|
|
44
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
45
|
+
});
|
|
46
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
47
|
+
(0, import_test_utils.act)(() => {
|
|
48
|
+
target.click();
|
|
49
|
+
}), expect(listener).toBeCalledTimes(1);
|
|
50
|
+
}), test("event dispatched on parent", () => {
|
|
51
|
+
const listener = jest.fn(), listenerCapture = jest.fn(), targetRef = React.createRef(), parentRef = React.createRef();
|
|
52
|
+
function Component() {
|
|
53
|
+
const addClickListener = (0, import__.default)("click"), addClickCaptureListener = (0, import__.default)("click", { capture: !0 });
|
|
54
|
+
return React.useEffect(() => {
|
|
55
|
+
addClickListener(targetRef.current, listener), addClickCaptureListener(targetRef.current, listenerCapture);
|
|
56
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: parentRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef }) });
|
|
57
|
+
}
|
|
58
|
+
(0, import_test_utils.act)(() => {
|
|
59
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
60
|
+
});
|
|
61
|
+
const parent = (0, import_dom_event_testing_library.createEventTarget)(parentRef.current);
|
|
62
|
+
(0, import_test_utils.act)(() => {
|
|
63
|
+
parent.click();
|
|
64
|
+
}), expect(listener).toBeCalledTimes(0), expect(listenerCapture).toBeCalledTimes(0);
|
|
65
|
+
}), test("event dispatched on child", () => {
|
|
66
|
+
const log = [], listener = jest.fn(() => {
|
|
67
|
+
log.push("bubble");
|
|
68
|
+
}), listenerCapture = jest.fn(() => {
|
|
69
|
+
log.push("capture");
|
|
70
|
+
}), targetRef = React.createRef(), childRef = React.createRef();
|
|
71
|
+
function Component() {
|
|
72
|
+
const addClickListener = (0, import__.default)("click"), addClickCaptureListener = (0, import__.default)("click", { capture: !0 });
|
|
73
|
+
return React.useEffect(() => {
|
|
74
|
+
addClickListener(targetRef.current, listener), addClickCaptureListener(targetRef.current, listenerCapture);
|
|
75
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) });
|
|
76
|
+
}
|
|
77
|
+
(0, import_test_utils.act)(() => {
|
|
78
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
79
|
+
});
|
|
80
|
+
const child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
81
|
+
(0, import_test_utils.act)(() => {
|
|
82
|
+
child.click();
|
|
83
|
+
}), expect(listenerCapture).toBeCalledTimes(1), expect(listener).toBeCalledTimes(1), expect(log).toEqual(["capture", "bubble"]);
|
|
84
|
+
}), test("event dispatched on text node", () => {
|
|
85
|
+
const listener = jest.fn(), targetRef = React.createRef(), childRef = React.createRef();
|
|
86
|
+
function Component() {
|
|
87
|
+
const addClickListener = (0, import__.default)("click");
|
|
88
|
+
return React.useEffect(() => {
|
|
89
|
+
addClickListener(targetRef.current, listener);
|
|
90
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef, children: "text" }) });
|
|
91
|
+
}
|
|
92
|
+
(0, import_test_utils.act)(() => {
|
|
93
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
94
|
+
});
|
|
95
|
+
const text = (0, import_dom_event_testing_library.createEventTarget)(childRef.current.firstChild);
|
|
96
|
+
(0, import_test_utils.act)(() => {
|
|
97
|
+
text.click();
|
|
98
|
+
}), expect(listener).toBeCalledTimes(1);
|
|
99
|
+
}), test("listener can be attached to document ", () => {
|
|
100
|
+
const listener = jest.fn(), targetRef = React.createRef();
|
|
101
|
+
function Component({ target: target2 }) {
|
|
102
|
+
const addClickListener = (0, import__.default)("click");
|
|
103
|
+
return React.useEffect(() => {
|
|
104
|
+
addClickListener(target2, listener);
|
|
105
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
106
|
+
}
|
|
107
|
+
(0, import_test_utils.act)(() => {
|
|
108
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { target: document }));
|
|
109
|
+
});
|
|
110
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
111
|
+
(0, import_test_utils.act)(() => {
|
|
112
|
+
target.click();
|
|
113
|
+
}), expect(listener).toBeCalledTimes(1);
|
|
114
|
+
}), test("listener can be attached to window ", () => {
|
|
115
|
+
const listener = jest.fn(), targetRef = React.createRef();
|
|
116
|
+
function Component({ target: target2 }) {
|
|
117
|
+
const addClickListener = (0, import__.default)("click");
|
|
118
|
+
return React.useEffect(() => {
|
|
119
|
+
addClickListener(target2, listener);
|
|
120
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
121
|
+
}
|
|
122
|
+
(0, import_test_utils.act)(() => {
|
|
123
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { target: window }));
|
|
124
|
+
});
|
|
125
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
126
|
+
(0, import_test_utils.act)(() => {
|
|
127
|
+
target.click();
|
|
128
|
+
}), expect(listener).toBeCalledTimes(1);
|
|
129
|
+
}), test("listener is replaceable", () => {
|
|
130
|
+
const listener = jest.fn(), listenerAlt = jest.fn(), targetRef = React.createRef();
|
|
131
|
+
function Component({ onClick }) {
|
|
132
|
+
const addClickListener = (0, import__.default)("click");
|
|
133
|
+
return React.useEffect(() => {
|
|
134
|
+
addClickListener(targetRef.current, onClick);
|
|
135
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
136
|
+
}
|
|
137
|
+
(0, import_test_utils.act)(() => {
|
|
138
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { onClick: listener }));
|
|
139
|
+
});
|
|
140
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
141
|
+
(0, import_test_utils.act)(() => {
|
|
142
|
+
target.click();
|
|
143
|
+
}), expect(listener).toBeCalledTimes(1), (0, import_test_utils.act)(() => {
|
|
144
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { onClick: listenerAlt }));
|
|
145
|
+
}), (0, import_test_utils.act)(() => {
|
|
146
|
+
target.click();
|
|
147
|
+
}), expect(listener).toBeCalledTimes(1), expect(listenerAlt).toBeCalledTimes(1);
|
|
148
|
+
}), test("listener is removed when value is null", () => {
|
|
149
|
+
const listener = jest.fn(), targetRef = React.createRef();
|
|
150
|
+
function Component({ off }) {
|
|
151
|
+
const addClickListener = (0, import__.default)("click");
|
|
152
|
+
return React.useEffect(() => {
|
|
153
|
+
addClickListener(targetRef.current, off ? null : listener);
|
|
154
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
155
|
+
}
|
|
156
|
+
(0, import_test_utils.act)(() => {
|
|
157
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { off: !1 }));
|
|
158
|
+
});
|
|
159
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
160
|
+
(0, import_test_utils.act)(() => {
|
|
161
|
+
target.click();
|
|
162
|
+
}), expect(listener).toBeCalledTimes(1), (0, import_test_utils.act)(() => {
|
|
163
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { off: !0 }));
|
|
164
|
+
}), listener.mockClear(), (0, import_test_utils.act)(() => {
|
|
165
|
+
target.click();
|
|
166
|
+
}), expect(listener).toBeCalledTimes(0);
|
|
167
|
+
}), test("custom event dispatched on target", () => {
|
|
168
|
+
const listener = jest.fn(), targetRef = React.createRef();
|
|
169
|
+
function Component() {
|
|
170
|
+
const addMagicEventListener = (0, import__.default)("magic-event");
|
|
171
|
+
return React.useEffect(() => {
|
|
172
|
+
addMagicEventListener(targetRef.current, listener);
|
|
173
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
174
|
+
}
|
|
175
|
+
(0, import_test_utils.act)(() => {
|
|
176
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
177
|
+
}), (0, import_test_utils.act)(() => {
|
|
178
|
+
const event = new CustomEvent("magic-event", { bubbles: !0 });
|
|
179
|
+
targetRef.current.dispatchEvent(event);
|
|
180
|
+
}), expect(listener).toBeCalledTimes(1);
|
|
181
|
+
}), test("listeners can be set on multiple targets simultaneously", () => {
|
|
182
|
+
const log = [], targetRef = React.createRef(), parentRef = React.createRef(), childRef = React.createRef(), listener = jest.fn((e) => {
|
|
183
|
+
log.push(["bubble", e.currentTarget.id]);
|
|
184
|
+
}), listenerCapture = jest.fn((e) => {
|
|
185
|
+
log.push(["capture", e.currentTarget.id]);
|
|
186
|
+
});
|
|
187
|
+
function Component() {
|
|
188
|
+
const addClickListener = (0, import__.default)("click"), addClickCaptureListener = (0, import__.default)("click", { capture: !0 });
|
|
189
|
+
return React.useEffect(() => {
|
|
190
|
+
addClickListener(targetRef.current, listener), addClickListener(parentRef.current, listener), addClickCaptureListener(targetRef.current, listenerCapture), addClickCaptureListener(parentRef.current, listenerCapture);
|
|
191
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "parent", ref: parentRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "target", ref: targetRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) }) });
|
|
192
|
+
}
|
|
193
|
+
(0, import_test_utils.act)(() => {
|
|
194
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
195
|
+
});
|
|
196
|
+
const child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
197
|
+
(0, import_test_utils.act)(() => {
|
|
198
|
+
child.click();
|
|
199
|
+
}), expect(listenerCapture).toBeCalledTimes(2), expect(listener).toBeCalledTimes(2), expect(log).toEqual([
|
|
200
|
+
["capture", "parent"],
|
|
201
|
+
["capture", "target"],
|
|
202
|
+
["bubble", "target"],
|
|
203
|
+
["bubble", "parent"]
|
|
204
|
+
]);
|
|
205
|
+
}), test("listeners are specific to each event handle", () => {
|
|
206
|
+
const log = [], targetRef = React.createRef(), childRef = React.createRef(), listener = jest.fn((e) => {
|
|
207
|
+
log.push(["bubble", "target"]);
|
|
208
|
+
}), listenerAlt = jest.fn((e) => {
|
|
209
|
+
log.push(["bubble", "target-alt"]);
|
|
210
|
+
}), listenerCapture = jest.fn((e) => {
|
|
211
|
+
log.push(["capture", "target"]);
|
|
212
|
+
}), listenerCaptureAlt = jest.fn((e) => {
|
|
213
|
+
log.push(["capture", "target-alt"]);
|
|
214
|
+
});
|
|
215
|
+
function Component() {
|
|
216
|
+
const addClickListener = (0, import__.default)("click"), addClickAltListener = (0, import__.default)("click"), addClickCaptureListener = (0, import__.default)("click", { capture: !0 }), addClickCaptureAltListener = (0, import__.default)("click", { capture: !0 });
|
|
217
|
+
return React.useEffect(() => {
|
|
218
|
+
addClickListener(targetRef.current, listener), addClickAltListener(targetRef.current, listenerAlt), addClickCaptureListener(targetRef.current, listenerCapture), addClickCaptureAltListener(targetRef.current, listenerCaptureAlt);
|
|
219
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { id: "target", ref: targetRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) });
|
|
220
|
+
}
|
|
221
|
+
(0, import_test_utils.act)(() => {
|
|
222
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
223
|
+
});
|
|
224
|
+
const child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
225
|
+
(0, import_test_utils.act)(() => {
|
|
226
|
+
child.click();
|
|
227
|
+
}), expect(listenerCapture).toBeCalledTimes(1), expect(listenerCaptureAlt).toBeCalledTimes(1), expect(listener).toBeCalledTimes(1), expect(listenerAlt).toBeCalledTimes(1), expect(log).toEqual([
|
|
228
|
+
["capture", "target"],
|
|
229
|
+
["capture", "target-alt"],
|
|
230
|
+
["bubble", "target"],
|
|
231
|
+
["bubble", "target-alt"]
|
|
232
|
+
]);
|
|
233
|
+
});
|
|
234
|
+
}), describe("cleanup", () => {
|
|
235
|
+
test("removes all listeners for given event type from targets", () => {
|
|
236
|
+
const clickListener = jest.fn();
|
|
237
|
+
function Component() {
|
|
238
|
+
const addClickListener = (0, import__.default)("click");
|
|
239
|
+
return React.useEffect(() => {
|
|
240
|
+
addClickListener(document, clickListener);
|
|
241
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {});
|
|
242
|
+
}
|
|
243
|
+
(0, import_test_utils.act)(() => {
|
|
244
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {})), root.render(null);
|
|
245
|
+
});
|
|
246
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(document);
|
|
247
|
+
(0, import_test_utils.act)(() => {
|
|
248
|
+
target.click();
|
|
249
|
+
}), expect(clickListener).toBeCalledTimes(0);
|
|
250
|
+
});
|
|
251
|
+
}), describe("stopPropagation and stopImmediatePropagation", () => {
|
|
252
|
+
test("stopPropagation works as expected", () => {
|
|
253
|
+
const childListener = jest.fn((e) => {
|
|
254
|
+
e.stopPropagation();
|
|
255
|
+
}), targetListener = jest.fn(), targetRef = React.createRef(), childRef = React.createRef();
|
|
256
|
+
function Component() {
|
|
257
|
+
const addClickListener = (0, import__.default)("click");
|
|
258
|
+
return React.useEffect(() => {
|
|
259
|
+
addClickListener(childRef.current, childListener), addClickListener(targetRef.current, targetListener);
|
|
260
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) });
|
|
261
|
+
}
|
|
262
|
+
(0, import_test_utils.act)(() => {
|
|
263
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
264
|
+
});
|
|
265
|
+
const child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
266
|
+
(0, import_test_utils.act)(() => {
|
|
267
|
+
child.click();
|
|
268
|
+
}), expect(childListener).toBeCalledTimes(1), expect(targetListener).toBeCalledTimes(0);
|
|
269
|
+
}), test("stopImmediatePropagation works as expected", () => {
|
|
270
|
+
const firstListener = jest.fn((e) => {
|
|
271
|
+
e.stopImmediatePropagation();
|
|
272
|
+
}), secondListener = jest.fn(), targetRef = React.createRef();
|
|
273
|
+
function Component() {
|
|
274
|
+
const addFirstClickListener = (0, import__.default)("click"), addSecondClickListener = (0, import__.default)("click");
|
|
275
|
+
return React.useEffect(() => {
|
|
276
|
+
addFirstClickListener(targetRef.current, firstListener), addSecondClickListener(targetRef.current, secondListener);
|
|
277
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: targetRef });
|
|
278
|
+
}
|
|
279
|
+
(0, import_test_utils.act)(() => {
|
|
280
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
281
|
+
});
|
|
282
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(targetRef.current);
|
|
283
|
+
(0, import_test_utils.act)(() => {
|
|
284
|
+
target.click();
|
|
285
|
+
}), expect(firstListener).toBeCalledTimes(1), expect(secondListener).toBeCalledTimes(0);
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
//# sourceMappingURL=index-test.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
|
21
|
+
mod
|
|
22
|
+
)), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
23
|
+
var useEvent_exports = {};
|
|
24
|
+
__export(useEvent_exports, {
|
|
25
|
+
default: () => useEvent
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(useEvent_exports);
|
|
28
|
+
var import_createEventHandle = __toESM(require("../createEventHandle/index")), import_useLayoutEffect = __toESM(require("../useLayoutEffect/index")), import_useStable = __toESM(require("../useStable/index"));
|
|
29
|
+
function useEvent(event, options) {
|
|
30
|
+
const targetListeners = (0, import_useStable.default)(() => /* @__PURE__ */ new Map()), addListener = (0, import_useStable.default)(() => {
|
|
31
|
+
const addEventListener = (0, import_createEventHandle.default)(event, options);
|
|
32
|
+
return (target, callback) => {
|
|
33
|
+
const removeTargetListener = targetListeners.get(target);
|
|
34
|
+
removeTargetListener?.(), callback == null && targetListeners.delete(target);
|
|
35
|
+
const removeEventListener = addEventListener(target, callback);
|
|
36
|
+
return targetListeners.set(target, removeEventListener), removeEventListener;
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
return (0, import_useLayoutEffect.default)(() => () => {
|
|
40
|
+
targetListeners.forEach((removeListener) => {
|
|
41
|
+
removeListener();
|
|
42
|
+
}), targetListeners.clear();
|
|
43
|
+
}, [targetListeners]), addListener;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from == "object" || typeof from == "function")
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
return to;
|
|
11
|
+
};
|
|
12
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
13
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
14
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
15
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
16
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
17
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
|
18
|
+
mod
|
|
19
|
+
));
|
|
20
|
+
var import_dom_event_testing_library = require("dom-event-testing-library"), React = __toESM(require("react")), ReactDOM = __toESM(require("react-dom")), import_test_utils = require("react-dom/test-utils"), import_modality = require("../../modality/index"), import__ = __toESM(require("..")), import_jsx_runtime = require("react/jsx-runtime");
|
|
21
|
+
function createRoot(rootNode) {
|
|
22
|
+
return {
|
|
23
|
+
render(element) {
|
|
24
|
+
ReactDOM.render(element, rootNode);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
(0, import_dom_event_testing_library.describeWithPointerEvent)("useHover", (hasPointerEvents) => {
|
|
29
|
+
let root, rootNode;
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
(0, import_dom_event_testing_library.setPointerEvent)(hasPointerEvents), rootNode = document.createElement("div"), document.body.appendChild(rootNode), root = createRoot(rootNode);
|
|
32
|
+
}), afterEach(() => {
|
|
33
|
+
root.render(null), document.body.removeChild(rootNode), rootNode = null, root = null, (0, import_modality.testOnly_resetActiveModality)(), (0, import_dom_event_testing_library.clearPointers)();
|
|
34
|
+
}), describe("contain", () => {
|
|
35
|
+
let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref, childRef;
|
|
36
|
+
const componentInit = () => {
|
|
37
|
+
onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = React.createRef(), childRef = React.createRef();
|
|
38
|
+
const Component = () => ((0, import__.default)(ref, {
|
|
39
|
+
onHoverChange,
|
|
40
|
+
onHoverStart,
|
|
41
|
+
onHoverUpdate,
|
|
42
|
+
onHoverEnd
|
|
43
|
+
}), (0, import__.default)(childRef, { contain: !0 }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) }));
|
|
44
|
+
(0, import_test_utils.act)(() => {
|
|
45
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
test("contains the hover gesture", () => {
|
|
49
|
+
componentInit();
|
|
50
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current), child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
51
|
+
(0, import_test_utils.act)(() => {
|
|
52
|
+
target.pointerover(), target.pointerout(), child.pointerover();
|
|
53
|
+
}), expect(onHoverEnd).toBeCalled(), (0, import_test_utils.act)(() => {
|
|
54
|
+
child.pointerout();
|
|
55
|
+
}), expect(onHoverStart).toBeCalled();
|
|
56
|
+
});
|
|
57
|
+
}), describe("disabled", () => {
|
|
58
|
+
let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref;
|
|
59
|
+
const componentInit = () => {
|
|
60
|
+
onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = React.createRef();
|
|
61
|
+
const Component = () => ((0, import__.default)(ref, {
|
|
62
|
+
disabled: !0,
|
|
63
|
+
onHoverChange,
|
|
64
|
+
onHoverStart,
|
|
65
|
+
onHoverUpdate,
|
|
66
|
+
onHoverEnd
|
|
67
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref }));
|
|
68
|
+
(0, import_test_utils.act)(() => {
|
|
69
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
test("does not call callbacks", () => {
|
|
73
|
+
componentInit();
|
|
74
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
75
|
+
(0, import_test_utils.act)(() => {
|
|
76
|
+
target.pointerover(), target.pointerout();
|
|
77
|
+
}), expect(onHoverChange).not.toBeCalled(), expect(onHoverStart).not.toBeCalled(), expect(onHoverUpdate).not.toBeCalled(), expect(onHoverEnd).not.toBeCalled();
|
|
78
|
+
});
|
|
79
|
+
}), describe("onHoverStart", () => {
|
|
80
|
+
let onHoverStart, ref;
|
|
81
|
+
const componentInit = () => {
|
|
82
|
+
onHoverStart = jest.fn(), ref = React.createRef();
|
|
83
|
+
const Component = () => ((0, import__.default)(ref, { onHoverStart }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref }));
|
|
84
|
+
(0, import_test_utils.act)(() => {
|
|
85
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
test("is called for mouse pointers", () => {
|
|
89
|
+
componentInit();
|
|
90
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
91
|
+
(0, import_test_utils.act)(() => {
|
|
92
|
+
target.pointerover({ pointerType: "mouse" });
|
|
93
|
+
}), expect(onHoverStart).toBeCalledTimes(1);
|
|
94
|
+
}), test("is not called for touch pointers", () => {
|
|
95
|
+
componentInit();
|
|
96
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
97
|
+
(0, import_test_utils.act)(() => {
|
|
98
|
+
target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" });
|
|
99
|
+
}), expect(onHoverStart).not.toBeCalled();
|
|
100
|
+
}), test("is called if a mouse pointer is used after a touch pointer", () => {
|
|
101
|
+
componentInit();
|
|
102
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
103
|
+
(0, import_test_utils.act)(() => {
|
|
104
|
+
target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" }), target.pointerover({ pointerType: "mouse" });
|
|
105
|
+
}), expect(onHoverStart).toBeCalledTimes(1);
|
|
106
|
+
});
|
|
107
|
+
}), describe("onHoverChange", () => {
|
|
108
|
+
let onHoverChange, ref;
|
|
109
|
+
const componentInit = () => {
|
|
110
|
+
onHoverChange = jest.fn(), ref = React.createRef();
|
|
111
|
+
const Component = () => ((0, import__.default)(ref, { onHoverChange }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref }));
|
|
112
|
+
(0, import_test_utils.act)(() => {
|
|
113
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
test("is called for mouse pointers", () => {
|
|
117
|
+
componentInit();
|
|
118
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
119
|
+
(0, import_test_utils.act)(() => {
|
|
120
|
+
target.pointerover();
|
|
121
|
+
}), expect(onHoverChange).toBeCalledTimes(1), expect(onHoverChange).toBeCalledWith(!0), (0, import_test_utils.act)(() => {
|
|
122
|
+
target.pointerout();
|
|
123
|
+
}), expect(onHoverChange).toBeCalledTimes(2), expect(onHoverChange).toBeCalledWith(!1);
|
|
124
|
+
}), test("is not called for touch pointers", () => {
|
|
125
|
+
componentInit();
|
|
126
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
127
|
+
(0, import_test_utils.act)(() => {
|
|
128
|
+
target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" });
|
|
129
|
+
}), expect(onHoverChange).not.toBeCalled();
|
|
130
|
+
});
|
|
131
|
+
}), describe("onHoverEnd", () => {
|
|
132
|
+
let onHoverEnd, ref, childRef;
|
|
133
|
+
const componentInit = () => {
|
|
134
|
+
onHoverEnd = jest.fn(), ref = React.createRef(), childRef = React.createRef();
|
|
135
|
+
const Component = () => ((0, import__.default)(ref, { onHoverEnd }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: childRef }) }));
|
|
136
|
+
(0, import_test_utils.act)(() => {
|
|
137
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
test("is called for mouse pointers", () => {
|
|
141
|
+
componentInit();
|
|
142
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
143
|
+
(0, import_test_utils.act)(() => {
|
|
144
|
+
target.pointerover(), target.pointerout();
|
|
145
|
+
}), expect(onHoverEnd).toBeCalledTimes(1);
|
|
146
|
+
}), test("is not called for touch pointers", () => {
|
|
147
|
+
componentInit();
|
|
148
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
149
|
+
(0, import_test_utils.act)(() => {
|
|
150
|
+
target.pointerdown({ pointerType: "touch" }), target.pointerup({ pointerType: "touch" });
|
|
151
|
+
}), expect(onHoverEnd).not.toBeCalled();
|
|
152
|
+
}), test("is not called when entering children of the target", () => {
|
|
153
|
+
componentInit();
|
|
154
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current), child = (0, import_dom_event_testing_library.createEventTarget)(childRef.current);
|
|
155
|
+
(0, import_test_utils.act)(() => {
|
|
156
|
+
target.pointerover(), target.pointerout({ relatedTarget: childRef.current }), child.pointerover({ relatedTarget: target.node });
|
|
157
|
+
}), expect(onHoverEnd).not.toBeCalled();
|
|
158
|
+
});
|
|
159
|
+
}), describe("onHoverUpdate", () => {
|
|
160
|
+
test('is called after the active pointer moves"', () => {
|
|
161
|
+
const onHoverUpdate = jest.fn(), ref = React.createRef(), Component = () => ((0, import__.default)(ref, { onHoverUpdate }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref }));
|
|
162
|
+
(0, import_test_utils.act)(() => {
|
|
163
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
164
|
+
});
|
|
165
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
166
|
+
(0, import_test_utils.act)(() => {
|
|
167
|
+
target.pointerover(), target.pointerhover({ x: 0, y: 0 }), target.pointerhover({ x: 1, y: 1 });
|
|
168
|
+
}), expect(onHoverUpdate).toBeCalledTimes(2);
|
|
169
|
+
});
|
|
170
|
+
}), describe("repeat use", () => {
|
|
171
|
+
let onHoverChange, onHoverStart, onHoverUpdate, onHoverEnd, ref;
|
|
172
|
+
const componentInit = () => {
|
|
173
|
+
onHoverChange = jest.fn(), onHoverStart = jest.fn(), onHoverUpdate = jest.fn(), onHoverEnd = jest.fn(), ref = React.createRef();
|
|
174
|
+
const Component = () => ((0, import__.default)(ref, {
|
|
175
|
+
onHoverChange,
|
|
176
|
+
onHoverStart,
|
|
177
|
+
onHoverUpdate,
|
|
178
|
+
onHoverEnd
|
|
179
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref }));
|
|
180
|
+
(0, import_test_utils.act)(() => {
|
|
181
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, {}));
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
test("callbacks are called each time", () => {
|
|
185
|
+
componentInit();
|
|
186
|
+
const target = (0, import_dom_event_testing_library.createEventTarget)(ref.current);
|
|
187
|
+
(0, import_test_utils.act)(() => {
|
|
188
|
+
target.pointerover(), target.pointerhover({ x: 1, y: 1 }), target.pointerout();
|
|
189
|
+
}), expect(onHoverStart).toBeCalledTimes(1), expect(onHoverUpdate).toBeCalledTimes(1), expect(onHoverEnd).toBeCalledTimes(1), expect(onHoverChange).toBeCalledTimes(2), (0, import_test_utils.act)(() => {
|
|
190
|
+
target.pointerover(), target.pointerhover({ x: 1, y: 1 }), target.pointerout();
|
|
191
|
+
}), expect(onHoverStart).toBeCalledTimes(2), expect(onHoverUpdate).toBeCalledTimes(2), expect(onHoverEnd).toBeCalledTimes(2), expect(onHoverChange).toBeCalledTimes(4);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=index-test.js.map
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
|
21
|
+
mod
|
|
22
|
+
)), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
23
|
+
var useHover_exports = {};
|
|
24
|
+
__export(useHover_exports, {
|
|
25
|
+
default: () => useHover
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(useHover_exports);
|
|
28
|
+
var import_modality = require("../modality/index"), import_useEvent = __toESM(require("../useEvent/index")), import_useLayoutEffect = __toESM(require("../useLayoutEffect/index"));
|
|
29
|
+
const emptyObject = {}, opts = { passive: !0 }, lockEventType = "react-gui:hover:lock", unlockEventType = "react-gui:hover:unlock", supportsPointerEvent = () => typeof window < "u" && window.PointerEvent != null;
|
|
30
|
+
function dispatchCustomEvent(target, type, payload) {
|
|
31
|
+
const event = document.createEvent("CustomEvent"), { bubbles = !0, cancelable = !0, detail } = payload || emptyObject;
|
|
32
|
+
event.initCustomEvent(type, bubbles, cancelable, detail), target.dispatchEvent(event);
|
|
33
|
+
}
|
|
34
|
+
function getPointerType(event) {
|
|
35
|
+
const { pointerType } = event;
|
|
36
|
+
return pointerType ?? (0, import_modality.getModality)();
|
|
37
|
+
}
|
|
38
|
+
function useHover(targetRef, config) {
|
|
39
|
+
const { contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd } = config, canUsePE = supportsPointerEvent(), addMoveListener = (0, import_useEvent.default)(canUsePE ? "pointermove" : "mousemove", opts), addEnterListener = (0, import_useEvent.default)(canUsePE ? "pointerenter" : "mouseenter", opts), addLeaveListener = (0, import_useEvent.default)(canUsePE ? "pointerleave" : "mouseleave", opts), addLockListener = (0, import_useEvent.default)(lockEventType, opts), addUnlockListener = (0, import_useEvent.default)(unlockEventType, opts);
|
|
40
|
+
(0, import_useLayoutEffect.default)(() => {
|
|
41
|
+
const target = targetRef.current;
|
|
42
|
+
if (target !== null) {
|
|
43
|
+
const hoverEnd = function(e) {
|
|
44
|
+
onHoverEnd?.(e), onHoverChange?.(!1), addMoveListener(target, null), addLeaveListener(target, null);
|
|
45
|
+
}, leaveListener = function(e) {
|
|
46
|
+
const target2 = targetRef.current;
|
|
47
|
+
target2 != null && getPointerType(e) !== "touch" && (contain && dispatchCustomEvent(target2, unlockEventType), hoverEnd(e));
|
|
48
|
+
}, moveListener = function(e) {
|
|
49
|
+
getPointerType(e) !== "touch" && onHoverUpdate != null && (e.x == null && (e.x = e.clientX), e.y == null && (e.y = e.clientY), onHoverUpdate(e));
|
|
50
|
+
}, hoverStart = function(e) {
|
|
51
|
+
onHoverStart?.(e), onHoverChange?.(!0), onHoverUpdate != null && addMoveListener(target, disabled ? null : moveListener), addLeaveListener(target, disabled ? null : leaveListener);
|
|
52
|
+
};
|
|
53
|
+
addEnterListener(target, disabled ? null : function(e) {
|
|
54
|
+
const target2 = targetRef.current;
|
|
55
|
+
if (target2 != null && getPointerType(e) !== "touch") {
|
|
56
|
+
contain && dispatchCustomEvent(target2, lockEventType), hoverStart(e);
|
|
57
|
+
const lockListener = function(lockEvent) {
|
|
58
|
+
lockEvent.target !== target2 && hoverEnd(e);
|
|
59
|
+
}, unlockListener = function(lockEvent) {
|
|
60
|
+
lockEvent.target !== target2 && hoverStart(e);
|
|
61
|
+
};
|
|
62
|
+
addLockListener(target2, disabled ? null : lockListener), addUnlockListener(target2, disabled ? null : unlockListener);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}, [
|
|
67
|
+
addEnterListener,
|
|
68
|
+
addMoveListener,
|
|
69
|
+
addLeaveListener,
|
|
70
|
+
addLockListener,
|
|
71
|
+
addUnlockListener,
|
|
72
|
+
contain,
|
|
73
|
+
disabled,
|
|
74
|
+
onHoverStart,
|
|
75
|
+
onHoverChange,
|
|
76
|
+
onHoverUpdate,
|
|
77
|
+
onHoverEnd,
|
|
78
|
+
targetRef
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf, __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: !0 });
|
|
9
|
+
}, __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from == "object" || typeof from == "function")
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
!__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: !0 }) : target,
|
|
21
|
+
mod
|
|
22
|
+
)), __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
|
|
23
|
+
var useLayoutEffect_exports = {};
|
|
24
|
+
__export(useLayoutEffect_exports, {
|
|
25
|
+
default: () => useLayoutEffect_default
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(useLayoutEffect_exports);
|
|
28
|
+
var import_react = __toESM(require("react")), import_canUseDOM = __toESM(require("../canUseDOM"));
|
|
29
|
+
const useLayoutEffectImpl = import_canUseDOM.default ? import_react.default.useLayoutEffect : import_react.default.useEffect;
|
|
30
|
+
var useLayoutEffect_default = useLayoutEffectImpl;
|
|
31
|
+
//# sourceMappingURL=index.js.map
|