ComponentsNumber Flow

Number Flow

A component that animates the transition of numbers, showcasing smooth animations for incrementing and decrementing values.

Code

1

Install with shadcn Beta

Terminal

npx shadcn@latest add "https://smoothui.dev/r/number-flow.json"

Or install the demo

Terminal

npx shadcn@latest add "https://smoothui.dev/r/number-flow-demo.json"
2

Add the CSS

global.css

@layer utilities {
  .slide-in-up {
    animation: slideInUp 0.3s forwards;
  }

  .slide-out-up {
    animation: slideOutUp 0.3s forwards;
  }

  .slide-in-down {
    animation: slideInDown 0.3s forwards;
  }

  .slide-out-down {
    animation: slideOutDown 0.3s forwards;
  }

  @keyframes slideInUp {
    from {
      transform: translateY(50px);
      filter: blur(5px);
    }
    to {
      transform: translateY(0px);
      filter: blur(0px);
    }
  }

  @keyframes slideOutUp {
    from {
      transform: translateY(0px);
      filter: blur(0px);
    }
    to {
      transform: translateY(-50px);
      filter: blur(5px);
    }
  }

  @keyframes slideInDown {
    from {
      transform: translateY(-50px);
      filter: blur(5px);
    }
    to {
      transform: translateY(0px);
      filter: blur(0px);
    }
  }

  @keyframes slideOutDown {
    from {
      transform: translateY(0px);
      filter: blur(0px);
    }
    to {
      transform: translateY(50px);
      filter: blur(5px);
    }
  }
}

How to use

Demo.tsx

"use client"

import React, { useState } from "react"

import NumberFlow from "@/components/smoothui/ui/NumberFlow"

const NumberFlowDemo = () => {
  const [value, setValue] = useState(0)
  return <NumberFlow value={value} onChange={setValue} />
}

export default NumberFlowDemo

Props

PropTypeDescription
value?numberControlled value.
onChange?(value: number) => voidCallback when value changes.
min?numberMinimum value.
max?numberMaximum value.
className?stringOptional additional class names for the root container.
digitClassName?stringClass name for the digit containers.
buttonClassName?stringClass name for the increment/decrement buttons.