package components templ Layout(props LayoutProps){ {props.Title} @Head(props.Head) @Header(props.Header)
{ children... }
} type LayoutProps struct { Title string Description string Head HeadProps Header HeaderProps Footer FooterProps } templ Head(props HeadProps){ for _, link := range props.Links { } for _, script := range props.Scripts { } } type HeadProps struct { Links []Link Scripts []Script } type Link struct { Href string Rel string } type Script struct { Src string Defer bool } templ Header(props HeaderProps){ @Topbar(){ @TopbarBrand(props.BrandName) @TopbarCreateButton(props.CreateLabel, props.CreateHref) @TopbarSpacer() @TopbarSearch(props.SearchPlaceholder) @TopbarSpacer() @TopbarActions(){ @TopbarIconButton("Notifications"){ @IconBell() } @TopbarIconButton("User menu"){ @IconUser() } } } } templ Topbar(){
{ children... }
} templ TopbarBrand(brandName string){ { brandName } } templ TopbarCreateButton(label string, href string){ if href != "" { { label } } else { } } templ TopbarSpacer(){
} templ TopbarSearch(placeholder string){ } templ TopbarActions(){
{ children... }
} templ TopbarIconButton(ariaLabel string){ } templ IconBell(){ } templ IconUser(){ } type HeaderProps struct { BrandName string CreateLabel string CreateHref string SearchPlaceholder string Routes []NavRoute } type NavRoute struct { Name string Path string } templ Footer(props FooterProps){ } type FooterProps struct { }