Coming Soon 1
uifoundry/coming-soon-1UnverifiedBlock
Coming Soon Block with countdown timer, email signup, and social links
Install it
npx shadcn@latest add https://raw.githubusercontent.com/UIFoundry/uifoundry/master/coming-soon-1.jsonSource
1"use client";23import { useState, useEffect } from "react";4import { Button } from "@/registry/default/ui/button";5import { Input } from "@/registry/default/ui/input";6import { TextEffect } from "@/registry/default/ui/motion-primitives/text-effect";7import { AnimatedGroup } from "@/registry/default/ui/motion-primitives/animated-group";8import type { ComingSoon_1_Block } from "~/payload-types";910import { cn } from "@/registry/default/utils";11import SocialIcon from "@/registry/default/lib/fields/socialLinks";12import { Mail } from "lucide-react";1314interface TimeLeft {15 days: number;16 hours: number;17 minutes: number;18 seconds: number;19}2021const transitionVariants = {22 item: {23 hidden: {24 opacity: 0,25 filter: "blur(12px)",26 y: 12,27 },28 visible: {29 opacity: 1,30 filter: "blur(0px)",31 y: 0,32 transition: {33 type: "spring",34 bounce: 0.3,35 duration: 1.5,36 },37 },38 },39};4041function calculateTimeLeft(targetDate: string): TimeLeft {42 const difference = +new Date(targetDate) - +new Date();4344 if (difference > 0) {45 return {46 days: Math.floor(difference / (1000 * 60 * 60 * 24)),47 hours: Math.floor((difference / (1000 * 60 * 60)) % 24),48 minutes: Math.floor((difference / 1000 / 60) % 60),49 seconds: Math.floor((difference / 1000) % 60),50 };51 }5253 return { days: 0, hours: 0, minutes: 0, seconds: 0 };54}5556export default function ComingSoonSection(props: ComingSoon_1_Block) {57 const [timeLeft, setTimeLeft] = useState<TimeLeft>({58 days: 0,59 hours: 0,60 minutes: 0,61 seconds: 0,62 });63 const [email, setEmail] = useState("");64 const [isSubmitted, setIsSubmitted] = useState(false);6566 useEffect(() => {67 if (!props.launchDate) return;6869 const timer = setInterval(() => {70 setTimeLeft(calculateTimeLeft(props.launchDate));71 }, 1000);7273 return () => clearInterval(timer);74 }, [props.launchDate]);7576 const handleEmailSubmit = (e: React.FormEvent) => {77 e.preventDefault();78 // Handle email submission here79 console.log("Email submitted:", email);80 setIsSubmitted(true);81 setEmail("");82 };8384 return (85 <div86 className={cn(87 "relative flex min-h-screen items-center justify-center overflow-hidden",88 )}89 >90 <section className="relative z-10 w-full">91 <div className="mx-auto max-w-4xl px-6 text-center">92 <AnimatedGroup93 variants={{94 container: {95 visible: {96 transition: {97 staggerChildren: 0.1,98 },99 },100 },101 item: {102 hidden: {103 opacity: 0,104 y: 20,105// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from uifoundry
All 54 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Color Fieldcolor-field | uifoundry | Blocks | Unverified | 4 deps · 2 files | |
| CTA 1cta-1 | uifoundry | Blocks | Unverified | 3 deps · 2 files | |
| CTA 2cta-2 | uifoundry | Blocks | Unverified | 3 deps · 2 files | |
| CTA 3cta-3 | uifoundry | Blocks | Unverified | 3 deps · 2 files | |
| Custom Headercustom-header | uifoundry | Blocks | Unverified | 4 deps · 3 files | |
| Features 1features-1 | uifoundry | Blocks | Unverified | 3 deps · 2 files | |
| Features 2features-2 | uifoundry | Blocks | Unverified | 4 deps · 2 files | |
| Features 3features-3 | uifoundry | Blocks | Unverified | 4 deps · 2 files |
