forked from trussworks/react-uswds
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathButton.tsx
57 lines (53 loc) · 1.15 KB
/
Button.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import React, { type JSX } from 'react'
import classnames from 'classnames'
export type ButtonProps = {
type: 'button' | 'submit' | 'reset'
children: React.ReactNode
secondary?: boolean
base?: boolean
accentStyle?: 'cool' | 'warm'
outline?: boolean
inverse?: boolean
size?: 'big'
unstyled?: boolean
}
export const Button = ({
type,
children,
secondary,
base,
accentStyle,
outline,
inverse,
size,
unstyled,
onClick,
className,
...defaultProps
}: ButtonProps & JSX.IntrinsicElements['button']): JSX.Element => {
const classes = classnames(
'usa-button',
{
'usa-button--secondary': secondary,
'usa-button--base': base,
'usa-button--accent-cool': accentStyle === 'cool',
'usa-button--accent-warm': accentStyle === 'warm',
'usa-button--outline': outline,
'usa-button--inverse': inverse,
'usa-button--big': size === 'big',
'usa-button--unstyled': unstyled,
},
className
)
return (
<button
type={type}
className={classes}
onClick={onClick}
data-testid="button"
{...defaultProps}>
{children}
</button>
)
}
export default Button