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
| Variant | Color Scheme | Typical Use |
| brand | Brand color | Feature announcements, tips |
| default | Neutral (default when variant is invalid) | 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
| Property | Type | Default | Description |
| title | string (bindable, translatable) | Alert | The alert's heading line |
| description | string (multi-line, bindable) | This is an alert message. | Body text under the title |
| descriptionType | "PLAIN_TEXT" | "MARKDOWN" | PLAIN_TEXT | How the description is rendered — plain text or Markdown (links, bold, lists) |
| linkText | string (bindable) | — | Label of the link button. Only shown when linkUrl is also set |
| linkUrl | string (URL, bindable) | — | Destination the link button opens. Setting this makes the link button appear |
| permissions | permission 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" if invalid |
| 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
| Binding | Type | Description |
{{ id.content.title }} | string | The current title |
{{ id.content.description }} | string | The current description |
{{ id.appearance.variant }} | string | The 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
| Type | Visual | Options | Platform |
| Default | Spinning arc | Size: xxs, xs, sm, md, lg, xl | All |
| AI | AI sparkle animation (fixed 24×24 px) | None (ignores Size setting) | All |
| Content | Skeleton shimmering bars (dashed) or single box (solid) | Style: dashed | solid; Radius; Color | All |
Loader — Appearance Properties
| Property | Type | Default | Appears When | Description |
| type | DEFAULT | AI | CONTENT | DEFAULT | Always | Which indicator to show |
| size | xxs | xs | sm | md | lg | xl | md (theme-dependent) | type = DEFAULT | The spinner's size |
| contentStyle | "dashed" | "solid" | dashed | type = CONTENT | Dashed = shimmer bars; Solid = one shimmer box |
| visibility | conditions | — | Always | Show/hide the block (bind this to a loading state) |
| styles | style set | fits content | Always | Width, 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
| Property | Type | Default | Description |
| value | number (bindable) | — | The current progress value. Should be between min and max |
| min | number | 0 | The minimum value (0% fill) |
| max | number | 100 | The maximum value (100% fill) |
| variant | determinate | indeterminate | determinate | Determinate shows a fixed value; indeterminate shows an animated "loading" bar with no value |
| color | theme color token or conditional | brand | The fill bar's color. Supports conditional rules for threshold-based coloring |
| size | sm | md | lg | md | The bar's height |
| showLabel | boolean | true | Show the numeric percentage label above or beside the bar |
| labelFormat | string expression | percentage | How the label is formatted (e.g., "{{ value }}%" or a custom expression) |
| visibility | conditions | — | Show/hide the block |
| permissions | permission rule | — | Restrict 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.
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 }}). 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.
Related Blocks
| 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 |