UEA-PRODEM
This commit is contained in:
+35
-2
@@ -2,7 +2,6 @@
|
||||
|
||||
// src/presence.tsx
|
||||
import * as React2 from "react";
|
||||
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
||||
import { useLayoutEffect } from "@radix-ui/react-use-layout-effect";
|
||||
|
||||
// src/use-state-machine.tsx
|
||||
@@ -19,7 +18,7 @@ var Presence = (props) => {
|
||||
const { present, children } = props;
|
||||
const presence = usePresence(present);
|
||||
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React2.Children.only(children);
|
||||
const ref = useComposedRefs(presence.ref, getElementRef(child));
|
||||
const ref = useStableComposedRefs(presence.ref, getElementRef(child));
|
||||
const forceMount = typeof children === "function";
|
||||
return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;
|
||||
};
|
||||
@@ -115,6 +114,40 @@ function usePresence(present) {
|
||||
}, [])
|
||||
};
|
||||
}
|
||||
function setRef(ref, value) {
|
||||
if (typeof ref === "function") {
|
||||
return ref(value);
|
||||
} else if (ref !== null && ref !== void 0) {
|
||||
ref.current = value;
|
||||
}
|
||||
}
|
||||
function useStableComposedRefs(...refs) {
|
||||
const refsRef = React2.useRef(refs);
|
||||
refsRef.current = refs;
|
||||
return React2.useCallback((node) => {
|
||||
const currentRefs = refsRef.current;
|
||||
let hasCleanup = false;
|
||||
const cleanups = currentRefs.map((ref) => {
|
||||
const cleanup = setRef(ref, node);
|
||||
if (!hasCleanup && typeof cleanup === "function") {
|
||||
hasCleanup = true;
|
||||
}
|
||||
return cleanup;
|
||||
});
|
||||
if (hasCleanup) {
|
||||
return () => {
|
||||
for (let i = 0; i < cleanups.length; i++) {
|
||||
const cleanup = cleanups[i];
|
||||
if (typeof cleanup === "function") {
|
||||
cleanup();
|
||||
} else {
|
||||
setRef(currentRefs[i], null);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}, []);
|
||||
}
|
||||
function getAnimationName(styles) {
|
||||
return styles?.animationName || "none";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user