Persona

A component that represents a person and their status.

Theming#

The Persona component is a multipart component. The styling needs to be applied to each part specifically.

To learn more about styling multipart components, visit the Chakra UI Component Style page.

Anatomy#

  • container
  • details
  • avatar
  • label
  • secondaryLabel
  • tertiaryLabel

Default theme#

import {
createMultiStyleConfigHelpers,
defineStyle,
} from '@chakra-ui/styled-system'
import { personaAnatomy } from '@saas-ui/theme/anatomy'
const { definePartsStyle, defineMultiStyleConfig } =
createMultiStyleConfigHelpers(personaAnatomy.keys)
const baseStyleLabel = defineStyle((props) => {
return {
color: 'gray.500',
overflow: 'hidden',
whiteSpace: 'nowrap',
textOverflow: 'ellipsis',
minW: 0,
_dark: {
color: 'whiteAlpha.600',
},
}
})
const baseStyle = definePartsStyle((props) => {
return {
details: {
minW: 0,
},
secondaryLabel: baseStyleLabel(props),
tertiaryLabel: baseStyleLabel(props),
}
})
const sizes = {
'2xs': definePartsStyle({
details: { ms: 2 },
label: {
fontSize: 'xs',
},
secondaryLabel: { display: 'none' },
tertiaryLabel: { display: 'none' },
}),
xs: definePartsStyle({
details: { ms: 2 },
label: {
fontSize: 'md',
},
secondaryLabel: { display: 'none' },
tertiaryLabel: { display: 'none' },
}),
sm: definePartsStyle({
details: { ms: 2 },
label: { fontSize: 'md' },
secondaryLabel: { fontSize: 'sm' },
tertiaryLabel: { display: 'none' },
}),
md: definePartsStyle({
details: { ms: 2 },
label: {
fontSize: 'md',
},
secondaryLabel: {
fontSize: 'sm',
},
tertiaryLabel: { display: 'none' },
}),
lg: definePartsStyle({
details: { ms: 3 },
label: {
fontSize: 'md',
},
secondaryLabel: {
fontSize: 'sm',
},
tertiaryLabel: {
fontSize: 'sm',
},
}),
xl: definePartsStyle({
details: { ms: 3 },
label: {
fontSize: 'xl',
},
secondaryLabel: {
fontSize: 'md',
},
tertiaryLabel: { fontSize: 'md' },
}),
'2xl': definePartsStyle({
details: { ms: 4 },
label: {
fontSize: '2xl',
},
secondaryLabel: {
fontSize: 'lg',
},
tertiaryLabel: { fontSize: 'lg' },
}),
}
export const personaTheme = defineMultiStyleConfig({
defaultProps: {
size: 'md',
},
baseStyle,
sizes,
})

Customize the theme#

import { extendTheme } from '@chakra-ui/react'
const theme = extendTheme({
components: {
SuiPersona: {
baseStyle: {
container: {
bg: 'gray.100',
},
},
},
},
})

Was this helpful?