Convert the Art Deco theme from a wasm (Go+templ) plugin to a fully codeless
.bnp: pure declaration the host runs, no plugin.wasm, no block/core dependency.
- blocks/: blocks.yaml (7 fully-qualified art-deco:* keys) + per-block
.schema.json (moved from schemas/) + .ninjatpl transcribed byte-for-byte
(modulo whitespace) from the templ sources.
- templates/art-deco/{default,landing,article,full-width}.ninjatpl — page
layouts.
- templates/overrides/art-deco/{heading,text,button,image}.ninjatpl.
- templates/email/art-deco.ninjatpl.
- manifest.yaml (system/page templates, template_overrides, email_wrappers,
theme_presets, bundled_fonts, master_pages, css input_css_append) +
master_pages.json.
- plugin.mod bumped to 0.2.0; [compatibility] block_core dropped (codeless has
no core dependency).
- Deleted all Go/templ/*_templ.go, go.mod/go.sum; Makefile rewritten to the
codeless build/verify/publish targets.
Render parity verified against the prior templ output (static pongo2 harness,
whitespace-normalised): all 7 blocks, 4 overrides and the email wrapper match.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
13 lines
1.5 KiB
Plaintext
13 lines
1.5 KiB
Plaintext
<section data-block="art-deco:gallery_fan" class="py-16">
|
|
<div class="max-w-6xl mx-auto px-4">
|
|
<div class="relative deco-grain">
|
|
<div class="absolute inset-x-0 -top-2 h-12 pointer-events-none deco-sunburst" aria-hidden="true"></div>
|
|
<div class="grid gap-4 pt-12 {% if columns|integer == 2 %}grid-cols-1 sm:grid-cols-2{% elif columns|integer == 4 %}grid-cols-1 sm:grid-cols-2 lg:grid-cols-4{% else %}grid-cols-1 sm:grid-cols-2 lg:grid-cols-3{% endif %}">
|
|
{% if not images %}<div class="col-span-full text-center text-sm py-12" style="color: hsl(var(--muted-foreground));">Add images to populate the fan gallery.</div>{% endif %}
|
|
{% for img in images %}<figure class="deco-step">{% if img.src %}<img src="{{ img.src }}" alt="{{ img.caption }}" class="block w-full h-auto object-cover" style="background-color: hsl(var(--muted));">{% else %}<img src="data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%3E%3Crect%20width%3D%2232%22%20height%3D%2232%22%20fill%3D%22%23222%22%2F%3E%3C%2Fsvg%3E" alt="" class="block w-full h-auto" style="background-color: hsl(var(--muted));">{% endif %}{% if img.caption %}<figcaption class="mt-2 text-center italic text-sm" style="color: hsl(var(--muted-foreground));">{{ img.caption }}</figcaption>{% endif %}</figure>{% endfor %}
|
|
</div>
|
|
<div class="absolute inset-x-0 -bottom-2 h-12 pointer-events-none deco-sunburst rotate-180" aria-hidden="true"></div>
|
|
</div>
|
|
</div>
|
|
</section>
|