Diamond Diamond

ui · 6 variants · 1 categories

List

Vertical grouping primitive — data-driven items with leading/trailing slots, custom renderer, or composition.

npx "@rueda.dev/gems-diamond" add list
§01

Display

6 variants
default
  • 01Discover
  • 02Connect
  • 03Build
  • 04Ship
numbered
rich
terminal
  • Essay I
    Mar 2026
  • Essay II
    Apr 2026
  • Essay III
    May 2026
editorial
toggles

Usage Guide

How to wire up this component in your app — props, callbacks, customization, and the conventions Diamond shares across the library.

Item shape

interface ListItem {
  label: ReactNode;
  description?: ReactNode;
  leading?: ReactNode;
  trailing?: ReactNode;
  href?: string;       // renders the row as <a>
  onClick?: () => void;
}

Variants

  • default / rich — generic vertical list. Rich adds avatars + descriptions.
  • numbered — auto-increments via ::marker.
  • terminal — monospace, dark tones; good for command lists or logs.
  • editorial — large serif, single column.
  • toggles — designed to host trailing <input type='checkbox'>.

Universal patterns

Every Diamond component shares the same prop conventions, so once you learn one you can predict the others.

  • variant — discriminated union of every visual option. Categories shown above are docs-only metadata; the prop is a flat string union.
  • accent — any CSS color string. Overrides --diamond-accent just for that instance via inline style. Cascades into hover, ring, and selection states.
  • asChild (when present) — renders the underlying primitive via @radix-ui/react-slot, letting you compose with <Link>, motion.button, etc.
  • className — merged with internal Tailwind classes via cn(). Use it to override layout, spacing, or colors.
  • Native HTML attributes (onClick, aria-*, data-*, ref, etc.) flow through to the root element without any whitelist.
  • Diamond is the skin: zero domain state, zero fetch, zero providers. You wire data and reactions in your app code; the components just render and emit events.