- A Next.js Top Loading Bar component made using nprogress, works with Next.js 14 and React.
For using npm package manager instead see: (https://www.npmjs.com/package/@thesgj/nextjs-toploader)
using jsr with npm:
npx jsr add @thesgj/@thesgj/nextjs-toploader
using jsr with yarn:
yarn dlx jsr add @thesgj/@thesgj/nextjs-toploader
using deno:
deno add @thesgj/@thesgj/nextjs-toploader
import using:
import NextTopLoader from '@thesgj/nextjs-toploader';
For rendering add <NextTopLoader />
to your return()
inside the <body></body>
of RootLayout()
:
import NextTopLoader from '@thesgj/nextjs-toploader';
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
<NextTopLoader />
{children}
</body>
</html>
);
}
For rendering add <PagesTopLoader />
to your return()
in MyApp()
(Recommended):
import { PagesTopLoader } from '@thesgj/nextjs-toploader/pages';
export default function MyApp({ Component, pageProps }) {
return (
<>
<PagesTopLoader />
<Component {...pageProps} />;
</>
);
}
You can also use <NextTopLoader />
in pages
router, but it's recommended to use <PagesTopLoader />
for useRouter
hook support from @thesgj/nextjs-toploader
version 2.6.12 onwards
For triggering TopLoader when using useRouter
hook (app router):
// Import the useRouter hook from @thesgj/nextjs-toploader to trigger the TopLoader
import { useRouter } from '@thesgj/nextjs-toploader/app';
Then simply use it in your code for example:
const router = useRouter();
router.push('/some-page');
For triggering TopLoader when using useRouter
add <PagesTopLoader />
to your return()
in MyApp()
:
import { PagesTopLoader } from '@thesgj/nextjs-toploader/pages';
export default function MyApp({ Component, pageProps }) {
return (
<>
<PagesTopLoader />
<Component {...pageProps} />;
</>
);
}
For rendering add <NextTopLoader />
to your return()
inside the component in App()
in your App.js:
import NextTopLoader from '@thesgj/nextjs-toploader';
const App = () => {
return (
<div>
<Router>
<NextTopLoader />
<Routes>{/* Your Routes Here */}</Routes>
</Router>
</div>
);
};
export default App;
If no props are passed to <NextTopLoader />
, below is the default configuration applied.
<NextTopLoader
color="#2299DD"
initialPosition={0.08}
crawlSpeed={200}
height={3}
crawl={true}
showSpinner={true}
easing="ease"
speed={200}
shadow="0 0 10px #2299DD,0 0 5px #2299DD"
template='<div class="bar" role="bar"><div class="peg"></div></div>
<div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
zIndex={1600}
showAtBottom={false}
/>
color
: to change the default color of TopLoader.initialPosition
: to change initial position for the TopLoader in percentage, :0.08 = 8%
.crawlSpeed
: increment delay speed inms
.speed
: animation speed for the TopLoader inms
easing
: animation settings using easing (a CSS easing string).height
: height of TopLoader inpx
.crawl
: auto incrementing behavior for the TopLoader.showSpinner
: to show spinner or not.shadow
: a smooth shadow for the TopLoader. (set tofalse
to disable it)template
: to include custom HTML attributes for the TopLoader.zIndex
: defines zIndex for the TopLoader.showAtBottom
: To show the TopLoader at bottom. (increase height for the TopLoader to ensure it's visibility at the mobile devices)
Name | Type | Default Value |
---|---|---|
color |
string |
"#29d" |
initialPosition |
number |
0.08 |
crawlSpeed |
number |
200 |
height |
number |
3 |
crawl |
boolean |
true |
showSpinner |
boolean |
true |
easing |
string |
"ease" |
speed |
number |
200 |
shadow |
string | false |
"0 0 10px ${color}, 0 0 5px ${color}" |
template |
string |
"<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>" |
zIndex |
number |
1600 |
showAtBottom |
boolean |
false |
This project was made possible thanks to the contributions of its code contributors.
We extend a huge thanks to our financial contributor for helping us sustain this community
Support this project with your organization. Your logo will show up here with a link to your website. You can Support this project on Open Collective or Equivalent Method from the below
UPI ID: thesgj@upi (International UPI ID)