Checklist Cell
scrollxui/checklist-cellFreeComponent
Animated checklist illustration with sliding tasks and progressive completion.
Live preview
live · rendered by the registry
Rendered by scrollxui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://scrollxui.dev/registry/checklist-cell.jsonSource
1'use client';23import * as React from 'react';4import { motion, AnimatePresence } from 'motion/react';5import { ChevronRight } from 'lucide-react';6import { cn } from '@/lib/utils';78const DEFAULT_TASKS = [9 'How it all started',10 'Our values and approach',11 'Working together',12 'Union rules and integration',13 'Team structure',14 'Communication norms',15 'Feedback culture',16 'Onboarding wrap-up',17];1819export interface ChecklistCellProps extends React.HTMLAttributes<HTMLDivElement> {20 tasks?: string[];21 initialCompleted?: number;22 finalCompleted?: number;23 stepInterval?: number;24 hoverToPlay?: boolean;25}2627function FilledCheck() {28 return (29 <svg30 width='18'31 height='18'32 viewBox='0 0 18 18'33 fill='none'34 xmlns='http://www.w3.org/2000/svg'35 className='shrink-0'36 >37 <circle cx='9' cy='9' r='9' fill='#22c55e' />38 <path39 d='M5.5 9.5l2.5 2.5 4.5-5'40 stroke='white'41 strokeWidth='1.5'42 strokeLinecap='round'43 strokeLinejoin='round'44 />45 </svg>46 );47}4849function EmptyCircle({ muted }: { muted?: boolean }) {50 return (51 <svg52 width='18'53 height='18'54 viewBox='0 0 18 18'55 fill='none'56 xmlns='http://www.w3.org/2000/svg'57 className='shrink-0'58 >59 <circle60 cx='9'61 cy='9'62 r='8'63 stroke={muted ? '#e4e4e7' : '#d4d4d8'}64 strokeWidth='1.5'65 />66 </svg>67 );68}6970const FADE_DURATION = 350;7172const ChecklistCell = React.forwardRef<HTMLDivElement, ChecklistCellProps>(73 (74 {75 className,76 tasks = DEFAULT_TASKS,77 initialCompleted = 3,78 finalCompleted,79 stepInterval = 1700,80 hoverToPlay = false,81 ...props82 },83 ref,84 ) => {85 const total = tasks.length;86 const maxDone = finalCompleted !== undefined87 ? Math.min(finalCompleted, total - 1)88 : total - 1;8990 const [active, setActive] = React.useState(!hoverToPlay);91 const [phase, setPhase] = React.useState<'playing' | 'fading'>('playing');92 const [done, setDone] = React.useState(initialCompleted);93 const [winStart, setWinStart] = React.useState(1);94 const [sliding, setSliding] = React.useState(false);95 const [checkingSlot, setCheckingSlot] = React.useState(false);9697 const pct = (done / total) * 100;98 const hasNext = winStart + 3 < total;99100 const resetState = React.useCallback(() => {101 setDone(initialCompleted);102 setWinStart(1);103 setSliding(false);104// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from scrollxui
All 180 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | scrollxui | Components | Free | 4 deps | |
| Alert Dialogalert-dialog | scrollxui | Components | Free | 7 deps | |
| Animated Buttonanimated-button | scrollxui | Components | Free | 4 deps | |
| Animated Tabsanimated-tabs | scrollxui | Components | Free | 1 dep | |
| Animated Testimonialsanimated-testimonials | scrollxui | Components | Free | 2 deps | |
| Animated TextGenerateanimated-textgenerate | scrollxui | Components | Free | 3 deps | |
| Announcementannouncement | scrollxui | Components | Free | 5 deps | |
| Aspect Ratioaspect-ratio | scrollxui | Components | Free | 1 dep |
