JSPM

  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q39547F
  • License MIT

Package Exports

  • react-loader-ts
  • react-loader-ts/components/Loader
  • react-loader-ts/components/WithLoader
  • react-loader-ts/styles/global.css

Readme

React Loader TS

npm

react-loader-ts is a TypeScript/React library that offers a customizable Loader component, a LoaderContext to manage global loader state, and other helpful utilities.

Now fully updated for React 19, with modernized theming via CSS variables, native dark mode support, and optimized CSS build!

Installation

Using yarn

yarn add react-loader-ts

Using npm

npm install react-loader-ts

Features (v2.0.2)

  • โœ… React 19 compatible
  • ๐ŸŽจ Native CSS custom properties for loader customization
  • ๐ŸŒ™ Native dark mode support with light-dark()
  • ๐Ÿงผ Cleaned-up API: removed inline styles in favor of CSS class customization
  • ๐Ÿงฉ Strict type safety using Variant union type
  • ๐Ÿš€ Optimized CSS build via PostCSS (autoprefixer + cssnano)
  • ๐Ÿชถ Lightweight and dependency-free

Usage

To enable the loader context, wrap your app with LoaderProvider:

import { LoaderProvider } from "react-loader-ts";
import "react-loader-ts/styles/global.css";

export default function Application() {
  return (
    <LoaderProvider>
      <YourApp />
    </LoaderProvider>
  );
}
import { Loader, useLoader } from "react-loader-ts";

export function ExampleComponent() {
  const { isLoading, setLoading } = useLoader();

  return (
    <>
      <button onClick={() => setLoading(!isLoading)}>Toggle loading</button>
      {isLoading && <Loader />}
    </>
  );
}

Importing the global CSS

Be sure to import the generated global CSS from:

import "react-loader-ts/styles/global.css";

Customization via CSS Variables

You can override these variables globally or within a scope:

:root {
  --loader-light--color: #1799e7;
  --loader-dark--color: #66ccff;
  --loader-light--background-color: rgba(255, 255, 255, 0.5);
  --loader-dark--background-color: rgba(0, 0, 0, 0.5);

  --loader--color: light-dark(
    var(--loader-light--color),
    var(--loader-dark--color)
  );
  --loader--background-color: light-dark(
    var(--loader-light--background-color),
    var(--loader-dark--background-color)
  );

  --loader--spacing: 0.5rem;

  --loader--width: 1.25rem;
  --loader--height: 1.25rem;
  --loader--circle-width: 3.75rem;
  --loader--circle-height: 3.75rem;
}

Make sure to enable dual color scheme support:

:root {
  color-scheme: light dark;
}

Components

Loader

A flexible loading indicator with two variants.

Property Type Optional Default Description
variant string โœ… dots "dots" or "circle-dots"
inline boolean โœ… false Renders the loader inline
containerClassName string โœ… โ€” Custom class for loader container
loaderClassName string โœ… โ€” Custom class for the loader itself

Example:

<Loader
  variant="circle-dots"
  containerClassName="my-container"
  loaderClassName="my-loader"
/>

WithLoader

Conditionally renders a loader or children based on loading state.

Property Type Optional Description
isLoading boolean โœ… Override context and manually control loading state
loader ReactNode โœ… Provide a custom loader element
variant string โœ… "dots" or "circle-dots"
inline boolean โœ… Render inline
containerClassName string โœ… Custom class for container
loaderClassName string โœ… Custom class for loader

Example:

<WithLoader>Loading content here...</WithLoader>

<WithLoader isLoading={true}>Loading override</WithLoader>

<WithLoader loader={<div>Custom Spinner</div>}>Custom loading</WithLoader>

Variants

export const VARIANTS = ["circle-dots", "dots"] as const;

export type Variant = (typeof VARIANTS)[number];

CSS Build and Publishing

  • PostCSS Build: Styles located in src/styles/global.css are processed with PostCSS using Autoprefixer and cssnano, producing an optimized dist/styles/global.css.

  • Exports: The CSS file is exposed under the subpath "react-loader-ts/styles/global.css" in package.json's exports.

  • Usage: Consumers should import the CSS directly:

    import "react-loader-ts/styles/global.css";

License

MIT