Unify Applications
Logo
Typography & Link

Typography & Link

Logo

7 mins READ

The Typography block (shown as Text in the block picker) displays a piece of text in one of four content types with full typographic control: color, size, weight, alignment, font, style, casing, line height, and letter spacing. Its value is bindable, rendering anything from a static label to a formatted document from your data. For Plain Text and Markdown, it offers a Truncation add-on that clips long content.

unify-applications-typography-and-link-01-text-block.png
unify-applications-typography-and-link-01-text-block.png

Typography Block

Content Types

Type LabelInternal ValueDescription
Plain TextPLAIN_TEXTRenders as plain text. Line breaks are preserved. Default for new blocks
MarkdownMARKDOWNParses markdown syntax (links, bold, lists, headings)
Rich TextHTMLRenders through the rich-text pipeline (editor-style formatting). Used by blocks created before the raw HTML option
HTMLPLAIN_HTMLRenders your markup as-is (raw HTML)

Warning: Two "HTML-looking" types exist for historical reasons: If pasted HTML looks re-styled, check that Type is set to HTML (PLAIN_HTML), not Rich Text (HTML). Rich Text applies editor-style formatting classes; HTML renders as-is.

Typography — Content Properties

Property

Type

Default

Description

Text

string (bindable, translatable)

Hello {{ userContext.name || 'world' }}!

The text to display. Supports expressions and bindings

Type

Plain Text, Markdown, Rich Text or HTML

Plain Text

How the value is interpreted and rendered

Add-ons → Truncation

add-on

off

Clips long content. Plain Text and Markdown only

Add-ons → Tooltip

add-on

off

Shows a tooltip on the block. Plain Text and Markdown only

Permissions

permission rules

—

Restrict who can see the block

Truncation Add-on

Available only when Type is Plain Text or Markdown:

Property

Type

Default

Description

Enable Truncation

on/off

off

Turn truncation on

Maximum number of Lines

number (min 1)

—

Number of lines to show before clipping

Truncate With

Ellipsis or Label

Ellipsis

End clipped text with … or with a Show more / Show less expand label

Show Tooltip on Text Overflow

on/off

off

Show the full text in a tooltip when clipped. Only available with Ellipsis

Tooltip Placement

placement

top

Where the overflow tooltip opens

Note: "Show more" label truncation is web-only. In a mobile app, the label variant is not applied — text clips at the line limit without an expand control. Ellipsis truncation works on both platforms.

Typography — Appearance Properties

PropertyTypeDefaultDescription
colortheme color or custom hextext-primaryText color. Custom hex colors (including opacity) are allowed here
variant (size)size token (e.g. text-md)text-mdText size token
weightweight tokenregularFont weight
alignleft | center | right | justifyleftText alignment
fontFamilyfont nametheme fontFont family. Leave unset to inherit the theme font
fontStylestyle token—Font style (e.g., italic)
textDecorationunderline | line-through—Text decoration
textTransformuppercase | capitalize | lowercase—Letter casing
lineHeighttoken or custom CSS value—Line height
letterSpacingtoken or custom CSS value—Letter spacing
visibilityconditions—Show/hide the block
stylesstyle set—Width, padding, margin, height, flex layout, overflow, background, radius, rotation

Note: fontFamily, fontStyle, textDecoration, textTransform, lineHeight and letterSpacing apply to web apps only. They do nothing in a mobile app. With Type set to Markdown, the size token (variant) reaches paragraph text only for text-md, text-xs, para-md, para-xmd, para-sm and para-xs; other sizes leave paragraphs at small.

Typography — Exposed State

BindingTypeDescription
{{ id.content.value }}stringThe text currently configured (after bindings resolve)
{{ id.content.type }}stringThe active content type (PLAIN_TEXT, MARKDOWN, HTML, PLAIN_HTML)
{{ id.content.addOns.truncation }}objectThe truncation configuration
{{ id.appearance.* }}objectThe block's appearance settings (color, size, weight, alignment, …)

Typography Behaviors & Gotchas

Warning: Binding a non-string value prints it as JSON: Bind an object or array to Text and the block renders it as pretty-printed JSON. A date value renders as its full date string.

Note: Empty value takes up one line: When the bound value is empty or missing, the block renders a blank space instead of collapsing to zero height. Use a visibility condition if you want it gone entirely.

Note: Line breaks are always preserved: Newlines in the value render as real line breaks. Exception: when truncation is on with maxNumberOfLines = 1, wrapping is suppressed.

Note: Truncation not available for Rich Text or HTML: The Truncation add-on only appears for Plain Text or Markdown. Control Rich Text/HTML size via Styles height + overflow.

Typography Example: Markdown Description from a Data Source

  1. Add a Text block and set Type to Markdown.

  2. Bind Text to the field that holds the description, for example {{ ds_product.data.description }}. The path depends on your data source's response.

  3. Under Add-ons, turn on Truncation, set Maximum number of Lines to 3 and Truncate With to Label so users can expand the text on the web.

The Link block is a clickable hyperlink in two flavors: Inline — a piece of styled text — or Block — a body slot you fill with any content, making the whole area one link. It navigates to a URL, optionally in a new tab, with brand/neutral/error coloring, underline control, optional icons, and an On Click event that fires alongside navigation.

TypeShowsUse case
InlineA Text property for the link labelStandard text hyperlinks ("View documentation", "Click here")
BlockA Body slot where you compose any blocksMaking a composed area (icon + title + description) fully clickable as one link

Warning: Changing Type from Block back to Inline removes the Body slot and every block inside it. There is no confirmation and no undo. Move or copy the content you want to keep first.

Property

Type

Default

Appears When

Description

Type

Inline or Block

Inline

Always

Inline shows a text label; Block shows a composed Body slot

URL

string (bindable)

—

Always

Where the link navigates on click

Text

string

Click here

Type = Inline

The link's visible text

Open in new tab

True, False or Conditions

False

Not on the mobile layout

Open the target in a new browser tab. Accepts runtime conditions

Slots → Body

block slot

Column with "Click here" text

Type = Block

Composable content that becomes the clickable area

Interactions

event list

—

Always

On Click event handler — fires in addition to navigation

Permissions

permission rule

—

Always

Restrict who sees the block

Property

Type

Default

Description

Color

Brand, Neutral or Error

Brand

The link's color scheme

Typography

size + weight

text-sm, regular

Text size and weight

Underline

None, Hover or Always

Hover

When the underline is shown

Start Icon

icon (conditional)

—

Icon placed before the link text

End Icon

icon (conditional)

—

Icon placed after the link text

Disabled

condition

off

Disables the link — no navigation, no click event

Visibility

conditions

—

Show or hide the block

Styles

style set

—

Flex layout, visibility, rotation, plus custom CSS and HTML attributes when enabled

EventTriggerNotes
On ClickUser clicks the link; fires in addition to the navigation itselfAlways available

Note: Empty Text shows the URL instead: For an inline link with no Text, the raw URL becomes the visible label. The link never renders blank as long as a URL is set.

Note: Missing URL still renders a clickable link: With no URL set, the link displays and fires On Click. Inside a published app its target falls back to #, so clicking may scroll to the top of the page rather than navigating.

Note: Clicks don't leak to clickable parents: A click on a Link inside a clickable container (e.g., a card header) triggers only the link, not the container's own click behavior.

Note: New-tab links are opened safely: Links opened in a new tab include browser protections (noopener noreferrer) automatically.

Note: Private platform file links resolve at click time: In mobile apps, URLs pointing at platform-protected file downloads are exchanged for a real temporary download address when the user clicks. If the exchange fails, the original URL is used. Web apps navigate to the URL as written.

  1. Add a Link block and set Type to Block.

  2. In Slots → Body, add the card's content, for example an Icon, a title Text block and a description Text block.

  3. Set URL to the destination. It can be a binding, such as a record's detail URL from your data source.

  4. Turn on Open in new tab for links that leave your app.

  5. Optional: add actions under Interactions → On Click. They run in addition to the navigation.

Block

Relationship

Button

Runs actions on click without a navigation target; use instead of Link when no URL is needed

Link Preview

Renders a URL as a rich preview card rather than a hyperlink

Typography

Plain text without navigation; use Link when the text must navigate somewhere

Tag

Clickable label chips; use instead of Link when you need a colored chip rather than styled text

This page is the full reference for the Typography (Text) and Link blocks. Icon Button & Link also describes the Link block, and Tag & Text has a short Typography quick reference.

FAQs

Which content type should I use for my Text block — PLAIN_TEXT, MARKDOWN, HTML, or PLAIN_HTML?

Use Plain Text (PLAIN_TEXT) for simple, unformatted labels and values. Use Markdown (MARKDOWN) when the text comes from a data source that uses Markdown syntax (bold, headings, lists) — the block renders it properly. Use HTML (PLAIN_HTML) to render your own markup as written. Use Rich Text (HTML) only for content authored in the rich-text editor, because it restyles your markup with editor-style formatting. On web, both HTML types are sanitized, so scripts are always stripped.

Can I bind the content of a Text block to a variable?

Yes. Set the content field to any expression, for example {{ myDataSource.data.title }}. If you pick the MARKDOWN or HTML type, the expression result is parsed as that format. PLAIN_TEXT is the safest choice for bound values because it never interprets markup.

My truncated text shows an ellipsis but the tooltip does not appear on hover. Why?

The tooltip is only shown when the text is actually clamped (overflowing its container). If the container is wide enough to show the full text, no truncation occurs and no tooltip appears. Reduce the container width or shorten the text to trigger clamping.

What is the difference between the Link block and a Typography block with a URL binding?

The Link block renders a semantic <a> element with correct keyboard focus, accessible roles, and a built-in Open in new tab toggle. It also supports Start Icon and End Icon and a disabled state. A Text block cannot navigate — it only displays text. Use Link whenever you need an actual navigable hyperlink.