JGuang

Breadcrumbs

Breadcrumbs · Material UI

Preview
npm install @mui/material@9.4.0 @emotion/react@11.14.0 @emotion/styled@11.14.1

Breadcrumbs

Explain page hierarchy and provide links to ancestor pages.

This guide covers Material UI Core with the default Emotion engine; extensions and additional demos are explicitly classified.

Use case and business boundary

The host supplies hierarchy and routes; mark the current page and do not make every crumb a fake link.

Native composition and scope

Breadcrumbs, Link, Typography

Preserve native Material UI composition and types; do not substitute JGuang UI/Base UI/Radix APIs. Example entries are not extra components.

Native installation and initialization

npm install @mui/material@9.4.0 @emotion/react@11.14.0 @emotion/styled@11.14.1

Use native npm and Emotion, not an invented JGuang UI Registry URL. Place examples inside native ThemeProvider; choose CssBaseline or ScopedCssBaseline for the project. Inspect React, existing providers, lockfile and SSR first. Never overwrite files or conceal peer conflicts. This batch verified React 19.2.8; React 18 and below require matching react-is. See the included bilingual setup guide.

Practical native parameters

These selected parameters are not a flattened universal API. Preserve the native declaring owner, slot structure, nullable values and generics.

Owner.propPractical roleDeclaration source
Breadcrumbs.maxItemsMaximum Breadcrumbs items before the native collapse affordance.Breadcrumbs
Breadcrumbs.separatorBreadcrumbs' visual separator; do not use it as the accessible label.Breadcrumbs
Breadcrumbs.itemsBeforeCollapseNumber of leading crumbs kept when Breadcrumbs collapses.Breadcrumbs
Breadcrumbs.itemsAfterCollapseNumber of trailing crumbs kept when Breadcrumbs collapses.Breadcrumbs

Runnable native examples

Machine keys select example entries, not universal variant props. Native demo JSX/data stay unchanged; JGuang-authored acceptance fixtures are explicitly labelled.

  • Basic breadcrumbs · BasicBreadcrumbs · upstream native demo
  • Active last breadcrumb · ActiveLastBreadcrumb · upstream native demo
  • Custom separator · CustomSeparator · upstream native demo
  • Breadcrumbs with icons · IconBreadcrumbs · upstream native demo
  • Collapsed breadcrumbs · CollapsedBreadcrumbs · upstream native demo
  • Condensed with menu · CondensedWithMenu · upstream native demo
  • Customization · CustomizedBreadcrumbs · upstream native demo

Explicitly unsupported additional examples

These remain in the upstream inventory, not silently skipped or presented as working previews. Additional dependency/framework acceptance is required.

  • Integration with react-router · RouterBreadcrumbs: react-router

Actual usage example

Unmodified pinned native demo; copy its required local helper files together.

import * as React from 'react';
import Typography from '@mui/material/Typography';
import Breadcrumbs from '@mui/material/Breadcrumbs';
import Link from '@mui/material/Link';

function handleClick(event: React.MouseEvent<HTMLDivElement, MouseEvent>) {
  event.preventDefault();
  console.info('You clicked a breadcrumb.');
}

export default function BasicBreadcrumbs() {
  return (
    <div role="presentation" onClick={handleClick}>
      <Breadcrumbs aria-label="breadcrumb">
        <Link underline="hover" color="inherit" href="/">
          MUI
        </Link>
        <Link
          underline="hover"
          color="inherit"
          href="/material-ui/getting-started/installation/"
        >
          Core
        </Link>
        <Typography sx={{ color: 'text.primary' }}>Breadcrumbs</Typography>
      </Breadcrumbs>
    </div>
  );
}

Example dependency boundaries

react, @mui/material/Typography, @mui/material/Breadcrumbs, @mui/material/Link, @mui/material/Stack, @mui/icons-material/NavigateNext, @mui/icons-material/Home, @mui/icons-material/Whatshot, @mui/icons-material/Grain, @mui/material/Menu, @mui/material/MenuItem, @mui/material/IconButton, @mui/icons-material/MoreHoriz, @mui/material/styles, @mui/material/Chip, @mui/icons-material/ExpandMore

Direct Icons/System/Utils example imports require their matching 9.4.0 packages. Relative data/helpers are part of the example closure, not extra components. Remote images and simulated operations do not supply a backend.

Pinned upstream API metadata reference

These tables retain the upstream metadata, not a newly inferred generic type system. Conditional generics, inherited props and callback details are defined by the source declarations below. Theme defaults may override metadata defaults.

import Breadcrumbs from '@mui/material/Breadcrumbs';
import { Breadcrumbs } from '@mui/material';

Native inheritance: Typography. Parent/DOM props are not fabricated as additional own props.

PropRequiredUpstream metadata type / constraintMetadata default
childrennonode—
classesnoobject—
componentnoelementType—
expandTextnostring'Show path'
itemsAfterCollapsenointeger1
itemsBeforeCollapsenointeger1
maxItemsnointeger8
separatornonode'/'
slotPropsno{ collapsedIcon?: func | object }{}
slotsno{ CollapsedIcon?: elementType }{}
sxnoArray<func | object | bool> | func | object—
import Link from '@mui/material/Link';
import { Link } from '@mui/material';

Native inheritance: Typography. Parent/DOM props are not fabricated as additional own props.

PropRequiredUpstream metadata type / constraintMetadata default
childrennonode—
classesnoobject—
colorno'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning' | 'textPrimary' | 'textSecondary' | 'textDisabled' | string'primary'
componentnoelement type—
sxnoArray<func | object | bool> | func | object—
TypographyClassesnoobject—
underlineno'always' | 'hover' | 'none''always'
variantno'body1' | 'body2' | 'button' | 'caption' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'inherit' | 'overline' | 'subtitle1' | 'subtitle2' | string'inherit'

Typography

import Typography from '@mui/material/Typography';
import { Typography } from '@mui/material';
PropRequiredUpstream metadata type / constraintMetadata default
alignno'center' | 'inherit' | 'justify' | 'left' | 'right''inherit'
childrennonode—
classesnoobject—
colorno'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning' | 'textPrimary' | 'textSecondary' | 'textDisabled' | string—
componentnoelementType—
gutterBottomnoboolfalse
noWrapnoboolfalse
sxnoArray<func | object | bool> | func | object—
variantno'body1' | 'body2' | 'button' | 'caption' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'inherit' | 'overline' | 'subtitle1' | 'subtitle2' | string'body1'
variantMappingnoobject{ h1: 'h1', h2: 'h2', h3: 'h3', h4: 'h4', h5: 'h5', h6: 'h6', subtitle1: 'h6', subtitle2: 'h6', body1: 'p', body2: 'p', inherit: 'p', }

Native source declarations

Declarations/imports are extracted from pinned source without flattening unions or external inheritance. Original English comments/types are source reference, not a claim of translated upstream prose. Shared types stay in their native packages.

vendor/src/Breadcrumbs/Breadcrumbs.d.ts

import * as React from 'react';

import { SxProps } from '@mui/system';

import { SlotComponentProps } from '../utils/types';

import { Theme } from '../styles';

import { OverridableComponent, OverrideProps } from '../OverridableComponent';

import { BreadcrumbsClasses } from './breadcrumbsClasses';

import SvgIcon from '../SvgIcon';

export interface BreadcrumbsCollapsedIconSlotPropsOverrides {}

export interface BreadcrumbsOwnerState extends BreadcrumbsProps {
  expanded: boolean;
}

export interface BreadcrumbsOwnProps {
  /**
   * The content of the component.
   */
  children?: React.ReactNode;
  /**
   * Override or extend the styles applied to the component.
   */
  classes?: Partial<BreadcrumbsClasses> | undefined;
  /**
   * The components used for each slot inside the Breadcumb.
   * Either a string to use a HTML element or a component.
   * @default {}
   */
  slots?:
    | {
        CollapsedIcon?: React.ElementType | undefined;
      }
    | undefined;
  /**
   * The props used for each slot inside the Breadcumb.
   * @default {}
   */
  slotProps?:
    | {
        /**
         * Props applied to the CollapsedIcon slot.
         * @default {}
         */
        collapsedIcon?:
          | SlotComponentProps<
              typeof SvgIcon,
              BreadcrumbsCollapsedIconSlotPropsOverrides,
              BreadcrumbsOwnerState
            >
          | undefined;
      }
    | undefined;
  /**
   * Override the default label for the expand button.
   *
   * For localization purposes, you can use the provided [translations](https://mui.com/material-ui/guides/localization/).
   * @default 'Show path'
   */
  expandText?: string | undefined;
  /**
   * If max items is exceeded, the number of items to show after the ellipsis.
   * @default 1
   */
  itemsAfterCollapse?: number | undefined;
  /**
   * If max items is exceeded, the number of items to show before the ellipsis.
   * @default 1
   */
  itemsBeforeCollapse?: number | undefined;
  /**
   * Specifies the maximum number of breadcrumbs to display. When there are more
   * than the maximum number, only the first `itemsBeforeCollapse` and last `itemsAfterCollapse`
   * will be shown, with an ellipsis in between.
   * @default 8
   */
  maxItems?: number | undefined;
  /**
   * Custom separator node.
   * @default '/'
   */
  separator?: React.ReactNode;
  /**
   * The system prop that allows defining system overrides as well as additional CSS styles.
   */
  sx?: SxProps<Theme> | undefined;
}

export interface BreadcrumbsTypeMap<
  AdditionalProps = {},
  RootComponent extends React.ElementType = 'nav',
> {
  props: AdditionalProps & BreadcrumbsOwnProps;
  defaultComponent: RootComponent;
}

declare const Breadcrumbs: OverridableComponent<BreadcrumbsTypeMap>;

export type BreadcrumbsProps<
  RootComponent extends React.ElementType = BreadcrumbsTypeMap['defaultComponent'],
  AdditionalProps = {},
> = OverrideProps<BreadcrumbsTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
  component?: React.ElementType | undefined;
};

vendor/src/Link/Link.d.ts

import * as React from 'react';

import { DistributiveOmit } from '@mui/types';

import { SxProps } from '@mui/system';

import { OverridableComponent, OverrideProps } from '../OverridableComponent';

import { Theme } from '../styles';

import { TypographyOwnProps } from '../Typography';

import { LinkClasses } from './linkClasses';

export interface LinkOwnProps extends DistributiveOmit<LinkBaseProps, 'classes'> {
  /**
   * The content of the component.
   */
  children?: React.ReactNode;
  /**
   * Override or extend the styles applied to the component.
   */
  classes?: Partial<LinkClasses> | undefined;
  /**
   * The color of the link.
   * @default 'primary'
   */
  color?: TypographyOwnProps['color'] | 'inherit' | undefined;
  /**
   * The system prop that allows defining system overrides as well as additional CSS styles.
   */
  sx?: SxProps<Theme> | undefined;
  /**
   * `classes` prop applied to the [`Typography`](https://mui.com/material-ui/api/typography/) element.
   */
  TypographyClasses?: TypographyOwnProps['classes'] | undefined;
  /**
   * Controls when the link should have an underline.
   * @default 'always'
   */
  underline?: 'none' | 'hover' | 'always' | undefined;
  /**
   * Applies the theme typography styles.
   * @default 'inherit'
   */
  variant?: TypographyOwnProps['variant'] | undefined;
}

export interface LinkTypeMap<AdditionalProps = {}, RootComponent extends React.ElementType = 'a'> {
  props: AdditionalProps & LinkOwnProps;
  defaultComponent: RootComponent;
}

declare const Link: OverridableComponent<LinkTypeMap>;

export type LinkBaseProps = DistributiveOmit<
  TypographyOwnProps,
  'children' | 'color' | 'variant' | 'classes'
>;

export type LinkProps<
  RootComponent extends React.ElementType = LinkTypeMap['defaultComponent'],
  AdditionalProps = {},
> = OverrideProps<LinkTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
  component?: React.ElementType | undefined;
};

vendor/src/Typography/Typography.d.ts

import * as React from 'react';

import { OverridableStringUnion } from '@mui/types';

import { SxProps } from '@mui/system';

import { Theme, TypeText } from '../styles';

import { OverrideProps, OverridableComponent } from '../OverridableComponent';

import { TypographyVariant } from '../styles/createTypography';

import { TypographyClasses } from './typographyClasses';

export interface TypographyPropsVariantOverrides {}

export interface TypographyPropsColorOverrides {}

export interface TypographyOwnProps {
  /**
   * Set the text-align on the component.
   * @default 'inherit'
   */
  align?: 'inherit' | 'left' | 'center' | 'right' | 'justify' | undefined;
  /**
   * The content of the component.
   */
  children?: React.ReactNode;
  /**
   * Override or extend the styles applied to the component.
   */
  classes?: Partial<TypographyClasses> | undefined;
  /**
   * The color of the component.
   * It supports both default and custom theme colors, which can be added as shown in the
   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).
   */
  color?:
    | OverridableStringUnion<
        | 'primary'
        | 'secondary'
        | 'success'
        | 'error'
        | 'info'
        | 'warning'
        | `text${Capitalize<keyof TypeText>}`,
        TypographyPropsColorOverrides
      >
    | (string & {})
    | undefined;
  /**
   * If `true`, the text will have a bottom margin.
   * @default false
   */
  gutterBottom?: boolean | undefined;
  /**
   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.
   *
   * Note that text overflow can only happen with block or inline-block level elements
   * (the element needs to have a width in order to overflow).
   * @default false
   */
  noWrap?: boolean | undefined;
  /**
   * The system prop that allows defining system overrides as well as additional CSS styles.
   */
  sx?: SxProps<Theme> | undefined;
  /**
   * Applies the theme typography styles.
   * @default 'body1'
   */
  variant?:
    | OverridableStringUnion<TypographyVariant | 'inherit', TypographyPropsVariantOverrides>
    | undefined;
  /**
   * The component maps the variant prop to a range of different HTML element types.
   * For instance, subtitle1 to `<h6>`.
   * If you wish to change that mapping, you can provide your own.
   * Alternatively, you can use the `component` prop.
   * @default {
   *   h1: 'h1',
   *   h2: 'h2',
   *   h3: 'h3',
   *   h4: 'h4',
   *   h5: 'h5',
   *   h6: 'h6',
   *   subtitle1: 'h6',
   *   subtitle2: 'h6',
   *   body1: 'p',
   *   body2: 'p',
   *   inherit: 'p',
   * }
   */
  variantMapping?:
    | Partial<
        Record<
          OverridableStringUnion<TypographyVariant | 'inherit', TypographyPropsVariantOverrides>,
          string
        >
      >
    | undefined;
}

export interface TypographyTypeMap<
  AdditionalProps = {},
  RootComponent extends React.ElementType = 'span',
> {
  props: AdditionalProps & TypographyOwnProps;
  defaultComponent: RootComponent;
}

declare const Typography: OverridableComponent<TypographyTypeMap>;

export type TypographyProps<
  RootComponent extends React.ElementType = TypographyTypeMap['defaultComponent'],
  AdditionalProps = {},
> = OverrideProps<TypographyTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
  component?: React.ElementType | undefined;
};

Post-install acceptance

Run strict types, production build and real interactions. Check keyboard labels/focus, disabled/error/read-only semantics where natively supported, both themes, narrow screens and reduced motion. Verify callbacks against the real host data; do not declare installation complete from copying a prompt. Initialization fixtures also require server HTML and warning-free hydration.

Source and license

https://github.com/mui/material-ui/tree/809a7717b4c050ba3f69b75300689f07c050a16e

MIT · @mui/material@9.4.0. Vendor originals and license are preserved. Full original upstream prose remains in vendor/docs and is not represented as fully translated.