Unify Logo Footer.svg
Unify Applications
Logo
Alert & Loader

Alert & Loader

Logo

7 mins READ

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.

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

VariantColor SchemeTypical Use
brandBrand colorFeature announcements, tips
defaultNeutral (default when variant is invalid)General informational notices
errorRed / destructiveErrors, failures, destructive warnings
warningAmber / yellowWarnings, quota alerts, degraded states
successGreenSuccess 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 ruleRestrict who sees the alert

Alert — Appearance Properties

PropertyTypeDefaultDescription
variantbrand | default | error | warning | successdefaultThe alert's color scheme. Falls back to "default" if invalid
startDecorator (Icon)icon (supports conditional values)InfoCircleIcon at the start of the alert. Can switch based on a condition
stylesstyle set1px borderWidth/min/max, flex layout, visibility, stroke, radius, background color, rotation
visibilityconditionsShow/hide the whole block
customCSSCSSCustom 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: Invalid variant falls back to default: If the variant is bound to a dynamic value and resolves to something invalid, the alert uses the "default" (neutral) color scheme.

Alert — Examples

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
visibilityconditionsAlwaysShow/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 horizontal progress bar 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

PropertyTypeDefaultDescription
valuenumber (bindable)The current progress value. Should be between min and max
minnumber0The minimum value (0% fill)
maxnumber100The maximum value (100% fill)
variantdeterminate | indeterminatedeterminateDeterminate shows a fixed value; indeterminate shows an animated "loading" bar with no value
colortheme color token or conditionalbrandThe fill bar's color. Supports conditional rules for threshold-based coloring
sizesm | md | lgmdThe bar's height
showLabelbooleantrueShow the numeric percentage label above or beside the bar
labelFormatstring expressionpercentageHow the label is formatted (e.g., "{{ value }}%" or a custom expression)
visibilityconditionsShow/hide the block
permissionspermission ruleRestrict who sees the block

Progress — Examples

Frequently Asked Questions

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. You can also set Content Style to dashed to show borders around each skeleton segment, which helps while positioning.

The Alert's Link URL field accepts any URL including relative paths to internal pages (e.g., /orders/{{ orderId }}). Opening in a new tab is not built into Alert — the link always opens in the current window. If you need more control (new tab, query params, onClick logic), use a Text 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.

BlockRelationship
CardFree-form container when the Alert's fixed layout is too rigid
ButtonAdds a real action to accompany an alert banner
TypographyPlain text without the colored banner treatment
TagInline status chips — use when you need a small marker inside a sentence or row, not a full-width banner