Diamond Diamond

ui · 59 variants · 10 categories

Button

59 button variants. Tailwind-only, Radix Slot composition, single file.

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

Solid & Filled

6 variants
solid
gradient
glow
pill
layer
arrow
§02

Outlined

6 variants
outline
dashed
double
fill
dotborder
trace
§03

Subtle

6 variants
ghost
soft
underline
caret
glass
stamp
§04

Expressive

6 variants
neobrutal
retro
pixel
terminal
aurora
sketch
§05

Shaped

5 variants
notch
chevron
ticket
mono-ticket
exec
§06

Utility

6 variants
icon-chip
split
circle
status
darkcard
lift
§07

Motion

6 variants
liquid
ring
scan
breathe
wave
morse
§08

Reactive

6 variants
magnet
reveal
progress
gooey
confetti
fold
§09

Surface

6 variants
paper
grain
tape
cloud
neumorph
longshadow
§10

Identity

6 variants
glitch
slash
scope
badge
counter
url

Usage Guide

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

Slots & states

  • leftIcon / rightIcon — adornments. Use Phosphor icons sized 14-16px to match text.
  • loading — replaces icons with a spinner, sets aria-busy, and forces disabled visually + interactively.
  • asChild — render as another element (e.g. <Link>) while keeping all the styles.
  • Native props (type, name, form, onClick, aria-*) pass straight through.

Composing with Next.js Link

<Button asChild variant="solid">
  <Link href="/pricing">See pricing →</Link>
</Button>

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.