# Button

Runs actions on click — trigger a workflow, refresh data, or update app state.

## Add it to an app

1. Open the app builder and find **Button** in the component palette.
2. Insert it into the intended region or container.
3. Set its properties in the inspector. Use a literal for a fixed value or a binding for a value supplied by the app.
4. Connect its events where the app should respond to a user gesture.
5. Preview with representative data and save after resolving validation problems.

The type name in the builder’s code view is `button`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Busy (`busy`) | boolean | No | Not specified | Supports expression bindings. Truthy disables the button and blocks onClick. |
| Text (`text`) | string | No | "Button" | The button label. The listed default is inserted when adding a new component. |

### Layout controls

Additional host-rendered controls: `sectionTitle`. These control the surrounding component region rather than the record values.

## Values available to bindings

This component declares no published values. Use its settings and any events to configure its behaviour.

## Events

- `onClick` — Clicked while not busy.

Connect only the actions the app needs. An event can fetch results, run an enabled data source, set state, update another component, show a notification, or navigate where supported.

## Keyboard and accessible labels

Accessible label source: `text`.

- Enter/Space activate it.

## Example: Run a workflow

| Setting | Example value |
| --- | --- |
| `text` | "Check now" |

When `onClick` occurs, the example performs:

- `triggerDataSource` with {"dataSourceId":"checks","inputRecords":[{"url":"{{ components.UrlInput.value }}"}],"mode":"run"}

## Example: Sidebar refresh, busy while running

| Setting | Example value |
| --- | --- |
| `busy` | "{{ dataSources.news.isRunning }}" |
| `sectionTitle` | "Actions" |
| `text` | "Refresh" |

When `onClick` occurs, the example performs:

- `triggerDataSource` with {"dataSourceId":"news","mode":"run"}

## If it is empty or unavailable

Check the source binding, the selected item, and the app’s access. A hosted document, table, review, or storage component needs the corresponding app capability; an offline preview cannot supply live private data. A source running with no results is different from an invalid binding. Inspect the app’s workflow and data source before changing the presentation.
