82 lines
2.5 KiB
TypeScript
82 lines
2.5 KiB
TypeScript
import '../styles/Button.sass'
|
|
import { Show, Switch, Match } from 'solid-js'
|
|
|
|
interface Props {
|
|
label?: string
|
|
to?: string
|
|
onClick?: () => void
|
|
edges?: 'curved' | 'rounded' | 'flat'
|
|
design?: 'bu-primary' | 'bu-link' | 'bu-info' | 'bu-success' | 'bu-warning' | 'bu-danger' | 'bu-dark' | 'bu-light' | 'bu-text' | 'bu-ghost' | 'bo-primary' | 'bo-secondary' | 'bo-success' | 'bo-danger' | 'bo-warning' | 'bo-info' | 'bo-light' | 'bo-dark' | 'bo-link'
|
|
submit?: boolean
|
|
}
|
|
|
|
const getBorderRadius = (edge: Props['edges']) => {
|
|
switch (edge) {
|
|
case 'curved':
|
|
return 'border-radius: 6px'
|
|
case 'rounded':
|
|
return 'border-radius: 32px'
|
|
case 'flat':
|
|
return 'border-radius: 0'
|
|
default:
|
|
return 'border-radius: 0'
|
|
}
|
|
}
|
|
|
|
export default (props: Props) => {
|
|
const borderRadius = getBorderRadius(props.edges)
|
|
|
|
return (
|
|
<>
|
|
<Show when={props.to}>
|
|
<Switch>
|
|
<Match when={props.design}>
|
|
<a href={props.to} aria-label={props.label} data-astro-prefetch>
|
|
<button class={props.design} style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</a>
|
|
</Match>
|
|
<Match when={!props.design}>
|
|
<a href={props.to} aria-label={props.label} data-astro-prefetch>
|
|
<button class="button" style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</a>
|
|
</Match>
|
|
</Switch>
|
|
</Show>
|
|
|
|
<Show when={!props.to}>
|
|
<Switch>
|
|
<Match when={props.design}>
|
|
<Show when={props.submit}>
|
|
<button class={props.design} type="submit" style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</Show>
|
|
|
|
<Show when={!props.submit}>
|
|
<button class={props.design} onClick={props.onClick} style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</Show>
|
|
</Match>
|
|
<Match when={!props.design}>
|
|
<Show when={props.submit}>
|
|
<button class="button" type="submit" style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</Show>
|
|
|
|
<Show when={!props.submit}>
|
|
<button class="button" onClick={props.onClick} style={borderRadius}>
|
|
{props.label || 'Click Me!'}
|
|
</button>
|
|
</Show>
|
|
</Match>
|
|
</Switch>
|
|
</Show>
|
|
</>
|
|
)
|
|
}
|