Socket
Book a DemoInstallSign in
Socket

@leenguyen/react-flip-clock-countdown

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@leenguyen/react-flip-clock-countdown

A 3D animated countdown component for React.

1.7.1
latest
Source
npmnpm
Version published
Weekly downloads
5.1K
-5.07%
Maintainers
1
Weekly downloads
 
Created
Source

react-flip-clock-countdown

A 3D animated countdown component for React.

NPM JavaScript Style Guide

react flip clock countdown demo

Install

npm install --save @leenguyen/react-flip-clock-countdown

Or

yarn add @leenguyen/react-flip-clock-countdown

Props

The FlipClockCountdown has all properties of div and additional props below

NameTypeRequiredDefaultDescription
toDate | string | numberyesDate or timestamp in the future.
nowfuncnoDate.nowAlternative handler for the current time.
daysInHoursbooleannofalseDays will be shown in hours.
containerPropsobjectnoundefinedProps apply to the flip clock container. This prop is deprecated; apply directly to the FlipClockCountdown component.
onCompletefuncnoCallback when countdown ends.
Signature:
function() => void
onTickfuncnoCallback on every interval tick.
Signature:
function({ timeDelta, completed }) => void
renderMapArray<boolean>no[true, true, true, true]Each element represents the render state of each section (day, hour, minute, second). If true, section will be rendered; false otherwise.
labelsArray<string>no['Days', 'Hours', 'Minutes', 'Seconds']Custom array of labels for each section (day, hour, minute, second).
showLabelsbooleannotrueSet to false to hide the labels.
showSeparatorsbooleannotrueSet to false to hide the separators (colon) between time units.
labelStyleReact.CSSPropertiesnoundefinedStyles applied to labels (font-size, color, width, height, etc.).
digitBlockStyleReact.CSSPropertiesnoundefinedStyles applied to digit blocks (font-size, color, width, height, etc.).
separatorStyleobjectnoundefinedStyles applied to separator (colon), includes size and color.
dividerStyleobjectnoundefinedStyles applied to divider, includes color and height.
spacingobjectnoundefinedModify the clock spacing.
durationnumberno0.7Duration (in seconds) for flip card animation. Valid range: (0, 1).
hideOnCompletebooleannotrueBy default, hides the countdown when completed (or shows children if provided). Set to false to keep timer at zeros when completed.
stopOnHiddenVisibilitybooleannofalseStop the clock when the visibilityState is hidden. Prevents the component from getting out of sync when switching browser tabs.
renderOnServerbooleannofalseIf true, the clock renders on the server with all digits set to zero. This helps prevent UI layout shifts during client-side hydration, especially in SSR frameworks like Next.js.

Usage

Basic usage

import React, { Component } from 'react';

import FlipClockCountdown from '@leenguyen/react-flip-clock-countdown';
import '@leenguyen/react-flip-clock-countdown/dist/index.css';

class Example extends Component {
  render() {
    return <FlipClockCountdown to={new Date().getTime() + 24 * 3600 * 1000 + 5000} />;
  }
}

Render a React Component when countdown is complete

In case you want to change the output of the component, or want to signal that the countdown's work is done, you can do this by either using the onComplete callback or by specifying a React child within <FlipClockCountdown></FlipClockCountdown>, which will only be shown once the countdown is complete.

import React, { Component } from 'react';

import FlipClockCountdown from '@leenguyen/react-flip-clock-countdown';
import '@leenguyen/react-flip-clock-countdown/dist/index.css';

class Completed extends Component {
  render() {
    return <span>The countdown is complete</span>
  }
}

class RenderByUsingReactChild extends Component {
  render() {
    return (
      <FlipClockCountdown to={new Date().getTime() + 24 * 3600 * 1000 + 5000}>
        <Completed />
      </FlipClockCountdown>;
    )
  }
}

class RenderByUsingCallback extends Component {
  constructor(props) {
    super(props);

    this.endTime = new Date().getTime() + 24 * 3600 * 1000 + 5000;
    this.state = {
      isCompleted: false
    }

    this.handleComplete = this.handleComplete.bind(this);
  }

  handleComplete() {
    this.setState({ isCompleted: true });
  }

  render() {
    return (
      <React.Fragment>
        {isCompleted && <Completed />}
        <FlipClockCountdown onComplete={this.handleComplete} to={this.endTime} />
      </React.Fragment>
    )
  }
}

Render a custom countdown

Custom styles

class Example extends Component {
  render() {
    return (
      <FlipClockCountdown
        to={new Date().getTime() + 24 * 3600 * 1000 + 5000}
        labels={['DAYS', 'HOURS', 'MINUTES', 'SECONDS']}
        labelStyle={{ fontSize: 10, fontWeight: 500, textTransform: 'uppercase' }}
        digitBlockStyle={{ width: 40, height: 60, fontSize: 30 }}
        dividerStyle={{ color: 'white', height: 1 }}
        separatorStyle={{ color: 'red', size: '6px' }}
        duration={0.5}
      >
        Finished
      </FlipClockCountdown>
    );
  }
}

Custom styles via css

import 'styles.css';

class Example extends Component {
  render() {
    return <FlipClockCountdown to={new Date().getTime() + 24 * 3600 * 1000 + 5000} className='flip-clock' />;
  }
}
/* styles.css */

.flip-clock {
  --fcc-flip-duration: 0.5s; /* transition duration when flip card */
  --fcc-spacing: 8px; /* space between unit times and separators */
  --fcc-digit-block-width: 40px; /* width of digit card */
  --fcc-digit-block-height: 60px; /* height of digit card, highly recommend in even number */
  --fcc-digit-block-radius: 5px; /* border radius of digit card */
  --fcc-digit-block-spacing: 5px; /* space between blocks in each unit of time */
  --fcc-digit-font-size: 30px; /* font size of digit */
  --fcc-digit-color: white; /* color of digit */
  --fcc-label-font-size: 10px; /* font size of label */
  --fcc-label-color: #ffffff; /* color of label */
  --fcc-background: black; /* background of digit card */
  --fcc-divider-color: white; /* color of divider */
  --fcc-divider-height: 1px; /* height of divider */
  --fcc-separator-size: 6px; /* size of colon */
  --fcc-separator-color: red; /* color of colon */
}

Custom section to be rendered

In case you don't want to display the date, use renderMap to custom render state of each section

class Example extends Component {
  render() {
    return (
      <FlipClockCountdown to={new Date().getTime() + 24 * 3600 * 1000 + 5000} renderMap={[false, true, true, true]}>
        Finished
      </FlipClockCountdown>
    );
  }
}

Contributing

The package is made up of 2 main folders:

  • /src contains the FlipClockCountdown
  • /examples contains the create-react-app and create-next-app based demo website

To setup and run a local copy:

  • Clone this repo with https://github.com/sLeeNguyen/react-flip-clock-countdown
  • Run npm install in the root folder
  • Run npm install in the examples/react-app folder
  • In separate terminal windows, run npm start in the root and examples/react-app folders.

When you're done working on your changes, feel free to send PRs with the details and include a screenshot if you've changed anything visually.

License

MIT © leenguyen

Keywords

react

FAQs

Package last updated on 04 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.