Vibary.ai
← Vibe Coding

Form Submit Progress

Submit narrows to a turning disc while the request runs, then opens out as the confirmed state.

feedbackpremiumcalminteraction · finite · advanced · ~2.4s
Interactive · click to play
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.

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

/**
 * Vibary · Form Submit Progress
 *
 * A submit control that narrows to a turning disc while the request is
 * in flight and opens back out as the confirmed state. The row it sits

About this pattern

Three states in one control, with the form behind it holding perfectly still. The button collapses to a disc for the length of the request and opens back out to report what happened, while the row around it keeps the resting width the whole time — so nothing under the button shifts and no one loses their place. The label, the disc and the confirmation are three stacked layers crossfading inside a single box: text is never re-flowed by the width it sits in, it just fades. Pressing is locked out until the control is back at rest, which is the cheapest double-submit guard there is.

Create record submitCheckout pay buttonSend an invitePublish a change

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
    Colourway picker drops a frameRID-412 · PriyaIn progress
    Receipt totals misalign on narrowRID-408 · MarcusTodo
    Session expires without warningRID-401 · DanaIn review
    Export queue stalls past 500 rowsRID-397 · NilsTodo
    Search ranks archived firstRID-390 · PriyaDone
    Issue tracker

    Submit controls resolve inline instead of throwing a blocking overlay.

Related patterns