Skip to content

Wipe Reveal

Reveal for images, charts and mockups: a primary bar sweeps across, then the content is unveiled with a clip-path wipe (left→right or bottom→top) on scroll into view.

neo-corporate/effect/wipe-reveal
Open ↗

Source

"use client";

import type { ReactNode } from "react";
import { motion, useReducedMotion } from "motion/react";
import { cn } from "@/lib/utils";

export interface WipeRevealProps {
  children: ReactNode;
  direction?: "left" | "up";
  /** Show a primary bar that sweeps across before the content. */
  bar?: boolean;
  delay?: number;
  className?: string;
}

/** Reveal for images, charts and mockups: a primary bar sweeps across, then the content is unveiled with a clip-path wipe (left→right or bottom→top) on scroll into view. */
export function WipeReveal({ children, direction = "left", bar = true, delay = 0, className }: WipeRevealProps) {
  const reduce = useReducedMotion();
  const hidden = direction === "left" ? "inset(0 100% 0 0)" : "inset(100% 0 0 0)";
  return (
    <motion.div className={cn("relative", className)} initial={reduce ? false : "hidden"} whileInView="shown" viewport={{ once: true, amount: 0.3 }}>
      <motion.div
        variants={{
          hidden: { clipPath: hidden },
          shown: { clipPath: "inset(0 0% 0 0)", transition: { duration: 0.7, delay: delay + (bar ? 0.35 : 0), ease: [0.6, 0, 0.2, 1] } },
        }}
      >
        {children}
      </motion.div>
      {bar && !reduce && (
        <motion.span
          aria-hidden
          className={cn(
            "pointer-events-none absolute bg-da-primary",
            direction === "left" ? "inset-y-0 left-0 w-full origin-left" : "inset-x-0 bottom-0 h-full origin-bottom",
          )}
          variants={{
            hidden: direction === "left" ? { scaleX: 0 } : { scaleY: 0 },
            shown: {
              ...(direction === "left" ? { scaleX: [0, 1, 1, 0] } : { scaleY: [0, 1, 1, 0] }),
              originX: direction === "left" ? [0, 0, 1, 1] : 0.5,
              originY: direction === "up" ? [1, 1, 0, 0] : 0.5,
              transition: { duration: 1.05, delay, times: [0, 0.35, 0.5, 1], ease: "easeInOut" },
            },
          }}
        />
      )}
    </motion.div>
  );
}

export default WipeReveal;

modules/neo-corporate/effect/wipe-reveal/index.tsx

Props

PropTypeDefaultDescription
children*ReactNode—Content.
direction"left" | "up"—Direction.
barboolean—Show a primary bar that sweeps across before the content.
delaynumber—Delay.
classNamestring—Extra classes on the root.

Other transition variants in Neo Corporate

Transition in other art directions

Animated

Flip Reveal

Scroll-triggered 3D flip: the element swings in on its top or left hinge like a hanging sign board and lands in four hard steps. Stagger siblings with delay.

BrutalistTransition
Animated

Slam List

Staggered list entrance: every child slams in from the side or bottom with a tilt and a stiff spring jolt, one after another, when the list scrolls into view. Wraps each child in an li (or div).

BrutalistTransition
Animated

Stamp Reveal

Scroll-triggered entrance that stamps content onto the page: drops from above at 125% scale with a tilt and snaps into place in three hard steps. Stagger with delay, optional final tilt.

BrutalistTransition
Animated

Wipe Reveal

Scroll-triggered block wipe: a solid DA color slab with ink edges sweeps across the element, the content appears underneath at mid-sweep, then the slab exits the other side. Left, right or up.

BrutalistTransition
Animated

Cascade Cards

Scroll-triggered cascade: each child drops in from above with a 3D forward tilt and a soft spring, one after the other — ideal for notification or feed lists.

GlassTransition
Animated

Circle Reveal

Scroll-triggered circular reveal: content appears through a clip-path circle growing from a chosen origin point while going from blurred to sharp.

GlassTransition
Animated

Glass Reveal

Scroll-triggered entrance for frosted panels: slides in from bottom/left/right, scales up from 96% with a soft overshoot while the content goes from 14px blur to sharp. Optional built-in glass panel.

GlassTransition
Animated

Scroll Zoom

Scroll-linked product showcase: as the element rises through the viewport it scales from 82% to 100%, un-tilts from 18° and fades in (motion useScroll).

GlassTransition
Animated

Clip Reveal

Scroll-triggered clip-path reveal (from bottom, top, left, right or center) with a subtle scale settle and fade — ideal for screenshots, product mock-ups and cards.

MinimalTransition
Animated

Fade Blur Reveal

Scroll-triggered entrance where opacity, an 8px rise and a 6px blur resolve together with an expo-out curve. Single block or staggered children.

MinimalTransition
Animated

Stagger Grid

Grid entrance where children fade, rise and un-blur one by one in reading order or as a diagonal wave from the top-left when the grid scrolls into view.

MinimalTransition
Animated

Word Reveal

Scroll-triggered headline reveal: each word rises out of its own clipping mask with an expo-out ease, staggered word by word. Works for h1–h3 and paragraphs.

MinimalTransition
Animated

Curtain Wipe

Block reveal: a solid ink (or signal) curtain covers the content, then slides away to the right, uncovering it — for images and cards entering the viewport.

Mono CleanTransition
Animated

Inset Reveal

Image entrance: a clip-path inset shrinks from 12% to 0 while the inner content scales from 1.15 to 1 — the frame “opens” onto the image. Observed on an unclipped wrapper.

Mono CleanTransition
Animated

Line Reveal

Headline revealed line by line: each line slides up from behind its own mask with a sharp ease, staggered, when it enters the viewport — the classic editorial reveal.

Mono CleanTransition
Animated

Stagger Fade

The quietest entrance: list items simply fade in one after another (no movement), 60ms apart, when the list enters the viewport.

Mono CleanTransition
Animated

Arch Reveal

Media reveal through an opening arch: a clip-path ellipse grows from the bottom center until the content is fully shown, leaving an arch-topped frame.

Organic SoftTransition
Animated

Bloom Stagger

List that blooms open: items fade in one by one while unrotating from a slight alternate tilt and rising, like petals settling, when the list enters the viewport.

Organic SoftTransition
Animated

Grow In

Sprouting entrance: content grows from 85% scale out of its bottom edge while fading in, with a soft organic overshoot, when it enters the viewport.

Organic SoftTransition
Animated

Soft Blur In

Dreamy entrance: content comes into focus from a soft blur while fading in and drifting up a few pixels — like morning mist lifting.

Organic SoftTransition
Animated

Blob Reveal

Reveal where an organic pastel blob springs up behind the content with a slight rotation, then the content fades up on top of it.

Soft FlatTransition
Animated

Pop In

Scroll-triggered pop: content scales up from 80% with a friendly spring overshoot while fading in; stagger siblings with delay.

Soft FlatTransition
Animated

Rise Stagger

List entrance: each child rises 24px and fades in one after another with a soft spring bounce when the list scrolls into view.

Soft FlatTransition
Animated

Swing In

Playful entrance: the element swings in from a side with a rotation like a hanging sign and settles with a springy wobble.

Soft FlatTransition