Compare commits
7 Commits
v2.4.2
...
fix/remove
| Author | SHA1 | Date | |
|---|---|---|---|
| a9f16b49cc | |||
| 21cf0725ab | |||
| 2c162f5314 | |||
| be3b2e6a7b | |||
| f2e59fa52f | |||
| 16d494689f | |||
| d24b8a8694 |
2895
.lighthouseci/lhr-1782911226698.html
Normal file
2895
.lighthouseci/lhr-1782911226698.html
Normal file
File diff suppressed because one or more lines are too long
11796
.lighthouseci/lhr-1782911226698.json
Normal file
11796
.lighthouseci/lhr-1782911226698.json
Normal file
File diff suppressed because one or more lines are too long
@@ -191,7 +191,7 @@ export default async function Layout(props: {
|
|||||||
<NextIntlClientProvider messages={clientMessages} locale={safeLocale}>
|
<NextIntlClientProvider messages={clientMessages} locale={safeLocale}>
|
||||||
<TransitionProvider>
|
<TransitionProvider>
|
||||||
<CorporateBackground />
|
<CorporateBackground />
|
||||||
<InitialLoader shouldShowLoader={!hasSeenLoader} />
|
{!hasSeenLoader && <InitialLoader shouldShowLoader={!hasSeenLoader} />}
|
||||||
{/* PageTransitionShutter loaded dynamically in TransitionProvider */}
|
{/* PageTransitionShutter loaded dynamically in TransitionProvider */}
|
||||||
<SkipLink />
|
<SkipLink />
|
||||||
<Header navLinks={navLinks} />
|
<Header navLinks={navLinks} />
|
||||||
|
|||||||
@@ -132,12 +132,11 @@ export default async function Home(props: { params: Promise<{ locale: string }>
|
|||||||
}
|
}
|
||||||
|
|
||||||
setRequestLocale(locale);
|
setRequestLocale(locale);
|
||||||
preload('/germany-map.svg', { as: 'image', fetchPriority: 'high' });
|
|
||||||
preload('/assets/videos/web/hero-kabelpflug-poster.webp', {
|
preload('/assets/videos/web/hero-kabelpflug-poster.webp', {
|
||||||
as: 'image',
|
as: 'image',
|
||||||
fetchPriority: 'high',
|
fetchPriority: 'high',
|
||||||
imageSrcSet: '/assets/videos/web/hero-kabelpflug-poster-mobile.webp 800w, /assets/videos/web/hero-kabelpflug-poster.webp 1920w',
|
imageSrcSet: '/assets/videos/web/hero-kabelpflug-poster-mobile.webp 800w, /assets/videos/web/hero-kabelpflug-poster.webp 1920w',
|
||||||
imageSizes: '(max-width: 768px) 800px, 1920px'
|
imageSizes: '100vw'
|
||||||
});
|
});
|
||||||
|
|
||||||
const mdx = await getMdxContent(locale, 'home');
|
const mdx = await getMdxContent(locale, 'home');
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ export function HeroVideo(props: HeroVideoProps) {
|
|||||||
key={`img-${pathname}-${posterSrc}`}
|
key={`img-${pathname}-${posterSrc}`}
|
||||||
src={posterSrc}
|
src={posterSrc}
|
||||||
srcSet={posterSrc.includes('-poster.webp') ? `${posterSrc.replace('-poster.webp', '-poster-mobile.webp')} 800w, ${posterSrc} 1920w` : undefined}
|
srcSet={posterSrc.includes('-poster.webp') ? `${posterSrc.replace('-poster.webp', '-poster-mobile.webp')} 800w, ${posterSrc} 1920w` : undefined}
|
||||||
sizes={posterSrc.includes('-poster.webp') ? "(max-width: 768px) 800px, 1920px" : undefined}
|
sizes={posterSrc.includes('-poster.webp') ? "100vw" : undefined}
|
||||||
alt={posterAlt}
|
alt={posterAlt}
|
||||||
className="absolute inset-0 w-full h-full object-cover z-[1] pointer-events-none"
|
className="absolute inset-0 w-full h-full object-cover z-[1] pointer-events-none"
|
||||||
decoding="sync"
|
decoding="sync"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export function EUFundingBadge() {
|
|||||||
alt="European Union Background"
|
alt="European Union Background"
|
||||||
fill
|
fill
|
||||||
className="object-cover object-top"
|
className="object-cover object-top"
|
||||||
priority
|
loading="lazy"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ export function InitialLoader({ shouldShowLoader = true }: { shouldShowLoader?:
|
|||||||
{/* Sweeping intense white light */}
|
{/* Sweeping intense white light */}
|
||||||
<m.div
|
<m.div
|
||||||
className="absolute inset-0 bg-gradient-to-r from-transparent via-white to-transparent skew-x-[-25deg]"
|
className="absolute inset-0 bg-gradient-to-r from-transparent via-white to-transparent skew-x-[-25deg]"
|
||||||
initial={{ left: '-150%' }}
|
initial={{ x: '-150%' }}
|
||||||
animate={{ left: '250%' }}
|
animate={{ x: '250%' }}
|
||||||
transition={{ duration: 2.5, ease: "easeInOut", repeat: Infinity, repeatDelay: 0.5 }}
|
transition={{ duration: 2.5, ease: "easeInOut", repeat: Infinity, repeatDelay: 0.5 }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -91,9 +91,9 @@ export function InitialLoader({ shouldShowLoader = true }: { shouldShowLoader?:
|
|||||||
className="h-[2px] w-full bg-white/5 overflow-hidden relative rounded-full"
|
className="h-[2px] w-full bg-white/5 overflow-hidden relative rounded-full"
|
||||||
>
|
>
|
||||||
<m.div
|
<m.div
|
||||||
className="absolute inset-y-0 left-0 bg-gradient-to-r from-primary-dark via-primary to-primary-light"
|
className="absolute inset-y-0 left-0 w-full bg-gradient-to-r from-primary-dark via-primary to-primary-light origin-left"
|
||||||
initial={{ width: "0%" }}
|
initial={{ scaleX: 0 }}
|
||||||
animate={{ width: "100%" }}
|
animate={{ scaleX: 1 }}
|
||||||
transition={{ duration: 3.8, ease: [0.16, 1, 0.3, 1] }}
|
transition={{ duration: 3.8, ease: [0.16, 1, 0.3, 1] }}
|
||||||
/>
|
/>
|
||||||
</m.div>
|
</m.div>
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ export function PageTransitionShutter() {
|
|||||||
<AnimatePresence>
|
<AnimatePresence>
|
||||||
{isTransitioning && (
|
{isTransitioning && (
|
||||||
<m.div
|
<m.div
|
||||||
key="shutter"
|
key="page-transition-shutter"
|
||||||
initial={{ y: '-100%' }}
|
initial={{ y: '-100%' }}
|
||||||
animate={{ y: '0%' }}
|
animate={{ y: 0 }}
|
||||||
exit={{ y: '100%' }}
|
exit={{ y: '100%' }}
|
||||||
transition={{ duration: 0.9, ease: [0.16, 1, 0.3, 1] }}
|
transition={{ duration: 0.65, ease: [0.76, 0, 0.24, 1] }}
|
||||||
className="fixed left-0 w-full z-[9998] bg-[#050B14] pointer-events-none flex flex-col items-center justify-center overflow-visible"
|
className="fixed left-0 right-0 z-[9998] bg-[#050B14] flex flex-col items-center justify-center overflow-hidden"
|
||||||
style={{
|
style={{
|
||||||
height: '100vh',
|
height: '100vh',
|
||||||
top: '0',
|
top: '0',
|
||||||
@@ -56,8 +56,8 @@ export function PageTransitionShutter() {
|
|||||||
{/* Sweeping intense white light */}
|
{/* Sweeping intense white light */}
|
||||||
<m.div
|
<m.div
|
||||||
className="absolute inset-0 bg-gradient-to-r from-transparent via-white to-transparent skew-x-[-25deg]"
|
className="absolute inset-0 bg-gradient-to-r from-transparent via-white to-transparent skew-x-[-25deg]"
|
||||||
initial={{ left: '-150%' }}
|
initial={{ x: '-150%' }}
|
||||||
animate={{ left: '250%' }}
|
animate={{ x: '250%' }}
|
||||||
transition={{ duration: 1.5, ease: "easeInOut", repeat: Infinity, repeatDelay: 0.2 }}
|
transition={{ duration: 1.5, ease: "easeInOut", repeat: Infinity, repeatDelay: 0.2 }}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,14 +27,8 @@ export function TransitionProvider({ children }: { children: ReactNode }) {
|
|||||||
const [hasMountedShutter, setHasMountedShutter] = useState(false);
|
const [hasMountedShutter, setHasMountedShutter] = useState(false);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
// Load the heavy shutter chunk in the background when the main thread is idle
|
// We no longer eagerly load the shutter in the background.
|
||||||
useEffect(() => {
|
// It will be loaded precisely when the user initiates a transition.
|
||||||
if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {
|
|
||||||
window.requestIdleCallback(() => setHasMountedShutter(true));
|
|
||||||
} else {
|
|
||||||
setTimeout(() => setHasMountedShutter(true), 2000);
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
// We use a ref to track transition state without triggering the route change effect when it turns true
|
// We use a ref to track transition state without triggering the route change effect when it turns true
|
||||||
const isTransitioningRef = React.useRef(isTransitioning);
|
const isTransitioningRef = React.useRef(isTransitioning);
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ const nextConfig = {
|
|||||||
pagesBufferLength: 2,
|
pagesBufferLength: 2,
|
||||||
},
|
},
|
||||||
experimental: {
|
experimental: {
|
||||||
inlineCss: true,
|
|
||||||
staleTimes: {
|
staleTimes: {
|
||||||
dynamic: 0,
|
dynamic: 0,
|
||||||
static: 30,
|
static: 30,
|
||||||
|
|||||||
@@ -139,7 +139,7 @@
|
|||||||
"prepare": "husky",
|
"prepare": "husky",
|
||||||
"preinstall": "npx only-allow pnpm"
|
"preinstall": "npx only-allow pnpm"
|
||||||
},
|
},
|
||||||
"version": "2.4.2",
|
"version": "2.4.5",
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"onlyBuiltDependencies": [
|
"onlyBuiltDependencies": [
|
||||||
"@parcel/watcher",
|
"@parcel/watcher",
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 4.7 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 39 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 86 KiB |
Reference in New Issue
Block a user