121 lines
2 KiB
Go
121 lines
2 KiB
Go
package components
|
|
|
|
import (
|
|
. "maragu.dev/gomponents"
|
|
. "maragu.dev/gomponents/html"
|
|
)
|
|
|
|
type (
|
|
CardParams struct {
|
|
Title string
|
|
Body Group
|
|
Footer Group
|
|
Color Color
|
|
Size Size
|
|
}
|
|
|
|
Stat struct {
|
|
Title string
|
|
Value string
|
|
Description string
|
|
Icon Node
|
|
}
|
|
)
|
|
|
|
func Badge(color Color, text string) Node {
|
|
var class string
|
|
|
|
switch color {
|
|
case ColorSuccess:
|
|
class = "badge-success"
|
|
case ColorWarning:
|
|
class = "badge-warning"
|
|
}
|
|
|
|
return Div(
|
|
Class("badge "+class),
|
|
Text(text),
|
|
)
|
|
}
|
|
|
|
func Divider(text string) Node {
|
|
return Div(
|
|
Class("divider"),
|
|
Text(text),
|
|
)
|
|
}
|
|
|
|
func Card(params CardParams) Node {
|
|
var colorClass, sizeClass string
|
|
|
|
switch params.Color {
|
|
case ColorSuccess:
|
|
colorClass = "bg-success text-success-content"
|
|
case ColorPrimary:
|
|
colorClass = "bg-primary text-primary-content"
|
|
case ColorAccent:
|
|
colorClass = "bg-accent text-accent-content"
|
|
case ColorNeutral:
|
|
colorClass = "bg-neutral text-neutral-content"
|
|
case ColorWarning:
|
|
colorClass = "bg-warning text-warning-content"
|
|
case ColorInfo:
|
|
colorClass = "bg-info text-info-content"
|
|
}
|
|
|
|
switch params.Size {
|
|
case SizeSmall:
|
|
sizeClass = "card-sm"
|
|
case SizeMedium:
|
|
sizeClass = "card-md"
|
|
case SizeLarge:
|
|
sizeClass = "card-lg"
|
|
}
|
|
|
|
return Div(
|
|
Class("cards mb-2 "+colorClass+" "+sizeClass),
|
|
Div(
|
|
Class("card-body"),
|
|
If(len(params.Title) > 0, Span(
|
|
Class("card-title"),
|
|
Text(params.Title),
|
|
)),
|
|
params.Body,
|
|
If(params.Footer != nil, Div(
|
|
Class("card-actions justify-end"),
|
|
params.Footer,
|
|
)),
|
|
),
|
|
)
|
|
}
|
|
|
|
func Stats(stats ...Stat) Node {
|
|
g := make(Group, 0, len(stats))
|
|
for _, stat := range stats {
|
|
g = append(g, Div(
|
|
Class("stat"),
|
|
Iff(stat.Icon != nil, func() Node {
|
|
return Div(
|
|
Class("stat-figure text-secondary"),
|
|
stat.Icon,
|
|
)
|
|
}),
|
|
Div(
|
|
Class("stat-title"),
|
|
Text(stat.Title),
|
|
),
|
|
Div(
|
|
Class("stat-value"),
|
|
Text(stat.Value),
|
|
),
|
|
Div(
|
|
Class("stat-desc"),
|
|
Text(stat.Description),
|
|
),
|
|
))
|
|
}
|
|
return Div(
|
|
Class("stats shadow"),
|
|
g,
|
|
)
|
|
}
|