Blocks

Loader 3

Loaders
Logo CenterImage
Loader 3

Code

relume-loader3.tsx
"use client";

import { useEffect, useState } from "react";

export const Loader3 = () => {
  const [isExiting, setIsExiting] = useState(false);
  const [showImage, setShowImage] = useState(false);

  useEffect(() => {
    const imageTimer = setTimeout(() => {
      setShowImage(true);
    }, 500);

    const exitTimer = setTimeout(() => {
      setIsExiting(true);
    }, 2000);

    return () => {
      clearTimeout(imageTimer);
      clearTimeout(exitTimer);
    };
  }, []);

  return (
    <div className="relative h-screen overflow-hidden">
      <div
        className={`fixed inset-0 z-50 flex items-center justify-center bg-neutral-darkest transition-transform duration-700 ease-in-out ${
          isExiting ? "-translate-y-full" : "translate-y-0"
        }`}
      >
        {!isExiting && (
          <div className="flex flex-col items-center justify-center">
            <img
              src="https://d22po4pjz3o32e.cloudfront.net/relume-logo-white.svg"
              alt="Relume logo"
              className={`size-full transition-all duration-500 ease-out ${
                showImage ? "translate-y-0 opacity-100" : "translate-y-16 opacity-0"
              }`}
            />
          </div>
        )}
      </div>
    </div>
  );
};

npm i @radix-ui/react-accordion @radix-ui/react-checkbox @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-label @radix-ui/react-radio-group @radix-ui/react-select @radix-ui/react-slider @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs class-variance-authority@0.7.1 clsx@^2.1.1 luxon@^3.5.0 motion@^12.15.0 relume-icons@1.3.0 tailwind-merge@^2.2.2