Button Group
Please refer to MUI's official docs for more details on component's usage guide and API documentation.
Use variant={'outlined' | 'contained' | 'text'}
prop with <ButtonGroup>
component for button groups.
// MUI Imports
import Button from '@mui/material/Button'
import ButtonGroup from '@mui/material/ButtonGroup'
const ButtonGroupBasic = () => {
return (
<div className='flex flex-col gap-4 items-start'>
<ButtonGroup variant='outlined'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='contained'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='text'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
</div>
)
}
export default ButtonGroupBasic
Use size={'small' | 'medium' | 'large'}
prop with <ButtonGroup>
component for different sizes of button groups.
// MUI Imports
import Button from '@mui/material/Button'
import ButtonGroup from '@mui/material/ButtonGroup'
const ButtonGroupSizes = () => {
return (
<div className='flex flex-col gap-4 items-start'>
<ButtonGroup size='small'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup size='medium'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup size='large'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
</div>
)
}
export default ButtonGroupSizes
Use orientation='vertical'
prop with <ButtonGroup>
component for vertical button groups.
// MUI Imports
import Button from '@mui/material/Button'
import ButtonGroup from '@mui/material/ButtonGroup'
const ButtonGroupVertical = () => {
return (
<div className='flex gap-4'>
<ButtonGroup variant='outlined' orientation='vertical'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='contained' orientation='vertical'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='text' orientation='vertical'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
</div>
)
}
export default ButtonGroupVertical
ButtonGroup
can also be used to create a split button. The dropdown can change the button action (as in this example), or be used to immediately trigger a related action.
- TSX
- JS
// React Imports
import { useRef, useState } from 'react'
import type { SyntheticEvent } from 'react'
// MUI Imports
import Grow from '@mui/material/Grow'
import Paper from '@mui/material/Paper'
import Button from '@mui/material/Button'
import Popper from '@mui/material/Popper'
import MenuItem from '@mui/material/MenuItem'
import MenuList from '@mui/material/MenuList'
import ButtonGroup from '@mui/material/ButtonGroup'
import ClickAwayListener from '@mui/material/ClickAwayListener'
const options = ['Create a merge commit', 'Squash and merge', 'Rebase and merge']
const ButtonGroupSplit = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const [selectedIndex, setSelectedIndex] = useState<number>(1)
// Refs
const anchorRef = useRef<HTMLDivElement | null>(null)
const handleClick = () => {
// eslint-disable-next-line no-console
console.info(`You clicked '${options[selectedIndex]}'`)
}
const handleMenuItemClick = (event: SyntheticEvent, index: number) => {
setSelectedIndex(index)
setOpen(false)
}
const handleToggle = () => {
setOpen(prevOpen => !prevOpen)
}
const handleClose = () => {
setOpen(false)
}
return (
<>
<ButtonGroup variant='contained' ref={anchorRef} aria-label='split button'>
<Button onClick={handleClick}>{options[selectedIndex]}</Button>
<Button
className='pli-0'
aria-haspopup='menu'
onClick={handleToggle}
aria-label='select merge strategy'
aria-expanded={open ? 'true' : undefined}
aria-controls={open ? 'split-button-menu' : undefined}
>
<i className='ri-arrow-down-s-fill' />
</Button>
</ButtonGroup>
<Popper open={open} anchorEl={anchorRef.current} role={undefined} transition placement='bottom-end'>
{({ TransitionProps, placement }) => (
<Grow
{...TransitionProps}
style={{ transformOrigin: placement === 'bottom-end' ? 'right top' : 'right bottom' }}
>
<Paper className='shadow-lg mbs-0.5'>
<ClickAwayListener onClickAway={handleClose}>
<MenuList id='split-button-menu'>
{options.map((option, index) => (
<MenuItem
key={option}
disabled={index === 2}
selected={index === selectedIndex}
onClick={event => handleMenuItemClick(event, index)}
>
{option}
</MenuItem>
))}
</MenuList>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
</>
)
}
export default ButtonGroupSplit
// React Imports
import { useRef, useState } from 'react'
// MUI Imports
import Grow from '@mui/material/Grow'
import Paper from '@mui/material/Paper'
import Button from '@mui/material/Button'
import Popper from '@mui/material/Popper'
import MenuItem from '@mui/material/MenuItem'
import MenuList from '@mui/material/MenuList'
import ButtonGroup from '@mui/material/ButtonGroup'
import ClickAwayListener from '@mui/material/ClickAwayListener'
const options = ['Create a merge commit', 'Squash and merge', 'Rebase and merge']
const ButtonGroupSplit = () => {
// States
const [open, setOpen] = useState(false)
const [selectedIndex, setSelectedIndex] = useState(1)
// Refs
const anchorRef = useRef(null)
const handleClick = () => {
// eslint-disable-next-line no-console
console.info(`You clicked '${options[selectedIndex]}'`)
}
const handleMenuItemClick = (event, index) => {
setSelectedIndex(index)
setOpen(false)
}
const handleToggle = () => {
setOpen(prevOpen => !prevOpen)
}
const handleClose = () => {
setOpen(false)
}
return (
<>
<ButtonGroup variant='contained' ref={anchorRef} aria-label='split button'>
<Button onClick={handleClick}>{options[selectedIndex]}</Button>
<Button
className='pli-0'
aria-haspopup='menu'
onClick={handleToggle}
aria-label='select merge strategy'
aria-expanded={open ? 'true' : undefined}
aria-controls={open ? 'split-button-menu' : undefined}
>
<i className='ri-arrow-down-s-fill' />
</Button>
</ButtonGroup>
<Popper open={open} anchorEl={anchorRef.current} role={undefined} transition placement='bottom-end'>
{({ TransitionProps, placement }) => (
<Grow
{...TransitionProps}
style={{ transformOrigin: placement === 'bottom-end' ? 'right top' : 'right bottom' }}
>
<Paper className='shadow-lg mbs-0.5'>
<ClickAwayListener onClickAway={handleClose}>
<MenuList id='split-button-menu'>
{options.map((option, index) => (
<MenuItem
key={option}
disabled={index === 2}
selected={index === selectedIndex}
onClick={event => handleMenuItemClick(event, index)}
>
{option}
</MenuItem>
))}
</MenuList>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
</>
)
}
export default ButtonGroupSplit
Use color
prop for different colored button-groups.
// MUI Imports
import Button from '@mui/material/Button'
import ButtonGroup from '@mui/material/ButtonGroup'
const ButtonGroupColor = () => {
return (
<div className='flex gap-4 flex-wrap'>
<ButtonGroup variant='outlined' color='secondary'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='outlined' color='success'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='outlined' color='error'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='outlined' color='warning'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
<ButtonGroup variant='outlined' color='info'>
<Button>One</Button>
<Button>Two</Button>
<Button>Three</Button>
</ButtonGroup>
</div>
)
}
export default ButtonGroupColor
Toggle Button
Please refer to MUI's official docs for more details on component's usage guide and API documentation.
Manage value
prop with <ToggleButtonGroup>
component with the help of a state and use exclusive
prop with <ToggleButtonGroup>
component for single toggle.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleBasic = () => {
// States
const [alignment, setAlignment] = useState<string | null>('left')
const handleAlignment = (event: MouseEvent<HTMLElement>, newAlignment: string | null) => {
setAlignment(newAlignment)
}
return (
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleBasic
// React Imports
import { useState } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleBasic = () => {
// States
const [alignment, setAlignment] = useState('left')
const handleAlignment = (event, newAlignment) => {
setAlignment(newAlignment)
}
return (
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleBasic
Manage value
prop with the help of a state with array.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleMultiple = () => {
// States
const [formats, setFormats] = useState<string[]>(() => ['bold', 'italic'])
const handleFormat = (event: MouseEvent<HTMLElement>, newFormats: string[]) => {
setFormats(newFormats)
}
return (
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='text alignment'>
<ToggleButton value='bold' aria-label='bold'>
<i className='ri-bold' />
</ToggleButton>
<ToggleButton value='italic' aria-label='italic'>
<i className='ri-italic' />
</ToggleButton>
<ToggleButton value='underlined' aria-label='underlined'>
<i className='ri-underline' />
</ToggleButton>
<ToggleButton value='color' aria-label='color' disabled>
<i className='ri-paint-fill' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleMultiple
// React Imports
import { useState } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleMultiple = () => {
// States
const [formats, setFormats] = useState(() => ['bold', 'italic'])
const handleFormat = (event, newFormats) => {
setFormats(newFormats)
}
return (
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='text alignment'>
<ToggleButton value='bold' aria-label='bold'>
<i className='ri-bold' />
</ToggleButton>
<ToggleButton value='italic' aria-label='italic'>
<i className='ri-italic' />
</ToggleButton>
<ToggleButton value='underlined' aria-label='underlined'>
<i className='ri-underline' />
</ToggleButton>
<ToggleButton value='color' aria-label='color' disabled>
<i className='ri-paint-fill' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleMultiple
Use size={'size' | 'large'}
prop for different sizes.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleSizes = () => {
// States
const [alignment, setAlignment] = useState<string | null>('left')
const handleAlignment = (event: MouseEvent<HTMLElement>, newAlignment: string | null) => {
setAlignment(newAlignment)
}
return (
<div className='flex flex-col gap-4 items-start'>
<ToggleButtonGroup
exclusive
size='small'
value={alignment}
onChange={handleAlignment}
aria-label='text alignment'
>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup
exclusive
size='large'
value={alignment}
onChange={handleAlignment}
aria-label='text alignment'
>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleSizes
// React Imports
import { useState } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleSizes = () => {
// States
const [alignment, setAlignment] = useState('left')
const handleAlignment = (event, newAlignment) => {
setAlignment(newAlignment)
}
return (
<div className='flex flex-col gap-4 items-start'>
<ToggleButtonGroup
exclusive
size='small'
value={alignment}
onChange={handleAlignment}
aria-label='text alignment'
>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup
exclusive
size='large'
value={alignment}
onChange={handleAlignment}
aria-label='text alignment'
>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleSizes
Use orientation='vertical'
prop for vertical toggle button.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleVertical = () => {
// States
const [view, setView] = useState<string | null>('left')
const handleView = (event: MouseEvent<HTMLElement>, newView: string | null) => {
setView(newView)
}
return (
<ToggleButtonGroup exclusive value={view} orientation='vertical' onChange={handleView} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-layout-column-fill' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-layout-5-fill' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-layout-masonry-fill' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleVertical
// React Imports
import { useState } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleVertical = () => {
// States
const [view, setView] = useState('left')
const handleView = (event, newView) => {
setView(newView)
}
return (
<ToggleButtonGroup exclusive value={view} orientation='vertical' onChange={handleView} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-layout-column-fill' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-layout-5-fill' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-layout-masonry-fill' />
</ToggleButton>
</ToggleButtonGroup>
)
}
export default ButtonToggleVertical
Use if
statement in handle function in onChange
prop.
Exclusive Selection
Multiple Selection
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import Grid from '@mui/material/Grid2'
import Typography from '@mui/material/Typography'
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleEnforceValue = () => {
// States
const [formats, setFormats] = useState<string[]>(() => ['phone'])
const [alignment, setAlignment] = useState<string | null>('left')
const handleAlignment = (event: MouseEvent<HTMLElement>, newAlignment: string | null) => {
if (newAlignment !== null) {
setAlignment(newAlignment)
}
}
const handleFormat = (event: MouseEvent<HTMLElement>, newFormats: string[]) => {
if (newFormats.length) {
setFormats(newFormats)
}
}
return (
<Grid container spacing={6}>
<Grid size={{ xs: 12, sm: 6 }}>
<Typography className='font-medium mbe-2' color='text.primary'>
Exclusive Selection
</Typography>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
<Grid size={{ xs: 12, sm: 6 }}>
<Typography className='font-medium mbe-2' color='text.primary'>
Multiple Selection
</Typography>
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='device'>
<ToggleButton value='laptop' aria-label='laptop'>
<i className='ri-macbook-line' />
</ToggleButton>
<ToggleButton value='desktop' aria-label='desktop'>
<i className='ri-computer-line' />
</ToggleButton>
<ToggleButton value='phone' aria-label='phone'>
<i className='ri-smartphone-line' />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
</Grid>
)
}
export default ButtonToggleEnforceValue
// React Imports
import { useState } from 'react'
// MUI Imports
import Grid from '@mui/material/Grid2'
import Typography from '@mui/material/Typography'
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleEnforceValue = () => {
// States
const [formats, setFormats] = useState(() => ['phone'])
const [alignment, setAlignment] = useState('left')
const handleAlignment = (event, newAlignment) => {
if (newAlignment !== null) {
setAlignment(newAlignment)
}
}
const handleFormat = (event, newFormats) => {
if (newFormats.length) {
setFormats(newFormats)
}
}
return (
<Grid container spacing={6}>
<Grid size={{ xs: 12, sm: 6 }}>
<Typography className='font-medium mbe-2' color='text.primary'>
Exclusive Selection
</Typography>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
<Grid size={{ xs: 12, sm: 6 }}>
<Typography className='font-medium mbe-2' color='text.primary'>
Multiple Selection
</Typography>
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='device'>
<ToggleButton value='laptop' aria-label='laptop'>
<i className='ri-macbook-line' />
</ToggleButton>
<ToggleButton value='desktop' aria-label='desktop'>
<i className='ri-computer-line' />
</ToggleButton>
<ToggleButton value='phone' aria-label='phone'>
<i className='ri-smartphone-line' />
</ToggleButton>
</ToggleButtonGroup>
</Grid>
</Grid>
)
}
export default ButtonToggleEnforceValue
Use styled
hook to customize your toggle button.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import { styled } from '@mui/material/styles'
import MuiToggleButtonGroup from '@mui/material/ToggleButtonGroup'
import MuiToggleButton from '@mui/material/ToggleButton'
import type { ToggleButtonGroupProps } from '@mui/material/ToggleButtonGroup'
import type { ToggleButtonProps } from '@mui/material/ToggleButton'
// Styled ToggleButtonGroup component
const ToggleButtonGroup = styled(MuiToggleButtonGroup)<ToggleButtonGroupProps>(({ theme }) => ({
padding: theme.spacing(1.75),
border: '1px solid var(--mui-palette-divider)'
}))
// Styled ToggleButton component
const ToggleButton = styled(MuiToggleButton)<ToggleButtonProps>(({ theme }) => ({
margin: '0 !important',
border: 'none !important',
padding: theme.spacing(2.5),
'&:not(:first-of-type)': {
borderRadius: `${theme.shape.borderRadius}px !important`
},
'&:first-of-type': {
borderRadius: `${theme.shape.borderRadius}px !important`
}
}))
const ButtonToggleCustomized = () => {
// States
const [alignment, setAlignment] = useState<string | null>('left')
const [formats, setFormats] = useState<string[]>(() => ['italic'])
const handleAlignment = (event: MouseEvent<HTMLElement>, newAlignment: string | null) => {
setAlignment(newAlignment)
}
const handleFormat = (event: MouseEvent<HTMLElement>, newFormats: string[]) => {
setFormats(newFormats)
}
return (
<div className='flex flex-wrap gap-4'>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='text alignment'>
<ToggleButton value='bold' aria-label='bold'>
<i className='ri-bold' />
</ToggleButton>
<ToggleButton value='italic' aria-label='italic'>
<i className='ri-italic' />
</ToggleButton>
<ToggleButton value='underlined' aria-label='underlined'>
<i className='ri-underline' />
</ToggleButton>
<ToggleButton value='color' aria-label='color' disabled>
<i className='ri-paint-fill' />
</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleCustomized
// React Imports
import { useState } from 'react'
// MUI Imports
import { styled } from '@mui/material/styles'
import MuiToggleButtonGroup from '@mui/material/ToggleButtonGroup'
import MuiToggleButton from '@mui/material/ToggleButton'
// Styled ToggleButtonGroup component
const ToggleButtonGroup = styled(MuiToggleButtonGroup)(({ theme }) => ({
padding: theme.spacing(1.75),
border: '1px solid var(--mui-palette-divider)'
}))
// Styled ToggleButton component
const ToggleButton = styled(MuiToggleButton)(({ theme }) => ({
margin: '0 !important',
border: 'none !important',
padding: theme.spacing(2.5),
'&:not(:first-of-type)': {
borderRadius: `${theme.shape.borderRadius}px !important`
},
'&:first-of-type': {
borderRadius: `${theme.shape.borderRadius}px !important`
}
}))
const ButtonToggleCustomized = () => {
// States
const [alignment, setAlignment] = useState('left')
const [formats, setFormats] = useState(() => ['italic'])
const handleAlignment = (event, newAlignment) => {
setAlignment(newAlignment)
}
const handleFormat = (event, newFormats) => {
setFormats(newFormats)
}
return (
<div className='flex flex-wrap gap-4'>
<ToggleButtonGroup exclusive value={alignment} onChange={handleAlignment} aria-label='text alignment'>
<ToggleButton value='left' aria-label='left aligned'>
<i className='ri-align-left' />
</ToggleButton>
<ToggleButton value='center' aria-label='center aligned'>
<i className='ri-align-center' />
</ToggleButton>
<ToggleButton value='right' aria-label='right aligned'>
<i className='ri-align-right' />
</ToggleButton>
<ToggleButton value='justify' aria-label='justified' disabled>
<i className='ri-align-justify' />
</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup value={formats} onChange={handleFormat} aria-label='text alignment'>
<ToggleButton value='bold' aria-label='bold'>
<i className='ri-bold' />
</ToggleButton>
<ToggleButton value='italic' aria-label='italic'>
<i className='ri-italic' />
</ToggleButton>
<ToggleButton value='underlined' aria-label='underlined'>
<i className='ri-underline' />
</ToggleButton>
<ToggleButton value='color' aria-label='color' disabled>
<i className='ri-paint-fill' />
</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleCustomized
Use color
prop for different colored toggle-buttons.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { MouseEvent } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleColors = () => {
// States
const [alignment, setAlignment] = useState<string | null>('web')
const handleAlignment = (event: MouseEvent<HTMLElement>, newAlignment: string | null) => {
setAlignment(newAlignment)
}
return (
<div className='flex gap-4 flex-wrap'>
<ToggleButtonGroup exclusive color='primary' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='secondary' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='success' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='error' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='warning' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='info' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleColors
// React Imports
import { useState } from 'react'
// MUI Imports
import ToggleButton from '@mui/material/ToggleButton'
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup'
const ButtonToggleColors = () => {
// States
const [alignment, setAlignment] = useState('web')
const handleAlignment = (event, newAlignment) => {
setAlignment(newAlignment)
}
return (
<div className='flex gap-4 flex-wrap'>
<ToggleButtonGroup exclusive color='primary' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='secondary' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='success' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='error' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='warning' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
<ToggleButtonGroup exclusive color='info' value={alignment} onChange={handleAlignment}>
<ToggleButton value='web'>Web</ToggleButton>
<ToggleButton value='android'>Android</ToggleButton>
<ToggleButton value='ios'>iOS</ToggleButton>
</ToggleButtonGroup>
</div>
)
}
export default ButtonToggleColors