60 lines
1.9 KiB
Go
60 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...)
|
||
|
}
|