Primitive Zero
classless
Every semantic HTML tag, styled globally. A raw <button>, <blockquote>, or <details> already looks right — no class required.
Bold · italic · code · link
Catalog
Every UI piece in RenDS, organized by atomic layer. Start from foundations, climb to primitives, compose into composites, ship as patterns. Each card links to a dedicated documentation page when one exists, or to the showcase example when it doesn't.
Layer 1
Before there's a component, there's a foundation. Raw HTML elements styled by tokens. Layout primitives that take any content and arrange it. The token system that makes everything else themeable. Read these first; the rest is composition on top.
3 foundations · all documented
classless
Every semantic HTML tag, styled globally. A raw <button>, <blockquote>, or <details> already looks right — no class required.
Bold · italic · code · link
CSS custom properties
Three-tier system: raw primitives (--blue-500), semantic meaning (--color-accent), component hooks (--ren-btn-bg). Override the layer that matches your intent.
ren-stack, ren-grid…
Eleven composable layouts — Stack, Cluster, Grid, Cover, With-sidebar — that nest into any page skeleton without writing custom flex.
Layer 2
Single-purpose CSS-only components. Each one does one thing well: a button looks like a button, a tag looks like a tag, a field accepts input. Variants, sizes, and states are class modifiers — no JavaScript required.
19 components · all documented
ren-btn
Multi-variant action trigger with built-in loading and disabled states. Six variants × three sizes, AA contrast, 44 px touch target.
ren-card
Flexible content container with optional header, body, footer. Five visual variants, status accents, interactive and selectable patterns.
ren-badge
Small contextual labels for status, tags, or counters. Eight variants including dot and outline.
ren-tag
Removable filter chips for selections, categories, and active filters.
ren-link
Variants beyond plain anchor: subtle, plain, destructive, with icon affordances.
ren-banner
Page-level callout for system-wide messages: maintenance, success, errors. Five status variants.
ren-breadcrumb
Trail of links showing the user's location in a hierarchical structure.
ren-pagination
Page navigation for lists. Supports numbered, simple, and truncated variants.
ren-separator
Horizontal or vertical dividers, with optional center label.
ren-avatar
Profile images, initials, and status indicators. Six sizes, square or round.
ren-spinner
Loading indicator. Five sizes (xs to xl) plus a light variant for dark surfaces.
ren-skeleton
Placeholder shapes for loading content. Pulses subtly to signal "data on the way".
kbd
Keyboard shortcut keys. Renders <kbd> with mono type and a subtle bottom border.
ren-field, ren-input
Label + input + helper + error, with auto-wired ARIA. The smallest accessible unit of a form. Sizes, icons, validation states, and works with input / textarea / select.
ren-checkbox
Boolean input wrapped around a native checkbox. Custom-styled control, native semantics, indeterminate state included.
ren-switch
Two-state toggle for settings that take effect immediately. Same input as Checkbox, different visual metaphor.
ren-radio
Mutually-exclusive choices. Always grouped under a shared name, always wrapped in a fieldset with a legend.
ren-progress
Determinate or indeterminate progress bar. Accent or status colors.
svg
Convention for SVG icons. 16 / 20 / 24 px sizing, currentColor stroke, semantic alt text.
Layer 3
Multi-part components. May involve more than one element, may need a sprinkle of JavaScript for keyboard navigation or focus management. A dialog is a composite. So is a tabset, a select, a tooltip. Each ships with the keyboard and ARIA work already done.
26 components · all documented
ren-tabs
Switch between content panels via the ARIA tablist pattern. Three visual variants (underline, pills, enclosed), horizontal or vertical, manual or automatic activation.
ren-accordion
Collapsible panels with single or multi-open mode. Built on <details> for free a11y.
ren-dialog
Modal dialog built on the native <dialog> element. Focus trap, escape-to-close, click-outside dismiss, smooth animations. Five sizes plus an alert variant.
ren-alert-dialog
Confirmation dialog for destructive actions. Forces an explicit choice — no click-outside dismiss.
ren-toast
Transient notification with aria-live announcement, auto-dismiss, dismiss button and optional action slot. Four status variants.
ren-tooltip
Hover/focus hint. Hover delay, focus trigger for keyboard, mobile-friendly tap.
ren-popover
Floating panel anchored to a trigger. Native Popover API where supported, polyfilled where not.
ren-hover-card
Rich-content tooltip — image + text + actions. For previews of links or profiles.
ren-sheet
Edge-anchored panel — bottom on mobile, side on desktop. For supplementary navigation or filters.
ren-collapsible
Single show/hide region. The simplest form of progressive disclosure.
ren-toolbar
Grouped action buttons with arrow-key navigation. For editors, canvases, table headers.
ren-dropzone
File-drop area with drag-over state, click-to-browse fallback, multiple-file support.
ren-combobox
Searchable select. Type to filter, arrow keys to navigate, async loading via the ren-search event.
ren-slider
Range input with single or dual handle. Keyboard-accessible, with tick marks and value labels.
ren-toggle-group
Segmented control for single or multi-select among 2–5 options. View pickers, alignment buttons.
ren-scroll-area
Scrollable region with branded thin scrollbars on platforms that support custom styling.
ren-select
Custom-styled dropdown for choosing one option. Trigger + popover listbox with full keyboard navigation and typeahead.
ren-menu
Dropdown list of actions anchored to a trigger. Keyboard typeahead, separators, group labels, destructive item styling.
ren-context-menu
Right-click menu. Same engine as Menu but anchored to pointer.
ren-number-field
Numeric stepper with min/max, step, decimals, and clamping behavior.
ren-otp
One-time-code input. Auto-advances on digit, paste-friendly, supports mask.
ren-color-picker
Color selection with HSL/RGB/Hex switching, palette, and recent swatches.
ren-calendar
Monthly calendar grid. Keyboard navigation, locale-aware, range select option.
ren-date-picker
Input + calendar popover. Min/max constraints, disabled dates, format-aware.
ren-date-range-picker
Two-handle date range. Presets (last 7 days, this month). Constrained ranges.
ren-carousel
Scroll-snap gallery with prev/next buttons and dot indicators. Touch- and keyboard-friendly.
Layer 4
Full UX patterns made of multiple primitives and composites working together. A nav bar, a sidebar, a data table — these are not single components, they're arrangements of components that solve a recurring screen-level problem.
8 patterns · all documented
ren-nav
Top navigation bar with brand, primary links, search, and account menu.
ren-sidebar
Left navigation column for app shells. Collapsible sections, active-route indicator.
ren-command
Searchable command launcher (⌘K). Fuzzy search, keyboard-first, grouping by category.
ren-empty-state
"Nothing here yet" panel with illustration, headline, body copy, and a clear next action.
ren-data-table
Sortable, filterable, paginated table. Sticky header, row selection, dense / comfortable density.
ren-form
Conventions for inline error messages, summary banners, and submit-button state.
ren-menubar
Horizontal menu bar with sub-menus. For desktop-style apps with File / Edit / View.
ren-ai
Conversation thread, message bubble, streaming indicator, suggestion chip — the AI-app starter kit.