// // Copyright 2023 DXOS.org // import { Dot } from '@phosphor-icons/react'; import { Primitive } from '@radix-ui/react-primitive'; import { Slot } from '@radix-ui/react-slot'; import React, { type ComponentPropsWithoutRef, type ComponentPropsWithRef, forwardRef } from 'react'; import { useThemeContext } from '../../hooks'; import { type ThemedClassName } from '../../util'; import { Link, type LinkProps } from '../Link'; type BreadcrumbRootProps = ThemedClassName> & { 'aria-label': string; asChild?: boolean; }; const BreadcrumbRoot = forwardRef( ({ asChild, classNames, ...props }, forwardedRef) => { const { tx } = useThemeContext(); const Root = asChild ? Slot : Primitive.div; return ( ); }, ); type BreadcrumbListProps = ThemedClassName> & { asChild?: boolean }; const BreadcrumbList = forwardRef( ({ asChild, classNames, ...props }, forwardedRef) => { const { tx } = useThemeContext(); const Root = asChild ? Slot : Primitive.ol; return ( ); }, ); type BreadcrumbListItemProps = ThemedClassName> & { asChild?: boolean }; const BreadcrumbListItem = forwardRef( ({ asChild, classNames, ...props }, forwardedRef) => { const { tx } = useThemeContext(); const Root = asChild ? Slot : Primitive.li; return ( ); }, ); type BreadcrumbLinkProps = LinkProps; const BreadcrumbLink = forwardRef(({ asChild, ...props }, forwardedRef) => { const Root = asChild ? Slot : Link; return ; }); type BreadcrumbCurrentProps = ThemedClassName> & { asChild?: boolean }; const BreadcrumbCurrent = forwardRef( ({ asChild, classNames, ...props }, forwardedRef) => { const { tx } = useThemeContext(); const Root = asChild ? Slot : 'h1'; return ( ); }, ); type BreadcrumbSeparatorProps = ThemedClassName>; const BreadcrumbSeparator = ({ children, classNames, ...props }: BreadcrumbSeparatorProps) => { const { tx } = useThemeContext(); return ( ); }; export const Breadcrumb = { Root: BreadcrumbRoot, List: BreadcrumbList, ListItem: BreadcrumbListItem, Link: BreadcrumbLink, Current: BreadcrumbCurrent, Separator: BreadcrumbSeparator, }; export type { BreadcrumbRootProps, BreadcrumbListProps, BreadcrumbListItemProps, BreadcrumbLinkProps, BreadcrumbCurrentProps, BreadcrumbSeparatorProps, };