Skeleton loaders are one of the most effective ways to improve perceived performance in a React app. Instead of showing a blank screen or a generic spinner, you simulate the layout of your content while it's loading.
With skeleton-loader-ap, adding responsive, customizable loading placeholders is super simple.
π¦
skeleton-loader-ap
β Why Use Skeleton Loaders?
- π§© They hint at content layout before it's loaded
 - π Improve perceived speed and UX
 - π§ More context than loading spinners
 - π± Great for images, avatars, text, cards, and more
 
π¦ Installation
Install with npm:
bash
npm install skeleton-loader-ap
Or with Yarn:
bash
Copy
Edit
yarn add skeleton-loader-ap
π§ Components Overview
1. <Skeleton /> β Base Skeleton Block
<Skeleton width="100%" height="1rem" borderRadius="6px" />
Props:
width (string | number)
height (string | number)
circle (boolean)
borderRadius (string | number)
placeholder (boolean | string) β true or custom image path
opacity (number | string)
2. <SkeletonImage /> β Image Loader
<SkeletonImage size={80} circle placeholder />
Extra Props:
size β square size for both width/height
circle β inferred if size is passed
3. <SkeletonParagraph /> β Multi-line Loader
<SkeletonParagraph
  rows={3}
  widths={['90%', '100%', '80%']}
  spacing="0.75rem"
  placeholder
/>
Props:
rows β number of lines (default 3)
widths β array of individual line widths
lineHeight β default '1rem'
spacing β default '0.5rem'
placeholder, opacity, borderRadius
4. <SkeletonClientWrapper /> β Auto Loader Wrapper
<SkeletonClientWrapper
  type="Image"
  size={100}
  circle
  placeholder
  loadertime={3000}
/>
<SkeletonClientWrapper
  type="Paragraph"
  rows={4}
  widths={['90%', '100%', '80%', '70%']}
  placeholder
/>
Props:
type: 'Image' or 'Paragraph'
loadertime: how long (in ms) to show skeleton
All props passed to respective component
πͺ useSkeleton Hook
Manually control loading:
const loading = useSkeleton(3000); // `true` for 3 seconds
Use this to conditionally show skeletons or actual content.
πΌ Placeholder Images
Built-in default image:
<Skeleton placeholder />
Custom image from /public/Images/your-loader.gif:
<Skeleton placeholder="/Images/custom-spinner.gif" />
π§ͺ Full Example
import {
  SkeletonClientWrapper,
  SkeletonImage,
  SkeletonParagraph,
} from 'skeleton-loader-ap';
function ProfileLoader() {
  return (
    <div className="flex gap-4">
      <SkeletonClientWrapper
        type="Image"
        size={80}
        circle
        placeholder
        loadertime={3000}
      />
      <SkeletonClientWrapper
        type="Paragraph"
        rows={3}
        widths={['80%', '90%', '70%']}
        placeholder
        spacing="1rem"
      />
    </div>
  );
}
π Features Recap
π  Highly customizable
π§© Modular components (Image, Text, Block)
β³ Client-side wrapper for simulated loading
πͺ Hook for manual control
πΌ Built-in + custom image placeholders
π¦ Lightweight with no external dependencies
π Links(https://github.com/ankitparashar700/npm-skeleton-loader-ap/)
π View on NPM
π§ GitHub Repository
If this helped you, give the package a β on GitHub and share it with your dev team!
Happy loading! π¦΄
              
    
Top comments (0)