Skip to content

Commit e81a3e1

Browse files
committed
chore: update dependencies and patch eslint-plugin-react-hooks
1 parent ae7a524 commit e81a3e1

File tree

10 files changed

+498
-381
lines changed

10 files changed

+498
-381
lines changed

package.json

+8-5
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
"@changesets/cli": "^2.28.1",
2121
"@commitlint/cli": "^19.7.1",
2222
"@commitlint/config-conventional": "^19.7.1",
23-
"@resolid/config": "^3.3.0",
24-
"@types/node": "^22.13.5",
23+
"@resolid/config": "^3.3.3",
24+
"@types/node": "^22.13.9",
2525
"eslint": "^9.21.0",
2626
"lefthook": "^1.11.2",
27-
"prettier": "^3.5.2",
27+
"prettier": "^3.5.3",
2828
"prettier-plugin-organize-imports": "^4.1.0",
2929
"prettier-plugin-tailwindcss": "^0.6.11",
30-
"typescript": "^5.7.3"
30+
"typescript": "^5.8.2"
3131
},
3232
"engines": {
3333
"node": "22.x",
@@ -66,6 +66,9 @@
6666
"onlyBuiltDependencies": [
6767
"esbuild",
6868
"lefthook"
69-
]
69+
],
70+
"patchedDependencies": {
71+
"eslint-plugin-react-hooks@5.2.0": "patches/eslint-plugin-react-hooks@5.2.0.patch"
72+
}
7073
}
7174
}

packages/react-ui/eslint.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import eslintBrowser from "@resolid/config/eslint.browser";
22
import eslintReact from "@resolid/config/eslint.react";
33
import eslintTypescript from "@resolid/config/eslint.typescript";
44

5-
/** @type {import("eslint").Linter.FlatConfig[]} */
5+
/** @type {import("eslint").Linter.Config[]} */
66
export default [...eslintTypescript, ...eslintReact, ...eslintBrowser];

packages/react-ui/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
},
3737
"dependencies": {
3838
"@floating-ui/react": "^0.27.5",
39-
"@resolid/utils": "^0.3.2",
39+
"@resolid/utils": "^0.3.3",
4040
"cva": "beta"
4141
},
4242
"devDependencies": {

packages/react-ui/src/components/toast/toast-root.tsx

+14-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState } from "react";
2-
import { useEffectEvent, useElementTransitionStatus, usePrevious, useTimeout } from "../../hooks";
2+
import { useEffectEvent, useElementTransitionStatus, useEventListener, usePrevious, useTimeout } from "../../hooks";
33
import type { PrimitiveProps } from "../../primitives";
44
import { PopperAriaContext } from "../../primitives/popper/popper-aria-context";
55
import { PopperDispatchContext } from "../../primitives/popper/popper-dispatch-context";
@@ -28,19 +28,21 @@ export const ToastRoot = (props: PrimitiveProps<"div", ToastRootProps, "role" |
2828
const [openState, setOpenState] = useState(true);
2929
const [transitionEnable, setTransitionEnable] = useState(!update);
3030

31-
const { isMounted, status, setElement } = useElementTransitionStatus(openState, { duration: 250 });
31+
const { isMounted, status, setElement } = useElementTransitionStatus(openState, { duration: 300 });
3232

33-
const handleDismiss = useEffectEvent(() => {
33+
const handleDismiss = () => {
3434
setTransitionEnable(true);
3535
setOpenState(false);
3636
onDismiss?.();
37-
});
37+
};
38+
39+
const handleDismissRef = useEffectEvent(handleDismiss);
3840

3941
useEffect(() => {
4042
if (dismiss) {
41-
handleDismiss();
43+
handleDismissRef();
4244
}
43-
}, [dismiss, handleDismiss]);
45+
}, [dismiss]);
4446

4547
const prevStatus = usePrevious(status);
4648

@@ -52,6 +54,11 @@ export const ToastRoot = (props: PrimitiveProps<"div", ToastRootProps, "role" |
5254

5355
const { reset, clear } = useTimeout(handleDismiss, duration);
5456

57+
useEventListener("blur", clear);
58+
useEventListener("focus", reset);
59+
60+
const translateStyle = placementTranslateStyles[placement?.split("-")[0] as keyof typeof placementTranslateStyles];
61+
5562
if (!isMounted) {
5663
return null;
5764
}
@@ -64,8 +71,6 @@ export const ToastRoot = (props: PrimitiveProps<"div", ToastRootProps, "role" |
6471
descriptionId,
6572
};
6673

67-
const translateStyle = placementTranslateStyles[placement?.split("-")[0] as keyof typeof placementTranslateStyles];
68-
6974
return (
7075
<div
7176
role="status"
@@ -74,7 +79,7 @@ export const ToastRoot = (props: PrimitiveProps<"div", ToastRootProps, "role" |
7479
ref={setElement}
7580
className={tx(
7681
"flex flex-col items-center",
77-
"transition-[opacity,translate] duration-[350ms] will-change-[opacity,translate]",
82+
"transition-[opacity,translate] duration-300",
7883
transitionEnable && status == "open" && ["opacity-100", translateStyle.open],
7984
transitionEnable && status == "close" && ["opacity-0", translateStyle.close],
8085
transitionEnable && status == "initial" && ["opacity-0", translateStyle.close],
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useCallback, useInsertionEffect, useRef } from "react";
22

3-
export const useEffectEvent = <Args extends unknown[], Return>(fn: ((...args: Args) => Return) | undefined) => {
3+
export const useEffectEvent = <A extends unknown[], R>(fn: ((...args: A) => R) | undefined) => {
44
const ref = useRef<typeof fn>(() => {
55
throw new Error("Cannot call an event handler while rendering.");
66
});
@@ -9,5 +9,5 @@ export const useEffectEvent = <Args extends unknown[], Return>(fn: ((...args: Ar
99
ref.current = fn;
1010
}, [fn]);
1111

12-
return useCallback((...args: Args) => ref.current?.(...args), []);
12+
return useCallback((...args: A) => ref.current?.(...args), []);
1313
};

packages/react-ui/src/hooks/use-timeout/index.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,28 @@ export const useTimeout = (callback: () => void, delay: number | null) => {
66
const ref = useLatestRef(callback);
77
const timer = useRef<ReturnType<typeof setTimeout>>(null);
88

9-
const clear = useEffectEvent(() => {
9+
const clear = () => {
1010
if (timer.current) {
1111
clearTimeout(timer.current);
1212
timer.current = null;
1313
}
14-
});
14+
};
1515

16-
const reset = useEffectEvent(() => {
16+
const reset = () => {
1717
clear();
1818

1919
if (delay !== null) {
2020
timer.current = setTimeout(() => ref.current(), delay);
2121
}
22-
});
22+
};
23+
24+
const resetRef = useEffectEvent(reset);
2325

2426
useEffect(() => {
25-
reset();
27+
resetRef();
2628

2729
return clear;
28-
}, [clear, reset]);
30+
}, []);
2931

3032
return { clear, reset };
3133
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
diff --git a/cjs/eslint-plugin-react-hooks.development.js b/cjs/eslint-plugin-react-hooks.development.js
2+
index 128ec146542487b7f6b3d4785f0e812791e4891d..d1fc56fa0951bb42e4e2dca37ce7d4177dc3fa8f 100644
3+
--- a/cjs/eslint-plugin-react-hooks.development.js
4+
+++ b/cjs/eslint-plugin-react-hooks.development.js
5+
@@ -157,7 +157,7 @@ function isInsideDoWhileLoop(node) {
6+
return false;
7+
}
8+
function isUseEffectEventIdentifier$1(node) {
9+
- return false;
10+
+ return node.type === 'Identifier' && node.name === 'useEffectEvent';
11+
}
12+
function isUseIdentifier(node) {
13+
return isReactFunction(node, 'use');
14+
@@ -718,7 +718,7 @@ var rule$1 = {
15+
// another useEffectEvent
16+
if (node.callee.type === 'Identifier' &&
17+
(node.callee.name === 'useEffect' ||
18+
- isUseEffectEventIdentifier$1()) &&
19+
+ isUseEffectEventIdentifier$1(node.callee)) &&
20+
node.arguments.length > 0) {
21+
// Denote that we have traversed into a useEffect call, and stash the CallExpr for
22+
// comparison later when we exit
23+
@@ -1056,7 +1056,7 @@ var rule = {
24+
// useRef() return value is stable.
25+
return true;
26+
}
27+
- else if (isUseEffectEventIdentifier() &&
28+
+ else if (isUseEffectEventIdentifier(callee) &&
29+
id.type === 'Identifier') {
30+
try {
31+
for (var _d = __values(resolved.references), _e = _d.next(); !_e.done; _e = _d.next()) {
32+
@@ -2676,7 +2676,7 @@ function isAncestorNodeOf(a, b) {
33+
a.range[1] >= b.range[1]);
34+
}
35+
function isUseEffectEventIdentifier(node) {
36+
- return false;
37+
+ return node.type === 'Identifier' && node.name === 'useEffectEvent';
38+
}
39+
function getUnknownDependenciesMessage(reactiveHookName) {
40+
return ("React Hook ".concat(reactiveHookName, " received a function whose dependencies ") +
41+
diff --git a/cjs/eslint-plugin-react-hooks.production.js b/cjs/eslint-plugin-react-hooks.production.js
42+
index f646fa15bda010d40af42d246e6be4c8e1bb4a64..fd20abfd3cd7c8e73cd7803a6aee4aa958255c99 100644
43+
--- a/cjs/eslint-plugin-react-hooks.production.js
44+
+++ b/cjs/eslint-plugin-react-hooks.production.js
45+
@@ -153,7 +153,7 @@ function isInsideDoWhileLoop(node) {
46+
return false;
47+
}
48+
function isUseEffectEventIdentifier$1(node) {
49+
- return false;
50+
+ return node.type === 'Identifier' && node.name === 'useEffectEvent';
51+
}
52+
function isUseIdentifier(node) {
53+
return isReactFunction(node, 'use');
54+
@@ -714,7 +714,7 @@ var rule$1 = {
55+
// another useEffectEvent
56+
if (node.callee.type === 'Identifier' &&
57+
(node.callee.name === 'useEffect' ||
58+
- isUseEffectEventIdentifier$1()) &&
59+
+ isUseEffectEventIdentifier$1(node.callee)) &&
60+
node.arguments.length > 0) {
61+
// Denote that we have traversed into a useEffect call, and stash the CallExpr for
62+
// comparison later when we exit
63+
@@ -1052,7 +1052,7 @@ var rule = {
64+
// useRef() return value is stable.
65+
return true;
66+
}
67+
- else if (isUseEffectEventIdentifier() &&
68+
+ else if (isUseEffectEventIdentifier(callee) &&
69+
id.type === 'Identifier') {
70+
try {
71+
for (var _d = __values(resolved.references), _e = _d.next(); !_e.done; _e = _d.next()) {
72+
@@ -2672,7 +2672,7 @@ function isAncestorNodeOf(a, b) {
73+
a.range[1] >= b.range[1]);
74+
}
75+
function isUseEffectEventIdentifier(node) {
76+
- return false;
77+
+ return node.type === 'Identifier' && node.name === 'useEffectEvent';
78+
}
79+
function getUnknownDependenciesMessage(reactiveHookName) {
80+
return ("React Hook ".concat(reactiveHookName, " received a function whose dependencies ") +

0 commit comments

Comments
 (0)