Compare commits

..

29 Commits

Author SHA1 Message Date
1b25bad850 add sponsors to menu 2025-08-11 18:45:29 +02:00
c8b0c99d8d only show newsletter block on front page for now 2025-08-11 00:04:24 +02:00
55d9bcbef8 add newsletter block 2025-08-10 22:01:40 +02:00
1209562e0b fix event item line height 2025-08-10 21:10:40 +02:00
d5d3c6b936 style sponsor list 2025-08-08 15:21:00 +02:00
87562b491d disable turbopack to fix css issues 2025-08-08 14:56:55 +02:00
c54196d487 bump next, react, sass 2025-08-08 14:53:30 +02:00
37104e7a0c add keys to blocks 2025-08-08 14:53:17 +02:00
ed3388e2bf set sponsor logo image sizes 2025-08-08 14:40:16 +02:00
8444bd018e remove stray logs 2025-08-08 14:40:08 +02:00
1a3f031d5f web: add unstyled sponsors page 2025-07-28 03:54:41 +02:00
8e8ca4f147 dnscms: add sponsors page 2025-07-28 03:38:54 +02:00
7d1836f973 dnscms: remove accidentally committed local configuration 2025-07-21 14:17:33 +02:00
a7bbc0730d dnscms: migrate to uv, remove wagtail-wordpress-import dependency 2025-07-21 03:52:30 +02:00
90f658a77e web: remove import from fonts.net 2025-07-21 00:57:36 +02:00
1da9b4dce8 web: FactBoxBlock does not use useState 2025-07-21 00:31:04 +02:00
dfb61aa417 web: bump nextjs to v15.4.2 ++ 2025-07-21 00:30:42 +02:00
3b3ad6ecdc web: delete .nvmrc 2025-07-21 00:30:15 +02:00
35e155ab14 web: properly fetch colors for horizontal rule blocks 2025-06-17 19:20:15 +02:00
bc6b284140 web: bump deps 2025-06-17 18:56:52 +02:00
cc2a11cd64 web: bump to node 22, next 15, react 19, etc. 2025-04-30 19:21:33 +02:00
7030950850 web: sort occurrences by date when showing all 2025-04-30 16:24:12 +02:00
9114acf32f web: show custom venues in event occurrence list 2025-03-03 16:59:49 +01:00
402a84c2f6 dnscms: disable package mode in pyproject 2025-03-03 16:51:51 +01:00
e092f4ae06 dnscms: expose custom event venue in graphql 2025-03-03 16:45:46 +01:00
c91ee02686 christmas logo activation 2024-12-01 17:46:19 +01:00
bc341cca17 web: add number of future occurrences to compact event listing for app 2024-11-28 20:17:52 +01:00
2578f33a6b christmas logo action 2024-11-23 15:55:21 +01:00
ff0f3846e9 web: add api route for compact event listing for app 2024-11-21 22:04:20 +01:00
61 changed files with 4305 additions and 3968 deletions

1
dnscms/.gitignore vendored
View File

@@ -7,3 +7,4 @@
/static/ /static/
/media/ /media/
db.sqlite3 db.sqlite3
dnscms/settings/local.py

View File

@@ -1,3 +0,0 @@
[tools]
python = "3.12.4"
poetry = "latest"

View File

@@ -1,11 +1,14 @@
FROM python:3.12-slim-bullseye FROM python:3.12-slim-bullseye
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
RUN useradd wagtail RUN useradd wagtail
EXPOSE 8000 EXPOSE 8000
ENV PYTHONUNBUFFERED=1 \ ENV PYTHONUNBUFFERED=1 \
PORT=8000 PORT=8000 \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy
RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \
build-essential \ build-essential \
@@ -13,29 +16,25 @@ RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-r
libjpeg62-turbo-dev \ libjpeg62-turbo-dev \
zlib1g-dev \ zlib1g-dev \
libwebp-dev \ libwebp-dev \
git \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ENV POETRY_VERSION="" WORKDIR /app
ENV POETRY_HOME="/opt/poetry"
ENV PIP_NO_CACHE_DIR=1
ENV POETRY_VIRTUALENVS_CREATE=false
ENV POETRY_NO_INTERACTION=1
ENV PATH="$POETRY_HOME/bin:$PATH"
RUN apt-get update \ RUN --mount=type=cache,target=/root/.cache/uv \
&& apt-get install --no-install-recommends --assume-yes curl --mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
RUN curl -sSL https://install.python-poetry.org | python3 - uv version && uv sync --locked --no-install-project
WORKDIR /app WORKDIR /app
COPY pyproject.toml poetry.lock README.md /app/ ADD . /app
RUN pip install gunicorn RUN --mount=type=cache,target=/root/.cache/uv \
RUN poetry install --without=dev uv sync --locked --no-dev
COPY . /app
RUN chown wagtail:wagtail /app RUN chown wagtail:wagtail /app
COPY --chown=wagtail:wagtail . .
USER wagtail USER wagtail
ENV PATH="/app/.venv/bin:$PATH"
RUN python manage.py collectstatic --noinput --clear RUN python manage.py collectstatic --noinput --clear
CMD set -xe; python manage.py migrate --noinput && gunicorn dnscms.wsgi:application CMD ["sh", "-c", "set -xe; python manage.py migrate --noinput && gunicorn dnscms.wsgi:application"]

View File

@@ -10,9 +10,9 @@ from wagtail.admin.panels import FieldPanel
from wagtail.fields import RichTextField from wagtail.fields import RichTextField
from wagtail.models import Page from wagtail.models import Page
from wagtail.search import index from wagtail.search import index
from wagtail_wordpress_import.models import WPImportedPageMixin
from dnscms.fields import CommonStreamField from dnscms.fields import CommonStreamField
from dnscms.wordpress.models import WPImportedPageMixin
@register_singular_query_field("associationIndex") @register_singular_query_field("associationIndex")
@@ -88,8 +88,6 @@ class AssociationPage(WPImportedPageMixin, Page):
index.SearchField("body"), index.SearchField("body"),
] ]
settings_panels = Page.settings_panels + WPImportedPageMixin.wordpress_panels
def import_wordpress_data(self, data): def import_wordpress_data(self, data):
import html import html

View File

@@ -36,8 +36,8 @@ INSTALLED_APPS = [
"venues", "venues",
"news", "news",
"openinghours", "openinghours",
"sponsors",
# end cms apps # end cms apps
"wagtail_wordpress_import",
"grapple", "grapple",
"graphene_django", "graphene_django",
"wagtail.contrib.forms", "wagtail.contrib.forms",
@@ -201,6 +201,7 @@ GRAPPLE = {
"venues", "venues",
"news", "news",
"openinghours", "openinghours",
"sponsors",
], ],
"EXPOSE_GRAPHIQL": True, "EXPOSE_GRAPHIQL": True,
} }

View File

@@ -0,0 +1,17 @@
from django.db import models
from wagtail.models import Page
# https://github.com/wagtail/wagtail-wordpress-import/blob/main/wagtail_wordpress_import/models.py
class WPImportedPageMixin(Page):
wp_post_id = models.IntegerField(blank=True, null=True)
wp_post_type = models.CharField(max_length=255, blank=True, null=True)
wp_link = models.TextField(blank=True, null=True)
wp_raw_content = models.TextField(blank=True, null=True)
wp_processed_content = models.TextField(blank=True, null=True)
wp_block_json = models.TextField(blank=True, null=True)
wp_normalized_styles = models.TextField(blank=True, null=True)
wp_post_meta = models.JSONField(blank=True, null=True)
class Meta:
abstract = True

View File

@@ -30,11 +30,11 @@ from wagtail.fields import RichTextField
from wagtail.models import Orderable, Page, PageManager, PageQuerySet from wagtail.models import Orderable, Page, PageManager, PageQuerySet
from wagtail.search import index from wagtail.search import index
from wagtail.snippets.models import register_snippet from wagtail.snippets.models import register_snippet
from wagtail_wordpress_import.models import WPImportedPageMixin
from associations.widgets import AssociationChooserWidget from associations.widgets import AssociationChooserWidget
from dnscms.fields import CommonStreamField from dnscms.fields import CommonStreamField
from dnscms.options import ALL_PIGS from dnscms.options import ALL_PIGS
from dnscms.wordpress.models import WPImportedPageMixin
from venues.models import VenuePage from venues.models import VenuePage
@@ -406,14 +406,12 @@ class EventPage(WPImportedPageMixin, Page):
self.price_student = "" self.price_student = ""
self.price_member = "" self.price_member = ""
settings_panels = Page.settings_panels + WPImportedPageMixin.wordpress_panels
def import_wordpress_data(self, data): def import_wordpress_data(self, data):
import datetime import datetime
import html import html
from zoneinfo import ZoneInfo
from django.core.validators import URLValidator from django.core.validators import URLValidator
from zoneinfo import ZoneInfo
validate_url = URLValidator(schemes=["http", "https"]) validate_url = URLValidator(schemes=["http", "https"])
@@ -570,6 +568,7 @@ class EventOccurrence(Orderable):
GraphQLString("start", required=True), GraphQLString("start", required=True),
GraphQLString("end"), GraphQLString("end"),
GraphQLForeignKey("venue", "venues.VenuePage"), GraphQLForeignKey("venue", "venues.VenuePage"),
GraphQLString("venue_custom"),
] ]
def clean(self): def clean(self):

3
dnscms/mise.toml Normal file
View File

@@ -0,0 +1,3 @@
[tools]
python = "3.13"
uv = "latest"

View File

@@ -5,9 +5,9 @@ from wagtail.admin.panels import FieldPanel
from wagtail.fields import RichTextField from wagtail.fields import RichTextField
from wagtail.models import Page from wagtail.models import Page
from wagtail.search import index from wagtail.search import index
from wagtail_wordpress_import.models import WPImportedPageMixin
from dnscms.fields import CommonStreamField from dnscms.fields import CommonStreamField
from dnscms.wordpress.models import WPImportedPageMixin
@register_singular_query_field("newsIndex") @register_singular_query_field("newsIndex")
@@ -76,8 +76,6 @@ class NewsPage(WPImportedPageMixin, Page):
index.SearchField("body"), index.SearchField("body"),
] ]
settings_panels = Page.settings_panels + WPImportedPageMixin.wordpress_panels
def import_wordpress_data(self, data): def import_wordpress_data(self, data):
import html import html

1220
dnscms/poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +1,29 @@
[tool.poetry] [project]
name = "dnscms" name = "dnscms"
version = "0.1.0" version = "0.1.0"
description = "" description = ""
authors = ["Your Name <you@example.com>"] authors = [{ name = "EDB", email = "edb@neuf.no" }]
requires-python = ">=3.12, <3.13"
readme = "README.md" readme = "README.md"
dependencies = [
"wagtail>=6.1.3,<7",
"django>=5.0.7,<6",
"wagtail-grapple>=0.26.0,<0.27",
"psycopg2-binary>=2.9.10,<3",
"django-extensions>=3.2.3,<4",
"whitenoise>=6.7.0,<7",
"gunicorn>=23.0.0",
]
[tool.poetry.dependencies] [dependency-groups]
python = "^3.12" dev = ["ruff"]
wagtail = "^6.1.3"
django = "^5.0.7"
wagtail-grapple = "^0.26.0"
psycopg2-binary = "^2.9.9"
django-extensions = "^3.2.3"
wagtail-wordpress-import = { git = "https://github.com/ponas/wagtail-wordpress-import.git", branch = "make-it-work" }
whitenoise = "^6.7.0"
[tool.poetry.group.dev.dependencies] [tool.uv]
ruff = "*" package = false
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.ruff] [tool.ruff]
line-length = 99 line-length = 99
@@ -25,7 +32,3 @@ line-length = 99
select = ["F", "E", "W", "Q", "UP", "DJ"] select = ["F", "E", "W", "Q", "UP", "DJ"]
ignore = [] ignore = []
exclude = ["**/migrations/*.py"] exclude = ["**/migrations/*.py"]
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

View File

6
dnscms/sponsors/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class SponsorsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'sponsors'

View File

@@ -0,0 +1,30 @@
# Generated by Django 5.1 on 2025-07-23 08:42
import django.db.models.deletion
import wagtail.fields
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('wagtailcore', '0094_alter_page_locale'),
]
operations = [
migrations.CreateModel(
name='SponsorsPage',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.page')),
('lead', wagtail.fields.RichTextField(blank=True)),
('sponsors', wagtail.fields.StreamField([('sponsor', 4)], blank=True, block_lookup={0: ('wagtail.blocks.CharBlock', (), {'label': 'Navn', 'max_length': 255}), 1: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Logo', 'required': False}), 2: ('wagtail.blocks.URLBlock', (), {'label': 'Nettside', 'required': False}), 3: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link', 'ul', 'ol'], 'label': 'Beskrivelse', 'required': False}), 4: ('wagtail.blocks.StructBlock', [[('name', 0), ('logo', 1), ('website', 2), ('text', 3)]], {})})),
('body', wagtail.fields.StreamField([('paragraph', 0), ('image', 4), ('image_slider', 8), ('horizontal_rule', 10), ('featured', 18), ('page_section_navigation', 19), ('accordion', 23), ('fact_box', 26), ('embed', 27), ('raw_html', 28)], block_lookup={0: ('wagtail.blocks.RichTextBlock', (), {'label': 'Rik tekst'}), 1: ('wagtail.images.blocks.ImageChooserBlock', (), {'label': 'Bilde'}), 2: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('fullwidth', 'Fullbredde'), ('bleed', 'Utfallende'), ('original', 'Uendret størrelse')], 'icon': 'cup', 'label': 'Bildeformat'}), 3: ('wagtail.blocks.CharBlock', (), {'label': 'Bildetekst', 'max_length': 512, 'required': False}), 4: ('wagtail.blocks.StructBlock', [[('image', 1), ('image_format', 2), ('text', 3)]], {}), 5: ('wagtail.blocks.CharBlock', (), {'label': 'Tekst', 'max_length': 512, 'required': False}), 6: ('wagtail.blocks.StructBlock', [[('image', 1), ('text', 5)]], {}), 7: ('wagtail.blocks.ListBlock', (6,), {'label': 'Bilder', 'min_num': 1}), 8: ('wagtail.blocks.StructBlock', [[('images', 7)]], {}), 9: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('deepBrick', 'Dyp tegl'), ('neufPink', 'Griserosa'), ('goldenOrange', 'Gyllen oransje'), ('goldenBeige', 'Gyllen beige'), ('chateauBlue', 'Slottsblå')], 'label': 'Farge', 'required': False}), 10: ('wagtail.blocks.StructBlock', [[('color', 9)]], {}), 11: ('wagtail.blocks.CharBlock', (), {'label': 'Tittel', 'max_length': 64, 'required': True}), 12: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link'], 'label': 'Tekst', 'required': True}), 13: ('wagtail.blocks.PageChooserBlock', (), {'header': 'Fremhevet side', 'required': True}), 14: ('wagtail.blocks.CharBlock', (), {'default': 'Les mer', 'help_text': 'Lenketeksten som tar deg videre til siden. Tips: Ikke start med "Trykk her"', 'label': 'Lenketekst', 'max_length': 64, 'required': True}), 15: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('betongGray', 'Betonggrå'), ('deepBrick', 'Dyp tegl'), ('neufPink', 'Griserosa'), ('goldenOrange', 'Gyllen oransje'), ('goldenBeige', 'Gyllen beige'), ('chateauBlue', 'Slottsblå')], 'label': 'Bakgrunnsfarge'}), 16: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('left', 'Venstre'), ('right', 'Høyre')], 'label': 'Bildeplassering'}), 17: ('wagtail.images.blocks.ImageChooserBlock', (), {'header': 'Overstyr bilde', 'help_text': 'Bildet som er tilknyttet undersiden du vil fremheve, vil automatisk brukes. Om det mangler eller du vil overstyre hvilket bilde som et brukes, kan du velge et her.', 'required': False}), 18: ('wagtail.blocks.StructBlock', [[('title', 11), ('text', 12), ('featured_page', 13), ('link_text', 14), ('background_color', 15), ('image_position', 16), ('featured_image_override', 17)]], {}), 19: ('dnscms.blocks.PageSectionNavigationBlock', (), {}), 20: ('wagtail.blocks.CharBlock', (), {'label': 'Overskrift', 'max_length': 64, 'required': True}), 21: ('wagtail.blocks.StructBlock', [[('image', 1), ('image_format', 2), ('text', 3)]], {'label': 'Bilde'}), 22: ('wagtail.blocks.StreamBlock', [[('paragraph', 0), ('image', 21)]], {}), 23: ('wagtail.blocks.StructBlock', [[('heading', 20), ('body', 22)]], {}), 24: ('wagtail.blocks.ChoiceBlock', [], {'choices': [('betongGray', 'Betonggrå'), ('deepBrick', 'Dyp tegl'), ('neufPink', 'Griserosa'), ('goldenOrange', 'Gyllen oransje'), ('goldenBeige', 'Gyllen beige'), ('chateauBlue', 'Slottsblå')], 'label': 'Bakgrunnsfarge', 'required': False}), 25: ('wagtail.blocks.RichTextBlock', (), {'features': ['bold', 'italic', 'link', 'ol', 'ul', 'h2', 'h3'], 'label': 'Innhold'}), 26: ('wagtail.blocks.StructBlock', [[('background_color', 24), ('body', 25)]], {}), 27: ('wagtail.embeds.blocks.EmbedBlock', (), {}), 28: ('wagtail.blocks.RawHTMLBlock', (), {})})),
],
options={
'abstract': False,
},
bases=('wagtailcore.page',),
),
]

View File

62
dnscms/sponsors/models.py Normal file
View File

@@ -0,0 +1,62 @@
from grapple.helpers import register_singular_query_field, register_streamfield_block
from grapple.models import GraphQLImage, GraphQLRichText, GraphQLStreamfield, GraphQLString
from wagtail import blocks
from wagtail.admin.panels import (
FieldPanel,
)
from wagtail.fields import RichTextField, StreamField
from wagtail.images.blocks import ImageChooserBlock
from wagtail.models import Page
from wagtail.search import index
from dnscms.blocks import BASE_BLOCKS
@register_streamfield_block
class SponsorBlock(blocks.StructBlock):
name = blocks.CharBlock(max_length=255, label="Navn")
logo = ImageChooserBlock(required=False, label="Logo")
website = blocks.URLBlock(required=False, label="Nettside")
text = blocks.RichTextBlock(
features=["bold", "italic", "link", "ul", "ol"], required=False, label="Beskrivelse"
)
graphql_fields = [
GraphQLString("name", required=False),
GraphQLImage("logo", required=False),
GraphQLString("website", required=False),
GraphQLString("text", required=False),
]
class Meta:
label = "Sponsor"
icon = "tag"
@register_singular_query_field("sponsorsPage")
class SponsorsPage(Page):
max_count = 1
subpage_types = []
lead = RichTextField(features=["italic", "link"], blank=True)
sponsors = StreamField(
[
("sponsor", SponsorBlock()),
],
blank=True,
)
body = StreamField(BASE_BLOCKS)
content_panels = Page.content_panels + [
FieldPanel("lead", heading="Ingress"),
FieldPanel("body", heading="Innhold"),
FieldPanel("sponsors", heading="Sponsorer"),
]
graphql_fields = [
GraphQLRichText("lead"),
GraphQLStreamfield("body"),
GraphQLStreamfield("sponsors"),
]
search_fields = Page.search_fields + [index.SearchField("body"), index.SearchField("sponsors")]

621
dnscms/uv.lock generated Normal file
View File

@@ -0,0 +1,621 @@
version = 1
revision = 2
requires-python = "==3.12.*"
[[package]]
name = "aniso8601"
version = "9.0.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/cb/72/be3db445b03944bfbb2b02b82d00cb2a2bcf96275c4543f14bf60fa79e12/aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973", size = 47345, upload-time = "2021-03-02T01:33:22.944Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e3/04/e97c12dc034791d7b504860acfcdd2963fa21ae61eaca1c9d31245f812c3/aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f", size = 52754, upload-time = "2021-03-02T01:33:20.669Z" },
]
[[package]]
name = "anyascii"
version = "0.3.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/9f/52/93b9ea99063f7cf37fb67f5e3f49480686cbe7f228c48b9d713326223b6e/anyascii-0.3.2.tar.gz", hash = "sha256:9d5d32ef844fe225b8bc7cba7f950534fae4da27a9bf3a6bea2cb0ea46ce4730", size = 214052, upload-time = "2023-03-16T00:24:42.431Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/4f/7b/a9a747e0632271d855da379532b05a62c58e979813814a57fa3b3afeb3a4/anyascii-0.3.2-py3-none-any.whl", hash = "sha256:3b3beef6fc43d9036d3b0529050b0c48bfad8bc960e9e562d7223cfb94fe45d4", size = 289923, upload-time = "2023-03-16T00:24:39.649Z" },
]
[[package]]
name = "asgiref"
version = "3.8.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/29/38/b3395cc9ad1b56d2ddac9970bc8f4141312dbaec28bc7c218b0dfafd0f42/asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590", size = 35186, upload-time = "2024-03-22T14:39:36.863Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", size = 23828, upload-time = "2024-03-22T14:39:34.521Z" },
]
[[package]]
name = "beautifulsoup4"
version = "4.12.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "soupsieve" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b3/ca/824b1195773ce6166d388573fc106ce56d4a805bd7427b624e063596ec58/beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051", size = 581181, upload-time = "2024-01-17T16:53:17.902Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b1/fe/e8c672695b37eecc5cbf43e1d0638d88d66ba3a44c4d321c796f4e59167f/beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed", size = 147925, upload-time = "2024-01-17T16:53:12.779Z" },
]
[[package]]
name = "certifi"
version = "2024.8.30"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", size = 168507, upload-time = "2024-08-30T01:55:04.365Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", size = 167321, upload-time = "2024-08-30T01:55:02.591Z" },
]
[[package]]
name = "charset-normalizer"
version = "3.3.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/63/09/c1bc53dab74b1816a00d8d030de5bf98f724c52c1635e07681d312f20be8/charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", size = 104809, upload-time = "2023-11-01T04:04:59.997Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/b2/fcedc8255ec42afee97f9e6f0145c734bbe104aac28300214593eb326f1d/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", size = 192892, upload-time = "2023-11-01T04:03:24.135Z" },
{ url = "https://files.pythonhosted.org/packages/2e/7d/2259318c202f3d17f3fe6438149b3b9e706d1070fe3fcbb28049730bb25c/charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", size = 122213, upload-time = "2023-11-01T04:03:25.66Z" },
{ url = "https://files.pythonhosted.org/packages/3a/52/9f9d17c3b54dc238de384c4cb5a2ef0e27985b42a0e5cc8e8a31d918d48d/charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", size = 119404, upload-time = "2023-11-01T04:03:27.04Z" },
{ url = "https://files.pythonhosted.org/packages/99/b0/9c365f6d79a9f0f3c379ddb40a256a67aa69c59609608fe7feb6235896e1/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", size = 137275, upload-time = "2023-11-01T04:03:28.466Z" },
{ url = "https://files.pythonhosted.org/packages/91/33/749df346e93d7a30cdcb90cbfdd41a06026317bfbfb62cd68307c1a3c543/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", size = 147518, upload-time = "2023-11-01T04:03:29.82Z" },
{ url = "https://files.pythonhosted.org/packages/72/1a/641d5c9f59e6af4c7b53da463d07600a695b9824e20849cb6eea8a627761/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", size = 140182, upload-time = "2023-11-01T04:03:31.511Z" },
{ url = "https://files.pythonhosted.org/packages/ee/fb/14d30eb4956408ee3ae09ad34299131fb383c47df355ddb428a7331cfa1e/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", size = 141869, upload-time = "2023-11-01T04:03:32.887Z" },
{ url = "https://files.pythonhosted.org/packages/df/3e/a06b18788ca2eb6695c9b22325b6fde7dde0f1d1838b1792a0076f58fe9d/charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", size = 144042, upload-time = "2023-11-01T04:03:34.412Z" },
{ url = "https://files.pythonhosted.org/packages/45/59/3d27019d3b447a88fe7e7d004a1e04be220227760264cc41b405e863891b/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", size = 138275, upload-time = "2023-11-01T04:03:35.759Z" },
{ url = "https://files.pythonhosted.org/packages/7b/ef/5eb105530b4da8ae37d506ccfa25057961b7b63d581def6f99165ea89c7e/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", size = 144819, upload-time = "2023-11-01T04:03:37.216Z" },
{ url = "https://files.pythonhosted.org/packages/a2/51/e5023f937d7f307c948ed3e5c29c4b7a3e42ed2ee0b8cdf8f3a706089bf0/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", size = 149415, upload-time = "2023-11-01T04:03:38.694Z" },
{ url = "https://files.pythonhosted.org/packages/24/9d/2e3ef673dfd5be0154b20363c5cdcc5606f35666544381bee15af3778239/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", size = 141212, upload-time = "2023-11-01T04:03:40.07Z" },
{ url = "https://files.pythonhosted.org/packages/5b/ae/ce2c12fcac59cb3860b2e2d76dc405253a4475436b1861d95fe75bdea520/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", size = 142167, upload-time = "2023-11-01T04:03:41.491Z" },
{ url = "https://files.pythonhosted.org/packages/ed/3a/a448bf035dce5da359daf9ae8a16b8a39623cc395a2ffb1620aa1bce62b0/charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", size = 93041, upload-time = "2023-11-01T04:03:42.836Z" },
{ url = "https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", size = 100397, upload-time = "2023-11-01T04:03:44.467Z" },
{ url = "https://files.pythonhosted.org/packages/28/76/e6222113b83e3622caa4bb41032d0b1bf785250607392e1b778aca0b8a7d/charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", size = 48543, upload-time = "2023-11-01T04:04:58.622Z" },
]
[[package]]
name = "defusedxml"
version = "0.7.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" },
]
[[package]]
name = "django"
version = "5.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "asgiref" },
{ name = "sqlparse" },
{ name = "tzdata", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/1e/0c/d854d25bb74a8a3b41e642bbd27fe6af12fadd0edfd07d487809cf0ef719/Django-5.1.tar.gz", hash = "sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d", size = 10681050, upload-time = "2024-08-07T13:34:10.857Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/28/b4/110532cebfea2244d76119904da98c6fa045ebb202aee9ec7cbf36ea3cad/Django-5.1-py3-none-any.whl", hash = "sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557", size = 8246099, upload-time = "2024-08-07T13:33:52.959Z" },
]
[[package]]
name = "django-extensions"
version = "3.2.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/8a/f1/318684c9466968bf9a9c221663128206e460c1a67f595055be4b284cde8a/django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a", size = 277216, upload-time = "2023-06-05T17:09:01.447Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/7e/ba12b9660642663f5273141018d2bec0a1cae1711f4f6d1093920e157946/django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401", size = 229868, upload-time = "2023-06-05T17:08:58.197Z" },
]
[[package]]
name = "django-filter"
version = "24.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/50/bc/dc19ae39c235332926dd0efe0951f663fa1a9fc6be8430737ff7fd566b20/django_filter-24.3.tar.gz", hash = "sha256:d8ccaf6732afd21ca0542f6733b11591030fa98669f8d15599b358e24a2cd9c3", size = 144444, upload-time = "2024-08-02T13:27:58.132Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/09/b1/92f1c30b47c1ebf510c35a2ccad9448f73437e5891bbd2b4febe357cc3de/django_filter-24.3-py3-none-any.whl", hash = "sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64", size = 95011, upload-time = "2024-08-02T13:27:55.616Z" },
]
[[package]]
name = "django-modelcluster"
version = "6.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
{ name = "pytz" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3d/dd/db1ab2e256f9fda6796ac312686561cbe2740d960c920f74410559ef7739/django-modelcluster-6.3.tar.gz", hash = "sha256:0caed8a0e889f3abb92f144670878a466ef954ffa6c4c7b9c80e6426b720a49d", size = 28903, upload-time = "2024-02-26T19:26:53.185Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ee/6d/8deb2dfde2e1177412b759a1c32713be19b1d3af1da686e44e64c165e8c0/django_modelcluster-6.3-py2.py3-none-any.whl", hash = "sha256:a8783d6565a0663f41cd6003ea361c3a5711e8a2a326160f1ec1eceb3e973d4f", size = 29039, upload-time = "2024-02-26T19:26:50.903Z" },
]
[[package]]
name = "django-permissionedforms"
version = "0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/94/4b/364fe61a161ead607dc6af311901ba8e62f537f8fdab94b5252cb6efe6d7/django-permissionedforms-0.1.tar.gz", hash = "sha256:4340bb20c4477fffb13b4cc5cccf9f1b1010b64f79956c291c72d2ad2ed243f8", size = 5856, upload-time = "2022-02-28T19:40:27.892Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e6/5b/216157ff053f955b15b9dcdc13bfb6e406666445164fee9e332e141be96d/django_permissionedforms-0.1-py2.py3-none-any.whl", hash = "sha256:d341a961a27cc77fde8cc42141c6ab55cc1f0cb886963cc2d6967b9674fa47d6", size = 5744, upload-time = "2022-02-28T19:40:26.337Z" },
]
[[package]]
name = "django-taggit"
version = "5.0.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/10/eb/269501702e231b552f68d813d0a07ac1ea81fd25a3c92fb0f249818f0f39/django-taggit-5.0.1.tar.gz", hash = "sha256:edcd7db1e0f35c304e082a2f631ddac2e16ef5296029524eb792af7430cab4cc", size = 60372, upload-time = "2023-10-29T11:57:20.124Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/07/18/94a45c8c50592d5cf7d73a9111053917c3684fda031c988041396bb3e588/django_taggit-5.0.1-py3-none-any.whl", hash = "sha256:a0ca8a28b03c4b26c2630fd762cb76ec39b5e41abf727a7b66f897a625c5e647", size = 61141, upload-time = "2023-10-29T11:56:57.954Z" },
]
[[package]]
name = "django-treebeard"
version = "4.7.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/bb/24/eaccbce17355380cb3a8fe6ad92a85b76453dc1f0ecd04f48bfe8929065b/django-treebeard-4.7.1.tar.gz", hash = "sha256:846e462904b437155f76e04907ba4e48480716855f88b898df4122bdcfbd6e98", size = 294139, upload-time = "2024-01-31T16:35:19.751Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/87/79/259966820614746cc4d81762edf97a53bf1e3b8e74797c010d310c6f4a8f/django_treebeard-4.7.1-py3-none-any.whl", hash = "sha256:995c7120153ab999898fe3043bbdcd8a0fc77cc106eb94de7350e9d02c885135", size = 93210, upload-time = "2024-01-31T16:35:17.843Z" },
]
[[package]]
name = "djangorestframework"
version = "3.15.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/2c/ce/31482eb688bdb4e271027076199e1aa8d02507e530b6d272ab8b4481557c/djangorestframework-3.15.2.tar.gz", hash = "sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad", size = 1067420, upload-time = "2024-06-19T07:59:32.891Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/7c/b6/fa99d8f05eff3a9310286ae84c4059b08c301ae4ab33ae32e46e8ef76491/djangorestframework-3.15.2-py3-none-any.whl", hash = "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20", size = 1071235, upload-time = "2024-06-19T07:59:26.106Z" },
]
[[package]]
name = "dnscms"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "django" },
{ name = "django-extensions" },
{ name = "gunicorn" },
{ name = "psycopg2-binary" },
{ name = "wagtail" },
{ name = "wagtail-grapple" },
{ name = "whitenoise" },
]
[package.dev-dependencies]
dev = [
{ name = "ruff" },
]
[package.metadata]
requires-dist = [
{ name = "django", specifier = ">=5.0.7,<6" },
{ name = "django-extensions", specifier = ">=3.2.3,<4" },
{ name = "gunicorn", specifier = ">=23.0.0" },
{ name = "psycopg2-binary", specifier = ">=2.9.10,<3" },
{ name = "wagtail", specifier = ">=6.1.3,<7" },
{ name = "wagtail-grapple", specifier = ">=0.26.0,<0.27" },
{ name = "whitenoise", specifier = ">=6.7.0,<7" },
]
[package.metadata.requires-dev]
dev = [{ name = "ruff" }]
[[package]]
name = "draftjs-exporter"
version = "5.0.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/29/5b/7729b1a95d48d2f51b03feacda1d5b17058e1caec524592e59d0df801a8c/draftjs_exporter-5.0.0.tar.gz", hash = "sha256:2efee45d4bb4c0aaacc3e5ea2983a29a29381e02037f3f92a6b12706d7b87e1e", size = 33271, upload-time = "2022-04-03T22:00:47.094Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/58/f4/95ad9b91194156f0e87877d640428b1c7be70a90979796ecdcb77adcfb4f/draftjs_exporter-5.0.0-py3-none-any.whl", hash = "sha256:8cb9d2d51284233decfe274802f1c53e257158c62b9f53ed2399de3fa80ac561", size = 26320, upload-time = "2022-04-03T22:00:44.647Z" },
]
[[package]]
name = "et-xmlfile"
version = "1.1.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/3d/5d/0413a31d184a20c763ad741cc7852a659bf15094c24840c5bdd1754765cd/et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c", size = 3218, upload-time = "2021-04-26T13:26:05.068Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/96/c2/3dd434b0108730014f1b96fd286040dc3bcb70066346f7e01ec2ac95865f/et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada", size = 4688, upload-time = "2021-04-26T13:26:03.429Z" },
]
[[package]]
name = "filetype"
version = "1.2.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020, upload-time = "2022-11-02T17:34:04.141Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970, upload-time = "2022-11-02T17:34:01.425Z" },
]
[[package]]
name = "graphene"
version = "3.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "aniso8601" },
{ name = "graphql-core" },
{ name = "graphql-relay" },
]
sdist = { url = "https://files.pythonhosted.org/packages/82/75/02875858c7c09fc156840181cdee27b23408fac75720a2e1e9128f3d48a5/graphene-3.3.tar.gz", hash = "sha256:529bf40c2a698954217d3713c6041d69d3f719ad0080857d7ee31327112446b0", size = 57893, upload-time = "2023-07-26T06:48:39.083Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/24/70/96f6027cdfc9bb89fc07627b615cb43fb1c443c93498412beaeaf157e9f1/graphene-3.3-py2.py3-none-any.whl", hash = "sha256:bb3810be33b54cb3e6969506671eb72319e8d7ba0d5ca9c8066472f75bf35a38", size = 128227, upload-time = "2023-07-26T06:48:37.766Z" },
]
[[package]]
name = "graphene-django"
version = "3.2.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
{ name = "graphene" },
{ name = "graphql-core" },
{ name = "graphql-relay" },
{ name = "promise" },
{ name = "text-unidecode" },
]
sdist = { url = "https://files.pythonhosted.org/packages/09/f1/4eb1c0ae79814aba03e2347f664cb0bef72816fbe99d4399378bb22bef47/graphene-django-3.2.2.tar.gz", hash = "sha256:059ccf25d9a5159f28d7ebf1a648c993ab34deb064e80b70ca096aa22a609556", size = 87591, upload-time = "2024-06-12T02:58:09.439Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/da/71/6800d05144ee4fb57f471571dd80fc9c6b2196e6243d39ed3d3654082824/graphene_django-3.2.2-py2.py3-none-any.whl", hash = "sha256:0fd95c8c1cbe77ae2a5940045ce276803c3acbf200a156731e0c730f2776ae2c", size = 114204, upload-time = "2024-06-12T02:58:07.897Z" },
]
[[package]]
name = "graphql-core"
version = "3.2.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ee/a6/94df9045ca1bac404c7b394094cd06713f63f49c7a4d54d99b773ae81737/graphql-core-3.2.3.tar.gz", hash = "sha256:06d2aad0ac723e35b1cb47885d3e5c45e956a53bc1b209a9fc5369007fe46676", size = 529552, upload-time = "2022-09-23T08:37:13.684Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f8/39/e5143e7ec70939d2076c1165ae9d4a3815597019c4d797b7f959cf778600/graphql_core-3.2.3-py3-none-any.whl", hash = "sha256:5766780452bd5ec8ba133f8bf287dc92713e3868ddd83aee4faab9fc3e303dc3", size = 202921, upload-time = "2022-09-23T08:37:11.825Z" },
]
[[package]]
name = "graphql-relay"
version = "3.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "graphql-core" },
]
sdist = { url = "https://files.pythonhosted.org/packages/d1/13/98fbf8d67552f102488ffc16c6f559ce71ea15f6294728d33928ab5ff14d/graphql-relay-3.2.0.tar.gz", hash = "sha256:1ff1c51298356e481a0be009ccdff249832ce53f30559c1338f22a0e0d17250c", size = 50027, upload-time = "2022-04-16T11:03:45.447Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/74/16/a4cf06adbc711bd364a73ce043b0b08d8fa5aae3df11b6ee4248bcdad2e0/graphql_relay-3.2.0-py3-none-any.whl", hash = "sha256:c9b22bd28b170ba1fe674c74384a8ff30a76c8e26f88ac3aa1584dd3179953e5", size = 16940, upload-time = "2022-04-16T11:03:43.895Z" },
]
[[package]]
name = "gunicorn"
version = "23.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "packaging" },
]
sdist = { url = "https://files.pythonhosted.org/packages/34/72/9614c465dc206155d93eff0ca20d42e1e35afc533971379482de953521a4/gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec", size = 375031, upload-time = "2024-08-10T20:25:27.378Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029, upload-time = "2024-08-10T20:25:24.996Z" },
]
[[package]]
name = "idna"
version = "3.8"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/e8/ac/e349c5e6d4543326c6883ee9491e3921e0d07b55fdf3cce184b40d63e72a/idna-3.8.tar.gz", hash = "sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603", size = 189467, upload-time = "2024-08-23T16:01:51.339Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/22/7e/d71db821f177828df9dea8c42ac46473366f191be53080e552e628aad991/idna-3.8-py3-none-any.whl", hash = "sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac", size = 66894, upload-time = "2024-08-23T16:01:49.963Z" },
]
[[package]]
name = "l18n"
version = "2021.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pytz" },
{ name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/ff/9c/13d732e16e8fbdef7e68f4f339f3b86618430d4003c7ffe82e15bf925d7c/l18n-2021.3.tar.gz", hash = "sha256:1956e890d673d17135cc20913253c154f6bc1c00266c22b7d503cc1a5a42d848", size = 50712, upload-time = "2021-11-12T09:32:36.255Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/6c/e7/dfa82d0bb2b314950e457a755463b429090127ffc0ab9d8d14ef4563ad44/l18n-2021.3-py3-none-any.whl", hash = "sha256:78495d1df95b6f7dcc694d1ba8994df709c463a1cbac1bf016e1b9a5ce7280b9", size = 51534, upload-time = "2021-11-12T09:32:34.296Z" },
]
[[package]]
name = "laces"
version = "0.1.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "django" },
]
sdist = { url = "https://files.pythonhosted.org/packages/a2/cb/d69f2cbb248bd6baceb7597d8c6c229797689b546ac2a446fac15b8f455f/laces-0.1.1.tar.gz", hash = "sha256:e45159c46f6adca33010d34e9af869e57201b70675c6dc088e919b16c89456a4", size = 26889, upload-time = "2024-02-10T23:34:22.055Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e0/dc/ceadbdc5e14aec7bd01bdd6ef8d5bf704d6a12d1b5a25bcaaa066bdb820d/laces-0.1.1-py3-none-any.whl", hash = "sha256:ae2c575b9aaa46154e5518c61c9f86f5a9478f753a51e9c5547c7d275d361242", size = 21349, upload-time = "2024-02-10T23:34:20.37Z" },
]
[[package]]
name = "openpyxl"
version = "3.1.5"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "et-xmlfile" },
]
sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" },
]
[[package]]
name = "packaging"
version = "24.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", size = 148788, upload-time = "2024-06-09T23:19:24.956Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985, upload-time = "2024-06-09T23:19:21.909Z" },
]
[[package]]
name = "pillow"
version = "10.4.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", size = 46555059, upload-time = "2024-07-01T09:48:43.583Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94", size = 3509350, upload-time = "2024-07-01T09:46:17.177Z" },
{ url = "https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597", size = 3374980, upload-time = "2024-07-01T09:46:19.169Z" },
{ url = "https://files.pythonhosted.org/packages/84/48/6e394b86369a4eb68b8a1382c78dc092245af517385c086c5094e3b34428/pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80", size = 4343799, upload-time = "2024-07-01T09:46:21.883Z" },
{ url = "https://files.pythonhosted.org/packages/3b/f3/a8c6c11fa84b59b9df0cd5694492da8c039a24cd159f0f6918690105c3be/pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca", size = 4459973, upload-time = "2024-07-01T09:46:24.321Z" },
{ url = "https://files.pythonhosted.org/packages/7d/1b/c14b4197b80150fb64453585247e6fb2e1d93761fa0fa9cf63b102fde822/pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef", size = 4370054, upload-time = "2024-07-01T09:46:26.825Z" },
{ url = "https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a", size = 4539484, upload-time = "2024-07-01T09:46:29.355Z" },
{ url = "https://files.pythonhosted.org/packages/40/54/90de3e4256b1207300fb2b1d7168dd912a2fb4b2401e439ba23c2b2cabde/pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b", size = 4477375, upload-time = "2024-07-01T09:46:31.756Z" },
{ url = "https://files.pythonhosted.org/packages/13/24/1bfba52f44193860918ff7c93d03d95e3f8748ca1de3ceaf11157a14cf16/pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9", size = 4608773, upload-time = "2024-07-01T09:46:33.73Z" },
{ url = "https://files.pythonhosted.org/packages/55/04/5e6de6e6120451ec0c24516c41dbaf80cce1b6451f96561235ef2429da2e/pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42", size = 2235690, upload-time = "2024-07-01T09:46:36.587Z" },
{ url = "https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a", size = 2554951, upload-time = "2024-07-01T09:46:38.777Z" },
{ url = "https://files.pythonhosted.org/packages/b5/ca/184349ee40f2e92439be9b3502ae6cfc43ac4b50bc4fc6b3de7957563894/pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9", size = 2243427, upload-time = "2024-07-01T09:46:43.15Z" },
]
[[package]]
name = "pillow-heif"
version = "0.18.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pillow" },
]
sdist = { url = "https://files.pythonhosted.org/packages/c9/bb/e7797fe7f5cad447bb470f916ead38f0929e8d28bdf6bd5d9f31dfe1ac26/pillow_heif-0.18.0.tar.gz", hash = "sha256:70318dad9faa76121c6592ac0ab59881ff0dac6ab791a922e70d82c7706cce88", size = 16172675, upload-time = "2024-07-27T16:21:21.889Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5a/48/4bdce48d77c307b50bba0c77d6485e156f0fefcca273ce007351ad1deb40/pillow_heif-0.18.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:c795e7ccceea33e01e49ce536139f94cabb1bf017393666f76c05a9daebae2da", size = 5279030, upload-time = "2024-07-27T16:20:00.876Z" },
{ url = "https://files.pythonhosted.org/packages/3c/d8/8f2f8f44b6fc3689ace680b21655a0eabb1393f8e66b8851b0f95b8aac1c/pillow_heif-0.18.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4dd5b3ec09be45c1ef63be31773df90e18ee08e5e950018b0a349924b54a24ac", size = 3732529, upload-time = "2024-07-27T16:20:02.849Z" },
{ url = "https://files.pythonhosted.org/packages/f8/61/f0aac50a7ad051e1cb71ed7a8d3a94b5e54ea8ed1acb03586f0fcdebd730/pillow_heif-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb2eade59c2654c2643a3b637de37c19e75a77c66a3e9a5e0ae26210e4f48aee", size = 6759746, upload-time = "2024-07-27T16:20:04.776Z" },
{ url = "https://files.pythonhosted.org/packages/4b/71/a8b3684f64307b96ea0ae14594564b41fdf4d4a6f7df5ef73d180a71db5d/pillow_heif-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35b59d599bfdb8454739db6b92f0841ecadbe887babb5ed5abd5299587843eef", size = 7586203, upload-time = "2024-07-27T16:20:06.811Z" },
{ url = "https://files.pythonhosted.org/packages/d8/59/3b1c90f7d366fb653f5f072803ae6350e608bea0d0d0ea65d6e7764c470f/pillow_heif-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:26a0b8b8e899e7bcc876ee61fcadb0f0b849bd6a0d5c20f0e969c77a43b40568", size = 8119771, upload-time = "2024-07-27T16:20:08.491Z" },
{ url = "https://files.pythonhosted.org/packages/48/20/a72297dc260d0bf8fce8f209d36ceb498b2f1e8beb478a0ab3f565c9a3c9/pillow_heif-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0276a3e0c667677ed0c67f4512cdf2f674065018049307ba4de5cb4648b0a33e", size = 8850943, upload-time = "2024-07-27T16:20:10.262Z" },
{ url = "https://files.pythonhosted.org/packages/12/98/2bcb2790618cfb8ce2054256a4d3bc2597288bf82444cc87fdc815484c38/pillow_heif-0.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:5916fa31f2015626dd2372d14e24521ea6caed11b25be14faa9b9c67731087ce", size = 8547707, upload-time = "2024-07-27T16:20:12.594Z" },
]
[[package]]
name = "promise"
version = "2.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "six" },
]
sdist = { url = "https://files.pythonhosted.org/packages/cf/9c/fb5d48abfe5d791cd496e4242ebcf87a4bb2e0c3dcd6e0ae68c11426a528/promise-2.3.tar.gz", hash = "sha256:dfd18337c523ba4b6a58801c164c1904a9d4d1b1747c7d5dbf45b693a49d93d0", size = 19534, upload-time = "2019-12-18T07:31:43.07Z" }
[[package]]
name = "psycopg2-binary"
version = "2.9.10"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/cb/0e/bdc8274dc0585090b4e3432267d7be4dfbfd8971c0fa59167c711105a6bf/psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2", size = 385764, upload-time = "2024-10-16T11:24:58.126Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/49/7d/465cc9795cf76f6d329efdafca74693714556ea3891813701ac1fee87545/psycopg2_binary-2.9.10-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:880845dfe1f85d9d5f7c412efea7a08946a46894537e4e5d091732eb1d34d9a0", size = 3044771, upload-time = "2024-10-16T11:20:35.234Z" },
{ url = "https://files.pythonhosted.org/packages/8b/31/6d225b7b641a1a2148e3ed65e1aa74fc86ba3fee850545e27be9e1de893d/psycopg2_binary-2.9.10-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9440fa522a79356aaa482aa4ba500b65f28e5d0e63b801abf6aa152a29bd842a", size = 3275336, upload-time = "2024-10-16T11:20:38.742Z" },
{ url = "https://files.pythonhosted.org/packages/30/b7/a68c2b4bff1cbb1728e3ec864b2d92327c77ad52edcd27922535a8366f68/psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3923c1d9870c49a2d44f795df0c889a22380d36ef92440ff618ec315757e539", size = 2851637, upload-time = "2024-10-16T11:20:42.145Z" },
{ url = "https://files.pythonhosted.org/packages/0b/b1/cfedc0e0e6f9ad61f8657fd173b2f831ce261c02a08c0b09c652b127d813/psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b2c956c028ea5de47ff3a8d6b3cc3330ab45cf0b7c3da35a2d6ff8420896526", size = 3082097, upload-time = "2024-10-16T11:20:46.185Z" },
{ url = "https://files.pythonhosted.org/packages/18/ed/0a8e4153c9b769f59c02fb5e7914f20f0b2483a19dae7bf2db54b743d0d0/psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f758ed67cab30b9a8d2833609513ce4d3bd027641673d4ebc9c067e4d208eec1", size = 3264776, upload-time = "2024-10-16T11:20:50.879Z" },
{ url = "https://files.pythonhosted.org/packages/10/db/d09da68c6a0cdab41566b74e0a6068a425f077169bed0946559b7348ebe9/psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd9b4f2cfab88ed4a9106192de509464b75a906462fb846b936eabe45c2063e", size = 3020968, upload-time = "2024-10-16T11:20:56.819Z" },
{ url = "https://files.pythonhosted.org/packages/94/28/4d6f8c255f0dfffb410db2b3f9ac5218d959a66c715c34cac31081e19b95/psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dc08420625b5a20b53551c50deae6e231e6371194fa0651dbe0fb206452ae1f", size = 2872334, upload-time = "2024-10-16T11:21:02.411Z" },
{ url = "https://files.pythonhosted.org/packages/05/f7/20d7bf796593c4fea95e12119d6cc384ff1f6141a24fbb7df5a668d29d29/psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7cd730dfa7c36dbe8724426bf5612798734bff2d3c3857f36f2733f5bfc7c00", size = 2822722, upload-time = "2024-10-16T11:21:09.01Z" },
{ url = "https://files.pythonhosted.org/packages/4d/e4/0c407ae919ef626dbdb32835a03b6737013c3cc7240169843965cada2bdf/psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:155e69561d54d02b3c3209545fb08938e27889ff5a10c19de8d23eb5a41be8a5", size = 2920132, upload-time = "2024-10-16T11:21:16.339Z" },
{ url = "https://files.pythonhosted.org/packages/2d/70/aa69c9f69cf09a01da224909ff6ce8b68faeef476f00f7ec377e8f03be70/psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3cc28a6fd5a4a26224007712e79b81dbaee2ffb90ff406256158ec4d7b52b47", size = 2959312, upload-time = "2024-10-16T11:21:25.584Z" },
{ url = "https://files.pythonhosted.org/packages/d3/bd/213e59854fafe87ba47814bf413ace0dcee33a89c8c8c814faca6bc7cf3c/psycopg2_binary-2.9.10-cp312-cp312-win32.whl", hash = "sha256:ec8a77f521a17506a24a5f626cb2aee7850f9b69a0afe704586f63a464f3cd64", size = 1025191, upload-time = "2024-10-16T11:21:29.912Z" },
{ url = "https://files.pythonhosted.org/packages/92/29/06261ea000e2dc1e22907dbbc483a1093665509ea586b29b8986a0e56733/psycopg2_binary-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:18c5ee682b9c6dd3696dad6e54cc7ff3a1a9020df6a5c0f861ef8bfd338c3ca0", size = 1164031, upload-time = "2024-10-16T11:21:34.211Z" },
]
[[package]]
name = "pytz"
version = "2024.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/90/26/9f1f00a5d021fff16dee3de13d43e5e978f3d58928e129c3a62cf7eb9738/pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", size = 316214, upload-time = "2024-02-02T01:18:41.693Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/9c/3d/a121f284241f08268b21359bd425f7d4825cffc5ac5cd0e1b3d82ffd2b10/pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319", size = 505474, upload-time = "2024-02-02T01:18:37.283Z" },
]
[[package]]
name = "requests"
version = "2.32.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "charset-normalizer" },
{ name = "idna" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218, upload-time = "2024-05-29T15:37:49.536Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928, upload-time = "2024-05-29T15:37:47.027Z" },
]
[[package]]
name = "ruff"
version = "0.12.4"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/9b/ce/8d7dbedede481245b489b769d27e2934730791a9a82765cb94566c6e6abd/ruff-0.12.4.tar.gz", hash = "sha256:13efa16df6c6eeb7d0f091abae50f58e9522f3843edb40d56ad52a5a4a4b6873", size = 5131435, upload-time = "2025-07-17T17:27:19.138Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ae/9f/517bc5f61bad205b7f36684ffa5415c013862dee02f55f38a217bdbe7aa4/ruff-0.12.4-py3-none-linux_armv6l.whl", hash = "sha256:cb0d261dac457ab939aeb247e804125a5d521b21adf27e721895b0d3f83a0d0a", size = 10188824, upload-time = "2025-07-17T17:26:31.412Z" },
{ url = "https://files.pythonhosted.org/packages/28/83/691baae5a11fbbde91df01c565c650fd17b0eabed259e8b7563de17c6529/ruff-0.12.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:55c0f4ca9769408d9b9bac530c30d3e66490bd2beb2d3dae3e4128a1f05c7442", size = 10884521, upload-time = "2025-07-17T17:26:35.084Z" },
{ url = "https://files.pythonhosted.org/packages/d6/8d/756d780ff4076e6dd035d058fa220345f8c458391f7edfb1c10731eedc75/ruff-0.12.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a8224cc3722c9ad9044da7f89c4c1ec452aef2cfe3904365025dd2f51daeae0e", size = 10277653, upload-time = "2025-07-17T17:26:37.897Z" },
{ url = "https://files.pythonhosted.org/packages/8d/97/8eeee0f48ece153206dce730fc9e0e0ca54fd7f261bb3d99c0a4343a1892/ruff-0.12.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9949d01d64fa3672449a51ddb5d7548b33e130240ad418884ee6efa7a229586", size = 10485993, upload-time = "2025-07-17T17:26:40.68Z" },
{ url = "https://files.pythonhosted.org/packages/49/b8/22a43d23a1f68df9b88f952616c8508ea6ce4ed4f15353b8168c48b2d7e7/ruff-0.12.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:be0593c69df9ad1465e8a2d10e3defd111fdb62dcd5be23ae2c06da77e8fcffb", size = 10022824, upload-time = "2025-07-17T17:26:43.564Z" },
{ url = "https://files.pythonhosted.org/packages/cd/70/37c234c220366993e8cffcbd6cadbf332bfc848cbd6f45b02bade17e0149/ruff-0.12.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7dea966bcb55d4ecc4cc3270bccb6f87a337326c9dcd3c07d5b97000dbff41c", size = 11524414, upload-time = "2025-07-17T17:26:46.219Z" },
{ url = "https://files.pythonhosted.org/packages/14/77/c30f9964f481b5e0e29dd6a1fae1f769ac3fd468eb76fdd5661936edd262/ruff-0.12.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:afcfa3ab5ab5dd0e1c39bf286d829e042a15e966b3726eea79528e2e24d8371a", size = 12419216, upload-time = "2025-07-17T17:26:48.883Z" },
{ url = "https://files.pythonhosted.org/packages/6e/79/af7fe0a4202dce4ef62c5e33fecbed07f0178f5b4dd9c0d2fcff5ab4a47c/ruff-0.12.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c057ce464b1413c926cdb203a0f858cd52f3e73dcb3270a3318d1630f6395bb3", size = 11976756, upload-time = "2025-07-17T17:26:51.754Z" },
{ url = "https://files.pythonhosted.org/packages/09/d1/33fb1fc00e20a939c305dbe2f80df7c28ba9193f7a85470b982815a2dc6a/ruff-0.12.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64b90d1122dc2713330350626b10d60818930819623abbb56535c6466cce045", size = 11020019, upload-time = "2025-07-17T17:26:54.265Z" },
{ url = "https://files.pythonhosted.org/packages/64/f4/e3cd7f7bda646526f09693e2e02bd83d85fff8a8222c52cf9681c0d30843/ruff-0.12.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2abc48f3d9667fdc74022380b5c745873499ff827393a636f7a59da1515e7c57", size = 11277890, upload-time = "2025-07-17T17:26:56.914Z" },
{ url = "https://files.pythonhosted.org/packages/5e/d0/69a85fb8b94501ff1a4f95b7591505e8983f38823da6941eb5b6badb1e3a/ruff-0.12.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:2b2449dc0c138d877d629bea151bee8c0ae3b8e9c43f5fcaafcd0c0d0726b184", size = 10348539, upload-time = "2025-07-17T17:26:59.381Z" },
{ url = "https://files.pythonhosted.org/packages/16/a0/91372d1cb1678f7d42d4893b88c252b01ff1dffcad09ae0c51aa2542275f/ruff-0.12.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:56e45bb11f625db55f9b70477062e6a1a04d53628eda7784dce6e0f55fd549eb", size = 10009579, upload-time = "2025-07-17T17:27:02.462Z" },
{ url = "https://files.pythonhosted.org/packages/23/1b/c4a833e3114d2cc0f677e58f1df6c3b20f62328dbfa710b87a1636a5e8eb/ruff-0.12.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:478fccdb82ca148a98a9ff43658944f7ab5ec41c3c49d77cd99d44da019371a1", size = 10942982, upload-time = "2025-07-17T17:27:05.343Z" },
{ url = "https://files.pythonhosted.org/packages/ff/ce/ce85e445cf0a5dd8842f2f0c6f0018eedb164a92bdf3eda51984ffd4d989/ruff-0.12.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:0fc426bec2e4e5f4c4f182b9d2ce6a75c85ba9bcdbe5c6f2a74fcb8df437df4b", size = 11343331, upload-time = "2025-07-17T17:27:08.652Z" },
{ url = "https://files.pythonhosted.org/packages/35/cf/441b7fc58368455233cfb5b77206c849b6dfb48b23de532adcc2e50ccc06/ruff-0.12.4-py3-none-win32.whl", hash = "sha256:4de27977827893cdfb1211d42d84bc180fceb7b72471104671c59be37041cf93", size = 10267904, upload-time = "2025-07-17T17:27:11.814Z" },
{ url = "https://files.pythonhosted.org/packages/ce/7e/20af4a0df5e1299e7368d5ea4350412226afb03d95507faae94c80f00afd/ruff-0.12.4-py3-none-win_amd64.whl", hash = "sha256:fe0b9e9eb23736b453143d72d2ceca5db323963330d5b7859d60d101147d461a", size = 11209038, upload-time = "2025-07-17T17:27:14.417Z" },
{ url = "https://files.pythonhosted.org/packages/11/02/8857d0dfb8f44ef299a5dfd898f673edefb71e3b533b3b9d2db4c832dd13/ruff-0.12.4-py3-none-win_arm64.whl", hash = "sha256:0618ec4442a83ab545e5b71202a5c0ed7791e8471435b94e655b570a5031a98e", size = 10469336, upload-time = "2025-07-17T17:27:16.913Z" },
]
[[package]]
name = "six"
version = "1.16.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041, upload-time = "2021-05-05T14:18:18.379Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053, upload-time = "2021-05-05T14:18:17.237Z" },
]
[[package]]
name = "soupsieve"
version = "2.6"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d7/ce/fbaeed4f9fb8b2daa961f90591662df6a86c1abf25c548329a86920aedfb/soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb", size = 101569, upload-time = "2024-08-13T13:39:12.166Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9", size = 36186, upload-time = "2024-08-13T13:39:10.986Z" },
]
[[package]]
name = "sqlparse"
version = "0.5.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/73/82/dfa23ec2cbed08a801deab02fe7c904bfb00765256b155941d789a338c68/sqlparse-0.5.1.tar.gz", hash = "sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e", size = 84502, upload-time = "2024-07-15T19:30:27.085Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5d/a5/b2860373aa8de1e626b2bdfdd6df4355f0565b47e51f7d0c54fe70faf8fe/sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4", size = 44156, upload-time = "2024-07-15T19:30:25.033Z" },
]
[[package]]
name = "telepath"
version = "0.3.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/65/58/5de8765687d6f9dfcbb72c89251036c3b901126404f872b936b13377a3fe/telepath-0.3.1.tar.gz", hash = "sha256:925c0609e0a8a6488ec4a55b19d485882cf72223b2b19fe2359a50fddd813c9c", size = 11622, upload-time = "2023-06-12T12:07:42.559Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5f/50/0f246d316f223b14ba5a88fbe2ff0b480d4a6064b866d48008dd57fd5930/telepath-0.3.1-py38-none-any.whl", hash = "sha256:c280aa8e77ad71ce80e96500a4e4d4a32f35b7e0b52e896bb5fde9a5bcf0699a", size = 10926, upload-time = "2023-06-12T12:07:41.443Z" },
]
[[package]]
name = "text-unidecode"
version = "1.3"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ab/e2/e9a00f0ccb71718418230718b3d900e71a5d16e701a3dae079a21e9cd8f8/text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93", size = 76885, upload-time = "2019-08-30T21:36:45.405Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", size = 78154, upload-time = "2019-08-30T21:37:03.543Z" },
]
[[package]]
name = "tzdata"
version = "2024.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/74/5b/e025d02cb3b66b7b76093404392d4b44343c69101cc85f4d180dd5784717/tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", size = 190559, upload-time = "2024-02-11T23:22:40.2Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/65/58/f9c9e6be752e9fcb8b6a0ee9fb87e6e7a1f6bcab2cdc73f02bb7ba91ada0/tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252", size = 345370, upload-time = "2024-02-11T23:22:38.223Z" },
]
[[package]]
name = "urllib3"
version = "2.2.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/43/6d/fa469ae21497ddc8bc93e5877702dca7cb8f911e337aca7452b5724f1bb6/urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168", size = 292266, upload-time = "2024-06-17T13:40:11.401Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ca/1c/89ffc63a9605b583d5df2be791a27bc1a42b7c32bab68d3c8f2f73a98cd4/urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", size = 121444, upload-time = "2024-06-17T13:40:07.795Z" },
]
[[package]]
name = "wagtail"
version = "6.2.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "anyascii" },
{ name = "beautifulsoup4" },
{ name = "django" },
{ name = "django-filter" },
{ name = "django-modelcluster" },
{ name = "django-permissionedforms" },
{ name = "django-taggit" },
{ name = "django-treebeard" },
{ name = "djangorestframework" },
{ name = "draftjs-exporter" },
{ name = "l18n" },
{ name = "laces" },
{ name = "openpyxl" },
{ name = "pillow" },
{ name = "requests" },
{ name = "telepath" },
{ name = "willow", extra = ["heif"] },
]
sdist = { url = "https://files.pythonhosted.org/packages/6d/97/97b59c6bcd913f394e9f475dd952466954e9959ca9e10a45d4b251141eae/wagtail-6.2.1.tar.gz", hash = "sha256:0f136ef23b157997a44fa46543a320a31437350951cf13add8ea8b69cc5e8385", size = 6516190, upload-time = "2024-08-20T15:40:59.778Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/ca/b0/942f6bca14bfc2fbe786ebbaa90a831b71cbe3592e3da3f34d6be9f775b1/wagtail-6.2.1-py3-none-any.whl", hash = "sha256:31d073ea8acdc973ef45c5719977a1bb122ad0fc3f01348f37e922128200b42a", size = 8976424, upload-time = "2024-08-20T15:40:54.365Z" },
]
[[package]]
name = "wagtail-grapple"
version = "0.26.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "graphene-django" },
{ name = "wagtail" },
{ name = "wagtail-headless-preview" },
]
sdist = { url = "https://files.pythonhosted.org/packages/fc/36/2ad789a09d78b786eccf359ff88a596bcacfff4b9dd6505b68ad3c7f62f5/wagtail_grapple-0.26.0.tar.gz", hash = "sha256:68be091f7feb95bfbe0377bd03c1814a64a6150ae964ec593670d995f11780e5", size = 38362, upload-time = "2024-06-26T10:39:30.511Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/7a/81/189560b651d61d71c81841f56249dcea3ab441bfcb2adb5afe7b5e516085/wagtail_grapple-0.26.0-py3-none-any.whl", hash = "sha256:de9d3c336d151279976d67f781c758ac5efc7d2bb003c2e311e6fbeea1554c41", size = 47759, upload-time = "2024-06-26T10:39:28.849Z" },
]
[[package]]
name = "wagtail-headless-preview"
version = "0.8.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "wagtail" },
]
sdist = { url = "https://files.pythonhosted.org/packages/b4/28/87fda34fd89999bee03519a614ddca608def6d07b69d93365833c434b9c5/wagtail_headless_preview-0.8.0.tar.gz", hash = "sha256:581d8419cd1ef1f7de88235445e9695e5591d46259283d56bfe814e8620fa1d5", size = 13957, upload-time = "2024-02-23T15:53:44.986Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/62/57/bb6c10a11f7a0ec0d8e10ec99b4c7b5a6036e8846e61d145966b6c72113d/wagtail_headless_preview-0.8.0-py3-none-any.whl", hash = "sha256:91b305c36573490856e212f9e5645ada81f72ad37f1bb00e6feddc5537252358", size = 12301, upload-time = "2024-02-23T15:53:43.904Z" },
]
[[package]]
name = "whitenoise"
version = "6.7.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/64/b8/86451d63ef5e1a9c480b52759d9db25ba85c3420ebdaf039057ed152a4c1/whitenoise-6.7.0.tar.gz", hash = "sha256:58c7a6cd811e275a6c91af22e96e87da0b1109e9a53bb7464116ef4c963bf636", size = 24973, upload-time = "2024-06-19T16:20:09.11Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/b8/42/68400d8ad59f67a1f7e12c2f39089ce005f08f73333f3e215f3d5ed6453c/whitenoise-6.7.0-py3-none-any.whl", hash = "sha256:a1ae85e01fdc9815d12fa33f17765bc132ed2c54fa76daf9e39e879dd93566f6", size = 19905, upload-time = "2024-06-19T16:20:03.269Z" },
]
[[package]]
name = "willow"
version = "1.8.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "defusedxml" },
{ name = "filetype" },
]
sdist = { url = "https://files.pythonhosted.org/packages/77/c3/9d19db05d3abe0375e8d6bf2d3f7ea6f8df266d5ddabcc5a114c8a7cce1f/willow-1.8.0.tar.gz", hash = "sha256:ef3df6cde80d4914e719188147bef1d71c240edb118340e0c5957ecc8fe08315", size = 113313, upload-time = "2024-01-17T19:11:58.712Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/95/7a/a48cf90bbf226f793d830c3bbdb7f0c4aa8087c08ce84cc864a1c882a457/willow-1.8.0-py3-none-any.whl", hash = "sha256:48ccf5ce48ccd29c37a32497cd7af50983f8570543c4de2988b15d583efc66be", size = 119223, upload-time = "2024-01-17T19:11:56.316Z" },
]
[package.optional-dependencies]
heif = [
{ name = "pillow-heif" },
]

View File

@@ -11,10 +11,10 @@ from wagtail.admin.panels import FieldPanel, FieldRowPanel, MultiFieldPanel
from wagtail.fields import RichTextField, StreamField from wagtail.fields import RichTextField, StreamField
from wagtail.models import Page from wagtail.models import Page
from wagtail.search import index from wagtail.search import index
from wagtail_wordpress_import.models import WPImportedPageMixin
from dnscms.blocks import ImageSliderBlock from dnscms.blocks import ImageSliderBlock
from dnscms.fields import CommonStreamField from dnscms.fields import CommonStreamField
from dnscms.wordpress.models import WPImportedPageMixin
@register_singular_query_field("venueIndex") @register_singular_query_field("venueIndex")
@@ -178,8 +178,6 @@ class VenuePage(WPImportedPageMixin, Page):
index.SearchField("body"), index.SearchField("body"),
] ]
settings_panels = Page.settings_panels + WPImportedPageMixin.wordpress_panels
def import_wordpress_data(self, data): def import_wordpress_data(self, data):
import html import html

View File

@@ -1 +1,2 @@
GRAPHQL_ENDPOINT=https://cms.neuf.no/api/graphql/ GRAPHQL_ENDPOINT=https://cms.neuf.no/api/graphql/
URL=http://localhost:3000

View File

@@ -1 +0,0 @@
v20.12.2

View File

@@ -1,6 +1,6 @@
# Based on https://github.com/vercel/next.js/tree/canary/examples/with-docker # Based on https://github.com/vercel/next.js/tree/canary/examples/with-docker
FROM node:20-alpine AS base FROM node:22-alpine AS base
# Install dependencies only when needed # Install dependencies only when needed
FROM base AS deps FROM base AS deps

2
web/mise.toml Normal file
View File

@@ -0,0 +1,2 @@
[tools]
node = "22"

4883
web/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,31 +10,31 @@
"codegen": "graphql-codegen" "codegen": "graphql-codegen"
}, },
"dependencies": { "dependencies": {
"@graphql-codegen/cli": "^5.0.2", "@graphql-codegen/cli": "^5.0.7",
"@graphql-codegen/client-preset": "^4.3.3", "@graphql-codegen/client-preset": "^4.8.3",
"@parcel/watcher": "^2.4.1", "@parcel/watcher": "^2.5.1",
"@sindresorhus/slugify": "^2.2.1", "@sindresorhus/slugify": "^2.2.1",
"@urql/next": "^1.1.1", "@urql/next": "^1.1.5",
"date-fns": "^3.6.0", "date-fns": "^4.1.0",
"date-fns-tz": "^3.1.3", "date-fns-tz": "^3.2.0",
"graphql": "^16.9.0", "graphql": "^16.11.0",
"next": "^14.2.6", "next": "^15.4.6",
"nuqs": "^1.17.8", "nuqs": "^2.4.3",
"react": "^18", "react": "^19.1.1",
"react-dom": "^18", "react-dom": "^19.1.1",
"react-intersection-observer": "^9.13.0", "react-intersection-observer": "^9.16.0",
"sass": "^1.77.8", "sass": "^1.90.0",
"sharp": "^0.33.5", "sharp": "^0.34.3",
"swiper": "^11.1.10", "swiper": "^11.2.10",
"urql": "^4.1.0", "urql": "^4.2.2",
"use-debounce": "^10.0.3" "use-debounce": "^10.0.5"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^20", "@types/node": "^22",
"@types/react": "^18", "@types/react": "^19.1.9",
"@types/react-dom": "^18", "@types/react-dom": "^19.1.7",
"eslint": "^8", "eslint": "^9",
"eslint-config-next": "14.2.6", "eslint-config-next": "15.4.6",
"typescript": "^5" "typescript": "^5"
} }
} }

View File

@@ -0,0 +1,8 @@
<svg width="158" height="105" viewBox="0 0 158 105" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M49.9901 27.5451C57.3601 28.5551 75.6801 32.1951 90.0601 38.6451C108.03 46.7151 126.59 57.5851 131.55 61.5351C140.19 56.2951 123.4 45.6051 124.13 38.8351C130.1 36.7351 128.83 34.0851 127.45 33.0251C129.67 31.8951 134.84 31.0751 137.8 36.8651L142.6 33.9551C141.58 26.7751 135.23 10.7151 118.02 3.95509C96.5 -4.49491 49.3901 16.5151 49.9901 27.5351V27.5451Z" fill="#CA1620" stroke="#161516" stroke-width="3.6"/>
<path d="M48.6499 46.7353C65.8399 47.2153 102.37 61.8653 113.78 73.8353C125.19 85.8153 147.83 69.3853 127.3 57.7853C113.613 50.0519 101.007 43.5553 89.4799 38.2953C80.4999 34.6453 59.0799 27.3953 45.2699 27.5453C28.0099 27.7253 31.4599 46.2553 48.6499 46.7353Z" fill="white" stroke="#161516" stroke-width="3.6"/>
<path d="M145.25 54.525C150.883 54.525 155.45 49.9583 155.45 44.325C155.45 38.6917 150.883 34.125 145.25 34.125C139.617 34.125 135.05 38.6917 135.05 44.325C135.05 49.9583 139.617 54.525 145.25 54.525Z" fill="white" stroke="#161516" stroke-width="3.6"/>
<path d="M128.3 35.7052C127.2 32.3152 122.17 30.0452 119.8 29.3452M124.92 41.4952C123.03 38.5652 118.22 38.2852 116.06 38.5052" stroke="#161516" stroke-width="3.6"/>
<path d="M110.49 69.3657C111.07 68.7957 111.58 68.1657 111.96 67.4957C112.06 67.3257 112.12 67.1457 112.2 66.9757L112.32 66.7157C112.35 66.6257 112.37 66.5357 112.4 66.4457C112.45 66.2857 112.5 66.1257 112.54 65.9657C112.55 65.9257 112.56 65.8857 112.56 65.8457L112.63 65.3457C112.84 63.8457 112.43 62.0957 111.82 60.2557L110.85 57.5157C110.77 57.2857 110.69 57.0557 110.6 56.8357L110.31 56.1657L109.72 54.8257L109.15 53.5357C108.95 53.1057 108.72 52.6957 108.5 52.2757C108.06 51.4457 107.64 50.5957 107.17 49.7757L105.71 47.3357L105.35 46.7257L104.96 46.1257L104.17 44.9357C103.15 43.3257 101.99 41.7857 100.88 40.2257C99.7098 38.6957 98.5698 37.1457 97.3498 35.6357C95.8298 33.6857 94.2698 31.7557 92.7198 29.8057C90.2498 26.7257 87.7997 23.5757 85.4497 20.3557C83.0897 17.1357 80.8898 13.7557 78.8798 10.2657L78.1997 8.9857C78.1497 8.9057 78.1198 8.7757 77.9998 8.7857C77.8798 8.7957 77.8798 8.9357 77.8298 9.0157L77.3198 10.2257C77.0398 10.9057 76.7698 11.5957 76.5198 12.2757C75.5198 15.0157 74.8097 17.8057 74.6997 20.5657C74.6597 21.6257 74.7098 22.6757 74.8598 23.7357C75.0098 24.7957 75.2397 25.8757 75.5097 26.9757C76.0497 29.1757 76.7498 31.4557 77.1498 33.9257C77.2798 34.7057 77.3498 35.5257 77.3998 36.3357C77.4298 37.1557 77.3998 37.9557 77.3598 38.7457C77.2598 40.3157 77.0498 41.8257 76.9098 43.2757C76.7398 45.0757 76.6198 46.7957 76.7898 48.4257C76.9498 50.0257 77.4298 51.6057 78.1498 53.0757C79.6098 56.0157 82.0698 58.5057 85.0198 59.9857C85.3298 60.1557 85.6198 60.2857 85.8698 60.4757C86.1198 60.6657 86.3498 60.8257 86.5598 61.0257C86.7698 61.2157 86.9498 61.4357 87.1198 61.6457C87.2998 61.8457 87.4598 62.0757 87.5998 62.3057L104.52 72.0957C105.01 71.9657 105.52 71.8957 106.01 71.7457C107.68 71.3157 109.24 70.4657 110.46 69.3557L110.49 69.3657Z" fill="white"/>
<path d="M111.73 70.8955C111.54 71.0755 111.33 71.2255 111.14 71.3855C110.94 71.5455 110.75 71.7155 110.53 71.8455C110.11 72.1255 109.7 72.4255 109.27 72.6655C109.06 72.7955 108.85 72.9255 108.64 73.0555C108.43 73.1755 108.22 73.2855 108.01 73.4155C106.55 74.2755 105.05 74.5355 103.75 74.4155C102.74 74.3255 101.84 73.9755 101.09 73.4855C100.7 73.2355 100.56 72.7355 100.77 72.3255C101 71.8655 101.2 71.5655 101.48 71.3755C101.87 71.0855 102.42 71.0055 103.37 70.8155C103.84 70.6855 104.32 70.6255 104.79 70.4755C106.38 70.0655 107.86 69.2355 109.02 68.1655C109.58 67.6055 110.06 67.0055 110.42 66.3455C110.52 66.1855 110.57 66.0055 110.65 65.8455L110.77 65.5955C110.8 65.5055 110.82 65.4155 110.85 65.3355C110.89 65.1755 110.94 65.0255 110.99 64.8655C111 64.8255 111.01 64.7855 111.01 64.7455L111.08 64.2655C111.28 62.8155 110.89 61.1155 110.31 59.3355L109.39 56.6755C109.31 56.4555 109.24 56.2355 109.15 56.0155L108.87 55.3655L108.31 54.0755L107.77 52.8255C107.58 52.4155 107.36 52.0155 107.15 51.6055C106.73 50.7955 106.33 49.9755 105.89 49.1855L104.5 46.8155L104.15 46.2255L103.78 45.6455L103.03 44.4855C102.06 42.9355 100.95 41.4355 99.8998 39.9255C98.7898 38.4455 97.6998 36.9355 96.5398 35.4755C95.0898 33.5855 93.5998 31.7155 92.1298 29.8255C89.7798 26.8355 87.4498 23.7955 85.2098 20.6655C82.9598 17.5455 80.8698 14.2755 78.9598 10.8955L78.3098 9.65553C78.2598 9.58553 78.2398 9.44553 78.1198 9.46553C78.0098 9.47553 77.9998 9.61553 77.9598 9.68553L77.4798 10.8555C77.2098 11.5155 76.9498 12.1855 76.7198 12.8455C75.7698 15.5055 75.0898 18.2055 74.9798 20.8755C74.9498 21.9055 74.9898 22.9155 75.1298 23.9455C75.2698 24.9755 75.4898 26.0155 75.7498 27.0855C76.2598 29.2155 76.9298 31.4255 77.3098 33.8155C77.4298 34.5755 77.4998 35.3655 77.5498 36.1555C77.5798 36.9455 77.5498 37.7255 77.5198 38.4955C77.4198 40.0155 77.2298 41.4755 77.0998 42.8855C76.9398 44.6255 76.8198 46.2955 76.9798 47.8755C77.1298 49.4255 77.5898 50.9555 78.2798 52.3855C79.6698 55.2355 82.0098 57.6455 84.8198 59.0755C85.1198 59.2355 85.3898 59.3655 85.6298 59.5455C85.8698 59.7255 86.0898 59.8855 86.2898 60.0755C86.4898 60.2555 86.6598 60.4655 86.8298 60.6755C86.9998 60.8755 87.1498 61.0955 87.2898 61.3155C87.6598 61.9155 87.6898 62.4455 87.3598 62.8055C87.1998 62.9855 86.9398 63.1255 86.5998 63.1955C86.4298 63.2355 86.2398 63.2655 86.0198 63.2655C85.8098 63.2655 85.5898 63.2455 85.3398 63.1955C84.6298 63.0955 83.9098 62.7555 83.2398 62.4355C81.6098 61.5955 80.1798 60.4455 78.8798 59.2055L78.2398 58.5555L77.9398 58.2455C77.9398 58.2455 77.9098 58.2155 77.8998 58.2055L77.6198 57.8755L77.0498 57.1955C77.0498 57.1955 77.0198 57.1655 77.0098 57.1455L76.4798 56.4355L76.2298 56.0855C76.2298 56.0855 76.2098 56.0555 76.1998 56.0355L75.9698 55.6755L75.4998 54.9255C75.4998 54.9255 75.4798 54.8955 75.4698 54.8755L75.0498 54.0855L74.8498 53.7055L74.8198 53.6555L74.6498 53.2555L74.2998 52.4355C74.2998 52.4355 74.2798 52.3955 74.2798 52.3755L73.9898 51.5255L73.8498 51.1155C73.8498 51.1155 73.8398 51.0755 73.8298 51.0455L73.7198 50.6255L73.5098 49.7555C73.5098 49.7555 73.4998 49.7055 73.4998 49.6855L73.3598 48.7955L73.2898 48.3555C73.2898 48.3555 73.2898 48.3255 73.2898 48.3055L73.2498 47.8755C73.1898 47.2655 73.1798 46.6555 73.1798 46.0555C73.1798 45.2355 73.2298 44.4355 73.2898 43.6555L73.6398 39.9555C73.6598 39.7855 73.6698 39.6155 73.6798 39.4455C73.7598 38.4155 73.7998 37.4055 73.7598 36.4455C73.7198 35.4755 73.5898 34.4955 73.3998 33.4955C73.0298 31.4955 72.4398 29.4255 71.9598 27.2255C71.7298 26.1255 71.5198 24.9855 71.4098 23.8155C71.2898 22.6455 71.2798 21.4455 71.3598 20.2755C71.4998 17.9255 71.9898 15.6555 72.6298 13.4755C72.9598 12.3955 73.3198 11.3255 73.7198 10.2755C73.9198 9.75553 74.1198 9.23553 74.3398 8.72553L74.4998 8.34553L74.6398 8.01553L74.7998 7.64553L75.4598 6.17553C75.4898 6.08553 75.5398 6.04553 75.5898 5.99553L75.7298 5.84553L76.0098 5.54553L76.4898 5.03553C76.5398 4.98553 76.5898 4.93553 76.6598 4.89553C77.0098 4.67553 77.5198 4.52553 78.0398 4.51553C78.6098 4.50553 79.1498 4.68553 79.4998 4.89553C79.8798 5.12553 80.3298 5.48553 80.6598 6.13553L82.3498 9.36553L83.6598 11.5755L84.3098 12.6755L85.0098 13.7555L86.4198 15.9155C88.3898 18.7555 90.4298 21.5555 92.5898 24.3055C95.6298 28.2355 98.7398 32.1755 101.77 36.2155C105.28 40.9255 108.65 45.8655 111.23 51.2855L112.14 53.3455C112.44 54.0355 112.76 54.7155 113 55.4355L113.76 57.5655C113.97 58.1455 114.17 58.7455 114.34 59.3655C114.34 59.3655 115.39 62.5355 114.86 65.0055C114.33 67.4755 113.86 68.3655 112.82 69.6955C112.52 70.1255 112.13 70.4655 111.76 70.8355L111.73 70.8955Z" fill="#161516"/>
</svg>

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

@@ -0,0 +1,8 @@
<svg width="571" height="280" viewBox="0 0 571 280" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.8602 3.0299C65.3602 8.2299 58.0202 24.1699 56.4102 31.4999L60.5602 35.0099C63.8302 29.3299 68.5202 30.7199 70.4602 32.1199C69.0902 33.0699 67.6702 35.6699 72.9802 38.4699C73.0202 45.5499 56.5502 54.8499 64.0302 61.1699C68.9702 57.5999 87.0902 48.2899 104.41 41.8099C118.26 36.6299 135.5 34.7799 142.38 34.4999C143.96 23.1699 102.48 -3.47009 81.8502 3.01991L81.8602 3.0299Z" fill="#CA1620" stroke="#161516" stroke-width="3.6"/>
<path d="M146.75 34.9999C134.03 33.4099 113.61 38.6799 104.99 41.5199C93.8701 45.7599 81.6434 51.1666 68.3101 57.7399C48.3101 67.5999 67.6501 86.9599 79.2901 75.7599C90.9201 64.5599 125.96 53.2199 141.86 54.5099C157.75 55.7999 162.65 36.9899 146.76 35.0099L146.75 34.9999Z" fill="white" stroke="#161516" stroke-width="3.6"/>
<path d="M51.47 50.4601C57.1033 50.4601 61.67 45.8934 61.67 40.2601C61.67 34.6268 57.1033 30.0601 51.47 30.0601C45.8367 30.0601 41.27 34.6268 41.27 40.2601C41.27 45.8934 45.8367 50.4601 51.47 50.4601Z" fill="white" stroke="#161516" stroke-width="3.6"/>
<path d="M77.8699 29.1001C75.6199 29.5801 70.7799 31.4001 69.4399 34.8001M80.4599 38.9601C78.4799 38.5001 74.0299 38.2901 72.0099 41.1301" stroke="#161516" stroke-width="3.6"/>
<path d="M86.3501 74.66C86.8201 74.8 87.3001 74.87 87.7601 74.99L103.79 65.71C103.93 65.49 104.08 65.28 104.25 65.08C104.41 64.87 104.59 64.67 104.78 64.49C104.98 64.31 105.2 64.15 105.43 63.97C105.67 63.79 105.94 63.67 106.24 63.51C109.04 62.11 111.37 59.75 112.75 56.97C113.44 55.58 113.89 54.08 114.04 52.56C114.2 51.02 114.09 49.38 113.92 47.68C113.79 46.3 113.59 44.88 113.5 43.39C113.46 42.64 113.44 41.88 113.47 41.1C113.51 40.33 113.58 39.56 113.71 38.82C114.09 36.48 114.75 34.31 115.26 32.23C115.52 31.19 115.73 30.17 115.87 29.16C116.01 28.16 116.06 27.16 116.02 26.16C115.92 23.54 115.24 20.9 114.29 18.3C114.06 17.65 113.8 17 113.53 16.35L113.05 15.2C113.01 15.13 113 14.99 112.89 14.98C112.78 14.97 112.75 15.1 112.7 15.17L112.05 16.38C110.14 19.69 108.06 22.89 105.82 25.94C103.59 28.99 101.26 31.97 98.9301 34.89C97.4601 36.74 95.9801 38.57 94.5401 40.42C93.3901 41.85 92.3101 43.32 91.2001 44.77C90.1501 46.25 89.0501 47.71 88.0801 49.23L87.3301 50.36L86.9601 50.93L86.6101 51.51L85.2301 53.82C84.7901 54.6 84.3901 55.4 83.9701 56.19C83.7701 56.59 83.5501 56.98 83.3601 57.38L82.8201 58.6L82.2601 59.87L81.9801 60.5C81.8901 60.71 81.8201 60.93 81.7401 61.15L80.8201 63.75C80.2501 65.49 79.8501 67.15 80.0601 68.57L80.1301 69.04C80.1301 69.04 80.1401 69.12 80.1501 69.15C80.1901 69.3 80.2401 69.45 80.2901 69.61C80.3201 69.7 80.3401 69.79 80.3701 69.87L80.4901 70.12C80.5701 70.28 80.6201 70.46 80.7201 70.61C81.0801 71.25 81.5601 71.84 82.1101 72.39C83.2701 73.43 84.7401 74.25 86.3201 74.65L86.3501 74.66Z" fill="white"/>
<path d="M79.96 72.7799C78.97 71.5199 78.52 70.6699 78.02 68.3399C77.52 65.9999 78.51 62.9899 78.51 62.9899C78.68 62.3999 78.86 61.8399 79.06 61.2799L79.78 59.2599C80 58.5799 80.3 57.9299 80.59 57.2799L81.45 55.3199C83.9 50.1799 87.08 45.4999 90.41 41.0399C93.28 37.2099 96.23 33.4799 99.11 29.7499C101.15 27.1399 103.09 24.4899 104.96 21.7999L106.3 19.7499L106.97 18.7299L107.59 17.6799L108.83 15.5799L110.43 12.5199C110.74 11.9099 111.17 11.5599 111.53 11.3399C111.86 11.1399 112.38 10.9699 112.91 10.9799C113.41 10.9799 113.88 11.1299 114.22 11.3399C114.28 11.3799 114.33 11.4199 114.38 11.4799L114.83 11.9699L115.09 12.2499L115.22 12.3899C115.22 12.3899 115.31 12.4699 115.34 12.5599L115.96 13.9499L116.11 14.2999L116.25 14.6199L116.4 14.9799C116.6 15.4599 116.8 15.9599 116.99 16.4499C117.37 17.4399 117.72 18.4499 118.03 19.4799C118.64 21.5399 119.1 23.6899 119.24 25.9199C119.31 27.0299 119.3 28.1599 119.19 29.2699C119.08 30.3799 118.89 31.4499 118.67 32.4999C118.22 34.5799 117.66 36.5399 117.31 38.4399C117.13 39.3899 117.01 40.3199 116.97 41.2399C116.93 42.1599 116.97 43.1099 117.04 44.0899C117.05 44.2499 117.07 44.4099 117.08 44.5699L117.41 48.0699C117.47 48.8099 117.51 49.5699 117.51 50.3399C117.51 50.9099 117.5 51.4799 117.44 52.0599L117.4 52.4699V52.5199L117.34 52.9299L117.21 53.7699C117.21 53.7699 117.2 53.8199 117.2 53.8399L117 54.6599L116.9 55.0599C116.9 55.0599 116.89 55.0999 116.88 55.1199L116.75 55.5099L116.48 56.3099C116.48 56.3099 116.47 56.3499 116.46 56.3699L116.13 57.1499L115.97 57.5299L115.94 57.5799L115.75 57.9399L115.36 58.6799L115.33 58.7299L114.88 59.4399L114.66 59.7799L114.63 59.8299L114.39 60.1599L113.89 60.8399L113.85 60.8799L113.31 61.5199L113.04 61.8299L113 61.8699L112.72 62.1599L112.11 62.7799C110.87 63.9599 109.52 65.0399 107.97 65.8399C107.33 66.1499 106.65 66.4699 105.98 66.5599C105.75 66.5999 105.54 66.6199 105.34 66.6199C105.14 66.6199 104.96 66.5899 104.79 66.5499C104.47 66.4799 104.22 66.3499 104.07 66.1799C103.76 65.8399 103.79 65.3299 104.14 64.7699C104.27 64.5599 104.42 64.3499 104.58 64.1599C104.74 63.9599 104.9 63.7599 105.09 63.5899C105.28 63.4099 105.49 63.2599 105.71 63.0899C105.93 62.9199 106.2 62.7999 106.48 62.6399C109.14 61.2799 111.37 58.9999 112.68 56.2999C113.33 54.9499 113.77 53.4999 113.91 52.0299C114.06 50.5299 113.95 48.9499 113.8 47.2999C113.68 45.9699 113.49 44.5899 113.4 43.1399C113.36 42.4099 113.34 41.6799 113.37 40.9199C113.41 40.1699 113.48 39.4299 113.59 38.7099C113.95 36.4399 114.58 34.3399 115.07 32.3299C115.31 31.3199 115.52 30.3299 115.65 29.3599C115.78 28.3899 115.83 27.4299 115.79 26.4499C115.69 23.9099 115.05 21.3499 114.14 18.8399C113.92 18.2099 113.67 17.5799 113.42 16.9499L112.96 15.8399C112.92 15.7699 112.91 15.6399 112.81 15.6299C112.7 15.6199 112.68 15.7399 112.63 15.8099L112.01 16.9799C110.19 20.1899 108.22 23.2899 106.08 26.2399C103.96 29.1999 101.74 32.0899 99.52 34.9199C98.12 36.7099 96.71 38.4899 95.34 40.2799C94.24 41.6699 93.21 43.0899 92.16 44.4999C91.16 45.9299 90.12 47.3499 89.19 48.8199L88.48 49.9199L88.13 50.4699L87.8 51.0299L86.48 53.2699C86.06 54.0199 85.68 54.7999 85.28 55.5599C85.09 55.9399 84.88 56.3199 84.7 56.7099L84.19 57.8899L83.66 59.1199L83.39 59.7299C83.31 59.9399 83.24 60.1499 83.16 60.3599L82.29 62.8799C81.74 64.5699 81.37 66.1799 81.56 67.5599L81.63 68.0199C81.63 68.0199 81.64 68.0899 81.65 68.1299C81.69 68.2799 81.74 68.4199 81.78 68.5699C81.81 68.6499 81.82 68.7399 81.85 68.8199L81.96 69.0599C82.03 69.2199 82.09 69.3799 82.18 69.5399C82.52 70.1599 82.98 70.7299 83.5 71.2599C84.6 72.2699 86 73.0599 87.51 73.4499C87.95 73.5899 88.41 73.6499 88.86 73.7699C89.76 73.9499 90.28 74.0199 90.65 74.2999C90.92 74.4799 91.1 74.7599 91.33 75.1999C91.53 75.5899 91.39 76.0599 91.02 76.2999C90.3 76.7599 89.45 77.0899 88.5 77.1799C87.26 77.2899 85.84 77.0399 84.46 76.2299C84.26 76.1099 84.06 75.9999 83.86 75.8899C83.66 75.7699 83.47 75.6399 83.27 75.5199C82.86 75.2899 82.48 75.0099 82.08 74.7499C81.88 74.6299 81.7 74.4599 81.5 74.3099C81.32 74.1599 81.12 74.0099 80.94 73.8399C80.59 73.4899 80.22 73.1699 79.94 72.7599L79.96 72.7799Z" fill="#161516"/>
</svg>

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@@ -71,11 +71,13 @@ export async function generateStaticParams() {
}); });
} }
type Params = Promise<{ url: string[] }>;
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Params },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { url } = params; const { url } = await params;
const urlPath = getWagtailUrlPath(url); const urlPath = getWagtailUrlPath(url);
const { data, error } = await getClient().query(genericPageByUrlPathQuery, { const { data, error } = await getClient().query(genericPageByUrlPathQuery, {
urlPath: urlPath, urlPath: urlPath,
@@ -93,8 +95,8 @@ export async function generateMetadata(
return metadata; return metadata;
} }
export default async function Page({ params }: { params: { url: string[] } }) { export default async function Page({ params }: { params: Params }) {
const { url } = params; const { url } = await params;
const urlPath = getWagtailUrlPath(url); const urlPath = getWagtailUrlPath(url);
const { data, error } = await getClient().query(genericPageByUrlPathQuery, { const { data, error } = await getClient().query(genericPageByUrlPathQuery, {
urlPath: urlPath, urlPath: urlPath,

View File

@@ -44,12 +44,15 @@ export async function generateStaticParams() {
})); }));
} }
type Params = Promise<{ slug: string }>;
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { slug: string } }, { params }: { params: Params },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(newsBySlugQuery, { const { data, error } = await getClient().query(newsBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {
throw new Error(error.message); throw new Error(error.message);
@@ -62,9 +65,10 @@ export async function generateMetadata(
return metadata; return metadata;
} }
export default async function Page({ params }: { params: { slug: string } }) { export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(newsBySlugQuery, { const { data, error } = await getClient().query(newsBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {

View File

@@ -6,7 +6,7 @@ import { newsQuery, NewsFragment, NewsIndexFragment } from "@/lib/news";
import { getSeoMetadata } from "@/lib/seo"; import { getSeoMetadata } from "@/lib/seo";
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(newsQuery, {}); const { data, error } = await getClient().query(newsQuery, {});

View File

@@ -0,0 +1,91 @@
import { NextRequest, NextResponse } from "next/server";
import { getClient } from "@/app/client";
import {
eventsOverviewQuery,
getSingularEvents,
getFutureOccurrences,
EventFragment,
EventCategory,
EventOrganizer,
} from "@/lib/event";
import { VenueFragment } from "@/gql/graphql";
type CompactEvent = {
id: string;
slug: string;
title: string;
subtitle: string;
nextOccurrence: {
id: string;
start: string;
end?: string;
venue: {
id: string;
slug: string;
title: string;
preposition: string;
url: string;
};
};
};
type ResponseData = {
events: CompactEvent[];
total: number;
};
export async function GET(req: NextRequest) {
const searchParams = req.nextUrl.searchParams;
const view = searchParams.get("view");
if (view !== "compact-app") {
return NextResponse.json(
{ error: "must provide valid view parameter" },
{ status: 400 }
);
}
const { data, error } = await getClient().query(eventsOverviewQuery, {});
if (error) {
throw new Error(error.message);
}
if (
!data?.index ||
!data?.events?.futureEvents ||
!data?.eventCategories ||
!data?.eventOrganizers ||
!data?.venues
) {
throw new Error("Failed to fetch events");
}
const futureEvents = (data?.events?.futureEvents ?? []) as EventFragment[];
const eventCategories = (data?.eventCategories ?? []) as EventCategory[];
const eventOrganizers = (data?.eventOrganizers ?? []) as EventOrganizer[];
const venues = (data?.venues ?? []) as VenueFragment[];
const keepKeys = ["id", "slug", "title", "subtitle", "occurrence"];
const compactEvents = futureEvents.map((event) => {
const futureOccurrences = getFutureOccurrences(event);
const nextOccurrence = futureOccurrences.length
? futureOccurrences[0]
: null;
return {
id: event.id,
slug: event.slug,
title: event.title,
subtitle: event.subtitle,
nextOccurrence: nextOccurrence,
url: `${process.env.URL}/arrangementer/${event.slug}`,
futureOccurrencesCount: futureOccurrences.length,
} as CompactEvent;
});
const responseData: ResponseData = {
events: compactEvents,
total: compactEvents.length,
};
return NextResponse.json(responseData, { status: 200 });
}

View File

@@ -45,12 +45,15 @@ export async function generateStaticParams() {
})); }));
} }
type Params = Promise<{ slug: string }>;
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { slug: string } }, { params }: { params: Params },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(eventBySlugQuery, { const { data, error } = await getClient().query(eventBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {
@@ -65,9 +68,10 @@ export async function generateMetadata(
return metadata; return metadata;
} }
export default async function Page({ params }: { params: { slug: string } }) { export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(eventBySlugQuery, { const { data, error } = await getClient().query(eventBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {

View File

@@ -14,7 +14,7 @@ import { EventIndexFragment, VenueFragment } from "@/gql/graphql";
import { getSeoMetadata } from "@/lib/seo"; import { getSeoMetadata } from "@/lib/seo";
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(eventIndexMetadataQuery, {}); const { data, error } = await getClient().query(eventIndexMetadataQuery, {});

View File

@@ -20,12 +20,15 @@ const associationBySlugQuery = graphql(`
} }
`); `);
type Params = Promise<{ slug: string }>;
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { slug: string } }, { params }: { params: Params },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(associationBySlugQuery, { const { data, error } = await getClient().query(associationBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {
@@ -65,9 +68,10 @@ export async function generateStaticParams() {
})); }));
} }
export default async function Page({ params }: { params: { slug: string } }) { export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(associationBySlugQuery, { const { data, error } = await getClient().query(associationBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {

View File

@@ -26,7 +26,7 @@ const allAssociationsQuery = graphql(`
`); `);
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(allAssociationsQuery, {}); const { data, error } = await getClient().query(allAssociationsQuery, {});

View File

@@ -33,7 +33,7 @@ const ContactIndexDefinition = graphql(`
`); `);
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(contactQuery, {}); const { data, error } = await getClient().query(contactQuery, {});

View File

@@ -2,6 +2,7 @@ import "@/css/main.scss";
import { Header } from "@/components/layout/Header"; import { Header } from "@/components/layout/Header";
import { Footer } from "@/components/layout/Footer"; import { Footer } from "@/components/layout/Footer";
import { Metadata } from "next"; import { Metadata } from "next";
import { NuqsAdapter } from "nuqs/adapters/next/app";
const baseUrlMetadata = process.env.URL const baseUrlMetadata = process.env.URL
? { metadataBase: new URL(process.env.URL) } ? { metadataBase: new URL(process.env.URL) }
@@ -43,9 +44,11 @@ export default function RootLayout({
)} )}
</head> </head>
<body> <body>
<Header /> <NuqsAdapter>
{children} <Header />
<Footer /> {children}
<Footer />
</NuqsAdapter>
</body> </body>
</html> </html>
); );

View File

@@ -20,12 +20,15 @@ const venueBySlugQuery = graphql(`
} }
`); `);
type Params = Promise<{ slug: string }>;
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { slug: string } }, { params }: { params: Params },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(venueBySlugQuery, { const { data, error } = await getClient().query(venueBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {
@@ -65,9 +68,10 @@ export async function generateStaticParams() {
})); }));
} }
export default async function Page({ params }: { params: { slug: string } }) { export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(venueBySlugQuery, { const { data, error } = await getClient().query(venueBySlugQuery, {
slug: params.slug, slug,
}); });
if (error) { if (error) {

View File

@@ -70,7 +70,7 @@ const VenueFragmentDefinition = graphql(`
`); `);
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(venueIndexQuery, {}); const { data, error } = await getClient().query(venueIndexQuery, {});

View File

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

View File

@@ -8,11 +8,11 @@ import { Suspense } from "react";
export default async function Page({ export default async function Page({
searchParams, searchParams,
}: { }: {
searchParams?: { searchParams?: Promise<{
q?: string; q?: string;
}; }>;
}) { }) {
const { q: query } = searchParams ?? {}; const { q: query } = (await searchParams) ?? {};
let results = []; let results = [];
if (query) { if (query) {

View File

@@ -0,0 +1,82 @@
import { Metadata, ResolvingMetadata } from "next";
import { graphql } from "@/gql";
import { SponsorsPage, SponsorBlock } from "@/gql/graphql";
import { getClient } from "@/app/client";
import { PageHeader } from "@/components/general/PageHeader";
import { PageContent } from "@/components/general/PageContent";
import { getSeoMetadata } from "@/lib/seo";
import { SponsorList } from "@/components/sponsor/SponsorList";
const sponsorsPageQuery = graphql(`
query sponsors {
page: sponsorsPage {
... on SponsorsPage {
...SponsorsPage
}
}
}
`);
export async function generateMetadata(
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(sponsorsPageQuery, {});
if (error) {
throw new Error(error.message);
}
if (!data?.page) {
return null;
}
const index = data.page as SponsorsPage;
const metadata = await getSeoMetadata(index, parent);
return metadata;
}
const SponsorsPageFragmentDefinition = graphql(`
fragment SponsorsPage on SponsorsPage {
... on SponsorsPage {
title
seoTitle
searchDescription
lead
body {
...Blocks
}
sponsors {
... on SponsorBlock {
id
name
logo {
...Image
}
text
website
}
}
}
}
`);
export default async function Page() {
const { data, error } = await getClient().query(sponsorsPageQuery, {});
if (error) {
throw new Error(error.message);
}
if (!data?.page) {
throw new Error("Failed to render /sponsorer");
}
const page = data.page as SponsorsPage;
return (
<main className="site-main" id="main">
<PageHeader heading={page.title} lead={page.lead} />
{page.body && <PageContent blocks={page.body} />}
<SponsorList sponsors={page.sponsors as SponsorBlock[]} />
</main>
);
}

View File

@@ -38,7 +38,7 @@ const VenueRentalIndexDefinition = graphql(`
`); `);
export async function generateMetadata( export async function generateMetadata(
{ params }: { params: { url: string[] } }, { params }: { params: Promise<{}> },
parent: ResolvingMetadata parent: ResolvingMetadata
): Promise<Metadata | null> { ): Promise<Metadata | null> {
const { data, error } = await getClient().query(venueRentalIndexQuery, {}); const { data, error } = await getClient().query(venueRentalIndexQuery, {});

View File

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

View File

@@ -1,19 +1,24 @@
import { useId, useState } from "react";
import { FactBoxBlock as FactBoxBlockType } from "@/gql/graphql"; import { FactBoxBlock as FactBoxBlockType } from "@/gql/graphql";
import styles from "./factBoxBlock.module.scss"; import styles from "./factBoxBlock.module.scss";
import { Blocks } from "./Blocks";
type FactBoxBlockTypeWithAlias = FactBoxBlockType & { type FactBoxBlockTypeWithAlias = FactBoxBlockType & {
factBoxBody?: string factBoxBody?: string;
} };
export const FactBoxBlock = ({ block }: { block: FactBoxBlockTypeWithAlias }) => { export const FactBoxBlock = ({
block,
}: {
block: FactBoxBlockTypeWithAlias;
}) => {
if (!block.factBoxBody) { if (!block.factBoxBody) {
return <></>; return <></>;
} }
return ( return (
<section className={styles.factBoxWrapper}> <section className={styles.factBoxWrapper}>
<div className={styles.factBox} data-background-color={block.backgroundColor ?? ""}> <div
className={styles.factBox}
data-background-color={block.backgroundColor ?? ""}
>
<div <div
className={styles.factBoxContent} className={styles.factBoxContent}
dangerouslySetInnerHTML={{ __html: block.factBoxBody }} dangerouslySetInnerHTML={{ __html: block.factBoxBody }}

View File

@@ -31,13 +31,16 @@ const DateListItem = ({ occurrence }: { occurrence: EventOccurrence }) => {
{wholeCastle && <span className={styles.venue}> Chateau Neuf</span>} {wholeCastle && <span className={styles.venue}> Chateau Neuf</span>}
{!wholeCastle && ( {!wholeCastle && (
<span className={styles.venue}> <span className={styles.venue}>
{occurrence.venue?.preposition + " " ?? ""} {occurrence.venue && occurrence.venue?.preposition + " "}
{occurrence.venue?.url && ( {occurrence.venue && occurrence.venue?.url && (
<Link href={occurrence.venue?.url}> <Link href={occurrence.venue?.url}>
{occurrence.venue?.title} {occurrence.venue?.title}
</Link> </Link>
)} )}
{!occurrence.venue?.url && <>{occurrence.venue?.title}</>} {occurrence.venue && !occurrence.venue?.url && (
<>{occurrence.venue?.title}</>
)}
{!occurrence.venue && (occurrence.venueCustom || "?")}
</span> </span>
)} )}
</div> </div>
@@ -59,7 +62,9 @@ export const DateList = ({ event }: { event: EventFragment }) => {
let visibleOccurrences = []; let visibleOccurrences = [];
if (oneOff || showAllDates || event.occurrences.length <= 4) { if (oneOff || showAllDates || event.occurrences.length <= 4) {
visibleOccurrences = event.occurrences; visibleOccurrences = event.occurrences.sort((a, b) =>
compareDates(a.start, b.start)
);
} else { } else {
visibleOccurrences = futureOccurrences.slice(0, 4); visibleOccurrences = futureOccurrences.slice(0, 4);
} }

View File

@@ -157,6 +157,7 @@
.dates, .dates,
.details { .details {
font-family: var(--font-serif); 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"/> <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> </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> </div>
); );
} }

View File

@@ -2,7 +2,7 @@
import styles from "./logo.module.scss"; import styles from "./logo.module.scss";
import { usePathname } from "next/navigation"; import { usePathname } from "next/navigation";
export const Logo = () => { export const Logo = ({ christmas }: { christmas: boolean }) => {
// Check if the current page is the index page // Check if the current page is the index page
const isIndexPage = usePathname() === "/"; const isIndexPage = usePathname() === "/";
@@ -88,6 +88,16 @@ export const Logo = () => {
fill="currentColor" fill="currentColor"
/> />
</svg> </svg>
{christmas && (
<svg className={styles.christmas} viewBox="0 0 571 280" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M81.8602 3.0299C65.3602 8.2299 58.0202 24.1699 56.4102 31.4999L60.5602 35.0099C63.8302 29.3299 68.5202 30.7199 70.4602 32.1199C69.0902 33.0699 67.6702 35.6699 72.9802 38.4699C73.0202 45.5499 56.5502 54.8499 64.0302 61.1699C68.9702 57.5999 87.0902 48.2899 104.41 41.8099C118.26 36.6299 135.5 34.7799 142.38 34.4999C143.96 23.1699 102.48 -3.47009 81.8502 3.01991L81.8602 3.0299Z" fill="#CA1620" stroke="currentColor" strokeWidth="3.6"/>
<path d="M146.75 34.9999C134.03 33.4099 113.61 38.6799 104.99 41.5199C93.8701 45.7599 81.6434 51.1666 68.3101 57.7399C48.3101 67.5999 67.6501 86.9599 79.2901 75.7599C90.9201 64.5599 125.96 53.2199 141.86 54.5099C157.75 55.7999 162.65 36.9899 146.76 35.0099L146.75 34.9999Z" fill="white" stroke="currentColor" strokeWidth="3.6"/>
<path d="M51.47 50.4601C57.1033 50.4601 61.67 45.8934 61.67 40.2601C61.67 34.6268 57.1033 30.0601 51.47 30.0601C45.8367 30.0601 41.27 34.6268 41.27 40.2601C41.27 45.8934 45.8367 50.4601 51.47 50.4601Z" fill="white" stroke="currentColor" strokeWidth="3.6"/>
<path d="M77.8699 29.1001C75.6199 29.5801 70.7799 31.4001 69.4399 34.8001M80.4599 38.9601C78.4799 38.5001 74.0299 38.2901 72.0099 41.1301" stroke="currentColor" strokeWidth="3.6"/>
<path d="M86.3501 74.66C86.8201 74.8 87.3001 74.87 87.7601 74.99L103.79 65.71C103.93 65.49 104.08 65.28 104.25 65.08C104.41 64.87 104.59 64.67 104.78 64.49C104.98 64.31 105.2 64.15 105.43 63.97C105.67 63.79 105.94 63.67 106.24 63.51C109.04 62.11 111.37 59.75 112.75 56.97C113.44 55.58 113.89 54.08 114.04 52.56C114.2 51.02 114.09 49.38 113.92 47.68C113.79 46.3 113.59 44.88 113.5 43.39C113.46 42.64 113.44 41.88 113.47 41.1C113.51 40.33 113.58 39.56 113.71 38.82C114.09 36.48 114.75 34.31 115.26 32.23C115.52 31.19 115.73 30.17 115.87 29.16C116.01 28.16 116.06 27.16 116.02 26.16C115.92 23.54 115.24 20.9 114.29 18.3C114.06 17.65 113.8 17 113.53 16.35L113.05 15.2C113.01 15.13 113 14.99 112.89 14.98C112.78 14.97 112.75 15.1 112.7 15.17L112.05 16.38C110.14 19.69 108.06 22.89 105.82 25.94C103.59 28.99 101.26 31.97 98.9301 34.89C97.4601 36.74 95.9801 38.57 94.5401 40.42C93.3901 41.85 92.3101 43.32 91.2001 44.77C90.1501 46.25 89.0501 47.71 88.0801 49.23L87.3301 50.36L86.9601 50.93L86.6101 51.51L85.2301 53.82C84.7901 54.6 84.3901 55.4 83.9701 56.19C83.7701 56.59 83.5501 56.98 83.3601 57.38L82.8201 58.6L82.2601 59.87L81.9801 60.5C81.8901 60.71 81.8201 60.93 81.7401 61.15L80.8201 63.75C80.2501 65.49 79.8501 67.15 80.0601 68.57L80.1301 69.04C80.1301 69.04 80.1401 69.12 80.1501 69.15C80.1901 69.3 80.2401 69.45 80.2901 69.61C80.3201 69.7 80.3401 69.79 80.3701 69.87L80.4901 70.12C80.5701 70.28 80.6201 70.46 80.7201 70.61C81.0801 71.25 81.5601 71.84 82.1101 72.39C83.2701 73.43 84.7401 74.25 86.3201 74.65L86.3501 74.66Z" fill="var(--color-background)"/>
<path d="M79.96 72.7799C78.97 71.5199 78.52 70.6699 78.02 68.3399C77.52 65.9999 78.51 62.9899 78.51 62.9899C78.68 62.3999 78.86 61.8399 79.06 61.2799L79.78 59.2599C80 58.5799 80.3 57.9299 80.59 57.2799L81.45 55.3199C83.9 50.1799 87.08 45.4999 90.41 41.0399C93.28 37.2099 96.23 33.4799 99.11 29.7499C101.15 27.1399 103.09 24.4899 104.96 21.7999L106.3 19.7499L106.97 18.7299L107.59 17.6799L108.83 15.5799L110.43 12.5199C110.74 11.9099 111.17 11.5599 111.53 11.3399C111.86 11.1399 112.38 10.9699 112.91 10.9799C113.41 10.9799 113.88 11.1299 114.22 11.3399C114.28 11.3799 114.33 11.4199 114.38 11.4799L114.83 11.9699L115.09 12.2499L115.22 12.3899C115.22 12.3899 115.31 12.4699 115.34 12.5599L115.96 13.9499L116.11 14.2999L116.25 14.6199L116.4 14.9799C116.6 15.4599 116.8 15.9599 116.99 16.4499C117.37 17.4399 117.72 18.4499 118.03 19.4799C118.64 21.5399 119.1 23.6899 119.24 25.9199C119.31 27.0299 119.3 28.1599 119.19 29.2699C119.08 30.3799 118.89 31.4499 118.67 32.4999C118.22 34.5799 117.66 36.5399 117.31 38.4399C117.13 39.3899 117.01 40.3199 116.97 41.2399C116.93 42.1599 116.97 43.1099 117.04 44.0899C117.05 44.2499 117.07 44.4099 117.08 44.5699L117.41 48.0699C117.47 48.8099 117.51 49.5699 117.51 50.3399C117.51 50.9099 117.5 51.4799 117.44 52.0599L117.4 52.4699V52.5199L117.34 52.9299L117.21 53.7699C117.21 53.7699 117.2 53.8199 117.2 53.8399L117 54.6599L116.9 55.0599C116.9 55.0599 116.89 55.0999 116.88 55.1199L116.75 55.5099L116.48 56.3099C116.48 56.3099 116.47 56.3499 116.46 56.3699L116.13 57.1499L115.97 57.5299L115.94 57.5799L115.75 57.9399L115.36 58.6799L115.33 58.7299L114.88 59.4399L114.66 59.7799L114.63 59.8299L114.39 60.1599L113.89 60.8399L113.85 60.8799L113.31 61.5199L113.04 61.8299L113 61.8699L112.72 62.1599L112.11 62.7799C110.87 63.9599 109.52 65.0399 107.97 65.8399C107.33 66.1499 106.65 66.4699 105.98 66.5599C105.75 66.5999 105.54 66.6199 105.34 66.6199C105.14 66.6199 104.96 66.5899 104.79 66.5499C104.47 66.4799 104.22 66.3499 104.07 66.1799C103.76 65.8399 103.79 65.3299 104.14 64.7699C104.27 64.5599 104.42 64.3499 104.58 64.1599C104.74 63.9599 104.9 63.7599 105.09 63.5899C105.28 63.4099 105.49 63.2599 105.71 63.0899C105.93 62.9199 106.2 62.7999 106.48 62.6399C109.14 61.2799 111.37 58.9999 112.68 56.2999C113.33 54.9499 113.77 53.4999 113.91 52.0299C114.06 50.5299 113.95 48.9499 113.8 47.2999C113.68 45.9699 113.49 44.5899 113.4 43.1399C113.36 42.4099 113.34 41.6799 113.37 40.9199C113.41 40.1699 113.48 39.4299 113.59 38.7099C113.95 36.4399 114.58 34.3399 115.07 32.3299C115.31 31.3199 115.52 30.3299 115.65 29.3599C115.78 28.3899 115.83 27.4299 115.79 26.4499C115.69 23.9099 115.05 21.3499 114.14 18.8399C113.92 18.2099 113.67 17.5799 113.42 16.9499L112.96 15.8399C112.92 15.7699 112.91 15.6399 112.81 15.6299C112.7 15.6199 112.68 15.7399 112.63 15.8099L112.01 16.9799C110.19 20.1899 108.22 23.2899 106.08 26.2399C103.96 29.1999 101.74 32.0899 99.52 34.9199C98.12 36.7099 96.71 38.4899 95.34 40.2799C94.24 41.6699 93.21 43.0899 92.16 44.4999C91.16 45.9299 90.12 47.3499 89.19 48.8199L88.48 49.9199L88.13 50.4699L87.8 51.0299L86.48 53.2699C86.06 54.0199 85.68 54.7999 85.28 55.5599C85.09 55.9399 84.88 56.3199 84.7 56.7099L84.19 57.8899L83.66 59.1199L83.39 59.7299C83.31 59.9399 83.24 60.1499 83.16 60.3599L82.29 62.8799C81.74 64.5699 81.37 66.1799 81.56 67.5599L81.63 68.0199C81.63 68.0199 81.64 68.0899 81.65 68.1299C81.69 68.2799 81.74 68.4199 81.78 68.5699C81.81 68.6499 81.82 68.7399 81.85 68.8199L81.96 69.0599C82.03 69.2199 82.09 69.3799 82.18 69.5399C82.52 70.1599 82.98 70.7299 83.5 71.2599C84.6 72.2699 86 73.0599 87.51 73.4499C87.95 73.5899 88.41 73.6499 88.86 73.7699C89.76 73.9499 90.28 74.0199 90.65 74.2999C90.92 74.4799 91.1 74.7599 91.33 75.1999C91.53 75.5899 91.39 76.0599 91.02 76.2999C90.3 76.7599 89.45 77.0899 88.5 77.1799C87.26 77.2899 85.84 77.0399 84.46 76.2299C84.26 76.1099 84.06 75.9999 83.86 75.8899C83.66 75.7699 83.47 75.6399 83.27 75.5199C82.86 75.2899 82.48 75.0099 82.08 74.7499C81.88 74.6299 81.7 74.4599 81.5 74.3099C81.32 74.1599 81.12 74.0099 80.94 73.8399C80.59 73.4899 80.22 73.1699 79.94 72.7599L79.96 72.7799Z" fill="currentColor"/>
</svg>
)}
</div> </div>
); );
}; };
@@ -149,7 +159,7 @@ export const LogoText = () => {
); );
}; };
export const LogoIcon = ({ face }: { face?: "left" | "right" }) => { export const LogoIcon = ({ face, christmas }: { face?: "left" | "right", christmas: boolean }) => {
return ( return (
<div className={`${styles.logoIcon} ${face && styles[face]}`}> <div className={`${styles.logoIcon} ${face && styles[face]}`}>
<svg viewBox="0 0 116 100" fill="none" xmlns="http://www.w3.org/2000/svg"> <svg viewBox="0 0 116 100" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -170,6 +180,16 @@ export const LogoIcon = ({ face }: { face?: "left" | "right" }) => {
fill="currentColor" fill="currentColor"
/> />
</svg> </svg>
{christmas && (
<svg className={styles.christmas} viewBox="0 0 158 105" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M49.9901 27.5451C57.3601 28.5551 75.6801 32.1951 90.0601 38.6451C108.03 46.7151 126.59 57.5851 131.55 61.5351C140.19 56.2951 123.4 45.6051 124.13 38.8351C130.1 36.7351 128.83 34.0851 127.45 33.0251C129.67 31.8951 134.84 31.0751 137.8 36.8651L142.6 33.9551C141.58 26.7751 135.23 10.7151 118.02 3.95509C96.5 -4.49491 49.3901 16.5151 49.9901 27.5351V27.5451Z" fill="#CA1620" stroke="currentColor" strokeWidth="3.6"/>
<path d="M48.6499 46.7353C65.8399 47.2153 102.37 61.8653 113.78 73.8353C125.19 85.8153 147.83 69.3853 127.3 57.7853C113.613 50.0519 101.007 43.5553 89.4799 38.2953C80.4999 34.6453 59.0799 27.3953 45.2699 27.5453C28.0099 27.7253 31.4599 46.2553 48.6499 46.7353Z" fill="white" stroke="currentColor" strokeWidth="3.6"/>
<path d="M145.25 54.525C150.883 54.525 155.45 49.9583 155.45 44.325C155.45 38.6917 150.883 34.125 145.25 34.125C139.617 34.125 135.05 38.6917 135.05 44.325C135.05 49.9583 139.617 54.525 145.25 54.525Z" fill="white" stroke="currentColor" strokeWidth="3.6"/>
<path d="M128.3 35.7052C127.2 32.3152 122.17 30.0452 119.8 29.3452M124.92 41.4952C123.03 38.5652 118.22 38.2852 116.06 38.5052" stroke="currentColor" strokeWidth="3.6"/>
<path d="M110.49 69.3657C111.07 68.7957 111.58 68.1657 111.96 67.4957C112.06 67.3257 112.12 67.1457 112.2 66.9757L112.32 66.7157C112.35 66.6257 112.37 66.5357 112.4 66.4457C112.45 66.2857 112.5 66.1257 112.54 65.9657C112.55 65.9257 112.56 65.8857 112.56 65.8457L112.63 65.3457C112.84 63.8457 112.43 62.0957 111.82 60.2557L110.85 57.5157C110.77 57.2857 110.69 57.0557 110.6 56.8357L110.31 56.1657L109.72 54.8257L109.15 53.5357C108.95 53.1057 108.72 52.6957 108.5 52.2757C108.06 51.4457 107.64 50.5957 107.17 49.7757L105.71 47.3357L105.35 46.7257L104.96 46.1257L104.17 44.9357C103.15 43.3257 101.99 41.7857 100.88 40.2257C99.7098 38.6957 98.5698 37.1457 97.3498 35.6357C95.8298 33.6857 94.2698 31.7557 92.7198 29.8057C90.2498 26.7257 87.7997 23.5757 85.4497 20.3557C83.0897 17.1357 80.8898 13.7557 78.8798 10.2657L78.1997 8.9857C78.1497 8.9057 78.1198 8.7757 77.9998 8.7857C77.8798 8.7957 77.8798 8.9357 77.8298 9.0157L77.3198 10.2257C77.0398 10.9057 76.7698 11.5957 76.5198 12.2757C75.5198 15.0157 74.8097 17.8057 74.6997 20.5657C74.6597 21.6257 74.7098 22.6757 74.8598 23.7357C75.0098 24.7957 75.2397 25.8757 75.5097 26.9757C76.0497 29.1757 76.7498 31.4557 77.1498 33.9257C77.2798 34.7057 77.3498 35.5257 77.3998 36.3357C77.4298 37.1557 77.3998 37.9557 77.3598 38.7457C77.2598 40.3157 77.0498 41.8257 76.9098 43.2757C76.7398 45.0757 76.6198 46.7957 76.7898 48.4257C76.9498 50.0257 77.4298 51.6057 78.1498 53.0757C79.6098 56.0157 82.0698 58.5057 85.0198 59.9857C85.3298 60.1557 85.6198 60.2857 85.8698 60.4757C86.1198 60.6657 86.3498 60.8257 86.5598 61.0257C86.7698 61.2157 86.9498 61.4357 87.1198 61.6457C87.2998 61.8457 87.4598 62.0757 87.5998 62.3057L104.52 72.0957C105.01 71.9657 105.52 71.8957 106.01 71.7457C107.68 71.3157 109.24 70.4657 110.46 69.3557L110.49 69.3657Z" fill="var(--color-chateauBlue)"/>
<path d="M111.73 70.8955C111.54 71.0755 111.33 71.2255 111.14 71.3855C110.94 71.5455 110.75 71.7155 110.53 71.8455C110.11 72.1255 109.7 72.4255 109.27 72.6655C109.06 72.7955 108.85 72.9255 108.64 73.0555C108.43 73.1755 108.22 73.2855 108.01 73.4155C106.55 74.2755 105.05 74.5355 103.75 74.4155C102.74 74.3255 101.84 73.9755 101.09 73.4855C100.7 73.2355 100.56 72.7355 100.77 72.3255C101 71.8655 101.2 71.5655 101.48 71.3755C101.87 71.0855 102.42 71.0055 103.37 70.8155C103.84 70.6855 104.32 70.6255 104.79 70.4755C106.38 70.0655 107.86 69.2355 109.02 68.1655C109.58 67.6055 110.06 67.0055 110.42 66.3455C110.52 66.1855 110.57 66.0055 110.65 65.8455L110.77 65.5955C110.8 65.5055 110.82 65.4155 110.85 65.3355C110.89 65.1755 110.94 65.0255 110.99 64.8655C111 64.8255 111.01 64.7855 111.01 64.7455L111.08 64.2655C111.28 62.8155 110.89 61.1155 110.31 59.3355L109.39 56.6755C109.31 56.4555 109.24 56.2355 109.15 56.0155L108.87 55.3655L108.31 54.0755L107.77 52.8255C107.58 52.4155 107.36 52.0155 107.15 51.6055C106.73 50.7955 106.33 49.9755 105.89 49.1855L104.5 46.8155L104.15 46.2255L103.78 45.6455L103.03 44.4855C102.06 42.9355 100.95 41.4355 99.8998 39.9255C98.7898 38.4455 97.6998 36.9355 96.5398 35.4755C95.0898 33.5855 93.5998 31.7155 92.1298 29.8255C89.7798 26.8355 87.4498 23.7955 85.2098 20.6655C82.9598 17.5455 80.8698 14.2755 78.9598 10.8955L78.3098 9.65553C78.2598 9.58553 78.2398 9.44553 78.1198 9.46553C78.0098 9.47553 77.9998 9.61553 77.9598 9.68553L77.4798 10.8555C77.2098 11.5155 76.9498 12.1855 76.7198 12.8455C75.7698 15.5055 75.0898 18.2055 74.9798 20.8755C74.9498 21.9055 74.9898 22.9155 75.1298 23.9455C75.2698 24.9755 75.4898 26.0155 75.7498 27.0855C76.2598 29.2155 76.9298 31.4255 77.3098 33.8155C77.4298 34.5755 77.4998 35.3655 77.5498 36.1555C77.5798 36.9455 77.5498 37.7255 77.5198 38.4955C77.4198 40.0155 77.2298 41.4755 77.0998 42.8855C76.9398 44.6255 76.8198 46.2955 76.9798 47.8755C77.1298 49.4255 77.5898 50.9555 78.2798 52.3855C79.6698 55.2355 82.0098 57.6455 84.8198 59.0755C85.1198 59.2355 85.3898 59.3655 85.6298 59.5455C85.8698 59.7255 86.0898 59.8855 86.2898 60.0755C86.4898 60.2555 86.6598 60.4655 86.8298 60.6755C86.9998 60.8755 87.1498 61.0955 87.2898 61.3155C87.6598 61.9155 87.6898 62.4455 87.3598 62.8055C87.1998 62.9855 86.9398 63.1255 86.5998 63.1955C86.4298 63.2355 86.2398 63.2655 86.0198 63.2655C85.8098 63.2655 85.5898 63.2455 85.3398 63.1955C84.6298 63.0955 83.9098 62.7555 83.2398 62.4355C81.6098 61.5955 80.1798 60.4455 78.8798 59.2055L78.2398 58.5555L77.9398 58.2455C77.9398 58.2455 77.9098 58.2155 77.8998 58.2055L77.6198 57.8755L77.0498 57.1955C77.0498 57.1955 77.0198 57.1655 77.0098 57.1455L76.4798 56.4355L76.2298 56.0855C76.2298 56.0855 76.2098 56.0555 76.1998 56.0355L75.9698 55.6755L75.4998 54.9255C75.4998 54.9255 75.4798 54.8955 75.4698 54.8755L75.0498 54.0855L74.8498 53.7055L74.8198 53.6555L74.6498 53.2555L74.2998 52.4355C74.2998 52.4355 74.2798 52.3955 74.2798 52.3755L73.9898 51.5255L73.8498 51.1155C73.8498 51.1155 73.8398 51.0755 73.8298 51.0455L73.7198 50.6255L73.5098 49.7555C73.5098 49.7555 73.4998 49.7055 73.4998 49.6855L73.3598 48.7955L73.2898 48.3555C73.2898 48.3555 73.2898 48.3255 73.2898 48.3055L73.2498 47.8755C73.1898 47.2655 73.1798 46.6555 73.1798 46.0555C73.1798 45.2355 73.2298 44.4355 73.2898 43.6555L73.6398 39.9555C73.6598 39.7855 73.6698 39.6155 73.6798 39.4455C73.7598 38.4155 73.7998 37.4055 73.7598 36.4455C73.7198 35.4755 73.5898 34.4955 73.3998 33.4955C73.0298 31.4955 72.4398 29.4255 71.9598 27.2255C71.7298 26.1255 71.5198 24.9855 71.4098 23.8155C71.2898 22.6455 71.2798 21.4455 71.3598 20.2755C71.4998 17.9255 71.9898 15.6555 72.6298 13.4755C72.9598 12.3955 73.3198 11.3255 73.7198 10.2755C73.9198 9.75553 74.1198 9.23553 74.3398 8.72553L74.4998 8.34553L74.6398 8.01553L74.7998 7.64553L75.4598 6.17553C75.4898 6.08553 75.5398 6.04553 75.5898 5.99553L75.7298 5.84553L76.0098 5.54553L76.4898 5.03553C76.5398 4.98553 76.5898 4.93553 76.6598 4.89553C77.0098 4.67553 77.5198 4.52553 78.0398 4.51553C78.6098 4.50553 79.1498 4.68553 79.4998 4.89553C79.8798 5.12553 80.3298 5.48553 80.6598 6.13553L82.3498 9.36553L83.6598 11.5755L84.3098 12.6755L85.0098 13.7555L86.4198 15.9155C88.3898 18.7555 90.4298 21.5555 92.5898 24.3055C95.6298 28.2355 98.7398 32.1755 101.77 36.2155C105.28 40.9255 108.65 45.8655 111.23 51.2855L112.14 53.3455C112.44 54.0355 112.76 54.7155 113 55.4355L113.76 57.5655C113.97 58.1455 114.17 58.7455 114.34 59.3655C114.34 59.3655 115.39 62.5355 114.86 65.0055C114.33 67.4755 113.86 68.3655 112.82 69.6955C112.52 70.1255 112.13 70.4655 111.76 70.8355L111.73 70.8955Z" fill="currentColor"/>
</svg>
)}
</div> </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 program og nyheter!</p>
</div>
<a href={link} target="_blank" className="button primary">
Meld deg
<Icon type="arrowRight" />
</a>
</div>
</div>
);
};

View File

@@ -2,6 +2,7 @@
color: currentColor; color: currentColor;
width: 12rem; width: 12rem;
transition: width .3s ease; transition: width .3s ease;
position: relative;
&.index { &.index {
width: 16rem; width: 16rem;
@@ -9,24 +10,40 @@
svg { svg {
width: 100%; width: 100%;
display: block;
} }
&.main { &.main {
margin: calc(var(--spacing-sitepadding-block)*-.6) 0 0 calc(var(--spacing-sitepadding-inline)*-.6); margin: calc(var(--spacing-sitepadding-block)*-.6) 0 0 calc(var(--spacing-sitepadding-inline)*-.6);
} }
.christmas {
position: absolute;
bottom: 0;
left: 0;
}
} }
.logoIcon { .logoIcon {
color: currentColor; color: currentColor;
width: 3rem; width: 3rem;
position: relative;
svg { svg {
width: 100%; width: 100%;
display: block;
} }
&.right { &.right {
transform: scaleX(-1); transform: scaleX(-1);
} }
.christmas {
position: absolute;
bottom: 0;
left: 0;
width: 136.206897%;
}
} }
@media (min-width: 1920px) { @media (min-width: 1920px) {

View File

@@ -0,0 +1,64 @@
.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;
}
}
.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

@@ -46,6 +46,9 @@ export const Header = () => {
} }
}; };
// let's add a santa hat during December
const isChristmas = new Date().getMonth() === 11;
return ( return (
<> <>
<header <header
@@ -54,7 +57,7 @@ export const Header = () => {
data-small={!isInView} data-small={!isInView}
> >
<Link href="/" aria-label="Hjem"> <Link href="/" aria-label="Hjem">
<Logo /> <Logo christmas={isChristmas} />
</Link> </Link>
<nav className={styles.siteMenu}> <nav className={styles.siteMenu}>
<ul className={styles.mainMenu}> <ul className={styles.mainMenu}>
@@ -142,6 +145,14 @@ export const Header = () => {
Foreninger Foreninger
</Link> </Link>
</li> </li>
<li>
<Link
href="/sponsorer"
data-active={pathname === "/sponsorer"}
>
Sponsorer
</Link>
</li>
<li className={styles.galtinn}> <li className={styles.galtinn}>
<a href="https://galtinn.neuf.no/" target="_blank"> <a href="https://galtinn.neuf.no/" target="_blank">
<span>Mitt medlemskap</span>&nbsp; <span>Mitt medlemskap</span>&nbsp;
@@ -167,7 +178,11 @@ export const Header = () => {
</nav> </nav>
<div className={styles.headerBar} aria-hidden> <div className={styles.headerBar} aria-hidden>
<Link href="/" aria-label="Hjem"> <Link href="/" aria-label="Hjem">
{!isInView ? <LogoIcon face="left" /> : <Logo />} {!isInView ? (
<LogoIcon face="left" christmas={isChristmas} />
) : (
<Logo christmas={isChristmas} />
)}
</Link> </Link>
<nav className={styles.siteMenu}> <nav className={styles.siteMenu}>
<ul className={styles.mainMenu}> <ul className={styles.mainMenu}>

View File

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

View File

@@ -0,0 +1,51 @@
import { SponsorBlock } from "@/gql/graphql";
import { Blocks } from "../blocks/Blocks";
import { Image } from "../general/Image";
import styles from "./sponsorList.module.scss";
const SponsorItem = ({ sponsor }: { sponsor: SponsorBlock }) => {
const { name, logo, website, text } = sponsor;
return (
<li className={styles.sponsorItem}>
<div className={styles.image}>
{logo && (
<Image
src={logo.url}
alt={`Logoen til ${name}`}
width={logo.width}
height={logo.height}
sizes="20vw"
/>
)}
</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>
);
};
export const SponsorList = ({ sponsors }: { sponsors: SponsorBlock[] }) => {
return (
<section className={styles.sponsorList}>
<ul>
{sponsors.map((sponsor) => (
<SponsorItem key={sponsor.name} sponsor={sponsor} />
))}
</ul>
</section>
);
};

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

@@ -1,5 +1,3 @@
@import url("https://cdn.fonts.net/t/1.css?apiType=css&projectid=84b2007c-70ef-4f2d-9bd7-ad88739bae2f");
@font-face { @font-face {
font-family: "Avenir Next"; font-family: "Avenir Next";
font-style: normal; font-style: normal;

View File

@@ -1,8 +1,8 @@
@import 'fonts.scss'; @use 'fonts.scss';
@import 'variables.scss'; @use 'variables.scss';
@import 'animations.scss'; @use 'animations.scss';
@import 'base.scss'; @use 'base.scss';
@import 'button.scss'; @use 'button.scss';
@import 'news.scss'; @use 'news.scss';

View File

@@ -11,8 +11,52 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
* 3. It does not support dead code elimination, so it will add unused operations. * 3. It does not support dead code elimination, so it will add unused operations.
* *
* Therefore it is highly recommended to use the babel or swc plugin for production. * Therefore it is highly recommended to use the babel or swc plugin for production.
* Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size
*/ */
const documents = { type Documents = {
"\n fragment Generic on GenericPage {\n __typename\n id\n urlPath\n seoTitle\n searchDescription\n title\n lead\n pig\n body {\n ...Blocks\n }\n }\n": typeof types.GenericFragmentDoc,
"\n query genericPageByUrl($urlPath: String!) {\n page: page(contentType: \"generic.GenericPage\", urlPath: $urlPath) {\n ... on GenericPage {\n ...Generic\n }\n }\n }\n": typeof types.GenericPageByUrlDocument,
"\n query allGenericSlugs {\n pages(contentType: \"generic.GenericPage\") {\n id\n urlPath\n }\n }\n ": typeof types.AllGenericSlugsDocument,
"\n query newsBySlug($slug: String!) {\n news: page(contentType: \"news.NewsPage\", slug: $slug) {\n ... on NewsPage {\n ...News\n }\n }\n }\n": typeof types.NewsBySlugDocument,
"\n query allNewsSlugs {\n pages(contentType: \"news.NewsPage\") {\n id\n slug\n }\n }\n ": typeof types.AllNewsSlugsDocument,
"\n query eventBySlug($slug: String!) {\n event: page(contentType: \"events.EventPage\", slug: $slug) {\n ... on EventPage {\n ...Event\n }\n }\n }\n": typeof types.EventBySlugDocument,
"\n query allEventSlugs {\n pages(contentType: \"events.EventPage\") {\n id\n slug\n }\n }\n ": typeof types.AllEventSlugsDocument,
"\n query associationBySlug($slug: String!) {\n association: page(\n contentType: \"associations.AssociationPage\"\n slug: $slug\n ) {\n ... on AssociationPage {\n ...Association\n }\n }\n }\n": typeof types.AssociationBySlugDocument,
"\n query allAssociationSlugs {\n pages(contentType: \"associations.AssociationPage\") {\n id\n slug\n }\n }\n ": typeof types.AllAssociationSlugsDocument,
"\n query allAssociations {\n index: associationIndex {\n ... on AssociationIndex {\n ...AssociationIndex\n }\n }\n associations: pages(\n contentType: \"associations.AssociationPage\"\n limit: 1000\n ) {\n ... on AssociationPage {\n ...Association\n }\n }\n }\n": typeof types.AllAssociationsDocument,
"\n fragment AssociationIndex on AssociationIndex {\n ... on AssociationIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": typeof types.AssociationIndexFragmentDoc,
"\n fragment Association on AssociationPage {\n __typename\n id\n slug\n title\n seoTitle\n searchDescription\n excerpt\n lead\n body {\n ...Blocks\n }\n logo {\n url\n width\n height\n }\n associationType\n websiteUrl\n }\n": typeof types.AssociationFragmentDoc,
"\n query contacts {\n index: contactIndex {\n ... on ContactIndex {\n ...ContactIndex\n }\n }\n }\n": typeof types.ContactsDocument,
"\n fragment ContactIndex on ContactIndex {\n ... on ContactIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": typeof types.ContactIndexFragmentDoc,
"\n query venueBySlug($slug: String!) {\n venue: page(contentType: \"venues.VenuePage\", slug: $slug) {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n": typeof types.VenueBySlugDocument,
"\n query allVenueSlugs {\n pages(contentType: \"venues.VenuePage\", limit: 100) {\n id\n slug\n }\n }\n ": typeof types.AllVenueSlugsDocument,
"\n query venueIndex {\n index: venueIndex {\n ... on VenueIndex {\n ...VenueIndex\n }\n }\n venues: pages(contentType: \"venues.VenuePage\", limit: 100) {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n": typeof types.VenueIndexDocument,
"\n fragment VenueIndex on VenueIndex {\n ... on VenueIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": typeof types.VenueIndexFragmentDoc,
"\n fragment Venue on VenuePage {\n __typename\n id\n slug\n title\n seoTitle\n searchDescription\n images {\n ...Blocks\n }\n body {\n ...Blocks\n }\n featuredImage {\n ...Image\n }\n showAsBookable\n showInOverview\n floor\n preposition\n usedFor\n techSpecsUrl\n capabilityAudio\n capabilityAudioVideo\n capabilityBar\n capabilityLighting\n capacityLegal\n capacityStanding\n capacitySitting\n }\n": typeof types.VenueFragmentDoc,
"\n fragment Home on HomePage {\n ... on HomePage {\n featuredEvents {\n id\n }\n }\n }\n": typeof types.HomeFragmentDoc,
"\n query home {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n home: page(contentType: \"home.HomePage\", urlPath: \"/home/\") {\n ... on HomePage {\n ...Home\n }\n }\n news: pages(contentType: \"news.newsPage\", order: \"-first_published_at\", limit: 4) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": typeof types.HomeDocument,
"\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n ": typeof types.SearchDocument,
"\n query sponsors {\n page: sponsorsPage {\n ... on SponsorsPage {\n ...SponsorsPage\n }\n }\n }\n": typeof types.SponsorsDocument,
"\n fragment SponsorsPage on SponsorsPage {\n ... on SponsorsPage {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n sponsors {\n ... on SponsorBlock {\n id\n name\n logo {\n ...Image\n }\n text\n website\n }\n }\n }\n }\n": typeof types.SponsorsPageFragmentDoc,
"\n query venueRentalIndex {\n index: venueRentalIndex {\n ... on VenueRentalIndex {\n ...VenueRentalIndex\n }\n }\n venues: pages(contentType: \"venues.VenuePage\", limit: 100) {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n": typeof types.VenueRentalIndexDocument,
"\n fragment VenueRentalIndex on VenueRentalIndex {\n ... on VenueRentalIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": typeof types.VenueRentalIndexFragmentDoc,
"\n fragment OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n ... on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n ... on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n ... on HorizontalRuleBlock {\n color\n }\n ... on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\n backgroundColor\n featuredPage {\n contentType\n pageType\n url\n ... on EventPage {\n featuredImage {\n ...Image\n }\n }\n ... on NewsPage {\n featuredImage {\n ...Image\n }\n }\n }\n featuredImageOverride {\n ...Image\n }\n }\n ... on ContactListBlock {\n items {\n blockType\n ... on ContactEntityBlock {\n contactEntity {\n ...ContactEntity\n }\n }\n }\n }\n ... on EmbedBlock {\n url\n embed\n rawEmbed\n }\n ... on FactBoxBlock {\n backgroundColor\n factBoxBody: body\n }\n }\n": typeof types.OneLevelOfBlocksFragmentDoc,
"\n fragment Blocks on StreamFieldInterface {\n ... on AccordionBlock {\n heading\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on PageSectionBlock {\n title\n backgroundColor\n icon\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on ContactSectionBlock {\n title\n text\n blocks {\n ... on ContactSubsectionBlock {\n title\n text\n blocks {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n": typeof types.BlocksFragmentDoc,
"\n fragment Image on CustomImage {\n id\n url\n width\n height\n alt\n attribution\n }\n": typeof types.ImageFragmentDoc,
"\n fragment ContactEntity on ContactEntity {\n id\n name\n contactType\n title\n email\n phoneNumber\n image {\n ...Image\n }\n }\n": typeof types.ContactEntityFragmentDoc,
"\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n ...OneLevelOfBlocks\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n venueCustom\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n": typeof types.EventFragmentDoc,
"\n fragment EventIndex on EventIndex {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n }\n": typeof types.EventIndexFragmentDoc,
"\n query eventIndexMetadata {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n }\n": typeof types.EventIndexMetadataDocument,
"\n query futureEvents {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n eventCategories: eventCategories {\n ... on EventCategory {\n name\n slug\n showInFilters\n }\n }\n eventOrganizers: eventOrganizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n venues: pages(contentType: \"venues.VenuePage\") {\n ... on VenuePage {\n id\n title\n slug\n preposition\n }\n }\n }\n": typeof types.FutureEventsDocument,
"\n fragment News on NewsPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n firstPublishedAt\n excerpt\n lead\n featuredImage {\n ...Image\n }\n body {\n ...Blocks\n }\n }\n": typeof types.NewsFragmentDoc,
"\n fragment NewsIndex on NewsIndex {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n lead\n }\n": typeof types.NewsIndexFragmentDoc,
"\n query news {\n index: newsIndex {\n ... on NewsIndex {\n ...NewsIndex\n }\n }\n news: pages(contentType: \"news.NewsPage\", order: \"-first_published_at\", limit: 1000) {\n ... on NewsPage {\n ...News\n }\n }\n }\n": typeof types.NewsDocument,
"\n query openingHoursSets {\n openingHoursSets {\n ...OpeningHoursSetFragment\n }\n }\n": typeof types.OpeningHoursSetsDocument,
"\n fragment OpeningHoursSetFragment on OpeningHoursSet {\n name\n effectiveFrom\n effectiveTo\n announcement\n items {\n id\n function\n week {\n id\n blockType\n ... on OpeningHoursWeekBlock {\n ...OpeningHoursWeekBlock\n }\n }\n }\n }\n": typeof types.OpeningHoursSetFragmentFragmentDoc,
"\n fragment OpeningHoursRangeBlock on OpeningHoursRangeBlock {\n timeFrom\n timeTo\n custom\n }\n": typeof types.OpeningHoursRangeBlockFragmentDoc,
"\n fragment OpeningHoursWeekBlock on OpeningHoursWeekBlock {\n monday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n tuesday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n wednesday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n thursday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n friday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n saturday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n sunday {\n ... on OpeningHoursRangeBlock {\n ...OpeningHoursRangeBlock\n }\n }\n }\n": typeof types.OpeningHoursWeekBlockFragmentDoc,
};
const documents: Documents = {
"\n fragment Generic on GenericPage {\n __typename\n id\n urlPath\n seoTitle\n searchDescription\n title\n lead\n pig\n body {\n ...Blocks\n }\n }\n": types.GenericFragmentDoc, "\n fragment Generic on GenericPage {\n __typename\n id\n urlPath\n seoTitle\n searchDescription\n title\n lead\n pig\n body {\n ...Blocks\n }\n }\n": types.GenericFragmentDoc,
"\n query genericPageByUrl($urlPath: String!) {\n page: page(contentType: \"generic.GenericPage\", urlPath: $urlPath) {\n ... on GenericPage {\n ...Generic\n }\n }\n }\n": types.GenericPageByUrlDocument, "\n query genericPageByUrl($urlPath: String!) {\n page: page(contentType: \"generic.GenericPage\", urlPath: $urlPath) {\n ... on GenericPage {\n ...Generic\n }\n }\n }\n": types.GenericPageByUrlDocument,
"\n query allGenericSlugs {\n pages(contentType: \"generic.GenericPage\") {\n id\n urlPath\n }\n }\n ": types.AllGenericSlugsDocument, "\n query allGenericSlugs {\n pages(contentType: \"generic.GenericPage\") {\n id\n urlPath\n }\n }\n ": types.AllGenericSlugsDocument,
@@ -35,13 +79,15 @@ const documents = {
"\n fragment Home on HomePage {\n ... on HomePage {\n featuredEvents {\n id\n }\n }\n }\n": types.HomeFragmentDoc, "\n fragment Home on HomePage {\n ... on HomePage {\n featuredEvents {\n id\n }\n }\n }\n": types.HomeFragmentDoc,
"\n query home {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n home: page(contentType: \"home.HomePage\", urlPath: \"/home/\") {\n ... on HomePage {\n ...Home\n }\n }\n news: pages(contentType: \"news.newsPage\", order: \"-first_published_at\", limit: 4) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": types.HomeDocument, "\n query home {\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n home: page(contentType: \"home.HomePage\", urlPath: \"/home/\") {\n ... on HomePage {\n ...Home\n }\n }\n news: pages(contentType: \"news.newsPage\", order: \"-first_published_at\", limit: 4) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": types.HomeDocument,
"\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n ": types.SearchDocument, "\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n ": types.SearchDocument,
"\n query sponsors {\n page: sponsorsPage {\n ... on SponsorsPage {\n ...SponsorsPage\n }\n }\n }\n": types.SponsorsDocument,
"\n fragment SponsorsPage on SponsorsPage {\n ... on SponsorsPage {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n sponsors {\n ... on SponsorBlock {\n id\n name\n logo {\n ...Image\n }\n text\n website\n }\n }\n }\n }\n": types.SponsorsPageFragmentDoc,
"\n query venueRentalIndex {\n index: venueRentalIndex {\n ... on VenueRentalIndex {\n ...VenueRentalIndex\n }\n }\n venues: pages(contentType: \"venues.VenuePage\", limit: 100) {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n": types.VenueRentalIndexDocument, "\n query venueRentalIndex {\n index: venueRentalIndex {\n ... on VenueRentalIndex {\n ...VenueRentalIndex\n }\n }\n venues: pages(contentType: \"venues.VenuePage\", limit: 100) {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n": types.VenueRentalIndexDocument,
"\n fragment VenueRentalIndex on VenueRentalIndex {\n ... on VenueRentalIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": types.VenueRentalIndexFragmentDoc, "\n fragment VenueRentalIndex on VenueRentalIndex {\n ... on VenueRentalIndex {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n }\n }\n": types.VenueRentalIndexFragmentDoc,
"\n fragment OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n ... on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n ... on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n ... on HorizontalRuleBlock {\n color\n }\n ... on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\n backgroundColor\n featuredPage {\n contentType\n pageType\n url\n ... on EventPage {\n featuredImage {\n ...Image\n }\n }\n ... on NewsPage {\n featuredImage {\n ...Image\n }\n }\n }\n featuredImageOverride {\n ...Image\n }\n }\n ... on ContactListBlock {\n items {\n blockType\n ... on ContactEntityBlock {\n contactEntity {\n ...ContactEntity\n }\n }\n }\n }\n ... on EmbedBlock {\n url\n embed\n rawEmbed\n }\n ... on FactBoxBlock {\n backgroundColor\n factBoxBody: body\n }\n }\n": types.OneLevelOfBlocksFragmentDoc, "\n fragment OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n ... on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n ... on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n ... on HorizontalRuleBlock {\n color\n }\n ... on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\n backgroundColor\n featuredPage {\n contentType\n pageType\n url\n ... on EventPage {\n featuredImage {\n ...Image\n }\n }\n ... on NewsPage {\n featuredImage {\n ...Image\n }\n }\n }\n featuredImageOverride {\n ...Image\n }\n }\n ... on ContactListBlock {\n items {\n blockType\n ... on ContactEntityBlock {\n contactEntity {\n ...ContactEntity\n }\n }\n }\n }\n ... on EmbedBlock {\n url\n embed\n rawEmbed\n }\n ... on FactBoxBlock {\n backgroundColor\n factBoxBody: body\n }\n }\n": types.OneLevelOfBlocksFragmentDoc,
"\n fragment Blocks on StreamFieldInterface {\n ... on AccordionBlock {\n heading\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on PageSectionBlock {\n title\n backgroundColor\n icon\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on ContactSectionBlock {\n title\n text\n blocks {\n ... on ContactSubsectionBlock {\n title\n text\n blocks {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n": types.BlocksFragmentDoc, "\n fragment Blocks on StreamFieldInterface {\n ... on AccordionBlock {\n heading\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on PageSectionBlock {\n title\n backgroundColor\n icon\n body {\n ...OneLevelOfBlocks\n }\n }\n ... on ContactSectionBlock {\n title\n text\n blocks {\n ... on ContactSubsectionBlock {\n title\n text\n blocks {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n": types.BlocksFragmentDoc,
"\n fragment Image on CustomImage {\n id\n url\n width\n height\n alt\n attribution\n }\n": types.ImageFragmentDoc, "\n fragment Image on CustomImage {\n id\n url\n width\n height\n alt\n attribution\n }\n": types.ImageFragmentDoc,
"\n fragment ContactEntity on ContactEntity {\n id\n name\n contactType\n title\n email\n phoneNumber\n image {\n ...Image\n }\n }\n": types.ContactEntityFragmentDoc, "\n fragment ContactEntity on ContactEntity {\n id\n name\n contactType\n title\n email\n phoneNumber\n image {\n ...Image\n }\n }\n": types.ContactEntityFragmentDoc,
"\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n": types.EventFragmentDoc, "\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n ...OneLevelOfBlocks\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n venueCustom\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n": types.EventFragmentDoc,
"\n fragment EventIndex on EventIndex {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n }\n": types.EventIndexFragmentDoc, "\n fragment EventIndex on EventIndex {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n }\n": types.EventIndexFragmentDoc,
"\n query eventIndexMetadata {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n }\n": types.EventIndexMetadataDocument, "\n query eventIndexMetadata {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n }\n": types.EventIndexMetadataDocument,
"\n query futureEvents {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n eventCategories: eventCategories {\n ... on EventCategory {\n name\n slug\n showInFilters\n }\n }\n eventOrganizers: eventOrganizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n venues: pages(contentType: \"venues.VenuePage\") {\n ... on VenuePage {\n id\n title\n slug\n preposition\n }\n }\n }\n": types.FutureEventsDocument, "\n query futureEvents {\n index: eventIndex {\n ... on EventIndex {\n ...EventIndex\n }\n }\n events: eventIndex {\n ... on EventIndex {\n futureEvents {\n ... on EventPage {\n ...Event\n }\n }\n }\n }\n eventCategories: eventCategories {\n ... on EventCategory {\n name\n slug\n showInFilters\n }\n }\n eventOrganizers: eventOrganizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n venues: pages(contentType: \"venues.VenuePage\") {\n ... on VenuePage {\n id\n title\n slug\n preposition\n }\n }\n }\n": types.FutureEventsDocument,
@@ -156,6 +202,14 @@ export function graphql(source: "\n query home {\n events: eventIndex {\
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n "): (typeof documents)["\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n "]; export function graphql(source: "\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n "): (typeof documents)["\n query search($query: String) {\n results: search(query: $query) {\n __typename\n ... on PageInterface {\n slug\n }\n ... on NewsPage {\n id\n title\n }\n ... on EventPage {\n id\n title\n }\n ... on GenericPage {\n id\n title\n }\n ... on VenuePage {\n id\n title\n }\n ... on AssociationPage {\n id\n title\n associationType\n }\n }\n }\n "];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query sponsors {\n page: sponsorsPage {\n ... on SponsorsPage {\n ...SponsorsPage\n }\n }\n }\n"): (typeof documents)["\n query sponsors {\n page: sponsorsPage {\n ... on SponsorsPage {\n ...SponsorsPage\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n fragment SponsorsPage on SponsorsPage {\n ... on SponsorsPage {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n sponsors {\n ... on SponsorBlock {\n id\n name\n logo {\n ...Image\n }\n text\n website\n }\n }\n }\n }\n"): (typeof documents)["\n fragment SponsorsPage on SponsorsPage {\n ... on SponsorsPage {\n title\n seoTitle\n searchDescription\n lead\n body {\n ...Blocks\n }\n sponsors {\n ... on SponsorBlock {\n id\n name\n logo {\n ...Image\n }\n text\n website\n }\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
@@ -183,7 +237,7 @@ export function graphql(source: "\n fragment ContactEntity on ContactEntity {\n
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"): (typeof documents)["\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n id\n blockType\n field\n ... on RichTextBlock {\n rawValue\n value\n }\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"]; export function graphql(source: "\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n ...OneLevelOfBlocks\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n venueCustom\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"): (typeof documents)["\n fragment Event on EventPage {\n __typename\n id\n slug\n seoTitle\n searchDescription\n title\n subtitle\n lead\n body {\n ...OneLevelOfBlocks\n }\n featuredImage {\n ...Image\n }\n pig\n facebookUrl\n ticketUrl\n free\n priceRegular\n priceMember\n priceStudent\n categories {\n ... on EventCategory {\n name\n slug\n pig\n }\n }\n occurrences {\n ... on EventOccurrence {\n __typename\n id\n start\n end\n venue {\n __typename\n id\n slug\n title\n preposition\n url\n }\n venueCustom\n }\n }\n organizers {\n ... on EventOrganizer {\n id\n name\n slug\n externalUrl\n association {\n ... on AssociationPage {\n url\n }\n }\n }\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

File diff suppressed because one or more lines are too long

View File

@@ -34,13 +34,7 @@ const EventFragmentDefinition = graphql(`
subtitle subtitle
lead lead
body { body {
id ...OneLevelOfBlocks
blockType
field
... on RichTextBlock {
rawValue
value
}
} }
featuredImage { featuredImage {
...Image ...Image
@@ -73,6 +67,7 @@ const EventFragmentDefinition = graphql(`
preposition preposition
url url
} }
venueCustom
} }
} }
organizers { organizers {

View File

@@ -1,6 +1,10 @@
{ {
"compilerOptions": { "compilerOptions": {
"lib": ["dom", "dom.iterable", "esnext"], "lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
"strict": true, "strict": true,
@@ -18,9 +22,19 @@
} }
], ],
"paths": { "paths": {
"@/*": ["./src/*"] "@/*": [
} "./src/*"
]
},
"target": "ES2017"
}, },
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], "include": [
"exclude": ["node_modules"] "next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts"
],
"exclude": [
"node_modules"
]
} }