superkit/ui/button/button.go
2024-06-23 16:12:36 +02:00

59 lines
1.9 KiB
Go

package button
import (
"github.com/anthdm/superkit/ui"
"github.com/a-h/templ"
)
const (
buttonBaseClass = "inline-flex items-center justify-center px-4 py-2 font-medium text-sm tracking-wide transition-colors duration-200 rounded-md focus:ring focus:shadow-outline focus:outline-none"
buttonVariantPrimary = "text-primary-foreground bg-primary focus:ring-primary hover:bg-primary/90"
buttonVariantOutline = "text-primary border border-primary hover:bg-secondary focus:ring-primary"
buttonVariantSecondary = "text-primary bg-secondary hover:bg-secondary/80"
buttonVariantDestructive = "text-primary bg-destructive hover:bg-destructive/80"
)
func New(opts ...func(*templ.Attributes)) templ.Attributes {
return ui.CreateAttrs(buttonBaseClass, buttonVariantPrimary, opts...)
}
func Outline(opts ...func(*templ.Attributes)) templ.Attributes {
return appendVariant("outline", opts...)
}
func Primary(opts ...func(*templ.Attributes)) templ.Attributes {
return appendVariant("primary", opts...)
}
func Secondary(opts ...func(*templ.Attributes)) templ.Attributes {
return appendVariant("secondary", opts...)
}
func Destructive(opts ...func(*templ.Attributes)) templ.Attributes {
return appendVariant("destructive", opts...)
}
func Variant(variant string) func(*templ.Attributes) {
return func(attrs *templ.Attributes) {
att := *attrs
switch variant {
case "primary":
att["class"] = ui.Merge(buttonBaseClass, buttonVariantPrimary)
case "outline":
att["class"] = ui.Merge(buttonBaseClass, buttonVariantOutline)
case "secondary":
att["class"] = ui.Merge(buttonBaseClass, buttonVariantSecondary)
case "destructive":
att["class"] = ui.Merge(buttonBaseClass, buttonVariantDestructive)
}
}
}
func appendVariant(variant string, opts ...func(*templ.Attributes)) templ.Attributes {
opt := []func(*templ.Attributes){
Variant(variant),
}
opt = append(opt, opts...)
return New(opt...)
}