"use client" import { cx } from "class-variance-authority" import Link from "next/link" import { useEffect, useState } from "react" import { Breadcrumbs as AriaBreadcrumbs, Button, Dialog, DialogTrigger, OverlayArrow, Popover, } from "react-aria-components" import { useIntl } from "react-intl" import { MaterialIcon } from "@scandic-hotels/design-system/Icons/MaterialIcon" import { Typography } from "@scandic-hotels/design-system/Typography" import { debounce } from "@/utils/debounce" import { Arrow } from "../Popover/Arrow" import { Breadcrumb } from "./Breadcrumb" import { splitBreadcrumbs } from "./utils" import { breadcrumbsVariants } from "./variants" import styles from "./breadcrumbs.module.css" import type { BreadcrumbsProps } from "./breadcrumbs" export default function Breadcrumbs({ breadcrumbs, color, size, }: 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 = breadcrumbsVariants({ color, size, }) const [homeBreadcrumb, remainingBreadcrumbs, lastBreadcrumb] = splitBreadcrumbs(breadcrumbs) return ( ) }