88 lines
3.6 KiB
Diff
88 lines
3.6 KiB
Diff
diff --git a/dist/index.js b/dist/index.js
|
|
index 5cb1fd007d32021ad950d961dd4a0868576a2c0d..795a24fe0e75aaa042cad0a376a776f3e1436269 100644
|
|
--- a/dist/index.js
|
|
+++ b/dist/index.js
|
|
@@ -61,6 +61,29 @@ var ALIGN_OPTIONS = ["start", "center", "end"];
|
|
var POPPER_NAME = "Popper";
|
|
var [createPopperContext, createPopperScope] = (0, import_react_context.createContextScope)(POPPER_NAME);
|
|
var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
|
|
+function useGuardedNodeSetter(setNode) {
|
|
+ const nodeRef = React.useRef(null);
|
|
+ const nodeCleanupGenerationRef = React.useRef(0);
|
|
+ return React.useCallback((node) => {
|
|
+ const syncNode = (nextNode) => {
|
|
+ if (nodeRef.current === nextNode) return;
|
|
+ nodeRef.current = nextNode;
|
|
+ setNode(nextNode);
|
|
+ };
|
|
+ nodeCleanupGenerationRef.current += 1;
|
|
+ const cleanupGeneration = nodeCleanupGenerationRef.current;
|
|
+ if (node) {
|
|
+ syncNode(node);
|
|
+ return;
|
|
+ }
|
|
+ queueMicrotask(() => {
|
|
+ if (nodeCleanupGenerationRef.current !== cleanupGeneration) {
|
|
+ return;
|
|
+ }
|
|
+ syncNode(null);
|
|
+ });
|
|
+ }, [setNode]);
|
|
+}
|
|
var Popper = (props) => {
|
|
const { __scopePopper, children } = props;
|
|
const [anchor, setAnchor] = React.useState(null);
|
|
@@ -108,7 +131,8 @@ var PopperContent = React.forwardRef(
|
|
} = props;
|
|
const context = usePopperContext(CONTENT_NAME, __scopePopper);
|
|
const [content, setContent] = React.useState(null);
|
|
- const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, (node) => setContent(node));
|
|
+ const setContentRef = useGuardedNodeSetter(setContent);
|
|
+ const composedRefs = (0, import_react_compose_refs.useComposedRefs)(forwardedRef, setContentRef);
|
|
const [arrow, setArrow] = React.useState(null);
|
|
const arrowSize = (0, import_react_use_size.useSize)(arrow);
|
|
const arrowWidth = arrowSize?.width ?? 0;
|
|
diff --git a/dist/index.mjs b/dist/index.mjs
|
|
index 9f84984eab84e32d20d6c052217da0e3b8374b40..0ffdb6313708ab3113c0ce40fe4519b6b605deff 100644
|
|
--- a/dist/index.mjs
|
|
+++ b/dist/index.mjs
|
|
@@ -26,6 +26,29 @@ var ALIGN_OPTIONS = ["start", "center", "end"];
|
|
var POPPER_NAME = "Popper";
|
|
var [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);
|
|
var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
|
|
+function useGuardedNodeSetter(setNode) {
|
|
+ const nodeRef = React.useRef(null);
|
|
+ const nodeCleanupGenerationRef = React.useRef(0);
|
|
+ return React.useCallback((node) => {
|
|
+ const syncNode = (nextNode) => {
|
|
+ if (nodeRef.current === nextNode) return;
|
|
+ nodeRef.current = nextNode;
|
|
+ setNode(nextNode);
|
|
+ };
|
|
+ nodeCleanupGenerationRef.current += 1;
|
|
+ const cleanupGeneration = nodeCleanupGenerationRef.current;
|
|
+ if (node) {
|
|
+ syncNode(node);
|
|
+ return;
|
|
+ }
|
|
+ queueMicrotask(() => {
|
|
+ if (nodeCleanupGenerationRef.current !== cleanupGeneration) {
|
|
+ return;
|
|
+ }
|
|
+ syncNode(null);
|
|
+ });
|
|
+ }, [setNode]);
|
|
+}
|
|
var Popper = (props) => {
|
|
const { __scopePopper, children } = props;
|
|
const [anchor, setAnchor] = React.useState(null);
|
|
@@ -73,7 +96,8 @@ var PopperContent = React.forwardRef(
|
|
} = props;
|
|
const context = usePopperContext(CONTENT_NAME, __scopePopper);
|
|
const [content, setContent] = React.useState(null);
|
|
- const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));
|
|
+ const setContentRef = useGuardedNodeSetter(setContent);
|
|
+ const composedRefs = useComposedRefs(forwardedRef, setContentRef);
|
|
const [arrow, setArrow] = React.useState(null);
|
|
const arrowSize = useSize(arrow);
|
|
const arrowWidth = arrowSize?.width ?? 0;
|