Code snippet from nav on the Unity Discord
bool IsPointerOverUI()
{
PointerEventData eventData = new(EventSystem.current);
eventData.position = Input.mousePosition;
List<RaycastResult> results = new();
EventSystem.current.RaycastAll(eventData, results);
return results.Count > 0;
}