Text
Text elements hold the body copy, headings, and captions for a slide. Click Text in the top toolbar to insert; the cursor lands ready for typing.
Text runs
A text element isn't a flat string — it's a list of runs. Each run carries its own formatting (font weight, color, italic, underline). This is how you mix bold and regular text in the same line, or color a single word inside a paragraph:
Welcome to ▌Acme Furniture▐ — built for small spaces.
└ regular run ┘ └ bold run ┘ └ regular run ┘
To format part of a text element, select that text on canvas and use the inspector's typography controls. The selection becomes its own run. To revert formatting on a run, select it and clear the relevant control (e.g., toggle bold off).
Inspector
The Text element inspector groups properties into four panels:
Typography
| Name | Type | Description |
|---|---|---|
| fontFamily | string | Override the deck-wide font for this element. Picker shows the curated whitelist. |
| fontSize | number (pt) | Font size in canvas pixels at logical 1920×1080. Will scale with the viewport. |
| fontWeight | 100..900 | Numeric weight. Common: 400 = regular, 600 = semibold, 700 = bold. |
| italic | boolean | Toggle italic. |
| underline | boolean | Toggle underline. |
Color
A single color picker. Hex, RGB, or pick from the deck's theme tokens (the seven color swatches at the top — bg, text, accent, accent2, surface, border, muted).
Alignment
| Name | Type | Description |
|---|---|---|
| align | "left" | "center" | "right" | "justify" | Horizontal alignment within the element's bounding box. |
| vAlign | "top" | "middle" | "bottom" | Vertical alignment within the element's bounding box. |
Spacing
| Name | Type | Description |
|---|---|---|
| lineHeight | number (multiplier) | 1.0 = single-spaced, 1.5 = 150%, etc. Applies to whole element. |
| letterSpacing | number (em) | Tracking. Positive values spread, negative values tighten. |
"Multiple runs" warning
If you select a text element whose runs have mixed formatting (e.g., some bold, some not), the inspector shows a "Multiple runs" warning at the top of the typography panel. Changing a property in this state applies it uniformly to every run — this is how you "normalize" mixed formatting to a single style.
To avoid that, select a specific run on canvas before adjusting. The inspector then targets only that run.
Schema reference
{
"type": "text",
"position": { "x": 80, "y": 52, "w": 1276, "h": 100 },
"runs": [
{ "text": "Welcome to ", "fontSize": 56 },
{ "text": "Acme Furniture", "fontSize": 56, "fontWeight": 700 },
{ "text": " — built for small spaces.", "fontSize": 56 }
],
"align": "left",
"vAlign": "top",
"lineHeight": 1.2,
"letterSpacing": -0.5
}
| Name | Type | Description |
|---|---|---|
| type* | "text" | Discriminator |
| runs* | TextRun[] | Per-run formatting. At least one run required. |
| align | "left" | "center" | "right" | "justify" | Horizontal alignment |
| vAlign | "top" | "middle" | "bottom" | Vertical alignment |
| lineHeight | number | Line-height multiplier |
| letterSpacing | number (em) | Letter spacing |
TextRun:
| Name | Type | Description |
|---|---|---|
| text* | string | The literal text |
| fontFamily | string | Per-run font family override |
| fontSize | number (pt) | Per-run font size |
| fontWeight | 100..900 | Per-run weight |
| italic | boolean | Per-run italic |
| underline | boolean | Per-run underline |
| color | string | Hex / RGB / theme token |