zebflow 0.11.14

Reactive web automation platform — pipelines, templates, and real-time collaboration in a single binary.
Documentation
import { cx } from "zeb/react";

/**
 * Breadcrumb — shadcn/ui's breadcrumb, on Zebflow's engine.
 *
 * `BreadcrumbLink` always renders an `<a>` — no `asChild`/`Slot` here, so
 * there is nothing to swap it for. Icons are inline `<svg>` (no lucide);
 * `BreadcrumbSeparator`'s auto-sizing of a custom child icon
 * (`[&>svg]:size-3.5`, a bracket selector) is dropped — size a custom
 * separator icon yourself.
 */

export function Breadcrumb({ children, ...rest }) {
  return (
    <nav data-slot="breadcrumb" aria-label="breadcrumb" {...rest}>
      {children}
    </nav>
  );
}

export function BreadcrumbList({ className, children, ...rest }) {
  return (
    <ol
      data-slot="breadcrumb-list"
      className={cx("flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5", className)}
      {...rest}
    >
      {children}
    </ol>
  );
}

export function BreadcrumbItem({ className, children, ...rest }) {
  return (
    <li data-slot="breadcrumb-item" className={cx("inline-flex items-center gap-1.5", className)} {...rest}>
      {children}
    </li>
  );
}

export function BreadcrumbLink({ className, children, ...rest }) {
  return (
    <a data-slot="breadcrumb-link" className={cx("transition-colors hover:text-foreground", className)} {...rest}>
      {children}
    </a>
  );
}

export function BreadcrumbPage({ className, children, ...rest }) {
  return (
    <span
      data-slot="breadcrumb-page"
      role="link"
      aria-disabled="true"
      aria-current="page"
      className={cx("font-normal text-foreground", className)}
      {...rest}
    >
      {children}
    </span>
  );
}

export function BreadcrumbSeparator({ className, children, ...rest }) {
  return (
    <li data-slot="breadcrumb-separator" role="presentation" aria-hidden="true" className={cx(className)} {...rest}>
      {children ?? (
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="size-3.5">
          <path d="m9 18 6-6-6-6" />
        </svg>
      )}
    </li>
  );
}

export function BreadcrumbEllipsis({ className, ...rest }) {
  return (
    <span data-slot="breadcrumb-ellipsis" role="presentation" aria-hidden="true" className={cx("flex size-9 items-center justify-center", className)} {...rest}>
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="size-4">
        <circle cx="12" cy="12" r="1" />
        <circle cx="19" cy="12" r="1" />
        <circle cx="5" cy="12" r="1" />
      </svg>
      <span className="sr-only">More</span>
    </span>
  );
}

export default Breadcrumb;