suiss/ui
  • Docs
  • Components
  • Patterns
  • Interactions
  • Charts
  • Blocks
GitHubGet started
DocsComponentsPatternsInteractionsChartsBlocks
Blocks56
  • Overview
Bag
  • Checkout
  • Configure
  • Review
Bento
  • Closer Look
  • Features
  • Stats
Chat
  • Conversations
  • Support
  • Thread
Dash
  • Analytics
  • Health
  • Store
Empty
  • Bag
  • Offline
  • Search
Footer
  • Compact
  • Directory
  • Services
Grid
  • Accessories
  • Carousel
  • Lineup
Hero
  • Cinematic
  • Product
  • Tiles
Inbox
  • Categories
  • Mail
  • Support
Log
  • Activity
  • Live
  • Security
Login
  • Account
  • Passkey
  • Sheet
Nav
  • Categories
  • Global
  • Local
Onboarding
  • Onboarding
Permission
  • Primer
Price
  • Bundle
  • Care
  • Storage
Roles
  • Editor
  • Matrix
  • Requests
Settings
  • Account
  • Device
  • Notifications
Signup
  • Form
  • Steps
  • Trial
Users
  • Detail
  • Invite
  • Table
Verify
  • Code
  • Device
  • Email

suiss/ui · Block

Bento Stats

A dark bento grid of headline product stats, with a photo tile and an animated charging bar.

Bento Stats is an open-source block from suiss/ui for React. The @esuiss/ui CLI copies its source into your project, so you own the code.

components/blocks/bento-stats.tsx
"use client"

import * as React from "react"

import { Progress } from "@/components/ui/progress"

const image =
  "https://images.unsplash.com/photo-1760978631841-f3754859ca59?w=900&q=80&auto=format&fit=crop"

export function BentoStats() {
  const [charge, setCharge] = React.useState(0)

  React.useEffect(() => {
    const timer = window.setTimeout(() => setCharge(50), 400)
    return () => window.clearTimeout(timer)
  }, [])

A dark bento grid of headline numbers: a full-bleed photo tile, two tiles with large gradient figures and a wide charging tile whose Progress bar fills when the section loads. Tiles stack on mobile and form a three-column grid on desktop. It always renders dark, whatever the site theme, which suits a dramatic stats or specs band on a product page.

Installation

CLI

$ pnpm dlx shadcn@latest add @esuiss/bento-stats

Works in any project with a components.json. See Installation for the one-line registry setup. Or use the suiss/ui CLI:

$ pnpm dlx @esuiss/ui@latest add blocks bento-stats

Manual

  1. Add the pieces it builds on: Progress.

  2. Copy the source into components/blocks/bento-stats.tsx:

components/blocks/bento-stats.tsx
"use client"

import * as React from "react"

import { Progress } from "@/components/ui/progress"

const image =
  "https://images.unsplash.com/photo-1760978631841-f3754859ca59?w=900&q=80&auto=format&fit=crop"

export function BentoStats() {
  const [charge, setCharge] = React.useState(0)

  React.useEffect(() => {
    const timer = window.setTimeout(() => setCharge(50), 400)
    return () => window.clearTimeout(timer)
  }, [])
  1. Update the import paths to match your project.

Usage

import { BentoStats } from "@/components/blocks/bento-stats"
<BentoStats />

Edit the copy and figures inline and swap the photo in the image constant. The bar animates from 0 to 50 shortly after mount; change the target to match your claim.

Notes

The photo tile is a CSS background with no text alternative, so keep its heading meaningful. The image is an Unsplash placeholder.

NextChat ConversationsPreviousBento Features

On this page

  1. 01Installation
    • CLI
    • Manual
  2. 02Usage
  3. 03Notes