Scroller

A horizontal scroll container with gradient fade indicators. Ideal for tab bars, tag lists, and other content that may overflow its container.

Design Tokens

CSS custom properties for consistent theming

Components

Reusable UI building blocks with a unified API

Accessibility

WCAG 2.1 compliant out of the box

Dark Mode

First-class dark theme support built in

TypeScript

Fully typed API surface across all frameworks

Web Standards

Native custom elements with Shadow DOM

Framework Agnostic

Works with React, Angular, Vue, and vanilla JS

Motion Safe

Respects prefers-reduced-motion globally

<diwa-scroller align-scroll-indicator="center">
  <div style='{"display":"flex","gap":"16px","padding":"16px 4px"}'>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Design Tokens</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>CSS custom properties for consistent theming</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Components</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>Reusable UI building blocks with a unified API</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Accessibility</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>WCAG 2.1 compliant out of the box</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Dark Mode</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>First-class dark theme support built in</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>TypeScript</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>Fully typed API surface across all frameworks</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Web Standards</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>Native custom elements with Shadow DOM</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Framework Agnostic</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>Works with React, Angular, Vue, and vanilla JS</p>
    </div>
    <div style='{"width":"180px","flexShrink":0,"background":"var(--diwa-bg-elevated)","border":"1px solid var(--diwa-border)","borderRadius":"8px","padding":"16px","boxSizing":"border-box"}'>
      <p style='{"margin":"0 0 6px","fontWeight":"600","fontSize":"13px","color":"var(--diwa-text-primary)","lineHeight":"1.3"}'>Motion Safe</p>
      <p style='{"margin":"0","fontSize":"12px","color":"var(--diwa-text-secondary)","lineHeight":"1.5"}'>Respects prefers-reduced-motion globally</p>
    </div>
  </div>
</diwa-scroller>