Repository: gopinav/React-MUI-Tutorials
Branch: master
Commit: 0c069c13b43e
Files: 53
Total size: 60.3 KB
Directory structure:
gitextract_erixtw6q/
└── react-mui-demo/
├── .gitignore
├── README.md
├── package.json
├── public/
│ ├── index.html
│ ├── manifest.json
│ └── robots.txt
├── src/
│ ├── App.css
│ ├── App.test.tsx
│ ├── App.tsx
│ ├── components/
│ │ ├── MuiAccordion.tsx
│ │ ├── MuiAlert.tsx
│ │ ├── MuiAutocomplete.tsx
│ │ ├── MuiAvatar.tsx
│ │ ├── MuiBadge.tsx
│ │ ├── MuiBottomNavigation.tsx
│ │ ├── MuiBreadcrumbs.tsx
│ │ ├── MuiButton.tsx
│ │ ├── MuiCard.tsx
│ │ ├── MuiCheckbox.tsx
│ │ ├── MuiChip.tsx
│ │ ├── MuiCustomTheme.tsx
│ │ ├── MuiDateRangePicker.tsx
│ │ ├── MuiDateTimePicker.tsx
│ │ ├── MuiDialog.tsx
│ │ ├── MuiDrawer.tsx
│ │ ├── MuiImageList.tsx
│ │ ├── MuiLayout.tsx
│ │ ├── MuiLink.tsx
│ │ ├── MuiList.tsx
│ │ ├── MuiLoadingButton.tsx
│ │ ├── MuiMasonry.tsx
│ │ ├── MuiNavbar.tsx
│ │ ├── MuiProgress.tsx
│ │ ├── MuiRadioButton.tsx
│ │ ├── MuiRating.tsx
│ │ ├── MuiSelect.tsx
│ │ ├── MuiSkeleton.tsx
│ │ ├── MuiSnackbar.tsx
│ │ ├── MuiSpeedDial.tsx
│ │ ├── MuiSwitch.tsx
│ │ ├── MuiTable.tsx
│ │ ├── MuiTabs.tsx
│ │ ├── MuiTextField.tsx
│ │ ├── MuiTimeline.tsx
│ │ ├── MuiTooltip.tsx
│ │ └── MuiTypography.tsx
│ ├── index.css
│ ├── index.tsx
│ ├── react-app-env.d.ts
│ ├── reportWebVitals.ts
│ ├── setupTests.ts
│ └── theme.d.ts
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: react-mui-demo/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/build
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
================================================
FILE: react-mui-demo/README.md
================================================
# Getting Started with Create React App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## Available Scripts
In the project directory, you can run:
### `npm start`
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
The page will reload if you make edits.\
You will also see any lint errors in the console.
### `npm test`
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
### `npm run build`
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
### `npm run eject`
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
================================================
FILE: react-mui-demo/package.json
================================================
{
"name": "react-mui-demo",
"version": "0.1.0",
"private": true,
"dependencies": {
"@date-io/date-fns": "^2.13.1",
"@emotion/react": "^11.7.1",
"@emotion/styled": "^11.6.0",
"@mui/icons-material": "^5.3.1",
"@mui/lab": "^5.0.0-alpha.67",
"@mui/material": "^5.3.1",
"@testing-library/jest-dom": "^5.16.1",
"@testing-library/react": "^12.1.2",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.4.0",
"@types/node": "^16.11.21",
"@types/react": "^17.0.38",
"@types/react-dom": "^17.0.11",
"date-fns": "^2.28.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-scripts": "5.0.0",
"typescript": "^4.5.5",
"web-vitals": "^2.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
================================================
FILE: react-mui-demo/public/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
================================================
FILE: react-mui-demo/public/manifest.json
================================================
{
"short_name": "React App",
"name": "Create React App Sample",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}
================================================
FILE: react-mui-demo/public/robots.txt
================================================
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
================================================
FILE: react-mui-demo/src/App.css
================================================
/* body {
background-color: #eeeeee;
} */
.App {
margin: 4rem;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
================================================
FILE: react-mui-demo/src/App.test.tsx
================================================
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});
================================================
FILE: react-mui-demo/src/App.tsx
================================================
import { createTheme, ThemeProvider, colors } from '@mui/material'
import AdapterDateFns from '@mui/lab/AdapterDateFns'
import { LocalizationProvider } from '@mui/lab'
import './App.css'
// import { MuiTable } from './components/MuiTable'
import { MuiCustomTheme } from './components/MuiCustomTheme'
// import { MuiTypography } from './components/MuiTypography'
// import { MuiButton } from './components/MuiButton'
// import { MuiTextField } from './components/MuiTextField'
// import { MuiSelect } from './components/MuiSelect'
// import { MuiRadioButton } from './components/MuiRadioButton'
// import { MuiCheckbox } from './components/MuiCheckbox'
// import { MuiSwitch } from './components/MuiSwitch'
// import { MuiRating } from './components/MuiRating'
// import { MuiAutocomplete } from './components/MuiAutocomplete'
// import { MuiLayout } from './components/MuiLayout'
// import { MuiCard } from './components/MuiCard'
// import { MuiAccordion } from './components/MuiAccordion'
// import { MuiImageList } from './components/MuiImageList'
// import { MuiNavbar } from './components/MuiNavbar'
// import { MuiLink } from './components/MuiLink'
// import { MuiBreadcrumbs } from './components/MuiBreadcrumbs'
// import { MuiDrawer } from './components/MuiDrawer'
// import { MuiTabs } from './components/MuiTabs'
// import { MuiSpeedDial } from './components/MuiSpeedDial'
// import { MuiBottomNavigation } from './components/MuiBottomNavigation'
// import { MuiAvatar } from './components/MuiAvatar'
// import { MuiBadge } from './components/MuiBadge'
// import { MuiList } from './components/MuiList'
// import { MuiChip } from './components/MuiChip'
// import { MuiTooltip } from './components/MuiTooltip'
// import { MuiAlert } from './components/MuiAlert'
// import { MuiSnackbar } from './components/MuiSnackbar'
// import { MuiDialog } from './components/MuiDialog'
// import { MuiSkeleton } from './components/MuiSkeleton'
// import { MuiProgress } from './components/MuiProgress'
// import { MuiLoadingButton } from './components/MuiLoadingButton'
// import { MuiDateTimePicker } from './components/MuiDateTimePicker'
// import { MuiDateRangePicker } from './components/MuiDateRangePicker'
// import { MuiTimeline } from './components/MuiTimeline'
// import { MuiMasonry } from './components/MuiMasonry'
const theme = createTheme({
status: {
danger: '#e53e3e'
},
palette: {
secondary: {
main: colors.orange[500]
},
neutral: {
main: colors.grey[500],
darker: colors.grey[700]
}
}
})
function App() {
return (
<ThemeProvider theme={theme}>
<LocalizationProvider dateAdapter={AdapterDateFns}>
<div className='App'>
{/* <MuiTypography /> */}
{/* <MuiButton /> */}
{/* <MuiTextField /> */}
{/* <MuiSelect /> */}
{/* <MuiRadioButton /> */}
{/* <MuiCheckbox /> */}
{/* <MuiSwitch /> */}
{/* <MuiRating /> */}
{/* <MuiAutocomplete /> */}
{/* <MuiLayout /> */}
{/* <MuiCard /> */}
{/* <MuiAccordion /> */}
{/* <MuiImageList /> */}
{/* <MuiNavbar /> */}
{/* <MuiLink /> */}
{/* <MuiBreadcrumbs /> */}
{/* <MuiDrawer /> */}
{/* <MuiTabs /> */}
{/* <MuiSpeedDial /> */}
{/* <MuiBottomNavigation /> */}
{/* <MuiAvatar /> */}
{/* <MuiBadge /> */}
{/* <MuiList /> */}
{/* <MuiChip /> */}
{/* <MuiTooltip /> */}
{/* <MuiTable /> */}
{/* <MuiAlert /> */}
{/* <MuiSnackbar /> */}
{/* <MuiDialog /> */}
{/* <MuiSkeleton /> */}
{/* <MuiProgress /> */}
{/* <MuiLoadingButton /> */}
{/* <MuiDateTimePicker /> */}
{/* <MuiDateRangePicker /> */}
{/* <MuiMasonry /> */}
{/* <MuiTimeline /> */}
<MuiCustomTheme />
</div>
</LocalizationProvider>
</ThemeProvider>
)
}
export default App
================================================
FILE: react-mui-demo/src/components/MuiAccordion.tsx
================================================
import {
Accordion,
AccordionSummary,
AccordionDetails,
Typography
} from '@mui/material'
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
import { useState } from 'react'
export const MuiAccordion = () => {
const [expanded, setExpanded] = useState<string | false>(false)
const handleChange = (isExpanded: boolean, panel: string) => {
setExpanded(isExpanded ? panel : false)
}
return (
<>
<Accordion
expanded={expanded === 'panel1'}
onChange={(event, isExpanded) => handleChange(isExpanded, 'panel1')}>
<AccordionSummary
aria-controls='panel1-content'
id='panel1-header'
expandIcon={<ExpandMoreIcon />}>
<Typography>Accordion 1</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion
expanded={expanded === 'panel2'}
onChange={(event, isExpanded) => handleChange(isExpanded, 'panel2')}>
<AccordionSummary
aria-controls='panel2-content'
id='panel2-header'
expandIcon={<ExpandMoreIcon />}>
<Typography>Accordion 2</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
<Accordion
expanded={expanded === 'panel3'}
onChange={(event, isExpanded) => handleChange(isExpanded, 'panel3')}>
<AccordionSummary
aria-controls='panel3-content'
id='panel3-header'
expandIcon={<ExpandMoreIcon />}>
<Typography>Accordion 3</Typography>
</AccordionSummary>
<AccordionDetails>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
malesuada lacus ex, sit amet blandit leo lobortis eget.
</Typography>
</AccordionDetails>
</Accordion>
</>
)
}
================================================
FILE: react-mui-demo/src/components/MuiAlert.tsx
================================================
import { Stack, Alert, AlertTitle, Button } from '@mui/material'
import CheckIcon from '@mui/icons-material/Check'
export const MuiAlert = () => {
return (
<Stack spacing={2}>
<Alert severity='error' onClose={() => alert('Close alert')}>
<AlertTitle>Error</AlertTitle>This is an error alert
</Alert>
<Alert severity='warning'>
<AlertTitle>Warning</AlertTitle>This is a warning alert
</Alert>
<Alert severity='info'>
<AlertTitle>Info</AlertTitle>This is an info alert
</Alert>
<Alert
severity='success'
icon={<CheckIcon fontSize='inherit' />}
action={
<Button color='inherit' size='small'>
UNDO
</Button>
}>
<AlertTitle>Success</AlertTitle>This is a success alert
</Alert>
<Alert variant='outlined' severity='error'>
This is an outlined error alert
</Alert>
<Alert variant='outlined' severity='warning'>
This is a outlined warning alert
</Alert>
<Alert variant='outlined' severity='info'>
This is an outlined info alert
</Alert>
<Alert variant='outlined' severity='success'>
This is a outlined success alert
</Alert>
<Alert variant='filled' severity='error'>
This is an filled error alert
</Alert>
<Alert variant='filled' severity='warning'>
This is a filled warning alert
</Alert>
<Alert variant='filled' severity='info'>
This is an filled info alert
</Alert>
<Alert variant='filled' severity='success'>
This is a filled success alert
</Alert>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiAutocomplete.tsx
================================================
import { Stack, Autocomplete, TextField } from '@mui/material'
import { useState } from 'react'
type Skill = {
id: number
label: string
}
const skills = ['HTML', 'CSS', 'JavaScript', 'TypeScript', 'React']
const skillsOptions = skills.map((skill, index) => ({
id: index + 1,
label: skill
}))
export const MuiAutocomplete = () => {
const [value, setValue] = useState<string | null>(null)
const [skill, setSkill] = useState<Skill | null>(null)
console.log(skill)
return (
<Stack spacing={2} width='250px'>
<Autocomplete
options={skills}
renderInput={params => <TextField {...params} label='Skills' />}
value={value}
onChange={(event: any, newValue: string | null) => {
setValue(newValue)
}}
/>
<Autocomplete
options={skillsOptions}
renderInput={params => <TextField {...params} label='Skills' />}
value={skill}
onChange={(_event: any, newValue: Skill | null) => {
setSkill(newValue)
}}
/>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiAvatar.tsx
================================================
import { Stack, Avatar, AvatarGroup } from '@mui/material'
export const MuiAvatar = () => {
return (
<Stack spacing={4}>
<Stack direction='row' spacing={1}>
<Avatar sx={{ bgcolor: 'primary.light' }}>BW</Avatar>
<Avatar sx={{ bgcolor: 'success.light' }}>CK</Avatar>
</Stack>
<Stack direction='row' spacing={1}>
<AvatarGroup max={3}>
<Avatar sx={{ bgcolor: 'primary.light' }}>BW</Avatar>
<Avatar sx={{ bgcolor: 'success.light' }}>CK</Avatar>
<Avatar
src='https://randomuser.me/api/portraits/women/79.jpg'
alt='Jane Doe'
/>
<Avatar
src='https://randomuser.me/api/portraits/men/51.jpg'
alt='John Doe'
/>
</AvatarGroup>
</Stack>
<Stack direction='row' spacing={1}>
<Avatar
variant='rounded'
sx={{ bgcolor: 'primary.light', width: 48, height: 48 }}>
BW
</Avatar>
<Avatar
variant='rounded'
sx={{ bgcolor: 'success.light', width: 48, height: 48 }}>
CK
</Avatar>
</Stack>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiBadge.tsx
================================================
import { Stack, Badge } from '@mui/material'
import MailIcon from '@mui/icons-material/Mail'
export const MuiBadge = () => {
return (
<Stack spacing={2} direction='row'>
<Badge badgeContent={5} color='secondary'>
<MailIcon />
</Badge>
<Badge badgeContent={0} color='secondary' showZero>
<MailIcon />
</Badge>
<Badge badgeContent={100} color='secondary' max={999}>
<MailIcon />
</Badge>
<Badge color='secondary' variant='dot'>
<MailIcon />
</Badge>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiBottomNavigation.tsx
================================================
import { BottomNavigation, BottomNavigationAction } from '@mui/material'
import HomeIcon from '@mui/icons-material/Home'
import FavoriteIcon from '@mui/icons-material/Favorite'
import PersonIcon from '@mui/icons-material/Person'
import { useState } from 'react'
export const MuiBottomNavigation = () => {
const [value, setValue] = useState(0)
return (
<BottomNavigation
sx={{ width: '100%', position: 'absolute', bottom: 0 }}
showLabels
value={value}
onChange={(event, newValue) => {
setValue(newValue)
}}>
<BottomNavigationAction label='Home' icon={<HomeIcon />} />
<BottomNavigationAction label='Favorites' icon={<FavoriteIcon />} />
<BottomNavigationAction label='Profile' icon={<PersonIcon />} />
</BottomNavigation>
)
}
================================================
FILE: react-mui-demo/src/components/MuiBreadcrumbs.tsx
================================================
import { Box, Breadcrumbs, Link, Typography } from '@mui/material'
import NavigateNextIcon from '@mui/icons-material/NavigateNext'
export const MuiBreadcrumbs = () => {
return (
<Box m={2}>
<Breadcrumbs
separator={<NavigateNextIcon fontSize='small' />}
maxItems={3}
itemsAfterCollapse={2}
aria-label='breadcrumb'>
<Link underline='hover' href='#'>
Home
</Link>
<Link underline='hover' href='#'>
Catalog
</Link>
<Link underline='hover' href='#'>
Accessories
</Link>
<Link underline='hover' href='#'>
New Collection
</Link>
<Typography color='text.primary'>Shoes</Typography>
</Breadcrumbs>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiButton.tsx
================================================
import { useState } from 'react'
import {
Stack,
Button,
IconButton,
ButtonGroup,
ToggleButtonGroup,
ToggleButton
} from '@mui/material'
import SendIcon from '@mui/icons-material/Send'
import FormatBoldIcon from '@mui/icons-material/FormatBold'
import FormatItalicIcon from '@mui/icons-material/FormatItalic'
import FormatUnderlinedIcon from '@mui/icons-material/FormatUnderlined'
export const MuiButton = () => {
const [formats, setFormats] = useState<string[]>([])
console.log(formats)
const handleFormatChange = (
_event: React.MouseEvent<HTMLElement>,
updatedFormats: string[]
) => {
setFormats(updatedFormats)
}
return (
<Stack spacing={4}>
<Stack spacing={2} direction='row'>
<Button variant='text' href='https://google.com'>
Text
</Button>
<Button variant='contained'>Contained</Button>
<Button variant='outlined'>Outlined</Button>
</Stack>
<Stack spacing={2} direction='row'>
<Button variant='contained' color='primary'>
Primary
</Button>
<Button variant='contained' color='secondary'>
Secondary
</Button>
<Button variant='contained' color='error'>
Error
</Button>
<Button variant='contained' color='warning'>
Warning
</Button>
<Button variant='contained' color='info'>
Info
</Button>
<Button variant='contained' color='success'>
Success
</Button>
</Stack>
<Stack display='block' spacing={2} direction='row'>
<Button variant='contained' size='small'>
Small
</Button>
<Button variant='contained' size='medium'>
Medium
</Button>
<Button variant='contained' size='large'>
Large
</Button>
</Stack>
<Stack spacing={2} direction='row'>
<Button
variant='contained'
startIcon={<SendIcon />}
disableRipple
onClick={() => alert('Clicked')}>
Send
</Button>
<Button variant='contained' endIcon={<SendIcon />} disableElevation>
Send
</Button>
<IconButton color='success' size='small' aria-label='send'>
<SendIcon />
</IconButton>
</Stack>
<Stack direction='row'>
<ButtonGroup
variant='text'
orientation='vertical'
size='small'
color='secondary'
aria-label='alignment button group'>
<Button onClick={() => alert('Left clicked')}>Left</Button>
<Button>Center</Button>
<Button>Right</Button>
</ButtonGroup>
</Stack>
<Stack direction='row'>
<ToggleButtonGroup
exclusive
value={formats}
onChange={handleFormatChange}
aria-label='text formatting'>
<ToggleButton value='bold' aria-label='bold'>
<FormatBoldIcon />
</ToggleButton>
<ToggleButton value='italic' aria-label='italic'>
<FormatItalicIcon />
</ToggleButton>
<ToggleButton value='underlined' aria-label='underline'>
<FormatUnderlinedIcon />
</ToggleButton>
</ToggleButtonGroup>
</Stack>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiCard.tsx
================================================
import {
Box,
Card,
CardContent,
CardActions,
Typography,
Button,
CardMedia
} from '@mui/material'
export const MuiCard = () => {
return (
<Box width='300px'>
<Card>
<CardMedia
component='img'
height='140'
image='https://source.unsplash.com/random'
alt='unsplash image'
/>
<CardContent>
<Typography gutterBottom variant='h5' component='div'>
React
</Typography>
<Typography variant='body2' color='text.secondary'>
React is a JavaScript library for building user interfaces. React
can be used as a base in the development of single-page or mobile
applications.
</Typography>
</CardContent>
<CardActions>
<Button size='small'>Share</Button>
<Button size='small'>Learn More</Button>
</CardActions>
</Card>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiCheckbox.tsx
================================================
import { useState } from 'react'
import {
Box,
FormControlLabel,
Checkbox,
FormControl,
FormLabel,
FormGroup
} from '@mui/material'
import BookmarkBorderIcon from '@mui/icons-material/BookmarkBorder'
import BookmarkIcon from '@mui/icons-material/Bookmark'
export const MuiCheckbox = () => {
const [acceptTnC, setAcceptTnC] = useState(false)
const [skills, setSkills] = useState<string[]>([])
console.log(skills)
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setAcceptTnC(event.target.checked)
}
const handleSkillChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const index = skills.indexOf(event.target.value)
if (index === -1) {
setSkills([...skills, event.target.value])
} else {
setSkills(skills.filter(skill => skill !== event.target.value))
}
}
return (
<Box>
<Box>
<FormControlLabel
control={
<Checkbox
checked={acceptTnC}
onChange={handleChange}
size='small'
color='secondary'
/>
}
label='Accept terms and conditions'
/>
</Box>
<Box>
<Checkbox
icon={<BookmarkBorderIcon />}
checkedIcon={<BookmarkIcon />}
checked={acceptTnC}
onChange={handleChange}
/>
</Box>
<Box>
<FormControl error>
<FormLabel>Skills</FormLabel>
<FormGroup>
<FormControlLabel
control={
<Checkbox
value='html'
checked={skills.includes('html')}
onChange={handleSkillChange}
/>
}
label='HTML'
/>
<FormControlLabel
control={
<Checkbox
value='css'
checked={skills.includes('css')}
onChange={handleSkillChange}
/>
}
label='CSS'
/>
<FormControlLabel
control={
<Checkbox
value='javascript'
checked={skills.includes('javascript')}
onChange={handleSkillChange}
/>
}
label='JavaScript'
/>
</FormGroup>
</FormControl>
</Box>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiChip.tsx
================================================
import { Stack, Chip, Avatar } from '@mui/material'
import { useState } from 'react'
export const MuiChip = () => {
const [chips, setChips] = useState(['Chip 1', 'Chip 2', 'Chip 3'])
const handleDelete = (chipToDelete: string) => {
setChips(chips => chips.filter(chip => chip !== chipToDelete))
}
return (
<Stack direction='row' spacing={1}>
<Chip label='Chip' color='primary' size='small' />
<Chip
label='Chip Outlined'
variant='outlined'
color='secondary'
avatar={<Avatar>V</Avatar>}
/>
<Chip label='Click' color='success' onClick={() => alert('Clicked')} />
<Chip
label='Delete'
color='error'
onClick={() => alert('Clicked')}
onDelete={() => alert('Delete')}
/>
{chips.map(chip => (
<Chip key={chip} label={chip} onDelete={() => handleDelete(chip)} />
))}
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiCustomTheme.tsx
================================================
import { Box, styled } from '@mui/material'
const StyledBox = styled(Box)(({ theme }) => ({
height: '250px',
width: '250px',
backgroundColor: theme.palette.neutral?.darker
}))
export const MuiCustomTheme = () => {
return (
<>
<Box
sx={{
height: '250px',
width: {
xs: 100,
sm: 200,
md: 300,
lg: 400,
xl: 500
},
bgcolor: 'secondary.main'
}}></Box>
<StyledBox></StyledBox>
</>
)
}
================================================
FILE: react-mui-demo/src/components/MuiDateRangePicker.tsx
================================================
import { Box, TextField } from '@mui/material'
import { DateRangePicker, DateRange } from '@mui/lab'
import { useState } from 'react'
export const MuiDateRangePicker = () => {
const [value, setValue] = useState<DateRange<Date>>([null, null])
console.log('value', value)
return (
<Box width='500px'>
<DateRangePicker
startText='Check-in'
endText='Check-out'
value={value}
onChange={newValue => {
setValue(newValue)
}}
renderInput={(startProps, endProps) => (
<>
<TextField {...startProps} />
<Box sx={{ mx: 2 }}> to </Box>
<TextField {...endProps} />
</>
)}
/>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiDateTimePicker.tsx
================================================
import { Stack, TextField } from '@mui/material'
import { DatePicker, TimePicker, DateTimePicker } from '@mui/lab'
import { useState } from 'react'
export const MuiDateTimePicker = () => {
const [selectedDate, setSelectedDate] = useState<Date | null>(null)
const [selectedTime, setSelectedTime] = useState<Date | null>(null)
const [selectedDateTime, setSelectedDateTime] = useState<Date | null>(null)
console.log({
selectedDate,
selectedTime: selectedTime && selectedTime.toLocaleTimeString(),
selectedDateTime
})
return (
<Stack spacing={4} sx={{ width: '250px' }}>
<DatePicker
label='Date Picker'
value={selectedDate}
onChange={newValue => {
setSelectedDate(newValue)
}}
renderInput={params => <TextField {...params} />}
/>
<TimePicker
label='Time Picker'
value={selectedTime}
onChange={newValue => {
setSelectedTime(newValue)
}}
renderInput={params => <TextField {...params} />}
/>
<DateTimePicker
label='Date Time Picker'
value={selectedDateTime}
onChange={newValue => {
setSelectedDateTime(newValue)
}}
renderInput={params => <TextField {...params} />}
/>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiDialog.tsx
================================================
import {
Button,
Dialog,
DialogTitle,
DialogContent,
DialogContentText,
DialogActions
} from '@mui/material'
import { useState } from 'react'
export const MuiDialog = () => {
const [open, setOpen] = useState(false)
return (
<>
<Button onClick={() => setOpen(true)}>Open dialog</Button>
<Dialog
open={open}
onClose={() => setOpen(false)}
aria-labelledby='dialog-title'
aria-describedby='dialog-description'>
<DialogTitle id='dialog-title'>Submit the test?</DialogTitle>
<DialogContent>
<DialogContentText id='dialog-description'>
Are you sure you want to submit the test? You will not be able to
edit it after submitting.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={() => setOpen(false)}>Cancel</Button>
<Button onClick={() => setOpen(false)} autoFocus>
Submit
</Button>
</DialogActions>
</Dialog>
</>
)
}
================================================
FILE: react-mui-demo/src/components/MuiDrawer.tsx
================================================
import { Drawer, Box, Typography, IconButton } from '@mui/material'
import { useState } from 'react'
import MenuIcon from '@mui/icons-material/Menu'
export const MuiDrawer = () => {
const [isDrawerOpen, setIsDrawerOpen] = useState(false)
return (
<>
<IconButton
onClick={() => setIsDrawerOpen(true)}
size='large'
edge='start'
color='inherit'
aria-label='logo'>
<MenuIcon />
</IconButton>
<Drawer
anchor='left'
open={isDrawerOpen}
onClose={() => setIsDrawerOpen(false)}>
<Box p={2} width='250px' role='presentation' textAlign='center'>
<Typography variant='h6' component='div'>
Side Panel
</Typography>
</Box>
</Drawer>
</>
)
}
================================================
FILE: react-mui-demo/src/components/MuiImageList.tsx
================================================
import { Stack, ImageList, ImageListItem, Box } from '@mui/material'
export const MuiImageList = () => {
return (
<Stack spacing={4}>
<ImageList sx={{ width: 500, height: 450 }} cols={3} rowHeight={164}>
{itemData.map(item => (
<ImageListItem key={item.img}>
<img
src={`${item.img}?w=164&h=164&fit=crop&auto=format&dpr=2`}
alt={item.title}
loading='lazy'
/>
</ImageListItem>
))}
</ImageList>
<ImageList
sx={{ width: 500, height: 450 }}
variant='woven'
cols={3}
gap={8}>
{itemData2.map(item => (
<ImageListItem key={item.img}>
<img
src={`${item.img}?w=164&h=164&fit=crop&auto=format&dpr=2`}
alt={item.title}
loading='lazy'
/>
</ImageListItem>
))}
</ImageList>
<Box sx={{ width: 500, height: 450, overflowY: 'scroll' }}>
<ImageList variant='masonry' cols={3} gap={8}>
{itemData3.map(item => (
<ImageListItem key={item.img}>
<img
src={`${item.img}?w=248&fit=crop&auto=format&dpr=2`}
alt={item.title}
loading='lazy'
/>
</ImageListItem>
))}
</ImageList>
</Box>
</Stack>
)
}
const itemData = [
{
img: 'https://images.unsplash.com/photo-1551963831-b3b1ca40c98e',
title: 'Breakfast'
},
{
img: 'https://images.unsplash.com/photo-1551782450-a2132b4ba21d',
title: 'Burger'
},
{
img: 'https://images.unsplash.com/photo-1522770179533-24471fcdba45',
title: 'Camera'
},
{
img: 'https://images.unsplash.com/photo-1444418776041-9c7e33cc5a9c',
title: 'Coffee'
},
{
img: 'https://images.unsplash.com/photo-1533827432537-70133748f5c8',
title: 'Hats'
},
{
img: 'https://images.unsplash.com/photo-1558642452-9d2a7deb7f62',
title: 'Honey'
},
{
img: 'https://images.unsplash.com/photo-1516802273409-68526ee1bdd6',
title: 'Basketball'
},
{
img: 'https://images.unsplash.com/photo-1518756131217-31eb79b20e8f',
title: 'Fern'
},
{
img: 'https://images.unsplash.com/photo-1597645587822-e99fa5d45d25',
title: 'Mushrooms'
},
{
img: 'https://images.unsplash.com/photo-1567306301408-9b74779a11af',
title: 'Tomato basil'
},
{
img: 'https://images.unsplash.com/photo-1471357674240-e1a485acb3e1',
title: 'Sea star'
},
{
img: 'https://images.unsplash.com/photo-1589118949245-7d38baf380d6',
title: 'Bike'
}
]
const itemData2 = [
{
img: 'https://images.unsplash.com/photo-1549388604-817d15aa0110',
title: 'Bed'
},
{
img: 'https://images.unsplash.com/photo-1563298723-dcfebaa392e3',
title: 'Kitchen'
},
{
img: 'https://images.unsplash.com/photo-1523413651479-597eb2da0ad6',
title: 'Sink'
},
{
img: 'https://images.unsplash.com/photo-1525097487452-6278ff080c31',
title: 'Books'
},
{
img: 'https://images.unsplash.com/photo-1574180045827-681f8a1a9622',
title: 'Chairs'
},
{
img: 'https://images.unsplash.com/photo-1597262975002-c5c3b14bbd62',
title: 'Candle'
},
{
img: 'https://images.unsplash.com/photo-1530731141654-5993c3016c77',
title: 'Laptop'
},
{
img: 'https://images.unsplash.com/photo-1481277542470-605612bd2d61',
title: 'Doors'
},
{
img: 'https://images.unsplash.com/photo-1517487881594-2787fef5ebf7',
title: 'Coffee'
},
{
img: 'https://images.unsplash.com/photo-1516455207990-7a41ce80f7ee',
title: 'Storage'
},
{
img: 'https://images.unsplash.com/photo-1519710164239-da123dc03ef4',
title: 'Coffee table'
},
{
img: 'https://images.unsplash.com/photo-1588436706487-9d55d73a39e3',
title: 'Blinds'
}
]
const itemData3 = [
{
img: 'https://images.unsplash.com/photo-1549388604-817d15aa0110',
title: 'Bed'
},
{
img: 'https://images.unsplash.com/photo-1525097487452-6278ff080c31',
title: 'Books'
},
{
img: 'https://images.unsplash.com/photo-1523413651479-597eb2da0ad6',
title: 'Sink'
},
{
img: 'https://images.unsplash.com/photo-1563298723-dcfebaa392e3',
title: 'Kitchen'
},
{
img: 'https://images.unsplash.com/photo-1588436706487-9d55d73a39e3',
title: 'Blinds'
},
{
img: 'https://images.unsplash.com/photo-1574180045827-681f8a1a9622',
title: 'Chairs'
},
{
img: 'https://images.unsplash.com/photo-1530731141654-5993c3016c77',
title: 'Laptop'
},
{
img: 'https://images.unsplash.com/photo-1481277542470-605612bd2d61',
title: 'Doors'
},
{
img: 'https://images.unsplash.com/photo-1517487881594-2787fef5ebf7',
title: 'Coffee'
},
{
img: 'https://images.unsplash.com/photo-1516455207990-7a41ce80f7ee',
title: 'Storage'
},
{
img: 'https://images.unsplash.com/photo-1597262975002-c5c3b14bbd62',
title: 'Candle'
},
{
img: 'https://images.unsplash.com/photo-1519710164239-da123dc03ef4',
title: 'Coffee table'
}
]
================================================
FILE: react-mui-demo/src/components/MuiLayout.tsx
================================================
import { Box, Stack, Grid, Paper } from '@mui/material'
export const MuiLayout = () => {
return (
<Paper sx={{ padding: '32px' }} elevation={2}>
<Stack border='1px solid' spacing={2} direction='row'>
<Box
component='span'
sx={{
backgroundColor: 'primary.main',
color: 'white',
height: '100px',
width: '100px',
padding: '16px',
'&:hover': {
backgroundColor: 'primary.light'
}
}}>
Codevolution
</Box>
<Box
display='flex'
height='100px'
width='100px'
bgcolor='success.light'
p={2}></Box>
</Stack>
<Grid rowSpacing={2} columnSpacing={1} container my={4}>
<Grid item xs={6}>
<Box p={2} bgcolor='primary.light'>
Item 1
</Box>
</Grid>
<Grid item xs={6}>
<Box p={2} bgcolor='primary.light'>
Item 2
</Box>
</Grid>
<Grid item xs={6}>
<Box p={2} bgcolor='primary.light'>
Item 3
</Box>
</Grid>
<Grid item xs={6}>
<Box p={2} bgcolor='primary.light'>
Item 4
</Box>
</Grid>
</Grid>
</Paper>
)
}
================================================
FILE: react-mui-demo/src/components/MuiLink.tsx
================================================
import { Stack, Link, Typography } from '@mui/material'
export const MuiLink = () => {
return (
<Stack spacing={2} m={4} direction='row'>
<Typography variant='h6'>
<Link href='#'>Link</Link>
</Typography>
<Link href='#' color='secondary' underline='hover'>
Secondary
</Link>
<Link href='#' variant='body2' underline='none'>
Body 2 link
</Link>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiList.tsx
================================================
import {
Box,
List,
ListItem,
ListItemText,
ListItemButton,
ListItemIcon,
Divider,
ListItemAvatar,
Avatar
} from '@mui/material'
import InboxIcon from '@mui/icons-material/Inbox'
export const MuiList = () => {
return (
<Box sx={{ width: '400px', bgcolor: '#efefef' }}>
<List>
<ListItem disablePadding>
<ListItemButton>
<ListItemIcon>
<InboxIcon />
</ListItemIcon>
<ListItemText primary='List item 1' />
</ListItemButton>
</ListItem>
<Divider />
<ListItem>
<ListItemAvatar>
<Avatar>
<InboxIcon />
</Avatar>
</ListItemAvatar>
<ListItemText primary='List item 2' secondary='Secondary text' />
</ListItem>
<ListItem>
<ListItemText primary='List item 3' />
</ListItem>
</List>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiLoadingButton.tsx
================================================
import { Stack } from '@mui/material'
import { LoadingButton } from '@mui/lab'
import SaveIcon from '@mui/icons-material/Save'
export const MuiLoadingButton = () => {
return (
<Stack direction='row' spacing={2}>
<LoadingButton variant='outlined'>Submit</LoadingButton>
<LoadingButton loading variant='outlined'>
Submit
</LoadingButton>
<LoadingButton loadingIndicator='Loading...' variant='outlined'>
Fetch data
</LoadingButton>
<LoadingButton loading loadingIndicator='Loading...' variant='outlined'>
Fetch data
</LoadingButton>
<LoadingButton
loadingPosition='start'
startIcon={<SaveIcon />}
variant='outlined'>
Save
</LoadingButton>
<LoadingButton
loading
loadingPosition='start'
startIcon={<SaveIcon />}
variant='outlined'>
Save
</LoadingButton>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiMasonry.tsx
================================================
import { Masonry } from '@mui/lab'
import {
Box,
Paper,
Accordion,
AccordionSummary,
AccordionDetails,
Typography
} from '@mui/material'
import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
const heights = [
150, 30, 90, 70, 110, 150, 130, 80, 50, 90, 100, 150, 30, 50, 80
]
export const MuiMasonry = () => {
return (
<Box sx={{ width: 500, minHeight: 400 }}>
<Masonry columns={4} spacing={1}>
{heights.map((height, index) => (
<Paper
key={index}
sx={{
// display: 'flex',
// justifyContent: 'center',
// alignItems: 'center',
// height,
border: '1px solid'
}}>
<Accordion sx={{ minHeight: height }}>
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
<Typography>Accordion {index + 1}</Typography>
</AccordionSummary>
<AccordionDetails>Contents</AccordionDetails>
</Accordion>
</Paper>
))}
</Masonry>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiNavbar.tsx
================================================
import {
AppBar,
Toolbar,
IconButton,
Typography,
Button,
Stack,
Menu,
MenuItem
} from '@mui/material'
import CatchingPokemonIcon from '@mui/icons-material/CatchingPokemon'
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'
import { useState } from 'react'
export const MuiNavbar = () => {
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)
const open = Boolean(anchorEl)
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
setAnchorEl(event.currentTarget)
}
const handleClose = () => {
setAnchorEl(null)
}
return (
<AppBar position='static' color='transparent'>
<Toolbar>
<IconButton size='large' edge='start' color='inherit' aria-label='logo'>
<CatchingPokemonIcon />
</IconButton>
<Typography variant='h6' component='div' sx={{ flexGrow: 1 }}>
POKEMONAPP
</Typography>
<Stack direction='row' spacing={2}>
<Button color='inherit'>Features</Button>
<Button color='inherit'>Pricing</Button>
<Button color='inherit'>About</Button>
<Button
color='inherit'
id='resources-button'
aria-controls={open ? 'resources-menu' : undefined}
aria-haspopup='true'
aria-expanded={open ? 'true' : undefined}
endIcon={<KeyboardArrowDownIcon />}
onClick={handleClick}>
Resources
</Button>
<Button color='inherit'>Login</Button>
</Stack>
<Menu
id='resources-menu'
anchorEl={anchorEl}
open={open}
onClose={handleClose}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'right'
}}
transformOrigin={{
vertical: 'top',
horizontal: 'right'
}}
MenuListProps={{
'aria-labelledby': 'resources-button'
}}>
<MenuItem onClick={handleClose}>Blog</MenuItem>
<MenuItem onClick={handleClose}>Podcast</MenuItem>
</Menu>
</Toolbar>
</AppBar>
)
}
================================================
FILE: react-mui-demo/src/components/MuiProgress.tsx
================================================
import { Stack, CircularProgress, LinearProgress } from '@mui/material'
export const MuiProgress = () => {
return (
<Stack spacing={2}>
<CircularProgress />
<CircularProgress color='success' />
<CircularProgress variant='determinate' value={60} />
<LinearProgress />
<LinearProgress color='success' />
<LinearProgress variant='determinate' value={60} />
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiRadioButton.tsx
================================================
import { useState } from 'react'
import {
Box,
FormControl,
FormLabel,
FormControlLabel,
RadioGroup,
Radio
} from '@mui/material'
export const MuiRadioButton = () => {
const [value, setValue] = useState('')
console.log(value)
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setValue(event.target.value)
}
return (
<Box>
<FormControl>
<FormLabel id='job-experience-group-label'>
Years of experience
</FormLabel>
<RadioGroup
row
aria-labelledby='job-experience-group-label'
name='job-experience-group'
value={value}
onChange={handleChange}>
<FormControlLabel
labelPlacement='start'
value='0-2'
control={<Radio size='small' color='secondary' />}
label='0-2 years'
/>
<FormControlLabel
labelPlacement='start'
value='3-5'
control={<Radio size='small' color='secondary' />}
label='3-5 years'
/>
<FormControlLabel
labelPlacement='start'
value='6-10'
control={<Radio size='small' color='secondary' />}
label='6-10 years'
/>
</RadioGroup>
</FormControl>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiRating.tsx
================================================
import { Stack, Rating } from '@mui/material'
import { useState } from 'react'
import FavoriteIcon from '@mui/icons-material/Favorite'
import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder'
export const MuiRating = () => {
const [value, setValue] = useState<number | null>(3)
console.log(value)
const handleChange = (
_event: React.ChangeEvent<{}>,
newValue: number | null
) => {
setValue(newValue)
}
return (
<Stack spacing={2}>
<Rating
value={value}
onChange={handleChange}
precision={0.5}
size='large'
icon={<FavoriteIcon fontSize='inherit' color='error' />}
emptyIcon={<FavoriteBorderIcon fontSize='inherit' />}
readOnly
/>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiSelect.tsx
================================================
import { useState } from 'react'
import { Box, TextField, MenuItem } from '@mui/material'
export const MuiSelect = () => {
const [countries, setCountries] = useState<string[]>([])
console.log(countries)
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const value = event.target.value
setCountries(typeof value === 'string' ? value.split(',') : value)
}
return (
<Box width='250px'>
<TextField
label='Select country'
select
SelectProps={{
multiple: true
}}
size='small'
color='secondary'
helperText='Please select your country'
value={countries}
onChange={handleChange}>
<MenuItem value='IN'>India</MenuItem>
<MenuItem value='US'>USA</MenuItem>
<MenuItem value='AU'>Australia</MenuItem>
</TextField>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiSkeleton.tsx
================================================
import { Avatar, Box, Skeleton, Stack, Typography } from '@mui/material'
import { useState, useEffect } from 'react'
export const MuiSkeleton = () => {
const [loading, setLoading] = useState(true)
useEffect(() => {
setTimeout(() => {
setLoading(false)
}, 3000)
}, [])
return (
<Box sx={{ width: '250px' }}>
{loading ? (
<Skeleton
variant='rectangular'
width={256}
height={144}
animation='wave'
/>
) : (
<img
src='https://source.unsplash.com/random/256x144'
alt='skeleton'
width={256}
height={144}
/>
)}
<Stack
direction='row'
spacing={1}
sx={{ width: '100%', marginTop: '12px' }}>
{loading ? (
<Skeleton
variant='circular'
width={40}
height={40}
animation='wave'
/>
) : (
<Avatar>V</Avatar>
)}
<Stack sx={{ width: '80%' }}>
{loading ? (
<>
<Typography variant='body1'>
<Skeleton variant='text' width='100%' animation='wave' />
</Typography>
<Typography variant='body2'>
<Skeleton variant='text' width='100%' animation='wave' />
</Typography>
</>
) : (
<>
<Typography variant='body1'>React MUI Tutorial</Typography>
</>
)}
</Stack>
</Stack>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiSnackbar.tsx
================================================
import { Snackbar, Button, Alert, AlertProps } from '@mui/material'
import { useState, forwardRef } from 'react'
const SnackbarAlert = forwardRef<HTMLDivElement, AlertProps>(
function SnackbarAlert(props, ref) {
return <Alert elevation={6} ref={ref} {...props} />
}
)
export const MuiSnackbar = () => {
const [open, setOpen] = useState(false)
const handleClose = (
event?: React.SyntheticEvent | Event,
reason?: string
) => {
if (reason === 'clickaway') {
return
}
setOpen(false)
}
return (
<>
<Button onClick={() => setOpen(true)}>Submit</Button>
<Snackbar
open={open}
autoHideDuration={4000}
onClose={handleClose}
message='Form submitted successfully!'
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
/>
<Snackbar open={open} autoHideDuration={6000} onClose={handleClose}>
<SnackbarAlert onClose={handleClose} severity='success'>
Form submitted successfully!
</SnackbarAlert>
</Snackbar>
</>
)
}
================================================
FILE: react-mui-demo/src/components/MuiSpeedDial.tsx
================================================
import { SpeedDial, SpeedDialAction, SpeedDialIcon } from '@mui/material'
import CopyIcon from '@mui/icons-material/FileCopyOutlined'
import PrintIcon from '@mui/icons-material/Print'
import ShareIcon from '@mui/icons-material/Share'
import EditIcon from '@mui/icons-material/Edit'
export const MuiSpeedDial = () => {
return (
<SpeedDial
ariaLabel='Navigation speed dial'
sx={{ position: 'absolute', bottom: 16, right: 16 }}
icon={<SpeedDialIcon openIcon={<EditIcon />} />}>
<SpeedDialAction icon={<CopyIcon />} tooltipTitle='Copy' tooltipOpen />
<SpeedDialAction icon={<PrintIcon />} tooltipTitle='Print' tooltipOpen />
<SpeedDialAction icon={<ShareIcon />} tooltipTitle='Share' tooltipOpen />
</SpeedDial>
)
}
================================================
FILE: react-mui-demo/src/components/MuiSwitch.tsx
================================================
import { Box, FormControlLabel, Switch } from '@mui/material'
import { useState } from 'react'
export const MuiSwitch = () => {
const [checked, setChecked] = useState(false)
console.log(checked)
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setChecked(event.target.checked)
}
return (
<Box>
<FormControlLabel
control={<Switch checked={checked} onChange={handleChange} />}
label='Dark mode'
/>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiTable.tsx
================================================
import {
TableContainer,
Table,
TableHead,
TableBody,
TableRow,
TableCell,
Paper
} from '@mui/material'
export const MuiTable = () => {
return (
<TableContainer sx={{ maxHeight: '300px' }} component={Paper}>
<Table stickyHeader aria-label='simple table'>
<TableHead>
<TableRow>
<TableCell>Id</TableCell>
<TableCell>First Name</TableCell>
<TableCell>Last Name</TableCell>
<TableCell align='center'>Email</TableCell>
</TableRow>
</TableHead>
<TableBody>
{tableData.map(row => (
<TableRow
key={row.id}
sx={{ '&:last-child td, &:last-child th': { border: 0 } }}>
<TableCell>{row.id}</TableCell>
<TableCell>{row.first_name}</TableCell>
<TableCell>{row.last_name}</TableCell>
<TableCell align='center'>{row.email}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
)
}
const tableData = [
{
id: 1,
first_name: 'Beret',
last_name: 'Lennard',
email: 'blennard0@pcworld.com',
gender: 'Female',
ip_address: '213.196.192.52'
},
{
id: 2,
first_name: 'Tera',
last_name: 'Choke',
email: 'tchoke1@theatlantic.com',
gender: 'Male',
ip_address: '101.152.241.70'
},
{
id: 3,
first_name: 'Lyn',
last_name: 'Bowart',
email: 'lbowart2@odnoklassniki.ru',
gender: 'Male',
ip_address: '188.127.126.94'
},
{
id: 4,
first_name: 'Bert',
last_name: 'Huckett',
email: 'bhuckett3@tinypic.com',
gender: 'Female',
ip_address: '247.156.243.148'
},
{
id: 5,
first_name: 'Drew',
last_name: 'Jenicke',
email: 'djenicke4@businessinsider.com',
gender: 'Male',
ip_address: '0.185.35.172'
},
{
id: 6,
first_name: 'Deloria',
last_name: 'Pepperill',
email: 'dpepperill5@meetup.com',
gender: 'Non-binary',
ip_address: '101.44.39.120'
},
{
id: 7,
first_name: 'Spense',
last_name: 'Ivashnyov',
email: 'sivashnyov6@hexun.com',
gender: 'Female',
ip_address: '253.192.252.49'
},
{
id: 8,
first_name: 'Elden',
last_name: 'Chaucer',
email: 'echaucer7@mozilla.com',
gender: 'Agender',
ip_address: '60.70.120.186'
},
{
id: 9,
first_name: 'Sholom',
last_name: 'Deetch',
email: 'sdeetch8@so-net.ne.jp',
gender: 'Female',
ip_address: '218.36.95.147'
},
{
id: 10,
first_name: 'Genovera',
last_name: 'Colby',
email: 'gcolby9@dagondesign.com',
gender: 'Non-binary',
ip_address: '199.140.221.248'
}
]
================================================
FILE: react-mui-demo/src/components/MuiTabs.tsx
================================================
import { Box, Tab } from '@mui/material'
import { TabContext, TabList, TabPanel } from '@mui/lab'
import { useState } from 'react'
import FavoriteIcon from '@mui/icons-material/Favorite'
export const MuiTabs = () => {
const [value, setValue] = useState('1')
const handleChange = (event: React.SyntheticEvent, newValue: string) => {
setValue(newValue)
}
return (
<Box sx={{ width: '300px' }}>
<TabContext value={value}>
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
<TabList
onChange={handleChange}
aria-label='Tabs example'
textColor='secondary'
indicatorColor='secondary'
centered
variant='scrollable'
scrollButtons='auto'>
<Tab
icon={<FavoriteIcon />}
iconPosition='start'
label='Tab One'
value='1'
/>
<Tab label='Tab Two' value='2' disabled />
<Tab label='Tab Three' value='3' />
<Tab label='Tab Four' value='4' />
<Tab label='Tab Five' value='5' />
<Tab label='Tab Six' value='6' />
</TabList>
</Box>
<TabPanel value='1'>Item One</TabPanel>
<TabPanel value='2'>Item Two</TabPanel>
<TabPanel value='3'>Item Three</TabPanel>
<TabPanel value='4'>Item Four</TabPanel>
<TabPanel value='5'>Item Five</TabPanel>
<TabPanel value='6'>Item Six</TabPanel>
</TabContext>
</Box>
)
}
================================================
FILE: react-mui-demo/src/components/MuiTextField.tsx
================================================
import { useState } from 'react'
import { Stack, TextField, InputAdornment } from '@mui/material'
export const MuiTextField = () => {
const [value, setValue] = useState('')
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setValue(event.target.value)
}
return (
<Stack spacing={4}>
<Stack spacing={2} direction='row'>
<TextField label='Outlined' variant='outlined' />
<TextField label='Filled' variant='filled' />
<TextField label='Standard' variant='standard' />
</Stack>
<Stack spacing={2} direction='row'>
<TextField label='Small secondary' size='small' color='secondary' />
</Stack>
<Stack spacing={2} direction='row'>
<TextField
label='Form Input'
required
helperText={
!value ? 'Required' : 'Do not share your password with anyone'
}
type='password'
error={!value}
value={value}
onChange={handleChange}
/>
</Stack>
<Stack spacing={2} direction='row'>
<TextField
label='Amount'
InputProps={{
startAdornment: <InputAdornment position='start'>$</InputAdornment>
}}
/>
<TextField
label='Weight'
InputProps={{
endAdornment: <InputAdornment position='end'>kg</InputAdornment>
}}
/>
</Stack>
</Stack>
)
}
================================================
FILE: react-mui-demo/src/components/MuiTimeline.tsx
================================================
import {
Timeline,
TimelineItem,
TimelineSeparator,
TimelineConnector,
TimelineContent,
TimelineDot,
TimelineOppositeContent
} from '@mui/lab'
export const MuiTimeline = () => {
return (
<Timeline>
<TimelineItem>
<TimelineOppositeContent color='text.secondary'>
09:30 am
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color='secondary' variant='outlined' />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent>Eat</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineOppositeContent color='text.secondary'>
10:30 am
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color='secondary' variant='outlined' />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent>Code</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineOppositeContent color='text.secondary'>
10:30 am
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color='secondary' variant='outlined' />
<TimelineConnector />
</TimelineSeparator>
<TimelineContent>Sleep</TimelineContent>
</TimelineItem>
<TimelineItem>
<TimelineOppositeContent color='text.secondary'>
09:00 am
</TimelineOppositeContent>
<TimelineSeparator>
<TimelineDot color='secondary' variant='outlined' />
</TimelineSeparator>
<TimelineContent>Repeat</TimelineContent>
</TimelineItem>
</Timeline>
)
}
================================================
FILE: react-mui-demo/src/components/MuiTooltip.tsx
================================================
import { Tooltip, IconButton } from '@mui/material'
import DeleteIcon from '@mui/icons-material/Delete'
export const MuiTooltip = () => {
return (
<Tooltip
title='Delete'
placement='right'
arrow
enterDelay={500}
leaveDelay={200}>
<IconButton>
<DeleteIcon />
</IconButton>
</Tooltip>
)
}
================================================
FILE: react-mui-demo/src/components/MuiTypography.tsx
================================================
import { Typography } from '@mui/material'
export const MuiTypography = () => {
return (
<div>
<Typography variant='h1'>h1 Heading</Typography>
<Typography variant='h2'>h2 Heading</Typography>
<Typography variant='h3'>h3 Heading</Typography>
<Typography variant='h4' component='h1' gutterBottom>
h4 Heading
</Typography>
<Typography variant='h5'>h5 Heading</Typography>
<Typography variant='h6'>h6 Heading</Typography>
<Typography variant='subtitle1'>subtitle1</Typography>
<Typography variant='subtitle2'>subtitle2</Typography>
<Typography>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nam saepe
magnam illo quas illum minus, aperiam, iusto optio quisquam veniam
obcaecati quasi libero aspernatur alias quia modi minima excepturi ad.
</Typography>
<Typography variant='body2'>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolorum, harum
quam deserunt optio atque illo iste! Qui ullam ut nisi. Porro adipisci
eius nesciunt excepturi id! Eius nemo asperiores natus?
</Typography>
</div>
)
}
================================================
FILE: react-mui-demo/src/index.css
================================================
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
================================================
FILE: react-mui-demo/src/index.tsx
================================================
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
================================================
FILE: react-mui-demo/src/react-app-env.d.ts
================================================
/// <reference types="react-scripts" />
================================================
FILE: react-mui-demo/src/reportWebVitals.ts
================================================
import { ReportHandler } from 'web-vitals';
const reportWebVitals = (onPerfEntry?: ReportHandler) => {
if (onPerfEntry && onPerfEntry instanceof Function) {
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
getCLS(onPerfEntry);
getFID(onPerfEntry);
getFCP(onPerfEntry);
getLCP(onPerfEntry);
getTTFB(onPerfEntry);
});
}
};
export default reportWebVitals;
================================================
FILE: react-mui-demo/src/setupTests.ts
================================================
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom';
================================================
FILE: react-mui-demo/src/theme.d.ts
================================================
import { Theme, ThemeOptions } from '@mui/material/styles'
declare module '@mui/material/styles' {
interface Theme {
status: {
danger: string
}
}
interface ThemeOptions {
status: {
danger: React.CSSProperties['color']
}
}
interface Palette {
neutral?: PaletteColor
}
interface PaletteOptions {
neutral?: PaletteColorOptions
}
interface PaletteColor {
darker?: string
}
interface SimplePaletteColorOptions {
darker?: string
}
}
================================================
FILE: react-mui-demo/tsconfig.json
================================================
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
gitextract_erixtw6q/
└── react-mui-demo/
├── .gitignore
├── README.md
├── package.json
├── public/
│ ├── index.html
│ ├── manifest.json
│ └── robots.txt
├── src/
│ ├── App.css
│ ├── App.test.tsx
│ ├── App.tsx
│ ├── components/
│ │ ├── MuiAccordion.tsx
│ │ ├── MuiAlert.tsx
│ │ ├── MuiAutocomplete.tsx
│ │ ├── MuiAvatar.tsx
│ │ ├── MuiBadge.tsx
│ │ ├── MuiBottomNavigation.tsx
│ │ ├── MuiBreadcrumbs.tsx
│ │ ├── MuiButton.tsx
│ │ ├── MuiCard.tsx
│ │ ├── MuiCheckbox.tsx
│ │ ├── MuiChip.tsx
│ │ ├── MuiCustomTheme.tsx
│ │ ├── MuiDateRangePicker.tsx
│ │ ├── MuiDateTimePicker.tsx
│ │ ├── MuiDialog.tsx
│ │ ├── MuiDrawer.tsx
│ │ ├── MuiImageList.tsx
│ │ ├── MuiLayout.tsx
│ │ ├── MuiLink.tsx
│ │ ├── MuiList.tsx
│ │ ├── MuiLoadingButton.tsx
│ │ ├── MuiMasonry.tsx
│ │ ├── MuiNavbar.tsx
│ │ ├── MuiProgress.tsx
│ │ ├── MuiRadioButton.tsx
│ │ ├── MuiRating.tsx
│ │ ├── MuiSelect.tsx
│ │ ├── MuiSkeleton.tsx
│ │ ├── MuiSnackbar.tsx
│ │ ├── MuiSpeedDial.tsx
│ │ ├── MuiSwitch.tsx
│ │ ├── MuiTable.tsx
│ │ ├── MuiTabs.tsx
│ │ ├── MuiTextField.tsx
│ │ ├── MuiTimeline.tsx
│ │ ├── MuiTooltip.tsx
│ │ └── MuiTypography.tsx
│ ├── index.css
│ ├── index.tsx
│ ├── react-app-env.d.ts
│ ├── reportWebVitals.ts
│ ├── setupTests.ts
│ └── theme.d.ts
└── tsconfig.json
SYMBOL INDEX (8 symbols across 3 files)
FILE: react-mui-demo/src/App.tsx
function App (line 59) | function App() {
FILE: react-mui-demo/src/components/MuiAutocomplete.tsx
type Skill (line 4) | type Skill = {
FILE: react-mui-demo/src/theme.d.ts
type Theme (line 4) | interface Theme {
type ThemeOptions (line 9) | interface ThemeOptions {
type Palette (line 15) | interface Palette {
type PaletteOptions (line 18) | interface PaletteOptions {
type PaletteColor (line 22) | interface PaletteColor {
type SimplePaletteColorOptions (line 26) | interface SimplePaletteColorOptions {
Condensed preview — 53 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (68K chars).
[
{
"path": "react-mui-demo/.gitignore",
"chars": 310,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "react-mui-demo/README.md",
"chars": 2103,
"preview": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebo"
},
{
"path": "react-mui-demo/package.json",
"chars": 1208,
"preview": "{\n \"name\": \"react-mui-demo\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"dependencies\": {\n \"@date-io/date-fns\": \"^2."
},
{
"path": "react-mui-demo/public/index.html",
"chars": 1721,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.i"
},
{
"path": "react-mui-demo/public/manifest.json",
"chars": 492,
"preview": "{\n \"short_name\": \"React App\",\n \"name\": \"Create React App Sample\",\n \"icons\": [\n {\n \"src\": \"favicon.ico\",\n "
},
{
"path": "react-mui-demo/public/robots.txt",
"chars": 67,
"preview": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
},
{
"path": "react-mui-demo/src/App.css",
"chars": 602,
"preview": "/* body {\n background-color: #eeeeee;\n} */\n.App {\n margin: 4rem;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: no"
},
{
"path": "react-mui-demo/src/App.test.tsx",
"chars": 273,
"preview": "import React from 'react';\nimport { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('rend"
},
{
"path": "react-mui-demo/src/App.tsx",
"chars": 4037,
"preview": "import { createTheme, ThemeProvider, colors } from '@mui/material'\nimport AdapterDateFns from '@mui/lab/AdapterDateFns'\n"
},
{
"path": "react-mui-demo/src/components/MuiAccordion.tsx",
"chars": 2299,
"preview": "import {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typography\n} from '@mui/material'\nimport ExpandMoreIcon "
},
{
"path": "react-mui-demo/src/components/MuiAlert.tsx",
"chars": 1673,
"preview": "import { Stack, Alert, AlertTitle, Button } from '@mui/material'\nimport CheckIcon from '@mui/icons-material/Check'\nexpor"
},
{
"path": "react-mui-demo/src/components/MuiAutocomplete.tsx",
"chars": 1053,
"preview": "import { Stack, Autocomplete, TextField } from '@mui/material'\nimport { useState } from 'react'\n\ntype Skill = {\n id: nu"
},
{
"path": "react-mui-demo/src/components/MuiAvatar.tsx",
"chars": 1156,
"preview": "import { Stack, Avatar, AvatarGroup } from '@mui/material'\nexport const MuiAvatar = () => {\n return (\n <Stack spacin"
},
{
"path": "react-mui-demo/src/components/MuiBadge.tsx",
"chars": 554,
"preview": "import { Stack, Badge } from '@mui/material'\nimport MailIcon from '@mui/icons-material/Mail'\n\nexport const MuiBadge = ()"
},
{
"path": "react-mui-demo/src/components/MuiBottomNavigation.tsx",
"chars": 796,
"preview": "import { BottomNavigation, BottomNavigationAction } from '@mui/material'\nimport HomeIcon from '@mui/icons-material/Home'"
},
{
"path": "react-mui-demo/src/components/MuiBreadcrumbs.tsx",
"chars": 769,
"preview": "import { Box, Breadcrumbs, Link, Typography } from '@mui/material'\nimport NavigateNextIcon from '@mui/icons-material/Nav"
},
{
"path": "react-mui-demo/src/components/MuiButton.tsx",
"chars": 3308,
"preview": "import { useState } from 'react'\nimport {\n Stack,\n Button,\n IconButton,\n ButtonGroup,\n ToggleButtonGroup,\n ToggleB"
},
{
"path": "react-mui-demo/src/components/MuiCard.tsx",
"chars": 949,
"preview": "import {\n Box,\n Card,\n CardContent,\n CardActions,\n Typography,\n Button,\n CardMedia\n} from '@mui/material'\n\nexport"
},
{
"path": "react-mui-demo/src/components/MuiCheckbox.tsx",
"chars": 2427,
"preview": "import { useState } from 'react'\nimport {\n Box,\n FormControlLabel,\n Checkbox,\n FormControl,\n FormLabel,\n FormGroup"
},
{
"path": "react-mui-demo/src/components/MuiChip.tsx",
"chars": 915,
"preview": "import { Stack, Chip, Avatar } from '@mui/material'\nimport { useState } from 'react'\n\nexport const MuiChip = () => {\n c"
},
{
"path": "react-mui-demo/src/components/MuiCustomTheme.tsx",
"chars": 526,
"preview": "import { Box, styled } from '@mui/material'\n\nconst StyledBox = styled(Box)(({ theme }) => ({\n height: '250px',\n width:"
},
{
"path": "react-mui-demo/src/components/MuiDateRangePicker.tsx",
"chars": 722,
"preview": "import { Box, TextField } from '@mui/material'\nimport { DateRangePicker, DateRange } from '@mui/lab'\nimport { useState }"
},
{
"path": "react-mui-demo/src/components/MuiDateTimePicker.tsx",
"chars": 1296,
"preview": "import { Stack, TextField } from '@mui/material'\nimport { DatePicker, TimePicker, DateTimePicker } from '@mui/lab'\nimpor"
},
{
"path": "react-mui-demo/src/components/MuiDialog.tsx",
"chars": 1035,
"preview": "import {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions\n} from '@mui/material'"
},
{
"path": "react-mui-demo/src/components/MuiDrawer.tsx",
"chars": 787,
"preview": "import { Drawer, Box, Typography, IconButton } from '@mui/material'\nimport { useState } from 'react'\nimport MenuIcon fro"
},
{
"path": "react-mui-demo/src/components/MuiImageList.tsx",
"chars": 5117,
"preview": "import { Stack, ImageList, ImageListItem, Box } from '@mui/material'\nexport const MuiImageList = () => {\n return (\n "
},
{
"path": "react-mui-demo/src/components/MuiLayout.tsx",
"chars": 1321,
"preview": "import { Box, Stack, Grid, Paper } from '@mui/material'\n\nexport const MuiLayout = () => {\n return (\n <Paper sx={{ pa"
},
{
"path": "react-mui-demo/src/components/MuiLink.tsx",
"chars": 430,
"preview": "import { Stack, Link, Typography } from '@mui/material'\n\nexport const MuiLink = () => {\n return (\n <Stack spacing={2"
},
{
"path": "react-mui-demo/src/components/MuiList.tsx",
"chars": 930,
"preview": "import {\n Box,\n List,\n ListItem,\n ListItemText,\n ListItemButton,\n ListItemIcon,\n Divider,\n ListItemAvatar,\n Ava"
},
{
"path": "react-mui-demo/src/components/MuiLoadingButton.tsx",
"chars": 938,
"preview": "import { Stack } from '@mui/material'\nimport { LoadingButton } from '@mui/lab'\nimport SaveIcon from '@mui/icons-material"
},
{
"path": "react-mui-demo/src/components/MuiMasonry.tsx",
"chars": 1092,
"preview": "import { Masonry } from '@mui/lab'\nimport {\n Box,\n Paper,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Typog"
},
{
"path": "react-mui-demo/src/components/MuiNavbar.tsx",
"chars": 2145,
"preview": "import {\n AppBar,\n Toolbar,\n IconButton,\n Typography,\n Button,\n Stack,\n Menu,\n MenuItem\n} from '@mui/material'\ni"
},
{
"path": "react-mui-demo/src/components/MuiProgress.tsx",
"chars": 415,
"preview": "import { Stack, CircularProgress, LinearProgress } from '@mui/material'\nexport const MuiProgress = () => {\n return (\n "
},
{
"path": "react-mui-demo/src/components/MuiRadioButton.tsx",
"chars": 1325,
"preview": "import { useState } from 'react'\nimport {\n Box,\n FormControl,\n FormLabel,\n FormControlLabel,\n RadioGroup,\n Radio\n}"
},
{
"path": "react-mui-demo/src/components/MuiRating.tsx",
"chars": 757,
"preview": "import { Stack, Rating } from '@mui/material'\nimport { useState } from 'react'\nimport FavoriteIcon from '@mui/icons-mate"
},
{
"path": "react-mui-demo/src/components/MuiSelect.tsx",
"chars": 881,
"preview": "import { useState } from 'react'\nimport { Box, TextField, MenuItem } from '@mui/material'\n\nexport const MuiSelect = () ="
},
{
"path": "react-mui-demo/src/components/MuiSkeleton.tsx",
"chars": 1550,
"preview": "import { Avatar, Box, Skeleton, Stack, Typography } from '@mui/material'\nimport { useState, useEffect } from 'react'\n\nex"
},
{
"path": "react-mui-demo/src/components/MuiSnackbar.tsx",
"chars": 1062,
"preview": "import { Snackbar, Button, Alert, AlertProps } from '@mui/material'\nimport { useState, forwardRef } from 'react'\n\nconst "
},
{
"path": "react-mui-demo/src/components/MuiSpeedDial.tsx",
"chars": 761,
"preview": "import { SpeedDial, SpeedDialAction, SpeedDialIcon } from '@mui/material'\nimport CopyIcon from '@mui/icons-material/File"
},
{
"path": "react-mui-demo/src/components/MuiSwitch.tsx",
"chars": 482,
"preview": "import { Box, FormControlLabel, Switch } from '@mui/material'\nimport { useState } from 'react'\n\nexport const MuiSwitch ="
},
{
"path": "react-mui-demo/src/components/MuiTable.tsx",
"chars": 2707,
"preview": "import {\n TableContainer,\n Table,\n TableHead,\n TableBody,\n TableRow,\n TableCell,\n Paper\n} from '@mui/material'\n\ne"
},
{
"path": "react-mui-demo/src/components/MuiTabs.tsx",
"chars": 1527,
"preview": "import { Box, Tab } from '@mui/material'\nimport { TabContext, TabList, TabPanel } from '@mui/lab'\nimport { useState } fr"
},
{
"path": "react-mui-demo/src/components/MuiTextField.tsx",
"chars": 1454,
"preview": "import { useState } from 'react'\nimport { Stack, TextField, InputAdornment } from '@mui/material'\n\nexport const MuiTextF"
},
{
"path": "react-mui-demo/src/components/MuiTimeline.tsx",
"chars": 1626,
"preview": "import {\n Timeline,\n TimelineItem,\n TimelineSeparator,\n TimelineConnector,\n TimelineContent,\n TimelineDot,\n Timel"
},
{
"path": "react-mui-demo/src/components/MuiTooltip.tsx",
"chars": 350,
"preview": "import { Tooltip, IconButton } from '@mui/material'\nimport DeleteIcon from '@mui/icons-material/Delete'\n\nexport const Mu"
},
{
"path": "react-mui-demo/src/components/MuiTypography.tsx",
"chars": 1162,
"preview": "import { Typography } from '@mui/material'\n\nexport const MuiTypography = () => {\n return (\n <div>\n <Typography "
},
{
"path": "react-mui-demo/src/index.css",
"chars": 366,
"preview": "body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Can"
},
{
"path": "react-mui-demo/src/index.tsx",
"chars": 500,
"preview": "import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport repor"
},
{
"path": "react-mui-demo/src/react-app-env.d.ts",
"chars": 40,
"preview": "/// <reference types=\"react-scripts\" />\n"
},
{
"path": "react-mui-demo/src/reportWebVitals.ts",
"chars": 425,
"preview": "import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntr"
},
{
"path": "react-mui-demo/src/setupTests.ts",
"chars": 241,
"preview": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).to"
},
{
"path": "react-mui-demo/src/theme.d.ts",
"chars": 499,
"preview": "import { Theme, ThemeOptions } from '@mui/material/styles'\n\ndeclare module '@mui/material/styles' {\n interface Theme {\n"
},
{
"path": "react-mui-demo/tsconfig.json",
"chars": 535,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"es5\",\n \"lib\": [\n \"dom\",\n \"dom.iterable\",\n \"esnext\"\n ],\n "
}
]
About this extraction
This page contains the full source code of the gopinav/React-MUI-Tutorials GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 53 files (60.3 KB), approximately 17.1k tokens, and a symbol index with 8 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.