Vibary.ai
← Vibe Coding

Validation Summary List

A rejected submit answers with the whole list of what stopped it, each entry arriving a beat apart.

feedbackcalmminimalautomatic · finite · intermediate · ~0.5s
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.

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

/**
 * Vibary · Validation Summary List
 *
 * A submit that could not go through, answered with the whole list of
 * what stopped it. The panel opens above the form on a short eased

About this pattern

The counterpart to marking fields one by one: a long form that comes back rejected needs one place that says how many things are wrong and where they are. The panel opens above the form on a short eased height — never a spring, because words dragged past their resting line and back are words you have to re-read — and takes room the fields give up rather than floating over them. Entries then arrive from the panel's own left edge, a beat apart, so the list reads as a list being written rather than a wall landing at once. Each entry is a control that takes focus to the field it names, and the panel carries role=alert so the count is spoken as soon as it exists.

Long form submitCheckout rejectionSettings save blockedMulti-section application

Where it shows up

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

  • Add a supplierTwo fields now, the rest later
    Legal name
    Ridgeline Supply Co.
    Country
    Sweden
    VAT number
    SE556031820101
    Save supplier
    Form

    A blocked save gathers everything it objects to into one banner above the form.

Related patterns