import React, { useMemo } from 'react' import useTheme from '../use-theme' import { NormalTypes } from '../utils/prop-types' import { GeistUIThemes } from '../themes/presets' import useScaleable, { withScaleable } from '../use-scaleable' export type DotTypes = NormalTypes interface Props { type?: DotTypes className?: string } const defaultProps = { type: 'default' as DotTypes, className: '', } type NativeAttrs = Omit, keyof Props> export type DotProps = Props & NativeAttrs const getColor = (type: DotTypes, theme: GeistUIThemes): string => { const colors: { [key in DotTypes]?: string } = { default: theme.palette.accents_2, success: theme.palette.success, warning: theme.palette.warning, error: theme.palette.error, } return colors[type] || (colors.default as string) } const DotComponent: React.FC> = ({ type, children, className, ...props }: React.PropsWithChildren & typeof defaultProps) => { const theme = useTheme() const { SCALES } = useScaleable() const color = useMemo(() => getColor(type, theme), [type, theme]) return ( {children} ) } DotComponent.defaultProps = defaultProps DotComponent.displayName = 'GeistDot' const Dot = withScaleable(DotComponent) export default Dot