import React, { FunctionComponent, ReactNode, ElementType, ButtonHTMLAttributes } from 'react'; import getClassName from '../../helpers/getClassName'; import classNames from '../../lib/classNames'; import Tappable from '../Tappable/Tappable'; import { HasAlign, HasRootRef } from '../../types'; import usePlatform from '../../hooks/usePlatform'; export interface VKUIButtonProps extends HasAlign { mode?: 'primary' | 'secondary' | 'tertiary' | 'outline' | 'commerce' | 'destructive' | 'overlay_primary' | 'overlay_secondary' | 'overlay_outline'; size?: 'm' | 'l' | 'xl'; stretched?: boolean; before?: ReactNode; after?: ReactNode; } export interface ButtonProps extends ButtonHTMLAttributes, HasRootRef, VKUIButtonProps { Component?: ElementType; stopPropagation?: boolean; href?: string; target?: string; } const Button: FunctionComponent = (props: ButtonProps) => { const platform = usePlatform(); const { className, size, mode, stretched, align, children, before, after, getRootRef, Component, ...restProps } = props; return
{before &&
{before}
} {children &&
{children}
} {after &&
{after}
}
; }; Button.defaultProps = { mode: 'primary', Component: 'button', size: 'm', stretched: false, stopPropagation: true, }; export default Button;