Skip to content
KramorDS
Switch light or dark

Components

Actions

Buttons start, approve, pause and delete things. Each view has at most one primary action, and destructive actions always name what they remove.

ButtonButtonLinkbuttonStyles()

Variants

Hierarchy comes from the variant, not from size. Primary for the one action that moves the work forward, secondary and outline for the rest, ghost for low emphasis and danger for anything that removes data.
Six variantsShown in both modes from the same tokens.
light
dark

Sizes

Medium is the portal default at 36px. Small fits table rows and toolbars at 32px. Large is for onboarding and empty states. Every size clears the 24px minimum target from WCAG 2.2.
Sizes

States

Hover darkens the fill, press nudges the button down by a pixel, and focus shows a 2px ring with a 2px gap. Disabled buttons switch to the muted surface so they stay legible but clearly inactive. Loading keeps the label and adds a spinner.
Loading and disabledPress Tab to see the focus ring. The first button runs a short example.

Icons and icon buttons

Leading icons describe the action, trailing arrows promise navigation. Icon-only buttons always carry an accessible name and a tooltip.
With icons
Pause dispatchDelete rule

API

Button accepts every native button attribute. Type defaults to button so it never submits a form by accident.
PropTypeDefaultDescription
variant'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'link''primary'Visual weight and meaning.
size'sm' | 'md' | 'lg' | 'icon-sm' | 'icon' | 'icon-lg''md'Height, padding and icon size.
loadingbooleanfalseShows a spinner, sets aria-busy and disables the button.
disabledbooleanfalseMoves to the muted surface with a not-allowed cursor.
type'button' | 'submit' | 'reset''button'Set submit explicitly inside forms.

Do

One primary action per view

The primary button marks the single step that moves the migration forward. Everything else steps down a level.

Don't

Stack several primary buttons

When everything is primary nothing is. Operators hesitate, and the riskiest action looks as safe as the routine one.

Do

Name the object of a destructive action

“Delete 12 redirects” tells the operator exactly what disappears. Pair it with a confirmation that repeats the count.

Don't

Use vague verbs on risky buttons

“OK”, “Continue” or “Proceed” on a destructive dialog invites a reflex click.

Overview
Color
Typography
Space, shape and motion
Actions
Forms
Feedback
Data display
Navigation
Overlays
Portal shell
Status and lifecycle
Trust and safety
Template gallery
Overview screen
Connections screen
Studio screen
Validation screen
Recovery screen
Governance screen
Settings screen
Switch light or dark mode