Unify Applications
Logo
Alert & Loader

Alert & Loader

Logo

7 mins READ

This page covers three display blocks: Alert, Loader and Progress.

Alert Block

The Alert block shows a static callout banner — a title, an optional description (plain text or Markdown), an optional icon, and an optional link button — colored by one of five variants. It is display-only: it announces something on the page rather than reacting to user clicks.

alert.png
alert.png

Note: Use Alert for persistent, in-page notices that stay visible until the page changes (warnings, success confirmations, setup notices). For transient messages that appear and disappear after an action, use a notification action instead — not a block.

Alert Variants

Variant

Color Scheme

Typical Use

brand

Brand color

Feature announcements, tips

default

Neutral (used when no variant is set)

General informational notices

error

Red / destructive

Errors, failures, destructive warnings

warning

Amber / yellow

Warnings, quota alerts, degraded states

success

Green

Success confirmations, completion notices

Alert — Content Properties

PropertyTypeDefaultDescription
titlestring (bindable, translatable)AlertThe alert's heading line
descriptionstring (multi-line, bindable)This is an alert message.Body text under the title
descriptionType"PLAIN_TEXT" | "MARKDOWN"PLAIN_TEXTHow the description is rendered — plain text or Markdown (links, bold, lists)
linkTextstring (bindable)—Label of the link button. Only shown when linkUrl is also set
linkUrlstring (URL, bindable)—Destination the link button opens. Setting this makes the link button appear
permissionspermission rule—Restrict who sees the alert

Alert — Appearance Properties

Property

Type

Default

Description

variant

brand | default | error | warning | success

default

The alert's color scheme. Falls back to "default" only when no variant is set

startDecorator (Icon)

icon (supports conditional values)

InfoCircle

Icon at the start of the alert. Can switch based on a condition

styles

style set

1px border

Width/min/max, flex layout, visibility, stroke, radius, background color, rotation

visibility

conditions

—

Show/hide the whole block

customCSS

CSS

—

Custom styling applied to the block

Alert — Exposed State

BindingTypeDescription
{{ id.content.title }}stringThe current title
{{ id.content.description }}stringThe current description
{{ id.appearance.variant }}stringThe current variant

Alert Behaviors & Gotchas

Warning: Link Text without Link URL shows nothing: The link button only appears when Link URL has a value. Setting Link Text alone is ignored. When Link URL is set but Link Text is empty, the raw URL becomes the button label.

Note: Markdown formatting only applies when both type and description are set: A description with Markdown syntax renders its symbols literally while Type = Plain Text.

Note: Only a missing variant falls back to default: If the variant is empty or bound to a value that isn't one of the five (for example "info" or "danger"), the alert renders as an uncoloured bordered box. Make sure a dynamic binding always resolves to brand, default, error, warning or success.

Loader Block

The Loader block is a loading indicator in three styles: Default (a spinning arc), AI (the animated AI sparkle used in copilot surfaces), and Content (a skeleton placeholder with shimmering bars or a single shimmering box). It has no data or events — you show and hide it with visibility conditions while something else loads.

Warning: The Loader never hides itself. It has no built-in link to any loading state — it spins/shimmers forever until you hide it. Bind its Visibility to the thing that's actually loading (e.g., show while {{ ds_orders.isLoading }} is true).

Loader Types

TypeVisualOptionsPlatform
DefaultSpinning arcSize: xxs, xs, sm, md, lg, xlAll
AIAI sparkle animation (fixed 24×24 px)None (ignores Size setting)All
ContentSkeleton shimmering bars (dashed) or single box (solid)Style: dashed | solid; Radius; ColorAll

Loader — Appearance Properties

PropertyTypeDefaultAppears WhenDescription
typeDEFAULT | AI | CONTENTDEFAULTAlwaysWhich indicator to show
sizexxs | xs | sm | md | lg | xlmd (theme-dependent)type = DEFAULTThe spinner's size
contentStyle"dashed" | "solid"dashedtype = CONTENTDashed = shimmer bars; Solid = one shimmer box
visibilityconditions—AlwaysShow/hide the block (bind this to a loading state)
stylesstyle setfits contentAlwaysWidth, height, flex layout, margin, overflow, rotation. Content type also offers Radius and Color

Loader Behaviors & Gotchas

Note: AI type ignores Size: The AI sparkle always renders at one fixed small size (24×24 px). To make it bigger, there is no setting — choose a different type or scale the surrounding layout.

Note: Dashed skeleton needs a real height: The Content type computes how many shimmer bars fit from the block's actual height (~1 bar per 28 px). If the block has no height, the skeleton renders empty. Give it an explicit height or place it where the layout stretches it.

Note: Last skeleton bar is always shorter: In dashed style, the final row renders at 70% width to mimic a trailing line of text. This is fixed — not configurable.

Note: Skeleton color follows the Styles Color: For Content type, the Color style drives the shimmer's base color (supports theme color tokens).

Progress Block

The Progress block renders a progress indicator — a bar, a gauge or a circle — showing a value between a minimum and maximum. It can display a text label and supports conditional styling. Use it for upload progress, task completion percentages, quota usage, and similar numeric-range indicators.

Progress — Key Properties

Property

Type

Default

Description

Type

Bar | Gauge | Circle

Bar

The shape of the indicator

Value

number (bindable)

—

The current progress value. Should be between Minimum and Maximum

Label

string (bindable)

value plus %

The text shown with the indicator. Not available for Gauge

Minimum

number

0

The minimum value (0% fill)

Maximum

number

100

The maximum value (100% fill)

Add ons → Threshold

threshold marker

—

Marks a threshold on the bar. Bar only

color

theme color token or conditional

brand

The fill bar's color. Supports conditional rules for threshold-based coloring

Hide Label (Appearance)

boolean

—

Hides the label

Label Position (Appearance)

Right | Bottom | Inside

—

Where the label sits relative to the indicator. Bar only. Inside needs the largest Thickness. Label color, size and weight are also set here

Thickness (Appearance)

size

—

The thickness of the track

Show Value Marker (Appearance)

boolean

—

Shows a marker at the current value. Bar and Gauge only

Angle (Appearance)

Start Angle, End Angle (in degrees)

—

The arc the gauge draws. Gauge only

visibility

conditions

—

Show/hide the block

permissions

permission rule

—

Restrict who sees the block

Blocks to use with, or instead of, the Alert:

Block

Relationship

Card

Free-form container when the Alert's fixed layout is too rigid

Button

Adds a real action to accompany an alert banner

Typography

Plain text without the colored banner treatment

Tag

Inline status chips — use when you need a small marker inside a sentence or row, not a full-width banner

Loading States & Triggers

How to bind a Loader's visibility to a data source's loading state

FAQs

How do I show the Loader only while my data is fetching?

Bind the Loader's Visibility condition to the data source's loading state, for example {{ myQuery.isLoading }}. Place the Loader and the content block in the same container; when isLoading is true the Loader is visible and the content block can be hidden (set its own Visibility to {{ !myQuery.isLoading }}). This creates a clean swap between skeleton/spinner and real content.

The CONTENT (skeleton) Loader doesn't match my layout. How do I size it?

The skeleton inherits the Loader block's dimensions, not the content it is replacing. Set explicit width and height on the Loader block (or its parent container) to match the element you are loading. Set Style to Solid to show one shimmering box the size of the block, or Dashed for text-like shimmer bars.

Can the Alert block's link navigate to an internal page?

The Alert's Link URL field accepts any URL including relative paths to internal pages (e.g., /orders/{{ orderId }}). The link always opens in a new tab, and this can't be changed to open in the same window. If you need same-tab navigation, query params or onClick logic, use a Button or Link block inside a custom container instead of the Alert's built-in link.

How do I show a Progress bar that fills automatically over time?

Bind Value to a variable you update on a timer. Create a Page Variable (e.g., progressValue, default 0), add a Set Variable action triggered by a repeating timer event, and increment the variable each tick. Bind the Progress block's Value to {{ progressValue }}. Stop the timer when the variable reaches your Max value.