import React from 'react';
import clsx from 'clsx';
import {ThemeClassNames} from '@docusaurus/theme-common';
import {
  useSidebarBreadcrumbs,
  useHomePageRoute,
} from '@docusaurus/theme-common/internal';
import { useDoc } from "@docusaurus/theme-common/internal";
import Link from '@docusaurus/Link';
import {translate} from '@docusaurus/Translate';
import HomeBreadcrumbItem from '@theme/DocBreadcrumbs/Items/Home';
import styles from './styles.module.css';
// TODO move to design system folder
function BreadcrumbsItemLink({children, href, isLast}) {
  const className = 'breadcrumbs__link';
  if (isLast) {
    return (
      <span className={className} itemProp="name">
        {children}
      </span>
    );
  }
  return href ? (
    <Link className={className} href={href} itemProp="item">
      <span itemProp="name">{children}</span>
    </Link>
  ) : (
    // TODO Google search console doesn't like breadcrumb items without href.
    // The schema doesn't seem to require `id` for each `item`, although Google
    // insist to infer one, even if it's invalid. Removing `itemProp="item
    // name"` for now, since I don't know how to properly fix it.
    // See https://github.com/facebook/docusaurus/issues/7241
    <span className={className}>{children}</span>
  );
}
// TODO move to design system folder
function BreadcrumbsItem({children, active, index, addMicrodata}) {
  return (
    <li
      {...(addMicrodata && {
        itemScope: true,
        itemProp: 'itemListElement',
        itemType: 'https://schema.org/ListItem',
      })}
      className={clsx('breadcrumbs__item', {
        'breadcrumbs__item--active': active,
      })}>
      {children}
      <meta itemProp="position" content={String(index + 1)} />
    </li>
  );
}
export default function DocBreadcrumbs() {
  const breadcrumbs = useSidebarBreadcrumbs();
  const homePageRoute = useHomePageRoute();
  const { metadata } = useDoc();
  const topLevel = isTopLevel(metadata?.slug);

  if (!breadcrumbs) {
    return null;
  }
  return (
    <nav
      className={clsx(
        ThemeClassNames.docs.docBreadcrumbs,
        styles.breadcrumbsContainer,
      )}
      style={{ marginBottom: topLevel ? 46 : 58 }}
      aria-label={translate({
        id: 'theme.docs.breadcrumbs.navAriaLabel',
        message: 'Breadcrumbs',
        description: 'The ARIA label for the breadcrumbs',
      })}>
      <ul
        className="breadcrumbs"
        itemScope
        itemType="https://schema.org/BreadcrumbList">
        {homePageRoute && <HomeBreadcrumbItem />}
        {breadcrumbs.map((item, idx) => {
          const isLast = idx === breadcrumbs.length - 1;
          const href =
            item.type === 'category' && item.linkUnlisted
              ? undefined
              : item.href;
          return (
            <BreadcrumbsItem
              key={idx}
              active={isLast}
              index={idx}
              addMicrodata={!!href}>
              <BreadcrumbsItemLink href={href} isLast={isLast}>
                {item.label}
              </BreadcrumbsItemLink>
            </BreadcrumbsItem>
          );
        })}
      </ul>
    </nav>
  );
}

function isTopLevel(str) {
  return str.split("/").length - 1 < 2;
}

Synonyms

pussy-ts/src/components/index.js
cyb/src/components/index.js
cyb/netlify/prebuild/index.js
pussy-ts/netlify/prebuild/index.js
cybertensor-developer-docs/src/theme/Footer/index.js
cybertensor-developer-docs/src/theme/EditThisPage/index.js
cybertensor-developer-docs/src/theme/NavbarItem/index.js
cybertensor-developer-docs/src/theme/Navbar/index.js
cybertensor-developer-docs/src/theme/DocSidebarItem/index.js
cybertensor-developer-docs/src/theme/SearchBar/index.js
cybertensor-developer-docs/src/theme/DocSidebar/index.js
cybertensor-developer-docs/src/theme/TOC/index.js
cybertensor-developer-docs/src/theme/DocSidebarItems/index.js
cybertensor-developer-docs/src/theme/MDXComponents/index.js
cyb/src/pages/teleport/hooks/index.js
pussy-ts/src/containers/warp/pool/index.js
pussy-ts/src/containers/energy/tab/index.js
cybertensor-developer-docs/src/theme/Navbar/Search/index.js
pussy-ts/src/components/particle/components/index.js
cyb/src/containers/temple/hooks/index.js
cybertensor-developer-docs/src/theme/DocSidebarItem/Category/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/index.js
cyb/src/containers/sigma/components/index.js
cybertensor-developer-docs/src/theme/NavbarItem/LocaleDropdownNavbarItem/index.js
cybertensor-developer-docs/src/theme/DocItem/Content/index.js
cyb/src/containers/energy/component/index.js
cyb/src/containers/warp/pool/index.js
cybertensor-developer-docs/src/theme/Icon/LightMode/index.js
pussy-ts/src/containers/energy/ui/index.js
cybertensor-developer-docs/src/theme/Navbar/ColorModeToggle/index.js
pussy-ts/src/containers/temple/pages/index.js
cybertensor-developer-docs/src/theme/Footer/Layout/index.js
cybertensor-developer-docs/src/theme/MDXComponents/Ul/index.js
pussy-ts/src/pages/teleport/hooks/index.js
cybertensor-developer-docs/src/theme/DocSidebarItem/Html/index.js
cybertensor-developer-docs/src/theme/DocItem/Layout/index.js
cyb/src/components/particle/components/index.js
cybertensor-developer-docs/src/theme/Footer/Links/index.js
pussy-ts/src/containers/energy/component/index.js
cybertensor-developer-docs/src/theme/DocSidebar/Mobile/index.js
pussy-ts/src/containers/sigma/components/index.js
cybertensor-developer-docs/src/theme/DocItem/Footer/index.js
cybertensor-developer-docs/src/theme/DocSidebarItem/Link/index.js
cybertensor-developer-docs/src/theme/Footer/Logo/index.js
cybertensor-developer-docs/src/theme/Icon/DarkMode/index.js
cybertensor-developer-docs/src/theme/MDXComponents/Cards/index.js
pussy-ts/src/containers/nebula/components/index.js
cyb/src/containers/energy/ui/index.js
cybertensor-developer-docs/src/theme/Navbar/Content/index.js
cyb/src/containers/nebula/components/index.js
pussy-ts/src/containers/temple/hooks/index.js
cyb/src/containers/energy/tab/index.js
cybertensor-developer-docs/src/theme/DocSidebar/Desktop/index.js
cyb/src/containers/temple/pages/index.js
cybertensor-developer-docs/src/theme/Navbar/Layout/index.js
cybertensor-developer-docs/src/theme/Navbar/Logo/index.js
cybertensor-developer-docs/src/theme/Icon/ExternalLink/index.js
cybertensor-developer-docs/src/theme/Icon/Arrow/index.js
cybertensor-developer-docs/src/theme/Admonition/Layout/index.js
cybertensor-developer-docs/src/theme/Footer/LinkItem/index.js
cybertensor-developer-docs/src/theme/Footer/Copyright/index.js
cybertensor-developer-docs/src/theme/NavbarItem/DropdownNavbarItem/index.js
cyb/src/pages/teleport/components/Inputs/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/Header/index.js
pussy-ts/src/containers/sigma/components/cardUi/index.js
cybertensor-developer-docs/src/theme/DocBreadcrumbs/Items/Home/index.js
pussy-ts/src/containers/portal/components/avataIpfs/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/PrimaryMenu/index.js
cyb/src/containers/temple/pages/play/index.js
cyb/src/pages/teleport/mainScreen/components/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/SecondaryMenu/index.js
cybertensor-developer-docs/src/theme/Footer/Links/MultiColumn/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/Toggle/index.js
pussy-ts/src/pages/teleport/mainScreen/components/index.js
cybertensor-developer-docs/src/theme/DocSidebar/Desktop/CollapseButton/index.js
cybertensor-developer-docs/src/theme/DocSidebar/Desktop/Content/index.js
cybertensor-developer-docs/src/theme/Footer/Links/Simple/index.js
pussy-ts/src/pages/teleport/components/Inputs/index.js
cyb/src/containers/portal/components/avataIpfs/index.js
cyb/src/containers/sigma/components/cardUi/index.js
pussy-ts/src/containers/temple/pages/play/index.js
cybertensor-developer-docs/src/theme/Navbar/MobileSidebar/Layout/index.js
cyb/src/pages/robot/_refactor/account/hooks/index.js
pussy-ts/src/pages/robot/_refactor/account/hooks/index.js

Neighbours