Diamond Diamond

ui · 24 variants · 5 categories

Input

Consolidated single-line input — text, password, number, search and masked types in one component. Wraps the real <input>; visual variants live in `variant`.

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

Text

6 variants
classic
underline
filled
floating
terminal
search-pill
§02

Password

6 variants
reveal
strength
underline-reveal
digits
terminal-password
  • 8+ characters
  • 1 uppercase
  • 1 number
  • 1 symbol
criteria
§03

Number

6 variants
stepper
vertical-stepper
0
slider
$USD
currency
pick-one-to-nine
terminal-number
§04

Search

5 variants
⌘K
search-cmd
search-soft
search-floaty
search-grep
All
search-scoped
§05

Mask

1 variant
mask

Usage Guide

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

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.