Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Joy] Add Breadcrumbs component #32697

Merged
merged 27 commits into from Aug 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b8b8edb
[Joy] Add Breadcrumbs component
hbjORbj May 9, 2022
c97432b
Remove passing component to as prop
hbjORbj May 9, 2022
6746cc2
Remove variant/color/maxItems props and change root element to nav
hbjORbj Jun 4, 2022
bf6fa86
Fix type error in BreadcrumbCollapsed
hbjORbj Jun 4, 2022
418dd21
Remove experiment page
hbjORbj Aug 1, 2022
5c7d3d1
Add Breadcrumbs playground demo
hbjORbj Aug 1, 2022
139adac
Add demo setup
hbjORbj Aug 1, 2022
b014315
Fix lint error in Breadcrumbs
hbjORbj Aug 1, 2022
f0b6c14
Fix function error from emphasize in BreadcrumbsCollapsed
hbjORbj Aug 1, 2022
898307f
Add Basic breadcrumbs demos
hbjORbj Aug 1, 2022
6800673
Delete BreadcrumbsCollapsed and relevant code
hbjORbj Aug 1, 2022
5a78143
Add collapsed breadcrumbs demo
hbjORbj Aug 3, 2022
8175694
Add collapsed breadcrumbs
hbjORbj Aug 3, 2022
afe7628
Add breadcrumbs with menu demo
hbjORbj Aug 3, 2022
6e0e04f
Address Jun's review comments
hbjORbj Aug 4, 2022
9a480a6
Use Joy Menu rather than Base Menu for demo
hbjORbj Aug 4, 2022
fe42700
Set default value of separator to / in playground demo
hbjORbj Aug 5, 2022
3d8743b
fix knob input
siriwatknp Aug 5, 2022
f79472a
Ensure that clicking links do nothing in demos
hbjORbj Aug 5, 2022
ffb05b2
Add more demos
hbjORbj Aug 5, 2022
8c7e638
Split one demo into 2
hbjORbj Aug 5, 2022
4ebcda6
Refactor
hbjORbj Aug 5, 2022
712d0e1
Add demo for playing with breadcrumbs gap css variable
hbjORbj Aug 5, 2022
2756f53
Set default breadcrumbs gap to 4px in demo
hbjORbj Aug 7, 2022
51757a0
Remove unneeded internal asset
hbjORbj Aug 7, 2022
443c67e
Add link to menu component
hbjORbj Aug 8, 2022
bb4f99e
Address Jun's final comments
hbjORbj Aug 8, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/data/joy/components/breadcrumbs/BasicBreadcrumbs.js
@@ -0,0 +1,26 @@
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';

export default function BasicBreadcrumbs() {
return (
<Breadcrumbs separator="›" aria-label="breadcrumbs">
{['Fry', 'Leela', 'Bender', 'Linda'].map((item) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="neutral"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}

<Typography fontSize="inherit">Amy</Typography>
</Breadcrumbs>
);
}
25 changes: 25 additions & 0 deletions docs/data/joy/components/breadcrumbs/BasicBreadcrumbs.tsx
@@ -0,0 +1,25 @@
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';

export default function BasicBreadcrumbs() {
return (
<Breadcrumbs separator="›" aria-label="breadcrumbs">
{['Fry', 'Leela', 'Bender', 'Linda'].map((item: string) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="neutral"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}
<Typography fontSize="inherit">Amy</Typography>
</Breadcrumbs>
);
}
16 changes: 16 additions & 0 deletions docs/data/joy/components/breadcrumbs/BasicBreadcrumbs.tsx.preview
@@ -0,0 +1,16 @@
<Breadcrumbs separator="›" aria-label="breadcrumbs">
{['Fry', 'Leela', 'Bender', 'Linda'].map((item: string) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="neutral"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}
<Typography fontSize="inherit">Amy</Typography>
</Breadcrumbs>
55 changes: 55 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsUsage.js
@@ -0,0 +1,55 @@
import * as React from 'react';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import JoyUsageDemo from 'docs/src/modules/components/JoyUsageDemo';

export default function BreadcrumbsUsage() {
return (
<JoyUsageDemo
componentName="Breadcrumbs"
data={[
{
propName: 'size',
knob: 'radio',
options: ['sm', 'md', 'lg'],
defaultValue: 'md',
},
{
propName: 'separator',
knob: 'input',
defaultValue: '/',
},
{
propName: 'children',
defaultValue: '<Link />\n ...',
},
]}
renderDemo={(props) => (
<Breadcrumbs {...props} aria-label="breadcrumbs">
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="neutral"
href="/"
fontSize="inherit"
>
MUI
</Link>
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="neutral"
href="/joy-ui/getting-started/installation/"
fontSize="inherit"
>
Joy
</Link>
<Typography fontSize="inherit">Breadcrumbs</Typography>
</Breadcrumbs>
)}
/>
);
}
38 changes: 38 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsVariables.js
@@ -0,0 +1,38 @@
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';
import JoyVariablesDemo from 'docs/src/modules/components/JoyVariablesDemo';

export default function BreadcrumbsVariables() {
return (
<JoyVariablesDemo
componentName="Breadcrumbs"
data={[
{
var: '--Breadcrumbs-gap',
defaultValue: '4px',
},
]}
renderDemo={(sx) => (
<Breadcrumbs sx={sx}>
{['Menu 1', 'Menu 2'].map((item) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="neutral"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}

<Typography fontSize="inherit">Menu 3</Typography>
</Breadcrumbs>
)}
/>
);
}
37 changes: 37 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsVariables.tsx
@@ -0,0 +1,37 @@
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';
import JoyVariablesDemo from 'docs/src/modules/components/JoyVariablesDemo';

export default function BreadcrumbsVariables() {
return (
<JoyVariablesDemo
componentName="Breadcrumbs"
data={[
{
var: '--Breadcrumbs-gap',
defaultValue: '4px',
},
]}
renderDemo={(sx) => (
<Breadcrumbs sx={sx}>
{['Menu 1', 'Menu 2'].map((item: string) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="neutral"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}
<Typography fontSize="inherit">Menu 3</Typography>
</Breadcrumbs>
)}
/>
);
}
38 changes: 38 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsWithIcon.js
@@ -0,0 +1,38 @@
import HomeIcon from '@mui/icons-material/Home';
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';

export default function BreadcrumbsWithIcon() {
return (
<Breadcrumbs separator="›" aria-label="breadcrumbs">
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="primary"
fontSize="inherit"
href="/"
>
<HomeIcon sx={{ mr: 0.5 }} fontSize="inherit" />
Jake
</Link>
{['Rosa', 'Charles'].map((item) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="primary"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}

<Typography fontSize="inherit">Hitchcock</Typography>
</Breadcrumbs>
);
}
37 changes: 37 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsWithIcon.tsx
@@ -0,0 +1,37 @@
import HomeIcon from '@mui/icons-material/Home';
import * as React from 'react';
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Link from '@mui/joy/Link';
import Typography from '@mui/joy/Typography';

export default function BreadcrumbsWithIcon() {
return (
<Breadcrumbs separator="›" aria-label="breadcrumbs">
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="primary"
fontSize="inherit"
href="/"
>
<HomeIcon sx={{ mr: 0.5 }} fontSize="inherit" />
Jake
</Link>
{['Rosa', 'Charles'].map((item: string) => (
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
key={item}
underline="hover"
color="primary"
fontSize="inherit"
href="/"
>
{item}
</Link>
))}
<Typography fontSize="inherit">Hitchcock</Typography>
</Breadcrumbs>
);
}
69 changes: 69 additions & 0 deletions docs/data/joy/components/breadcrumbs/BreadcrumbsWithMenu.js
@@ -0,0 +1,69 @@
import Breadcrumbs from '@mui/joy/Breadcrumbs';
import Button from '@mui/joy/Button';
import Link from '@mui/joy/Link';
import Menu from '@mui/joy/Menu';
import MenuItem from '@mui/joy/MenuItem';
import * as React from 'react';

export default function BreadcrumbsWithMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);
const open = Boolean(anchorEl);
const handleClick = (event) => {
if (event) {
setAnchorEl(event.currentTarget);
}
};
const handleClose = () => {
setAnchorEl(null);
};

return (
<React.Fragment>
<Menu
anchorEl={anchorEl}
open={open}
onClose={handleClose}
aria-labelledby="with-menu-demo-breadcrumbs"
>
<MenuItem onClick={handleClose}>Breadcrumb 2</MenuItem>
<MenuItem onClick={handleClose}>Breadcrumb 3</MenuItem>
<MenuItem onClick={handleClose}>Breadcrumb 4</MenuItem>
</Menu>
<Breadcrumbs aria-label="breadcrumbs">
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="primary"
href="/"
fontSize="inherit"
>
Breadcrumb 1
</Link>
<Button size="sm" onClick={handleClick} variant="plain" color="primary">
•••
</Button>
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="primary"
href="/"
fontSize="inherit"
>
Breadcrumb 5
</Link>
<Link
// The `preventDefault` is for demonstration purposes, generally, you don't need it in your application
onClick={(event) => event.preventDefault()}
underline="hover"
color="primary"
href="/"
fontSize="inherit"
>
Breadcrumb 6
</Link>
</Breadcrumbs>
</React.Fragment>
);
}