mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-11-16 01:21:16 +01:00
Revert Tooltip.tsx to match V2 - remove unrelated changes
This commit is contained in:
parent
3e198309f5
commit
3855a3ccc4
@ -65,6 +65,10 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
const clickPendingRef = useRef(false);
|
const clickPendingRef = useRef(false);
|
||||||
const tooltipIdRef = useRef(`tooltip-${Math.random().toString(36).slice(2)}`);
|
const tooltipIdRef = useRef(`tooltip-${Math.random().toString(36).slice(2)}`);
|
||||||
|
|
||||||
|
// Runtime guard: some browsers may surface non-Node EventTargets for relatedTarget/target
|
||||||
|
const isDomNode = (value: unknown): value is Node =>
|
||||||
|
typeof Node !== 'undefined' && value instanceof Node;
|
||||||
|
|
||||||
const clearTimers = useCallback(() => {
|
const clearTimers = useCallback(() => {
|
||||||
if (openTimeoutRef.current) {
|
if (openTimeoutRef.current) {
|
||||||
clearTimeout(openTimeoutRef.current);
|
clearTimeout(openTimeoutRef.current);
|
||||||
@ -103,9 +107,9 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
(e: MouseEvent) => {
|
(e: MouseEvent) => {
|
||||||
const tEl = tooltipRef.current;
|
const tEl = tooltipRef.current;
|
||||||
const trg = triggerRef.current;
|
const trg = triggerRef.current;
|
||||||
const target = e.target as Node | null;
|
const target = e.target as unknown;
|
||||||
const insideTooltip = tEl && target && tEl.contains(target);
|
const insideTooltip = Boolean(tEl && isDomNode(target) && tEl.contains(target));
|
||||||
const insideTrigger = trg && target && trg.contains(target);
|
const insideTrigger = Boolean(trg && isDomNode(target) && trg.contains(target));
|
||||||
|
|
||||||
// If pinned: only close when clicking outside BOTH tooltip & trigger
|
// If pinned: only close when clicking outside BOTH tooltip & trigger
|
||||||
if (isPinned) {
|
if (isPinned) {
|
||||||
@ -172,7 +176,8 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
const related = e.relatedTarget as Node | null;
|
const related = e.relatedTarget as Node | null;
|
||||||
|
|
||||||
// Moving into the tooltip → keep open
|
// Moving into the tooltip → keep open
|
||||||
if (related && tooltipRef.current && tooltipRef.current.contains(related)) {
|
if (isDomNode(related) && tooltipRef.current && tooltipRef.current.contains(related)) {
|
||||||
|
|
||||||
(children.props as any)?.onPointerLeave?.(e);
|
(children.props as any)?.onPointerLeave?.(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -236,7 +241,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
const handleBlur = useCallback(
|
const handleBlur = useCallback(
|
||||||
(e: React.FocusEvent) => {
|
(e: React.FocusEvent) => {
|
||||||
const related = e.relatedTarget as Node | null;
|
const related = e.relatedTarget as Node | null;
|
||||||
if (related && tooltipRef.current && tooltipRef.current.contains(related)) {
|
if (isDomNode(related) && tooltipRef.current && tooltipRef.current.contains(related)) {
|
||||||
(children.props as any)?.onBlur?.(e);
|
(children.props as any)?.onBlur?.(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -258,7 +263,7 @@ export const Tooltip: React.FC<TooltipProps> = ({
|
|||||||
const handleTooltipPointerLeave = useCallback(
|
const handleTooltipPointerLeave = useCallback(
|
||||||
(e: React.PointerEvent) => {
|
(e: React.PointerEvent) => {
|
||||||
const related = e.relatedTarget as Node | null;
|
const related = e.relatedTarget as Node | null;
|
||||||
if (related && triggerRef.current && triggerRef.current.contains(related)) return;
|
if (isDomNode(related) && triggerRef.current && triggerRef.current.contains(related)) return;
|
||||||
if (!isPinned) setOpen(false);
|
if (!isPinned) setOpen(false);
|
||||||
},
|
},
|
||||||
[isPinned, setOpen]
|
[isPinned, setOpen]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user