99 lines
2.4 KiB
Go
99 lines
2.4 KiB
Go
package catalog
|
|
|
|
import "slices"
|
|
|
|
type Example struct {
|
|
Title string
|
|
Description string
|
|
Preview anyComponent
|
|
Snippet string
|
|
}
|
|
|
|
type Page struct {
|
|
Slug string
|
|
Title string
|
|
Description string
|
|
Examples []Example
|
|
}
|
|
|
|
func Pages() []Page {
|
|
return []Page{
|
|
{
|
|
Slug: "tokens",
|
|
Title: "Tokens",
|
|
Description: "Semantic colors and status roles used by the Go design system.",
|
|
Examples: tokenExamples(),
|
|
},
|
|
{
|
|
Slug: "buttons",
|
|
Title: "Buttons",
|
|
Description: "Primary, secondary, ghost, and destructive actions built from shared templ primitives.",
|
|
Examples: buttonExamples(),
|
|
},
|
|
{
|
|
Slug: "badges",
|
|
Title: "Badges",
|
|
Description: "Semantic status labels for todo, in-progress, success, and destructive states.",
|
|
Examples: badgeExamples(),
|
|
},
|
|
{
|
|
Slug: "icon-buttons",
|
|
Title: "Icon Buttons",
|
|
Description: "Compact icon-only actions for destructive and neutral controls.",
|
|
Examples: iconButtonExamples(),
|
|
},
|
|
{
|
|
Slug: "inputs",
|
|
Title: "Inputs",
|
|
Description: "Shared single-line and multiline text controls.",
|
|
Examples: inputExamples(),
|
|
},
|
|
{
|
|
Slug: "form-fields",
|
|
Title: "Form Fields",
|
|
Description: "Labeled controls with optional hint and error messaging.",
|
|
Examples: formFieldExamples(),
|
|
},
|
|
{
|
|
Slug: "modals",
|
|
Title: "Modals",
|
|
Description: "Shared modal shell for focused create, edit, and confirm flows.",
|
|
Examples: modalExamples(),
|
|
},
|
|
{
|
|
Slug: "tables",
|
|
Title: "Tables",
|
|
Description: "Shared table shell for server-rendered list views.",
|
|
Examples: tableExamples(),
|
|
},
|
|
{
|
|
Slug: "empty-states",
|
|
Title: "Empty States",
|
|
Description: "Centered fallback messaging with optional icon and action.",
|
|
Examples: emptyStateExamples(),
|
|
},
|
|
{
|
|
Slug: "cards",
|
|
Title: "Cards",
|
|
Description: "Reusable bordered surfaces with optional header, body, and footer regions.",
|
|
Examples: cardExamples(),
|
|
},
|
|
}
|
|
}
|
|
|
|
func FindPage(slug string) (Page, bool) {
|
|
index := slices.IndexFunc(Pages(), func(page Page) bool {
|
|
return page.Slug == slug
|
|
})
|
|
if index == -1 {
|
|
return Page{}, false
|
|
}
|
|
return Pages()[index], true
|
|
}
|
|
|
|
func catalogNavLinkClass(active bool) string {
|
|
if active {
|
|
return "catalog-nav-link is-active"
|
|
}
|
|
return "catalog-nav-link"
|
|
}
|