diff --git a/package-lock.json b/package-lock.json index 54c60c2..4e6e725 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@testing-library/react": "^16.1.0", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/node": "^24.2.1", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "better-commits": "^1.17.0", "eslint": "^9.35.0", "eslint-plugin-jsdoc": "^54.0.0", @@ -365,7 +365,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "dev": true, + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 6d5902d..063b6ae 100644 --- a/package.json +++ b/package.json @@ -62,8 +62,8 @@ "@testing-library/react": "^16.1.0", "@trivago/prettier-plugin-sort-imports": "^6.0.2", "@types/node": "^24.2.1", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "better-commits": "^1.17.0", "eslint": "^9.35.0", "eslint-plugin-jsdoc": "^54.0.0", diff --git a/src/react/merge-refs.ts b/src/react/merge-refs.ts index fb36f59..a8163cb 100644 --- a/src/react/merge-refs.ts +++ b/src/react/merge-refs.ts @@ -10,12 +10,26 @@ export function mergeRefs( list: Array | RefObject | RefCallback | null | undefined>, ): Ref { return (value: T) => { + const destructors: VoidFunction[] = []; + for (const ref of list) { if (typeof ref === 'function') { - ref(value); + const destructor = ref(value); + + if (destructor) { + destructors.push(destructor); + } } else if (ref) { ref.current = value; } } + + if (destructors.length > 0) { + return () => { + for (const destructor of destructors) { + destructor(); + } + }; + } }; }