pub enum Block {
Show 104 variants
Unknown {
name: String,
attrs: Attrs,
content: String,
span: Span,
},
Markdown {
content: String,
span: Span,
},
Callout {
callout_type: CalloutType,
title: Option<String>,
content: String,
span: Span,
},
Data {
id: Option<String>,
format: DataFormat,
sortable: bool,
headers: Vec<String>,
rows: Vec<Vec<String>>,
raw_content: String,
span: Span,
},
Code {
lang: Option<String>,
file: Option<String>,
highlight: Vec<String>,
content: String,
span: Span,
},
Tasks {
items: Vec<TaskItem>,
span: Span,
},
Decision {
status: DecisionStatus,
date: Option<String>,
deciders: Vec<String>,
content: String,
span: Span,
},
Metric {
label: String,
value: String,
trend: Option<Trend>,
unit: Option<String>,
span: Span,
},
Summary {
content: String,
span: Span,
},
Cite {
reference: Reference,
span: Span,
},
Bibliography {
style: Option<Format>,
span: Span,
},
Figure {
src: String,
caption: Option<String>,
alt: Option<String>,
width: Option<String>,
span: Span,
},
Diagram {
diagram_type: String,
title: Option<String>,
content: String,
span: Span,
},
Tabs {
tabs: Vec<TabPanel>,
span: Span,
},
Columns {
columns: Vec<ColumnContent>,
span: Span,
},
Quote {
content: String,
attribution: Option<String>,
cite: Option<String>,
span: Span,
},
Cta {
label: String,
href: String,
primary: bool,
icon: Option<String>,
span: Span,
},
Nav {
items: Vec<NavItem>,
logo: Option<String>,
groups: Vec<NavGroup>,
brand: Option<String>,
brand_reg: bool,
cta: Option<NavItem>,
drawer: bool,
minimal: bool,
span: Span,
},
HeroImage {
src: String,
alt: Option<String>,
span: Span,
},
Testimonial {
content: String,
author: Option<String>,
role: Option<String>,
company: Option<String>,
span: Span,
},
Style {
properties: Vec<StyleProperty>,
span: Span,
},
Faq {
items: Vec<FaqItem>,
span: Span,
},
PricingTable {
headers: Vec<String>,
rows: Vec<Vec<String>>,
span: Span,
},
Site {
domain: Option<String>,
properties: Vec<StyleProperty>,
span: Span,
},
Page {
route: String,
layout: Option<String>,
title: Option<String>,
sidebar: bool,
content: String,
children: Vec<Block>,
span: Span,
},
Deck {
properties: Vec<StyleProperty>,
span: Span,
},
Slide {
layout: Option<SlideLayout>,
kicker: Option<String>,
notes: Option<String>,
content: String,
children: Vec<Block>,
span: Span,
},
Embed {
src: String,
embed_type: Option<EmbedType>,
width: Option<String>,
height: Option<String>,
title: Option<String>,
span: Span,
},
Form {
fields: Vec<FormField>,
submit_label: Option<String>,
action: Option<String>,
method: Option<String>,
honeypot: bool,
span: Span,
},
Banner {
headline: Option<String>,
subtitle: Option<String>,
buttons: Vec<HeroButton>,
id: Option<String>,
content: String,
span: Span,
},
ProductGrid {
groups: Vec<ProductGroup>,
tiles: bool,
span: Span,
},
PostGrid {
title: Option<String>,
subtitle: Option<String>,
items: Vec<PostItem>,
span: Span,
},
Gate {
title: Option<String>,
subtitle: Option<String>,
action: String,
field_label: Option<String>,
submit_label: Option<String>,
error: Option<String>,
span: Span,
},
Gallery {
items: Vec<GalleryItem>,
columns: Option<u32>,
span: Span,
},
Footer {
sections: Vec<FooterSection>,
copyright: Option<String>,
social: Vec<SocialLink>,
brand: Option<String>,
brand_reg: bool,
brand_logo: Option<String>,
tagline: Option<String>,
span: Span,
},
Details {
title: Option<String>,
open: bool,
content: String,
span: Span,
},
Divider {
label: Option<String>,
span: Span,
},
Hero {
headline: Option<String>,
subtitle: Option<String>,
badge: Option<String>,
align: String,
image: Option<String>,
image_alt: Option<String>,
layout: Option<String>,
transparent: bool,
buttons: Vec<HeroButton>,
content: String,
span: Span,
},
Features {
cards: Vec<FeatureCard>,
cols: Option<u32>,
span: Span,
},
Steps {
steps: Vec<StepItem>,
span: Span,
},
Stats {
items: Vec<StatItem>,
span: Span,
},
Comparison {
headers: Vec<String>,
rows: Vec<Vec<String>>,
highlight: Option<String>,
span: Span,
},
Logo {
src: String,
alt: Option<String>,
size: Option<u32>,
span: Span,
},
Toc {
depth: u32,
entries: Vec<TocEntry>,
span: Span,
},
BeforeAfter {
before_items: Vec<BeforeAfterItem>,
after_items: Vec<BeforeAfterItem>,
transition: Option<String>,
span: Span,
},
Pipeline {
steps: Vec<PipelineStep>,
span: Span,
},
Section {
bg: Option<String>,
headline: Option<String>,
subtitle: Option<String>,
content: String,
children: Vec<Block>,
span: Span,
},
ProductCard {
title: String,
subtitle: Option<String>,
badge: Option<String>,
badge_color: Option<String>,
body: String,
features: Vec<String>,
cta_label: Option<String>,
cta_href: Option<String>,
span: Span,
},
List {
source: String,
display: ListDisplay,
item_template: String,
filters: Vec<ListFilter>,
sort: Option<SortSpec>,
preload: bool,
span: Span,
},
Board {
source: String,
columns: Vec<String>,
card_template: Option<String>,
preload: bool,
span: Span,
},
Action {
method: HttpMethod,
target: String,
label: String,
fields: Vec<FormField>,
confirm: Option<String>,
span: Span,
},
FilterBar {
target_selector: String,
fields: Vec<FilterField>,
span: Span,
},
Search {
source: String,
placeholder: Option<String>,
span: Span,
},
Dashboard {
source: String,
refresh: Option<u32>,
span: Span,
},
ChatInput {
action: String,
placeholder: Option<String>,
modes: Vec<String>,
span: Span,
},
Feed {
source: String,
stream: bool,
span: Span,
},
Store {
title: Option<String>,
currency: Option<String>,
items: Vec<StoreItem>,
span: Span,
},
Booking {
title: Option<String>,
service_label: Option<String>,
services: Vec<BookingService>,
days: Vec<BookingDay>,
span: Span,
},
Editor {
source: Option<String>,
lang: Option<String>,
preview: bool,
span: Span,
},
Chart {
chart_type: ChartType,
source: String,
period: Option<String>,
title: Option<String>,
data: Option<ChartData>,
span: Span,
},
SplitPane {
ratio: String,
span: Span,
},
App {
name: String,
binary: Option<String>,
region: Option<String>,
port: Option<u32>,
platform: Option<String>,
auth: Option<String>,
content: String,
children: Vec<Block>,
span: Span,
},
Build {
base: Option<String>,
runtime: Option<String>,
edition: Option<String>,
properties: Vec<StyleProperty>,
span: Span,
},
InfraDatabase {
name: Option<String>,
shared_auth: bool,
volume_gb: Option<u32>,
properties: Vec<StyleProperty>,
span: Span,
},
Deploy {
env: Option<String>,
app: Option<String>,
machines: Option<u32>,
memory: Option<u32>,
auto_stop: Option<String>,
min_machines: Option<u32>,
strategy: Option<String>,
properties: Vec<StyleProperty>,
span: Span,
},
InfraEnv {
tier: Option<String>,
entries: Vec<EnvEntry>,
span: Span,
},
Health {
path: Option<String>,
method: Option<String>,
grace: Option<String>,
interval: Option<String>,
timeout: Option<String>,
span: Span,
},
Concurrency {
concurrency_type: Option<String>,
hard_limit: Option<u32>,
soft_limit: Option<u32>,
force_https: bool,
span: Span,
},
Cicd {
provider: Option<String>,
properties: Vec<StyleProperty>,
span: Span,
},
Smoke {
script: Option<String>,
checks: Vec<SmokeCheck>,
span: Span,
},
Domains {
entries: Vec<DomainEntry>,
span: Span,
},
Crates {
entries: Vec<CrateEntry>,
span: Span,
},
DeployUrls {
entries: Vec<StyleProperty>,
span: Span,
},
Volumes {
entries: Vec<VolumeEntry>,
span: Span,
},
Model {
name: String,
fields: Vec<ModelField>,
span: Span,
},
Route {
method: HttpMethod,
path: String,
auth: Option<String>,
returns: Option<String>,
body: Option<String>,
handler: Option<String>,
content: String,
span: Span,
},
Auth {
provider: AuthProvider,
session: Option<String>,
roles: Vec<String>,
default_role: Option<String>,
span: Span,
},
Binding {
source: String,
target: String,
events: Vec<BindingEvent>,
span: Span,
},
Schema {
name: String,
fields: Vec<SchemaField>,
span: Span,
},
Use {
crates: Vec<CrateDep>,
span: Span,
},
AppEnv {
vars: Vec<EnvVar>,
span: Span,
},
AppDeploy {
region: Option<String>,
scale: Option<u32>,
domain: Option<String>,
memory: Option<String>,
properties: Vec<(String, String)>,
span: Span,
},
Row {
icon: String,
title: String,
description: String,
href: Option<String>,
state: RowState,
span: Span,
},
InfoCard {
intent: String,
title: String,
subtitle: String,
summary: String,
image: Option<String>,
facts: Vec<[String; 2]>,
steps: Vec<String>,
state: RowState,
span: Span,
},
AppShell {
layout: String,
children: Vec<Block>,
span: Span,
},
Sidebar {
position: String,
collapsible: bool,
width: Option<u32>,
children: Vec<Block>,
span: Span,
},
Panel {
position: String,
resizable: bool,
height: Option<u32>,
desktop_only: bool,
children: Vec<Block>,
span: Span,
},
TabBar {
active: Option<String>,
items: Vec<TabBarItem>,
span: Span,
},
TabContent {
tab: String,
children: Vec<Block>,
span: Span,
},
Toolbar {
items: Vec<ToolbarItem>,
span: Span,
},
Drawer {
name: String,
position: String,
width: Option<u32>,
trigger: Option<String>,
children: Vec<Block>,
span: Span,
},
Modal {
name: String,
title: Option<String>,
children: Vec<Block>,
span: Span,
},
CommandPalette {
trigger: Option<String>,
items: Vec<CommandItem>,
span: Span,
},
CodeEditor {
lang: Option<String>,
source: Option<String>,
line_numbers: bool,
content: String,
span: Span,
},
BlockEditor {
source: Option<String>,
span: Span,
},
Terminal {
shell: Option<String>,
cwd: Option<String>,
span: Span,
},
NavTree {
source: Option<String>,
on_select: Option<String>,
on_rename: Option<String>,
on_delete: Option<String>,
span: Span,
},
Badge {
value: String,
color: Option<String>,
span: Span,
},
SuggestionChips {
source: Option<String>,
max: Option<u32>,
dismissible: bool,
span: Span,
},
ChatThread {
source: Option<String>,
on_action: Option<String>,
span: Span,
},
ChatInputSimple {
placeholder: Option<String>,
action: Option<String>,
span: Span,
},
Progress {
source: Option<String>,
steps: Vec<ProgressStep>,
span: Span,
},
LogStream {
source: Option<String>,
tail: Option<u32>,
span: Span,
},
ProblemList {
source: Option<String>,
span: Span,
},
}Expand description
A parsed block in the document body.
Variants§
Unknown
A block directive that has not yet been typed (Chunk 1 catch-all).
Markdown
Plain markdown content between directives.
Callout
Callout/admonition box.
Data
Structured data table (CSV/JSON/inline rows).
Fields
format: DataFormatCode
Code block with optional language and file path.
Tasks
Task list with checkbox items.
Decision
Decision record.
Metric
Single metric display.
Summary
Executive summary block.
Cite
A bibliographic reference definition (::cite). Renders nothing on its
own; it registers a Reference consumed by inline [@key] citations
and the ::bibliography list. See crate::citation.
Bibliography
A rendered reference list (::bibliography / ::references). Collects
every ::cite-defined reference and formats them per the active citation
style (or the optional per-block style= override).
Fields
Figure
Figure with image source and caption.
Diagram
Native diagram block (::diagram) — architecture diagrams + ERDs.
content is the raw DSL source, preserved verbatim for lossless
round-trip; unknown diagram_type values degrade to prose at render.
Fields
Tabs
Tabbed content with named panels.
Columns
Multi-column layout.
Quote
Attributed quote with optional source.
Cta
Call-to-action button.
Navigation bar with links.
HeroImage
Hero image visual.
Testimonial
Customer testimonial.
Style
Presentation style overrides (key-value pairs).
Faq
FAQ accordion with question/answer pairs.
PricingTable
Pricing comparison table.
Site
Site-level configuration (one per document).
Page
Page/route definition — container block with child blocks.
Fields
Deck
Deck-level configuration (one per document) — the ::deck block.
Peer of Block::Site: a leaf config block holding presentation
properties (theme, aspect, transition, accent, font). The
slides themselves are top-level Block::Slide siblings, exactly as
::page blocks are siblings of ::site.
Slide
A single slide — container block with child blocks.
Peer of Block::Page: its children reuse the existing content
block families (Hero/Features/Stats/Comparison/Quote/Code/…), so a
slide is an arrangement of blocks that already exist, never a new
content primitive.
Fields
layout: Option<SlideLayout>Embed
Embedded external content (iframe).
Fields
Form
Form with arbitrary fields that submits to the inbox.
Fields
Banner
Centered call-to-action band: heading + subtext + optional buttons.
Fields
ProductGrid
Grid of product link-cards, optionally split into labelled groups.
Fields
groups: Vec<ProductGroup>PostGrid
Card grid for a blog/news/events index.
Gate
Access-code card: password field + submit button.
Fields
Gallery
Image gallery with optional categories.
Structured footer with sections, copyright, and social links.
Details
Collapsible content section.
Divider
Labeled thematic break.
Hero
Full hero section with headline, subtitle, CTA buttons.
Fields
layout: Option<String>Explicit layout hint: stacked (image above headline). When absent,
the legacy align-driven behavior applies (centered → above,
left → side).
transparent: boolDrop the hero’s card background/shadow so it blends into the page (text over the page background instead of a gradient card).
Features
Card grid for features, products, or values.
Steps
Numbered process/timeline steps.
Stats
Row of metric/stat cards.
Comparison
Feature comparison matrix with check/dash rendering.
Logo
Centered brand/logo display.
Toc
Auto-generated table of contents from document headings.
BeforeAfter
Before/After problem→solution visualization.
Pipeline
Horizontal flow pipeline with arrows between steps.
Section
Page section container with background control and child blocks.
Fields
ProductCard
Rich product card with badge, body, features, and CTA.
Fields
List
Dynamic data list with filtering and sorting.
Board
Kanban board with draggable cards.
Action
CRUD form that submits via HTMX (extends ::form with action).
Fields
method: HttpMethodFilterBar
Filter controls for data views.
Search
Search input with typeahead results.
Dashboard
Metrics dashboard with auto-refresh.
ChatInput
Smart-routed chat input.
Feed
Real-time content feed (SSE or polling).
Store
Self-contained storefront widget: category-filtered product grid with add-to-cart, a live cart (qty steppers + line totals), and a checkout form that resolves to an order-confirmation card. Static data-bound (no backend; payment links out). Drives the commerce examples (Marketplace, Delivery, Local-service, …).
Fields
Booking
Self-contained appointment/booking widget: optional service selector + month calendar driven by per-day availability + slot picker + booking confirmation. Static data-bound (no backend); the inlined client script renders the calendar and drives selection → confirmation entirely in the browser. Drives the scheduling examples (Scheduler, Restaurant-reserve, Local-service-book, …).
Editor
Code/SurfDoc editor mount point.
Chart
Data visualization mount point.
Fields
SplitPane
Resizable side-by-side layout mount point.
App
Top-level app manifest container (like Page — recursively parses children).
Fields
Build
Build configuration (base image, runtime, edition).
Fields
properties: Vec<StyleProperty>InfraDatabase
Infrastructure database configuration.
Deploy
Deployment environment configuration.
Fields
properties: Vec<StyleProperty>InfraEnv
Environment variable group (required/recommended/optional/defaults).
Health
Health check configuration.
Fields
Concurrency
Concurrency/connection limits.
Fields
Cicd
CI/CD pipeline configuration.
Smoke
Smoke test checks (HTTP method + path + expected status).
Domains
Domain entries for the app.
Crates
Shared crate dependencies.
DeployUrls
Per-environment deploy URLs.
Volumes
Named volume mounts.
Model
Data model definition with typed fields and constraints.
Route
API route/endpoint definition with optional embedded Rust handler.
Fields
method: HttpMethodAuth
Authentication configuration.
Fields
provider: AuthProviderBinding
Data-to-UI binding connecting a route/model to a UI block.
Schema
Data schema definition with typed fields and constraints.
Use
Crate/dependency declarations for an app.
AppEnv
App-level environment variable declarations with descriptions.
AppDeploy
App-level deployment configuration.
Fields
Row
A compact row component with icon, title, description, and optional link.
Three states: default (content), loading (skeleton), empty (placeholder).
::row[icon=sparkle, href=/wiki/article, state=loading]
Fields
InfoCard
A knowledge/info card with title, subtitle, summary, facts, and optional image.
::infocard[intent=who, image=https://...]
Fields
AppShell
Root app container with layout mode.
Sidebar
Collapsible side panel.
Panel
Resizable bottom/side panel.
Fields
TabBar
Tab strip navigation.
TabContent
Tab-associated content pane.
Toolbar
Horizontal toolbar with buttons, separators, badges, etc.
Drawer
Slide-out drawer panel.
Fields
Modal
Dialog overlay.
CommandPalette
Searchable command picker.
CodeEditor
Syntax-highlighted code editor.
BlockEditor
Visual block editor mount point.
Terminal
Shell/terminal panel.
File/navigation tree.
Badge
Status badge pill.
SuggestionChips
Clickable suggestion chips.
ChatThread
Chat conversation thread display.
ChatInputSimple
Simple chat message input (distinct from app-bound ChatInput).
Progress
Step/progress indicator.
LogStream
Live log output stream.
ProblemList
Error/warning problem list.