Components
A press-and-hold confirmation button with animated fill progress and a matching useLongPress hook for building your own hold-to-confirm interactions.

"use client";
import * as React from "react";
import { LongPressButton } from "@/components/ui/long-press";
export default function LongPressDemo() {
const [archived, setArchived] = React.useState(false);
return (
<div className="flex min-h-[280px] w-full flex-col items-center justify-center gap-4">
<div className="flex items-center gap-3">
<LongPressButton onLongPress={() => setArchived(true)}>
Hold to archive
</LongPressButton>
<LongPressButton onLongPress={() => setArchived(false)}>
Hold to restore
</LongPressButton>
</div>
<p className="text-[13px] text-stone-500 dark:text-stone-400">
{archived ? "Archived" : "Active"}
</p>
</div>
);
}
Part of interior.dev — browse the full library on 21st.dev.