{"_id":"@cs198/next-navigation-guard","_rev":"4-c5df15b87bfff8117e41a7e4f6b35955","name":"@cs198/next-navigation-guard","dist-tags":{"latest":"0.2.3"},"versions":{"0.2.0":{"name":"@cs198/next-navigation-guard","version":"0.2.0","keywords":[],"author":{"name":"ypresto","email":"yuya.presto@gmail.com"},"license":"MIT","_id":"@cs198/next-navigation-guard@0.2.0","maintainers":[{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"}],"homepage":"https://github.com/LayerXcom/next-navigation-guard#readme","bugs":{"url":"https://github.com/LayerXcom/next-navigation-guard/issues"},"dist":{"shasum":"3ea67c710460f8be0904aaff1c4e3f066904ff52","tarball":"https://registry.npmjs.org/@cs198/next-navigation-guard/-/next-navigation-guard-0.2.0.tgz","fileCount":51,"integrity":"sha512-NjJy4OEohx1sVP6X9zETshDLmbKzYc0+iSRLNbbHmaHjJ1swX7A4/7uBUwhzLqYAgyS0eedLXZ5AwzYm7/JMOg==","signatures":[{"sig":"MEYCIQC/ysY6F4H4OElLXxSIrJqOt79SnK1aGNJRj1h+LBOMtAIhAJaz52xvbq+r7tLi58gkRlREA2W0crFWAutlHTi1NOsX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46996},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{"import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"edba1ea4be89a355e68a58d66096f9007fc3af31","scripts":{"e2e":"playwright test","test":"echo \"Error: no test specified\" && exit 1","build":"tsc -p .","watch":"tsc --watch -p .","e2e:ui":"playwright test --ui","e2e:install":"playwright install","check:packaging":"pnpm dlx @arethetypeswrong/cli --pack ."},"_npmUser":{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"},"repository":{"url":"git+https://github.com/LayerXcom/next-navigation-guard.git","type":"git"},"_npmVersion":"10.9.2","description":"Navigation Guard for Next.js App Router and Pages Router.","directories":{},"sideEffects":false,"_nodeVersion":"23.6.0","_hasShrinkwrap":false,"packageManager":"pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1","devDependencies":{"next":"^14.2.11","tsup":"^8.2.4","react":"^18.3.1","playwright":"^1.52.0","typescript":"^5.6.2","@types/node":"^20","@types/react":"^18.3.5","@playwright/test":"^1.52.0","@types/react-dom":"^18.3.5"},"peerDependencies":{"next":"^14 || ^15","react":"^18.0.0 || ^19.0.0 || ^19.0.0-rc"},"_npmOperationalInternal":{"tmp":"tmp/next-navigation-guard_0.2.0_1756669260611_0.9869485621632574","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@cs198/next-navigation-guard","version":"0.2.1","keywords":[],"author":{"name":"ypresto","email":"yuya.presto@gmail.com"},"license":"MIT","_id":"@cs198/next-navigation-guard@0.2.1","maintainers":[{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"}],"homepage":"https://github.com/LayerXcom/next-navigation-guard#readme","bugs":{"url":"https://github.com/LayerXcom/next-navigation-guard/issues"},"dist":{"shasum":"a0448080d04315a068ba5db5ea5a3aab1031e4ab","tarball":"https://registry.npmjs.org/@cs198/next-navigation-guard/-/next-navigation-guard-0.2.1.tgz","fileCount":54,"integrity":"sha512-ff4y4xunLEaBTn55HtbhVsicVwOFn/N5BKdDP2mF5JjzUKlbuqVUwfwmr8HUllxfHzueBhZwqezygqUHCIELGg==","signatures":[{"sig":"MEUCIQDqXqMEvWcdufgLntfAPk9rKdQAXEeK4PNKxsa0WCCu6AIgJd/I0QsMKZhBJD4bhgVBQHj08w0NbxOEKoEk3kqt+tI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49038},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{"import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"009eeadb93ac187c19fa4183ebc1d730bc912987","scripts":{"e2e":"playwright test","test":"echo \"Error: no test specified\" && exit 1","build":"tsc -p .","watch":"tsc --watch -p .","e2e:ui":"playwright test --ui","e2e:install":"playwright install","check:packaging":"pnpm dlx @arethetypeswrong/cli --pack ."},"_npmUser":{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"},"repository":{"url":"git+https://github.com/LayerXcom/next-navigation-guard.git","type":"git"},"_npmVersion":"10.9.3","description":"Navigation Guard for Next.js App Router and Pages Router.","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"packageManager":"pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1","devDependencies":{"next":"^14.2.11","tsup":"^8.2.4","react":"^18.3.1","playwright":"^1.52.0","typescript":"^5.6.2","@types/node":"^20","@types/react":"^18.3.5","@playwright/test":"^1.52.0","@types/react-dom":"^18.3.5"},"peerDependencies":{"next":"^14 || ^15","react":"^18.0.0 || ^19.0.0 || ^19.0.0-rc"},"_npmOperationalInternal":{"tmp":"tmp/next-navigation-guard_0.2.1_1758912052330_0.2646217943548028","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@cs198/next-navigation-guard","version":"0.2.2","keywords":[],"author":{"name":"ypresto","email":"yuya.presto@gmail.com"},"license":"MIT","_id":"@cs198/next-navigation-guard@0.2.2","maintainers":[{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"}],"homepage":"https://github.com/LayerXcom/next-navigation-guard#readme","bugs":{"url":"https://github.com/LayerXcom/next-navigation-guard/issues"},"dist":{"shasum":"e5f9af3f220f484c695f8ea540c83d93c481c1fd","tarball":"https://registry.npmjs.org/@cs198/next-navigation-guard/-/next-navigation-guard-0.2.2.tgz","fileCount":54,"integrity":"sha512-JvEwzHPVZ3J8ct0nsaar61MXx73KzPXu6qW7gy7dsP+QZHnx5QnS7EluMeiSjiVIVh3rv6CmJ0JXt45M2OW3Yw==","signatures":[{"sig":"MEUCIQDjPwoBdhZZt7yfy/hmZjSwAHAaXKLf/+7WPEjRB04BwAIgbaHmZyQK8ZJBmRaiWICKnXEDwZRyF16z+eU2P2IDsR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49437},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{"import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"009eeadb93ac187c19fa4183ebc1d730bc912987","scripts":{"e2e":"playwright test","test":"echo \"Error: no test specified\" && exit 1","build":"tsc -p .","watch":"tsc --watch -p .","e2e:ui":"playwright test --ui","e2e:install":"playwright install","check:packaging":"pnpm dlx @arethetypeswrong/cli --pack ."},"_npmUser":{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"},"repository":{"url":"git+https://github.com/LayerXcom/next-navigation-guard.git","type":"git"},"_npmVersion":"10.9.3","description":"Navigation Guard for Next.js App Router and Pages Router.","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"packageManager":"pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1","devDependencies":{"next":"^14.2.11","tsup":"^8.2.4","react":"^18.3.1","playwright":"^1.52.0","typescript":"^5.6.2","@types/node":"^20","@types/react":"^18.3.5","@playwright/test":"^1.52.0","@types/react-dom":"^18.3.5"},"peerDependencies":{"next":"^14 || ^15","react":"^18.0.0 || ^19.0.0 || ^19.0.0-rc"},"_npmOperationalInternal":{"tmp":"tmp/next-navigation-guard_0.2.2_1758912177713_0.7521115267797971","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@cs198/next-navigation-guard","version":"0.2.3","description":"Navigation Guard for Next.js App Router and Pages Router.","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{"import":"./dist/index.js","require":"./dist/index.js"},"sideEffects":false,"scripts":{"build":"tsc -p .","watch":"tsc --watch -p .","test":"echo \"Error: no test specified\" && exit 1","check:packaging":"pnpm dlx @arethetypeswrong/cli --pack .","e2e":"playwright test","e2e:ui":"playwright test --ui","e2e:install":"playwright install"},"keywords":[],"author":{"name":"ypresto","email":"yuya.presto@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/LayerXcom/next-navigation-guard.git"},"packageManager":"pnpm@9.9.0+sha512.60c18acd138bff695d339be6ad13f7e936eea6745660d4cc4a776d5247c540d0edee1a563695c183a66eb917ef88f2b4feb1fc25f32a7adcadc7aaf3438e99c1","peerDependencies":{"next":"^14 || ^15","react":"^18.0.0 || ^19.0.0 || ^19.0.0-rc"},"devDependencies":{"@playwright/test":"^1.52.0","@types/node":"^20","@types/react":"^18.3.5","@types/react-dom":"^18.3.5","next":"^14.2.11","playwright":"^1.52.0","react":"^18.3.1","tsup":"^8.2.4","typescript":"^5.6.2"},"_id":"@cs198/next-navigation-guard@0.2.3","gitHead":"009eeadb93ac187c19fa4183ebc1d730bc912987","bugs":{"url":"https://github.com/LayerXcom/next-navigation-guard/issues"},"homepage":"https://github.com/LayerXcom/next-navigation-guard#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-1xaxmIWWPap+2tRecACxPtLbmxq0YmlgIZZFnHgq+xhxDZMVREhA7QBj40nhe6KO47xCVabt65kXUE8ApNAZfA==","shasum":"99cf1f14e182ca05288ecccd3e5bfcec4a279b54","tarball":"https://registry.npmjs.org/@cs198/next-navigation-guard/-/next-navigation-guard-0.2.3.tgz","fileCount":54,"unpackedSize":49614,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICX5dTdMrKa0phg5xVhnaQbEgpPvNGyy6VLRA8c0vBjAAiEAkHwAGXBWAsHQdmw+lDHEJDg6cFrNEYi1s73H/Gjz4rc="}]},"_npmUser":{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"},"directories":{},"maintainers":[{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/next-navigation-guard_0.2.3_1758913082941_0.005677926225641672"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-31T19:41:00.457Z","modified":"2025-09-26T18:58:03.369Z","0.2.0":"2025-08-31T19:41:00.847Z","0.2.1":"2025-09-26T18:40:52.555Z","0.2.2":"2025-09-26T18:42:57.902Z","0.2.3":"2025-09-26T18:58:03.161Z"},"bugs":{"url":"https://github.com/LayerXcom/next-navigation-guard/issues"},"author":{"name":"ypresto","email":"yuya.presto@gmail.com"},"license":"MIT","homepage":"https://github.com/LayerXcom/next-navigation-guard#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/LayerXcom/next-navigation-guard.git"},"description":"Navigation Guard for Next.js App Router and Pages Router.","maintainers":[{"name":"jacobrobertsbaca","email":"jacobrobertsbaca@gmail.com"}],"readme":"# next-navigation-guard\n\nYou use Next.js, and you want to show \"You have unsaved changes that will be lost.\" dialog when user leaves page?\nThis library is just for you!\n\n## Demo\n\n[https://layerxcom.github.io/next-navigation-guard/](https://layerxcom.github.io/next-navigation-guard/)\n\n## How does it work?\n\n- [English Slide](https://speakerdeck.com/ypresto/cancel-next-js-page-navigation-full-throttle)\n- [Japanese Slide](https://speakerdeck.com/ypresto/hack-to-prevent-page-navigation-in-next-js)\n\n## Installation\n\n```bash\nnpm install next-navigation-guard\n# or\nyarn install next-navigation-guard\n# or\npnpm install next-navigation-guard\n```\n\n- App Router: app/layout.tsx\n\n  ```tsx\n  <html lang=\"en\">\n    <body className={`${geistSans.variable} ${geistMono.variable}`}>\n      <NavigationGuardProvider>{children}</NavigationGuardProvider>\n    </body>\n  </html>\n  ```\n\n- Page Router: page/_app.tsx\n\n  ```tsx\n  export default function MyApp({ Component, pageProps }: AppProps) {\n    return (\n      <NavigationGuardProvider>\n        <Component {...pageProps} />\n      </NavigationGuardProvider>\n    );\n  }\n  ```\n\n## Usage\n\n- window.confirm()\n\n  ```tsx\n  useNavigationGuard({ enabled: form.changed, confirm: () => window.confirm(\"You have unsaved changes that will be lost.\") })\n  ```\n\n- Custom dialog component\n\n  ```tsx\n  const navGuard = useNavigationGuard({ enabled: form.changed })\n\n  return (\n    <>\n      <YourContent />\n\n      <Dialog open={navGuard.active}>\n        <DialogText>You have unsaved changes that will be lost.</DialogText>\n\n        <DialogActions>\n          <DialogButton onClick={navGuard.reject}>Cancel</DialogButton>\n          <DialogButton onClick={navGuard.accept}>Discard</DialogButton>\n        </DialogActions>\n      </Dialog>\n    </>\n  )\n  ```\n\nSee working example in example/ directory and its `NavigationGuardToggle` component.\n","readmeFilename":"README.md"}