View as markdown

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:

text
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

NameTypeDescription
fontFamilystringOverride the deck-wide font for this element. Picker shows the curated whitelist.
fontSizenumber (pt)Font size in canvas pixels at logical 1920×1080. Will scale with the viewport.
fontWeight100..900Numeric weight. Common: 400 = regular, 600 = semibold, 700 = bold.
italicbooleanToggle italic.
underlinebooleanToggle 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

NameTypeDescription
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

NameTypeDescription
lineHeightnumber (multiplier)1.0 = single-spaced, 1.5 = 150%, etc. Applies to whole element.
letterSpacingnumber (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

json
{
  "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
}
NameTypeDescription
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
lineHeightnumberLine-height multiplier
letterSpacingnumber (em)Letter spacing

TextRun:

NameTypeDescription
text*stringThe literal text
fontFamilystringPer-run font family override
fontSizenumber (pt)Per-run font size
fontWeight100..900Per-run weight
italicbooleanPer-run italic
underlinebooleanPer-run underline
colorstringHex / RGB / theme token