diff --git a/package.json b/package.json index 4548e0a..3531da5 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@types/lodash": "^4.14.182", "@types/marked": "^4.0.3", "clsx": "^1.1.1", + "datocms-structured-text-to-html-string": "^2.0.4", "datocms-structured-text-to-plain-text": "^2.0.4", "graphql": "^16.3.0", "graphql-request": "^4.2.0", @@ -46,7 +47,8 @@ "react-merge-refs": "^1.1.0", "react-query": "^3.35.0", "react-use-measure": "^2.1.1", - "sharp": "^0.30.4" + "sharp": "^0.30.4", + "tiny-json-http": "^7.4.2" }, "devDependencies": { "@graphql-codegen/cli": "^2.6.2", @@ -55,6 +57,7 @@ "@types/node": "^17.0.25", "@types/react": "^17.0.43", "@types/react-dom": "^17.0.14", + "@types/tiny-json-http": "^7.3.1", "@typescript-eslint/eslint-plugin": "^5.20.0", "@typescript-eslint/parser": "^5.20.0", "cross-env": "^7.0.3", diff --git a/src/components/common/card/index.tsx b/src/components/common/card/index.tsx index d047d24..4e39186 100644 --- a/src/components/common/card/index.tsx +++ b/src/components/common/card/index.tsx @@ -1,7 +1,7 @@ import clsx from 'clsx' import NextLink from 'next/link' import { useRouter } from 'next/router' -import { useCallback } from 'react' +import { useCallback, useEffect, useState } from 'react' import { Calendar, Clock } from '~/components/icons/events' import Heading from '~/components/primitives/heading' @@ -20,12 +20,33 @@ interface CardProps { } const Card = ({ className, data, isNews = false }: CardProps) => { + const [eventDate, setEventDate] = useState() + const [eventTime, setEventTime] = useState() + + useEffect(() => { + setEventDate( + new Date(data?.eventDatetime).toLocaleDateString('default', { + year: '2-digit', + month: '2-digit', + day: '2-digit' + }) + ) + setEventTime( + new Date(data?.eventDatetime).toLocaleTimeString('default', { + hour: '2-digit', + minute: '2-digit' + }) + ) + }, [data?.eventDatetime]) + return ( - +
{!isNews && ( - {data?.location?.toUpperCase()} + + {data?.eventLocation?.toUpperCase()} + )}
{isNews && ( @@ -35,12 +56,12 @@ const Card = ({ className, data, isNews = false }: CardProps) => { )} {!isNews && } - {data?.date} + {isNews ? data?.date : eventDate} {!isNews && ( - {data?.time} HS + {eventTime} HS )}
@@ -49,15 +70,15 @@ const Card = ({ className, data, isNews = false }: CardProps) => { {data?.title}
- {data?.title} + {isNews ? data?.title : data?.eventTitle} -

{isNews ? getDescription(data) : data?.preview}

- +

{isNews ? getDescription(data) : data?.eventDesc}

+ {isNews ? 'READ ARTICLE' : 'LEARN MORE'}
diff --git a/src/components/sections/about/hero/index.tsx b/src/components/sections/about/hero/index.tsx index fe2a1e9..581edda 100644 --- a/src/components/sections/about/hero/index.tsx +++ b/src/components/sections/about/hero/index.tsx @@ -7,7 +7,18 @@ import Link from '~/components/primitives/link' import s from './hero.module.scss' -const Hero = () => { +interface Props { + data: { + heroCtaLabel: string + heroCtaLink: string + heroDescB01: string + heroDescB02: string + heroHeading: string + heroTitle: string + } +} + +const Hero = ({ data }: Props) => { return (
@@ -34,35 +45,24 @@ const Hero = () => {
- Accelerating Web3 + {data?.heroHeading}
- - We’re materializing a decentralized and interoperable future,{' '} - now - +
-

- For blockchain to achieve true decentralization and wider - adoption, we need to expand data access, verifiability, and - control for decentralized application developers and end - consumers around the world. -

-

- Led by a globally renowned team of architects and core - contributors across Ethereum, IPLD / IPFS, and Cosmos SDK, our - mission is to accelerate blockchain development, - interoperability, and adoption by providing decentralized - application (DApp) developers and users with greater access to - verifiable data. -

+

{data?.heroDescB01}

+

{data?.heroDescB02}

- FAQ + {data?.heroCtaLabel}
diff --git a/src/components/sections/about/team/index.tsx b/src/components/sections/about/team/index.tsx index a770e21..54bdc55 100644 --- a/src/components/sections/about/team/index.tsx +++ b/src/components/sections/about/team/index.tsx @@ -5,27 +5,43 @@ import Heading from '~/components/primitives/heading' import Team from './team' import s from './team.module.scss' -import { cercTeam, laconicTeam, xylmTeam } from './teams' -const TeamSection = () => { +interface Props { + data: { + teamHeading: string + teamDescB01: string + teamDescB02: string + } + teamData: { + memberGithub: string + memberImage: { + url: string + } + memberLinkedin: string + memberName: string + memberPosition: string + memberTeam: string + memberTwitter: string + }[] +} + +const TeamSection = ({ teamData, data }: Props) => { + const laconicTeam = teamData?.filter( + (member) => member.memberTeam === 'Laconic' + ) + const cercTeam = teamData?.filter((member) => member.memberTeam === 'Cerc') + const xylmTeam = teamData?.filter((member) => member.memberTeam === 'Xylm') + return (
- Team + {data?.teamHeading}
-

- Built over four years, Laconic is developed by platform experts - across Ethereum, IPLD / IPFS, and Cosmos SDK. Our project - organizations are led by Ethereum architects and developers who - co-authored and contributed to EIP-1559. -

-

- We’ve successfully launched startups, and built products and - communities loved by millions of people around the world. -

+

{data?.teamDescB01}

+

{data?.teamDescB02}

- {member.fullName} + {member?.memberName}
- {member.fullName} - {member.position} + {member?.memberName} + {member?.memberPosition}
- {member.twitter && ( - + {member?.memberTwitter && ( + )} - {member.github && ( - + {member?.memberGithub && ( + )} - {member.linkedin && ( - + {member?.memberLinkedin && ( + )} @@ -53,12 +59,15 @@ function MemberProfile({ member, className }: Team) { type Teams = { members: { - fullName: string - github: string - image: string - linkedin: string - position: string - twitter: string + memberGithub: string + memberImage: { + url: string + } + memberLinkedin: string + memberName: string + memberPosition: string + memberTeam: string + memberTwitter: string }[] teamName: string teamNumber: string diff --git a/src/components/sections/about/team/teams.ts b/src/components/sections/about/team/teams.ts deleted file mode 100644 index 66f3ed1..0000000 --- a/src/components/sections/about/team/teams.ts +++ /dev/null @@ -1,96 +0,0 @@ -export const laconicTeam = [ - { - fullName: 'Rick Dudley', - position: 'Chief Architect, Cerc', - image: '/images/about/team/rick-dudley.jpg', - github: 'https://github.com/AFDudley', - linkedin: 'https://www.linkedin.com/in/afdudley/', - twitter: 'https://twitter.com/AFDudley0' - }, - { - fullName: 'Maly Ly', - position: 'Chief Executive, Cerc', - image: '/images/about/team/maly-ly.jpg', - github: '', - linkedin: 'https://www.linkedin.com/in/malytly/', - twitter: 'https://twitter.com/malytly' - }, - { - fullName: 'Boris Mann', - position: 'CEO, Fission', - image: '/images/about/team/boris-mann.jpg', - github: 'https://github.com/bmann', - linkedin: 'https://www.linkedin.com/in/boris/', - twitter: 'https://twitter.com/bmann' - }, - { - fullName: 'Brooklyn Zelenka', - position: 'CTO, Fission', - image: '/images/about/team/brooklyn-zelenka.jpg', - github: 'https://github.com/expede', - linkedin: 'https://www.linkedin.com/in/brooklynzelenka/', - twitter: 'https://twitter.com/expede' - } -] - -export const cercTeam = [ - { - fullName: 'Ashwin Phatak', - position: 'VP of Engineering', - image: '/images/about/team/ashwin-phatak.jpg', - twitter: 'https://twitter.com/ashwinphatak', - linkedin: 'https://www.linkedin.com/in/ashwinphatak/', - github: 'https://github.com/ashwinphatak' - }, - { - fullName: 'Ian Norden', - position: 'Engineering Lead', - image: '/images/about/team/ian-norden.jpg', - twitter: '', - linkedin: 'https://www.linkedin.com/in/ian-s-norden/', - github: 'https://github.com/i-norden' - }, - { - fullName: 'Leah Light', - position: 'Operations Manager', - image: '/images/about/team/leah-light.jpg', - twitter: '', - linkedin: 'https://www.linkedin.com/in/leah-light-a308535/', - github: '' - }, - { - fullName: 'Erik Dies', - position: 'Product Lead', - image: '/images/about/team/erik-dies.jpg', - twitter: 'https://twitter.com/thelesserdies', - linkedin: '', - github: 'https://github.com/erikdies' - } -] - -export const xylmTeam = [ - { - fullName: 'Robert Douglass', - position: 'VP of Ecosystem', - image: '/images/about/team/robert-douglass.jpg', - twitter: 'https://twitter.com/robertDouglass', - linkedin: 'https://www.linkedin.com/in/roberttdouglass/', - github: '' - }, - { - fullName: 'Michael Gushansky', - position: 'Head of Marketing', - image: '/images/about/team/michael-gushansky.jpg', - twitter: 'https://twitter.com/mikegushansky', - linkedin: 'https://www.linkedin.com/in/michael-gushansky-08698384/', - github: '' - }, - { - fullName: 'Olive Kimoto', - position: 'Creative & Program Lead', - image: '/images/about/team/olive-kimoto.jpg', - twitter: 'https://twitter.com/olivekimoto', - linkedin: 'https://www.linkedin.com/in/olive-kimoto-71433b138/', - github: '' - } -] diff --git a/src/components/sections/community/events/events.ts b/src/components/sections/community/events/events.ts deleted file mode 100644 index 3dba8aa..0000000 --- a/src/components/sections/community/events/events.ts +++ /dev/null @@ -1,42 +0,0 @@ -export const events = [ - { - location: 'París, France', - date: '04.13.22', - time: '08:00', - imgSrc: '/images/community/events/card01.png', - title: 'Paris Blockchain Week', - preview: - 'PBW is the flagship event of Paris Blockchain Week gathering more than 3000 attendees, 70 sponsors, 250 speakers and 100 media partners.', - link: 'https://www.pbwsummit.com/' - }, - { - location: 'Amsterdam, Netherlands', - date: '04.18.22', - time: '09:00', - imgSrc: '/images/community/events/card02.png', - title: 'Devconnect', - preview: - 'Devconnect is a week-long in-person gathering that will feature independent Ethereum events, each with a unique focus.', - link: 'https://devconnect.org/' - }, - { - location: 'Austin, TX', - date: '06.09.22', - time: '09:00', - imgSrc: '/images/community/events/card03.png', - title: 'Consensus', - preview: - 'Consensus, the most influential crypto & blockchain experience of the year since 2015, will return to an in-person format and be held in Austin, Texas, for the first time ever.', - link: 'https://events.coindesk.com/consensus2022' - }, - { - location: 'Amsterdam, NL', - date: '07.19.22', - time: '19:30', - imgSrc: '/images/community/events/card04.png', - title: 'ETH CC', - preview: - 'The Ethereum Community Conference (EthCC) is the largest annual European Ethereum event focused on technology and community.', - link: 'https://ethcc.io/' - } -] diff --git a/src/components/sections/community/events/index.tsx b/src/components/sections/community/events/index.tsx index ae9456a..e4ddaeb 100644 --- a/src/components/sections/community/events/index.tsx +++ b/src/components/sections/community/events/index.tsx @@ -10,10 +10,27 @@ import { Container } from '~/components/layout/container' import Section from '~/components/layout/section' import Heading from '~/components/primitives/heading' -import { events } from './events' import s from './events.module.scss' -const Events = () => { +interface Props { + data: { + eventsHeading: string + eventsDescription: string + } + eventsData: { + eventDatetime: string + eventDesc: string + eventImage: { + url: string + } + eventLink: string + eventLocation: string + eventTitle: string + id: string + }[] +} + +const Events = ({ eventsData, data }: Props) => { const [loaded, setLoaded] = useState(false) const [sliderRef, slider] = useKeenSlider({ @@ -39,11 +56,9 @@ const Events = () => {
- Events + {data?.eventsHeading} - - We’d love to meet you in person. Find us at a conference near you: - + {data?.eventsDescription}
@@ -52,8 +67,8 @@ const Events = () => { className={clsx(s['events__container'], 'keen-slider')} ref={sliderRef} > - {events.map((event, i) => ( - + {eventsData.map((event) => ( + ))}
diff --git a/src/components/sections/community/hero/index.tsx b/src/components/sections/community/hero/index.tsx index ac52b77..56d632f 100644 --- a/src/components/sections/community/hero/index.tsx +++ b/src/components/sections/community/hero/index.tsx @@ -5,7 +5,18 @@ import Heading from '~/components/primitives/heading' import s from './hero.module.scss' -const Hero = () => { +interface Props { + data: { + heroButton01: string + heroButton02: string + heroB01Link: string + heroB02Link: string + heroDescription: string + heroHeading: string + } +} + +const Hero = ({ data }: Props) => { return (
@@ -30,32 +41,29 @@ const Hero = () => { />
- Laconic Community + {data?.heroHeading}
-

- Join us as we accelerate blockchain development and interoperability - by expanding access to verifiable data. -

+

{data?.heroDescription}

- CHAT WITH US + {data?.heroButton01} - GET STARTED + {data?.heroButton02}
diff --git a/src/components/sections/community/socials/index.tsx b/src/components/sections/community/socials/index.tsx index b7b235a..5684f74 100644 --- a/src/components/sections/community/socials/index.tsx +++ b/src/components/sections/community/socials/index.tsx @@ -17,7 +17,25 @@ import Heading from '~/components/primitives/heading' import s from './socials.module.scss' -const Socials = () => { +interface Props { + data: { + socialsHeading: string + socialsLine: string + socialsImage: { + url: string + } + socialsTwitter: string + socialsDiscord: string + socialsDiscourse: string + socialsReddit: string + socialsTelegram: string + socialsLinkedin: string + socialsFacebook: string + socialsInstagram: string + } +} + +const Socials = ({ data }: Props) => { return (
@@ -25,59 +43,75 @@ const Socials = () => { alt="Planet" className={s['planet--image']} loading="lazy" - src="/images/community/socials/planet.png" + src={data?.socialsImage?.url} />
- Connect With Us + {data?.socialsHeading}
- GET IN TOUCH + {data?.socialsLine}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + {data?.socialsTwitter && ( + + + + + + )} + {data?.socialsDiscord && ( + + + + + + )} + {data?.socialsDiscourse && ( + + + + + + )} + {data?.socialsReddit && ( + + + + + + )} + {data?.socialsTelegram && ( + + + + + + )} + {data?.socialsLinkedin && ( + + + + + + )} + {data?.socialsFacebook && ( + + + + + + )} + {data?.socialsInstagram && ( + + + + + + )}
diff --git a/src/components/sections/homepage/benefits/index.tsx b/src/components/sections/homepage/benefits/index.tsx index 37d0e31..6dbbb6a 100644 --- a/src/components/sections/homepage/benefits/index.tsx +++ b/src/components/sections/homepage/benefits/index.tsx @@ -28,12 +28,43 @@ import { Icon12 } from './icons' -const Benefits = () => { +interface Props { + data: { + benefitsHeading: string + benefitsDesc: string + benefitsS01Desc: string + benefitsS01Heading: string + benefitsS01Item01: string + benefitsS01Item02: string + benefitsS01Item03: string + benefitsS01Item04: string + benefitsS01Item05: string + benefitsS01Item06: string + benefitsS02Desc: string + benefitsS02Heading: string + benefitsS02Item01: string + benefitsS02Item02: string + benefitsS02Item03: string + benefitsS02Item04: string + benefitsS02Item05: string + benefitsS02Item06: string + benefitsButton: string + benefitsButtonLink: string + } +} + +const Benefits = ({ data }: Props) => { const ballRef = React.useRef(null) const gridRef = React.useRef(null) const userRef = React.useRef(null) const isMobile = useMedia('(max-width: 768px)') + const [isMounted, setIsMounted] = React.useState(false) + + React.useEffect(() => { + setIsMounted(true) + }, []) + useIsomorphicLayoutEffect(() => { if (isMobile || typeof isMobile === 'undefined') return if (!ballRef.current) return @@ -61,24 +92,16 @@ const Benefits = () => {
- Benefits + {data?.benefitsHeading}
-

- For DApp developers and users, Laconic is the only solution that - provides accurate, low-cost, multi-chain verifiable data, by - leveraging cryptographic proofs and cutting edge data caching - engineering.
-
{' '} - - Laconic is the only blockchain data querying solution that - provides cross-chain cryptographic proofs. - -

+ {isMounted && ( +

+ )}

{ 01 - For DApp Developers + {data?.benefitsS01Heading} -

- Quickly and easily build blockchain applications with the fastest, - most accurate, and lowest cost multi-chain verifiable data - solution. -

+

{data?.benefitsS01Desc}

    - }> - Only solution providing Cryptographic proofs - - }> - Composable, supports broader use cases - - }> - From months to minutes. Quick automated setup - - }>Broad cross-chain compatibility - }> - Unparalleled flexibility. Supports hash-linked data including - blockchain - - }> - Lower development and data costs. 100x of times less than market - + }>{data?.benefitsS01Item01} + }>{data?.benefitsS01Item02} + }>{data?.benefitsS01Item03} + }>{data?.benefitsS01Item04} + }>{data?.benefitsS01Item05} + }>{data?.benefitsS01Item06}
{ 02 - For DApp Users + {data?.benefitsS02Heading} -

- Experience a higher quality of service and better uptime with - Laconic. -

+

{data?.benefitsS02Desc}

    - }> - Greater data access and control - - }> - In-browser local cache, without need for data availability layer - - }> - Optimal control of privacy levels - - }>Self-Verify data accuracy - }> - Higher quality of service and uptime - - }> - LNT rewards for network participation - + }>{data?.benefitsS02Item01} + }>{data?.benefitsS02Item02} + }>{data?.benefitsS02Item03} + }>{data?.benefitsS02Item04} + }>{data?.benefitsS02Item05} + }>{data?.benefitsS02Item06}
- Get Started + {data?.benefitsButton} diff --git a/src/components/sections/homepage/hero/index.tsx b/src/components/sections/homepage/hero/index.tsx index 102c99c..49bb2f9 100644 --- a/src/components/sections/homepage/hero/index.tsx +++ b/src/components/sections/homepage/hero/index.tsx @@ -5,12 +5,22 @@ import Line from '~/components/icons/line' import Section from '~/components/layout/section' import { ButtonLink } from '~/components/primitives/button' import Heading from '~/components/primitives/heading' -import HighlightedText from '~/components/primitives/highlighted-text' import { useIsomorphicLayoutEffect } from '~/hooks/use-isomorphic-layout-effect' import s from './hero.module.scss' -const Hero = () => { +interface props { + data: { + heroHeading: string + heroButton01: string + heroB01Link: string + heroButton02: string + heroB02Link: string + heroSlogan: any + } +} + +const Hero = ({ data }: props) => { const videoRef = useRef(null) useIsomorphicLayoutEffect(() => { @@ -38,36 +48,30 @@ const Hero = () => { > - - Build a
{' '} - - Fast, Frictionless,
& Provable -
{' '} - Web3 -
- + -

- From months to minutes. Laconic’s multi-chain verifiable data
{' '} - marketplace accelerates blockchain development,
- interoperability, and adoption -

+
- JOIN US NOW + {data?.heroButton01} - CHAT WITH US + {data?.heroButton02}
diff --git a/src/components/sections/homepage/latest-news/index.tsx b/src/components/sections/homepage/latest-news/index.tsx index 0b9ed66..602fbb0 100644 --- a/src/components/sections/homepage/latest-news/index.tsx +++ b/src/components/sections/homepage/latest-news/index.tsx @@ -13,10 +13,13 @@ import s from './latest-news.module.scss' // TODO export interface Props { - data: any + blogData: any + data: { + latestHeading: string + } } -const LatestNews = ({ data }: Props) => { +const LatestNews = ({ data, blogData }: Props) => { const [loaded, setLoaded] = useState(false) const [sliderRef, slider] = useKeenSlider({ @@ -40,13 +43,15 @@ const LatestNews = ({ data }: Props) => { return (
- - Latest news
from Laconic -
+
- {data.map((item: any, i: Key) => ( + {blogData.map((item: any, i: Key) => ( ))}
diff --git a/src/components/sections/homepage/what-others-say/index.tsx b/src/components/sections/homepage/what-others-say/index.tsx index 4c7b4a0..9fae35b 100644 --- a/src/components/sections/homepage/what-others-say/index.tsx +++ b/src/components/sections/homepage/what-others-say/index.tsx @@ -11,10 +11,24 @@ import Heading from '~/components/primitives/heading' import { CUSTOM_EASE, DURATION, gsap, Observer } from '~/lib/gsap' import Item from './item' -import { testimonials } from './testimonials' import s from './what-others-say.module.scss' -const WhatOthersSay = () => { +interface Props { + data: { + othersHeading: string + } + testimonialsData: { + id: string + testimonialImage: { + url: string + } + testimonialPosition: string + testimonialText: string + testimonialUsername: string + }[] +} + +const WhatOthersSay = ({ data, testimonialsData }: Props) => { const carouselRef = useRef(null) const { vw } = useRealViewport() const [ref] = useKeenSlider({ @@ -78,25 +92,26 @@ const WhatOthersSay = () => {
- - What
others say -
+
-
Head
- - {testimonials.map((testimonial, index) => { + {testimonialsData.map((testimonial) => { return ( - {testimonial.text} + {testimonial?.testimonialText} ) })} @@ -106,15 +121,15 @@ const WhatOthersSay = () => {
Head
- {testimonials.map((testimonial, index) => { + {testimonialsData.map((testimonial) => { return ( - {testimonial.text} + {testimonial?.testimonialText} ) })} diff --git a/src/components/sections/homepage/what-others-say/testimonials.tsx b/src/components/sections/homepage/what-others-say/testimonials.tsx deleted file mode 100644 index 9cd5153..0000000 --- a/src/components/sections/homepage/what-others-say/testimonials.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import Square from '~/components/logos/square' - -export const testimonials = [ - { - image: - 'https://pbs.twimg.com/profile_images/1513509255302856718/I9DHE-BG_400x400.jpg', - name: '@rickmanelius', - position: 'CO-Founder', - logo: , - text: "If you love web3 infra layer tools/solutions, give @laconicnetwork a follow. I'm incredibly excited with what they have coming down the pipeline" - }, - { - image: - 'https://pbs.twimg.com/profile_images/1467983835627286529/eeb-wHtV_400x400.jpg', - name: '@kumavis', - position: 'CO-Founder', - logo: , - text: 'Running infura for free is actually extremely expensive, we pursued a light client before but it required a fresh implementation. hopefully @laconicnetwork solves this problem' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1478264960581091330/I1PG8TSU_400x400.jpg', - name: '@OnChainDreamer', - position: 'CO-Founder', - logo: , - text: '@laconicnetwork > really smart ppl follows b4 launch' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1510473579128893446/wkH_3gq3_400x400.jpg', - name: '@GarretteDVF', - position: 'CO-Founder', - logo: , - text: 'Will also need light clients. Gamer profiles will need some form of p2p gossip on their ranking over time, which makes a good case for composable state information (assuming games are settled on the chain). I would look to @laconicnetwork for some of that.' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1502059383651549188/w1s1xEnA_400x400.jpg', - name: '@Lifechart3', - position: 'CO-Founder', - logo: , - text: 'Patiently waiting for @laconicnetwork Launch 😎' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1513509255302856718/I9DHE-BG_400x400.jpg', - name: '@rickmanelius', - position: 'CO-Founder', - logo: , - text: "If you love web3 infra layer tools/solutions, give @laconicnetwork a follow. I'm incredibly excited with what they have coming down the pipeline" - }, - { - image: - 'https://pbs.twimg.com/profile_images/1467983835627286529/eeb-wHtV_400x400.jpg', - name: '@kumavis', - position: 'CO-Founder', - logo: , - text: 'Running infura for free is actually extremely expensive, we pursued a light client before but it required a fresh implementation. hopefully @laconicnetwork solves this problem' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1478264960581091330/I1PG8TSU_400x400.jpg', - name: '@OnChainDreamer', - position: 'CO-Founder', - logo: , - text: '@laconicnetwork > really smart ppl follows b4 launch' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1510473579128893446/wkH_3gq3_400x400.jpg', - name: '@GarretteDVF', - position: 'CO-Founder', - logo: , - text: 'Will also need light clients. Gamer profiles will need some form of p2p gossip on their ranking over time, which makes a good case for composable state information (assuming games are settled on the chain). I would look to @laconicnetwork for some of that.' - }, - { - image: - 'https://pbs.twimg.com/profile_images/1502059383651549188/w1s1xEnA_400x400.jpg', - name: '@Lifechart3', - position: 'CO-Founder', - logo: , - text: 'Patiently waiting for @laconicnetwork Launch 😎' - } -] diff --git a/src/components/sections/privacy/privacypolicy/index.tsx b/src/components/sections/privacy/privacypolicy/index.tsx index 4971946..36cc495 100644 --- a/src/components/sections/privacy/privacypolicy/index.tsx +++ b/src/components/sections/privacy/privacypolicy/index.tsx @@ -1,31 +1,39 @@ +import { useEffect, useState } from 'react' + import { Container } from '~/components/layout/container' import Section from '~/components/layout/section' -import Heading from '~/components/primitives/heading' import s from '~/components/sections/terms/termsofuse/termsofuse.module.scss' +import CustomStructuredText from '~/lib/renderer' -import { privacyPolicy } from './privacypolicy' +interface Props { + data: { + privacyContent: any + _updatedAt: string + } +} + +const PrivacyPolicy = ({ data }: Props) => { + const [updatedOnDate, setUpdatedOnDate] = useState() + + useEffect(() => { + setUpdatedOnDate( + new Date(data?._updatedAt).toLocaleDateString('default', { + day: '2-digit', + month: '2-digit', + year: '2-digit' + }) + ) + }, [data?._updatedAt]) -const PrivacyPolicy = () => { return (
LAST UPDATE - {privacyPolicy.updatedOn} + {updatedOnDate}
-

{privacyPolicy.text.block01.pg01}

-

{privacyPolicy.text.block01.pg02}

-

{privacyPolicy.text.block01.pg03}

-

{privacyPolicy.text.block01.pg04}

- - {privacyPolicy.text.block02.title} - -

{privacyPolicy.text.block02.pg01}

- - {privacyPolicy.text.block03.title} - -

{privacyPolicy.text.block03.pg01}

+
) diff --git a/src/components/sections/privacy/privacypolicy/privacypolicy.ts b/src/components/sections/privacy/privacypolicy/privacypolicy.ts deleted file mode 100644 index 4607ac5..0000000 --- a/src/components/sections/privacy/privacypolicy/privacypolicy.ts +++ /dev/null @@ -1,21 +0,0 @@ -export const privacyPolicy = { - updatedOn: '01.31.22', - text: { - block01: { - pg01: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ornare aliquam pretium. Nullam id massa non augue suscipit porttitor quis quis dolor. Pellentesque porttitor sed turpis vitae pulvinar. Pellentesque a est venenatis, scelerisque lacus ac, vulputate lectus. Etiam porttitor sagittis nisi sit amet lacinia. Cras gravida ultricies porta. Curabitur semper nulla nisi, eget suscipit purus blandit porttitor. Fusce sagittis luctus sapien ut volutpat. Donec luctus, tellus nec gravida ullamcorper, ligula lacus sagittis lacus, ultrices ultricies dolor ligula vitae orci. Quisque a nisi nunc. Maecenas mattis dui id sem porta ultrices.', - pg02: 'Duis quis leo non ex gravida placerat a ac urna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus facilisis ipsum ut risus egestas ornare. Phasellus et leo eu purus hendrerit auctor. Nam accumsan enim nec massa semper, vel porttitor neque efficitur. Duis a convallis nulla, a mattis turpis. Mauris a blandit ex. Phasellus sit amet vestibulum purus. Maecenas rutrum pretium lectus ut tincidunt. Donec mollis quam sit amet condimentum lacinia.', - - pg03: 'In elementum et felis in elementum. Maecenas nunc nisi, pretium a lobortis interdum, venenatis ut erat. Cras euismod dignissim molestie. Proin commodo nisl at risus gravida facilisis. Donec sit amet magna odio. Pellentesque posuere in risus nec vehicula. Etiam euismod risus eget congue placerat. Pellentesque nec orci ac velit finibus semper a egestas nunc. Integer venenatis, libero sed faucibus tincidunt, massa lorem ullamcorper lacus, quis dignissim libero dolor a nunc. Suspendisse eu accumsan nisi. Integer vitae maximus purus. Nam ut velit a eros tristique feugiat accumsan vitae ex. Pellentesque metus urna, varius non nisl non, molestie sodales diam. Proin sit amet ullamcorper justo. Mauris vehicula dictum imperdiet. Etiam laoreet diam at nunc consectetur sollicitudin.', - - pg04: 'Pellentesque ante libero, pellentesque ac sodales et, consectetur a ipsum. Integer aliquam massa et mattis tristique. Praesent id egestas magna. Nam cursus, lectus ac ornare convallis, nisl metus euismod nibh, sed fermentum velit nulla eu neque. Quisque pulvinar enim vel metus aliquam congue. Aenean sit amet ex euismod, ultrices sem quis, dapibus leo. Ut luctus pellentesque orci, fermentum porttitor libero congue eu.' - }, - block02: { - title: '1. Lorem Ipsum', - pg01: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - }, - block03: { - title: '2. Lorem Ipsum', - pg01: 'Quisque id tristique quam, vitae feugiat orci. Nulla vel nulla et massa fringilla faucibus. Suspendisse semper arcu nec leo maximus fringilla. Praesent id elementum turpis. Cras sit amet nunc sed nunc tempus placerat vel ultrices urna. Aenean scelerisque porta massa, vel sodales turpis porta quis. Aliquam euismod neque ac eros dictum, ac dapibus risus convallis. Mauris risus orci, porttitor et semper eu, accumsan a tellus. Ut posuere venenatis urna sit amet laoreet. Curabitur id justo ut lacus pretium ultrices et in tortor. Phasellus dignissim, justo quis dapibus viverra, nulla justo faucibus sem, quis tristique nulla mi nec purus. Morbi dolor magna, congue ut tempor id, vestibulum et eros. Praesent at quam purus. Nam eget tincidunt tellus, non tristique quam. Vivamus nulla libero, placerat et orci ac.' - } - } -} diff --git a/src/components/sections/products/app/app.module.scss b/src/components/sections/products/app/app.module.scss index 5993634..b912f40 100644 --- a/src/components/sections/products/app/app.module.scss +++ b/src/components/sections/products/app/app.module.scss @@ -41,7 +41,7 @@ line-height: 1.35; font-size: tovw(30px, 'default', 18px); - width: tovw(635px, 'default', 300px); + width: tovw(585px, 'default', 300px); margin-top: tovw(62px, 'default', 30px); } } @@ -61,7 +61,7 @@ } top: tovw(-250px); - left: tovw(-400px); + left: tovw(-350px); width: tovw(1060px, 'default', 300px); position: absolute; diff --git a/src/components/sections/products/app/index.tsx b/src/components/sections/products/app/index.tsx index 8f6eb37..d2ad8dc 100644 --- a/src/components/sections/products/app/index.tsx +++ b/src/components/sections/products/app/index.tsx @@ -4,31 +4,36 @@ import Heading from '~/components/primitives/heading' import s from './app.module.scss' -const AppSection = () => { +interface Props { + data: { + appDescription: string + appHeading: string + appImg: { + url: string + } + appMobileImg: { + url: string + } + } +} + +const AppSection = ({ data }: Props) => { return (
- token + app token
- Laconic App + {data?.appHeading} -

- Laconic Wallet leverages an in-browser IPFS payment channel, - enabling users of the network to transact quickly and easily with - LNT and ERC20 tokens. -

+

{data?.appDescription}

diff --git a/src/components/sections/products/hero/index.tsx b/src/components/sections/products/hero/index.tsx index ac177c4..cbce06c 100644 --- a/src/components/sections/products/hero/index.tsx +++ b/src/components/sections/products/hero/index.tsx @@ -7,7 +7,23 @@ import Heading from '~/components/primitives/heading' import s from './hero.module.scss' -const Hero = () => { +interface Props { + data: { + heroHeading: string + heroDescription: string + heroItem01: string + heroItem02: string + heroItem03: string + heroItem04: string + heroItem05: string + heroS01Heading: string + heroS01Desc: string + heroS02Heading: string + heroS02Desc: string + } +} + +const Hero = ({ data }: Props) => { const heroVideoRef = useRef(null) // const loop = () => { @@ -42,43 +58,31 @@ const Hero = () => {
- Products + {data?.heroHeading}
-

- Laconic is the only data solution that provides accurate, - low-cost, multi-chain, verifiable blockchain data by leveraging - cryptographic proofs, cutting-edge data-caching engineering, and a - secure verifiable data marketplace: -

+

{data?.heroDescription}

    -
  1. Laconic Watchers (SDK)
  2. -
  3. Laconic Stack
  4. -
  5. Laconic Network
  6. -
  7. Laconic App
  8. -
  9. Laconic Network Token (LNT)
  10. +
  11. {data?.heroItem01}
  12. +
  13. {data?.heroItem02}
  14. +
  15. {data?.heroItem03}
  16. +
  17. {data?.heroItem04}
  18. +
  19. {data?.heroItem05}
- DeFi + {data?.heroS01Heading} -

- Laconic enables simple and efficient DApp development, and the - most flexible views of the Ethereum state. -

+

{data?.heroS01Desc}

- NFTs + {data?.heroS02Heading} -

- Laconic exposes cross-chain history and metadata associated - with an NFT, enabling provably accurate data for DApps and - Marketplaces. -

+

{data?.heroS02Desc}

diff --git a/src/components/sections/products/network/index.tsx b/src/components/sections/products/network/index.tsx index a828f08..0d72a37 100644 --- a/src/components/sections/products/network/index.tsx +++ b/src/components/sections/products/network/index.tsx @@ -5,49 +5,54 @@ import Heading from '~/components/primitives/heading' import s from './network.module.scss' -const Network = () => { +interface Props { + data: { + networkHeading: string + networkDesc: string + networkListItem01: string + networkListItem02: string + networkListItem03: string + networkImg: { + url: string + } + networkMobileImg: { + url: string + } + } +} + +const Network = ({ data }: Props) => { return (
- Laconic Network + {data?.networkHeading} -

- An open, interoperable, verifiable data marketplace and ecosystem of - service providers, DApp operators, and data consumers providing - low-cost, decentralized, and disintermediated horizontal scaling - solutions for projects leveraging Laconic Stack. -

+

{data?.networkDesc}

network
-

- Seamlessly connects DApps and bridges with data service - providers -

+

{data?.networkListItem01}

-

Leverages state-channel-based payment infrastructure

+

{data?.networkListItem02}

-

- Provides highest quality services at the lowest prices via - marketplace model -

+

{data?.networkListItem03}

network
diff --git a/src/components/sections/products/stack/index.tsx b/src/components/sections/products/stack/index.tsx index 0fb6c4d..058b052 100644 --- a/src/components/sections/products/stack/index.tsx +++ b/src/components/sections/products/stack/index.tsx @@ -1,30 +1,44 @@ -// import { Arrow } from '~/components/icons/arrow' import Line from '~/components/icons/line' import { Container } from '~/components/layout/container' import Section from '~/components/layout/section' import Heading from '~/components/primitives/heading' -// import Link from '~/components/primitives/link' -import { stackData } from './stack' import s from './stack.module.scss' -const Stack = () => { +interface Props { + data: { + stackDescription: string + stackHeading: string + stackListData: { + stackData: { + title: string + content: string + }[] + } + stackImage: { + url: string + } + stackSvgImg: { + url: string + } + } +} + +const Stack = ({ data }: Props) => { + const stackData = data?.stackListData?.stackData + return (
- Laconic Stack + {data?.stackHeading} -

- Laconic Stack is a set of essential and verifiable technologies and - services that significantly simplify DApp development and make DApps - accessible to a wider audience of developers. -

+

{data?.stackDescription}

    - {stackData.map((item) => ( + {stackData?.map((item) => (
  1. @@ -40,12 +54,12 @@ const Stack = () => {
    stack stack
    diff --git a/src/components/sections/products/token/index.tsx b/src/components/sections/products/token/index.tsx index 3833175..5a623b1 100644 --- a/src/components/sections/products/token/index.tsx +++ b/src/components/sections/products/token/index.tsx @@ -5,48 +5,52 @@ import Heading from '~/components/primitives/heading' import s from './token.module.scss' -const Token = () => { +interface Props { + data: { + tokenHeading: string + tokenDesc: string + tokenItem01: string + tokenItem02: string + tokenItem03: string + tokenImg: { + url: string + } + tokenMobileImg: { + url: string + } + } +} + +const Token = ({ data }: Props) => { return (
    - Laconic Network Token + {data?.tokenHeading} -

    - With a fixed total supply, Laconic Network Token (LNT) serves - multiple functions in the Network design, most saliently by securing - incentive alignment across network stakeholders. LNT also allows for - seamless payments across services, regardless of blockchain or DApp. -

    +

    {data?.tokenDesc}

    token
    - -

    Distribute rewards to staked users

    + item +

    {data?.tokenItem01}

    - -

    Provide service discounts

    + item +

    {data?.tokenItem02}

    - -

    - Distribute funds to community participants for Network - maintenance and development -

    + item +

    {data?.tokenItem03}

    - token + token
    ) diff --git a/src/components/sections/products/watchers/index.tsx b/src/components/sections/products/watchers/index.tsx index 935ded9..578a6e2 100644 --- a/src/components/sections/products/watchers/index.tsx +++ b/src/components/sections/products/watchers/index.tsx @@ -5,64 +5,64 @@ import Heading from '~/components/primitives/heading' import s from './watchers.module.scss' -const Watchers = () => { +interface Props { + data: { + watchersHeading: string + watchersImage: { + url: string + } + watchersMobileImage: { + url: string + } + watchersItem01: string + watchersItem02: string + watchersItem03: string + watchersListHead: string + watchersP01: string + watchersP02: string + } +} + +const Watchers = ({ data }: Props) => { return (
    -

    - Developers can leverage the Laconic SDK to develop Watchers, which - are the components of the Laconic Network that makes DApp - development fast and frictionless. Watchers are custom caches of - IPLD blocks. By providing proofs with our IPLD versions of Ethereum - data, a DApp can be fully verifiable with hundreds of megabytes - instead of the tens of terabytes an archive node requires, - dramatically increasing speed and efficiency, and lowering costs. -

    -

    - With the services of a Watcher, a DApp developer can exactly define - and customize the API they need. The Watcher runs queries that are - efficient and relevant to the DApp. Another key benefit of Watchers - is that they are composable, enabling a developer to reference data - previously derived from the Ethereum blockchain by means of another - Watcher, within their Watcher. -

    -

    A Watcher serves three fundamental purposes:

    +

    {data?.watchersP01}

    +

    {data?.watchersP02}

    +

    {data?.watchersListHead}

    network
    1. -

      It queries precisely the data a DApp needs.

      +

      {data?.watchersItem01}

    2. -

      - It transforms the queried data to make it consumable to the - DApp. -

      +

      {data?.watchersItem02}

    3. -

      It caches the data for fast and inexpensive access.

      +

      {data?.watchersItem03}

    - - Laconic -
    Watchers -
    - (SDK) -
    + + network
    diff --git a/src/components/sections/terms/termsofuse/index.tsx b/src/components/sections/terms/termsofuse/index.tsx index 50caf22..613e52f 100644 --- a/src/components/sections/terms/termsofuse/index.tsx +++ b/src/components/sections/terms/termsofuse/index.tsx @@ -1,31 +1,40 @@ +import { useEffect, useState } from 'react' + import { Container } from '~/components/layout/container' import Section from '~/components/layout/section' -import Heading from '~/components/primitives/heading' +import CustomStructuredText from '~/lib/renderer' -import { termsOfUse } from './termsofuse' import s from './termsofuse.module.scss' -const TermsOfUse = () => { +interface Props { + data: { + termsContent: any + _updatedAt: string + } +} + +const TermsOfUse = ({ data }: Props) => { + const [updatedOnDate, setUpdatedOnDate] = useState() + + useEffect(() => { + setUpdatedOnDate( + new Date(data?._updatedAt).toLocaleDateString('default', { + day: '2-digit', + month: '2-digit', + year: '2-digit' + }) + ) + }, [data?._updatedAt]) + return (
    LAST UPDATE - {termsOfUse.updatedOn} + {updatedOnDate}
    -

    {termsOfUse.text.block01.pg01}

    -

    {termsOfUse.text.block01.pg02}

    -

    {termsOfUse.text.block01.pg03}

    -

    {termsOfUse.text.block01.pg04}

    - - {termsOfUse.text.block02.title} - -

    {termsOfUse.text.block02.pg01}

    - - {termsOfUse.text.block03.title} - -

    {termsOfUse.text.block03.pg01}

    +
    ) diff --git a/src/components/sections/terms/termsofuse/termsofuse.ts b/src/components/sections/terms/termsofuse/termsofuse.ts deleted file mode 100644 index 7d3de4f..0000000 --- a/src/components/sections/terms/termsofuse/termsofuse.ts +++ /dev/null @@ -1,21 +0,0 @@ -export const termsOfUse = { - updatedOn: '01.31.22', - text: { - block01: { - pg01: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ornare aliquam pretium. Nullam id massa non augue suscipit porttitor quis quis dolor. Pellentesque porttitor sed turpis vitae pulvinar. Pellentesque a est venenatis, scelerisque lacus ac, vulputate lectus. Etiam porttitor sagittis nisi sit amet lacinia. Cras gravida ultricies porta. Curabitur semper nulla nisi, eget suscipit purus blandit porttitor. Fusce sagittis luctus sapien ut volutpat. Donec luctus, tellus nec gravida ullamcorper, ligula lacus sagittis lacus, ultrices ultricies dolor ligula vitae orci. Quisque a nisi nunc. Maecenas mattis dui id sem porta ultrices.', - pg02: 'Duis quis leo non ex gravida placerat a ac urna. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus facilisis ipsum ut risus egestas ornare. Phasellus et leo eu purus hendrerit auctor. Nam accumsan enim nec massa semper, vel porttitor neque efficitur. Duis a convallis nulla, a mattis turpis. Mauris a blandit ex. Phasellus sit amet vestibulum purus. Maecenas rutrum pretium lectus ut tincidunt. Donec mollis quam sit amet condimentum lacinia.', - - pg03: 'In elementum et felis in elementum. Maecenas nunc nisi, pretium a lobortis interdum, venenatis ut erat. Cras euismod dignissim molestie. Proin commodo nisl at risus gravida facilisis. Donec sit amet magna odio. Pellentesque posuere in risus nec vehicula. Etiam euismod risus eget congue placerat. Pellentesque nec orci ac velit finibus semper a egestas nunc. Integer venenatis, libero sed faucibus tincidunt, massa lorem ullamcorper lacus, quis dignissim libero dolor a nunc. Suspendisse eu accumsan nisi. Integer vitae maximus purus. Nam ut velit a eros tristique feugiat accumsan vitae ex. Pellentesque metus urna, varius non nisl non, molestie sodales diam. Proin sit amet ullamcorper justo. Mauris vehicula dictum imperdiet. Etiam laoreet diam at nunc consectetur sollicitudin.', - - pg04: 'Pellentesque ante libero, pellentesque ac sodales et, consectetur a ipsum. Integer aliquam massa et mattis tristique. Praesent id egestas magna. Nam cursus, lectus ac ornare convallis, nisl metus euismod nibh, sed fermentum velit nulla eu neque. Quisque pulvinar enim vel metus aliquam congue. Aenean sit amet ex euismod, ultrices sem quis, dapibus leo. Ut luctus pellentesque orci, fermentum porttitor libero congue eu.' - }, - block02: { - title: '1. Lorem Ipsum', - pg01: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - }, - block03: { - title: '2. Lorem Ipsum', - pg01: 'Quisque id tristique quam, vitae feugiat orci. Nulla vel nulla et massa fringilla faucibus. Suspendisse semper arcu nec leo maximus fringilla. Praesent id elementum turpis. Cras sit amet nunc sed nunc tempus placerat vel ultrices urna. Aenean scelerisque porta massa, vel sodales turpis porta quis. Aliquam euismod neque ac eros dictum, ac dapibus risus convallis. Mauris risus orci, porttitor et semper eu, accumsan a tellus. Ut posuere venenatis urna sit amet laoreet. Curabitur id justo ut lacus pretium ultrices et in tortor. Phasellus dignissim, justo quis dapibus viverra, nulla justo faucibus sem, quis tristique nulla mi nec purus. Morbi dolor magna, congue ut tempor id, vestibulum et eros. Praesent at quam purus. Nam eget tincidunt tellus, non tristique quam. Vivamus nulla libero, placerat et orci ac.' - } - } -} diff --git a/src/css/global.scss b/src/css/global.scss index b067938..935fee3 100644 --- a/src/css/global.scss +++ b/src/css/global.scss @@ -102,6 +102,10 @@ p { font-size: tovw(24px, 'default', 18px); } +.highlight { + color: var(--color-accent); +} + .sr-only { position: absolute; border: 0; diff --git a/src/lib/cms/generated.ts b/src/lib/cms/generated.ts index c087724..3f3dedf 100644 --- a/src/lib/cms/generated.ts +++ b/src/lib/cms/generated.ts @@ -1,50 +1,56 @@ -import { GraphQLClient } from 'graphql-request'; -import * as Dom from 'graphql-request/dist/types.dom'; -import gql from 'graphql-tag'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +import { GraphQLClient } from 'graphql-request' +import * as Dom from 'graphql-request/dist/types.dom' +import gql from 'graphql-tag' +export type Maybe = T | null +export type InputMaybe = Maybe +export type Exact = { + [K in keyof T]: T[K] +} +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe +} +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe +} /** All built-in and custom scalars, mapped to their actual values */ export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; + ID: string + String: string + Boolean: boolean + Int: number + Float: number /** Represents `true` or `false` values. */ - BooleanType: any; - CustomData: any; + BooleanType: any + CustomData: any /** A ISO 8601 compliant date value */ - Date: any; + Date: any /** A ISO 8601 compliant datetime value */ - DateTime: any; + DateTime: any /** Represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). */ - FloatType: any; + FloatType: any /** Represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. */ - IntType: any; - ItemId: any; - JsonField: any; - MetaTagAttributes: any; - UploadId: any; -}; + IntType: any + ItemId: any + JsonField: any + MetaTagAttributes: any + UploadId: any +} export type AuthorModelFilter = { - OR?: InputMaybe>>; - _createdAt?: InputMaybe; - _firstPublishedAt?: InputMaybe; - _isValid?: InputMaybe; - _publicationScheduledAt?: InputMaybe; - _publishedAt?: InputMaybe; - _status?: InputMaybe; - _unpublishingScheduledAt?: InputMaybe; - _updatedAt?: InputMaybe; - createdAt?: InputMaybe; - id?: InputMaybe; - name?: InputMaybe; - updatedAt?: InputMaybe; -}; + OR?: InputMaybe>> + _createdAt?: InputMaybe + _firstPublishedAt?: InputMaybe + _isValid?: InputMaybe + _publicationScheduledAt?: InputMaybe + _publishedAt?: InputMaybe + _status?: InputMaybe + _unpublishingScheduledAt?: InputMaybe + _updatedAt?: InputMaybe + createdAt?: InputMaybe + id?: InputMaybe + name?: InputMaybe + updatedAt?: InputMaybe +} export enum AuthorModelOrderBy { _createdAt_ASC = '_createdAt_ASC', @@ -75,60 +81,59 @@ export enum AuthorModelOrderBy { /** Record of type Author (author) */ export type AuthorRecord = { - __typename?: 'AuthorRecord'; - _createdAt: Scalars['DateTime']; - _firstPublishedAt?: Maybe; - _isValid: Scalars['BooleanType']; - _modelApiKey: Scalars['String']; - _publicationScheduledAt?: Maybe; - _publishedAt?: Maybe; + __typename?: 'AuthorRecord' + _createdAt: Scalars['DateTime'] + _firstPublishedAt?: Maybe + _isValid: Scalars['BooleanType'] + _modelApiKey: Scalars['String'] + _publicationScheduledAt?: Maybe + _publishedAt?: Maybe /** SEO meta tags */ - _seoMetaTags: Array; - _status: ItemStatus; - _unpublishingScheduledAt?: Maybe; - _updatedAt: Scalars['DateTime']; - createdAt: Scalars['DateTime']; - id: Scalars['ItemId']; - name?: Maybe; - updatedAt: Scalars['DateTime']; -}; - + _seoMetaTags: Array + _status: ItemStatus + _unpublishingScheduledAt?: Maybe + _updatedAt: Scalars['DateTime'] + createdAt: Scalars['DateTime'] + id: Scalars['ItemId'] + name?: Maybe + updatedAt: Scalars['DateTime'] +} /** Record of type Author (author) */ export type AuthorRecord_SeoMetaTagsArgs = { - locale?: InputMaybe; -}; + locale?: InputMaybe +} -export type BlogPostModelContentBlocksField = CtaRecord | ImageRecord; +export type BlogPostModelContentBlocksField = CtaRecord | ImageRecord export type BlogPostModelContentField = { - __typename?: 'BlogPostModelContentField'; - blocks: Array; - links: Array; - value: Scalars['JsonField']; -}; + __typename?: 'BlogPostModelContentField' + blocks: Array + links: Array + value: Scalars['JsonField'] +} export type BlogPostModelFilter = { - OR?: InputMaybe>>; - _createdAt?: InputMaybe; - _firstPublishedAt?: InputMaybe; - _isValid?: InputMaybe; - _publicationScheduledAt?: InputMaybe; - _publishedAt?: InputMaybe; - _status?: InputMaybe; - _unpublishingScheduledAt?: InputMaybe; - _updatedAt?: InputMaybe; - author?: InputMaybe; - category?: InputMaybe; - content?: InputMaybe; - createdAt?: InputMaybe; - date?: InputMaybe; - id?: InputMaybe; - image?: InputMaybe; - slug?: InputMaybe; - title?: InputMaybe; - updatedAt?: InputMaybe; -}; + OR?: InputMaybe>> + _createdAt?: InputMaybe + _firstPublishedAt?: InputMaybe + _isValid?: InputMaybe + _publicationScheduledAt?: InputMaybe + _publishedAt?: InputMaybe + _status?: InputMaybe + _unpublishingScheduledAt?: InputMaybe + _updatedAt?: InputMaybe + author?: InputMaybe + category?: InputMaybe + content?: InputMaybe + createdAt?: InputMaybe + date?: InputMaybe + id?: InputMaybe + image?: InputMaybe + slug?: InputMaybe + title?: InputMaybe + updatedAt?: InputMaybe +} export enum BlogPostModelOrderBy { _createdAt_ASC = '_createdAt_ASC', @@ -163,58 +168,57 @@ export enum BlogPostModelOrderBy { /** Record of type Blog Post (blog_post) */ export type BlogPostRecord = { - __typename?: 'BlogPostRecord'; - _createdAt: Scalars['DateTime']; - _firstPublishedAt?: Maybe; - _isValid: Scalars['BooleanType']; - _modelApiKey: Scalars['String']; - _publicationScheduledAt?: Maybe; - _publishedAt?: Maybe; + __typename?: 'BlogPostRecord' + _createdAt: Scalars['DateTime'] + _firstPublishedAt?: Maybe + _isValid: Scalars['BooleanType'] + _modelApiKey: Scalars['String'] + _publicationScheduledAt?: Maybe + _publishedAt?: Maybe /** SEO meta tags */ - _seoMetaTags: Array; - _status: ItemStatus; - _unpublishingScheduledAt?: Maybe; - _updatedAt: Scalars['DateTime']; - author?: Maybe; - category: Array; - content?: Maybe; - createdAt: Scalars['DateTime']; - date?: Maybe; - id: Scalars['ItemId']; - image?: Maybe; - slug?: Maybe; - title?: Maybe; - updatedAt: Scalars['DateTime']; -}; - + _seoMetaTags: Array + _status: ItemStatus + _unpublishingScheduledAt?: Maybe + _updatedAt: Scalars['DateTime'] + author?: Maybe + category: Array + content?: Maybe + createdAt: Scalars['DateTime'] + date?: Maybe + id: Scalars['ItemId'] + image?: Maybe + slug?: Maybe + title?: Maybe + updatedAt: Scalars['DateTime'] +} /** Record of type Blog Post (blog_post) */ export type BlogPostRecord_SeoMetaTagsArgs = { - locale?: InputMaybe; -}; + locale?: InputMaybe +} /** Specifies how to filter Boolean fields */ export type BooleanFilter = { /** Search for records with an exact match */ - eq?: InputMaybe; -}; + eq?: InputMaybe +} export type CategoryModelFilter = { - OR?: InputMaybe>>; - _createdAt?: InputMaybe; - _firstPublishedAt?: InputMaybe; - _isValid?: InputMaybe; - _publicationScheduledAt?: InputMaybe; - _publishedAt?: InputMaybe; - _status?: InputMaybe; - _unpublishingScheduledAt?: InputMaybe; - _updatedAt?: InputMaybe; - createdAt?: InputMaybe; - id?: InputMaybe; - slug?: InputMaybe; - title?: InputMaybe; - updatedAt?: InputMaybe; -}; + OR?: InputMaybe>> + _createdAt?: InputMaybe + _firstPublishedAt?: InputMaybe + _isValid?: InputMaybe + _publicationScheduledAt?: InputMaybe + _publishedAt?: InputMaybe + _status?: InputMaybe + _unpublishingScheduledAt?: InputMaybe + _updatedAt?: InputMaybe + createdAt?: InputMaybe + id?: InputMaybe + slug?: InputMaybe + title?: InputMaybe + updatedAt?: InputMaybe +} export enum CategoryModelOrderBy { _createdAt_ASC = '_createdAt_ASC', @@ -247,35 +251,34 @@ export enum CategoryModelOrderBy { /** Record of type Category (category) */ export type CategoryRecord = { - __typename?: 'CategoryRecord'; - _createdAt: Scalars['DateTime']; - _firstPublishedAt?: Maybe; - _isValid: Scalars['BooleanType']; - _modelApiKey: Scalars['String']; - _publicationScheduledAt?: Maybe; - _publishedAt?: Maybe; + __typename?: 'CategoryRecord' + _createdAt: Scalars['DateTime'] + _firstPublishedAt?: Maybe + _isValid: Scalars['BooleanType'] + _modelApiKey: Scalars['String'] + _publicationScheduledAt?: Maybe + _publishedAt?: Maybe /** SEO meta tags */ - _seoMetaTags: Array; - _status: ItemStatus; - _unpublishingScheduledAt?: Maybe; - _updatedAt: Scalars['DateTime']; - createdAt: Scalars['DateTime']; - id: Scalars['ItemId']; - slug?: Maybe; - title?: Maybe; - updatedAt: Scalars['DateTime']; -}; - + _seoMetaTags: Array + _status: ItemStatus + _unpublishingScheduledAt?: Maybe + _updatedAt: Scalars['DateTime'] + createdAt: Scalars['DateTime'] + id: Scalars['ItemId'] + slug?: Maybe + title?: Maybe + updatedAt: Scalars['DateTime'] +} /** Record of type Category (category) */ export type CategoryRecord_SeoMetaTagsArgs = { - locale?: InputMaybe; -}; + locale?: InputMaybe +} export type CollectionMetadata = { - __typename?: 'CollectionMetadata'; - count: Scalars['IntType']; -}; + __typename?: 'CollectionMetadata' + count: Scalars['IntType'] +} export enum ColorBucketType { black = 'black', @@ -293,76 +296,75 @@ export enum ColorBucketType { } export type ColorField = { - __typename?: 'ColorField'; - alpha?: Maybe; - blue?: Maybe; - green?: Maybe; - hex?: Maybe; - red?: Maybe; -}; + __typename?: 'ColorField' + alpha?: Maybe + blue?: Maybe + green?: Maybe + hex?: Maybe + red?: Maybe +} /** Specifies how to filter by creation datetime */ export type CreatedAtFilter = { /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ - lte?: InputMaybe; + lte?: InputMaybe /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Record of type Cta (cta) */ export type CtaRecord = { - __typename?: 'CtaRecord'; - _createdAt: Scalars['DateTime']; - _firstPublishedAt?: Maybe; - _isValid: Scalars['BooleanType']; - _modelApiKey: Scalars['String']; - _publicationScheduledAt?: Maybe; - _publishedAt?: Maybe; + __typename?: 'CtaRecord' + _createdAt: Scalars['DateTime'] + _firstPublishedAt?: Maybe + _isValid: Scalars['BooleanType'] + _modelApiKey: Scalars['String'] + _publicationScheduledAt?: Maybe + _publishedAt?: Maybe /** SEO meta tags */ - _seoMetaTags: Array; - _status: ItemStatus; - _unpublishingScheduledAt?: Maybe; - _updatedAt: Scalars['DateTime']; - createdAt: Scalars['DateTime']; - id: Scalars['ItemId']; - label?: Maybe; - updatedAt: Scalars['DateTime']; - url?: Maybe; -}; - + _seoMetaTags: Array + _status: ItemStatus + _unpublishingScheduledAt?: Maybe + _updatedAt: Scalars['DateTime'] + createdAt: Scalars['DateTime'] + id: Scalars['ItemId'] + label?: Maybe + updatedAt: Scalars['DateTime'] + url?: Maybe +} /** Record of type Cta (cta) */ export type CtaRecord_SeoMetaTagsArgs = { - locale?: InputMaybe; -}; + locale?: InputMaybe +} /** Specifies how to filter Date fields */ export type DateFilter = { /** Search for records with an exact match */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records with a value that's strictly greater than the one specified */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter records with a value that's greater than or equal to the one specified */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter records with a value that's less than the one specified */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter records with a value that's less or equal than the one specified */ - lte?: InputMaybe; + lte?: InputMaybe /** Exclude records with an exact match */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} export enum FaviconType { appleTouchIcon = 'appleTouchIcon', @@ -371,130 +373,122 @@ export enum FaviconType { } export type FileField = { - __typename?: 'FileField'; - _createdAt: Scalars['DateTime']; - _updatedAt: Scalars['DateTime']; - alt?: Maybe; - author?: Maybe; - basename: Scalars['String']; - blurUpThumb?: Maybe; - blurhash?: Maybe; - colors: Array>; - copyright?: Maybe; - customData?: Maybe; - exifInfo?: Maybe; - filename: Scalars['String']; - focalPoint?: Maybe; - format: Scalars['String']; - height?: Maybe; - id: Scalars['UploadId']; - md5: Scalars['String']; - mimeType: Scalars['String']; - notes?: Maybe; - responsiveImage?: Maybe; - size: Scalars['IntType']; - smartTags: Array>; - tags: Array>; - title?: Maybe; - url: Scalars['String']; - video?: Maybe; - width?: Maybe; -}; - + __typename?: 'FileField' + _createdAt: Scalars['DateTime'] + _updatedAt: Scalars['DateTime'] + alt?: Maybe + author?: Maybe + basename: Scalars['String'] + blurUpThumb?: Maybe + blurhash?: Maybe + colors: Array> + copyright?: Maybe + customData?: Maybe + exifInfo?: Maybe + filename: Scalars['String'] + focalPoint?: Maybe + format: Scalars['String'] + height?: Maybe + id: Scalars['UploadId'] + md5: Scalars['String'] + mimeType: Scalars['String'] + notes?: Maybe + responsiveImage?: Maybe + size: Scalars['IntType'] + smartTags: Array> + tags: Array> + title?: Maybe + url: Scalars['String'] + video?: Maybe + width?: Maybe +} export type FileFieldAltArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} export type FileFieldBlurUpThumbArgs = { - imgixParams?: InputMaybe; - punch?: InputMaybe; - quality?: InputMaybe; - size?: InputMaybe; -}; - + imgixParams?: InputMaybe + punch?: InputMaybe + quality?: InputMaybe + size?: InputMaybe +} export type FileFieldCustomDataArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} export type FileFieldFocalPointArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} export type FileFieldResponsiveImageArgs = { - fallbackLocales?: InputMaybe>; - imgixParams?: InputMaybe; - locale?: InputMaybe; - sizes?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + imgixParams?: InputMaybe + locale?: InputMaybe + sizes?: InputMaybe +} export type FileFieldTitleArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} export type FileFieldUrlArgs = { - imgixParams?: InputMaybe; -}; + imgixParams?: InputMaybe +} /** Specifies how to filter Single-file/image fields */ export type FileFilter = { /** Search for records with an exact match. The specified value must be an Upload ID */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records that have one of the specified uploads */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude records with an exact match. The specified value must be an Upload ID */ - neq?: InputMaybe; + neq?: InputMaybe /** Filter records that do not have one of the specified uploads */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} export type GlobalSeoField = { - __typename?: 'GlobalSeoField'; - facebookPageUrl?: Maybe; - fallbackSeo?: Maybe; - siteName?: Maybe; - titleSuffix?: Maybe; - twitterAccount?: Maybe; -}; + __typename?: 'GlobalSeoField' + facebookPageUrl?: Maybe + fallbackSeo?: Maybe + siteName?: Maybe + titleSuffix?: Maybe + twitterAccount?: Maybe +} /** Record of type Image (image) */ export type ImageRecord = { - __typename?: 'ImageRecord'; - _createdAt: Scalars['DateTime']; - _firstPublishedAt?: Maybe; - _isValid: Scalars['BooleanType']; - _modelApiKey: Scalars['String']; - _publicationScheduledAt?: Maybe; - _publishedAt?: Maybe; + __typename?: 'ImageRecord' + _createdAt: Scalars['DateTime'] + _firstPublishedAt?: Maybe + _isValid: Scalars['BooleanType'] + _modelApiKey: Scalars['String'] + _publicationScheduledAt?: Maybe + _publishedAt?: Maybe /** SEO meta tags */ - _seoMetaTags: Array; - _status: ItemStatus; - _unpublishingScheduledAt?: Maybe; - _updatedAt: Scalars['DateTime']; - asset?: Maybe; - createdAt: Scalars['DateTime']; - id: Scalars['ItemId']; - title?: Maybe; - updatedAt: Scalars['DateTime']; -}; - + _seoMetaTags: Array + _status: ItemStatus + _unpublishingScheduledAt?: Maybe + _updatedAt: Scalars['DateTime'] + asset?: Maybe + createdAt: Scalars['DateTime'] + id: Scalars['ItemId'] + title?: Maybe + updatedAt: Scalars['DateTime'] +} /** Record of type Image (image) */ export type ImageRecord_SeoMetaTagsArgs = { - locale?: InputMaybe; -}; + locale?: InputMaybe +} export type ImgixParams = { /** @@ -506,7 +500,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/ar) */ - ar?: InputMaybe; + ar?: InputMaybe /** * Automatic * @@ -514,7 +508,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/auto) */ - auto?: InputMaybe>; + auto?: InputMaybe> /** * Background Color * @@ -522,7 +516,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/bg) */ - bg?: InputMaybe; + bg?: InputMaybe /** * Blend * @@ -530,7 +524,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend) */ - blend?: InputMaybe; + blend?: InputMaybe /** * Blend Align * @@ -540,7 +534,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-align) */ - blendAlign?: InputMaybe>; + blendAlign?: InputMaybe> /** * Blend Alpha * @@ -550,7 +544,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-alpha) */ - blendAlpha?: InputMaybe; + blendAlpha?: InputMaybe /** * Blend Color * @@ -558,7 +552,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-color) */ - blendColor?: InputMaybe; + blendColor?: InputMaybe /** * Blend Crop * @@ -568,7 +562,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-crop) */ - blendCrop?: InputMaybe>; + blendCrop?: InputMaybe> /** * Blend Fit * @@ -578,7 +572,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-fit) */ - blendFit?: InputMaybe; + blendFit?: InputMaybe /** * Blend Height * @@ -588,7 +582,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-h) */ - blendH?: InputMaybe; + blendH?: InputMaybe /** * Blend Mode * @@ -598,7 +592,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-mode) */ - blendMode?: InputMaybe; + blendMode?: InputMaybe /** * Blend Padding * @@ -608,7 +602,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-pad) */ - blendPad?: InputMaybe; + blendPad?: InputMaybe /** * Blend Size * @@ -618,7 +612,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-size) */ - blendSize?: InputMaybe; + blendSize?: InputMaybe /** * Blend Width * @@ -628,7 +622,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-w) */ - blendW?: InputMaybe; + blendW?: InputMaybe /** * Blend X Position * @@ -638,7 +632,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-x) */ - blendX?: InputMaybe; + blendX?: InputMaybe /** * Blend Y Position * @@ -648,7 +642,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-y) */ - blendY?: InputMaybe; + blendY?: InputMaybe /** * Gaussian Blur * @@ -656,7 +650,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/blur) */ - blur?: InputMaybe; + blur?: InputMaybe /** * Border Size & Color * @@ -664,7 +658,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border) */ - border?: InputMaybe; + border?: InputMaybe /** * Border Bottom * @@ -674,7 +668,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-bottom) */ - borderBottom?: InputMaybe; + borderBottom?: InputMaybe /** * Border Left * @@ -684,7 +678,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-left) */ - borderLeft?: InputMaybe; + borderLeft?: InputMaybe /** * Outer Border Radius * @@ -694,7 +688,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-radius) */ - borderRadius?: InputMaybe; + borderRadius?: InputMaybe /** * Inner Border Radius * @@ -704,7 +698,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-radius-inner) */ - borderRadiusInner?: InputMaybe; + borderRadiusInner?: InputMaybe /** * Border Right * @@ -714,7 +708,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-right) */ - borderRight?: InputMaybe; + borderRight?: InputMaybe /** * Border Top * @@ -724,7 +718,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-top) */ - borderTop?: InputMaybe; + borderTop?: InputMaybe /** * Brightness * @@ -732,7 +726,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/bri) */ - bri?: InputMaybe; + bri?: InputMaybe /** * Client Hints * @@ -740,7 +734,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/ch) */ - ch?: InputMaybe>; + ch?: InputMaybe> /** * Chroma Subsampling * @@ -748,7 +742,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/chromasub) */ - chromasub?: InputMaybe; + chromasub?: InputMaybe /** * Color Quantization * @@ -756,7 +750,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/colorquant) */ - colorquant?: InputMaybe; + colorquant?: InputMaybe /** * Palette Color Count * @@ -766,7 +760,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/colors) */ - colors?: InputMaybe; + colors?: InputMaybe /** * Contrast * @@ -774,7 +768,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/con) */ - con?: InputMaybe; + con?: InputMaybe /** * Mask Corner Radius * @@ -784,7 +778,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask/corner-radius) */ - cornerRadius?: InputMaybe; + cornerRadius?: InputMaybe /** * Crop Mode * @@ -794,7 +788,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/crop) */ - crop?: InputMaybe>; + crop?: InputMaybe> /** * Color Space * @@ -802,7 +796,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/cs) */ - cs?: InputMaybe; + cs?: InputMaybe /** * Download * @@ -810,7 +804,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/dl) */ - dl?: InputMaybe; + dl?: InputMaybe /** * Dots Per Inch * @@ -818,7 +812,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/dpi) */ - dpi?: InputMaybe; + dpi?: InputMaybe /** * Device Pixel Ratio * @@ -826,7 +820,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/dpr) */ - dpr?: InputMaybe; + dpr?: InputMaybe /** * Duotone * @@ -834,7 +828,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/duotone) */ - duotone?: InputMaybe; + duotone?: InputMaybe /** * Duotone Alpha * @@ -844,7 +838,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/duotone-alpha) */ - duotoneAlpha?: InputMaybe; + duotoneAlpha?: InputMaybe /** * Exposure * @@ -852,7 +846,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/exp) */ - exp?: InputMaybe; + exp?: InputMaybe /** * Url Expiration Timestamp * @@ -860,7 +854,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/expires) */ - expires?: InputMaybe; + expires?: InputMaybe /** * Face Index * @@ -870,7 +864,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/faceindex) */ - faceindex?: InputMaybe; + faceindex?: InputMaybe /** * Face Padding * @@ -880,7 +874,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/facepad) */ - facepad?: InputMaybe; + facepad?: InputMaybe /** * Json Face Data * @@ -890,7 +884,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/faces) */ - faces?: InputMaybe; + faces?: InputMaybe /** * Fill Mode * @@ -900,7 +894,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/fill) */ - fill?: InputMaybe; + fill?: InputMaybe /** * Fill Color * @@ -910,7 +904,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/fill-color) */ - fillColor?: InputMaybe; + fillColor?: InputMaybe /** * Resize Fit Mode * @@ -918,7 +912,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/fit) */ - fit?: InputMaybe; + fit?: InputMaybe /** * Flip Axis * @@ -926,7 +920,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/flip) */ - flip?: InputMaybe; + flip?: InputMaybe /** * Output Format * @@ -934,7 +928,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/fm) */ - fm?: InputMaybe; + fm?: InputMaybe /** * Focal Point Debug * @@ -944,7 +938,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-debug) */ - fpDebug?: InputMaybe; + fpDebug?: InputMaybe /** * Focal Point X Position * @@ -954,7 +948,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-x) */ - fpX?: InputMaybe; + fpX?: InputMaybe /** * Focal Point Y Position * @@ -964,7 +958,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-y) */ - fpY?: InputMaybe; + fpY?: InputMaybe /** * Focal Point Zoom * @@ -974,7 +968,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-z) */ - fpZ?: InputMaybe; + fpZ?: InputMaybe /** * Gamma * @@ -982,7 +976,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/gam) */ - gam?: InputMaybe; + gam?: InputMaybe /** * Grid Colors * @@ -990,7 +984,7 @@ export type ImgixParams = { * * Depends on: `transparency` */ - gridColors?: InputMaybe; + gridColors?: InputMaybe /** * Grid Size * @@ -998,7 +992,7 @@ export type ImgixParams = { * * Depends on: `transparency` */ - gridSize?: InputMaybe; + gridSize?: InputMaybe /** * Image Height * @@ -1006,7 +1000,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/h) */ - h?: InputMaybe; + h?: InputMaybe /** * Highlight * @@ -1014,7 +1008,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/high) */ - high?: InputMaybe; + high?: InputMaybe /** * Halftone * @@ -1022,7 +1016,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/htn) */ - htn?: InputMaybe; + htn?: InputMaybe /** * Hue Shift * @@ -1030,7 +1024,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/hue) */ - hue?: InputMaybe; + hue?: InputMaybe /** * Invert * @@ -1038,13 +1032,13 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/invert) */ - invert?: InputMaybe; + invert?: InputMaybe /** * Iptc Passthrough * * Determine if IPTC data should be passed for JPEG images. */ - iptc?: InputMaybe; + iptc?: InputMaybe /** * Lossless Compression * @@ -1054,7 +1048,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/lossless) */ - lossless?: InputMaybe; + lossless?: InputMaybe /** * Watermark Image Url * @@ -1062,7 +1056,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark) */ - mark?: InputMaybe; + mark?: InputMaybe /** * Watermark Alignment Mode * @@ -1072,7 +1066,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-align) */ - markAlign?: InputMaybe>; + markAlign?: InputMaybe> /** * Watermark Alpha * @@ -1082,7 +1076,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-alpha) */ - markAlpha?: InputMaybe; + markAlpha?: InputMaybe /** * Watermark Base Url * @@ -1092,7 +1086,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-base) */ - markBase?: InputMaybe; + markBase?: InputMaybe /** * Watermark Fit Mode * @@ -1102,7 +1096,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-fit) */ - markFit?: InputMaybe; + markFit?: InputMaybe /** * Watermark Height * @@ -1112,7 +1106,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-h) */ - markH?: InputMaybe; + markH?: InputMaybe /** * Watermark Padding * @@ -1122,7 +1116,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-pad) */ - markPad?: InputMaybe; + markPad?: InputMaybe /** * Watermark Rotation * @@ -1130,7 +1124,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-rot) */ - markRot?: InputMaybe; + markRot?: InputMaybe /** * Watermark Scale * @@ -1140,7 +1134,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-scale) */ - markScale?: InputMaybe; + markScale?: InputMaybe /** * Watermark Tile * @@ -1150,7 +1144,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-tile) */ - markTile?: InputMaybe; + markTile?: InputMaybe /** * Watermark Width * @@ -1160,7 +1154,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-w) */ - markW?: InputMaybe; + markW?: InputMaybe /** * Watermark X Position * @@ -1170,7 +1164,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-x) */ - markX?: InputMaybe; + markX?: InputMaybe /** * Watermark Y Position * @@ -1180,7 +1174,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-y) */ - markY?: InputMaybe; + markY?: InputMaybe /** * Mask Type * @@ -1188,7 +1182,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask) */ - mask?: InputMaybe; + mask?: InputMaybe /** * Mask Background Color * @@ -1198,7 +1192,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask/mask-bg) */ - maskBg?: InputMaybe; + maskBg?: InputMaybe /** * Maximum Height * @@ -1208,7 +1202,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/max-height) */ - maxH?: InputMaybe; + maxH?: InputMaybe /** * Maximum Width * @@ -1218,7 +1212,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/max-width) */ - maxW?: InputMaybe; + maxW?: InputMaybe /** * Minimum Height * @@ -1228,7 +1222,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/min-height) */ - minH?: InputMaybe; + minH?: InputMaybe /** * Minimum Width * @@ -1238,7 +1232,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/min-width) */ - minW?: InputMaybe; + minW?: InputMaybe /** * Monochrome * @@ -1246,7 +1240,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/monochrome) */ - monochrome?: InputMaybe; + monochrome?: InputMaybe /** * Noise Reduction Bound * @@ -1254,7 +1248,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/noise-reduction/nr) */ - nr?: InputMaybe; + nr?: InputMaybe /** * Noise Reduction Sharpen * @@ -1262,7 +1256,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/noise-reduction/nrs) */ - nrs?: InputMaybe; + nrs?: InputMaybe /** * Orientation * @@ -1270,7 +1264,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/orient) */ - orient?: InputMaybe; + orient?: InputMaybe /** * Padding * @@ -1278,7 +1272,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad) */ - pad?: InputMaybe; + pad?: InputMaybe /** * Padding Bottom * @@ -1286,7 +1280,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-bottom) */ - padBottom?: InputMaybe; + padBottom?: InputMaybe /** * Padding Left * @@ -1294,7 +1288,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-left) */ - padLeft?: InputMaybe; + padLeft?: InputMaybe /** * Padding Right * @@ -1302,7 +1296,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-right) */ - padRight?: InputMaybe; + padRight?: InputMaybe /** * Padding Top * @@ -1310,7 +1304,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-top) */ - padTop?: InputMaybe; + padTop?: InputMaybe /** * Pdf Page Number * @@ -1318,7 +1312,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/pdf/page) */ - page?: InputMaybe; + page?: InputMaybe /** * Color Palette Extraction * @@ -1326,7 +1320,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/palette) */ - palette?: InputMaybe; + palette?: InputMaybe /** * Pdf Annotation * @@ -1334,7 +1328,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/pdf/pdf-annotation) */ - pdfAnnotation?: InputMaybe; + pdfAnnotation?: InputMaybe /** * Css Prefix * @@ -1344,7 +1338,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/prefix) */ - prefix?: InputMaybe; + prefix?: InputMaybe /** * Pixellate * @@ -1352,7 +1346,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/px) */ - px?: InputMaybe; + px?: InputMaybe /** * Output Quality * @@ -1362,7 +1356,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/q) */ - q?: InputMaybe; + q?: InputMaybe /** * Source Rectangle Region * @@ -1370,7 +1364,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/rect) */ - rect?: InputMaybe; + rect?: InputMaybe /** * Rotation * @@ -1378,7 +1372,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/rot) */ - rot?: InputMaybe; + rot?: InputMaybe /** * Saturation * @@ -1386,7 +1380,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/sat) */ - sat?: InputMaybe; + sat?: InputMaybe /** * Sepia Tone * @@ -1394,7 +1388,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/sepia) */ - sepia?: InputMaybe; + sepia?: InputMaybe /** * Shadow * @@ -1402,7 +1396,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/shad) */ - shad?: InputMaybe; + shad?: InputMaybe /** * Sharpen * @@ -1410,7 +1404,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/sharp) */ - sharp?: InputMaybe; + sharp?: InputMaybe /** * Transparency * @@ -1418,7 +1412,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/transparency) */ - transparency?: InputMaybe; + transparency?: InputMaybe /** * Trim Image * @@ -1426,7 +1420,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim) */ - trim?: InputMaybe; + trim?: InputMaybe /** * Trim Color * @@ -1436,7 +1430,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-color) */ - trimColor?: InputMaybe; + trimColor?: InputMaybe /** * Trim Mean Difference * @@ -1446,7 +1440,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-md) */ - trimMd?: InputMaybe; + trimMd?: InputMaybe /** * Trim Padding * @@ -1456,7 +1450,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-pad) */ - trimPad?: InputMaybe; + trimPad?: InputMaybe /** * Trim Standard Deviation * @@ -1466,7 +1460,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-sd) */ - trimSd?: InputMaybe; + trimSd?: InputMaybe /** * Trim Tolerance * @@ -1476,7 +1470,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-tol) */ - trimTol?: InputMaybe; + trimTol?: InputMaybe /** * Text String * @@ -1484,7 +1478,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt) */ - txt?: InputMaybe; + txt?: InputMaybe /** * Text Align * @@ -1494,7 +1488,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-align) */ - txtAlign?: InputMaybe>; + txtAlign?: InputMaybe> /** * Text Clipping Mode * @@ -1504,7 +1498,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-clip) */ - txtClip?: InputMaybe>; + txtClip?: InputMaybe> /** * Text Color * @@ -1514,7 +1508,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-color) */ - txtColor?: InputMaybe; + txtColor?: InputMaybe /** * Text Fit Mode * @@ -1524,7 +1518,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-fit) */ - txtFit?: InputMaybe; + txtFit?: InputMaybe /** * Text Font * @@ -1534,7 +1528,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-font) */ - txtFont?: InputMaybe; + txtFont?: InputMaybe /** * Text Leading * @@ -1544,7 +1538,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/typesetting/txt-lead) */ - txtLead?: InputMaybe; + txtLead?: InputMaybe /** * Text Ligatures * @@ -1554,7 +1548,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-lig) */ - txtLig?: InputMaybe; + txtLig?: InputMaybe /** * Text Outline * @@ -1564,7 +1558,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-line) */ - txtLine?: InputMaybe; + txtLine?: InputMaybe /** * Text Outline Color * @@ -1574,7 +1568,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-line-color) */ - txtLineColor?: InputMaybe; + txtLineColor?: InputMaybe /** * Text Padding * @@ -1584,7 +1578,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-pad) */ - txtPad?: InputMaybe; + txtPad?: InputMaybe /** * Text Shadow * @@ -1594,7 +1588,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-shad) */ - txtShad?: InputMaybe; + txtShad?: InputMaybe /** * Text Font Size * @@ -1604,7 +1598,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-size) */ - txtSize?: InputMaybe; + txtSize?: InputMaybe /** * Text Tracking * @@ -1614,7 +1608,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/typesetting/txt-track) */ - txtTrack?: InputMaybe; + txtTrack?: InputMaybe /** * Text Width * @@ -1624,7 +1618,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-width) */ - txtWidth?: InputMaybe; + txtWidth?: InputMaybe /** * Unsharp Mask * @@ -1632,7 +1626,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/usm) */ - usm?: InputMaybe; + usm?: InputMaybe /** * Unsharp Mask Radius * @@ -1642,7 +1636,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/usmrad) */ - usmrad?: InputMaybe; + usmrad?: InputMaybe /** * Vibrance * @@ -1650,7 +1644,7 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/vib) */ - vib?: InputMaybe; + vib?: InputMaybe /** * Image Width * @@ -1658,8 +1652,8 @@ export type ImgixParams = { * * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/w) */ - w?: InputMaybe; -}; + w?: InputMaybe +} export enum ImgixParamsAuto { compress = 'compress', @@ -1843,20 +1837,20 @@ export enum ImgixParamsTxtFit { /** Specifies how to filter by usage */ export type InUseFilter = { /** Search uploads that are currently used by some record or not */ - eq?: InputMaybe; -}; + eq?: InputMaybe +} /** Specifies how to filter by ID */ export type ItemIdFilter = { /** Search the record with the specified ID */ - eq?: InputMaybe; + eq?: InputMaybe /** Search records with the specified IDs */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude the record with the specified ID */ - neq?: InputMaybe; + neq?: InputMaybe /** Search records that do not have the specified IDs */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} export enum ItemStatus { draft = 'draft', @@ -1867,30 +1861,30 @@ export enum ItemStatus { /** Specifies how to filter Single-link fields */ export type LinkFilter = { /** Search for records with an exact match. The specified value must be a Record ID */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records linked to one of the specified records */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude records with an exact match. The specified value must be a Record ID */ - neq?: InputMaybe; + neq?: InputMaybe /** Filter records not linked to one of the specified records */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter Multiple-links fields */ export type LinksFilter = { /** Filter records linked to all of the specified records. The specified values must be Record IDs */ - allIn?: InputMaybe>>; + allIn?: InputMaybe>> /** Filter records linked to at least one of the specified records. The specified values must be Record IDs */ - anyIn?: InputMaybe>>; + anyIn?: InputMaybe>> /** Search for records with an exact match. The specified values must be Record IDs */ - eq?: InputMaybe>>; + eq?: InputMaybe>> /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records not linked to any of the specified records. The specified values must be Record IDs */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} export enum MuxThumbnailFormatType { gif = 'gif', @@ -1901,189 +1895,176 @@ export enum MuxThumbnailFormatType { /** Specifies how to filter by image orientation */ export type OrientationFilter = { /** Search uploads with the specified orientation */ - eq?: InputMaybe; + eq?: InputMaybe /** Exclude uploads with the specified orientation */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Specifies how to filter by publication datetime */ export type PublishedAtFilter = { /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ - lte?: InputMaybe; + lte?: InputMaybe /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** The query root for this schema */ export type Query = { - __typename?: 'Query'; + __typename?: 'Query' /** Returns meta information regarding a record collection */ - _allAuthorsMeta: CollectionMetadata; + _allAuthorsMeta: CollectionMetadata /** Returns meta information regarding a record collection */ - _allBlogPostsMeta: CollectionMetadata; + _allBlogPostsMeta: CollectionMetadata /** Returns meta information regarding a record collection */ - _allCategoriesMeta: CollectionMetadata; + _allCategoriesMeta: CollectionMetadata /** Returns meta information regarding an assets collection */ - _allUploadsMeta?: Maybe; + _allUploadsMeta?: Maybe /** Returns the single instance record */ - _site: Site; + _site: Site /** Returns a collection of records */ - allAuthors: Array; + allAuthors: Array /** Returns a collection of records */ - allBlogPosts: Array; + allBlogPosts: Array /** Returns a collection of records */ - allCategories: Array; + allCategories: Array /** Returns a collection of assets */ - allUploads: Array; + allUploads: Array /** Returns a specific record */ - author?: Maybe; + author?: Maybe /** Returns a specific record */ - blogPost?: Maybe; + blogPost?: Maybe /** Returns a specific record */ - category?: Maybe; + category?: Maybe /** Returns a specific asset */ - upload?: Maybe; -}; - + upload?: Maybe +} /** The query root for this schema */ export type Query_AllAuthorsMetaArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe +} /** The query root for this schema */ export type Query_AllBlogPostsMetaArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe +} /** The query root for this schema */ export type Query_AllCategoriesMetaArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe +} /** The query root for this schema */ export type Query_AllUploadsMetaArgs = { - filter?: InputMaybe; - locale?: InputMaybe; -}; - + filter?: InputMaybe + locale?: InputMaybe +} /** The query root for this schema */ export type Query_SiteArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} /** The query root for this schema */ export type QueryAllAuthorsArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - first?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; - skip?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + first?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> + skip?: InputMaybe +} /** The query root for this schema */ export type QueryAllBlogPostsArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - first?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; - skip?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + first?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> + skip?: InputMaybe +} /** The query root for this schema */ export type QueryAllCategoriesArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - first?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; - skip?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + first?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> + skip?: InputMaybe +} /** The query root for this schema */ export type QueryAllUploadsArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - first?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; - skip?: InputMaybe; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + first?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> + skip?: InputMaybe +} /** The query root for this schema */ export type QueryAuthorArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> +} /** The query root for this schema */ export type QueryBlogPostArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> +} /** The query root for this schema */ export type QueryCategoryArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; -}; - + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> +} /** The query root for this schema */ export type QueryUploadArgs = { - fallbackLocales?: InputMaybe>; - filter?: InputMaybe; - locale?: InputMaybe; - orderBy?: InputMaybe>>; -}; + fallbackLocales?: InputMaybe> + filter?: InputMaybe + locale?: InputMaybe + orderBy?: InputMaybe>> +} /** Specifies how to filter by upload type */ export type ResolutionFilter = { /** Search uploads with the specified resolution */ - eq?: InputMaybe; + eq?: InputMaybe /** Search uploads with the specified resolutions */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude uploads with the specified resolution */ - neq?: InputMaybe; + neq?: InputMaybe /** Search uploads without the specified resolutions */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} export enum ResolutionType { icon = 'icon', @@ -2093,46 +2074,44 @@ export enum ResolutionType { } export type ResponsiveImage = { - __typename?: 'ResponsiveImage'; - alt?: Maybe; - aspectRatio: Scalars['FloatType']; - base64?: Maybe; - bgColor?: Maybe; - height: Scalars['IntType']; - sizes: Scalars['String']; - src: Scalars['String']; - srcSet: Scalars['String']; - title?: Maybe; - webpSrcSet: Scalars['String']; - width: Scalars['IntType']; -}; + __typename?: 'ResponsiveImage' + alt?: Maybe + aspectRatio: Scalars['FloatType'] + base64?: Maybe + bgColor?: Maybe + height: Scalars['IntType'] + sizes: Scalars['String'] + src: Scalars['String'] + srcSet: Scalars['String'] + title?: Maybe + webpSrcSet: Scalars['String'] + width: Scalars['IntType'] +} export type SeoField = { - __typename?: 'SeoField'; - description?: Maybe; - image?: Maybe; - title?: Maybe; - twitterCard?: Maybe; -}; + __typename?: 'SeoField' + description?: Maybe + image?: Maybe + title?: Maybe + twitterCard?: Maybe +} export type Site = { - __typename?: 'Site'; - favicon?: Maybe; - faviconMetaTags: Array; - globalSeo?: Maybe; - locales: Array; -}; - + __typename?: 'Site' + favicon?: Maybe + faviconMetaTags: Array + globalSeo?: Maybe + locales: Array +} export type SiteFaviconMetaTagsArgs = { - variants?: InputMaybe>>; -}; - + variants?: InputMaybe>> +} export type SiteGlobalSeoArgs = { - fallbackLocales?: InputMaybe>; - locale?: InputMaybe; -}; + fallbackLocales?: InputMaybe> + locale?: InputMaybe +} export enum SiteLocale { en = 'en' @@ -2141,278 +2120,278 @@ export enum SiteLocale { /** Specifies how to filter by status */ export type StatusFilter = { /** Search the record with the specified status */ - eq?: InputMaybe; + eq?: InputMaybe /** Search records with the specified statuses */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude the record with the specified status */ - neq?: InputMaybe; + neq?: InputMaybe /** Search records without the specified statuses */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter Single-line string fields */ export type StringFilter = { /** Search for records with an exact match */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records that equal one of the specified values */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Filter records with the specified field set as blank (null or empty string) */ - isBlank?: InputMaybe; + isBlank?: InputMaybe /** Filter records based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude records with an exact match */ - neq?: InputMaybe; + neq?: InputMaybe /** Filter records that do not equal one of the specified values */ - notIn?: InputMaybe>>; + notIn?: InputMaybe>> /** Exclude records based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} export type StringMatchesFilter = { - caseSensitive?: InputMaybe; - pattern: Scalars['String']; - regexp?: InputMaybe; -}; + caseSensitive?: InputMaybe + pattern: Scalars['String'] + regexp?: InputMaybe +} /** Specifies how to filter Structured Text fields */ export type StructuredTextFilter = { /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records with the specified field set as blank (null or single empty paragraph) */ - isBlank?: InputMaybe; + isBlank?: InputMaybe /** Filter records based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude records based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} export type Tag = { - __typename?: 'Tag'; - attributes?: Maybe; - content?: Maybe; - tag: Scalars['String']; -}; + __typename?: 'Tag' + attributes?: Maybe + content?: Maybe + tag: Scalars['String'] +} /** Specifies how to filter by upload type */ export type TypeFilter = { /** Search uploads with the specified type */ - eq?: InputMaybe; + eq?: InputMaybe /** Search uploads with the specified types */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude uploads with the specified type */ - neq?: InputMaybe; + neq?: InputMaybe /** Search uploads without the specified types */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by update datetime */ export type UpdatedAtFilter = { /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ - lte?: InputMaybe; + lte?: InputMaybe /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Specifies how to filter by default alt */ export type UploadAltFilter = { /** Search the uploads with the specified alt */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter uploads with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Search uploads with the specified values as default alt */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude the uploads with the specified alt */ - neq?: InputMaybe; + neq?: InputMaybe /** Search uploads that do not have the specified values as default alt */ - notIn?: InputMaybe>>; + notIn?: InputMaybe>> /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} /** Specifies how to filter by auhtor */ export type UploadAuthorFilter = { /** Filter uploads with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} /** Specifies how to filter by basename */ export type UploadBasenameFilter = { /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} /** Specifies how to filter by colors */ export type UploadColorsFilter = { /** Filter uploads that have all of the specified colors */ - allIn?: InputMaybe>>; + allIn?: InputMaybe>> /** Filter uploads that have at least one of the specified colors */ - anyIn?: InputMaybe>>; + anyIn?: InputMaybe>> /** Filter uploads that have the specified colors */ - contains?: InputMaybe; + contains?: InputMaybe /** Search for uploads with an exact match */ - eq?: InputMaybe>>; + eq?: InputMaybe>> /** Filter uploads that do not have any of the specified colors */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by copyright */ export type UploadCopyrightFilter = { /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} /** Specifies how to filter by creation datetime */ export type UploadCreatedAtFilter = { /** Search for uploads with an exact match */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter uploads with a value that's strictly greater than the one specified */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter uploads with a value that's greater than or equal to the one specified */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter uploads with a value that's less than the one specified */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter uploads with a value that's less or equal than the one specified */ - lte?: InputMaybe; + lte?: InputMaybe /** Exclude uploads with an exact match */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Specifies how to filter by filename */ export type UploadFilenameFilter = { /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} export type UploadFilter = { - OR?: InputMaybe>>; - _createdAt?: InputMaybe; - _updatedAt?: InputMaybe; - alt?: InputMaybe; - author?: InputMaybe; - basename?: InputMaybe; - colors?: InputMaybe; - copyright?: InputMaybe; - filename?: InputMaybe; - format?: InputMaybe; - height?: InputMaybe; - id?: InputMaybe; - inUse?: InputMaybe; - md5?: InputMaybe; - mimeType?: InputMaybe; - notes?: InputMaybe; - orientation?: InputMaybe; - resolution?: InputMaybe; - size?: InputMaybe; - smartTags?: InputMaybe; - tags?: InputMaybe; - title?: InputMaybe; - type?: InputMaybe; - width?: InputMaybe; -}; + OR?: InputMaybe>> + _createdAt?: InputMaybe + _updatedAt?: InputMaybe + alt?: InputMaybe + author?: InputMaybe + basename?: InputMaybe + colors?: InputMaybe + copyright?: InputMaybe + filename?: InputMaybe + format?: InputMaybe + height?: InputMaybe + id?: InputMaybe + inUse?: InputMaybe + md5?: InputMaybe + mimeType?: InputMaybe + notes?: InputMaybe + orientation?: InputMaybe + resolution?: InputMaybe + size?: InputMaybe + smartTags?: InputMaybe + tags?: InputMaybe + title?: InputMaybe + type?: InputMaybe + width?: InputMaybe +} /** Specifies how to filter by format */ export type UploadFormatFilter = { /** Search the asset with the specified format */ - eq?: InputMaybe; + eq?: InputMaybe /** Search assets with the specified formats */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude the asset with the specified format */ - neq?: InputMaybe; + neq?: InputMaybe /** Search assets that do not have the specified formats */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by height */ export type UploadHeightFilter = { /** Search assets with the specified height */ - eq?: InputMaybe; + eq?: InputMaybe /** Search all assets larger than the specified height */ - gt?: InputMaybe; + gt?: InputMaybe /** Search all assets larger or equal to the specified height */ - gte?: InputMaybe; + gte?: InputMaybe /** Search all assets smaller than the specified height */ - lt?: InputMaybe; + lt?: InputMaybe /** Search all assets larger or equal to the specified height */ - lte?: InputMaybe; + lte?: InputMaybe /** Search assets that do not have the specified height */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Specifies how to filter by ID */ export type UploadIdFilter = { /** Search the asset with the specified ID */ - eq?: InputMaybe; + eq?: InputMaybe /** Search assets with the specified IDs */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude the asset with the specified ID */ - neq?: InputMaybe; + neq?: InputMaybe /** Search assets that do not have the specified IDs */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by MD5 */ export type UploadMd5Filter = { /** Search the asset with the specified MD5 */ - eq?: InputMaybe; + eq?: InputMaybe /** Search assets with the specified MD5s */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Exclude the asset with the specified MD5 */ - neq?: InputMaybe; + neq?: InputMaybe /** Search assets that do not have the specified MD5s */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by mime type */ export type UploadMimeTypeFilter = { /** Search the asset with the specified mime type */ - eq?: InputMaybe; + eq?: InputMaybe /** Search assets with the specified mime types */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude the asset with the specified mime type */ - neq?: InputMaybe; + neq?: InputMaybe /** Search assets that do not have the specified mime types */ - notIn?: InputMaybe>>; + notIn?: InputMaybe>> /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} /** Specifies how to filter by notes */ export type UploadNotesFilter = { /** Filter records with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} export enum UploadOrderBy { _createdAt_ASC = '_createdAt_ASC', @@ -2444,50 +2423,50 @@ export enum UploadOrientation { /** Specifies how to filter by size */ export type UploadSizeFilter = { /** Search assets with the specified size (in bytes) */ - eq?: InputMaybe; + eq?: InputMaybe /** Search all assets larger than the specified size (in bytes) */ - gt?: InputMaybe; + gt?: InputMaybe /** Search all assets larger or equal to the specified size (in bytes) */ - gte?: InputMaybe; + gte?: InputMaybe /** Search all assets smaller than the specified size (in bytes) */ - lt?: InputMaybe; + lt?: InputMaybe /** Search all assets larger or equal to the specified size (in bytes) */ - lte?: InputMaybe; + lte?: InputMaybe /** Search assets that do not have the specified size (in bytes) */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} /** Specifies how to filter by tags */ export type UploadTagsFilter = { /** Filter uploads linked to all of the specified tags */ - allIn?: InputMaybe>>; + allIn?: InputMaybe>> /** Filter uploads linked to at least one of the specified tags */ - anyIn?: InputMaybe>>; + anyIn?: InputMaybe>> /** Filter uploads linked to the specified tag */ - contains?: InputMaybe; + contains?: InputMaybe /** Search for uploads with an exact match */ - eq?: InputMaybe>>; + eq?: InputMaybe>> /** Filter uploads not linked to any of the specified tags */ - notIn?: InputMaybe>>; -}; + notIn?: InputMaybe>> +} /** Specifies how to filter by default title */ export type UploadTitleFilter = { /** Search the asset with the specified title */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter assets with the specified field defined (i.e. with any value) or not */ - exists?: InputMaybe; + exists?: InputMaybe /** Search assets with the specified as default title */ - in?: InputMaybe>>; + in?: InputMaybe>> /** Filter uploads based on a regular expression */ - matches?: InputMaybe; + matches?: InputMaybe /** Exclude the asset with the specified title */ - neq?: InputMaybe; + neq?: InputMaybe /** Search assets that do not have the specified as default title */ - notIn?: InputMaybe>>; + notIn?: InputMaybe>> /** Exclude uploads based on a regular expression */ - notMatches?: InputMaybe; -}; + notMatches?: InputMaybe +} export enum UploadType { archive = 'archive', @@ -2503,56 +2482,54 @@ export enum UploadType { /** Specifies how to filter by update datetime */ export type UploadUpdatedAtFilter = { /** Search for uploads with an exact match */ - eq?: InputMaybe; + eq?: InputMaybe /** Filter uploads with a value that's strictly greater than the one specified */ - gt?: InputMaybe; + gt?: InputMaybe /** Filter uploads with a value that's greater than or equal to the one specified */ - gte?: InputMaybe; + gte?: InputMaybe /** Filter uploads with a value that's less than the one specified */ - lt?: InputMaybe; + lt?: InputMaybe /** Filter uploads with a value that's less or equal than the one specified */ - lte?: InputMaybe; + lte?: InputMaybe /** Exclude uploads with an exact match */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} export type UploadVideoField = { - __typename?: 'UploadVideoField'; - duration: Scalars['Int']; - framerate: Scalars['Int']; - mp4Url?: Maybe; - muxAssetId: Scalars['String']; - muxPlaybackId: Scalars['String']; - streamingUrl: Scalars['String']; - thumbnailUrl: Scalars['String']; -}; - + __typename?: 'UploadVideoField' + duration: Scalars['Int'] + framerate: Scalars['Int'] + mp4Url?: Maybe + muxAssetId: Scalars['String'] + muxPlaybackId: Scalars['String'] + streamingUrl: Scalars['String'] + thumbnailUrl: Scalars['String'] +} export type UploadVideoFieldMp4UrlArgs = { - exactRes?: InputMaybe; - res?: InputMaybe; -}; - + exactRes?: InputMaybe + res?: InputMaybe +} export type UploadVideoFieldThumbnailUrlArgs = { - format?: InputMaybe; -}; + format?: InputMaybe +} /** Specifies how to filter by width */ export type UploadWidthFilter = { /** Search assets with the specified width */ - eq?: InputMaybe; + eq?: InputMaybe /** Search all assets larger than the specified width */ - gt?: InputMaybe; + gt?: InputMaybe /** Search all assets larger or equal to the specified width */ - gte?: InputMaybe; + gte?: InputMaybe /** Search all assets smaller than the specified width */ - lt?: InputMaybe; + lt?: InputMaybe /** Search all assets larger or equal to the specified width */ - lte?: InputMaybe; + lte?: InputMaybe /** Search assets that do not have the specified width */ - neq?: InputMaybe; -}; + neq?: InputMaybe +} export enum VideoMp4Res { high = 'high', @@ -2561,184 +2538,450 @@ export enum VideoMp4Res { } export type FocalPoint = { - __typename?: 'focalPoint'; - x?: Maybe; - y?: Maybe; -}; + __typename?: 'focalPoint' + x?: Maybe + y?: Maybe +} -export type AuthorFragment = { __typename?: 'AuthorRecord', name?: string | null }; +export type AuthorFragment = { + __typename?: 'AuthorRecord' + name?: string | null +} -export type BlogPostFragment = { __typename?: 'BlogPostRecord', title?: string | null, date?: any | null, slug?: string | null, _seoMetaTags: Array<{ __typename?: 'Tag', content?: string | null, tag: string, attributes?: any | null }>, category: Array<{ __typename?: 'CategoryRecord', title?: string | null, slug?: string | null }>, author?: { __typename?: 'AuthorRecord', name?: string | null } | null, content?: { __typename?: 'BlogPostModelContentField', value: any, blocks: Array<{ __typename: 'CtaRecord', id: any, label?: string | null, url?: string | null } | { __typename: 'ImageRecord', id: any, title?: string | null, asset?: { __typename?: 'FileField', url: string, width?: any | null, height?: any | null } | null }> } | null, image?: { __typename?: 'FileField', url: string, alt?: string | null, height?: any | null, width?: any | null, title?: string | null } | null }; +export type BlogPostFragment = { + __typename?: 'BlogPostRecord' + title?: string | null + date?: any | null + slug?: string | null + _seoMetaTags: Array<{ + __typename?: 'Tag' + content?: string | null + tag: string + attributes?: any | null + }> + category: Array<{ + __typename?: 'CategoryRecord' + title?: string | null + slug?: string | null + }> + author?: { __typename?: 'AuthorRecord'; name?: string | null } | null + content?: { + __typename?: 'BlogPostModelContentField' + value: any + blocks: Array< + | { + __typename: 'CtaRecord' + id: any + label?: string | null + url?: string | null + } + | { + __typename: 'ImageRecord' + id: any + title?: string | null + asset?: { + __typename?: 'FileField' + url: string + width?: any | null + height?: any | null + } | null + } + > + } | null + image?: { + __typename?: 'FileField' + url: string + alt?: string | null + height?: any | null + width?: any | null + title?: string | null + } | null +} -export type CategoryFragment = { __typename?: 'CategoryRecord', id: any, title?: string | null, slug?: string | null }; +export type CategoryFragment = { + __typename?: 'CategoryRecord' + id: any + title?: string | null + slug?: string | null +} -export type ImageFragment = { __typename?: 'FileField', url: string, alt?: string | null, height?: any | null, width?: any | null, title?: string | null }; +export type ImageFragment = { + __typename?: 'FileField' + url: string + alt?: string | null + height?: any | null + width?: any | null + title?: string | null +} -export type SeoTagsFragment = { __typename?: 'Tag', content?: string | null, tag: string, attributes?: any | null }; +export type SeoTagsFragment = { + __typename?: 'Tag' + content?: string | null + tag: string + attributes?: any | null +} -export type GetBlogPostsCategoriesQueryVariables = Exact<{ [key: string]: never; }>; +export type GetBlogPostsCategoriesQueryVariables = Exact<{ + [key: string]: never +}> - -export type GetBlogPostsCategoriesQuery = { __typename?: 'Query', allCategories: Array<{ __typename?: 'CategoryRecord', id: any, title?: string | null, slug?: string | null }> }; +export type GetBlogPostsCategoriesQuery = { + __typename?: 'Query' + allCategories: Array<{ + __typename?: 'CategoryRecord' + id: any + title?: string | null + slug?: string | null + }> +} export type GetBlogPostsQueryVariables = Exact<{ - skip: Scalars['IntType']; - step: Scalars['IntType']; - filterIds?: InputMaybe> | InputMaybe>; - filterSlugs?: InputMaybe> | InputMaybe>; - category?: InputMaybe> | InputMaybe>; - search: Scalars['String']; -}>; + skip: Scalars['IntType'] + step: Scalars['IntType'] + filterIds?: InputMaybe< + Array> | InputMaybe + > + filterSlugs?: InputMaybe< + Array> | InputMaybe + > + category?: InputMaybe< + Array> | InputMaybe + > + search: Scalars['String'] +}> - -export type GetBlogPostsQuery = { __typename?: 'Query', _allBlogPostsMeta: { __typename?: 'CollectionMetadata', count: any }, allBlogPosts: Array<{ __typename?: 'BlogPostRecord', title?: string | null, date?: any | null, slug?: string | null, _seoMetaTags: Array<{ __typename?: 'Tag', content?: string | null, tag: string, attributes?: any | null }>, category: Array<{ __typename?: 'CategoryRecord', title?: string | null, slug?: string | null }>, author?: { __typename?: 'AuthorRecord', name?: string | null } | null, content?: { __typename?: 'BlogPostModelContentField', value: any, blocks: Array<{ __typename: 'CtaRecord', id: any, label?: string | null, url?: string | null } | { __typename: 'ImageRecord', id: any, title?: string | null, asset?: { __typename?: 'FileField', url: string, width?: any | null, height?: any | null } | null }> } | null, image?: { __typename?: 'FileField', url: string, alt?: string | null, height?: any | null, width?: any | null, title?: string | null } | null }> }; +export type GetBlogPostsQuery = { + __typename?: 'Query' + _allBlogPostsMeta: { __typename?: 'CollectionMetadata'; count: any } + allBlogPosts: Array<{ + __typename?: 'BlogPostRecord' + title?: string | null + date?: any | null + slug?: string | null + _seoMetaTags: Array<{ + __typename?: 'Tag' + content?: string | null + tag: string + attributes?: any | null + }> + category: Array<{ + __typename?: 'CategoryRecord' + title?: string | null + slug?: string | null + }> + author?: { __typename?: 'AuthorRecord'; name?: string | null } | null + content?: { + __typename?: 'BlogPostModelContentField' + value: any + blocks: Array< + | { + __typename: 'CtaRecord' + id: any + label?: string | null + url?: string | null + } + | { + __typename: 'ImageRecord' + id: any + title?: string | null + asset?: { + __typename?: 'FileField' + url: string + width?: any | null + height?: any | null + } | null + } + > + } | null + image?: { + __typename?: 'FileField' + url: string + alt?: string | null + height?: any | null + width?: any | null + title?: string | null + } | null + }> +} export type BlogPostsSlugQueryVariables = Exact<{ - skip: Scalars['IntType']; - step: Scalars['IntType']; -}>; + skip: Scalars['IntType'] + step: Scalars['IntType'] +}> - -export type BlogPostsSlugQuery = { __typename?: 'Query', _allBlogPostsMeta: { __typename?: 'CollectionMetadata', count: any }, allBlogPosts: Array<{ __typename?: 'BlogPostRecord', slug?: string | null }> }; +export type BlogPostsSlugQuery = { + __typename?: 'Query' + _allBlogPostsMeta: { __typename?: 'CollectionMetadata'; count: any } + allBlogPosts: Array<{ __typename?: 'BlogPostRecord'; slug?: string | null }> +} export type SingleBlogPostQueryVariables = Exact<{ - slug: Scalars['String']; -}>; + slug: Scalars['String'] +}> - -export type SingleBlogPostQuery = { __typename?: 'Query', blogPost?: { __typename?: 'BlogPostRecord', title?: string | null, date?: any | null, slug?: string | null, _seoMetaTags: Array<{ __typename?: 'Tag', content?: string | null, tag: string, attributes?: any | null }>, category: Array<{ __typename?: 'CategoryRecord', title?: string | null, slug?: string | null }>, author?: { __typename?: 'AuthorRecord', name?: string | null } | null, content?: { __typename?: 'BlogPostModelContentField', value: any, blocks: Array<{ __typename: 'CtaRecord', id: any, label?: string | null, url?: string | null } | { __typename: 'ImageRecord', id: any, title?: string | null, asset?: { __typename?: 'FileField', url: string, width?: any | null, height?: any | null } | null }> } | null, image?: { __typename?: 'FileField', url: string, alt?: string | null, height?: any | null, width?: any | null, title?: string | null } | null } | null }; +export type SingleBlogPostQuery = { + __typename?: 'Query' + blogPost?: { + __typename?: 'BlogPostRecord' + title?: string | null + date?: any | null + slug?: string | null + _seoMetaTags: Array<{ + __typename?: 'Tag' + content?: string | null + tag: string + attributes?: any | null + }> + category: Array<{ + __typename?: 'CategoryRecord' + title?: string | null + slug?: string | null + }> + author?: { __typename?: 'AuthorRecord'; name?: string | null } | null + content?: { + __typename?: 'BlogPostModelContentField' + value: any + blocks: Array< + | { + __typename: 'CtaRecord' + id: any + label?: string | null + url?: string | null + } + | { + __typename: 'ImageRecord' + id: any + title?: string | null + asset?: { + __typename?: 'FileField' + url: string + width?: any | null + height?: any | null + } | null + } + > + } | null + image?: { + __typename?: 'FileField' + url: string + alt?: string | null + height?: any | null + width?: any | null + title?: string | null + } | null + } | null +} export const SeoTagsFragmentDoc = gql` - fragment SEOTags on Tag { - content - tag - attributes -} - `; -export const AuthorFragmentDoc = gql` - fragment Author on AuthorRecord { - name -} - `; -export const ImageFragmentDoc = gql` - fragment Image on FileField { - url - alt - height - width - title -} - `; -export const BlogPostFragmentDoc = gql` - fragment BlogPost on BlogPostRecord { - _seoMetaTags { - ...SEOTags + fragment SEOTags on Tag { + content + tag + attributes } - title - date - category { +` +export const AuthorFragmentDoc = gql` + fragment Author on AuthorRecord { + name + } +` +export const ImageFragmentDoc = gql` + fragment Image on FileField { + url + alt + height + width + title + } +` +export const BlogPostFragmentDoc = gql` + fragment BlogPost on BlogPostRecord { + _seoMetaTags { + ...SEOTags + } + title + date + category { + title + slug + } + author { + ...Author + } + slug + content { + value + blocks { + __typename + ... on ImageRecord { + id + title + asset { + url + width + height + } + } + ... on CtaRecord { + id + label + url + } + } + } + image { + ...Image + } + } + ${SeoTagsFragmentDoc} + ${AuthorFragmentDoc} + ${ImageFragmentDoc} +` +export const CategoryFragmentDoc = gql` + fragment Category on CategoryRecord { + id title slug } - author { - ...Author - } - slug - content { - value - blocks { - __typename - ... on ImageRecord { - id - title - asset { - url - width - height - } - } - ... on CtaRecord { - id - label - url - } - } - } - image { - ...Image - } -} - ${SeoTagsFragmentDoc} -${AuthorFragmentDoc} -${ImageFragmentDoc}`; -export const CategoryFragmentDoc = gql` - fragment Category on CategoryRecord { - id - title - slug -} - `; +` export const GetBlogPostsCategoriesDocument = gql` - query GetBlogPostsCategories { - allCategories { - ...Category - } -} - ${CategoryFragmentDoc}`; -export const GetBlogPostsDocument = gql` - query GetBlogPosts($skip: IntType!, $step: IntType!, $filterIds: [ItemId] = [], $filterSlugs: [String] = [], $category: [ItemId], $search: String!) { - _allBlogPostsMeta( - filter: {title: {isBlank: false}, id: {notIn: $filterIds}, slug: {notIn: $filterSlugs}, category: {anyIn: $category}, OR: [{title: {matches: {pattern: $search}}}]} - ) { - count - } - allBlogPosts( - filter: {title: {isBlank: false}, id: {notIn: $filterIds}, slug: {notIn: $filterSlugs}, category: {anyIn: $category}, OR: [{title: {matches: {pattern: $search}}}]} - first: $step - orderBy: date_DESC - skip: $skip - ) { - ...BlogPost - } -} - ${BlogPostFragmentDoc}`; -export const BlogPostsSlugDocument = gql` - query BlogPostsSlug($skip: IntType!, $step: IntType!) { - _allBlogPostsMeta { - count - } - allBlogPosts(first: $step, skip: $skip, orderBy: date_DESC) { - slug - } -} - `; -export const SingleBlogPostDocument = gql` - query SingleBlogPost($slug: String!) { - blogPost(filter: {slug: {eq: $slug}, title: {isBlank: false}}) { - ...BlogPost - } -} - ${BlogPostFragmentDoc}`; - -export type SdkFunctionWrapper = (action: (requestHeaders?:Record) => Promise, operationName: string, operationType?: string) => Promise; - - -const defaultWrapper: SdkFunctionWrapper = (action, _operationName, _operationType) => action(); - -export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper = defaultWrapper) { - return { - GetBlogPostsCategories(variables?: GetBlogPostsCategoriesQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper((wrappedRequestHeaders) => client.request(GetBlogPostsCategoriesDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GetBlogPostsCategories', 'query'); - }, - GetBlogPosts(variables: GetBlogPostsQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper((wrappedRequestHeaders) => client.request(GetBlogPostsDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'GetBlogPosts', 'query'); - }, - BlogPostsSlug(variables: BlogPostsSlugQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper((wrappedRequestHeaders) => client.request(BlogPostsSlugDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'BlogPostsSlug', 'query'); - }, - SingleBlogPost(variables: SingleBlogPostQueryVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise { - return withWrapper((wrappedRequestHeaders) => client.request(SingleBlogPostDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'SingleBlogPost', 'query'); + query GetBlogPostsCategories { + allCategories { + ...Category } - }; + } + ${CategoryFragmentDoc} +` +export const GetBlogPostsDocument = gql` + query GetBlogPosts( + $skip: IntType! + $step: IntType! + $filterIds: [ItemId] = [] + $filterSlugs: [String] = [] + $category: [ItemId] + $search: String! + ) { + _allBlogPostsMeta( + filter: { + title: { isBlank: false } + id: { notIn: $filterIds } + slug: { notIn: $filterSlugs } + category: { anyIn: $category } + OR: [{ title: { matches: { pattern: $search } } }] + } + ) { + count + } + allBlogPosts( + filter: { + title: { isBlank: false } + id: { notIn: $filterIds } + slug: { notIn: $filterSlugs } + category: { anyIn: $category } + OR: [{ title: { matches: { pattern: $search } } }] + } + first: $step + orderBy: date_DESC + skip: $skip + ) { + ...BlogPost + } + } + ${BlogPostFragmentDoc} +` +export const BlogPostsSlugDocument = gql` + query BlogPostsSlug($skip: IntType!, $step: IntType!) { + _allBlogPostsMeta { + count + } + allBlogPosts(first: $step, skip: $skip, orderBy: date_DESC) { + slug + } + } +` +export const SingleBlogPostDocument = gql` + query SingleBlogPost($slug: String!) { + blogPost(filter: { slug: { eq: $slug }, title: { isBlank: false } }) { + ...BlogPost + } + } + ${BlogPostFragmentDoc} +` + +export type SdkFunctionWrapper = ( + action: (requestHeaders?: Record) => Promise, + operationName: string, + operationType?: string +) => Promise + +const defaultWrapper: SdkFunctionWrapper = ( + action, + _operationName, + _operationType +) => action() + +export function getSdk( + client: GraphQLClient, + withWrapper: SdkFunctionWrapper = defaultWrapper +) { + return { + GetBlogPostsCategories( + variables?: GetBlogPostsCategoriesQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + GetBlogPostsCategoriesDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'GetBlogPostsCategories', + 'query' + ) + }, + GetBlogPosts( + variables: GetBlogPostsQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(GetBlogPostsDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders + }), + 'GetBlogPosts', + 'query' + ) + }, + BlogPostsSlug( + variables: BlogPostsSlugQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request(BlogPostsSlugDocument, variables, { + ...requestHeaders, + ...wrappedRequestHeaders + }), + 'BlogPostsSlug', + 'query' + ) + }, + SingleBlogPost( + variables: SingleBlogPostQueryVariables, + requestHeaders?: Dom.RequestInit['headers'] + ): Promise { + return withWrapper( + (wrappedRequestHeaders) => + client.request( + SingleBlogPostDocument, + variables, + { ...requestHeaders, ...wrappedRequestHeaders } + ), + 'SingleBlogPost', + 'query' + ) + } + } } -export type Sdk = ReturnType; \ No newline at end of file +export type Sdk = ReturnType diff --git a/src/lib/cms/queries/about.js b/src/lib/cms/queries/about.js new file mode 100644 index 0000000..38bb7f7 --- /dev/null +++ b/src/lib/cms/queries/about.js @@ -0,0 +1,44 @@ +const AboutHero = { + query: ` + { + aboutPage { + heroCtaLabel + heroCtaLink + heroDescB01 + heroDescB02 + heroHeading + heroTitle + } + }` +} + +const AboutTeam = { + query: ` + { + aboutPage { + teamHeading + teamDescB01 + teamDescB02 + } + }` +} + +const Teams = { + query: ` + { + allTeams(orderBy: [id_ASC]) { + id + memberGithub + memberImage { + url + } + memberLinkedin + memberName + memberPosition + memberTeam + memberTwitter + } + }` +} + +export { AboutHero, AboutTeam, Teams } diff --git a/src/lib/cms/queries/community.js b/src/lib/cms/queries/community.js new file mode 100644 index 0000000..4df4add --- /dev/null +++ b/src/lib/cms/queries/community.js @@ -0,0 +1,65 @@ +const CommunityHero = { + query: ` + { + communityPage { + heroButton01 + heroButton02 + heroDescription + heroHeading + heroB01Link + heroB02Link + } + } + ` +} + +const Events = { + query: ` + { + allEvents(orderBy: [eventDatetime_ASC]) { + eventDatetime + eventDesc + eventImage { + url + } + eventLink + eventLocation + eventTitle + id + } + } + ` +} + +const CommunityEvents = { + query: ` + { + communityPage { + eventsHeading + eventsDescription + } + }` +} + +const CommunitySocials = { + query: ` + { + communityPage { + socialsHeading + socialsLine + socialsImage { + url + } + socialsTwitter + socialsDiscord + socialsDiscourse + socialsReddit + socialsTelegram + socialsLinkedin + socialsFacebook + socialsInstagram + } + }` +} + +export { CommunityEvents, CommunityHero, CommunitySocials, Events } diff --git a/src/lib/cms/queries/home.js b/src/lib/cms/queries/home.js new file mode 100644 index 0000000..4af5bed --- /dev/null +++ b/src/lib/cms/queries/home.js @@ -0,0 +1,81 @@ +const HomeHero = { + query: ` + { + homePage { + heroHeading + heroButton01 + heroB01Link + heroButton02 + heroB02Link + heroSlogan + } + } + ` +} + +const HomeBenefits = { + query: ` + { + homePage { + benefitsDesc + benefitsHeading + benefitsS01Desc + benefitsS01Heading + benefitsS01Item01 + benefitsS01Item02 + benefitsS01Item03 + benefitsS01Item04 + benefitsS01Item05 + benefitsS01Item06 + benefitsS02Desc + benefitsS02Heading + benefitsS02Item01 + benefitsS02Item02 + benefitsS02Item03 + benefitsS02Item04 + benefitsS02Item05 + benefitsS02Item06 + benefitsButton + benefitsButtonLink + } + } + ` +} + +const HomeOthers = { + query: ` + { + homePage { + othersHeading + } + } + ` +} + +const Testimonials = { + query: ` + { + allTestimonials { + id + testimonialImage { + url + } + testimonialPosition + testimonialText + testimonialUsername + } + } + ` +} + +const HomeLatest = { + query: ` + { + homePage { + latestHeading + } + } + ` +} + +export { HomeBenefits, HomeHero, HomeLatest, HomeOthers, Testimonials } diff --git a/src/lib/cms/queries/legal.js b/src/lib/cms/queries/legal.js new file mode 100644 index 0000000..05ec15d --- /dev/null +++ b/src/lib/cms/queries/legal.js @@ -0,0 +1,27 @@ +const Terms = { + query: ` + { + termsPage { + termsContent { + value + blocks + } + _updatedAt + } + }` +} + +const Privacy = { + query: ` + { + privacyPage { + privacyContent { + value + blocks + } + _updatedAt + } + }` +} + +export { Privacy, Terms } diff --git a/src/lib/cms/queries/products.js b/src/lib/cms/queries/products.js new file mode 100644 index 0000000..08b1b5b --- /dev/null +++ b/src/lib/cms/queries/products.js @@ -0,0 +1,125 @@ +const ProductsHero = { + query: ` + { + productsPage { + heroDescription + heroHeading + heroItem01 + heroItem02 + heroItem03 + heroItem04 + heroItem05 + heroS01Desc + heroS01Heading + heroS02Desc + heroS02Heading + } + } + ` +} + +const ProductsWatchers = { + query: ` + { + productsPage { + watchersHeading + watchersImage { + url + } + watchersMobileImage { + url + } + watchersItem01 + watchersItem02 + watchersItem03 + watchersListHead + watchersP01 + watchersP02 + } + } + ` +} + +const ProductsStack = { + query: ` + { + productsPage { + stackDescription + stackHeading + stackListData + stackImage { + url + } + stackSvgImg { + url + } + } + } + ` +} + +const ProductsNetwork = { + query: ` + { + productsPage { + networkDesc + networkHeading + networkListItem01 + networkListItem02 + networkListItem03 + networkImg { + url + } + networkMobileImg { + url + } + } + } + ` +} + +const ProductsApp = { + query: ` + { + productsPage { + appDescription + appHeading + appImg { + url + } + appMobileImg { + url + } + } + } + ` +} + +const ProductsToken = { + query: ` + { + productsPage { + tokenHeading + tokenDesc + tokenImg { + url + } + tokenItem01 + tokenItem02 + tokenItem03 + tokenMobileImg { + url + } + } + } + ` +} + +export { + ProductsApp, + ProductsHero, + ProductsNetwork, + ProductsStack, + ProductsToken, + ProductsWatchers +} diff --git a/src/lib/datocms.ts b/src/lib/datocms.ts new file mode 100644 index 0000000..1fdf304 --- /dev/null +++ b/src/lib/datocms.ts @@ -0,0 +1,33 @@ +import tiny from 'tiny-json-http' + +interface props { + query: string + variables?: string + preview?: string +} + +export async function request({ query, variables, preview }: props) { + let endpoint = 'https://graphql.datocms.com' + + if (preview) { + endpoint += `/preview` + } + + const { body } = await tiny.post({ + url: endpoint, + headers: { + authorization: `Bearer ${process.env.NEXT_PUBLIC_CMS_ACCESS_TOKEN}` + }, + data: { + query, + variables + } + }) + + if (body.errors) { + console.error('The query has errors!') + throw body.errors + } + + return body.data +} diff --git a/src/pages/about.tsx b/src/pages/about.tsx index a140b3a..e3a57d2 100644 --- a/src/pages/about.tsx +++ b/src/pages/about.tsx @@ -9,6 +9,9 @@ import { PageLayout } from '~/components/layout/page' import Hero from '~/components/sections/about/hero' import Related from '~/components/sections/about/related' import Team from '~/components/sections/about/team' +import { AboutHero, AboutTeam, Teams } from '~/lib/cms/queries/about' + +import { request } from '../lib/datocms' export const getStaticProps = async () => { const [allBlogPosts, categories] = await Promise.all([ @@ -18,12 +21,21 @@ export const getStaticProps = async () => { const heroBlogPost = allBlogPosts.data[0] + const [heroData, teamsData, teamsPageData] = await Promise.all([ + request(AboutHero), + request(Teams), + request(AboutTeam) + ]) + return { props: { initialBlogPosts: { pagination: allBlogPosts.pagination, data: allBlogPosts.data.slice(0, 3) }, + heroData: heroData?.aboutPage, + teamsData: teamsData?.allTeams, + teamsPageData: teamsPageData?.aboutPage, categories, page: { @@ -35,7 +47,10 @@ export const getStaticProps = async () => { } const About = ({ - initialBlogPosts + initialBlogPosts, + heroData, + teamsData, + teamsPageData }: InferGetStaticPropsType) => { return ( @@ -45,8 +60,8 @@ const About = ({ { href: '/videos/banner-about.webm', as: 'fetch' } ]} /> - - + + ) diff --git a/src/pages/community.tsx b/src/pages/community.tsx index 0bafb7a..6e5b548 100644 --- a/src/pages/community.tsx +++ b/src/pages/community.tsx @@ -1,12 +1,45 @@ +import { InferGetStaticPropsType } from 'next' + import { Meta } from '~/components/common/meta' import { PageLayout } from '~/components/layout/page' import Events from '~/components/sections/community/events' import Hero from '~/components/sections/community/hero' import Socials from '~/components/sections/community/socials' +import { + CommunityEvents, + CommunityHero, + CommunitySocials, + Events as EventsQuery +} from '~/lib/cms/queries/community' -import { Page } from './_app' +import { request } from '../lib/datocms' -const Community: Page = () => { +export const getStaticProps = async () => { + const [heroData, eventsData, eventsSectionData, socialsData] = + await Promise.all([ + request(CommunityHero), + request(EventsQuery), + request(CommunityEvents), + request(CommunitySocials) + ]) + + return { + props: { + heroData: heroData?.communityPage, + eventsData: eventsData?.allEvents, + eventsSectionData: eventsSectionData?.communityPage, + socialsData: socialsData?.communityPage + }, + revalidate: 60 + } +} + +const Community = ({ + heroData, + eventsData, + eventsSectionData, + socialsData +}: InferGetStaticPropsType) => { return ( { { href: '/videos/banner-community.webm', as: 'fetch' } ]} /> - - - + + + ) } diff --git a/src/pages/index.tsx b/src/pages/index.tsx index cf7704f..e2a3b0f 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -10,6 +10,15 @@ import Benefits from '~/components/sections/homepage/benefits' import Hero from '~/components/sections/homepage/hero' import LatestNews from '~/components/sections/homepage/latest-news' import WhatOthersSay from '~/components/sections/homepage/what-others-say' +import { + HomeBenefits, + HomeHero, + HomeLatest, + HomeOthers, + Testimonials +} from '~/lib/cms/queries/home' + +import { request } from '../lib/datocms' export const getStaticProps = async () => { const [allBlogPosts, categories] = await Promise.all([ @@ -19,12 +28,26 @@ export const getStaticProps = async () => { const heroBlogPost = allBlogPosts.data[0] + const [heroData, benefitsData, othersData, latestData, testimonialsData] = + await Promise.all([ + request(HomeHero), + request(HomeBenefits), + request(HomeOthers), + request(HomeLatest), + request(Testimonials) + ]) + return { props: { initialBlogPosts: { pagination: allBlogPosts.pagination, data: allBlogPosts.data.slice(0, 8) }, + heroData: heroData?.homePage, + benefitsData: benefitsData?.homePage, + othersData: othersData?.homePage, + latestData: latestData?.homePage, + testimonialsData: testimonialsData?.allTestimonials, categories, page: { @@ -36,15 +59,20 @@ export const getStaticProps = async () => { } const HomePage = ({ - initialBlogPosts + initialBlogPosts, + heroData, + benefitsData, + latestData, + othersData, + testimonialsData }: InferGetStaticPropsType) => { return ( - - - - + + + + ) } diff --git a/src/pages/privacy-policy.tsx b/src/pages/privacy-policy.tsx index 8d585d7..e3cdfe6 100644 --- a/src/pages/privacy-policy.tsx +++ b/src/pages/privacy-policy.tsx @@ -1,18 +1,34 @@ +import { InferGetStaticPropsType } from 'next' + import { Meta } from '~/components/common/meta' import { PageLayout } from '~/components/layout/page' import Hero from '~/components/sections/privacy/hero' import s from '~/components/sections/privacy/hero/hero.module.scss' import PrivacyPolicy from '~/components/sections/privacy/privacypolicy' +import { Privacy as PrivacyQuery } from '~/lib/cms/queries/legal' -import { Page } from './_app' +import { request } from '../lib/datocms' -const Privacy: Page = () => { +export const getStaticProps = async () => { + const [privacyData] = await Promise.all([request(PrivacyQuery)]) + + return { + props: { + privacyData: privacyData?.privacyPage + }, + revalidate: 60 + } +} + +const Privacy = ({ + privacyData +}: InferGetStaticPropsType) => { return (
    - +
    ) } diff --git a/src/pages/products.tsx b/src/pages/products.tsx index ee70bf6..82c49cf 100644 --- a/src/pages/products.tsx +++ b/src/pages/products.tsx @@ -13,6 +13,16 @@ import Network from '~/components/sections/products/network' import Stack from '~/components/sections/products/stack' import Token from '~/components/sections/products/token' import Watchers from '~/components/sections/products/watchers' +import { + ProductsApp, + ProductsHero, + ProductsNetwork, + ProductsStack, + ProductsToken, + ProductsWatchers +} from '~/lib/cms/queries/products' + +import { request } from '../lib/datocms' export const getStaticProps = async () => { const [allBlogPosts, categories] = await Promise.all([ @@ -22,12 +32,28 @@ export const getStaticProps = async () => { const heroBlogPost = allBlogPosts.data[0] + const [heroData, watchersData, stackData, networkData, appData, tokenData] = + await Promise.all([ + request(ProductsHero), + request(ProductsWatchers), + request(ProductsStack), + request(ProductsNetwork), + request(ProductsApp), + request(ProductsToken) + ]) + return { props: { initialBlogPosts: { pagination: allBlogPosts.pagination, data: allBlogPosts.data.slice(0, 3) }, + heroData: heroData?.productsPage, + watchersData: watchersData?.productsPage, + stackData: stackData?.productsPage, + networkData: networkData?.productsPage, + appData: appData?.productsPage, + tokenData: tokenData?.productsPage, categories, page: { @@ -39,7 +65,13 @@ export const getStaticProps = async () => { } const Products = ({ - initialBlogPosts + initialBlogPosts, + heroData, + watchersData, + stackData, + networkData, + appData, + tokenData }: InferGetStaticPropsType) => { return ( @@ -49,12 +81,12 @@ const Products = ({ { href: '/videos/banner-products.webm', as: 'fetch' } ]} /> - - - - - - + + + + + + ) diff --git a/src/pages/terms-of-use.tsx b/src/pages/terms-of-use.tsx index 8e1ab41..1540560 100644 --- a/src/pages/terms-of-use.tsx +++ b/src/pages/terms-of-use.tsx @@ -1,18 +1,34 @@ +import { InferGetStaticPropsType } from 'next' + import { Meta } from '~/components/common/meta' import { PageLayout } from '~/components/layout/page' import Hero from '~/components/sections/terms/hero' import s from '~/components/sections/terms/hero/hero.module.scss' import TermsOfUse from '~/components/sections/terms/termsofuse' +import { Terms as TermsQuery } from '~/lib/cms/queries/legal' -import { Page } from './_app' +import { request } from '../lib/datocms' -const Terms: Page = () => { +export const getStaticProps = async () => { + const [termsData] = await Promise.all([request(TermsQuery)]) + + return { + props: { + termsData: termsData?.termsPage + }, + revalidate: 60 + } +} + +const Terms = ({ + termsData +}: InferGetStaticPropsType) => { return (
    - +
    ) } diff --git a/yarn.lock b/yarn.lock index 15bf811..bb24314 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1131,6 +1131,11 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/tiny-json-http@^7.3.1": + version "7.3.1" + resolved "https://registry.yarnpkg.com/@types/tiny-json-http/-/tiny-json-http-7.3.1.tgz#40339b990b7251689646b985823aa53487dcd77d" + integrity sha512-mJwIwN1W9VLVM7FrGPuWabuEH5FqcOGZByqV4qOSNiwMKtEKym5+6Dyhx2v7vbR/4rSjjUgngmYimaDHQbZQsw== + "@types/websocket@^1.0.4": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c" @@ -2116,6 +2121,15 @@ datocms-structured-text-generic-html-renderer@^2.0.1, datocms-structured-text-ge dependencies: datocms-structured-text-utils "^2.0.4" +datocms-structured-text-to-html-string@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/datocms-structured-text-to-html-string/-/datocms-structured-text-to-html-string-2.0.4.tgz#8379040b3af3bbf72c0293ad8a00b30c93bee7b1" + integrity sha512-ulet6wg3cxY4e4Edh0ilMfTfBK8VHeYZwhusx/fJSyk/3A1+PGiQ9EU2j2+OkOxvq+ePo0Iyzi7hgMEutSPRQQ== + dependencies: + datocms-structured-text-generic-html-renderer "^2.0.4" + datocms-structured-text-utils "^2.0.4" + vhtml "^2.2.0" + datocms-structured-text-to-plain-text@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/datocms-structured-text-to-plain-text/-/datocms-structured-text-to-plain-text-2.0.4.tgz#9798c5ea06417e7da4b4b14d1ed3dd9c0d550944" @@ -5832,6 +5846,11 @@ through@^2.3.6, through@^2.3.8: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +tiny-json-http@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/tiny-json-http/-/tiny-json-http-7.4.2.tgz#2948d7a7f650d69df65f10982f126b5c5520ce3d" + integrity sha512-+3ns4PfQTLaF69zGASkAfDoOEVmwYTXSDrU6VR93h317uFOW7evFzKa7Ih9JzPHiYSee3lUXHLAGhws2wFSexQ== + title-case@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/title-case/-/title-case-3.0.3.tgz#bc689b46f02e411f1d1e1d081f7c3deca0489982" @@ -6085,6 +6104,11 @@ value-or-promise@1.0.11, value-or-promise@^1.0.11: resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== +vhtml@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vhtml/-/vhtml-2.2.0.tgz#369e6823ed6c32cbb9f6e33395bae7c65faa014c" + integrity sha512-TPXrXrxBOslRUVnlVkiAqhoXneiertIg86bdvzionrUYhEuiROvyPZNiiP6GIIJ2Q7oPNVyEtIx8gMAZZE9lCQ== + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"