102 lines
3.9 KiB
Diff
102 lines
3.9 KiB
Diff
diff --git a/dist/index.js b/dist/index.js
|
|
index 2d0d314a00082c458d2f551d715572cd1fa1b5c3..1954a52d7e25a2d733d57f2f32113af8a69a18bf 100644
|
|
--- a/dist/index.js
|
|
+++ b/dist/index.js
|
|
@@ -71,6 +71,29 @@ var PROVIDER_NAME = "TooltipProvider";
|
|
var DEFAULT_DELAY_DURATION = 700;
|
|
var TOOLTIP_OPEN = "tooltip.open";
|
|
var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_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 TooltipProvider = (props) => {
|
|
const {
|
|
__scopeTooltip,
|
|
@@ -128,6 +151,7 @@ var Tooltip = (props) => {
|
|
const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
|
|
const popperScope = usePopperScope(__scopeTooltip);
|
|
const [trigger, setTrigger] = React.useState(null);
|
|
+ const setTriggerRef = useGuardedNodeSetter(setTrigger);
|
|
const contentId = (0, import_react_id.useId)();
|
|
const openTimerRef = React.useRef(0);
|
|
const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
|
|
@@ -185,7 +209,7 @@ var Tooltip = (props) => {
|
|
open,
|
|
stateAttribute,
|
|
trigger,
|
|
- onTriggerChange: setTrigger,
|
|
+ onTriggerChange: setTriggerRef,
|
|
onTriggerEnter: React.useCallback(() => {
|
|
if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();
|
|
else handleOpen();
|
|
diff --git a/dist/index.mjs b/dist/index.mjs
|
|
index 568389bf3ce8123fa6de6d298878b32d613e25cf..a809f654d8b2d84be0f5747384a180a0864c7d44 100644
|
|
--- a/dist/index.mjs
|
|
+++ b/dist/index.mjs
|
|
@@ -24,6 +24,29 @@ var PROVIDER_NAME = "TooltipProvider";
|
|
var DEFAULT_DELAY_DURATION = 700;
|
|
var TOOLTIP_OPEN = "tooltip.open";
|
|
var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_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 TooltipProvider = (props) => {
|
|
const {
|
|
__scopeTooltip,
|
|
@@ -81,6 +104,7 @@ var Tooltip = (props) => {
|
|
const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
|
|
const popperScope = usePopperScope(__scopeTooltip);
|
|
const [trigger, setTrigger] = React.useState(null);
|
|
+ const setTriggerRef = useGuardedNodeSetter(setTrigger);
|
|
const contentId = useId();
|
|
const openTimerRef = React.useRef(0);
|
|
const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
|
|
@@ -138,7 +162,7 @@ var Tooltip = (props) => {
|
|
open,
|
|
stateAttribute,
|
|
trigger,
|
|
- onTriggerChange: setTrigger,
|
|
+ onTriggerChange: setTriggerRef,
|
|
onTriggerEnter: React.useCallback(() => {
|
|
if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();
|
|
else handleOpen();
|