# Selmer template conventions > **Validated** in the Transaction Edit migration: `location-select*` now renders from > `resources/templates/components/location-select.html` via the interop bridge, embedded > back into the Hiccup account row. Verified: swap spec 6/6, transaction-edit 8/8 (the > Shared Location test selects through the Selmer ``. Rules mirror hiccup2 — nil/false dropped, `true` → bare boolean attr, else `name="escaped"` (via `hu/escape-html`, so JSON `x-data` and `x-init` quotes become `"`/`'` and the browser decodes them back). Keyword keys keep their full name incl. namespaced/colon forms (`:x-hx-val:account-id` → `x-hx-val:account-id`). This keeps templates free of per-attribute `{% if %}` ladders while still emitting 100% Selmer markup — `attrs->str` serialises data, it does not build Hiccup. ### Reuse the real class helpers Wrappers reuse `inputs/default-input-classes`, `inputs/use-size`, `hh/add-class`, `btn/bg-colors` so output matches the Hiccup component **modulo Tailwind class order**. Verify by class-**set** equality + e2e, never byte-parity (see the cookbook entries). ### Trivial wrapper divs A bare `
` around a fragment is composed with a `wrap-div` string helper (or put the class in the parent template), not a Hiccup vector — string composition of a structural wrapper is not Hiccup and avoids a micro-template per div. Keep `|safe` to values the server fully controls (rendered fragments, JSON for `x-data`), never raw user input. ## Scope (Open decision 2) Hybrid, and the boundary is real: **the modal's attribute-heavy components delegate to the shared `com/typeahead` / `com/select` / `com/button-group-button`.** Converting those is a *cross-cutting* change (every modal uses them), so it belongs to the Phase 11 Selmer sweep, not a single modal. `location-select*` is the first, self-contained proof; the shared components follow when the sweep promotes them to Selmer partials. ## Attribute-consistency scorecard (heuristic 8) ```bash grep -cE '"x-[a-z]|"hx-[a-z]|"@' # → 0 mixed encodings in Selmer ``` A migrated Selmer template has no mixed `:x-`/`"x-"` encodings because everything is plain HTML. (The Hiccup `"@click"`/`":class"` offenders that remain in `edit.clj` live in the shared-component call sites — they clear when those components move to Selmer.)