A zero-dependency React and Next.js component that adds smooth page transitions using the View Transitions API, with graceful fallbacks for unsupported browsers.
- Zero Dependencies - Lightweight and efficient
- Next.js App Router Ready - Full support for Next.js 13+ and the App Router
- View Transitions API - Smooth page transitions in supported browsers
- Graceful Fallback - Clean fallback for unsupported browsers
- Fully Tested - 100% test coverage
- TypeScript Support - Full type safety and IntelliSense
- Highly Configurable - Customizable transitions and behavior
npm install @rodrigoant/view-transition-link
# or with yarn
yarn add @rodrigoant/view-transition-link
# or with pnpm
pnpm add @rodrigoant/view-transition-link
You can import the component in two ways:
// Using default import
import Link from "@rodrigoant/view-transition-link";
// OR using named import
import { Link } from "@rodrigoant/view-transition-link";
function MyComponent() {
return <Link href="/about">About Page</Link>;
}
import Link from "@rodrigoant/view-transition-link";
function MyComponent() {
return (
<Link
href="/about"
delay={500}
className="my-link-class"
onClick={(e) => console.log("Link clicked!")}
>
About Page
</Link>
);
}
import Link from "@rodrigoant/view-transition-link";
function MyComponent() {
return (
<Link
href="/dashboard"
prefetch={true}
replace={false}
scroll={true}
shallow={false}
>
Dashboard
</Link>
);
}
Prop | Type | Default | Description |
---|---|---|---|
href |
string |
Required | The target URL for navigation |
children |
ReactNode |
Required | React children elements |
className |
string |
undefined |
CSS class for styling |
disabled |
boolean |
false |
Disables the link when true |
tabIndex |
number |
undefined |
Sets the tab index for accessibility |
title |
string |
undefined |
Sets the title attribute |
onClick |
(e: MouseEvent) => void |
undefined |
Custom click handler |
delay |
number |
0 |
Transition delay in milliseconds |
Prop | Type | Default | Description |
---|---|---|---|
prefetch |
boolean |
true |
Enable/disable prefetching |
replace |
boolean |
false |
Replace instead of push to history |
scroll |
boolean |
true |
Auto-scroll to top after navigation |
shallow |
boolean |
false |
Shallow routing without data fetching |
- ✅ Chrome/Edge 111+: Full View Transitions API support
- ✅ Safari/Firefox: Graceful fallback to standard navigation
- ✅ All Browsers: Basic navigation functionality preserved
The component automatically detects browser support and provides appropriate behavior:
- In supported browsers: Smooth view transitions with configurable delays
- In other browsers: Clean fallback to standard navigation
# Install dependencies
npm install
# Run tests
npm test
# Build the package
npm run build
The component is thoroughly tested with Jest and React Testing Library. All tests are passing, covering:
- Core navigation functionality
- View Transitions API integration
- Next.js specific features
- Error handling
- Accessibility features
- Edge cases
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch:
git checkout -b feature/amazing-feature
- Commit your changes:
git commit -m 'Add amazing feature'
- Push to the branch:
git push origin feature/amazing-feature
- Open a Pull Request
MIT