MiHCM
layout/@mihcm/ui·v0.21.0·stable

ScrollArea

Custom-styled scrollable container with thin translucent scrollbars. Powered by Radix.

Vertical scroll

A fixed-height list with thin scrollbar.

Tags

Tag 1
Tag 2
Tag 3
Tag 4
Tag 5
Tag 6
Tag 7
Tag 8
Tag 9
Tag 10
Tag 11
Tag 12
Tag 13
Tag 14
Tag 15
Tag 16
Tag 17
Tag 18
Tag 19
Tag 20
Tag 21
Tag 22
Tag 23
Tag 24
Tag 25
Tag 26
Tag 27
Tag 28
Tag 29
Tag 30
import { ScrollArea } from '@mihcm/ui/ScrollArea';
 
const TAGS = Array.from({ length: 30 }, (_, i) => `Tag ${i + 1}`);
 
<ScrollArea className="h-72 w-48 rounded-xl border border-border">
  <div className="p-4">
    <h4 className="mb-4 text-sm font-semibold">Tags</h4>
    {TAGS.map((tag) => (
      <div key={tag} className="border-b border-border py-2 text-sm">
        {tag}
      </div>
    ))}
  </div>
</ScrollArea>

Horizontal scroll

A row of items that overflows horizontally.

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
Item 7
Item 8
Item 9
Item 10
Item 11
Item 12
Item 13
Item 14
Item 15
Item 16
Item 17
Item 18
Item 19
Item 20
import { ScrollArea, ScrollBar } from '@mihcm/ui/ScrollArea';
 
<ScrollArea className="w-96 whitespace-nowrap rounded-xl border border-border">
  <div className="flex gap-4 p-4">
    {Array.from({ length: 20 }, (_, i) => (
      <div
        key={i}
        className="inline-flex h-24 w-32 shrink-0 items-center justify-center rounded-md border border-border text-sm"
      >
        Item {i + 1}
      </div>
    ))}
  </div>
  <ScrollBar orientation="horizontal" />
</ScrollArea>

Inside a sidebar

<aside className="w-64 border-r border-border">
  <ScrollArea className="h-screen">
    <nav className="p-4 space-y-1">
      {/* navigation items */}
    </nav>
  </ScrollArea>
</aside>