mirror of
https://github.com/ershisan99/flashcards-example-project.git
synced 2025-12-18 12:33:22 +00:00
add polymorphic button
This commit is contained in:
19
src/components/ui/button/button.tsx
Normal file
19
src/components/ui/button/button.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
import { ComponentPropsWithoutRef, ElementType, ReactNode } from 'react'
|
||||
|
||||
import s from './button.module.scss'
|
||||
|
||||
export type ButtonProps<T extends ElementType = 'button'> = {
|
||||
as?: T
|
||||
children: ReactNode
|
||||
variant?: 'primary' | 'secondary' | 'tertiary' | 'link'
|
||||
fullWidth?: boolean
|
||||
className?: string
|
||||
} & ComponentPropsWithoutRef<T>
|
||||
|
||||
export const Button = <T extends ElementType = 'button'>(props: ButtonProps<T>) => {
|
||||
const { variant = 'primary', fullWidth, className, as: Component = 'button', ...rest } = props
|
||||
|
||||
return (
|
||||
<Component className={`${s[variant]} ${fullWidth ? s.fullWidth : ''} ${className}`} {...rest} />
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user