Vibary.ai
← Vibe Coding

Deleted Item Tombstone

A removed row leaves a stub holding its slot open, with a hairline showing how long undo is on offer.

empty-statescalmminimalautomatic · finite · intermediate · ~4.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.

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

/**
 * Vibary · Deleted Item Tombstone
 *
 * Deletion in two steps, so the second one can be refused. The row is
 * replaced in place by a stub carrying the undo, and the slot keeps its

About this pattern

Deletion in two steps, so the second one can be refused. The row crossfades into a stub carrying the undo, and the slot keeps its exact height — nothing below shifts while the offer stands, which means the reader's eye stays where the change happened. A hairline runs down the base of the stub to show how long that remains true, and only when it expires does the slot collapse and the list close the gap on an eased curve. Undo inside the window restores the row in place. No springs: a list that overshoots while closing a gap looks unstable at exactly the wrong moment.

Row deleted from a listUndo window after removalInline delete in a file browserMessage removed from a thread

Where it shows up

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

  • Ridgeline
    Inbox
    Starred
    Drafts
    Archive
    Sent
    InboxNew
    Contract renewalPriya Raman · 10:14
    Q3 hiring planMarcus Bell · 09:02
    Venue confirmed for ThursdayDana Whitfield · Tue
    Invoice 4821 clearedBilling · Tue
    Weekly summaryReports · Mon
    Inbox

    A removed conversation offers an undo for a short window before the list settles.

Related patterns