0.2.0 β€’ Published 6 months ago

react-theme-switch-animation v0.2.0

Weekly downloads
-
License
MIT
Repository
-
Last release
6 months ago

πŸŽ₯ Demo

πŸ“ Notes

  • The hook is only available in the browser environment. So if you use NextJS App router or any other framework that uses Server Components, you should use this hook in a Client Component by adding the directive use client
  • Currently works only if the project is using TailwindCSS
  • Ensure your project has the necessary TailwindCSS configuration for dark mode

πŸš€ Features

  • Toggles dark mode with an animation effect.
  • Smooth animations for theme switching.
  • Uses React Hooks for state management.
  • Supports TypeScript for enhanced development experience.
  • Uses localStorage to persist the dark mode state across sessions.
  • Provides a React ref that can be attached to any component to trigger the mode change.

πŸ“¦ Installation

Install the package using npm or YARN:

npm install react-theme-switch-animation

or

yarn add react-theme-switch-animation

πŸ“š Usage

Here’s how to use the useModeAnimation hook in your React component:

'use client'

import React from 'react'
import { useModeAnimation } from 'react-theme-switch-animation'

const MyComponent = () => {
  const { ref, toggleSwitchTheme, isDarkMode } = useModeAnimation()

  return (
    <button ref={ref} onClick={toggleSwitchTheme}>
      Toggle Dark Mode (Currently {isDarkMode ? 'Dark' : 'Light'} Mode)
    </button>
  )
}

export default MyComponent

πŸ“š API

useModeAnimation accepts an optional props object with the following properties:

PropertyTypeDefaultDescription
durationnumber750Duration of the animation in milliseconds.
easingstring"ease-in-out"CSS easing type for the animation.
pseudoElementstring"::view-transition-new(root)"Pseudo-element used for the animation.
globalClassNamestring"dark"Class name to apply to the root element.
animationTypeThemeAnimationTypeThemeAnimationType.CIRCLEType of animation effect (CIRCLE or BLUR_CIRCLE)
blurAmountnumber2Blur intensity for blur circle animation.
styleIdstring"theme-switch-style"ID for the style element (blur circle animation).
isDarkModebooleanfalseInitial dark mode state.
onDarkModeChange(isDark: boolean) => voidundefinedCallback function to handle dark mode change.

Animation Types

The hook supports two types of animations:

  • ThemeAnimationType.CIRCLE: A clean circle expansion animation (default)
  • ThemeAnimationType.BLUR_CIRCLE: A circle expansion with blur effect on the edges

Example usage with blur circle animation:

'use client'

import React from 'react'
import { ThemeAnimationType, useModeAnimation } from 'react-theme-switch-animation'

const MyComponent = () => {
  const { ref, toggleSwitchTheme, isDarkMode } = useModeAnimation({
    animationType: ThemeAnimationType.BLUR_CIRCLE,
    blurAmount: 4, // Optional: adjust blur intensity
    duration: 1000, // Optional: adjust animation duration
  })

  return (
    <button ref={ref} onClick={toggleSwitchTheme}>
      Toggle Dark Mode (Currently {isDarkMode ? 'Dark' : 'Light'} Mode)
    </button>
  )
}

export default MyComponent

Returns an object containing:

  • ref: React ref for attaching to the component that will trigger the dark mode toggle.
  • toggleSwitchTheme: Function to toggle dark mode.
  • isDarkMode: Current state of dark mode (true for dark, false for light).

πŸ“ Requirements

  • React 16.8 or later (for Hooks support).
  • TypeScript for compiling the package during installation.

🀝 Contributing

Contributions are welcome! Please open an issue or submit a pull request with your suggested changes.

πŸ“œ License

MIT

0.1.0

6 months ago

0.2.0

6 months ago

0.0.7

11 months ago

0.0.5

1 year ago

0.0.16

1 year ago

0.0.15

1 year ago

0.0.14

1 year ago

0.0.13

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.6

1 year ago

0.0.4

1 year ago