{"_id":"@alessiofrittoli/react-top-loader","_rev":"6-2b5b0fb997ba176ebd2f66361911c4b9","name":"@alessiofrittoli/react-top-loader","dist-tags":{"alpha":"1.0.0-alpha.4","latest":"1.0.1"},"versions":{"0.1.0":{"name":"@alessiofrittoli/react-top-loader","version":"0.1.0","keywords":["react","nextjs"],"author":{"url":"https://alessiofrittoli.it","name":"Alessio Frittoli","email":"info@alessiofrittoli.it"},"license":"MIT","_id":"@alessiofrittoli/react-top-loader@0.1.0","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"dist":{"shasum":"9b0c6362bd53cbeb33a73dfeb86af8fa98c29907","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-0.1.0.tgz","fileCount":13,"integrity":"sha512-Q5VP80eUy6v+ShhV6BEQ/ato5STn5Yn1tsIrBKk37eBqOmimHCL11nEoyO7VjYrlDgWYEkVTcU9kbrZ8ycwJ9g==","signatures":[{"sig":"MEQCIHlsQQEMm4h3p/gmmXFnA2k7jeYoJIkd/L+eranDXrMQAiAmK+jrifi/1hF8oFBsvaZwYOU8qIrw/71LaIf5TRLpUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24440},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"funding":[{"url":"https://github.com/sponsors/alessiofrittoli","type":"github"}],"gitHead":"ea7aad928fcd8f93feff68efd527220c0654defb","scripts":{"dev":"cross-env NODE_ENV=development tsup --watch","//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","lint":"eslint","test":"jest --verbose","build":"pnpm lint && pnpm test:ci && pnpm build:prod","release":"node scripts/release.js --verbose --npm","test:ci":"jest --ci --verbose","test:jest":"pnpm test:watch jest.test.ts","build:prod":"cross-env NODE_ENV=production tsup","test:watch":"jest --watchAll --verbose","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent"},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"repository":{"url":"git+https://github.com/alessiofrittoli/react-top-loader.git","type":"git"},"_npmVersion":"11.4.0","description":"Displays a top loader progress while navigating on a different page","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","dependencies":{"@alessiofrittoli/url-utils":"^3.6.0","@alessiofrittoli/react-hooks":"^3.3.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.4","next":"15.4.2","tsup":"^8.5.0","react":"^19.1.0","dotenv":"^17.2.0","eslint":"^9.31.0","globals":"^16.3.0","ts-jest":"^29.4.0","ts-node":"^10.9.2","cross-env":"^7.0.3","react-dom":"^19.1.0","@eslint/js":"^9.31.0","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","http-server":"^14.1.1","@types/react":"^19.1.8","concurrently":"^9.2.0","@jest/globals":"^30.0.4","@eslint/compat":"^1.3.1","@eslint/eslintrc":"^3.3.1","@types/react-dom":"^19.1.6","typescript-eslint":"^8.37.0","eslint-plugin-react":"^7.37.5","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.4","@testing-library/jest-dom":"^6.6.3","eslint-plugin-react-hooks":"^5.2.0","@testing-library/user-event":"^14.6.1","@alessiofrittoli/node-scripts":"3.1.0","eslint-plugin-react-server-components":"^1.2.0"},"peerDependencies":{"next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/react-top-loader_0.1.0_1753111842040_0.08123000792867963","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.2":{"name":"@alessiofrittoli/react-top-loader","version":"1.0.0-alpha.2","keywords":["react","nextjs","top-loader","top-loader-bar"],"author":{"url":"https://alessiofrittoli.it","name":"Alessio Frittoli","email":"info@alessiofrittoli.it"},"license":"MIT","_id":"@alessiofrittoli/react-top-loader@1.0.0-alpha.2","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"dist":{"shasum":"68219c37919fdd1f46cceb53848aa4874b5de016","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-1.0.0-alpha.2.tgz","fileCount":13,"integrity":"sha512-7Cm6t3kwsWxH+VHbfOlDEbBkxR6PSfmc0FEyJ8eE7bdOH4AD+lMxkDwZZE+7KyuGUzaX+daw558Y/ytGhRMZLw==","signatures":[{"sig":"MEUCIQDmtvDZdNSoo6B7SAF1Qk5uin/LoP701QW9QIlh5JJm7AIgAfT5k0fXYTB3snwTUJQo64nHLZ5WvNppCCU6ZfHQc/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24496},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"funding":[{"url":"https://github.com/sponsors/alessiofrittoli","type":"github"}],"gitHead":"df65ed0b7ed082b085d764b16df1fd90eb74e95b","scripts":{"dev":"cross-env NODE_ENV=development tsup --watch","//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","lint":"eslint","test":"jest --verbose","build":"pnpm lint && pnpm test:ci && pnpm build:prod","release":"node scripts/release.js --verbose --npm","test:ci":"jest --ci --verbose","test:jest":"pnpm test:watch jest.test.ts","build:prod":"cross-env NODE_ENV=production tsup","test:watch":"jest --watchAll --verbose","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent"},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"repository":{"url":"git+https://github.com/alessiofrittoli/react-top-loader.git","type":"git"},"_npmVersion":"11.4.0","description":"Displays a top loader progress while navigating on a different page","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","dependencies":{"@alessiofrittoli/url-utils":"^3.6.0","@alessiofrittoli/react-hooks":"^3.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.0.4","next":"15.4.2","tsup":"^8.5.0","react":"^19.1.0","dotenv":"^17.2.0","eslint":"^9.31.0","globals":"^16.3.0","ts-jest":"^29.4.0","ts-node":"^10.9.2","cross-env":"^7.0.3","react-dom":"^19.1.0","@eslint/js":"^9.31.0","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","http-server":"^14.1.1","@types/react":"^19.1.8","concurrently":"^9.2.0","@jest/globals":"^30.0.4","@eslint/compat":"^1.3.1","@eslint/eslintrc":"^3.3.1","@types/react-dom":"^19.1.6","typescript-eslint":"^8.37.0","eslint-plugin-react":"^7.37.5","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.4","@testing-library/jest-dom":"^6.6.3","eslint-plugin-react-hooks":"^5.2.0","@testing-library/user-event":"^14.6.1","@alessiofrittoli/node-scripts":"3.1.0","eslint-plugin-react-server-components":"^1.2.0"},"peerDependencies":{"next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/react-top-loader_1.0.0-alpha.2_1753136341838_0.7675177850481432","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.3":{"name":"@alessiofrittoli/react-top-loader","version":"1.0.0-alpha.3","keywords":["react","nextjs","top-loader","top-loader-bar"],"author":{"url":"https://alessiofrittoli.it","name":"Alessio Frittoli","email":"info@alessiofrittoli.it"},"license":"MIT","_id":"@alessiofrittoli/react-top-loader@1.0.0-alpha.3","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"dist":{"shasum":"e1519b85caf700c317a621d900fabba0007d9d42","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-1.0.0-alpha.3.tgz","fileCount":13,"integrity":"sha512-WOgxDzH0A5Zr7mPugpO9XM9nER6aHBsmTlCUas90mhDoX0bWaQjiJdelb0v7mJvOXEMnnsmNLkuA5ngnPVMhfw==","signatures":[{"sig":"MEUCIGXB+XQv+wquiM/WgT4JOY/z+hrabTDiPR8a2Oz1jYPIAiEAiVdSJnUWIOnpBb+9o6ziT3ixhnljXGl9TiwfudausTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24495},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"funding":[{"url":"https://github.com/sponsors/alessiofrittoli","type":"github"}],"gitHead":"359e044e5f05cf24f1bde29d6936bfaeef8a4d95","scripts":{"dev":"cross-env NODE_ENV=development tsup --watch","//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","lint":"eslint","test":"jest --verbose","build":"pnpm lint && pnpm test:ci && pnpm build:prod","release":"node scripts/release.js --verbose --npm","test:ci":"jest --ci --verbose","test:jest":"pnpm test:watch jest.test.ts","build:prod":"cross-env NODE_ENV=production tsup","test:watch":"jest --watchAll --verbose","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent"},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"repository":{"url":"git+https://github.com/alessiofrittoli/react-top-loader.git","type":"git"},"_npmVersion":"11.4.0","description":"Displays a top loader progress while navigating on a different page","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","dependencies":{"@alessiofrittoli/url-utils":"^3.6.0","@alessiofrittoli/react-hooks":"^3.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.0.4","next":"15.4.2","tsup":"^8.5.0","react":"^19.1.0","dotenv":"^17.2.0","eslint":"^9.31.0","globals":"^16.3.0","ts-jest":"^29.4.0","ts-node":"^10.9.2","cross-env":"^7.0.3","react-dom":"^19.1.0","@eslint/js":"^9.31.0","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","http-server":"^14.1.1","@types/react":"^19.1.8","concurrently":"^9.2.0","@jest/globals":"^30.0.4","@eslint/compat":"^1.3.1","@eslint/eslintrc":"^3.3.1","@types/react-dom":"^19.1.6","typescript-eslint":"^8.37.0","eslint-plugin-react":"^7.37.5","@testing-library/dom":"^10.4.0","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.4","@testing-library/jest-dom":"^6.6.3","eslint-plugin-react-hooks":"^5.2.0","@testing-library/user-event":"^14.6.1","@alessiofrittoli/node-scripts":"3.1.0","eslint-plugin-react-server-components":"^1.2.0"},"peerDependencies":{"next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/react-top-loader_1.0.0-alpha.3_1753990308319_0.8572412157982234","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-alpha.4":{"name":"@alessiofrittoli/react-top-loader","version":"1.0.0-alpha.4","keywords":["react","nextjs","top-loader","top-loader-bar"],"author":{"url":"https://alessiofrittoli.it","name":"Alessio Frittoli","email":"info@alessiofrittoli.it"},"license":"MIT","_id":"@alessiofrittoli/react-top-loader@1.0.0-alpha.4","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"dist":{"shasum":"276c022c265094ca39b3a6758d6b5639b1346ab7","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-1.0.0-alpha.4.tgz","fileCount":13,"integrity":"sha512-PWnI6MwC3ElLSWQLXL2AMg+7og4pOdnNM73JbChoo/h4+wpndipkAzAoyu0CAOFiXeNTGu3wKolY7KSaLMme3Q==","signatures":[{"sig":"MEYCIQDiKtzrOa9MzLqWEBc5vzNEQeoUUNEx/rjW/U9h0xWL7AIhAJ/VpG4s20Rg5NvZLZX5Ot+Hku2ArL7AWyhgwg9T6IRo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24495},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"funding":[{"url":"https://github.com/sponsors/alessiofrittoli","type":"github"}],"gitHead":"2ed7aca3e48c5218836f23a7a2a774f60d23653f","scripts":{"dev":"cross-env NODE_ENV=development tsup --watch","//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","lint":"eslint","test":"jest --verbose","build":"pnpm lint && pnpm test:ci && pnpm build:prod","release":"node scripts/release.js --verbose --npm","test:ci":"jest --ci --verbose","test:jest":"pnpm test:watch jest.test.ts","build:prod":"cross-env NODE_ENV=production tsup","test:watch":"jest --watchAll --verbose","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent"},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"repository":{"url":"git+https://github.com/alessiofrittoli/react-top-loader.git","type":"git"},"_npmVersion":"11.4.0","description":"Displays a top loader progress while navigating on a different page","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","dependencies":{"@alessiofrittoli/url-utils":"^3.6.0","@alessiofrittoli/react-hooks":"^3.3.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^30.0.5","next":"15.4.5","tsup":"^8.5.0","react":"^19.1.1","dotenv":"^17.2.1","eslint":"^9.32.0","globals":"^16.3.0","ts-jest":"^29.4.0","ts-node":"^10.9.2","cross-env":"^10.0.0","react-dom":"^19.1.1","@eslint/js":"^9.32.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^24.1.0","http-server":"^14.1.1","@types/react":"^19.1.9","concurrently":"^9.2.0","@jest/globals":"^30.0.5","@eslint/compat":"^1.3.1","@eslint/eslintrc":"^3.3.1","@types/react-dom":"^19.1.7","typescript-eslint":"^8.38.0","eslint-plugin-react":"^7.37.5","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.0.5","@testing-library/jest-dom":"^6.6.4","eslint-plugin-react-hooks":"^5.2.0","@testing-library/user-event":"^14.6.1","@alessiofrittoli/node-scripts":"3.1.0","eslint-plugin-react-server-components":"^1.2.0"},"peerDependencies":{"next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/react-top-loader_1.0.0-alpha.4_1754144401019_0.7738690204186338","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@alessiofrittoli/react-top-loader","version":"1.0.0","keywords":["react","nextjs","top-loader","top-loader-bar"],"author":{"url":"https://alessiofrittoli.it","name":"Alessio Frittoli","email":"info@alessiofrittoli.it"},"license":"MIT","_id":"@alessiofrittoli/react-top-loader@1.0.0","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"dist":{"shasum":"85b2ff4c641b6dafdd1404f95bd82befb67d8456","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-1.0.0.tgz","fileCount":13,"integrity":"sha512-5PE3Sks6zL//+Wdiff3KPGb7EbSOI8rjLen5UUzsizUCDJAgWkIeA1jsCXk3w3HfX/KWBgaxYxhdV++opJgsAg==","signatures":[{"sig":"MEYCIQCEyMFG3w6/fxTRgciawpFQB0hPnr5kDxtotwlGLgToIAIhAMxxOT1nIYdP2HuRYgu8mjla0sZats1E8H9pXm7osXkr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37588},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"funding":[{"url":"https://github.com/sponsors/alessiofrittoli","type":"github"}],"gitHead":"68627cb96ab422e3900608d1206f58a22a791332","scripts":{"dev":"cross-env NODE_ENV=development tsup --watch","//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","lint":"eslint","test":"jest --verbose","build":"pnpm lint && pnpm test:ci && pnpm build:prod","release":"node scripts/release.js --verbose --npm","test:ci":"jest --ci --verbose","test:jest":"pnpm test:watch jest.test.ts","build:prod":"cross-env NODE_ENV=production tsup","test:watch":"jest --watchAll --verbose","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent"},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"repository":{"url":"git+https://github.com/alessiofrittoli/react-top-loader.git","type":"git"},"_npmVersion":"11.5.2","description":"Displays a top loader progress while navigating on a different page","directories":{},"sideEffects":false,"_nodeVersion":"22.15.0","dependencies":{"@alessiofrittoli/url-utils":"^3.7.1","@alessiofrittoli/react-hooks":"^3.4.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","next":"16.0.7","tsup":"^8.5.1","react":"^19.2.1","dotenv":"^17.2.3","eslint":"^9.39.1","globals":"^16.5.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","cross-env":"^10.1.0","react-dom":"^19.2.1","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.1","http-server":"^14.1.1","@types/react":"^19.2.7","concurrently":"^9.2.1","@jest/globals":"^30.2.0","@eslint/compat":"^2.0.0","@eslint/eslintrc":"^3.3.3","@types/react-dom":"^19.2.3","typescript-eslint":"^8.48.1","eslint-plugin-react":"^7.37.5","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^30.2.0","@testing-library/jest-dom":"^6.9.1","eslint-plugin-react-hooks":"^7.0.1","@testing-library/user-event":"^14.6.1","@alessiofrittoli/node-scripts":"3.2.0","eslint-plugin-react-server-components":"^1.2.0"},"peerDependencies":{"next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0","@types/react":"^19.1.0","@types/react-dom":"^19.1.0"},"_npmOperationalInternal":{"tmp":"tmp/react-top-loader_1.0.0_1764867675042_0.15862890379020067","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alessiofrittoli/react-top-loader","version":"1.0.1","description":"Displays a top loader progress while navigating on a different page","author":{"name":"Alessio Frittoli","email":"info@alessiofrittoli.it","url":"https://alessiofrittoli.it"},"license":"MIT","funding":[{"type":"github","url":"https://github.com/sponsors/alessiofrittoli"}],"keywords":["react","nextjs","top-loader","top-loader-bar"],"homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"repository":{"type":"git","url":"git+https://github.com/alessiofrittoli/react-top-loader.git"},"main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./next":{"import":{"types":"./dist/next/index.d.mts","default":"./dist/next/index.mjs"},"require":{"types":"./dist/next/index.d.ts","default":"./dist/next/index.js"}}},"sideEffects":false,"scripts":{"//1a":"*********************************************************************","//1b":"******************** DEV - BUILD - LINT - RELEASE *******************","//1c":"*********************************************************************","dev":"cross-env NODE_ENV=development tsup --watch","build:prod":"cross-env NODE_ENV=production tsup","build":"pnpm lint && pnpm test:ci && pnpm build:prod","lint":"eslint","release":"node scripts/release.js --verbose --npm","//2a":"*********************************************************************","//2b":"***************************** UNIT TESTS ****************************","//2c":"*********************************************************************","test":"jest --verbose","test:watch":"jest --watchAll --verbose","test:ci":"jest --ci --verbose","//3a":"*********************************************************************","//3b":"************************ UNIT TESTS COVERAGE ************************","//3c":"*********************************************************************","test:coverage":"pnpm test:watch --coverage","test:coverage:ci":"pnpm test:ci --coverage","test:serve-coverage":"http-server ./coverage/lcov-report --gzip true -p 0 -o --silent","test:coverage:serve":"concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"","//4a":"*********************************************************************","//4b":"************************ TARGETED UNIT TESTS ************************","//4c":"*********************************************************************","test:jest":"pnpm test:watch jest.test.ts"},"peerDependencies":{"@types/react":"^19.1.0","@types/react-dom":"^19.1.0","next":"^15.3.1","react":"^19.1.0","react-dom":"^19.1.0"},"devDependencies":{"@alessiofrittoli/node-scripts":"3.2.0","@eslint/compat":"^2.0.0","@eslint/eslintrc":"^3.3.3","@eslint/js":"^9.39.1","@jest/globals":"^30.2.0","@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.0","@testing-library/user-event":"^14.6.1","@types/jest":"^30.0.0","@types/node":"^24.10.1","@types/react":"^19.2.7","@types/react-dom":"^19.2.3","concurrently":"^9.2.1","cross-env":"^10.1.0","dotenv":"^17.2.3","eslint":"^9.39.1","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-server-components":"^1.2.0","globals":"^16.5.0","http-server":"^14.1.1","jest":"^30.2.0","jest-environment-jsdom":"^30.2.0","next":"16.0.7","react":"^19.2.1","react-dom":"^19.2.1","ts-jest":"^29.4.6","ts-node":"^10.9.2","tsup":"^8.5.1","typescript":"^5.9.3","typescript-eslint":"^8.48.1"},"dependencies":{"@alessiofrittoli/react-hooks":"^3.4.0","@alessiofrittoli/url-utils":"^3.7.1"},"_id":"@alessiofrittoli/react-top-loader@1.0.1","gitHead":"744d4dcfcc73ebac8fb604a480895ecae41b8599","_nodeVersion":"22.15.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-xKw+1fno7mE60pwo+5/tDjy2o3YuVsxmszIeWa/ASUpqxPgVveTRnpVmxdeUMEuAcsIrqpUPx7Lr6hmiDkVvTw==","shasum":"66f33dab4dd3000d20a85b60b1901a5dc9f4d3ca","tarball":"https://registry.npmjs.org/@alessiofrittoli/react-top-loader/-/react-top-loader-1.0.1.tgz","fileCount":13,"unpackedSize":37588,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDlZNyyTreelpHukTEqMG1sdi0kMPHMRC50GvWMWLmCEgIgK9Hdt3NhQUtWcZ0ud/5d8jNXLjFTwbVR/afeT/FNbiQ="}]},"_npmUser":{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"},"directories":{},"maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-top-loader_1.0.1_1764868106953_0.22260598753175476"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-21T15:30:41.927Z","modified":"2025-12-04T17:08:27.673Z","0.1.0":"2025-07-21T15:30:42.225Z","1.0.0-alpha.2":"2025-07-21T22:19:02.071Z","1.0.0-alpha.3":"2025-07-31T19:31:48.523Z","1.0.0-alpha.4":"2025-08-02T14:20:01.230Z","1.0.0":"2025-12-04T17:01:15.218Z","1.0.1":"2025-12-04T17:08:27.133Z"},"bugs":{"url":"https://github.com/alessiofrittoli/react-top-loader/issues","email":"info@alessiofrittoli.it"},"author":{"name":"Alessio Frittoli","email":"info@alessiofrittoli.it","url":"https://alessiofrittoli.it"},"license":"MIT","homepage":"https://github.com/alessiofrittoli/react-top-loader#readme","keywords":["react","nextjs","top-loader","top-loader-bar"],"repository":{"type":"git","url":"git+https://github.com/alessiofrittoli/react-top-loader.git"},"description":"Displays a top loader progress while navigating on a different page","maintainers":[{"name":"alessiofrittoli","email":"info@alessiofrittoli.it"}],"readme":"# React TopLoader 🏋🏼‍♂️\n\n[![NPM Latest Version][version-badge]][npm-url] [![Coverage Status][coverage-badge]][coverage-url] [![Socket Status][socket-badge]][socket-url] [![NPM Monthly Downloads][downloads-badge]][npm-url] [![Dependencies][deps-badge]][deps-url]\n\n[version-badge]: https://img.shields.io/npm/v/%40alessiofrittoli%2Freact-top-loader\n[npm-url]: https://npmjs.org/package/%40alessiofrittoli%2Freact-top-loader\n[coverage-badge]: https://coveralls.io/repos/github/alessiofrittoli/react-top-loader/badge.svg\n[coverage-url]: https://coveralls.io/github/alessiofrittoli/react-top-loader\n[socket-badge]: https://socket.dev/api/badge/npm/package/@alessiofrittoli/react-top-loader\n[socket-url]: https://socket.dev/npm/package/@alessiofrittoli/react-top-loader/overview\n[downloads-badge]: https://img.shields.io/npm/dm/%40alessiofrittoli%2Freact-top-loader.svg\n[deps-badge]: https://img.shields.io/librariesio/release/npm/%40alessiofrittoli%2Freact-top-loader\n[deps-url]: https://libraries.io/npm/%40alessiofrittoli%2Freact-top-loader\n[sponsor-badge]: https://img.shields.io/static/v1?label=Fund%20this%20package&message=%E2%9D%A4&logo=GitHub&color=%23DB61A2\n[sponsor-url]: https://github.com/sponsors/alessiofrittoli\n\n## Displays a top loader progress while navigating on a different page\n\n### Table of Contents\n\n- [Getting started](#getting-started)\n- [API Reference](#api-reference)\n  - [React Components](#react-components)\n    - [`TopLoader`](#toploader)\n    - [`TopLoaderProgressBar`](#toploaderprogressbar)\n  - [React Hooks](#react-hooks)\n    - [`useTopLoaderApi`](#usetoploaderapi)\n    - [`useTopLoader`](#usetoploader)\n  - [React Context API](#react-context-api)\n    - [TopLoaderContext](#toploadercontext)\n    - [TopLoaderProvider](#toploaderprovider)\n  - [Next.js Integration](#nextjs-integration)\n    - [useRouter](#userouter)\n  - [Usage examples](#usage-examples)\n- [Development](#development)\n  - [Install depenendencies](#install-depenendencies)\n  - [Build the source code](#build-the-source-code)\n  - [ESLint](#eslint)\n  - [Jest](#jest)\n- [Contributing](#contributing)\n- [Security](#security)\n- [Credits](#made-with-)\n\n---\n\n### Getting started\n\nRun the following command to start using `react-top-loader` in your projects:\n\n```bash\nnpm i @alessiofrittoli/react-top-loader\n```\n\nor using `pnpm`\n\n```bash\npnpm i @alessiofrittoli/react-top-loader\n```\n\n---\n\n### Overview\n\nProgress updates aren't managed via React state updates but they're based on simple CSS modifications.\n\nThis library listen for link clicks, history push and replace states and checks effective navigation in order to start updating navigation progresses.\n\nTo avoid negatively impacting your application INP value we use the [`useDeferCallback`](https://npmjs.com/package/@alessiofrittoli/react-hooks#usedefercallback) exported by [`@alessiofrittoli/react-hooks`](https://npmjs.com/package/@alessiofrittoli/react-hooks) library which defers tasks attached to user interactions.\n\n---\n\n### API Reference\n\n#### React Components\n\n##### `TopLoader`\n\nDisplays a top loader progress while navigating on a different page.\n\n⚠️ This Component should be mounted once, preferably in the root layout of your application and shouldn't be unmounted when navigating on a different page.\n\nThis Component internally use the [`TopLoaderProvider`](#toploaderprovider) Component in order to expose the [`useTopLoaderApi`](#usetoploaderapi) widely in your app.\n\n<details>\n\n<summary style=\"cursor:pointer\">Component Props</summary>\n\n| Property    | Type                                  | Description                                                                                                                                |\n| ----------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |\n| `Component` | `React.FC<TopLoaderProgressBarProps>` | A React Component which renders a custom progress bar. It must accepts [`TopLoaderProgressBarProps`](#toploaderprogressbarprops) as props. |\n\nOther properties are inherited by the [`TopLoaderProviderProps`](#toploaderproviderprops) and [`TopLoaderProgressBarProps`](#toploaderprogressbarprops).\n\n</details>\n\n---\n\n##### `TopLoaderProgressBar`\n\nSimple TopLoader progress bar.\n\nIt requires a React.RefObject through the `progressBarRef` property which will be used to update the progress bar styles based on the current progress value.\n\nThis Component is internally used by the [`TopLoader`](#toploader) Component but it is exported for custom implementations.\n\n###### `TopLoaderProgressBarProps`\n\n<details>\n\n<summary style=\"cursor:pointer\">Component Props</summary>\n\n| Property         | Type                                    | Description                                                                                                                     |\n| ---------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `progressBarRef` | `React.RefObject<HTMLDivElement\\|null>` | The `React.RefObject` attached to the `HTMLDivElement` which is then used to update styles based on the current progress value. |\n\nOther properties are inherited by the `React.ComponentProps<'div'>` type and not documented here.\n\n</details>\n\n---\n\n#### React Hooks\n\n##### `useTopLoaderApi`\n\nTopLoader base API React hook.\n\nIt provides status and methods needed to easly handle continuous progress update.\n\nThis hook is internally used by [`TopLoaderProvider`](#toploaderprovider) Component but it is exported for custom implementations.\n\n###### Types\n\n###### `UseTopLoaderApiOptions`\n\nDefines accepted properties in `useTopLoaderApi` options.\n\n- onStart?: [`OnStartHandler`](#onstarthandler) - A custom callback executed when the `start` method is called.\n- onTick?: [`OnTickHandler`](#ontickhandler) - A custom callback executed when the progress value is updated.\n- onStop?: [`OnStopHandler`](#onstophandler) - A custom callback executed when the `stop` method is called.\n\n---\n\n###### `OnStartHandler`\n\nA custom callback executed when the `start` method is called.\n\n```ts\n() => void\n```\n\n---\n\n###### `OnTickHandler`\n\nA custom callback executed when the progress value is updated.\n\n```ts\n( progress: number ) => void\n```\n\n<details>\n\n<summary style=\"cursor:pointer\">Parameters</summary>\n\n| Parameter  | Type     | Description                                  |\n| ---------- | -------- | -------------------------------------------- |\n| `progress` | `number` | The progress value number from `0` to `100`. |\n\n</details>\n\n---\n\n###### `OnStopHandler`\n\nA custom callback executed when the `stop` method is called.\n\n```ts\n() => void\n```\n\n---\n\n<details>\n\n<summary style=\"cursor:pointer\">Hook parameters</summary>\n\n| Parameter         | Type                     | Default | Description                                                    |\n| ----------------- | ------------------------ | ------- | -------------------------------------------------------------- |\n| `options`         | `UseTopLoaderApiOptions` | `{}`    | An object defining custom options.                             |\n| `options.onStart` | `OnStartHandler`         | -       | A custom callback executed when the `start` method is called.  |\n| `options.onTick`  | `OnTickHandler`          | -       | A custom callback executed when the progress value is updated. |\n| `options.onStop`  | `OnStopHandler`          | -       | A custom callback executed when the `stop` method is called.   |\n\n</details>\n\n---\n\n<details>\n\n<summary style=\"cursor:pointer\">Returns</summary>\n\nType: `UseTopLoaderApi`\n\nAn object defining progress status and methods.\n\n- playing: `React.RefObject<boolean>` - A React.RefObject indicating whether the work is currently playing or not.\n- progress: `React.RefObject<number>` - A React.RefObject indicating the current progress value.\n- start: `() => void` - Start the TopLoader work.\n- tick: `( amount?: number ) => boolean` - Tick TopLoader progress.\n- stop: `() => void` - Set progress to `100` and stop the TopLoader work.\n\n</details>\n\n---\n\n##### `useTopLoader`\n\nAccess to the TopLoader React Context API.\n\n<details>\n\n<summary style=\"cursor:pointer\">Returns</summary>\n\nType: `UseTopLoaderApi`\n\nThis hooks returns the [`useTopLoaderApi`](#usetoploaderapi) result exposed through the [`TopLoaderContext`](#toploadercontext).\n\n</details>\n\n---\n\n#### React Context API\n\n##### `TopLoaderContext`\n\nThe `TopLoaderContext` creates a React Context that allows [`useTopLoaderApi`](#usetoploaderapi) exposure.\n\n---\n\n##### `TopLoaderProvider`\n\nThe `TopLoaderProvider` Component exposes the [`useTopLoaderApi`](#usetoploaderapi) state and functions and handles start, tick and stop of the TopLoader progress while navigating on a different page.\n\n###### `TopLoaderProviderProps`\n\n<details>\n\n<summary style=\"cursor:pointer\">Component Props</summary>\n\nThe Component accepts [`UseTopLoaderApiOptions`](#usetoploaderapioptions) and `children`.\n\n</details>\n\n---\n\n#### Next.js Integration\n\nIf you're developing a [Next.js](https://nextjs.org) web application with the [App Router](https://nextjs.org/docs/app), this library exports some wrappers required for a better integration.\n\n##### `useRouter`\n\nExtends the Next.js router with top loader integration.\n\nThis hook wraps the Next.js router and triggers a top loader animation whenever a navigation action (`push` or `replace`) changes the current pathname.\nIt exposes the standard router methods (`back`, `forward`, `refresh`, `prefetch`) along with the enhanced `push` and `replace` methods.\n\nIt's usage remain unchanged so please refer to the official [`useRouter`](https://nextjs.org/docs/app/api-reference/functions/use-router) documention for more information.\n\n---\n\n#### Usage examples\n\n##### Basic usage\n\n---\n\n##### Customizing progress bar styles\n\n---\n\n##### Progress bar custom component\n\n---\n\n##### Navigating with Next.js App Router\n\n---\n\n### Development\n\n#### Install depenendencies\n\n```bash\nnpm install\n```\n\nor using `pnpm`\n\n```bash\npnpm i\n```\n\n#### Build the source code\n\nRun the following command to test and build code for distribution.\n\n```bash\npnpm build\n```\n\n#### [ESLint](https://www.npmjs.com/package/eslint)\n\nwarnings / errors check.\n\n```bash\npnpm lint\n```\n\n#### [Jest](https://npmjs.com/package/jest)\n\nRun all the defined test suites by running the following:\n\n```bash\n# Run tests and watch file changes.\npnpm test:watch\n\n# Run tests in a CI environment.\npnpm test:ci\n```\n\n- See [`package.json`](./package.json) file scripts for more info.\n\nRun tests with coverage.\n\nAn HTTP server is then started to serve coverage files from `./coverage` folder.\n\n⚠️ You may see a blank page the first time you run this command. Simply refresh the browser to see the updates.\n\n```bash\ntest:coverage:serve\n```\n\n---\n\n### Contributing\n\nContributions are truly welcome!\n\nPlease refer to the [Contributing Doc](./CONTRIBUTING.md) for more information on how to start contributing to this project.\n\nHelp keep this project up to date with [GitHub Sponsor][sponsor-url].\n\n[![GitHub Sponsor][sponsor-badge]][sponsor-url]\n\n---\n\n### Security\n\nIf you believe you have found a security vulnerability, we encourage you to **_responsibly disclose this and NOT open a public issue_**. We will investigate all legitimate reports. Email `security@alessiofrittoli.it` to disclose any security vulnerabilities.\n\n### Made with ☕\n\n<table style='display:flex;gap:20px;'>\n  <tbody>\n    <tr>\n      <td>\n        <img alt=\"avatar\" src='https://avatars.githubusercontent.com/u/35973186' style='width:60px;border-radius:50%;object-fit:contain;'>\n      </td>\n      <td>\n        <table style='display:flex;gap:2px;flex-direction:column;'>\n          <tbody>\n              <tr>\n                <td>\n                  <a href='https://github.com/alessiofrittoli' target='_blank' rel='noopener'>Alessio Frittoli</a>\n                </td>\n              </tr>\n              <tr>\n                <td>\n                  <small>\n                    <a href='https://alessiofrittoli.it' target='_blank' rel='noopener'>https://alessiofrittoli.it</a> |\n                    <a href='mailto:info@alessiofrittoli.it' target='_blank' rel='noopener'>info@alessiofrittoli.it</a>\n                  </small>\n                </td>\n              </tr>\n          </tbody>\n        </table>\n      </td>\n    </tr>\n  </tbody>\n</table>\n","readmeFilename":"README.md"}