Zetta v1.6

Components · Actions

Button link icon

The quietest action: a borderless 32px icon at the lowest emphasis, for low-priority affordances like help, external links or inline tools. It renders in the Primary role and simply dims on hover — no fill, no border.

Preview

Build with the skill

No package to install — hand this to your AI to generate or migrate the component in your stack.

Prompt for your AI
Apply the Zetta "Button link icon" component to this project using the zetta-design-md skill.

WHEN TO USE
- Migrating or fixing existing code (the common case): audit the current implementation against the `button-link-icon` spec (variants: default, hover, disabled) and CORRECT every deviation — replace off-spec values, don't only add new ones.
- New component: build it to the `button-link-icon` spec in this project's stack.

AUDIT & FIX (when the component already exists)
Compare it to the skill's spec and fix, don't just append: hardcoded colors/hex, off-scale radius, wrong fonts, dark/navy fills, shadows used in place of borders (or missing borders), brand lime used as a CTA or interaction (must be primary indigo), and any missing or wrong hover / focus / active / disabled / invalid state or missing 2px focus ring. Replace each with the correct Zetta token.

ALWAYS
- Pull the authoritative spec and tokens from the skill — never guess or hardcode values.
- Use this project's own component conventions and framework idioms.
- Honor the Zetta guardrails (brand = identity only, primary = interaction, shadows for overlays) and verify in Light, Dark, and Accessibility.

Anatomy & rules

┌──────────────────┐
│       [icon]     │  ← 32×32px anchor
└──────────────────┘
State Icon color Notes
Default {colors.primary}
Hover {colors.primary} at 75% opacity
Focus {colors.primary} + 2px solid {colors.border-focus} outline Keyboard only
Active {colors.primary-active} Mouse down
Disabled {colors.disabled-text} aria-disabled="true"

When to use

  • Icon-only navigation to another page or external resource.

When not to use

  • When clicking triggers an action (submit, delete, open modal) — use Icon Button.

Do

  • Always provide aria-label with the destination or action ("View profile", "Open documentation").
  • Add rel="noopener noreferrer" when using target="_blank".
  • aria-label required: action verb matching destination, e.g. "Open settings", "View profile".
  • Tooltip must match aria-label.
  • Use only for navigational actions — not for triggering commands.

Keyboard

Key Behavior
Tab Move focus to the link
Enter Follow the link destination

Accessibility

  • ARIA role: implicit role="link" on <a>. Do not use <button> for navigation.
  • Required: aria-label — the icon alone is not accessible.

Spec

Values and token references resolved straight from the Zetta spec.

button-link-icon
backgroundColor
transparent
iconColor
{colors.primary}
borderColor
transparent
borderRadius
{rounded.base}
width
32px
height
32px
iconSize
{icons.sizeMap.md}
cursor
pointer
display
flex
alignItems
center
justifyContent
center
button-link-icon-hover
iconColor
{colors.primary}
opacity
0.75
button-link-icon-focus
outline
2px solid {colors.border-focus}
outlineOffset
2px
button-link-icon-disabled
iconColor
{colors.disabled-text}
cursor
not-allowed
pointerEvents
none