Every block - whether you drag it onto the canvas in the Layout Editor or write it by hand in a layout JSON file - shares a common shape, plus properties specific to its type.

Common properties

| Property | Meaning | |---|---| | Position (x_mm, y_mm) | Top-left corner, in mm from the page's top-left | | Size (width_mm, height_mm) | Block's bounding box, in mm | | Page (page) | Which page of the canvas (default 1) - see Layout Editor | | Condition (condition) | Hide the block unless an expression is true - see Scripting & Processing | | Z-index (z_index) | Paint order - higher draws on top. In the editor, use Send to Front/Back instead of typing a number |

Text block

The workhorse block - a label, a price callout, a paragraph, a formatted list.

Image block

A logo, branding art, or a field-bound photo (a file- or signature-type field's submitted value).

Box block

A filled and/or stroked rectangle - colored panels, dividers, borders behind other content.

Signature block

Renders a captured signature (from a signature-type field) at a fixed position and size, preserving its proportions (contain-style fit, no stretching or cropping).

QR code block

Encodes text/a URL as a QR code, always rendered as a centered square within the box (a non-square box just adds padding on the longer side, never distorts the code).

Grid block

A real table - for content that needs actual columns, not just a joined multi-line string (an options list with right-aligned prices, a spec table, anything tabular).

The simplest possible grid is just a flat, hand-written list of values - with "columns": 2, this lays out as 3 rows:

"data": "['Description', 'Price', 'Extended Warranty', '$500', 'Paint Protection', '$250']"

A plain value like that renders as-is with the grid's default styling. Wrap a cell in an object instead when you want to override styling for just that one cell - using real HTML/CSS property names (background-color, color, font-family, font-size, padding, text-align, vertical-align, border-color, border-width) rather than this app's usual style naming, since that's the vocabulary most people already associate with per-cell styling:

"data": "[{text: 'Description'}, {text: 'Price', 'text-align': 'right'}, {text: 'Extended Warranty'}, {text: '$500', 'text-align': 'right'}, {text: 'Paint Protection', 'background-color': '#ffeecc', 'border-color': '#cc8800', 'border-width': 0.5}, {text: '$250', 'text-align': 'right'}]"

(Note the quotes around hyphenated keys like 'text-align' - that's plain JavaScript object-literal syntax, not anything Yatate-specific.)

Typing the array out by hand like this works fine for a fixed spec table, but most real uses need the data built from a repeating group instead - see Generating Grid Data for that.