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.
On this page
ProTiles arriving in random, Bayer, diagonal or center out order.
Installation
Usage
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
| Prop | Type | Notes |
|---|---|---|
src, alt | string | alt is required: the accessible name, announced once the image is in |
progress | number | null | Real job progress, 0 to 1. null means running with no numbers. Leave it out for timer mode |
revealed | boolean | Timer mode: false holds the first frame, true plays once the image loads. Default true |
duration | number | Timer length in ms. Default 1400 |
onRevealed | () => void | Once per image, when the plain image shows |
onStatusChange | (status: "loading" | "ready" | "revealing" | "revealed" | "error") => void | |
aspectRatio, width, height | Set the frame before the image loads, so nothing shifts | |
paper | string | The ground under the effect. Token or CSS color. Default var(--chatcn-bg) |
announcement | string | false | What the live region says once revealed. Default Image ready: <alt> |
errorText, retryLabel | Copy for the error state and its reload button | |
columns | number | Tiles across. Default 8 |
rows | number | Tiles down. Defaults to the count that keeps tiles closest to square |
order | "random" | "bayer" | "rows" | "diagonal" | "center" | Default random |
seed | number | Default 1 |
maxPixels | number | Default 1.5 MP |
Keyboard
| Key | Action |
|---|---|
Tab | Reaches 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 youraltis always there, and the frame isaria-busyuntil 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: activethe 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.