import React, { useMemo } from 'react' import useTheme from '../use-theme' import { DividerAlign, SnippetTypes } from '../utils/prop-types' import { HuiThemesPalette } from '../themes/presets' import useScale, { withScale } from '../use-scale' import useClasses from '../use-classes' export type DividerTypes = SnippetTypes interface Props { type?: DividerTypes align?: DividerAlign className?: string } const defaultProps = { align: 'center' as DividerAlign, type: 'default' as DividerTypes, className: '' } type NativeAttrs = Omit, keyof Props> export type DividerProps = Props & NativeAttrs const getColor = (type: DividerTypes, palette: HuiThemesPalette) => { const colors: { [key in DividerTypes]: string } = { default: palette.border, lite: palette.accents_1, success: palette.successLight, warning: palette.warningLight, error: palette.errorLight, secondary: palette.secondary, dark: palette.foreground } return colors[type] } const DividerComponent: React.FC> = ({ type, align, children, className, ...props }) => { const theme = useTheme() const { SCALES } = useScale() const classes = useClasses('divider', className) const color = useMemo(() => getColor(type || 'default', theme.palette), [type, theme.palette]) const alignClassName = useMemo(() => { if (!align || align === 'center') return '' if (align === 'left' || align === 'start') return 'start' return 'end' }, [align]) const alignClasses = useClasses('text', alignClassName) const textColor = type === 'default' ? theme.palette.foreground : color return (
{children && {children}}
) } DividerComponent.defaultProps = defaultProps DividerComponent.displayName = 'HuiDivider' const Divider = withScale(DividerComponent) export default Divider