Nexus UI

Before / After, animated React component

An image comparison slider with a springy handle, fading corner labels, arrow-key control and a segmented Before / Split / After jump.

  • Free
  • Motion Effects
  • Spring

Play with it

Move the controls and watch it change. Copy code gives you a snippet with only the props you changed.

BeforeAfter

Props

PropTypeDefaultWhat it does
before—What shows on the left of the handle, usually an <img>.
after—What shows on the right of the handle.
beforeLabel"Before"Top-left label.
afterLabel"After"Top-right label.
autoplayfalseSweeps the handle every few seconds until touched.
className—Extra classes on the wrapper.

Add it to your project

  1. 1

    Prepare your project

    You need Tailwind CSS and the @/import alias. If shadcn isn't set up yet, initialise it once:

    npx shadcn@latest init

    Then add the Nexus registry to your components.json (the registries key is the part that matters):

    {
      "$schema": "https://ui.shadcn.com/schema.json",
      "style": "default",
      "rsc": true,
      "tsx": true,
      "tailwind": {
        "css": "src/app/globals.css",
        "baseColor": "neutral",
        "cssVariables": true,
        "prefix": ""
      },
      "aliases": {
        "components": "@/components",
        "utils": "@/lib/utils",
        "ui": "@/components/ui",
        "lib": "@/lib",
        "hooks": "@/hooks"
      },
      "registries": {
        "@nexus-labs": "https://www.nexus-ui.com/api/registry/{name}"
      }
    }
  2. 2

    Add the component

    Run this from your project root. It adds the component, the utilities it uses and its packages.

    npx shadcn@latest add @nexus-labs/before-after
  3. 3

    Check what was added

    With the standard aliases, these files land in your project:

    components/
    before-after/
    before-after.tsx
    index.ts
  4. 4

    Copying by hand? Install the packages

    Skip this if you used the command above.

    npm install framer-motion
  5. 5

    Use it in a page

    Import it and render it. The Code tab above has the full example.

    // app/page.tsx
    import { BeforeAfter } from "@/components/before-after";
    
    export default function Page() {
      return (
        <main>
          <BeforeAfter />
        </main>
      );
    }