Skip to content

Components

Human’s UI is built with Lit web components. Each component uses design tokens exclusively — no hardcoded colors, sizes, or durations.

| Component | Tag | Description | | --------------- | ---------------------- | ------------------------------------------ | | Button | <hu-button> | Primary, secondary, ghost, danger variants | | Badge | <hu-badge> | Status indicators with semantic colors | | Tooltip | <hu-tooltip> | Contextual help on hover/focus | | Toggle | <hu-toggle> | On/off switches with micro-physics | | Command Palette | <hu-command-palette> | CMD+K global search |

| Component | Tag | Description | | --------- | -------------- | ---------------------------------- | | Card | <hu-card> | Elevated surface with glass option | | Sheet | <hu-sheet> | Slide-in panel from edge | | Modal | <hu-modal> | Centered dialog with backdrop | | Dialog | <hu-dialog> | Confirmation/action dialogs | | Sidebar | <hu-sidebar> | Navigation sidebar |

| Component | Tag | Description | | ------------ | ------------------- | ----------------------------------- | | Avatar | <hu-avatar> | User avatars with fallback initials | | Floating Mic | <hu-floating-mic> | Voice input indicator |

Every component consumes tokens through CSS custom properties. Example from hu-card:

:host {
background: var(--hu-bg-surface);
border: 1px solid var(--hu-border-subtle);
border-radius: var(--hu-radius-lg);
box-shadow: var(--hu-shadow-card);
padding: var(--hu-space-lg);
}
:host(:hover) {
box-shadow: var(--hu-shadow-lg);
transition: box-shadow var(--hu-duration-normal) var(--hu-ease-default);
}
<hu-button variant="primary">Save</hu-button>
<hu-button variant="secondary">Cancel</hu-button>
<hu-button variant="ghost">More info</hu-button>
<hu-button variant="danger">Delete</hu-button>
  • Primary: Accent background, on-accent text, gradient overlay, physics press
  • Secondary: Surface background, accent text, subtle border
  • Ghost: Transparent background, accent text, hover overlay
  • Danger: Error background, on-error text
<hu-badge variant="success">Online</hu-badge>
<hu-badge variant="warning">Pending</hu-badge>
<hu-badge variant="error">Failed</hu-badge>
<hu-badge variant="info">New</hu-badge>

All components implement:

  • Focus management: Visible focus rings using --hu-focus-ring token
  • Keyboard navigation: Full keyboard support (Enter, Space, Escape, Arrow keys)
  • ARIA attributes: Proper roles, states, and properties
  • Screen reader text: Hidden labels where visual indicators are insufficient
:host(:focus-visible) {
outline: var(--hu-focus-ring-width) solid var(--hu-focus-ring);
outline-offset: var(--hu-focus-ring-offset);
}

Components apply micro-physics contextually:

| Component | Interaction | Physics Preset | | -------------------- | ----------- | --------------------------------- | | hu-button | Click | button-press / button-release | | hu-card | Hover | card-hover | | hu-modal | Open | modal-anticipation | | hu-toggle | Toggle | toggle-squash | | hu-command-palette | Open | dropdown-anticipation |

Components can opt into glass tiers:

<hu-card class="glass">Standard glass card</hu-card>
<hu-card class="glass-prominent">Prominent glass card</hu-card>

The full component catalog with interactive examples is available at /catalog.html in the UI development server:

5173/catalog.html
cd ui && npm run dev