# HTML DSL Reference for the `h` package — Via's HTML builder. ## Overview The `h` package wraps [gomponents](https://github.com/maragudk/gomponents) with a single interface: ```go type H interface { Render(w io.Writer) error } ``` Every element, attribute, and text node implements `H`. Build HTML by nesting function calls: ```go import "github.com/ryanhamamura/via/h" h.Div(h.Class("card"), h.H2(h.Text("Title")), h.P(h.Textf("Count: %d", count)), h.Button(h.Text("Click"), action.OnClick()), ) ``` For cleaner templates, use a dot import: ```go import . "github.com/ryanhamamura/via/h" Div(Class("card"), H2(Text("Title")), P(Textf("Count: %d", count)), Button(Text("Click"), action.OnClick()), ) ``` ## Text Nodes | Function | Description | |----------|-------------| | `Text(s)` | Escaped text node | | `Textf(fmt, args...)` | Escaped text with `fmt.Sprintf` | | `Raw(s)` | Unescaped raw HTML — use for trusted content like SVG | | `Rawf(fmt, args...)` | Unescaped raw HTML with `fmt.Sprintf` | ## Elements Every element function takes `...H` children (elements, attributes, and text nodes mixed together) except `Style(v string)` and `Title(v string)` which take a single string. ### Document structure `HTML`, `Head`, `Body`, `Main`, `Header`, `Footer`, `Section`, `Article`, `Aside`, `Nav`, `Div`, `Span` ### Headings `H1`, `H2`, `H3`, `H4`, `H5`, `H6` ### Text `P`, `A`, `Strong`, `Em`, `B`, `I`, `U`, `S`, `Small`, `Mark`, `Del`, `Ins`, `Sub`, `Sup`, `Abbr`, `Cite`, `Code`, `Pre`, `Samp`, `Kbd`, `Var`, `Q`, `BlockQuote`, `Dfn`, `Wbr`, `Br`, `Hr` ### Forms `Form`, `Input`, `Textarea`, `Select`, `Option`, `OptGroup`, `Button`, `Label`, `FieldSet`, `Legend`, `DataList`, `Meter`, `Progress` ### Tables `Table`, `THead`, `TBody`, `TFoot`, `Tr`, `Th`, `Td`, `Caption`, `Col`, `ColGroup` ### Lists `Ul`, `Ol`, `Li`, `Dl`, `Dt`, `Dd` ### Media `Img`, `Audio`, `Video`, `Source`, `Picture`, `Canvas`, `IFrame`, `Embed`, `Object` ### Other `Details`, `Summary`, `Dialog`, `Template`, `NoScript`, `Figure`, `FigCaption`, `Address`, `Time`, `Base`, `Link`, `Meta`, `Script`, `Area` ### Special signatures | Function | Signature | Notes | |----------|-----------|-------| | `Style(v)` | `func Style(v string) H` | Inline `style` attribute, not a container element | | `StyleEl(children...)` | `func StyleEl(children ...H) H` | The `