"use client" import { cx } from "class-variance-authority" import NextLink from "next/link" import { useEffect, useState } from "react" import { Breadcrumbs as BreadcrumbsRAC, Button as ButtonRAC, Dialog as DialogRAC, DialogTrigger as DialogTriggerRAC, OverlayArrow as OverlayArrowRAC, Popover as PopoverRAC, } from "react-aria-components" import { useIntl } from "react-intl" import { debounce } from "@scandic-hotels/common/utils/debounce" import { Arrow } from "./Arrow" import { Breadcrumb } from "./Breadcrumb" import { splitBreadcrumbs } from "./utils" import { variants } from "./variants" import styles from "./breadcrumbs.module.css" import { MaterialIcon } from "../Icons/MaterialIcon" import { Typography } from "../Typography" import { BreadcrumbsProps } from "./types" export function Breadcrumbs({ breadcrumbs, color, size, isThemed, }: BreadcrumbsProps) { const intl = useIntl() // using a ref instead to detect when the element is available and forcing a render const [element, attachRef] = useState(null) const [isTooltipDisabled, setIsTooltipDisabled] = useState(false) useEffect(() => { const observer = new ResizeObserver( debounce(([entry]) => { const el = entry.target setIsTooltipDisabled(el.clientWidth >= el.scrollWidth) }, 200) ) if (element) { observer.observe(element) } return () => { if (element) { observer.unobserve(element) } } }, [element]) if (!breadcrumbs?.length) { return null } const classNames = variants({ color, size, isThemed, }) const [homeBreadcrumb, remainingBreadcrumbs, lastBreadcrumb] = splitBreadcrumbs(breadcrumbs) return ( ) }