Compare commits
5 Commits
e3a58556f7
...
5d5f0879c2
| Author | SHA1 | Date | |
|---|---|---|---|
|
5d5f0879c2
|
|||
|
046099b7f1
|
|||
|
d245f2f00a
|
|||
|
8ad7df30d7
|
|||
|
dcb1a59777
|
+5
-1
@@ -48,5 +48,9 @@
|
||||
"overrides": {
|
||||
"@types/react": "19.2.14",
|
||||
"@types/react-dom": "19.2.3"
|
||||
}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 0.5% in NO",
|
||||
"not dead"
|
||||
]
|
||||
}
|
||||
|
||||
+16
-1
@@ -35,7 +35,22 @@ export default function RootLayout({
|
||||
<html lang="no">
|
||||
<head>
|
||||
<link rel="preconnect" href="https://use.typekit.net" crossOrigin="anonymous" />
|
||||
<link rel="stylesheet" href="https://use.typekit.net/spa5smt.css" />
|
||||
<link rel="preconnect" href="https://p.typekit.net" crossOrigin="anonymous" />
|
||||
{/*
|
||||
Load Adobe Fonts without blocking render: the stylesheet is requested
|
||||
with media="print" (fetched but not applied), then the inline script
|
||||
below swaps it to media="all" once it has loaded.
|
||||
*/}
|
||||
<link
|
||||
id="typekit-css"
|
||||
rel="stylesheet"
|
||||
href="https://use.typekit.net/spa5smt.css"
|
||||
media="print"
|
||||
suppressHydrationWarning
|
||||
/>
|
||||
<script>
|
||||
{`(function(){var l=document.getElementById('typekit-css');if(!l)return;function s(){l.media='all'}if(l.sheet){s()}else{l.addEventListener('load',s)}})();`}
|
||||
</script>
|
||||
{process.env.UMAMI_SCRIPT_URL && process.env.UMAMI_WEBSITE_ID && (
|
||||
<script
|
||||
defer
|
||||
|
||||
@@ -58,7 +58,7 @@ export const EventItem = ({
|
||||
alt={featuredImage.alt}
|
||||
width={0}
|
||||
height={0}
|
||||
sizes="(max-width: 900px) 100vw, 25vw"
|
||||
sizes="(max-width: 900px) calc(100vw - 2rem), 30vw"
|
||||
loading={imageLoading}
|
||||
fetchPriority={imageFetchPriority}
|
||||
/>
|
||||
|
||||
@@ -9,13 +9,13 @@ export const FeaturedEvents = ({ events }: { events: EventListItemFragment[] })
|
||||
<section className={styles.featuredEvents}>
|
||||
<SectionHeader heading="Arrangementer" link="/arrangementer" linkText="Se alle arrangementer" />
|
||||
<ul className={styles.eventList}>
|
||||
{events.slice(0, 3).map((event, index) => (
|
||||
{events.slice(0, 3).map((event) => (
|
||||
<EventItem
|
||||
key={event.id}
|
||||
event={event}
|
||||
mode="list"
|
||||
imageLoading="eager"
|
||||
imageFetchPriority={index < 2 ? "high" : undefined}
|
||||
imageFetchPriority="high"
|
||||
/>
|
||||
))}
|
||||
</ul>
|
||||
|
||||
@@ -25,8 +25,12 @@ export const Header = () => {
|
||||
const { replace } = useRouter();
|
||||
const pathname = usePathname();
|
||||
const [showMenu, setShowMenu] = useState(false);
|
||||
// Only enable the menu's slide/fade animations once the user has interacted,
|
||||
// so they don't play on first page load
|
||||
const [hasInteracted, setHasInteracted] = useState(false);
|
||||
|
||||
function toggleMenu() {
|
||||
setHasInteracted(true);
|
||||
setShowMenu(!showMenu);
|
||||
}
|
||||
|
||||
@@ -61,6 +65,7 @@ export const Header = () => {
|
||||
<header
|
||||
className={styles.header}
|
||||
data-show={showMenu}
|
||||
data-animate={hasInteracted}
|
||||
data-small={!isInView}
|
||||
>
|
||||
<Link href="/" aria-label="Hjem">
|
||||
|
||||
@@ -54,6 +54,12 @@
|
||||
transition: transform .6s ease;
|
||||
}
|
||||
}
|
||||
|
||||
&[data-animate=false] {
|
||||
.mainMenu {
|
||||
animation: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.overlay {
|
||||
@@ -282,4 +288,4 @@
|
||||
.logo {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user