Compare commits

...

13 Commits

14 changed files with 315 additions and 145 deletions

140
web/package-lock.json generated
View File

@@ -16,12 +16,12 @@
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
"graphql": "^16.11.0",
"next": "^15.4.2",
"next": "^15.4.6",
"nuqs": "^2.4.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-intersection-observer": "^9.16.0",
"sass": "^1.89.2",
"sass": "^1.90.0",
"sharp": "^0.34.3",
"swiper": "^11.2.10",
"urql": "^4.2.2",
@@ -29,10 +29,10 @@
},
"devDependencies": {
"@types/node": "^22",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@types/react": "^19.1.9",
"@types/react-dom": "^19.1.7",
"eslint": "^9",
"eslint-config-next": "15.4.2",
"eslint-config-next": "15.4.6",
"typescript": "^5"
}
},
@@ -2162,15 +2162,15 @@
}
},
"node_modules/@next/env": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.2.tgz",
"integrity": "sha512-kd7MvW3pAP7tmk1NaiX4yG15xb2l4gNhteKQxt3f+NGR22qwPymn9RBuv26QKfIKmfo6z2NpgU8W2RT0s0jlvg==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.6.tgz",
"integrity": "sha512-yHDKVTcHrZy/8TWhj0B23ylKv5ypocuCwey9ZqPyv4rPdUdRzpGCkSi03t04KBPyU96kxVtUqx6O3nE1kpxASQ==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.2.tgz",
"integrity": "sha512-k0rjdWjXBY6tAOty1ckrMETE6Mx66d85NsgcAIdDp7/cXOsTJ93ywmbg3uUcpxX5TUHFEcCWI5mb8nPhwCe9jg==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.6.tgz",
"integrity": "sha512-2NOu3ln+BTcpnbIDuxx6MNq+pRrCyey4WSXGaJIyt0D2TYicHeO9QrUENNjcf673n3B1s7hsiV5xBYRCK1Q8kA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2208,9 +2208,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.2.tgz",
"integrity": "sha512-ovqjR8NjCBdBf1U+R/Gvn0RazTtXS9n6wqs84iFaCS1NHbw9ksVE4dfmsYcLoyUVd9BWE0bjkphOWrrz8uz/uw==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.6.tgz",
"integrity": "sha512-667R0RTP4DwxzmrqTs4Lr5dcEda9OxuZsVFsjVtxVMVhzSpo6nLclXejJVfQo2/g7/Z9qF3ETDmN3h65mTjpTQ==",
"cpu": [
"arm64"
],
@@ -2224,9 +2224,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.2.tgz",
"integrity": "sha512-I8d4W7tPqbdbHRI4z1iBfaoJIBrEG4fnWKIe+Rj1vIucNZ5cEinfwkBt3RcDF00bFRZRDpvKuDjgMFD3OyRBnw==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.6.tgz",
"integrity": "sha512-KMSFoistFkaiQYVQQnaU9MPWtp/3m0kn2Xed1Ces5ll+ag1+rlac20sxG+MqhH2qYWX1O2GFOATQXEyxKiIscg==",
"cpu": [
"x64"
],
@@ -2240,9 +2240,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.2.tgz",
"integrity": "sha512-lvhz02dU3Ec5thzfQ2RCUeOFADjNkS/px1W7MBt7HMhf0/amMfT8Z/aXOwEA+cVWN7HSDRSUc8hHILoHmvajsg==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.6.tgz",
"integrity": "sha512-PnOx1YdO0W7m/HWFeYd2A6JtBO8O8Eb9h6nfJia2Dw1sRHoHpNf6lN1U4GKFRzRDBi9Nq2GrHk9PF3Vmwf7XVw==",
"cpu": [
"arm64"
],
@@ -2256,9 +2256,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.2.tgz",
"integrity": "sha512-v+5PPfL8UP+KKHS3Mox7QMoeFdMlaV0zeNMIF7eLC4qTiVSO0RPNnK0nkBZSD5BEkkf//c+vI9s/iHxddCZchA==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.6.tgz",
"integrity": "sha512-XBbuQddtY1p5FGPc2naMO0kqs4YYtLYK/8aPausI5lyOjr4J77KTG9mtlU4P3NwkLI1+OjsPzKVvSJdMs3cFaw==",
"cpu": [
"arm64"
],
@@ -2272,9 +2272,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.2.tgz",
"integrity": "sha512-PHLYOC9W2cu6I/JEKo77+LW4uPNvyEQiSkVRUQPsOIsf01PRr8PtPhwtz3XNnC9At8CrzPkzqQ9/kYDg4R4Inw==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.6.tgz",
"integrity": "sha512-+WTeK7Qdw82ez3U9JgD+igBAP75gqZ1vbK6R8PlEEuY0OIe5FuYXA4aTjL811kWPf7hNeslD4hHK2WoM9W0IgA==",
"cpu": [
"x64"
],
@@ -2288,9 +2288,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.2.tgz",
"integrity": "sha512-lpmUF9FfLFns4JbTu+5aJGA8aR9dXaA12eoNe9CJbVkGib0FDiPa4kBGTwy0xDxKNGlv3bLDViyx1U+qafmuJQ==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.6.tgz",
"integrity": "sha512-XP824mCbgQsK20jlXKrUpZoh/iO3vUWhMpxCz8oYeagoiZ4V0TQiKy0ASji1KK6IAe3DYGfj5RfKP6+L2020OQ==",
"cpu": [
"x64"
],
@@ -2304,9 +2304,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.2.tgz",
"integrity": "sha512-aMjogoGnRepas0LQ/PBPsvvUzj+IoXw2IoDSEShEtrsu2toBiaxEWzOQuPZ8nie8+1iF7TA63S7rlp3YWAjNEg==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.6.tgz",
"integrity": "sha512-FxrsenhUz0LbgRkNWx6FRRJIPe/MI1JRA4W4EPd5leXO00AZ6YU8v5vfx4MDXTvN77lM/EqsE3+6d2CIeF5NYg==",
"cpu": [
"arm64"
],
@@ -2320,9 +2320,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.2.tgz",
"integrity": "sha512-FxwauyexSFu78wEqR/+NB9MnqXVj6SxJKwcVs2CRjeSX/jBagDCgtR2W36PZUYm0WPgY1pQ3C1+nn7zSnwROuw==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.6.tgz",
"integrity": "sha512-T4ufqnZ4u88ZheczkBTtOF+eKaM14V8kbjud/XrAakoM5DKQWjW09vD6B9fsdsWS2T7D5EY31hRHdta7QKWOng==",
"cpu": [
"x64"
],
@@ -2780,9 +2780,9 @@
}
},
"node_modules/@types/react": {
"version": "19.1.8",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
"integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
"version": "19.1.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz",
"integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2790,9 +2790,9 @@
}
},
"node_modules/@types/react-dom": {
"version": "19.1.6",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.6.tgz",
"integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==",
"version": "19.1.7",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
"integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -4678,13 +4678,13 @@
}
},
"node_modules/eslint-config-next": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.2.tgz",
"integrity": "sha512-rAeZyTWn1/36Y+S+KpJ/W+RAUmM6fpBWsON4Uci+5l9DIKrhkMK0rgAZQ45ktx+xFk5tyYwkTBGit/9jalsHrw==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.6.tgz",
"integrity": "sha512-4uznvw5DlTTjrZgYZjMciSdDDMO2SWIuQgUNaFyC2O3Zw3Z91XeIejeVa439yRq2CnJb/KEvE4U2AeN/66FpUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@next/eslint-plugin-next": "15.4.2",
"@next/eslint-plugin-next": "15.4.6",
"@rushstack/eslint-patch": "^1.10.3",
"@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
"@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
@@ -6783,12 +6783,12 @@
"dev": true
},
"node_modules/next": {
"version": "15.4.2",
"resolved": "https://registry.npmjs.org/next/-/next-15.4.2.tgz",
"integrity": "sha512-oH1rmFso+84NIkocfuxaGKcXIjMUTmnzV2x0m8qsYtB4gD6iflLMESXt5XJ8cFgWMBei4v88rNr/j+peNg72XA==",
"version": "15.4.6",
"resolved": "https://registry.npmjs.org/next/-/next-15.4.6.tgz",
"integrity": "sha512-us++E/Q80/8+UekzB3SAGs71AlLDsadpFMXVNM/uQ0BMwsh9m3mr0UNQIfjKed8vpWXsASe+Qifrnu1oLIcKEQ==",
"license": "MIT",
"dependencies": {
"@next/env": "15.4.2",
"@next/env": "15.4.6",
"@swc/helpers": "0.5.15",
"caniuse-lite": "^1.0.30001579",
"postcss": "8.4.31",
@@ -6801,14 +6801,14 @@
"node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
},
"optionalDependencies": {
"@next/swc-darwin-arm64": "15.4.2",
"@next/swc-darwin-x64": "15.4.2",
"@next/swc-linux-arm64-gnu": "15.4.2",
"@next/swc-linux-arm64-musl": "15.4.2",
"@next/swc-linux-x64-gnu": "15.4.2",
"@next/swc-linux-x64-musl": "15.4.2",
"@next/swc-win32-arm64-msvc": "15.4.2",
"@next/swc-win32-x64-msvc": "15.4.2",
"@next/swc-darwin-arm64": "15.4.6",
"@next/swc-darwin-x64": "15.4.6",
"@next/swc-linux-arm64-gnu": "15.4.6",
"@next/swc-linux-arm64-musl": "15.4.6",
"@next/swc-linux-x64-gnu": "15.4.6",
"@next/swc-linux-x64-musl": "15.4.6",
"@next/swc-win32-arm64-msvc": "15.4.6",
"@next/swc-win32-x64-msvc": "15.4.6",
"sharp": "^0.34.3"
},
"peerDependencies": {
@@ -7386,22 +7386,24 @@
]
},
"node_modules/react": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
"version": "19.1.1",
"resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
"integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"version": "19.1.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
"integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
"license": "MIT",
"dependencies": {
"scheduler": "^0.26.0"
},
"peerDependencies": {
"react": "^19.1.0"
"react": "^19.1.1"
}
},
"node_modules/react-intersection-observer": {
@@ -7708,9 +7710,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sass": {
"version": "1.89.2",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz",
"integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==",
"version": "1.90.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz",
"integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==",
"license": "MIT",
"dependencies": {
"chokidar": "^4.0.0",

View File

@@ -3,8 +3,8 @@
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
"build": "next build --turbopack",
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"codegen": "graphql-codegen"
@@ -18,12 +18,12 @@
"date-fns": "^4.1.0",
"date-fns-tz": "^3.2.0",
"graphql": "^16.11.0",
"next": "^15.4.2",
"next": "^15.4.6",
"nuqs": "^2.4.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-intersection-observer": "^9.16.0",
"sass": "^1.89.2",
"sass": "^1.90.0",
"sharp": "^0.34.3",
"swiper": "^11.2.10",
"urql": "^4.2.2",
@@ -31,10 +31,10 @@
},
"devDependencies": {
"@types/node": "^22",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@types/react": "^19.1.9",
"@types/react-dom": "^19.1.7",
"eslint": "^9",
"eslint-config-next": "15.4.2",
"eslint-config-next": "15.4.6",
"typescript": "^5"
}
}

View File

@@ -5,6 +5,7 @@ import { HomeFragment } from "@/gql/graphql";
import { getClient } from "@/app/client";
import { FeaturedEvents } from "@/components/events/FeaturedEvents";
import { NewsList } from "@/components/news/NewsList";
import { Newsletter } from "@/components/general/Newsletter";
import { UpcomingEvents } from "@/components/events/UpcomingEvents";
import { Pig } from "@/components/general/Pig";
import Link from "next/link";
@@ -58,36 +59,39 @@ export default async function Home() {
];
return (
<main className="site-main index" id="main">
<FeaturedEvents events={featuredEvents} />
<UpcomingEvents events={events} />
<div className="infoBlock">
<SectionHeader heading="Besøk oss" link="/praktisk" linkText="Praktisk info" />
<div>
<h2 className="title">Skal du besøke Chateau Neuf?</h2>
<p>
Vi hjelper deg med å finne frem, og sørger for at du har en fin
opplevelse.
</p>
<Link href="/praktisk#adkomst" className="button">
<span>Adresse og adkomst</span>
<Icon type="arrowRight" />
</Link>
<Link href="/praktisk#billetter" className="button">
<span>Billetter</span>
<Icon type="arrowRight" />
</Link>
<Link href="/praktisk#apningstider" className="button">
<span>Åpningstider</span>
<Icon type="arrowRight" />
</Link>
<>
<main className="site-main index" id="main">
<FeaturedEvents events={featuredEvents} />
<UpcomingEvents events={events} />
<div className="infoBlock">
<SectionHeader heading="Besøk oss" link="/praktisk" linkText="Praktisk info" />
<div>
<h2 className="title">Skal du besøke Chateau Neuf?</h2>
<p>
Vi hjelper deg med å finne frem, og sørger for at du har en fin
opplevelse.
</p>
<Link href="/praktisk#adkomst" className="button">
<span>Adresse og adkomst</span>
<Icon type="arrowRight" />
</Link>
<Link href="/praktisk#billetter" className="button">
<span>Billetter</span>
<Icon type="arrowRight" />
</Link>
<Link href="/praktisk#apningstider" className="button">
<span>Åpningstider</span>
<Icon type="arrowRight" />
</Link>
</div>
<div className="pig">
<Pig type="point" />
</div>
<SectionFooter link="/praktisk" linkText="Praktisk info" />
</div>
<div className="pig">
<Pig type="point" />
</div>
<SectionFooter link="/praktisk" linkText="Praktisk info" />
</div>
<NewsList heading="Siste nytt" featured news={news} />
</main>
<NewsList heading="Siste nytt" featured news={news} />
</main>
<Newsletter />
</>
);
}

View File

@@ -72,8 +72,6 @@ export default async function Page() {
const page = data.page as SponsorsPage;
console.log(page)
return (
<main className="site-main" id="main">
<PageHeader heading={page.title} lead={page.lead} />

View File

@@ -21,46 +21,46 @@ export const Blocks = ({ blocks, pageContent }: { blocks: any, pageContent?: boo
return blocks.map((block: any) => {
switch (block?.blockType) {
case "RichTextBlock":
return <RichTextBlock block={block} />;
return <RichTextBlock key={block.id} block={block} />;
break;
case "ImageWithTextBlock":
return <ImageWithTextBlock block={block} />;
return <ImageWithTextBlock key={block.id} block={block} />;
break;
case "EmbedBlock":
return <EmbedBlock block={block} />;
return <EmbedBlock key={block.id} block={block} />;
break;
case "ImageSliderBlock":
return <ImageSliderBlock block={block} pageContent />;
return <ImageSliderBlock key={block.id} block={block} pageContent />;
break;
case "HorizontalRuleBlock":
return <HorizontalRuleBlock block={block} />;
return <HorizontalRuleBlock key={block.id} block={block} />;
break;
case "FeaturedBlock":
return <FeaturedBlock block={block} />;
return <FeaturedBlock key={block.id} block={block} />;
break;
case "AccordionBlock":
return <AccordionBlock block={block} />;
return <AccordionBlock key={block.id} block={block} />;
break;
case "FactBoxBlock":
return <FactBoxBlock block={block} />;
return <FactBoxBlock key={block.id} block={block} />;
break;
case "PageSectionBlock":
return <PageSectionBlock block={block} />;
return <PageSectionBlock key={block.id} block={block} />;
break;
case "PageSectionNavigationBlock":
return <PageSectionNavigationBlock sections={sections} />;
break;
case "ContactSectionBlock":
return <ContactSectionBlock block={block} />;
return <ContactSectionBlock key={block.id} block={block} />;
break;
case "ContactSubsectionBlock":
return <ContactSubsectionBlock block={block} />;
return <ContactSubsectionBlock key={block.id} block={block} />;
break;
case "ContactListBlock":
return <ContactListBlock block={block} />;
return <ContactListBlock key={block.id} block={block} />;
break;
case "ContactEntityBlock":
return <ContactEntityBlock block={block} />;
return <ContactEntityBlock key={block.id} block={block} />;
break;
case "NeufAddressSectionBlock":
return <NeufAddressSectionBlock />;

View File

@@ -157,6 +157,7 @@
.dates,
.details {
font-family: var(--font-serif);
line-height: 1.24;
}

View File

@@ -318,6 +318,12 @@ export function DecorativeIcon ({
<path d="M271.35 281.16C271.68 277.97 272.05 276.11 272.57 276.99C272.86 277.49 273.18 276.92 273.48 276.94C275.53 277.04 277.58 277.21 279.63 277.27C280.51 277.3 281.39 277.12 282.27 277.05C283.76 276.94 285.25 276.8 286.73 276.78C287.49 276.77 288.25 277.09 289.01 277.09C290.53 277.09 292.06 276.89 293.58 276.89C294.36 276.89 295.14 277.19 295.91 277.27C296.2 277.3 296.48 277.04 296.77 276.98C296.89 276.96 297.01 276.94 297.12 277.26C297.43 278.14 297.53 280.9 297.34 283.41C297.2 285.33 297.01 286.62 296.74 286.61C295.48 286.54 294.23 286.5 292.97 286.53C292.46 286.54 291.96 286.86 291.45 286.86C290.65 286.86 289.86 286.67 289.06 286.59C287.89 286.48 286.72 286.32 285.56 286.35C284.22 286.38 282.88 286.58 281.54 286.7C281.12 286.74 280.7 286.76 280.27 286.76C278.95 286.78 277.62 286.78 276.3 286.82C274.93 286.87 273.55 286.96 272.18 287.02C272.08 287.02 271.98 287.03 271.87 286.92C271.46 286.46 271.41 285.87 271.32 281.15L271.35 281.16Z" fill="currentColor"/>
</svg>
)}
{type === "email" && (
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.79833 18.8515C6.39828 18.9115 6.03892 18.8236 5.72025 18.5879C5.40157 18.3523 5.21228 18.0344 5.15237 17.6344L3.80227 8.61883C3.74237 8.21879 3.83024 7.85943 4.0659 7.54075C4.30157 7.22207 4.61942 7.03278 5.01947 6.97287L17.2026 5.14841C17.6027 5.0885 17.962 5.17638 18.2807 5.41204C18.5994 5.64771 18.7887 5.96556 18.8486 6.36561L20.1987 15.3811C20.2586 15.7812 20.1707 16.1405 19.9351 16.4592C19.6994 16.7779 19.3815 16.9672 18.9815 17.0271L6.79833 18.8515ZM12.0666 12.4417L5.12468 9.33937L6.34024 17.4565C6.35089 17.5276 6.38247 17.5826 6.43498 17.6214C6.48748 17.6602 6.54931 17.6743 6.62045 17.6637L18.8036 15.8392C18.8748 15.8286 18.9297 15.797 18.9686 15.7445C19.0074 15.692 19.0215 15.6302 19.0108 15.559L17.7953 7.44192L12.0666 12.4417ZM11.8819 11.2081L17.5025 6.31802L5.0754 8.179L11.8819 11.2081ZM5.12468 9.33937L4.95364 8.19724L6.34024 17.4565C6.35089 17.5276 6.38247 17.5826 6.43498 17.6214C6.48748 17.6602 6.54931 17.6743 6.62045 17.6637L6.37674 17.7002L5.12468 9.33937Z" fill="currentColor"/>
</svg>
)}
</div>
);
}

View File

@@ -0,0 +1,23 @@
import { DecorativeIcon, Icon } from "./Icon";
import styles from "./newsletter.module.scss";
export const Newsletter = ({ url }: { url?: string }) => {
const link = url ?? "https://pub.dialogapi.no/s/MjQ0NTc6MmQyZjNjY2MtOGMzYy00NWQ0LThkY2MtZmUxYWQyODNhN2Vi";
return (
<div className={styles.newsletterWrapper}>
<div className={styles.newsletter}>
<div className={styles.textWrapper}>
<div className={styles.icon}>
<DecorativeIcon type="email" />
</div>
<h2>Nyhetsbrev</h2>
<p>Meld deg vårt nyhetsbrev og hold deg oppdatert arrangementer og siste nytt!</p>
</div>
<a href={link} target="_blank" className="button primary">
Meld deg
<Icon type="arrowRight" />
</a>
</div>
</div>
);
};

View File

@@ -0,0 +1,68 @@
.newsletterWrapper {
padding: var(--spacing-sitepadding-block) var(--spacing-sitepadding-inline);
}
.newsletter {
width: 100%;
background: var(--color-background-secondary);
display: flex;
justify-content: space-between;
align-items: center;
gap: 4rem;
padding: var(--spacing-l);
a {
white-space: nowrap;
}
}
.textWrapper {
display: grid;
grid-template-columns: auto 1fr;
column-gap: calc(var(--spacing-l)*0.9);
align-items: center;
h2 {
margin-bottom: .5rem;
}
p {
max-width: 48rem;
}
}
.icon {
grid-column: 1;
grid-row: span 2;
flex: none;
width: var(--size-icon-large);
height: var(--size-icon-large);
background: var(--color-goldenBeige);
border-radius: 100%;
display: flex;
align-items: center;
justify-content: center;
img, svg {
width: 100%;
}
}
@media (max-width: 800px) {
.newsletter {
padding: var(--spacing-m);
flex-wrap: wrap;
gap: 1rem;
justify-content: flex-end;
}
.icon {
grid-row: span 1;
}
.textWrapper {
column-gap: 1rem;
row-gap: 1rem;
p {
grid-column: span 2;
}
}
}

View File

@@ -145,6 +145,14 @@ export const Header = () => {
Foreninger
</Link>
</li>
<li>
<Link
href="/sponsorer"
data-active={pathname === "/sponsorer"}
>
Sponsorer
</Link>
</li>
<li className={styles.galtinn}>
<a href="https://galtinn.neuf.no/" target="_blank">
<span>Mitt medlemskap</span>&nbsp;

View File

@@ -49,7 +49,6 @@ function capitalizeFirstLetter(s: string) {
}
function linkTo(page: any): string | null {
console.log(page)
if (page.__typename === "EventPage") {
return `/arrangementer/${page.slug}`;
}

View File

@@ -7,31 +7,33 @@ const SponsorItem = ({ sponsor }: { sponsor: SponsorBlock }) => {
const { name, logo, website, text } = sponsor;
return (
<li className={styles.sponsorItem}>
<h2>{name}</h2>
{logo && (
<div className={styles.image}>
<div className={styles.image}>
{logo && (
<Image
src={logo.url}
alt={`Logoen til ${name}`}
width={0}
height={0}
width={logo.width}
height={logo.height}
sizes="20vw"
/>
</div>
)}
{text && (
<p
className={styles.sponsorText}
dangerouslySetInnerHTML={{ __html: text }}
/>
)}
{website && (
<p>
<a href={website} target="_blank" rel="noopener">
Besøk nettside
</a>
</p>
)}
)}
</div>
<div className={styles.text}>
<h2>{name}</h2>
{text && (
<p
className={styles.sponsorText}
dangerouslySetInnerHTML={{ __html: text }}
/>
)}
{website && (
<p className={styles.website}>
<a href={website} target="_blank" rel="noopener">
Besøk nettside
</a>
</p>
)}
</div>
</li>
);
};

View File

@@ -0,0 +1,57 @@
.sponsorList {
margin-bottom: var(--spacing-section-bottom);
ul {
list-style: none;
}
}
.sponsorItem {
//background: var(--color-background-secondary);
border-top: var(--border);
padding: var(--spacing-m) 0;
display: grid;
grid-template-columns: 1fr var(--size-width-p) 1fr;
align-items: center;
column-gap: var(--spacing-gap-column);
margin-bottom: var(--spacing-gap-row);
min-height: 10rem;
&:last-child {
border-bottom: var(--border);
}
h2 {
font-size: var(--font-size-h3);
margin-bottom: 1rem;
}
p {
font-size: var(--font-size-caption);
}
.website {
display: inline-block;
font-weight: 600;
margin-top: 1rem;
}
}
.image {
width: 10rem;
height: 10rem;
display: flex;
align-items: center;
}
@media (max-width: 1260px) {
.sponsorItem {
grid-template-columns: 10rem 1fr;
}
}
@media (max-width: 600px) {
.sponsorItem {
grid-template-columns: 5rem 1fr;
align-items: flex-start;
}
.image {
width: 5rem;
height: 5rem;
}
}

View File

@@ -44,7 +44,9 @@ export function formatExtendedDateTime(
const timePart = dateOnly ? "" : " 'kl.' HH:mm";
const isCurrentYear = parsed.getFullYear() === new Date().getFullYear();
const yearPart = (!isCurrentYear || alwaysIncludeYear) ? " yyyy" : "";
return formatDate(parsed, `EEEE d. MMMM${yearPart}${timePart}`);
const formatStr = `EEEE d. MMMM${yearPart}${timePart}`;
const formatted = format(parsed, formatStr, { timeZone, locale: nb });
return formatted;
}
export function isTodayOrFuture(