| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- import * as React from 'react';
- import { mergeProps } from '@base-ui/react/merge-props';
- import { useRender } from '@base-ui/react/use-render';
- import { cn } from '@/lib/utils';
- import { ChevronRightIcon, MoreHorizontalIcon } from 'lucide-react';
- function Breadcrumb({ className, ...props }: React.ComponentProps<'nav'>) {
- return (
- <nav
- aria-label="breadcrumb"
- data-slot="breadcrumb"
- className={cn(className)}
- {...props}
- />
- );
- }
- function BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {
- return (
- <ol
- data-slot="breadcrumb-list"
- className={cn(
- 'text-muted-foreground gap-1.5 text-sm flex flex-wrap items-center wrap-break-word',
- className,
- )}
- {...props}
- />
- );
- }
- function BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {
- return (
- <li
- data-slot="breadcrumb-item"
- className={cn('gap-1 inline-flex items-center', className)}
- {...props}
- />
- );
- }
- function BreadcrumbLink({
- className,
- render,
- ...props
- }: useRender.ComponentProps<'a'>) {
- return useRender({
- defaultTagName: 'a',
- props: mergeProps<'a'>(
- {
- className: cn('hover:text-foreground transition-colors', className),
- },
- props,
- ),
- render,
- state: {
- slot: 'breadcrumb-link',
- },
- });
- }
- function BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {
- return (
- <span
- data-slot="breadcrumb-page"
- role="link"
- aria-disabled="true"
- aria-current="page"
- className={cn('text-foreground font-normal', className)}
- {...props}
- />
- );
- }
- function BreadcrumbSeparator({
- children,
- className,
- ...props
- }: React.ComponentProps<'li'>) {
- return (
- <li
- data-slot="breadcrumb-separator"
- role="presentation"
- aria-hidden="true"
- className={cn('[&>svg]:size-3.5', className)}
- {...props}
- >
- {children ?? <ChevronRightIcon className="cn-rtl-flip" />}
- </li>
- );
- }
- function BreadcrumbEllipsis({
- className,
- ...props
- }: React.ComponentProps<'span'>) {
- return (
- <span
- data-slot="breadcrumb-ellipsis"
- role="presentation"
- aria-hidden="true"
- className={cn(
- 'size-5 [&>svg]:size-4 flex items-center justify-center',
- className,
- )}
- {...props}
- >
- <MoreHorizontalIcon />
- <span className="sr-only">More</span>
- </span>
- );
- }
- export {
- Breadcrumb,
- BreadcrumbList,
- BreadcrumbItem,
- BreadcrumbLink,
- BreadcrumbPage,
- BreadcrumbSeparator,
- BreadcrumbEllipsis,
- };
|