misc design progress, more variables, news and event lists, remove old date list, etc

This commit is contained in:
elisejakob
2024-06-24 01:13:03 +02:00
parent 33be02ee69
commit c3484b35aa
22 changed files with 135 additions and 247 deletions

View File

@ -1,7 +1,6 @@
import { getClient } from "@/app/client";
import { Blocks } from "@/components/blocks/Blocks";
import { DateList } from "@/components/events/DateList";
import { DateListOld } from "@/components/events/DateListOld";
import { EventHeader } from "@/components/events/EventHeader";
import { BgPig } from "@/components/general/BgPig";
import { graphql } from "@/gql";
@ -57,7 +56,6 @@ export default async function Page({ params }: { params: { slug: string } }) {
<EventHeader event={event} />
<section className="pageContent">
<DateList event={event} />
<DateListOld />
<Blocks blocks={event.body} />
</section>
</main>

View File

@ -6,9 +6,9 @@ import { getClient } from "@/app/client";
import { FeaturedEvents } from "@/components/events/FeaturedEvents";
import { NewsList } from "@/components/news/NewsList";
import { UpcomingEvents } from "@/components/events/UpcomingEvents";
import { IconListBlock } from "@/components/blocks/IconListBlock";
import { Pig } from "@/components/general/Pig";
import Link from "next/link";
import Icon from "@/components/general/Icon";
const HomeFragmentDefinition = graphql(`
fragment Home on HomePage {
@ -67,20 +67,23 @@ export default async function Home() {
opplevelse
</p>
<Link href="/praktisk#adkomst" className="button">
Adresse og adkomst &rarr;
<span>Adresse og adkomst</span>
<Icon />
</Link>
<Link href="/praktisk#adkomst" className="button">
Billetter &rarr;
<span>Billetter</span>
<Icon />
</Link>
<Link href="/praktisk#adkomst" className="button">
Åpningstider &rarr;
<span>Åpningstider</span>
<Icon />
</Link>
</div>
<div className="pig">
<Pig type="point" />
</div>
</div>
<NewsList heading="Siste nytt" limit={3} featured news={news} />
<NewsList heading="Siste nytt" limit={4} featured news={news} />
</main>
);
}

View File

@ -3,7 +3,7 @@
padding-top: 56%;
background: var(--color-black);
color: var(--color-goldenBeige);
margin: calc(var(--spacing-sitepadding-block)*2) calc(var(--spacing-sitepaddign-inline)*-1);
margin: calc(var(--spacing-sitepadding-block)*2) calc(var(--spacing-sitepadding-inline)*-1);
figure {
width: 100%;

View File

@ -1,8 +1,12 @@
.pageSection {
margin: 5rem auto;
padding: 2rem 0;
margin: var(--spacing-m) auto;
padding: var(--spacing-m) 0;
border-top: var(--border-s);
&:nth-of-type(1) {
margin-top: var(--spacing-l);
}
&:nth-of-type(3n+1) {
.icon {
background: var(--color-neufPink);
@ -23,12 +27,15 @@
}
.sectionHeader {
display: flex;
display: grid;
grid-template-columns: repeat(12, 1fr);
align-items: center;
gap: 1.6rem;
margin-bottom: var(--spacing-section-bottom);
h1 {
h2 {
font-size: var(--font-size-h2);
grid-column: span 11;
}
}

View File

@ -1,5 +1,25 @@
.richTextBlock {
padding-bottom: var(--spacing-section-bottom);
display: grid;
grid-template-columns: repeat(12, 1fr);
column-gap: var(--spacing-gap-column);
h1,
h2,
h3,
h4,
h5,
h6,
p,
ul,
ol,
blockquote {
grid-column: 2 / span 10;
@media (max-width: 1200px) {
grid-column: 1 / -1;
}
}
h1,
h2,
@ -7,7 +27,7 @@
h4,
h5,
h6 {
margin: var(--spacing-m) auto var(--spacing-s);
margin: var(--spacing-m) 0 var(--spacing-s);
max-width: var(--size-width-p);
}
@ -18,14 +38,14 @@
}
p {
margin: 0 auto 1.4em;
margin: 0 0 1.4em;
font-size: var(--font-size-body);
max-width: var(--size-width-p);
}
ul,
ol {
margin: 1em auto 2em;
margin: 1em 0 2em;
font-size: var(--font-size-body);
max-width: var(--size-width-p);
list-style: none;
@ -80,7 +100,7 @@
font-size: 2.8rem;
font-style: italic;
max-width: calc(var(--size-width-p) * 1.4);
margin: 2rem auto 3.2rem;
margin: 2rem 0 3.2rem;
text-align: center;
}
@ -118,7 +138,7 @@
}
hr {
margin: 2rem auto;
margin: 2rem 0;
max-width: var(--size-width-p);
border: none;
height: 1px;

View File

@ -11,13 +11,15 @@
content: "";
display: block;
position: absolute;
width: 3rem;
height: 3rem;
width: var(--size-icon-circle);
height: var(--size-icon-circle);
background-size: 100%;
}
}
.swiper-button-next {
right: 0;
&:before {
background-image: url("/assets/icons/circle-arrow-right.svg");
right: var(--spacing-sitepadding-inline);
@ -30,6 +32,8 @@
}
.swiper-button-prev {
left: 0;
&:before {
background-image: url("/assets/icons/circle-arrow-left.svg");
left: var(--spacing-sitepadding-inline);

View File

@ -1,5 +1,5 @@
.contactInfo {
margin: 0 calc(var(--spacing-sitepadding)*-1);
margin: 0 calc(var(--spacing-sitepadding-inline)*-1);
padding: var(--spacing-sitepadding-block) var(--spacing-sitepadding-inline) var(--spacing-section-bottom);
background: var(--color-background-secondary);

View File

@ -1,47 +0,0 @@
import styles from "./dateListOld.module.scss";
export const DateListOld = () => {
return (
<div className={styles.dateWrapper}>
<h2 className="suphead">Kommende datoer (4)</h2>
<ul className={styles.dateList}>
<li className={styles.date}>
<div className={styles.time}>
<span>27/05/2024</span>&nbsp;
<span>18.00</span>
</div>
<div className={styles.venue}>
<span>Storsalen</span>
</div>
</li>
<li className={styles.date}>
<div className={styles.time}>
<span>Mandag 27. mai 2024</span>&nbsp;
<span>kl. 18.00</span>
<div className={styles.venue}>
<span>i Storsalen</span>
</div>
</div>
</li>
<li className={styles.date}>
<div className={styles.time}>
<span>27. mai 2024</span>&nbsp;
<span>kl. 18.00</span>
</div>
<div className={styles.venue}>
<span>Storsalen</span>
</div>
</li>
<li className={styles.date}>
<div className={styles.venue}>
<span>Storsalen</span>
</div>
<div className={styles.time}>
<span>27.05.2024</span>&nbsp;
<span>18.00</span>
</div>
</li>
</ul>
</div>
);
};

View File

@ -3,6 +3,7 @@ import styles from "./eventHeader.module.scss";
import Image from "@/components/general/Image";
import Link from "next/link";
import { OrganizerList } from "./OrganizerList";
import Icon from "../general/Icon";
function formatPrice(price: number): string {
if (price === null) {
@ -26,7 +27,6 @@ export const EventHeader = ({ event }: { event: EventFragment }) => {
</span>
<h1 className={styles.title}>{event.title}</h1>
<div className={styles.details}>
<p>Vise neste dato her?</p>
<div className={styles.prices}>
{/*<h2>Pris</h2>*/}
<ul className={styles.priceList}>
@ -57,7 +57,8 @@ export const EventHeader = ({ event }: { event: EventFragment }) => {
</div>
{event.ticketUrl && (
<a href={event.ticketUrl} className="button cta">
Kjøp billetter
<span>Kjøp billetter</span>
<Icon />
</a>
)}
{event.facebookUrl && (

View File

@ -8,7 +8,7 @@ import Link from "next/link";
export const OrganizerList = ({ event }: { event: EventFragment }) => {
return (
<div>
<div className={styles.organizerList}>
<h2>Arrangeres av</h2>
<ul>
{event.organizers.map((organizer) => {

View File

@ -1,38 +0,0 @@
.dateList {
list-style: none;
background: var(--color-background-secondary);
margin: var(--spacing-s) calc(var(--spacing-sitepadding-inline)*-1);
padding: var(--spacing-sitepadding-block) var(--spacing-sitepadding-inline);
display: flex;
gap: var(--spacing-gap-column);
}
.date {
font-family: var(--font-serif);
font-size: var(--font-size-lead);
margin-bottom: var(--spacing-s);
padding-left: 4rem;
position: relative;
min-height: 3.2rem;
line-height: 1.2;
&:before {
content: "";
display: block;
width: 3.2rem;
height: 3.2rem;
border-radius: 100%;
background: var(--color-goldenBeige);
position: absolute;
left: 0;
top: 0;
}
}
.time {
width: 100%;
}
.venue {
font-style: italic;
}

View File

@ -34,36 +34,13 @@
.priceList {
list-style: none;
display: flex;
}
.priceItem {
font-family: var(--font-serif);
font-size: var(--font-size-caption);
position: relative;
padding: 0 1.5rem 0 var(--spacing-s);
&:after {
content: "/";
font-family: var(--font-serif);
font-size: 2rem;
position: absolute;
top: 0;
right: 0;
line-height: 1.2;
}
&:first-child {
padding-left: 0;
}
&:last-child {
&:after {
display: none;
}
}
}
.priceLabel {
display: block;
font-weight: 600;
}

View File

@ -55,17 +55,16 @@
&.large {
align-content: start;
.time {
order: 1;
}
.image {
order: 2;
order: 1;
margin-bottom: var(--spacing-xs);
}
.text {
order: 2;
}
.time {
order: 3;
}
}
@ -86,11 +85,12 @@
}
.title {
font-size: var(--font-size-h2);
font-size: var(--font-size-h3);
}
.details {
font-size: var(--font-size-lead);
margin-bottom: var(--spacing-xs);
}
.dates,
@ -107,14 +107,16 @@
font-size: var(--font-size-body);
width: 100%;
display: flex;
justify-content: space-between;
justify-content: flex-start;
align-items: center;
gap: .2rem;
}
.datePill, .moreDates {
.datePill,
.moreDates {
display: inline-block;
background: var(--color-background-secondary);
color: var(--color-chateauBlue);
background: var(--color-goldenBeige);
color: var(--color-deepBrick);
border-radius: 2rem;
padding: 0 .4rem;
font-size: var(--font-size-xs);

View File

@ -3,5 +3,11 @@
grid-template-columns: repeat(3, 1fr);
column-gap: var(--spacing-gap-column);
row-gap: var(--spacing-gap-row);
padding-bottom: var(--spacing-section-bottom);
padding-bottom: calc(var(--spacing-section-bottom)*2);
}
@media (max-width: 900px) {
.eventList {
grid-template-columns: 1fr;
}
}

View File

@ -0,0 +1,10 @@
.organizerList {
h2 {
font-size: inherit;
font-weight: inherit;
}
ul {
list-style: none;
}
}

View File

@ -11,7 +11,7 @@ export const PageHeader = ({
<div className={styles.pageHeader}>
<h1 className={styles.title}>{heading}</h1>
{lead && (
<p className="lead" dangerouslySetInnerHTML={{ __html: lead }} />
<div className="lead" dangerouslySetInnerHTML={{ __html: lead }} />
)}
</div>
);

View File

@ -25,6 +25,7 @@
.date {
font-family: var(--font-serif);
font-size: var(--font-size-caption);
color: var(--color-chateauBlue-05);
}
.title {

View File

@ -1,10 +1,6 @@
.newsWrapper {
margin: 0 calc(var(--spacing-sitepadding-inline)*-1);
padding: var(--spacing-sitepadding-block) var(--spacing-sitepadding-inline);
h2 {
margin-bottom: var(--spacing-s);
}
}
.newsList {

View File

@ -66,9 +66,10 @@ p {
}
}
div.lead p {
.lead,
.lead p {
font-size: var(--font-size-lead);
max-width: var(--size-width-p);
max-width: 34em;
margin-bottom: var(--spacing-m);
}
@ -114,7 +115,8 @@ h6 {
.breadcrumb {
display: block;
font-weight: 500;
font-weight: 400;
font-size: var(--font-size-xs);
margin-bottom: var(--spacing-s);
a {

View File

@ -14,6 +14,7 @@
--font-size-caption: .8rem;
--font-size-body: 1rem;
--font-size-lead: 1.4rem;
--font-size-h3: 1.6rem;
--font-size-h2: 1.8rem;
--font-size-h1: 2.4rem;
@ -48,7 +49,7 @@
--spacing-sitepadding-block: 2rem;
--spacing-sitepadding-inline: 2rem;
--spacing-gap-column: var(--spacing-sitepadding-block);
--spacing-gap-row: calc(var(--spacing-gap-column)*-.25);
--spacing-gap-row: calc(var(--spacing-gap-column)* 0.75);
--spacing-xs: .5rem;
--spacing-s: 1rem;
--spacing-m: 2rem;

View File

@ -31,13 +31,8 @@ const documents = {
"\n query allVenues {\n venues: pages(contentType: \"venues.VenuePage\") {\n ... on VenuePage {\n ...Venue\n }\n }\n }\n ": types.AllVenuesDocument,
"\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\", limit: 3) {\n ... on NewsPage {\n ...News\n }\n }\n }\n ": types.HomeDocument,
"\n fragment RichTextBlock on RichTextBlock {\n rawValue\n value\n }\n": types.RichTextBlockFragmentDoc,
"\n fragment ImageWithTextBlock on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n": types.ImageWithTextBlockFragmentDoc,
"\n fragment ImageSliderBlock on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n": types.ImageSliderBlockFragmentDoc,
"\n fragment HorizontalRuleBlock on HorizontalRuleBlock {\n color\n }\n": types.HorizontalRuleBlockFragmentDoc,
"\n fragment FeaturedBlock on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\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": types.FeaturedBlockFragmentDoc,
"\n fragment OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n ...RichTextBlock\n }\n ... on ImageWithTextBlock {\n ...ImageWithTextBlock\n }\n ... on ImageSliderBlock {\n ...ImageSliderBlock\n }\n ... on HorizontalRuleBlock {\n ...HorizontalRuleBlock\n }\n ... on FeaturedBlock {\n ...FeaturedBlock\n }\n }\n": types.OneLevelOfBlocksFragmentDoc,
"\n fragment Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n\n }\n": types.BlocksFragmentDoc,
"\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 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 }\n": types.OneLevelOfBlocksFragmentDoc,
"\n fragment Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\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 Event on EventPage {\n __typename\n id\n slug\n title\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 query futureEvents {\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 }\n": types.FutureEventsDocument,
@ -135,31 +130,11 @@ 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.
*/
export function graphql(source: "\n fragment RichTextBlock on RichTextBlock {\n rawValue\n value\n }\n"): (typeof documents)["\n fragment RichTextBlock on RichTextBlock {\n rawValue\n value\n }\n"];
export function graphql(source: "\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 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 }\n"): (typeof documents)["\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 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 }\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 ImageWithTextBlock on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\n }\n"): (typeof documents)["\n fragment ImageWithTextBlock on ImageWithTextBlock {\n image {\n ...Image\n }\n imageFormat\n text\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 ImageSliderBlock on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\n }\n }\n }\n"): (typeof documents)["\n fragment ImageSliderBlock on ImageSliderBlock {\n images {\n ... on ImageSliderItemBlock {\n image {\n ...Image\n }\n text\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 HorizontalRuleBlock on HorizontalRuleBlock {\n color\n }\n"): (typeof documents)["\n fragment HorizontalRuleBlock on HorizontalRuleBlock {\n color\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 FeaturedBlock on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\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"): (typeof documents)["\n fragment FeaturedBlock on FeaturedBlock {\n title\n featuredBlockText: text\n linkText\n imagePosition\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"];
/**
* 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 OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n ...RichTextBlock\n }\n ... on ImageWithTextBlock {\n ...ImageWithTextBlock\n }\n ... on ImageSliderBlock {\n ...ImageSliderBlock\n }\n ... on HorizontalRuleBlock {\n ...HorizontalRuleBlock\n }\n ... on FeaturedBlock {\n ...FeaturedBlock\n }\n }\n"): (typeof documents)["\n fragment OneLevelOfBlocks on StreamFieldInterface {\n id\n blockType\n field\n ... on RichTextBlock {\n ...RichTextBlock\n }\n ... on ImageWithTextBlock {\n ...ImageWithTextBlock\n }\n ... on ImageSliderBlock {\n ...ImageSliderBlock\n }\n ... on HorizontalRuleBlock {\n ...HorizontalRuleBlock\n }\n ... on FeaturedBlock {\n ...FeaturedBlock\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 Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n\n }\n"): (typeof documents)["\n fragment Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n\n }\n"];
export function graphql(source: "\n fragment Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n"): (typeof documents)["\n fragment Blocks on StreamFieldInterface {\n ... on PageSectionBlock {\n title\n backgroundColor\n body {\n ...OneLevelOfBlocks\n }\n }\n ...OneLevelOfBlocks\n }\n"];
/**
* 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