Skip to content
Sign in
EffectsTile revealMenu

Tile revealPro

The image arrives as a grid of tiles that fade in, in random, Bayer, reading, diagonal or center out order. Good for 2 x 2 generation grids.

ProTiles arriving in random, Bayer, diagonal or center out order.

Installation

$ pnpm dlx shadcn@latest add @chatcn-pro/tile-reveal

Usage

tsx
import { TileReveal } from "@/components/ui/chatcn/pro/tile-reveal"

<TileReveal src={image.url} alt={image.prompt} order="bayer" seed={index} progress={job.progress} />

Each tile settles from a hair smaller than its cell, so the grid reads while it fills and closes seamlessly at the end. Give each image in a grid its own seed so the four never arrive in lockstep. rows mirrors in right to left.

Examples

Generation grid

Four jobs report on their own schedule; each image tiles in with its own seed.

ProA 2 x 2 generation where four jobs report on their own schedule and each image tiles in with its own seed.

States

Waiting for the image, running at 40%, running with no numbers, held by revealed={false}, revealed, a missing file, a timer and right to left.

ProEvery state of the tile reveal.

Props

PropTypeNotes
src, altstringalt is required: the accessible name, announced once the image is in
progressnumber | nullReal job progress, 0 to 1. null means running with no numbers. Leave it out for timer mode
revealedbooleanTimer mode: false holds the first frame, true plays once the image loads. Default true
durationnumberTimer length in ms. Default 1400
onRevealed() => voidOnce per image, when the plain image shows
onStatusChange(status: "loading" | "ready" | "revealing" | "revealed" | "error") => void
aspectRatio, width, heightSet the frame before the image loads, so nothing shifts
paperstringThe ground under the effect. Token or CSS color. Default var(--chatcn-bg)
announcementstring | falseWhat the live region says once revealed. Default Image ready: <alt>
errorText, retryLabelCopy for the error state and its reload button
columnsnumberTiles across. Default 8
rowsnumberTiles down. Defaults to the count that keeps tiles closest to square
order"random" | "bayer" | "rows" | "diagonal" | "center"Default random
seednumberDefault 1
maxPixelsnumberDefault 1.5 MP

Keyboard

KeyAction
TabReaches the Reload image button in the error state. The reveal itself takes no focus

Accessibility

  • The effect layer is aria-hidden. The real <img> with your alt is always there, and the frame is aria-busy until the reveal ends.
  • A polite live region says Image ready: <alt> once, when the plain image shows. Progress ticks are never announced.
  • Under forced-colors: active the effect hides and the plain image shows with system colors.
  • A broken file shows what happened and a Reload image button that retries the download.

Motion

  • Each tile fades in over 22% of the run from scale 0.94 inside its own cell. Opacity and scale only.
  • Under reduced motion one still frame holds while the job runs, then the image crossfades in over 200 ms. Nothing moves.
  • The timer only runs on screen in a visible tab; offscreen it waits where it was.