metacubexd/src/components/Button.tsx

37 lines
843 B
TypeScript
Raw Normal View History

import { JSX, ParentComponent, Show, splitProps } from 'solid-js'
import { twMerge } from 'tailwind-merge'
export const Button: ParentComponent<
2023-09-06 22:20:45 +08:00
JSX.ButtonHTMLAttributes<HTMLButtonElement> & {
loading?: boolean
disabled?: boolean
}
> = (props) => {
2023-09-06 22:20:45 +08:00
const [local, others] = splitProps(props, ['class', 'loading', 'disabled'])
return (
<button
2023-09-08 10:18:48 +08:00
class={twMerge('btn', local.loading ? 'btn-disabled' : local.class)}
{...others}
2023-09-08 10:18:48 +08:00
onClick={(e) => {
if (props.disabled) {
e.preventDefault()
e.stopPropagation()
return
}
if (typeof props.onClick === 'function') {
props.onClick(e)
}
}}
>
<Show when={local.loading}>
<span class="loading loading-spinner" />
</Show>
{props.children}
</button>
)
}