Gloss UIv4.4
Architecture
Style Guide
Primitives
Input7
Output7
Actions
ButtonsDrop DownsCheckbox & ToggleLinks
Forms2
Dashboard10
Composites
Compositions
Planning
Applications

Prototypes

Gloss UIv4.4
Architecture
Style Guide
Primitives
Input7
Output7
Actions
ButtonsDrop DownsCheckbox & ToggleLinks
Forms2
Dashboard10
Composites
Compositions
Planning
Applications

Prototypes

Buttons

Elevated interactive elements that provide tactile feedback via scale and shadow compression on click.

Primary HierarchyInteractive
Default
Hover
Active (Pressed)
Disabled
Error-Disabled
Loading

Physics: Buttons use convex shadows (drop shadows) to create depth. On hover, shadow spreads and lifts. On active/press, shadow compresses and element translates down, simulating physical button press.

Secondary & Ghost
Default
Hover
Active
Disabled
Current State: default
Default
Resting state with base drop shadow simulation
Hover
Shadow spreads and lifts (-2px), background darkens slightly
Active (Pressed)
Shadow compresses, element translates down (+1px) simulating physical press

Button Sizes

Available sizes: sm (36px), md (48px - default), lg (56px)

Buttons with Icons

Small Size
Default Size
Large Size
Icons automatically scale with button size while maintaining proper alignment.

Error State

Error-Disabled State: Used when a button action is blocked by validation errors or missing required data. Unlike the standard disabled state, error-disabled buttons remain clickable to allow users to trigger error messages or validation feedback. The button displays with a faded appearance and a red error icon, with an optional tooltip message explaining the issue.
Usage Note:
Hover over the button above to see the error tooltip. The button is clickable and can trigger validation or scroll to the first error in a form.

Best Practices

Do

Use primary for main action, secondary for cancel/dismiss
Use icons alongside text for clarity
Use ghost variant for icon-only utility buttons

Don't

Don't use multiple primary buttons in the same context
Don't use icon-only buttons with low-contrast variants
Don't use overly verbose button text

Examples

Icon-Only Buttons

Use the iconOnly prop for square buttons that contain only an icon. This applies proper padding for a balanced appearance.

ButtonGroup

Group related buttons together with consistent spacing or attached styling. ButtonGroup can propagate size and variant to child buttons via context.

Horizontal Group (Default)
Attached Style
Vertical Orientation
Full Width Distribution

SplitButton

A split button combines a primary action with a dropdown menu for secondary actions. The main button handles the default action while the dropdown provides alternatives.

Basic SplitButton
With Icons and Dividers
Variants and Sizes

Props Reference

Button

PropTypeDefaultDescription
variant'primary' | 'secondary' | 'ghost''primary'Visual style variant
size'sm' | 'md' | 'lg''md'Button size (36px, 48px, 56px)
disabledbooleanfalseDisable the button
isLoadingbooleanfalseShow loading spinner
iconOnlybooleanfalseSquare button for icon-only content
leftIconstring | ReactNode-Icon before button text
rightIconstring | ReactNode-Icon after button text
errorstring-Error message (shows error-disabled state)

ButtonGroup

PropTypeDefaultDescription
orientation'horizontal' | 'vertical''horizontal'Layout direction
attachedbooleanfalseConnect buttons visually (no gaps, merged borders)
size'sm' | 'md' | 'lg'-Size applied to all child buttons
variantButtonVariant-Variant applied to all child buttons
fullWidthbooleanfalseButtons share available space equally
gap'none' | 'sm' | 'md' | 'lg''md'Gap between buttons (when not attached)

SplitButton

PropTypeDefaultDescription
childrenReactNoderequiredMain button content
onClick() => void-Main button click handler
menuItemsSplitButtonMenuItem[]requiredDropdown menu items
variant'primary' | 'secondary' | 'ghost''primary'Button style variant
size'sm' | 'md' | 'lg''md'Button size
disabledbooleanfalseDisable both buttons
leftIconstring | ReactNode-Icon for main button
dropdownIconstring | ReactNode'chevron-down'Icon for dropdown trigger

SplitButtonMenuItem

PropertyTypeDescription
labelReactNodeMenu item text
onClick() => voidClick handler
iconstring | ReactNodeOptional icon
disabledbooleanDisabled state
dividerbooleanShow divider before this item