Vivid Logo Vivid

Button

Buttons trigger an action, such as submitting a form, closing a dialog, or navigating to a new page.

Appearance

Filled

  • Highest-priority actions
  • Use once per section
  • Examples: Submit, Confirm or Save

Outlined

  • Non-critical actions
  • Examples: Back, Cancel, Edit or Add

Ghost

  • Tertiary actions
  • Examples: View terms, Back or Close
  • Group inside a Action Group for related actions

Outlined Light

  • Non-critical actions
  • Examples: Back, Cancel, Edit or Add

Ghost Light

  • Tertiary actions
  • Examples: View terms, Back or Close
  • Group inside a Action Group for related actions

Connotation

Accent

  • Purpose: Neutral
  • Examples: Close, Exit, Edit
  • Use when purpose is neither constructive or distructive

CTA

  • Highest-priority actions that are required to complete the user’s task
  • Only used once per screen

Announcement

Success

  • Represents a constructive action
  • Examples: complete, approve, resolve, add etc.

Alert

  • Represents actions that could have destructive effects on the user’s data
  • Examples: delete or remove

Icons

The icon-only button is a separate component in Figma.

  • Examples: toolbar or in the meta slot of a card
  • Clarify the purpose of the button using a tooltip
  • Place ghost appearance buttons inside an action-group

Size

The smaller size buttons (condensed and super-condensed) are useful when used inside other components (inside data-grid-cell or action-group for a toolbar) as they take up less space.

Ghost Buttons

Disabled Buttons

Why Disabled Buttons Are Problematic

  1. Cause deception
    The call to action text draws users to click, but nothing happens. This causes confusion, leading users to think that the interface is broken.
  2. Insufficient contrast
    Even if the button is disabled, the button label is still crucial for understanding the interface.
  3. No feedback
    Without feedback, users don't know what has gone wrong or how to fix the error.
  4. System complexity
    Disabled buttons are often used to prevent wasteful clicks, but this puts pressure on the design / implementation to provide robust inline validation. The reality is, inline validation systems can fail, leaving the user stuck with a disabled button and no way to complete the form.

When Disabled Buttons Can Be Useful

While disabled buttons often create more problems than they solve, there are limited scenarios where they can improve the user experience if designed carefully:

  1. Preventing duplicate submissions
    After a critical action such as submitting a payment, booking, or form, the button can be temporarily disabled to avoid multiple clicks and duplicate transactions. This should always be paired with visible feedback (e.g., changing the label to “Processing…” and showing a spinner). We have the pending feature for this situation.
  2. Communicating temporary unavailability
    Buttons may be disabled while content is loading or while a dependent process finishes (eg. waiting for a verification SMS). This should be short-lived, and the button state must be updated as soon as the action becomes available.

Best Practices

  • Always provide visible and accessible feedback when a button is disabled (e.g., helper text, inline validation, or an explanatory tooltip).
  • Prefer inline error messages and contextual feedback over disabling buttons—this often gives a clearer and more usable experience.