button.tsx 669 B

123456789101112131415161718192021222324
  1. import { Button as Kobalte } from "@kobalte/core/button"
  2. import { JSX, Show, splitProps } from "solid-js"
  3. export interface ButtonProps {
  4. color?: "primary" | "secondary" | "ghost"
  5. size?: "md" | "sm"
  6. icon?: JSX.Element
  7. }
  8. export function Button(props: JSX.IntrinsicElements["button"] & ButtonProps) {
  9. const [split, rest] = splitProps(props, ["color", "size", "icon"])
  10. return (
  11. <Kobalte
  12. {...rest}
  13. data-component="button"
  14. data-size={split.size || "md"}
  15. data-color={split.color || "primary"}
  16. >
  17. <Show when={props.icon}>
  18. <div data-slot="icon">{props.icon}</div>
  19. </Show>
  20. {props.children}
  21. </Kobalte>
  22. )
  23. }