themes-art-deco/blocks/menu.schema.json
Alex Dunmow 5075aa81c9 feat: convert to codeless .bnp — templates + manifest, Go/templ deleted (WO-WZ-021)
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>
2026-07-04 14:24:55 +08:00

46 lines
1.2 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Tasting Menu",
"description": "Symmetric two-column menu card listing courses with description and price.",
"type": "object",
"properties": {
"title": {
"type": "string",
"title": "Menu title",
"description": "e.g. 'Chef's Tasting' or 'Cellar List'.",
"x-editor": "text",
"default": ""
},
"courses": {
"type": "array",
"title": "Courses",
"description": "Ordered list of courses on the menu.",
"x-editor": "collection",
"default": [],
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"title": "Course name",
"x-editor": "text"
},
"description": {
"type": "string",
"title": "Description",
"description": "Tasting note for the course.",
"x-editor": "richtext"
},
"price": {
"type": "string",
"title": "Price",
"description": "Plain string — e.g. '$48' or 'Market'.",
"x-editor": "text"
}
},
"required": ["name"]
}
}
}
}