/
githubmirror
/
material-ui
Обзор
Документация
Войти
/
githubmirror
/
material-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
docs/data/material/components/floating-action-button/FloatingActionButtonZoom.tsx
144 строки
3 KB
Brijesh Bittu
[infra] Migrate away from airbnb's eslint config (#46794)
22 авг 2025, 17:24
Не верифицирован
22 авг 2025, 17:24
fe78539
Код
Авторство
О чём код?
import * as React from 'react'; import { useTheme } from '@mui/material/styles'; import AppBar from '@mui/material/AppBar'; import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import Typography from '@mui/material/Typography'; import Zoom from '@mui/material/Zoom'; import Fab from '@mui/material/Fab'; import AddIcon from '@mui/icons-material/Add'; import EditIcon from '@mui/icons-material/Edit'; import UpIcon from '@mui/icons-material/KeyboardArrowUp'; import { green } from '@mui/material/colors'; import Box from '@mui/material/Box'; import { SxProps } from '@mui/system'; interface TabPanelProps { children?: React.ReactNode; dir?: string; index: number; value: number; } function TabPanel(props: TabPanelProps) { const { children, value, index, ...other } = props; return ( <Typography component="div" role="tabpanel" hidden={value !== index} id={`action-tabpanel-${index}`} aria-labelledby={`action-tab-${index}`} {...other} > {value === index && <Box sx={{ p: 3 }}>{children}</Box>} </Typography> ); } function a11yProps(index: any) { return { id: `action-tab-${index}`, 'aria-controls': `action-tabpanel-${index}`, }; } const fabStyle = { position: 'absolute', bottom: 16, right: 16, }; const fabGreenStyle = { color: 'common.white', bgcolor: green[500], '&:hover': { bgcolor: green[600], }, }; export default function FloatingActionButtonZoom() { const theme = useTheme(); const [value, setValue] = React.useState(0); const handleChange = (event: unknown, newValue: number) => { setValue(newValue); }; const transitionDuration = { enter: theme.transitions.duration.enteringScreen, exit: theme.transitions.duration.leavingScreen, }; const fabs = [ { color: 'primary' as const, sx: fabStyle as SxProps, icon: <AddIcon />, label: 'Add', }, { color: 'secondary' as const, sx: fabStyle as SxProps, icon: <EditIcon />, label: 'Edit', }, { color: 'inherit' as const, sx: { ...fabStyle, ...fabGreenStyle } as SxProps, icon: <UpIcon />, label: 'Expand', }, ]; return ( <Box sx={{ bgcolor: 'background.paper', width: 500, position: 'relative', minHeight: 200, }} > <AppBar position="static" color="default"> <Tabs value={value} onChange={handleChange} indicatorColor="primary" textColor="primary" variant="fullWidth" aria-label="action tabs example" > <Tab label="Item One" {...a11yProps(0)} /> <Tab label="Item Two" {...a11yProps(1)} /> <Tab label="Item Three" {...a11yProps(2)} /> </Tabs> </AppBar> <TabPanel value={value} index={0} dir={theme.direction}> Item One </TabPanel> <TabPanel value={value} index={1} dir={theme.direction}> Item Two </TabPanel> <TabPanel value={value} index={2} dir={theme.direction}> Item Three </TabPanel> {fabs.map((fab, index) => ( <Zoom key={fab.color} in={value === index} timeout={transitionDuration} style={{ transitionDelay: `${value === index ? transitionDuration.exit : 0}ms`, }} unmountOnExit > <Fab sx={fab.sx} aria-label={fab.label} color={fab.color}> {fab.icon} </Fab> </Zoom> ))} </Box> ); }