import React, { useMemo } from 'react' import useTheme from '../use-theme' import { ButtonTypes } from '../utils/prop-types' import { ButtonGroupContext, ButtonGroupConfig } from './button-group-context' import { GeistUIThemesPalette } from '../themes/presets' import useScaleable, { withScaleable } from '../use-scaleable' interface Props { disabled?: boolean vertical?: boolean ghost?: boolean type?: ButtonTypes className?: string } const defaultProps = { disabled: false, vertical: false, ghost: false, type: 'default' as ButtonTypes, className: '', } type NativeAttrs = Omit, keyof Props> export type ButtonGroupProps = Props & NativeAttrs const getGroupBorderColors = ( palette: GeistUIThemesPalette, props: ButtonGroupProps & typeof defaultProps, ): string => { const { ghost, type } = props if (!ghost && type !== 'default') return palette.background const colors: { [key in ButtonTypes]?: string } = { default: palette.border, success: palette.success, secondary: palette.secondary, error: palette.error, warning: palette.warning, } const withoutLightType = type.replace('-light', '') as ButtonTypes return colors[withoutLightType] || (colors.default as string) } const ButtonGroupComponent: React.FC> = ( groupProps: ButtonGroupProps & typeof defaultProps, ) => { const theme = useTheme() const { SCALES } = useScaleable() const { disabled, type, ghost, vertical, children, className, ...props } = groupProps const initialValue = useMemo( () => ({ disabled, type, ghost, isButtonGroup: true, }), [disabled, type], ) const border = useMemo(() => { return getGroupBorderColors(theme.palette, groupProps) }, [theme, type, disabled, ghost]) return (
{children}
) } ButtonGroupComponent.defaultProps = defaultProps ButtonGroupComponent.displayName = 'GeistButtonGroup' const ButtonGroup = withScaleable(ButtonGroupComponent) export default ButtonGroup