Alphaonchain-ui is experimental. Components, docs, and registry URLs may change before a stable release.
onchain-ui
Components

Token Stack

Displays overlapping token logos for baskets, pools, routes, and portfolio rows.

Use TokenStack when a UI needs to show a group of assets at a glance: index baskets, liquidity pools, swap routes, portfolio composition, and multi-token positions.

Loading...
token-stack.tsxShow code
import { TokenStack } from "@/components/ui/token-stack"const tokens = [  { symbol: "ETH", name: "Ethereum", src: "https://assets.coingecko.com/coins/images/279/large/ethereum.png" },  { symbol: "USDC", name: "USD Coin", src: "https://assets.coingecko.com/coins/images/6319/large/USD_Coin_icon.png" },  { symbol: "AERO", name: "Aerodrome", src: "https://assets.coingecko.com/coins/images/31745/large/token.png" },  { symbol: "cbBTC", name: "Coinbase Wrapped BTC", src: "https://assets.coingecko.com/coins/images/40143/large/cbbtc.webp" },]export function TokenStackDemo() {  return <TokenStack tokens={tokens} />}

Installation

npx shadcn add https://onchain-ui.dev/r/token-stack.json
Open in

Requirements

Tooltips compose the standard shadcn tooltip. The install adds it if your app does not already have components/ui/tooltip.tsx; if you do, your existing (possibly customized) tooltip is used as-is. Wrap your app with TooltipProvider if you have not already.

Usage

import { TokenStack } from "@/components/ui/token-stack"

<TokenStack tokens={tokens} limit={5} />

TokenStack composes TokenLogo by default and supports a renderToken escape hatch for curated icon libraries, chain badge overlays, or app-specific token treatments.

Examples

Overflow

Limit visible tokens and show a +N overflow indicator.

Loading...
token-stack-overflow.tsxShow code
import { TokenStack } from "@/components/ui/token-stack"export function TokenStackOverflow({ tokens }) {  return <TokenStack tokens={tokens} limit={4} />}

Tooltips

Enable tooltips when the stack appears without a nearby legend. The overflow tooltip lists hidden tokens by default.

Loading...
token-stack-tooltip.tsxShow code
import { TokenStack } from "@/components/ui/token-stack"export function TokenStackTooltip({ tokens }) {  return <TokenStack tokens={tokens} limit={4} showTooltip />}

Sizes

Match the stack size to tables, cards, or larger app surfaces.

Loading...
token-stack-sizes.tsxShow code
import { TokenStack } from "@/components/ui/token-stack"export function TokenStackSizes({ tokens }) {  return (    <div className="flex items-center gap-6">      <TokenStack tokens={tokens} size="sm" />      <TokenStack tokens={tokens} size="md" />      <TokenStack tokens={tokens} size="lg" />    </div>  )}

Custom Render

Use renderToken when you want to render Cryptocons, chain overlays, or a branded token treatment.

Loading...
token-stack-custom-render.tsxShow code
import { TokenLogo } from "@/components/ui/token-logo"import { TokenStack } from "@/components/ui/token-stack"export function TokenStackCustomRender({ tokens }) {  return (    <TokenStack      tokens={tokens}      renderToken={(token) => (        <TokenLogo          symbol={token.symbol}          name={token.name}          fallback={token.symbol?.slice(0, 1)}          className="border-primary/30 bg-primary/10 text-primary"        />      )}    />  )}

Props

PropTypeDefaultDescription
tokensTokenStackItem[]-Tokens to display
limitnumber5Maximum visible tokens before overflow
size"xs" | "sm" | "md" | "lg" | "xl""md"Token logo size
direction"left" | "right""left"Overlap direction
showOverflowbooleantrueShow overflow count when tokens exceed limit
renderOverflow(count: number) => ReactNode-Custom overflow renderer
renderToken(token, index) => ReactNode-Custom token renderer
showTooltipbooleanfalseShow animated tooltips for tokens
getTooltipContent(token, index) => ReactNodeToken name, symbol, then addressToken tooltip content
getOverflowTooltipContent(tokens) => ReactNodeHidden token symbols/namesOverflow tooltip content
aria-labelstring"Token stack"Accessible label for the group
classNamestring-Applied to the root wrapper
itemClassNamestring-Applied to each token wrapper
overflowClassNamestring-Applied to the overflow item

On this page