Skip to content

Button Component

The Button component creates clickable buttons that trigger actions in your app. Use buttons to save data, navigate between views, delete records, open URLs, and more.

Buttons are the primary way users interact with your app. Each button can:

  • Trigger any action type (CRUD, navigation, messages)
  • Display with different visual styles
  • Include icons for clarity
  • Show confirmation dialogs for destructive actions
  • Be conditionally disabled based on data
  1. Open the Layout tab in your app editor
  2. Drag the Button component from the palette onto your canvas
  3. Select the component to open the settings panel
  4. Configure the label, action, and styling
SettingTypeDescription
LabelText/FormulaButton text
IconIcon pickerOptional icon
Icon PositionDropdownleft or right
VariantDropdownVisual style
SizeDropdownsm, md, or lg
ActionAction selectorAction to trigger on click
Disabled ConditionFormulaWhen button should be disabled
Confirm DialogToggleShow confirmation before action
Confirm MessageTextConfirmation dialog message

Choose the appropriate visual style for your button’s purpose:

VariantAppearanceUse Case
primarySolid background, brand colorPrimary actions (Save, Submit, Create)
secondaryMuted backgroundSecondary actions (Cancel, Back)
outlineBordered, transparent backgroundAlternative actions
ghostNo background, text onlySubtle actions, links
destructiveRed/warning colorDelete, Remove, Dangerous actions
Primary: "Save Changes", "Create New", "Submit"
Secondary: "Cancel", "Go Back", "Skip"
Outline: "Learn More", "View Details"
Ghost: "Edit", "More Options"
Destructive: "Delete", "Remove", "Revoke Access"
SizeDescriptionUse Case
smSmall, compactInline actions, tight spaces
mdMedium, defaultStandard buttons
lgLarge, prominentPrimary calls to action

Add icons to make buttons more recognizable:

  • left - Icon appears before the text (default)
  • right - Icon appears after the text

For compact buttons, use an icon with an empty label:

Label: (empty)
Icon: trash
Size: sm
ActionSuggested Icons
Createplus, plus-circle
Savesave, check
Editedit, pencil
Deletetrash, x
Navigatearrow-right, chevron-right
Downloaddownload, file-down
Uploadupload, file-up
Searchsearch, magnifying-glass
Refreshrefresh-cw, rotate-cw
Settingssettings, cog
  1. In the button settings, click Action
  2. Choose an existing action or create a new one
  3. Configure any action-specific parameters

For simple one-off actions, create them directly from the button settings:

  1. Click Action > Create New
  2. Choose the action type
  3. Configure the action parameters
  4. The action is created and assigned automatically
TypeDescription
Create RowInsert a new record
Update RowModify an existing record
Delete RowRemove a record
NavigateGo to another view
Open URLOpen an external link
Show MessageDisplay a notification
Run FormulaExecute a formula

Use formulas to create dynamic button text:

Label: Save {{$row.name}}
Label: {{IF($row.is_published, 'Unpublish', 'Publish')}}
Label: Delete ({{COUNT($selectedRows)}})

Conditionally disable buttons using formulas:

Disabled Condition: {{ISNULL($row.name) OR $row.name = ''}}
Disabled Condition: {{$user.role != 'admin'}}
Disabled Condition: {{$row.status = 'completed'}}
Disabled Condition: {{ISNULL($row.name) OR $row.email = '' OR $row.status = 'locked'}}

Disabled buttons appear grayed out and cannot be clicked.

For destructive or important actions, require user confirmation:

  1. Toggle Confirm Dialog to enabled
  2. Enter a custom Confirm Message
  3. Users must click “Confirm” before the action runs

Write clear, specific confirmation messages:

Are you sure you want to delete "{{$row.name}}"? This cannot be undone.
This will send {{COUNT($selectedRows)}} emails. Continue?
Publishing will make this visible to all users. Proceed?

Always use confirmation for:

  • Delete operations
  • Bulk actions affecting multiple records
  • Sending emails or notifications
  • Publishing or unpublishing content
  • Any action that cannot be undone

Buttons have access to context variables:

VariableDescriptionAvailability
$rowCurrent rowIn list row context
$selectedRowsSelected rowsWith list selection enabled
$userCurrent userAlways available
$appApp metadataAlways available
$paramsURL parametersAlways available
Label: Save Changes
Icon: save
Variant: primary
Size: md
Action: Update Row
Disabled Condition: {{!$hasChanges}}
Label: Delete
Icon: trash
Variant: destructive
Size: sm
Action: Delete Row
Confirm Dialog: enabled
Confirm Message: Delete "{{$row.name}}"? This cannot be undone.
Label: Add Item
Icon: plus
Icon Position: left
Variant: primary
Size: md
Action: Create Row
Label: View Details
Icon: arrow-right
Icon Position: right
Variant: outline
Size: sm
Action: Navigate
Target View: item-details
Parameters: id={{$row.id}}
Label: Delete Selected ({{COUNT($selectedRows)}})
Icon: trash
Variant: destructive
Size: md
Action: Delete Row (bulk)
Disabled Condition: {{COUNT($selectedRows) = 0}}
Confirm Dialog: enabled
Confirm Message: Delete {{COUNT($selectedRows)}} items?
Label: {{IF($row.is_active, 'Deactivate', 'Activate')}}
Icon: {{IF($row.is_active, 'pause', 'play')}}
Variant: {{IF($row.is_active, 'secondary', 'primary')}}
Action: Update Row
Field Values:
- is_active: {{!$row.is_active}}
Label: Open Document
Icon: external-link
Icon Position: right
Variant: ghost
Action: Open URL
URL: {{$row.document_url}}
Label: Submit
Icon: check
Variant: primary
Size: lg
Action: Create Row
Disabled Condition: {{ISNULL($form.name) OR ISNULL($form.email)}}
Confirm Dialog: enabled
Confirm Message: Submit this form?

Place multiple buttons together for related actions:

[Save Changes (primary)] [Cancel (secondary)]
[Add (primary)] [Edit (outline)] [Delete (destructive)]
[Edit icon] [Duplicate icon] [Delete icon]
  • Use one primary button per section for the main action
  • Use secondary/outline for alternative actions
  • Use ghost buttons for less important actions
  • Match button sizes within a group
  • Use larger buttons for calls to action
  • Use smaller buttons for inline/row actions
  • Use the same variant for similar actions across your app
  • Keep destructive actions visually distinct (red)
  • Maintain consistent icon usage
  • Always include descriptive label text
  • For icon-only buttons, the icon should be universally recognizable
  • Ensure disabled states are visually distinct
  • Provide clear feedback after actions complete
  • Buttons are focusable with Tab
  • Activate with Enter or Space
  • Focus state is visually indicated
IssueCauseSolution
Button does nothingNo action assignedAssign an action in settings
Action failsInvalid action configCheck action parameters
Always disabledFormula always trueReview disabled condition
Wrong labelFormula errorCheck formula syntax
  1. Remove the disabled condition to test the button
  2. Verify the action works with static values
  3. Check the browser console for errors
  4. Test formulas in the formula editor first