Loading...
Loading...
Guide for working with gomponents, a pure Go HTML component library. Use this skill when reading or writing gomponents code, or when building HTML views in Go applications.
npx skill4agent add maragudk/skills gomponentsNodeNodetype Node interface {
Render(w io.Writer) error
}El(name string, children ...Node)Attr(name string, value ...string)htmlDiv()Span()P()A()Class()ID()Href()Src()nilText(string)Textf(format string, args...)Raw(string)Rawf(format string, args...)Group([]Node)Map[T]([]T, func(T) Node)If(condition bool, node Node)Iff(condition bool, func() Node)import (
. "maragu.dev/gomponents"
. "maragu.dev/gomponents/html"
. "maragu.dev/gomponents/components"
)Div(Class("container"),
H1(Text("Hello World")),
P(Text("Welcome to gomponents")),
)maragu.dev/gomponentsmaragu.dev/gomponents/htmlmaragu.dev/gomponents/httpmaragu.dev/gomponents/componentsfunc UserCard(name, email string) Node {
return Div(Class("user-card"),
H2(Text(name)),
P(Text(email)),
)
}func Alert(message string, isError bool) Node {
return Div(
If(isError, Class("error")),
If(!isError, Class("info")),
P(Text(message)),
)
}IfIfffunc UserProfile(user *User) Node {
return Div(
H1(Text(user.Name)),
// Use Iff to avoid nil pointer dereference when user.Avatar is nil
Iff(user.Avatar != nil, func() Node {
return Img(Src(user.Avatar.URL))
}),
)
}Groupfunc FormFields(required bool) Node {
return Group{
Label(For("email"), Text("Email")),
Input(Type("email"), ID("email")),
If(required, Span(Class("required"), Text("*"))),
}
}func TodoList(todos []Todo) Node {
return Ul(Class("todo-list"),
Map(todos, func(t Todo) Node {
return Li(Text(t.Title))
}),
)
}func Page(title string, body Node) Node {
return HTML5(HTML5Props{
Title: title,
Language: "en",
Head: []Node{
Link(Rel("stylesheet"), Href("/styles.css")),
},
Body: []Node{body},
})
}import ghttp "maragu.dev/gomponents/http"
func HomeHandler(w http.ResponseWriter, r *http.Request) (Node, error) {
return Page("My App",
Div(Class("container"),
H1(Text("Hello, World!")),
),
), nil
}
// In main:
http.HandleFunc("/", ghttp.Adapt(HomeHandler))httpHandler(Node, error)Adapt(Handler)http.HandlerFuncStatusCode() int