fix: guard overlay positioning refs

This commit is contained in:
Ajax Davis 2026-01-20 16:52:18 +10:00
parent 48c41e8733
commit a7c7c08f44
3 changed files with 18 additions and 6 deletions

View file

@ -186,8 +186,12 @@ export const DropdownMenu = forwardRef<HTMLDivElement, DropdownMenuProps>(
if (!isOpen || !triggerRef.current || !contentRef.current) return;
const updatePosition = () => {
const triggerRect = triggerRef.current?.getBoundingClientRect();
const contentRect = contentRef.current?.getBoundingClientRect();
const triggerElement = triggerRef.current;
const contentElement = contentRef.current;
if (!triggerElement || !contentElement) return;
const triggerRect = triggerElement.getBoundingClientRect();
const contentRect = contentElement.getBoundingClientRect();
const newPosition = calculatePosition(triggerRect, contentRect, placement, offset);
setPosition(newPosition);
};

View file

@ -191,8 +191,12 @@ export const Popover = forwardRef<HTMLDivElement, PopoverProps>(
if (!isOpen || !triggerRef.current || !contentRef.current) return;
const updatePosition = () => {
const triggerRect = triggerRef.current?.getBoundingClientRect();
const contentRect = contentRef.current?.getBoundingClientRect();
const triggerElement = triggerRef.current;
const contentElement = contentRef.current;
if (!triggerElement || !contentElement) return;
const triggerRect = triggerElement.getBoundingClientRect();
const contentRect = contentElement.getBoundingClientRect();
const newPosition = calculatePosition(triggerRect, contentRect, placement, offset);
setPosition(newPosition);
};

View file

@ -176,8 +176,12 @@ export const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(
if (!isOpen || !triggerRef.current || !contentRef.current) return;
const updatePosition = () => {
const triggerRect = triggerRef.current?.getBoundingClientRect();
const contentRect = contentRef.current?.getBoundingClientRect();
const triggerElement = triggerRef.current;
const contentElement = contentRef.current;
if (!triggerElement || !contentElement) return;
const triggerRect = triggerElement.getBoundingClientRect();
const contentRect = contentElement.getBoundingClientRect();
const newPosition = calculatePosition(triggerRect, contentRect, placement, offset);
setPosition(newPosition);
};