summaryrefslogtreecommitdiffhomepage
path: root/cloud/web/src/ui/button.tsx
blob: 889102dda51e8e85c30f4471b9c5026496ba5b93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { Button as Kobalte } from "@kobalte/core/button"
import { JSX, Show, splitProps } from "solid-js"

export interface ButtonProps {
  color?: "primary" | "secondary" | "ghost"
  size?: "md" | "sm"
  icon?: JSX.Element
}
export function Button(props: JSX.IntrinsicElements["button"] & ButtonProps) {
  const [split, rest] = splitProps(props, ["color", "size", "icon"])
  return (
    <Kobalte
      {...rest}
      data-component="button"
      data-size={split.size || "md"}
      data-color={split.color || "primary"}
    >
      <Show when={props.icon}>
        <div data-slot="icon">{props.icon}</div>
      </Show>
      {props.children}
    </Kobalte>
  )
}