import React from 'react';
import styled, { css } from 'styled-components';
import type { JSX } from 'react';
import { Link } from '@redocly/theme/components/Link/Link';
import { Tooltip } from '@redocly/theme/components/Tooltip/Tooltip';
import { BreadcrumbIcon } from '@redocly/theme/components/Breadcrumbs/BreadcrumbIcon';
import { trimText } from '@redocly/theme/core/utils';
import { BREADCRUMB_MAX_LENGTH } from '@redocly/theme/core/constants';
type BreadcrumbProps = {
label: string;
link?: string;
isActive: boolean;
onClick?: () => void;
icon?: string;
};
export function Breadcrumb({ label, link, isActive, onClick, icon }: BreadcrumbProps): JSX.Element {
const isTruncated = label.length > BREADCRUMB_MAX_LENGTH;
const displayLabel = trimText(label, BREADCRUMB_MAX_LENGTH);
const content = (
<>
{displayLabel}
>
);
const breadcrumbContent = link ? (
{content}
) : (
{content}
);
return isTruncated ? (
{breadcrumbContent}
) : (
breadcrumbContent
);
}
const baseBreadcrumbStyles = `
display: flex;
align-items: center;
gap: var(--breadcrumbs-gap);
padding: var(--breadcrumb-padding);
border-radius: var(--border-radius);
color: var(--breadcrumbs-text-color);
text-decoration: none;
&:hover {
background-color: var(--breadcrumbs-background-color-hover);
}
&:focus {
box-shadow: var(--breadcrumbs-box-shadow-focus);
outline: none;
}
`;
const activeColorStyles = css`
color: var(--breadcrumbs-text-color-active);
`;
const BreadcrumbWrapper = styled.div<{ $isActive: boolean }>`
${baseBreadcrumbStyles}
${(props) => props.$isActive && activeColorStyles}
cursor: default;
pointer-events: none;
&:focus {
box-shadow: none;
outline: none;
}
&:hover {
background-color: transparent;
}
`;
const BreadcrumbLink = styled(Link)<{ $isActive: boolean }>`
${baseBreadcrumbStyles}
${(props) => props.$isActive && activeColorStyles}
`;