Vibary.ai
← Vibe Coding

Filtered to Nothing

The reset action slides in beside the chips, and the chips give one small nudge to name the cause.

empty-statesminimalfriendlyautomatic · finite · intermediate · ~1.4s
Variant

The animated component in this preview is rendered from the canonical file shown here. The surrounding demo shell only provides context and is not part of the copied code.

323 lines · react + motion only
import { useState } from "react";
import { AnimatePresence, motion, useReducedMotion } from "motion/react";

/**
 * Vibary · Filtered to Nothing
 *
 * An empty result set caused by filters is not the same as an empty
 * database, and the motion says so: the reset action slides in beside

About this pattern

A list emptied by filters looks identical to a list with no data in it, and the difference decides what the reader does next. So the motion connects the two: the empty block settles in, the reset action slides into the chip row rather than under the message, and the chips themselves lift two pixels and come back once — a pointer at the cause, not a shake at the reader. Clearing drops the chips out and brings the rows back inside the same frame, which keeps the whole exchange in one place. Reduced motion drops the nudge outright; the sentence already names the cause.

Catalog filtered to zeroFaceted product searchIssue tracker with narrow filtersReport with no matching rows

Where it shows up

Screens we drew to show where this motion usually sits. Illustrations, not captures of any product.

  • Ridgeline
    Issues
    Backlog
    Active
    Cycles
    Views
    IssuesNew
    No issues match these filtersWhen there is something to show, it appears here.
    Issue tracker

    An over-filtered issue view offers a clear action next to the active filter pills.

Related patterns