├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── assets ├── Mali-Bold.ttf ├── Mali-Medium.ttf ├── Mali-Regular.ttf └── Mali-SemiBold.ttf ├── components ├── Button.tsx ├── Card.tsx ├── Header.tsx ├── Image.tsx ├── Layout.tsx └── Navigation.tsx ├── constant ├── navigation.ts ├── seo.tsx └── social.tsx ├── graphql.config.yml ├── graphql ├── data.graphql └── generated.ts ├── jsconfig.json ├── lib └── request.ts ├── next-env.d.ts ├── next.config.js ├── package.json ├── pages ├── _app.tsx ├── _document.tsx ├── about.tsx ├── api │ └── social-image.tsx ├── blog.tsx ├── blog │ └── [slug].tsx ├── index.tsx ├── now.tsx ├── shots.tsx ├── swap.tsx ├── works.tsx └── works │ └── [slug].tsx ├── public ├── actualme.jpeg ├── favicon │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── image-loading.jpg ├── kiki.jpg ├── me.png ├── resume.pdf └── webcam.jpg ├── styles └── theme.ts ├── tsconfig.json └── yarn.lock /.eslintignore: -------------------------------------------------------------------------------- 1 | graphql/generated.ts 2 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | const { extendEslint } = require("@graz-sh/style-guide"); 4 | 5 | module.exports = extendEslint(["browser-node", "react", "typescript", "tsup"], { 6 | rules: { 7 | "@typescript-eslint/no-non-null-assertion": "warn", 8 | "react/no-unstable-nested-components": "off", 9 | }, 10 | root: true, 11 | }); 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # kikiding.space 2 | 3 | Using: 4 | 5 | - Next.js 6 | - Chakra UI 7 | - DatoCMS 8 | - [Strangelove style guide](https://github.com/strangelove-ventures/style-guide) 9 | -------------------------------------------------------------------------------- /assets/Mali-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/assets/Mali-Bold.ttf -------------------------------------------------------------------------------- /assets/Mali-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/assets/Mali-Medium.ttf -------------------------------------------------------------------------------- /assets/Mali-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/assets/Mali-Regular.ttf -------------------------------------------------------------------------------- /assets/Mali-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/assets/Mali-SemiBold.ttf -------------------------------------------------------------------------------- /components/Button.tsx: -------------------------------------------------------------------------------- 1 | import type { CenterProps } from "@chakra-ui/react"; 2 | import { Center } from "@chakra-ui/react"; 3 | import React from "react"; 4 | 5 | export const MyButton: React.FC = (props) => ( 6 |
16 | ); 17 | 18 | export const SocialButton: React.FC = (props) => ( 19 | 20 | {props.children} 21 | 22 | ); 23 | -------------------------------------------------------------------------------- /components/Card.tsx: -------------------------------------------------------------------------------- 1 | import type { StackProps } from "@chakra-ui/react"; 2 | import { Flex, Link, Stack, Text } from "@chakra-ui/react"; 3 | import { format } from "date-fns"; 4 | import type { SingleBlogQuery, SingleWorkQuery } from "graphql/generated"; 5 | import NextLink from "next/link"; 6 | import React from "react"; 7 | 8 | import { MyButton } from "./Button"; 9 | 10 | export const HCardLayoutList = ({ 11 | children, 12 | title, 13 | link, 14 | }: { 15 | children: React.ReactNode; 16 | title: string; 17 | link: string; 18 | }) => ( 19 | 20 | 21 | 22 | {title} 23 | 24 | 25 | View All 26 | 27 | 28 | 29 | {children} 30 | 31 | 32 | ); 33 | export const VCardLayoutList = ({ 34 | children, 35 | title, 36 | link, 37 | disableViewAll, 38 | }: { 39 | children: React.ReactNode; 40 | title: string; 41 | link?: string; 42 | disableViewAll?: boolean; 43 | }) => ( 44 | 45 | 46 | 47 | {title} 48 | 49 | {!disableViewAll && link ? ( 50 | 51 | 52 | View All 53 | 54 | 55 | ) : null} 56 | 57 | 58 | {children} 59 | 60 | 61 | ); 62 | 63 | export const CardShell: React.FC = (props) => ( 64 | 65 | ); 66 | 67 | export const BlogCard = ({ item }: { item: SingleBlogQuery["blog"] }) => ( 68 | 69 | 70 | 71 | {item?.title} 72 | 73 | 74 | {item?.date ? format(new Date(item.date), "dd MMM yyyy") : null} | {item?.categories} 75 | 76 | {item?.excerpt} 77 | 78 | 79 | ); 80 | 81 | export const WorkCard = ({ item }: { item: SingleWorkQuery["work"] }) => ( 82 | 83 | 84 | 85 | {item?.title} 86 | 87 | {item?.excerpt} 88 | 89 | {item?.categories?.split(", ").map((cat) => ( 90 | 91 | {cat} 92 | 93 | ))} 94 | 95 | 96 | 97 | ); 98 | -------------------------------------------------------------------------------- /components/Header.tsx: -------------------------------------------------------------------------------- 1 | import { Box, Flex, Heading, Stack, Text } from "@chakra-ui/react"; 2 | import Image from "next/image"; 3 | 4 | import { SOCIAL_LINKS } from "../constant/social"; 5 | import { SocialButton } from "./Button"; 6 | 7 | export const Header = () => { 8 | return ( 9 | 10 | 11 | Hi👋 I'm Kiki 12 | 13 | Creative Technologist 14 | 15 | 16 | I'm a designer who trapped in the mind of a programmer. Crafting beautiful apps with React and ❤️ 17 | 18 | 19 | {SOCIAL_LINKS.map((item) => ( 20 | 21 | 22 | {item.icon} 23 | 24 | 25 | ))} 26 | 27 | 28 | 29 | Kiki Illustrated 30 | 31 | 32 | ); 33 | }; 34 | -------------------------------------------------------------------------------- /components/Image.tsx: -------------------------------------------------------------------------------- 1 | import type { ImageProps } from "@chakra-ui/react"; 2 | import { Box } from "@chakra-ui/react"; 3 | import NextImage from "next/image"; 4 | import * as React from "react"; 5 | 6 | export const ChakraNextImage = (props: ImageProps) => { 7 | const { src, alt, ...rest } = props; 8 | return ( 9 | 10 | 18 | 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /components/Layout.tsx: -------------------------------------------------------------------------------- 1 | import type { StackProps } from "@chakra-ui/react"; 2 | import { Box, Stack } from "@chakra-ui/react"; 3 | import React from "react"; 4 | 5 | import { Navigation } from "./Navigation"; 6 | 7 | export const Layout = ({ children }: { children: React.ReactNode }) => { 8 | return ( 9 | 10 | 11 | {children} 12 | 13 | 14 | 15 | ); 16 | }; 17 | 18 | export const SinglePageContent: React.FC = (props) => ( 19 | 20 | ); 21 | -------------------------------------------------------------------------------- /components/Navigation.tsx: -------------------------------------------------------------------------------- 1 | import { HStack, useBreakpointValue } from "@chakra-ui/react"; 2 | import Link from "next/link"; 3 | import { useRouter } from "next/router"; 4 | import React from "react"; 5 | 6 | import { NAVIGATION } from "../constant/navigation"; 7 | import { MyButton } from "./Button"; 8 | 9 | export const Navigation = () => { 10 | const routes = useRouter(); 11 | const variant = useBreakpointValue(["handDrawnBorderLight", "handDrawnBorder"]); 12 | if (routes.pathname === "/image") return null; 13 | return ( 14 | 25 | {NAVIGATION.map((item) => ( 26 | 27 | 36 | {item.title} 37 | 38 | 39 | ))} 40 | 41 | ); 42 | }; 43 | -------------------------------------------------------------------------------- /constant/navigation.ts: -------------------------------------------------------------------------------- 1 | export const NAVIGATION = [ 2 | { title: "home", path: "/" }, 3 | { title: "about", path: "/about" }, 4 | { title: "now", path: "/now" }, 5 | { title: "blog", path: "/blog" }, 6 | { title: "works", path: "/works" }, 7 | { title: "shots", path: "/shots" }, 8 | ]; 9 | -------------------------------------------------------------------------------- /constant/seo.tsx: -------------------------------------------------------------------------------- 1 | import type { NextSeoProps } from "next-seo"; 2 | import { NextSeo } from "next-seo"; 3 | 4 | export const SEO = (props: NextSeoProps) => ( 5 | 27 | ); 28 | -------------------------------------------------------------------------------- /constant/social.tsx: -------------------------------------------------------------------------------- 1 | import { Github, Linkedin, Twitter } from "@chakra-icons/bootstrap"; 2 | import React from "react"; 3 | 4 | export const SOCIAL_LINKS = [ 5 | { 6 | title: "twitter", 7 | link: "https://twitter.com/kikiding", 8 | icon: , 9 | }, 10 | { 11 | title: "github", 12 | link: "https://github.com/codingki", 13 | icon: , 14 | }, 15 | // { 16 | // title: "youtube", 17 | // link: "https://www.youtube.com/channel/UC3D632wKmPs7XwH83DAX16Aå", 18 | // icon: , 19 | // }, 20 | { 21 | title: "linkedIn", 22 | link: "https://www.linkedin.com/in/nur-fikri/", 23 | icon: , 24 | }, 25 | ]; 26 | -------------------------------------------------------------------------------- /graphql.config.yml: -------------------------------------------------------------------------------- 1 | schema: 2 | - https://graphql.datocms.com: 3 | headers: 4 | Authorization: "eca2ef89a4124e153ab834b0f8d2e8" 5 | documents: "./graphql/**/*.graphql" 6 | generates: 7 | graphql/generated.ts: 8 | plugins: 9 | - typescript 10 | - typescript-operations: 11 | strictScalars: true 12 | scalars: 13 | BooleanType: boolean 14 | CustomData: Record 15 | Date: string 16 | DateTime: string 17 | FloatType: number 18 | IntType: number 19 | ItemId: string 20 | JsonField: unkown 21 | MetaTagAttributes: Record 22 | UploadId: string 23 | - typed-document-node 24 | -------------------------------------------------------------------------------- /graphql/data.graphql: -------------------------------------------------------------------------------- 1 | query HomeQuery { 2 | allBlogs(orderBy: date_DESC, first: "2") { 3 | title 4 | id 5 | excerpt 6 | categories 7 | date 8 | slug 9 | } 10 | allWorks(orderBy: date_DESC, first: "3") { 11 | title 12 | slug 13 | id 14 | excerpt 15 | date 16 | categories 17 | } 18 | allLogLists(orderBy: date_DESC) { 19 | content 20 | date 21 | } 22 | } 23 | 24 | query AllBlog { 25 | allBlogs(orderBy: date_DESC) { 26 | title 27 | id 28 | excerpt 29 | categories 30 | date 31 | slug 32 | } 33 | } 34 | 35 | query Allwork { 36 | allWorks(orderBy: date_DESC) { 37 | title 38 | slug 39 | id 40 | excerpt 41 | date 42 | categories 43 | } 44 | } 45 | 46 | query SingleBlog($slug: String) { 47 | blog(filter: { slug: { eq: $slug } }) { 48 | title 49 | id 50 | excerpt 51 | categories 52 | date 53 | slug 54 | content 55 | image { 56 | url 57 | } 58 | } 59 | } 60 | 61 | query SingleWork($slug: String) { 62 | work(filter: { slug: { eq: $slug } }) { 63 | date 64 | id 65 | excerpt 66 | deployment 67 | categories 68 | about 69 | slug 70 | title 71 | technologyUsed 72 | image { 73 | url 74 | } 75 | } 76 | } 77 | query NowPage { 78 | now { 79 | updatedAt 80 | content 81 | } 82 | } 83 | 84 | query AboutPage { 85 | about { 86 | content 87 | } 88 | } 89 | 90 | query ShotsPage { 91 | allShotsAnalogs(first: 1) { 92 | id 93 | shots { 94 | filename 95 | url 96 | } 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /graphql/generated.ts: -------------------------------------------------------------------------------- 1 | import { TypedDocumentNode as DocumentNode } from "@graphql-typed-document-node/core"; 2 | export type Maybe = T | null; 3 | export type InputMaybe = Maybe; 4 | export type Exact = { [K in keyof T]: T[K] }; 5 | export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; 6 | export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; 7 | /** All built-in and custom scalars, mapped to their actual values */ 8 | export type Scalars = { 9 | ID: string; 10 | String: string; 11 | Boolean: boolean; 12 | Int: number; 13 | Float: number; 14 | BooleanType: any; 15 | CustomData: any; 16 | Date: any; 17 | DateTime: any; 18 | FloatType: any; 19 | IntType: any; 20 | ItemId: any; 21 | MetaTagAttributes: any; 22 | UploadId: any; 23 | }; 24 | 25 | /** Record of type About (about) */ 26 | export type AboutRecord = RecordInterface & { 27 | __typename?: "AboutRecord"; 28 | _createdAt: Scalars["DateTime"]; 29 | _firstPublishedAt?: Maybe; 30 | _isValid: Scalars["BooleanType"]; 31 | _modelApiKey: Scalars["String"]; 32 | _publicationScheduledAt?: Maybe; 33 | _publishedAt?: Maybe; 34 | /** SEO meta tags */ 35 | _seoMetaTags: Array; 36 | _status: ItemStatus; 37 | _unpublishingScheduledAt?: Maybe; 38 | _updatedAt: Scalars["DateTime"]; 39 | content?: Maybe; 40 | createdAt: Scalars["DateTime"]; 41 | id: Scalars["ItemId"]; 42 | updatedAt: Scalars["DateTime"]; 43 | }; 44 | 45 | /** Record of type About (about) */ 46 | export type AboutRecord_SeoMetaTagsArgs = { 47 | locale?: InputMaybe; 48 | }; 49 | 50 | /** Record of type About (about) */ 51 | export type AboutRecordContentArgs = { 52 | markdown?: InputMaybe; 53 | }; 54 | 55 | export type BlogModelFilter = { 56 | OR?: InputMaybe>>; 57 | _createdAt?: InputMaybe; 58 | _firstPublishedAt?: InputMaybe; 59 | _isValid?: InputMaybe; 60 | _publicationScheduledAt?: InputMaybe; 61 | _publishedAt?: InputMaybe; 62 | _status?: InputMaybe; 63 | _unpublishingScheduledAt?: InputMaybe; 64 | _updatedAt?: InputMaybe; 65 | categories?: InputMaybe; 66 | content?: InputMaybe; 67 | createdAt?: InputMaybe; 68 | date?: InputMaybe; 69 | excerpt?: InputMaybe; 70 | id?: InputMaybe; 71 | image?: InputMaybe; 72 | slug?: InputMaybe; 73 | title?: InputMaybe; 74 | updatedAt?: InputMaybe; 75 | }; 76 | 77 | export enum BlogModelOrderBy { 78 | CreatedAtAsc = "_createdAt_ASC", 79 | CreatedAtDesc = "_createdAt_DESC", 80 | FirstPublishedAtAsc = "_firstPublishedAt_ASC", 81 | FirstPublishedAtDesc = "_firstPublishedAt_DESC", 82 | IsValidAsc = "_isValid_ASC", 83 | IsValidDesc = "_isValid_DESC", 84 | PublicationScheduledAtAsc = "_publicationScheduledAt_ASC", 85 | PublicationScheduledAtDesc = "_publicationScheduledAt_DESC", 86 | PublishedAtAsc = "_publishedAt_ASC", 87 | PublishedAtDesc = "_publishedAt_DESC", 88 | StatusAsc = "_status_ASC", 89 | StatusDesc = "_status_DESC", 90 | UnpublishingScheduledAtAsc = "_unpublishingScheduledAt_ASC", 91 | UnpublishingScheduledAtDesc = "_unpublishingScheduledAt_DESC", 92 | UpdatedAtAsc = "_updatedAt_ASC", 93 | UpdatedAtDesc = "_updatedAt_DESC", 94 | CategoriesAsc = "categories_ASC", 95 | CategoriesDesc = "categories_DESC", 96 | DateAsc = "date_ASC", 97 | DateDesc = "date_DESC", 98 | ExcerptAsc = "excerpt_ASC", 99 | ExcerptDesc = "excerpt_DESC", 100 | IdAsc = "id_ASC", 101 | IdDesc = "id_DESC", 102 | TitleAsc = "title_ASC", 103 | TitleDesc = "title_DESC", 104 | } 105 | 106 | /** Record of type Blog (blog) */ 107 | export type BlogRecord = RecordInterface & { 108 | __typename?: "BlogRecord"; 109 | _createdAt: Scalars["DateTime"]; 110 | _firstPublishedAt?: Maybe; 111 | _isValid: Scalars["BooleanType"]; 112 | _modelApiKey: Scalars["String"]; 113 | _publicationScheduledAt?: Maybe; 114 | _publishedAt?: Maybe; 115 | /** SEO meta tags */ 116 | _seoMetaTags: Array; 117 | _status: ItemStatus; 118 | _unpublishingScheduledAt?: Maybe; 119 | _updatedAt: Scalars["DateTime"]; 120 | categories?: Maybe; 121 | content?: Maybe; 122 | createdAt: Scalars["DateTime"]; 123 | date?: Maybe; 124 | excerpt?: Maybe; 125 | id: Scalars["ItemId"]; 126 | image?: Maybe; 127 | slug?: Maybe; 128 | title?: Maybe; 129 | updatedAt: Scalars["DateTime"]; 130 | }; 131 | 132 | /** Record of type Blog (blog) */ 133 | export type BlogRecord_SeoMetaTagsArgs = { 134 | locale?: InputMaybe; 135 | }; 136 | 137 | /** Record of type Blog (blog) */ 138 | export type BlogRecordContentArgs = { 139 | markdown?: InputMaybe; 140 | }; 141 | 142 | /** Specifies how to filter Boolean fields */ 143 | export type BooleanFilter = { 144 | /** Search for records with an exact match */ 145 | eq?: InputMaybe; 146 | }; 147 | 148 | export type CollectionMetadata = { 149 | __typename?: "CollectionMetadata"; 150 | count: Scalars["IntType"]; 151 | }; 152 | 153 | export enum ColorBucketType { 154 | Black = "black", 155 | Blue = "blue", 156 | Brown = "brown", 157 | Cyan = "cyan", 158 | Green = "green", 159 | Grey = "grey", 160 | Orange = "orange", 161 | Pink = "pink", 162 | Purple = "purple", 163 | Red = "red", 164 | White = "white", 165 | Yellow = "yellow", 166 | } 167 | 168 | export type ColorField = { 169 | __typename?: "ColorField"; 170 | alpha: Scalars["IntType"]; 171 | blue: Scalars["IntType"]; 172 | green: Scalars["IntType"]; 173 | hex: Scalars["String"]; 174 | red: Scalars["IntType"]; 175 | }; 176 | 177 | /** Specifies how to filter by creation datetime */ 178 | export type CreatedAtFilter = { 179 | /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ 180 | eq?: InputMaybe; 181 | /** Filter records with the specified field defined (i.e. with any value) or not */ 182 | exists?: InputMaybe; 183 | /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ 184 | gt?: InputMaybe; 185 | /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ 186 | gte?: InputMaybe; 187 | /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ 188 | lt?: InputMaybe; 189 | /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ 190 | lte?: InputMaybe; 191 | /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ 192 | neq?: InputMaybe; 193 | }; 194 | 195 | /** Specifies how to filter Date fields */ 196 | export type DateFilter = { 197 | /** Search for records with an exact match */ 198 | eq?: InputMaybe; 199 | /** Filter records with the specified field defined (i.e. with any value) or not */ 200 | exists?: InputMaybe; 201 | /** Filter records with a value that's strictly greater than the one specified */ 202 | gt?: InputMaybe; 203 | /** Filter records with a value that's greater than or equal to the one specified */ 204 | gte?: InputMaybe; 205 | /** Filter records with a value that's less than the one specified */ 206 | lt?: InputMaybe; 207 | /** Filter records with a value that's less or equal than the one specified */ 208 | lte?: InputMaybe; 209 | /** Exclude records with an exact match */ 210 | neq?: InputMaybe; 211 | }; 212 | 213 | export enum FaviconType { 214 | AppleTouchIcon = "appleTouchIcon", 215 | Icon = "icon", 216 | MsApplication = "msApplication", 217 | } 218 | 219 | export type FileField = FileFieldInterface & { 220 | __typename?: "FileField"; 221 | _createdAt: Scalars["DateTime"]; 222 | _updatedAt: Scalars["DateTime"]; 223 | alt?: Maybe; 224 | author?: Maybe; 225 | basename: Scalars["String"]; 226 | blurUpThumb?: Maybe; 227 | blurhash?: Maybe; 228 | colors: Array; 229 | copyright?: Maybe; 230 | customData: Scalars["CustomData"]; 231 | exifInfo: Scalars["CustomData"]; 232 | filename: Scalars["String"]; 233 | focalPoint?: Maybe; 234 | format: Scalars["String"]; 235 | height?: Maybe; 236 | id: Scalars["UploadId"]; 237 | md5: Scalars["String"]; 238 | mimeType: Scalars["String"]; 239 | notes?: Maybe; 240 | responsiveImage?: Maybe; 241 | size: Scalars["IntType"]; 242 | smartTags: Array; 243 | tags: Array; 244 | title?: Maybe; 245 | url: Scalars["String"]; 246 | video?: Maybe; 247 | width?: Maybe; 248 | }; 249 | 250 | export type FileFieldAltArgs = { 251 | fallbackLocales?: InputMaybe>; 252 | locale?: InputMaybe; 253 | }; 254 | 255 | export type FileFieldBlurUpThumbArgs = { 256 | imgixParams?: InputMaybe; 257 | punch?: InputMaybe; 258 | quality?: InputMaybe; 259 | size?: InputMaybe; 260 | }; 261 | 262 | export type FileFieldCustomDataArgs = { 263 | fallbackLocales?: InputMaybe>; 264 | locale?: InputMaybe; 265 | }; 266 | 267 | export type FileFieldFocalPointArgs = { 268 | fallbackLocales?: InputMaybe>; 269 | locale?: InputMaybe; 270 | }; 271 | 272 | export type FileFieldResponsiveImageArgs = { 273 | fallbackLocales?: InputMaybe>; 274 | imgixParams?: InputMaybe; 275 | locale?: InputMaybe; 276 | sizes?: InputMaybe; 277 | }; 278 | 279 | export type FileFieldTitleArgs = { 280 | fallbackLocales?: InputMaybe>; 281 | locale?: InputMaybe; 282 | }; 283 | 284 | export type FileFieldUrlArgs = { 285 | imgixParams?: InputMaybe; 286 | }; 287 | 288 | export type FileFieldInterface = { 289 | _createdAt: Scalars["DateTime"]; 290 | _updatedAt: Scalars["DateTime"]; 291 | alt?: Maybe; 292 | author?: Maybe; 293 | basename: Scalars["String"]; 294 | blurUpThumb?: Maybe; 295 | blurhash?: Maybe; 296 | colors: Array; 297 | copyright?: Maybe; 298 | customData: Scalars["CustomData"]; 299 | exifInfo: Scalars["CustomData"]; 300 | filename: Scalars["String"]; 301 | focalPoint?: Maybe; 302 | format: Scalars["String"]; 303 | height?: Maybe; 304 | id: Scalars["UploadId"]; 305 | md5: Scalars["String"]; 306 | mimeType: Scalars["String"]; 307 | notes?: Maybe; 308 | responsiveImage?: Maybe; 309 | size: Scalars["IntType"]; 310 | smartTags: Array; 311 | tags: Array; 312 | title?: Maybe; 313 | url: Scalars["String"]; 314 | video?: Maybe; 315 | width?: Maybe; 316 | }; 317 | 318 | export type FileFieldInterfaceAltArgs = { 319 | fallbackLocales?: InputMaybe>; 320 | locale?: InputMaybe; 321 | }; 322 | 323 | export type FileFieldInterfaceBlurUpThumbArgs = { 324 | imgixParams?: InputMaybe; 325 | punch?: InputMaybe; 326 | quality?: InputMaybe; 327 | size?: InputMaybe; 328 | }; 329 | 330 | export type FileFieldInterfaceCustomDataArgs = { 331 | fallbackLocales?: InputMaybe>; 332 | locale?: InputMaybe; 333 | }; 334 | 335 | export type FileFieldInterfaceFocalPointArgs = { 336 | fallbackLocales?: InputMaybe>; 337 | locale?: InputMaybe; 338 | }; 339 | 340 | export type FileFieldInterfaceResponsiveImageArgs = { 341 | fallbackLocales?: InputMaybe>; 342 | imgixParams?: InputMaybe; 343 | locale?: InputMaybe; 344 | sizes?: InputMaybe; 345 | }; 346 | 347 | export type FileFieldInterfaceTitleArgs = { 348 | fallbackLocales?: InputMaybe>; 349 | locale?: InputMaybe; 350 | }; 351 | 352 | export type FileFieldInterfaceUrlArgs = { 353 | imgixParams?: InputMaybe; 354 | }; 355 | 356 | /** Specifies how to filter Single-file/image fields */ 357 | export type FileFilter = { 358 | /** Search for records with an exact match. The specified value must be an Upload ID */ 359 | eq?: InputMaybe; 360 | /** Filter records with the specified field defined (i.e. with any value) or not */ 361 | exists?: InputMaybe; 362 | /** Filter records that have one of the specified uploads */ 363 | in?: InputMaybe>>; 364 | /** Exclude records with an exact match. The specified value must be an Upload ID */ 365 | neq?: InputMaybe; 366 | /** Filter records that do not have one of the specified uploads */ 367 | notIn?: InputMaybe>>; 368 | }; 369 | 370 | /** Specifies how to filter Multiple files/images field */ 371 | export type GalleryFilter = { 372 | /** Filter records that have all of the specified uploads. The specified values must be Upload IDs */ 373 | allIn?: InputMaybe>>; 374 | /** Filter records that have one of the specified uploads. The specified values must be Upload IDs */ 375 | anyIn?: InputMaybe>>; 376 | /** Search for records with an exact match. The specified values must be Upload IDs */ 377 | eq?: InputMaybe>>; 378 | /** Filter records with the specified field defined (i.e. with any value) or not */ 379 | exists?: InputMaybe; 380 | /** Filter records that do not have any of the specified uploads. The specified values must be Upload IDs */ 381 | notIn?: InputMaybe>>; 382 | }; 383 | 384 | export type GlobalSeoField = { 385 | __typename?: "GlobalSeoField"; 386 | facebookPageUrl?: Maybe; 387 | fallbackSeo?: Maybe; 388 | siteName?: Maybe; 389 | titleSuffix?: Maybe; 390 | twitterAccount?: Maybe; 391 | }; 392 | 393 | export type ImgixParams = { 394 | /** 395 | * Aspect Ratio 396 | * 397 | * Specifies an aspect ratio to maintain when resizing and cropping the image 398 | * 399 | * Depends on: `fit=crop` 400 | * 401 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/ar) 402 | */ 403 | ar?: InputMaybe; 404 | /** 405 | * Automatic 406 | * 407 | * Applies automatic enhancements to images. 408 | * 409 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/auto) 410 | */ 411 | auto?: InputMaybe>; 412 | /** 413 | * Background Color 414 | * 415 | * Colors the background of padded and partially-transparent images. 416 | * 417 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/bg) 418 | */ 419 | bg?: InputMaybe; 420 | /** 421 | * Blend 422 | * 423 | * Specifies the location of the blend image. 424 | * 425 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend) 426 | */ 427 | blend?: InputMaybe; 428 | /** 429 | * Blend Align 430 | * 431 | * Changes the blend alignment relative to the parent image. 432 | * 433 | * Depends on: `blend` 434 | * 435 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-align) 436 | */ 437 | blendAlign?: InputMaybe>; 438 | /** 439 | * Blend Alpha 440 | * 441 | * Changes the alpha of the blend image. 442 | * 443 | * Depends on: `blend` 444 | * 445 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-alpha) 446 | */ 447 | blendAlpha?: InputMaybe; 448 | /** 449 | * Blend Color 450 | * 451 | * Specifies a color to use when applying the blend. 452 | * 453 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-color) 454 | */ 455 | blendColor?: InputMaybe; 456 | /** 457 | * Blend Crop 458 | * 459 | * Specifies the type of crop for blend images. 460 | * 461 | * Depends on: `blend` 462 | * 463 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-crop) 464 | */ 465 | blendCrop?: InputMaybe>; 466 | /** 467 | * Blend Fit 468 | * 469 | * Specifies the fit mode for blend images. 470 | * 471 | * Depends on: `blend` 472 | * 473 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-fit) 474 | */ 475 | blendFit?: InputMaybe; 476 | /** 477 | * Blend Height 478 | * 479 | * Adjusts the height of the blend image. 480 | * 481 | * Depends on: `blend` 482 | * 483 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-h) 484 | */ 485 | blendH?: InputMaybe; 486 | /** 487 | * Blend Mode 488 | * 489 | * Sets the blend mode for a blend image. 490 | * 491 | * Depends on: `blend` 492 | * 493 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-mode) 494 | */ 495 | blendMode?: InputMaybe; 496 | /** 497 | * Blend Padding 498 | * 499 | * Applies padding to the blend image. 500 | * 501 | * Depends on: `blend` 502 | * 503 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-pad) 504 | */ 505 | blendPad?: InputMaybe; 506 | /** 507 | * Blend Size 508 | * 509 | * Adjusts the size of the blend image. 510 | * 511 | * Depends on: `blend` 512 | * 513 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-size) 514 | */ 515 | blendSize?: InputMaybe; 516 | /** 517 | * Blend Width 518 | * 519 | * Adjusts the width of the blend image. 520 | * 521 | * Depends on: `blend` 522 | * 523 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-w) 524 | */ 525 | blendW?: InputMaybe; 526 | /** 527 | * Blend X Position 528 | * 529 | * Adjusts the x-offset of the blend image relative to its parent. 530 | * 531 | * Depends on: `blend` 532 | * 533 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-x) 534 | */ 535 | blendX?: InputMaybe; 536 | /** 537 | * Blend Y Position 538 | * 539 | * Adjusts the y-offset of the blend image relative to its parent. 540 | * 541 | * Depends on: `blend` 542 | * 543 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/blending/blend-y) 544 | */ 545 | blendY?: InputMaybe; 546 | /** 547 | * Gaussian Blur 548 | * 549 | * Applies a gaussian blur to an image. 550 | * 551 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/blur) 552 | */ 553 | blur?: InputMaybe; 554 | /** 555 | * Border Size & Color 556 | * 557 | * Applies a border to an image. 558 | * 559 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border) 560 | */ 561 | border?: InputMaybe; 562 | /** 563 | * Border Bottom 564 | * 565 | * Sets bottom border of an image. 566 | * 567 | * Depends on: `border` 568 | * 569 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-bottom) 570 | */ 571 | borderBottom?: InputMaybe; 572 | /** 573 | * Border Left 574 | * 575 | * Sets left border of an image. 576 | * 577 | * Depends on: `border` 578 | * 579 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-left) 580 | */ 581 | borderLeft?: InputMaybe; 582 | /** 583 | * Outer Border Radius 584 | * 585 | * Sets the outer radius of the image's border in pixels. 586 | * 587 | * Depends on: `border` 588 | * 589 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-radius) 590 | */ 591 | borderRadius?: InputMaybe; 592 | /** 593 | * Inner Border Radius 594 | * 595 | * Sets the inner radius of the image's border in pixels. 596 | * 597 | * Depends on: `border` 598 | * 599 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-radius-inner) 600 | */ 601 | borderRadiusInner?: InputMaybe; 602 | /** 603 | * Border Right 604 | * 605 | * Sets right border of an image. 606 | * 607 | * Depends on: `border` 608 | * 609 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-right) 610 | */ 611 | borderRight?: InputMaybe; 612 | /** 613 | * Border Top 614 | * 615 | * Sets top border of an image. 616 | * 617 | * Depends on: `border` 618 | * 619 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/border-top) 620 | */ 621 | borderTop?: InputMaybe; 622 | /** 623 | * Brightness 624 | * 625 | * Adjusts the brightness of the source image. 626 | * 627 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/bri) 628 | */ 629 | bri?: InputMaybe; 630 | /** 631 | * Client Hints 632 | * 633 | * Sets one or more Client-Hints headers 634 | * 635 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/ch) 636 | */ 637 | ch?: InputMaybe>; 638 | /** 639 | * Chroma Subsampling 640 | * 641 | * Specifies the output chroma subsampling rate. 642 | * 643 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/chromasub) 644 | */ 645 | chromasub?: InputMaybe; 646 | /** 647 | * Color Quantization 648 | * 649 | * Limits the number of unique colors in an image. 650 | * 651 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/colorquant) 652 | */ 653 | colorquant?: InputMaybe; 654 | /** 655 | * Palette Color Count 656 | * 657 | * Specifies how many colors to include in a palette-extraction response. 658 | * 659 | * Depends on: `palette` 660 | * 661 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/colors) 662 | */ 663 | colors?: InputMaybe; 664 | /** 665 | * Contrast 666 | * 667 | * Adjusts the contrast of the source image. 668 | * 669 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/con) 670 | */ 671 | con?: InputMaybe; 672 | /** 673 | * Mask Corner Radius 674 | * 675 | * Specifies the radius value for a rounded corner mask. 676 | * 677 | * Depends on: `mask=corners` 678 | * 679 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask/corner-radius) 680 | */ 681 | cornerRadius?: InputMaybe; 682 | /** 683 | * Crop Mode 684 | * 685 | * Specifies how to crop an image. 686 | * 687 | * Depends on: `fit=crop` 688 | * 689 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/crop) 690 | */ 691 | crop?: InputMaybe>; 692 | /** 693 | * Color Space 694 | * 695 | * Specifies the color space of the output image. 696 | * 697 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/cs) 698 | */ 699 | cs?: InputMaybe; 700 | /** 701 | * Download 702 | * 703 | * Forces a URL to use send-file in its response. 704 | * 705 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/dl) 706 | */ 707 | dl?: InputMaybe; 708 | /** 709 | * Dots Per Inch 710 | * 711 | * Sets the DPI value in the EXIF header. 712 | * 713 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/dpi) 714 | */ 715 | dpi?: InputMaybe; 716 | /** 717 | * Device Pixel Ratio 718 | * 719 | * Adjusts the device-pixel ratio of the output image. 720 | * 721 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/dpr) 722 | */ 723 | dpr?: InputMaybe; 724 | /** 725 | * Duotone 726 | * 727 | * Applies a duotone effect to the source image. 728 | * 729 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/duotone) 730 | */ 731 | duotone?: InputMaybe; 732 | /** 733 | * Duotone Alpha 734 | * 735 | * Changes the alpha of the duotone effect atop the source image. 736 | * 737 | * Depends on: `duotone` 738 | * 739 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/duotone-alpha) 740 | */ 741 | duotoneAlpha?: InputMaybe; 742 | /** 743 | * Exposure 744 | * 745 | * Adjusts the exposure of the output image. 746 | * 747 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/exp) 748 | */ 749 | exp?: InputMaybe; 750 | /** 751 | * Url Expiration Timestamp 752 | * 753 | * A Unix timestamp specifying a UTC time. Requests made to this URL after that time will output a 404 status code. 754 | * 755 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/expires) 756 | */ 757 | expires?: InputMaybe; 758 | /** 759 | * Face Index 760 | * 761 | * Selects a face to crop to. 762 | * 763 | * Depends on: `fit=facearea` 764 | * 765 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/faceindex) 766 | */ 767 | faceindex?: InputMaybe; 768 | /** 769 | * Face Padding 770 | * 771 | * Adjusts padding around a selected face. 772 | * 773 | * Depends on: `fit=facearea` 774 | * 775 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/facepad) 776 | */ 777 | facepad?: InputMaybe; 778 | /** 779 | * Json Face Data 780 | * 781 | * Specifies that face data should be included in output when combined with `fm=json`. 782 | * 783 | * Depends on: `fm=json` 784 | * 785 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/face-detection/faces) 786 | */ 787 | faces?: InputMaybe; 788 | /** 789 | * Fill Mode 790 | * 791 | * Determines how to fill in additional space created by the fit setting 792 | * 793 | * Depends on: `fit` 794 | * 795 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/fill) 796 | */ 797 | fill?: InputMaybe; 798 | /** 799 | * Fill Color 800 | * 801 | * Sets the fill color for images with additional space created by the fit setting 802 | * 803 | * Depends on: `fill=solid` 804 | * 805 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/fill-color) 806 | */ 807 | fillColor?: InputMaybe; 808 | /** 809 | * Resize Fit Mode 810 | * 811 | * Specifies how to map the source image to the output image dimensions. 812 | * 813 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/fit) 814 | */ 815 | fit?: InputMaybe; 816 | /** 817 | * Flip Axis 818 | * 819 | * Flips an image on a specified axis. 820 | * 821 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/flip) 822 | */ 823 | flip?: InputMaybe; 824 | /** 825 | * Output Format 826 | * 827 | * Changes the format of the output image. 828 | * 829 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/fm) 830 | */ 831 | fm?: InputMaybe; 832 | /** 833 | * Focal Point Debug 834 | * 835 | * Displays crosshairs identifying the location of the set focal point 836 | * 837 | * Depends on: `fit=crop`, `crop=focalpoint` 838 | * 839 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-debug) 840 | */ 841 | fpDebug?: InputMaybe; 842 | /** 843 | * Focal Point X Position 844 | * 845 | * Sets the relative horizontal value for the focal point of an image 846 | * 847 | * Depends on: `fit=crop`, `crop=focalpoint` 848 | * 849 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-x) 850 | */ 851 | fpX?: InputMaybe; 852 | /** 853 | * Focal Point Y Position 854 | * 855 | * Sets the relative vertical value for the focal point of an image 856 | * 857 | * Depends on: `fit=crop`, `crop=focalpoint` 858 | * 859 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-y) 860 | */ 861 | fpY?: InputMaybe; 862 | /** 863 | * Focal Point Zoom 864 | * 865 | * Sets the relative zoom value for the focal point of an image 866 | * 867 | * Depends on: `fit=crop`, `crop=focalpoint` 868 | * 869 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/focalpoint-crop/fp-z) 870 | */ 871 | fpZ?: InputMaybe; 872 | /** 873 | * Gamma 874 | * 875 | * Adjusts the gamma of the source image. 876 | * 877 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/gam) 878 | */ 879 | gam?: InputMaybe; 880 | /** 881 | * Grid Colors 882 | * 883 | * Sets grid colors for the transparency checkerboard grid. 884 | * 885 | * Depends on: `transparency` 886 | */ 887 | gridColors?: InputMaybe; 888 | /** 889 | * Grid Size 890 | * 891 | * Sets grid size for the transparency checkerboard grid. 892 | * 893 | * Depends on: `transparency` 894 | */ 895 | gridSize?: InputMaybe; 896 | /** 897 | * Image Height 898 | * 899 | * Adjusts the height of the output image. 900 | * 901 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/h) 902 | */ 903 | h?: InputMaybe; 904 | /** 905 | * Highlight 906 | * 907 | * Adjusts the highlights of the source image. 908 | * 909 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/high) 910 | */ 911 | high?: InputMaybe; 912 | /** 913 | * Halftone 914 | * 915 | * Applies a half-tone effect to the source image. 916 | * 917 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/htn) 918 | */ 919 | htn?: InputMaybe; 920 | /** 921 | * Hue Shift 922 | * 923 | * Adjusts the hue of the source image. 924 | * 925 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/hue) 926 | */ 927 | hue?: InputMaybe; 928 | /** 929 | * Invert 930 | * 931 | * Inverts the colors on the source image. 932 | * 933 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/invert) 934 | */ 935 | invert?: InputMaybe; 936 | /** 937 | * Iptc Passthrough 938 | * 939 | * Determine if IPTC data should be passed for JPEG images. 940 | */ 941 | iptc?: InputMaybe; 942 | /** 943 | * Lossless Compression 944 | * 945 | * Specifies that the output image should be a lossless variant. 946 | * 947 | * Depends on: `fm=webp`, `fm=jxr` 948 | * 949 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/lossless) 950 | */ 951 | lossless?: InputMaybe; 952 | /** 953 | * Watermark Image Url 954 | * 955 | * Specifies the location of the watermark image. 956 | * 957 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark) 958 | */ 959 | mark?: InputMaybe; 960 | /** 961 | * Watermark Alignment Mode 962 | * 963 | * Changes the watermark alignment relative to the parent image. 964 | * 965 | * Depends on: `mark` 966 | * 967 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-align) 968 | */ 969 | markAlign?: InputMaybe>; 970 | /** 971 | * Watermark Alpha 972 | * 973 | * Changes the alpha of the watermark image. 974 | * 975 | * Depends on: `mark` 976 | * 977 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-alpha) 978 | */ 979 | markAlpha?: InputMaybe; 980 | /** 981 | * Watermark Base Url 982 | * 983 | * Changes base URL of the watermark image. 984 | * 985 | * Depends on: `mark` 986 | * 987 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-base) 988 | */ 989 | markBase?: InputMaybe; 990 | /** 991 | * Watermark Fit Mode 992 | * 993 | * Specifies the fit mode for watermark images. 994 | * 995 | * Depends on: `mark`, `markw`, `markh` 996 | * 997 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-fit) 998 | */ 999 | markFit?: InputMaybe; 1000 | /** 1001 | * Watermark Height 1002 | * 1003 | * Adjusts the height of the watermark image. 1004 | * 1005 | * Depends on: `mark` 1006 | * 1007 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-h) 1008 | */ 1009 | markH?: InputMaybe; 1010 | /** 1011 | * Watermark Padding 1012 | * 1013 | * Applies padding to the watermark image. 1014 | * 1015 | * Depends on: `mark` 1016 | * 1017 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-pad) 1018 | */ 1019 | markPad?: InputMaybe; 1020 | /** 1021 | * Watermark Rotation 1022 | * 1023 | * Rotates a watermark or tiled watermarks by a specified number of degrees. 1024 | * 1025 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-rot) 1026 | */ 1027 | markRot?: InputMaybe; 1028 | /** 1029 | * Watermark Scale 1030 | * 1031 | * Adjusts the scale of the watermark image. 1032 | * 1033 | * Depends on: `mark` 1034 | * 1035 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-scale) 1036 | */ 1037 | markScale?: InputMaybe; 1038 | /** 1039 | * Watermark Tile 1040 | * 1041 | * Adds tiled watermark. 1042 | * 1043 | * Depends on: `mark` 1044 | * 1045 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-tile) 1046 | */ 1047 | markTile?: InputMaybe; 1048 | /** 1049 | * Watermark Width 1050 | * 1051 | * Adjusts the width of the watermark image. 1052 | * 1053 | * Depends on: `mark` 1054 | * 1055 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-w) 1056 | */ 1057 | markW?: InputMaybe; 1058 | /** 1059 | * Watermark X Position 1060 | * 1061 | * Adjusts the x-offset of the watermark image relative to its parent. 1062 | * 1063 | * Depends on: `mark` 1064 | * 1065 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-x) 1066 | */ 1067 | markX?: InputMaybe; 1068 | /** 1069 | * Watermark Y Position 1070 | * 1071 | * Adjusts the y-offset of the watermark image relative to its parent. 1072 | * 1073 | * Depends on: `mark` 1074 | * 1075 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/watermark/mark-y) 1076 | */ 1077 | markY?: InputMaybe; 1078 | /** 1079 | * Mask Type 1080 | * 1081 | * Defines the type of mask and specifies the URL if that type is selected. 1082 | * 1083 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask) 1084 | */ 1085 | mask?: InputMaybe; 1086 | /** 1087 | * Mask Background Color 1088 | * 1089 | * Colors the background of the transparent mask area of images 1090 | * 1091 | * Depends on: `mask` 1092 | * 1093 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/mask/mask-bg) 1094 | */ 1095 | maskBg?: InputMaybe; 1096 | /** 1097 | * Maximum Height 1098 | * 1099 | * Specifies the maximum height of the output image in pixels. 1100 | * 1101 | * Depends on: `fit=crop` 1102 | * 1103 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/max-height) 1104 | */ 1105 | maxH?: InputMaybe; 1106 | /** 1107 | * Maximum Width 1108 | * 1109 | * Specifies the maximum width of the output image in pixels. 1110 | * 1111 | * Depends on: `fit=crop` 1112 | * 1113 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/max-width) 1114 | */ 1115 | maxW?: InputMaybe; 1116 | /** 1117 | * Minimum Height 1118 | * 1119 | * Specifies the minimum height of the output image in pixels. 1120 | * 1121 | * Depends on: `fit=crop` 1122 | * 1123 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/min-height) 1124 | */ 1125 | minH?: InputMaybe; 1126 | /** 1127 | * Minimum Width 1128 | * 1129 | * Specifies the minimum width of the output image in pixels. 1130 | * 1131 | * Depends on: `fit=crop` 1132 | * 1133 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/min-width) 1134 | */ 1135 | minW?: InputMaybe; 1136 | /** 1137 | * Monochrome 1138 | * 1139 | * Applies a monochrome effect to the source image. 1140 | * 1141 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/monochrome) 1142 | */ 1143 | monochrome?: InputMaybe; 1144 | /** 1145 | * Noise Reduction Bound 1146 | * 1147 | * Reduces the noise in an image. 1148 | * 1149 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/noise-reduction/nr) 1150 | */ 1151 | nr?: InputMaybe; 1152 | /** 1153 | * Noise Reduction Sharpen 1154 | * 1155 | * Provides a threshold by which to sharpen an image. 1156 | * 1157 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/noise-reduction/nrs) 1158 | */ 1159 | nrs?: InputMaybe; 1160 | /** 1161 | * Orientation 1162 | * 1163 | * Changes the image orientation. 1164 | * 1165 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/orient) 1166 | */ 1167 | orient?: InputMaybe; 1168 | /** 1169 | * Padding 1170 | * 1171 | * Pads an image. 1172 | * 1173 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad) 1174 | */ 1175 | pad?: InputMaybe; 1176 | /** 1177 | * Padding Bottom 1178 | * 1179 | * Sets bottom padding of an image. 1180 | * 1181 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-bottom) 1182 | */ 1183 | padBottom?: InputMaybe; 1184 | /** 1185 | * Padding Left 1186 | * 1187 | * Sets left padding of an image. 1188 | * 1189 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-left) 1190 | */ 1191 | padLeft?: InputMaybe; 1192 | /** 1193 | * Padding Right 1194 | * 1195 | * Sets right padding of an image. 1196 | * 1197 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-right) 1198 | */ 1199 | padRight?: InputMaybe; 1200 | /** 1201 | * Padding Top 1202 | * 1203 | * Sets top padding of an image. 1204 | * 1205 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/border-and-padding/pad-top) 1206 | */ 1207 | padTop?: InputMaybe; 1208 | /** 1209 | * Pdf Page Number 1210 | * 1211 | * Selects a page from a PDF for display. 1212 | * 1213 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/pdf/page) 1214 | */ 1215 | page?: InputMaybe; 1216 | /** 1217 | * Color Palette Extraction 1218 | * 1219 | * Specifies an output format for palette-extraction. 1220 | * 1221 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/palette) 1222 | */ 1223 | palette?: InputMaybe; 1224 | /** 1225 | * Pdf Annotation 1226 | * 1227 | * Enables or disables PDF annotation. 1228 | * 1229 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/pdf/pdf-annotation) 1230 | */ 1231 | pdfAnnotation?: InputMaybe; 1232 | /** 1233 | * Css Prefix 1234 | * 1235 | * Specifies a CSS prefix for all classes in palette-extraction. 1236 | * 1237 | * Depends on: `palette=css` 1238 | * 1239 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/color-palette/prefix) 1240 | */ 1241 | prefix?: InputMaybe; 1242 | /** 1243 | * Pixellate 1244 | * 1245 | * Applies a pixelation effect to an image. 1246 | * 1247 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/px) 1248 | */ 1249 | px?: InputMaybe; 1250 | /** 1251 | * Output Quality 1252 | * 1253 | * Adjusts the quality of an output image. 1254 | * 1255 | * Depends on: `fm=jpg`, `fm=pjpg`, `fm=webp`, `fm=jxr` 1256 | * 1257 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/format/q) 1258 | */ 1259 | q?: InputMaybe; 1260 | /** 1261 | * Source Rectangle Region 1262 | * 1263 | * Crops an image to a specified rectangle. 1264 | * 1265 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/rect) 1266 | */ 1267 | rect?: InputMaybe; 1268 | /** 1269 | * Rotation 1270 | * 1271 | * Rotates an image by a specified number of degrees. 1272 | * 1273 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/rotation/rot) 1274 | */ 1275 | rot?: InputMaybe; 1276 | /** 1277 | * Saturation 1278 | * 1279 | * Adjusts the saturation of an image. 1280 | * 1281 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/sat) 1282 | */ 1283 | sat?: InputMaybe; 1284 | /** 1285 | * Sepia Tone 1286 | * 1287 | * Applies a sepia effect to an image. 1288 | * 1289 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/stylize/sepia) 1290 | */ 1291 | sepia?: InputMaybe; 1292 | /** 1293 | * Shadow 1294 | * 1295 | * Adjusts the highlights of the source image. 1296 | * 1297 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/shad) 1298 | */ 1299 | shad?: InputMaybe; 1300 | /** 1301 | * Sharpen 1302 | * 1303 | * Adjusts the sharpness of the source image. 1304 | * 1305 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/sharp) 1306 | */ 1307 | sharp?: InputMaybe; 1308 | /** 1309 | * Transparency 1310 | * 1311 | * Adds checkerboard behind images which support transparency. 1312 | * 1313 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/fill/transparency) 1314 | */ 1315 | transparency?: InputMaybe; 1316 | /** 1317 | * Trim Image 1318 | * 1319 | * Trims the source image. 1320 | * 1321 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim) 1322 | */ 1323 | trim?: InputMaybe; 1324 | /** 1325 | * Trim Color 1326 | * 1327 | * Specifies a trim color on a trim operation. 1328 | * 1329 | * Depends on: `trim=color` 1330 | * 1331 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-color) 1332 | */ 1333 | trimColor?: InputMaybe; 1334 | /** 1335 | * Trim Mean Difference 1336 | * 1337 | * Specifies the mean difference on a trim operation. 1338 | * 1339 | * Depends on: `trim=auto` 1340 | * 1341 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-md) 1342 | */ 1343 | trimMd?: InputMaybe; 1344 | /** 1345 | * Trim Padding 1346 | * 1347 | * Pads the area of the source image before trimming. 1348 | * 1349 | * Depends on: `trim` 1350 | * 1351 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-pad) 1352 | */ 1353 | trimPad?: InputMaybe; 1354 | /** 1355 | * Trim Standard Deviation 1356 | * 1357 | * Specifies the standard deviation on a trim operation. 1358 | * 1359 | * Depends on: `trim=auto` 1360 | * 1361 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-sd) 1362 | */ 1363 | trimSd?: InputMaybe; 1364 | /** 1365 | * Trim Tolerance 1366 | * 1367 | * Specifies the tolerance on a trim operation. 1368 | * 1369 | * Depends on: `trim=color` 1370 | * 1371 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/trim/trim-tol) 1372 | */ 1373 | trimTol?: InputMaybe; 1374 | /** 1375 | * Text String 1376 | * 1377 | * Sets the text string to render. 1378 | * 1379 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt) 1380 | */ 1381 | txt?: InputMaybe; 1382 | /** 1383 | * Text Align 1384 | * 1385 | * Sets the vertical and horizontal alignment of rendered text relative to the base image. 1386 | * 1387 | * Depends on: `txt` 1388 | * 1389 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-align) 1390 | */ 1391 | txtAlign?: InputMaybe>; 1392 | /** 1393 | * Text Clipping Mode 1394 | * 1395 | * Sets the clipping properties of rendered text. 1396 | * 1397 | * Depends on: `txt` 1398 | * 1399 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-clip) 1400 | */ 1401 | txtClip?: InputMaybe>; 1402 | /** 1403 | * Text Color 1404 | * 1405 | * Specifies the color of rendered text. 1406 | * 1407 | * Depends on: `txt` 1408 | * 1409 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-color) 1410 | */ 1411 | txtColor?: InputMaybe; 1412 | /** 1413 | * Text Fit Mode 1414 | * 1415 | * Specifies the fit approach for rendered text. 1416 | * 1417 | * Depends on: `txt` 1418 | * 1419 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-fit) 1420 | */ 1421 | txtFit?: InputMaybe; 1422 | /** 1423 | * Text Font 1424 | * 1425 | * Selects a font for rendered text. 1426 | * 1427 | * Depends on: `txt` 1428 | * 1429 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-font) 1430 | */ 1431 | txtFont?: InputMaybe; 1432 | /** 1433 | * Text Leading 1434 | * 1435 | * Sets the leading (line spacing) for rendered text. Only works on the multi-line text endpoint. 1436 | * 1437 | * Depends on: `txt` 1438 | * 1439 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/typesetting/txt-lead) 1440 | */ 1441 | txtLead?: InputMaybe; 1442 | /** 1443 | * Text Ligatures 1444 | * 1445 | * Controls the level of ligature substitution 1446 | * 1447 | * Depends on: `txt` 1448 | * 1449 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-lig) 1450 | */ 1451 | txtLig?: InputMaybe; 1452 | /** 1453 | * Text Outline 1454 | * 1455 | * Outlines the rendered text with a specified color. 1456 | * 1457 | * Depends on: `txt` 1458 | * 1459 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-line) 1460 | */ 1461 | txtLine?: InputMaybe; 1462 | /** 1463 | * Text Outline Color 1464 | * 1465 | * Specifies a text outline color. 1466 | * 1467 | * Depends on: `txt`, `txtline` 1468 | * 1469 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-line-color) 1470 | */ 1471 | txtLineColor?: InputMaybe; 1472 | /** 1473 | * Text Padding 1474 | * 1475 | * Specifies the padding (in device-independent pixels) between a textbox and the edges of the base image. 1476 | * 1477 | * Depends on: `txt` 1478 | * 1479 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-pad) 1480 | */ 1481 | txtPad?: InputMaybe; 1482 | /** 1483 | * Text Shadow 1484 | * 1485 | * Applies a shadow to rendered text. 1486 | * 1487 | * Depends on: `txt` 1488 | * 1489 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-shad) 1490 | */ 1491 | txtShad?: InputMaybe; 1492 | /** 1493 | * Text Font Size 1494 | * 1495 | * Sets the font size of rendered text. 1496 | * 1497 | * Depends on: `txt` 1498 | * 1499 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-size) 1500 | */ 1501 | txtSize?: InputMaybe; 1502 | /** 1503 | * Text Tracking 1504 | * 1505 | * Sets the tracking (letter spacing) for rendered text. Only works on the multi-line text endpoint. 1506 | * 1507 | * Depends on: `txt` 1508 | * 1509 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/typesetting/txt-track) 1510 | */ 1511 | txtTrack?: InputMaybe; 1512 | /** 1513 | * Text Width 1514 | * 1515 | * Sets the width of rendered text. 1516 | * 1517 | * Depends on: `txt` 1518 | * 1519 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-width) 1520 | */ 1521 | txtWidth?: InputMaybe; 1522 | /** 1523 | * Text X Position 1524 | * 1525 | * Sets the horizontal (x) position of the text in pixels relative to the left edge of the base image. 1526 | * 1527 | * Depends on: `txt` 1528 | * 1529 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-x) 1530 | */ 1531 | txtX?: InputMaybe; 1532 | /** 1533 | * Text Y Position 1534 | * 1535 | * Sets the vertical (y) position of the text in pixels relative to the top edge of the base image. 1536 | * 1537 | * Depends on: `txt` 1538 | * 1539 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/text/txt-y) 1540 | */ 1541 | txtY?: InputMaybe; 1542 | /** 1543 | * Unsharp Mask 1544 | * 1545 | * Sharpens the source image using an unsharp mask. 1546 | * 1547 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/usm) 1548 | */ 1549 | usm?: InputMaybe; 1550 | /** 1551 | * Unsharp Mask Radius 1552 | * 1553 | * Specifies the radius for an unsharp mask operation. 1554 | * 1555 | * Depends on: `usm` 1556 | * 1557 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/usmrad) 1558 | */ 1559 | usmrad?: InputMaybe; 1560 | /** 1561 | * Vibrance 1562 | * 1563 | * Adjusts the vibrance of an image. 1564 | * 1565 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/adjustment/vib) 1566 | */ 1567 | vib?: InputMaybe; 1568 | /** 1569 | * Image Width 1570 | * 1571 | * Adjusts the width of the output image. 1572 | * 1573 | * [Open Imgix reference »](https://docs.imgix.com/apis/url/size/w) 1574 | */ 1575 | w?: InputMaybe; 1576 | }; 1577 | 1578 | export enum ImgixParamsAuto { 1579 | Compress = "compress", 1580 | Enhance = "enhance", 1581 | Format = "format", 1582 | Redeye = "redeye", 1583 | } 1584 | 1585 | export enum ImgixParamsBlendAlign { 1586 | Bottom = "bottom", 1587 | Center = "center", 1588 | Left = "left", 1589 | Middle = "middle", 1590 | Right = "right", 1591 | Top = "top", 1592 | } 1593 | 1594 | export enum ImgixParamsBlendCrop { 1595 | Bottom = "bottom", 1596 | Faces = "faces", 1597 | Left = "left", 1598 | Right = "right", 1599 | Top = "top", 1600 | } 1601 | 1602 | export enum ImgixParamsBlendFit { 1603 | Clamp = "clamp", 1604 | Clip = "clip", 1605 | Crop = "crop", 1606 | Max = "max", 1607 | Scale = "scale", 1608 | } 1609 | 1610 | export enum ImgixParamsBlendMode { 1611 | Burn = "burn", 1612 | Color = "color", 1613 | Darken = "darken", 1614 | Difference = "difference", 1615 | Dodge = "dodge", 1616 | Exclusion = "exclusion", 1617 | Hardlight = "hardlight", 1618 | Hue = "hue", 1619 | Lighten = "lighten", 1620 | Luminosity = "luminosity", 1621 | Multiply = "multiply", 1622 | Normal = "normal", 1623 | Overlay = "overlay", 1624 | Saturation = "saturation", 1625 | Screen = "screen", 1626 | Softlight = "softlight", 1627 | } 1628 | 1629 | export enum ImgixParamsBlendSize { 1630 | Inherit = "inherit", 1631 | } 1632 | 1633 | export enum ImgixParamsCh { 1634 | Dpr = "dpr", 1635 | SaveData = "saveData", 1636 | Width = "width", 1637 | } 1638 | 1639 | export enum ImgixParamsCrop { 1640 | Bottom = "bottom", 1641 | Edges = "edges", 1642 | Entropy = "entropy", 1643 | Faces = "faces", 1644 | Focalpoint = "focalpoint", 1645 | Left = "left", 1646 | Right = "right", 1647 | Top = "top", 1648 | } 1649 | 1650 | export enum ImgixParamsCs { 1651 | Adobergb1998 = "adobergb1998", 1652 | Srgb = "srgb", 1653 | Strip = "strip", 1654 | Tinysrgb = "tinysrgb", 1655 | } 1656 | 1657 | export enum ImgixParamsFill { 1658 | Blur = "blur", 1659 | Solid = "solid", 1660 | } 1661 | 1662 | export enum ImgixParamsFit { 1663 | Clamp = "clamp", 1664 | Clip = "clip", 1665 | Crop = "crop", 1666 | Facearea = "facearea", 1667 | Fill = "fill", 1668 | Fillmax = "fillmax", 1669 | Max = "max", 1670 | Min = "min", 1671 | Scale = "scale", 1672 | } 1673 | 1674 | export enum ImgixParamsFlip { 1675 | H = "h", 1676 | Hv = "hv", 1677 | V = "v", 1678 | } 1679 | 1680 | export enum ImgixParamsFm { 1681 | Avif = "avif", 1682 | Blurhash = "blurhash", 1683 | Gif = "gif", 1684 | Jp2 = "jp2", 1685 | Jpg = "jpg", 1686 | Json = "json", 1687 | Jxr = "jxr", 1688 | Mp4 = "mp4", 1689 | Pjpg = "pjpg", 1690 | Png = "png", 1691 | Png8 = "png8", 1692 | Png32 = "png32", 1693 | Webm = "webm", 1694 | Webp = "webp", 1695 | } 1696 | 1697 | export enum ImgixParamsIptc { 1698 | Allow = "allow", 1699 | Block = "block", 1700 | } 1701 | 1702 | export enum ImgixParamsMarkAlign { 1703 | Bottom = "bottom", 1704 | Center = "center", 1705 | Left = "left", 1706 | Middle = "middle", 1707 | Right = "right", 1708 | Top = "top", 1709 | } 1710 | 1711 | export enum ImgixParamsMarkFit { 1712 | Clip = "clip", 1713 | Crop = "crop", 1714 | Fill = "fill", 1715 | Max = "max", 1716 | Scale = "scale", 1717 | } 1718 | 1719 | export enum ImgixParamsMarkTile { 1720 | Grid = "grid", 1721 | } 1722 | 1723 | export enum ImgixParamsPalette { 1724 | Css = "css", 1725 | Json = "json", 1726 | } 1727 | 1728 | export enum ImgixParamsTransparency { 1729 | Grid = "grid", 1730 | } 1731 | 1732 | export enum ImgixParamsTrim { 1733 | Auto = "auto", 1734 | Color = "color", 1735 | } 1736 | 1737 | export enum ImgixParamsTxtAlign { 1738 | Bottom = "bottom", 1739 | Center = "center", 1740 | Left = "left", 1741 | Middle = "middle", 1742 | Right = "right", 1743 | Top = "top", 1744 | } 1745 | 1746 | export enum ImgixParamsTxtClip { 1747 | Ellipsis = "ellipsis", 1748 | End = "end", 1749 | Middle = "middle", 1750 | Start = "start", 1751 | } 1752 | 1753 | export enum ImgixParamsTxtFit { 1754 | Max = "max", 1755 | } 1756 | 1757 | /** Specifies how to filter by usage */ 1758 | export type InUseFilter = { 1759 | /** Search uploads that are currently used by some record or not */ 1760 | eq?: InputMaybe; 1761 | }; 1762 | 1763 | /** Specifies how to filter by ID */ 1764 | export type ItemIdFilter = { 1765 | /** Search the record with the specified ID */ 1766 | eq?: InputMaybe; 1767 | /** Search records with the specified IDs */ 1768 | in?: InputMaybe>>; 1769 | /** Exclude the record with the specified ID */ 1770 | neq?: InputMaybe; 1771 | /** Search records that do not have the specified IDs */ 1772 | notIn?: InputMaybe>>; 1773 | }; 1774 | 1775 | export enum ItemStatus { 1776 | Draft = "draft", 1777 | Published = "published", 1778 | Updated = "updated", 1779 | } 1780 | 1781 | export type LogListModelFilter = { 1782 | OR?: InputMaybe>>; 1783 | _createdAt?: InputMaybe; 1784 | _firstPublishedAt?: InputMaybe; 1785 | _isValid?: InputMaybe; 1786 | _publicationScheduledAt?: InputMaybe; 1787 | _publishedAt?: InputMaybe; 1788 | _status?: InputMaybe; 1789 | _unpublishingScheduledAt?: InputMaybe; 1790 | _updatedAt?: InputMaybe; 1791 | content?: InputMaybe; 1792 | createdAt?: InputMaybe; 1793 | date?: InputMaybe; 1794 | id?: InputMaybe; 1795 | updatedAt?: InputMaybe; 1796 | }; 1797 | 1798 | export enum LogListModelOrderBy { 1799 | CreatedAtAsc = "_createdAt_ASC", 1800 | CreatedAtDesc = "_createdAt_DESC", 1801 | FirstPublishedAtAsc = "_firstPublishedAt_ASC", 1802 | FirstPublishedAtDesc = "_firstPublishedAt_DESC", 1803 | IsValidAsc = "_isValid_ASC", 1804 | IsValidDesc = "_isValid_DESC", 1805 | PublicationScheduledAtAsc = "_publicationScheduledAt_ASC", 1806 | PublicationScheduledAtDesc = "_publicationScheduledAt_DESC", 1807 | PublishedAtAsc = "_publishedAt_ASC", 1808 | PublishedAtDesc = "_publishedAt_DESC", 1809 | StatusAsc = "_status_ASC", 1810 | StatusDesc = "_status_DESC", 1811 | UnpublishingScheduledAtAsc = "_unpublishingScheduledAt_ASC", 1812 | UnpublishingScheduledAtDesc = "_unpublishingScheduledAt_DESC", 1813 | UpdatedAtAsc = "_updatedAt_ASC", 1814 | UpdatedAtDesc = "_updatedAt_DESC", 1815 | ContentAsc = "content_ASC", 1816 | ContentDesc = "content_DESC", 1817 | DateAsc = "date_ASC", 1818 | DateDesc = "date_DESC", 1819 | IdAsc = "id_ASC", 1820 | IdDesc = "id_DESC", 1821 | } 1822 | 1823 | /** Record of type Logs (log_list) */ 1824 | export type LogListRecord = RecordInterface & { 1825 | __typename?: "LogListRecord"; 1826 | _createdAt: Scalars["DateTime"]; 1827 | _firstPublishedAt?: Maybe; 1828 | _isValid: Scalars["BooleanType"]; 1829 | _modelApiKey: Scalars["String"]; 1830 | _publicationScheduledAt?: Maybe; 1831 | _publishedAt?: Maybe; 1832 | /** SEO meta tags */ 1833 | _seoMetaTags: Array; 1834 | _status: ItemStatus; 1835 | _unpublishingScheduledAt?: Maybe; 1836 | _updatedAt: Scalars["DateTime"]; 1837 | content?: Maybe; 1838 | createdAt: Scalars["DateTime"]; 1839 | date?: Maybe; 1840 | id: Scalars["ItemId"]; 1841 | updatedAt: Scalars["DateTime"]; 1842 | }; 1843 | 1844 | /** Record of type Logs (log_list) */ 1845 | export type LogListRecord_SeoMetaTagsArgs = { 1846 | locale?: InputMaybe; 1847 | }; 1848 | 1849 | export enum MuxThumbnailFormatType { 1850 | Gif = "gif", 1851 | Jpg = "jpg", 1852 | Png = "png", 1853 | } 1854 | 1855 | /** Record of type Now (now) */ 1856 | export type NowRecord = RecordInterface & { 1857 | __typename?: "NowRecord"; 1858 | _createdAt: Scalars["DateTime"]; 1859 | _firstPublishedAt?: Maybe; 1860 | _isValid: Scalars["BooleanType"]; 1861 | _modelApiKey: Scalars["String"]; 1862 | _publicationScheduledAt?: Maybe; 1863 | _publishedAt?: Maybe; 1864 | /** SEO meta tags */ 1865 | _seoMetaTags: Array; 1866 | _status: ItemStatus; 1867 | _unpublishingScheduledAt?: Maybe; 1868 | _updatedAt: Scalars["DateTime"]; 1869 | content?: Maybe; 1870 | createdAt: Scalars["DateTime"]; 1871 | id: Scalars["ItemId"]; 1872 | updatedAt: Scalars["DateTime"]; 1873 | }; 1874 | 1875 | /** Record of type Now (now) */ 1876 | export type NowRecord_SeoMetaTagsArgs = { 1877 | locale?: InputMaybe; 1878 | }; 1879 | 1880 | /** Record of type Now (now) */ 1881 | export type NowRecordContentArgs = { 1882 | markdown?: InputMaybe; 1883 | }; 1884 | 1885 | /** Specifies how to filter by image orientation */ 1886 | export type OrientationFilter = { 1887 | /** Search uploads with the specified orientation */ 1888 | eq?: InputMaybe; 1889 | /** Exclude uploads with the specified orientation */ 1890 | neq?: InputMaybe; 1891 | }; 1892 | 1893 | /** Specifies how to filter by publication datetime */ 1894 | export type PublishedAtFilter = { 1895 | /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ 1896 | eq?: InputMaybe; 1897 | /** Filter records with the specified field defined (i.e. with any value) or not */ 1898 | exists?: InputMaybe; 1899 | /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ 1900 | gt?: InputMaybe; 1901 | /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ 1902 | gte?: InputMaybe; 1903 | /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ 1904 | lt?: InputMaybe; 1905 | /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ 1906 | lte?: InputMaybe; 1907 | /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ 1908 | neq?: InputMaybe; 1909 | }; 1910 | 1911 | /** The query root for this schema */ 1912 | export type Query = { 1913 | __typename?: "Query"; 1914 | /** Returns meta information regarding a record collection */ 1915 | _allBlogsMeta: CollectionMetadata; 1916 | /** Returns meta information regarding a record collection */ 1917 | _allLogListsMeta: CollectionMetadata; 1918 | /** Returns meta information regarding a record collection */ 1919 | _allShotsAnalogsMeta: CollectionMetadata; 1920 | /** Returns meta information regarding an assets collection */ 1921 | _allUploadsMeta?: Maybe; 1922 | /** Returns meta information regarding a record collection */ 1923 | _allWorksMeta: CollectionMetadata; 1924 | /** Returns the single instance record */ 1925 | _site: Site; 1926 | /** Returns the single instance record */ 1927 | about?: Maybe; 1928 | /** Returns a collection of records */ 1929 | allBlogs: Array; 1930 | /** Returns a collection of records */ 1931 | allLogLists: Array; 1932 | /** Returns a collection of records */ 1933 | allShotsAnalogs: Array; 1934 | /** Returns a collection of assets */ 1935 | allUploads: Array; 1936 | /** Returns a collection of records */ 1937 | allWorks: Array; 1938 | /** Returns a specific record */ 1939 | blog?: Maybe; 1940 | /** Returns a specific record */ 1941 | logList?: Maybe; 1942 | /** Returns the single instance record */ 1943 | now?: Maybe; 1944 | /** Returns a specific record */ 1945 | shotsAnalog?: Maybe; 1946 | /** Returns a specific asset */ 1947 | upload?: Maybe; 1948 | /** Returns a specific record */ 1949 | work?: Maybe; 1950 | }; 1951 | 1952 | /** The query root for this schema */ 1953 | export type Query_AllBlogsMetaArgs = { 1954 | fallbackLocales?: InputMaybe>; 1955 | filter?: InputMaybe; 1956 | locale?: InputMaybe; 1957 | }; 1958 | 1959 | /** The query root for this schema */ 1960 | export type Query_AllLogListsMetaArgs = { 1961 | fallbackLocales?: InputMaybe>; 1962 | filter?: InputMaybe; 1963 | locale?: InputMaybe; 1964 | }; 1965 | 1966 | /** The query root for this schema */ 1967 | export type Query_AllShotsAnalogsMetaArgs = { 1968 | fallbackLocales?: InputMaybe>; 1969 | filter?: InputMaybe; 1970 | locale?: InputMaybe; 1971 | }; 1972 | 1973 | /** The query root for this schema */ 1974 | export type Query_AllUploadsMetaArgs = { 1975 | filter?: InputMaybe; 1976 | locale?: InputMaybe; 1977 | }; 1978 | 1979 | /** The query root for this schema */ 1980 | export type Query_AllWorksMetaArgs = { 1981 | fallbackLocales?: InputMaybe>; 1982 | filter?: InputMaybe; 1983 | locale?: InputMaybe; 1984 | }; 1985 | 1986 | /** The query root for this schema */ 1987 | export type Query_SiteArgs = { 1988 | fallbackLocales?: InputMaybe>; 1989 | locale?: InputMaybe; 1990 | }; 1991 | 1992 | /** The query root for this schema */ 1993 | export type QueryAboutArgs = { 1994 | fallbackLocales?: InputMaybe>; 1995 | locale?: InputMaybe; 1996 | }; 1997 | 1998 | /** The query root for this schema */ 1999 | export type QueryAllBlogsArgs = { 2000 | fallbackLocales?: InputMaybe>; 2001 | filter?: InputMaybe; 2002 | first?: InputMaybe; 2003 | locale?: InputMaybe; 2004 | orderBy?: InputMaybe>>; 2005 | skip?: InputMaybe; 2006 | }; 2007 | 2008 | /** The query root for this schema */ 2009 | export type QueryAllLogListsArgs = { 2010 | fallbackLocales?: InputMaybe>; 2011 | filter?: InputMaybe; 2012 | first?: InputMaybe; 2013 | locale?: InputMaybe; 2014 | orderBy?: InputMaybe>>; 2015 | skip?: InputMaybe; 2016 | }; 2017 | 2018 | /** The query root for this schema */ 2019 | export type QueryAllShotsAnalogsArgs = { 2020 | fallbackLocales?: InputMaybe>; 2021 | filter?: InputMaybe; 2022 | first?: InputMaybe; 2023 | locale?: InputMaybe; 2024 | orderBy?: InputMaybe>>; 2025 | skip?: InputMaybe; 2026 | }; 2027 | 2028 | /** The query root for this schema */ 2029 | export type QueryAllUploadsArgs = { 2030 | fallbackLocales?: InputMaybe>; 2031 | filter?: InputMaybe; 2032 | first?: InputMaybe; 2033 | locale?: InputMaybe; 2034 | orderBy?: InputMaybe>>; 2035 | skip?: InputMaybe; 2036 | }; 2037 | 2038 | /** The query root for this schema */ 2039 | export type QueryAllWorksArgs = { 2040 | fallbackLocales?: InputMaybe>; 2041 | filter?: InputMaybe; 2042 | first?: InputMaybe; 2043 | locale?: InputMaybe; 2044 | orderBy?: InputMaybe>>; 2045 | skip?: InputMaybe; 2046 | }; 2047 | 2048 | /** The query root for this schema */ 2049 | export type QueryBlogArgs = { 2050 | fallbackLocales?: InputMaybe>; 2051 | filter?: InputMaybe; 2052 | locale?: InputMaybe; 2053 | orderBy?: InputMaybe>>; 2054 | }; 2055 | 2056 | /** The query root for this schema */ 2057 | export type QueryLogListArgs = { 2058 | fallbackLocales?: InputMaybe>; 2059 | filter?: InputMaybe; 2060 | locale?: InputMaybe; 2061 | orderBy?: InputMaybe>>; 2062 | }; 2063 | 2064 | /** The query root for this schema */ 2065 | export type QueryNowArgs = { 2066 | fallbackLocales?: InputMaybe>; 2067 | locale?: InputMaybe; 2068 | }; 2069 | 2070 | /** The query root for this schema */ 2071 | export type QueryShotsAnalogArgs = { 2072 | fallbackLocales?: InputMaybe>; 2073 | filter?: InputMaybe; 2074 | locale?: InputMaybe; 2075 | orderBy?: InputMaybe>>; 2076 | }; 2077 | 2078 | /** The query root for this schema */ 2079 | export type QueryUploadArgs = { 2080 | fallbackLocales?: InputMaybe>; 2081 | filter?: InputMaybe; 2082 | locale?: InputMaybe; 2083 | orderBy?: InputMaybe>>; 2084 | }; 2085 | 2086 | /** The query root for this schema */ 2087 | export type QueryWorkArgs = { 2088 | fallbackLocales?: InputMaybe>; 2089 | filter?: InputMaybe; 2090 | locale?: InputMaybe; 2091 | orderBy?: InputMaybe>>; 2092 | }; 2093 | 2094 | export type RecordInterface = { 2095 | _createdAt: Scalars["DateTime"]; 2096 | _firstPublishedAt?: Maybe; 2097 | _isValid: Scalars["BooleanType"]; 2098 | _modelApiKey: Scalars["String"]; 2099 | _publicationScheduledAt?: Maybe; 2100 | _publishedAt?: Maybe; 2101 | /** SEO meta tags */ 2102 | _seoMetaTags: Array; 2103 | _status: ItemStatus; 2104 | _unpublishingScheduledAt?: Maybe; 2105 | _updatedAt: Scalars["DateTime"]; 2106 | id: Scalars["ItemId"]; 2107 | }; 2108 | 2109 | export type RecordInterface_SeoMetaTagsArgs = { 2110 | locale?: InputMaybe; 2111 | }; 2112 | 2113 | /** Specifies how to filter by upload type */ 2114 | export type ResolutionFilter = { 2115 | /** Search uploads with the specified resolution */ 2116 | eq?: InputMaybe; 2117 | /** Search uploads with the specified resolutions */ 2118 | in?: InputMaybe>>; 2119 | /** Exclude uploads with the specified resolution */ 2120 | neq?: InputMaybe; 2121 | /** Search uploads without the specified resolutions */ 2122 | notIn?: InputMaybe>>; 2123 | }; 2124 | 2125 | export enum ResolutionType { 2126 | Icon = "icon", 2127 | Large = "large", 2128 | Medium = "medium", 2129 | Small = "small", 2130 | } 2131 | 2132 | export type ResponsiveImage = { 2133 | __typename?: "ResponsiveImage"; 2134 | alt?: Maybe; 2135 | aspectRatio: Scalars["FloatType"]; 2136 | base64?: Maybe; 2137 | bgColor?: Maybe; 2138 | height: Scalars["IntType"]; 2139 | sizes: Scalars["String"]; 2140 | src: Scalars["String"]; 2141 | srcSet: Scalars["String"]; 2142 | title?: Maybe; 2143 | webpSrcSet: Scalars["String"]; 2144 | width: Scalars["IntType"]; 2145 | }; 2146 | 2147 | export type SeoField = { 2148 | __typename?: "SeoField"; 2149 | description?: Maybe; 2150 | image?: Maybe; 2151 | title?: Maybe; 2152 | twitterCard?: Maybe; 2153 | }; 2154 | 2155 | export type ShotsAnalogModelFilter = { 2156 | OR?: InputMaybe>>; 2157 | _createdAt?: InputMaybe; 2158 | _firstPublishedAt?: InputMaybe; 2159 | _isValid?: InputMaybe; 2160 | _publicationScheduledAt?: InputMaybe; 2161 | _publishedAt?: InputMaybe; 2162 | _status?: InputMaybe; 2163 | _unpublishingScheduledAt?: InputMaybe; 2164 | _updatedAt?: InputMaybe; 2165 | createdAt?: InputMaybe; 2166 | id?: InputMaybe; 2167 | shots?: InputMaybe; 2168 | updatedAt?: InputMaybe; 2169 | }; 2170 | 2171 | export enum ShotsAnalogModelOrderBy { 2172 | CreatedAtAsc = "_createdAt_ASC", 2173 | CreatedAtDesc = "_createdAt_DESC", 2174 | FirstPublishedAtAsc = "_firstPublishedAt_ASC", 2175 | FirstPublishedAtDesc = "_firstPublishedAt_DESC", 2176 | IsValidAsc = "_isValid_ASC", 2177 | IsValidDesc = "_isValid_DESC", 2178 | PublicationScheduledAtAsc = "_publicationScheduledAt_ASC", 2179 | PublicationScheduledAtDesc = "_publicationScheduledAt_DESC", 2180 | PublishedAtAsc = "_publishedAt_ASC", 2181 | PublishedAtDesc = "_publishedAt_DESC", 2182 | StatusAsc = "_status_ASC", 2183 | StatusDesc = "_status_DESC", 2184 | UnpublishingScheduledAtAsc = "_unpublishingScheduledAt_ASC", 2185 | UnpublishingScheduledAtDesc = "_unpublishingScheduledAt_DESC", 2186 | UpdatedAtAsc = "_updatedAt_ASC", 2187 | UpdatedAtDesc = "_updatedAt_DESC", 2188 | IdAsc = "id_ASC", 2189 | IdDesc = "id_DESC", 2190 | } 2191 | 2192 | /** Record of type shots (shots_analog) */ 2193 | export type ShotsAnalogRecord = RecordInterface & { 2194 | __typename?: "ShotsAnalogRecord"; 2195 | _createdAt: Scalars["DateTime"]; 2196 | _firstPublishedAt?: Maybe; 2197 | _isValid: Scalars["BooleanType"]; 2198 | _modelApiKey: Scalars["String"]; 2199 | _publicationScheduledAt?: Maybe; 2200 | _publishedAt?: Maybe; 2201 | /** SEO meta tags */ 2202 | _seoMetaTags: Array; 2203 | _status: ItemStatus; 2204 | _unpublishingScheduledAt?: Maybe; 2205 | _updatedAt: Scalars["DateTime"]; 2206 | createdAt: Scalars["DateTime"]; 2207 | id: Scalars["ItemId"]; 2208 | shots: Array; 2209 | updatedAt: Scalars["DateTime"]; 2210 | }; 2211 | 2212 | /** Record of type shots (shots_analog) */ 2213 | export type ShotsAnalogRecord_SeoMetaTagsArgs = { 2214 | locale?: InputMaybe; 2215 | }; 2216 | 2217 | export type Site = { 2218 | __typename?: "Site"; 2219 | favicon?: Maybe; 2220 | faviconMetaTags: Array; 2221 | globalSeo?: Maybe; 2222 | locales: Array; 2223 | }; 2224 | 2225 | export type SiteFaviconMetaTagsArgs = { 2226 | variants?: InputMaybe>>; 2227 | }; 2228 | 2229 | export type SiteGlobalSeoArgs = { 2230 | fallbackLocales?: InputMaybe>; 2231 | locale?: InputMaybe; 2232 | }; 2233 | 2234 | export enum SiteLocale { 2235 | En = "en", 2236 | } 2237 | 2238 | /** Specifies how to filter Slug fields */ 2239 | export type SlugFilter = { 2240 | /** Search for records with an exact match */ 2241 | eq?: InputMaybe; 2242 | /** Filter records that have one of the specified slugs */ 2243 | in?: InputMaybe>>; 2244 | /** Exclude records with an exact match */ 2245 | neq?: InputMaybe; 2246 | /** Filter records that do have one of the specified slugs */ 2247 | notIn?: InputMaybe>>; 2248 | }; 2249 | 2250 | /** Specifies how to filter by status */ 2251 | export type StatusFilter = { 2252 | /** Search the record with the specified status */ 2253 | eq?: InputMaybe; 2254 | /** Search records with the specified statuses */ 2255 | in?: InputMaybe>>; 2256 | /** Exclude the record with the specified status */ 2257 | neq?: InputMaybe; 2258 | /** Search records without the specified statuses */ 2259 | notIn?: InputMaybe>>; 2260 | }; 2261 | 2262 | /** Specifies how to filter Single-line string fields */ 2263 | export type StringFilter = { 2264 | /** Search for records with an exact match */ 2265 | eq?: InputMaybe; 2266 | /** Filter records with the specified field defined (i.e. with any value) or not */ 2267 | exists?: InputMaybe; 2268 | /** Filter records that equal one of the specified values */ 2269 | in?: InputMaybe>>; 2270 | /** Filter records with the specified field set as blank (null or empty string) */ 2271 | isBlank?: InputMaybe; 2272 | /** Filter records based on a regular expression */ 2273 | matches?: InputMaybe; 2274 | /** Exclude records with an exact match */ 2275 | neq?: InputMaybe; 2276 | /** Filter records that do not equal one of the specified values */ 2277 | notIn?: InputMaybe>>; 2278 | /** Exclude records based on a regular expression */ 2279 | notMatches?: InputMaybe; 2280 | }; 2281 | 2282 | export type StringMatchesFilter = { 2283 | caseSensitive?: InputMaybe; 2284 | pattern: Scalars["String"]; 2285 | regexp?: InputMaybe; 2286 | }; 2287 | 2288 | export type Tag = { 2289 | __typename?: "Tag"; 2290 | attributes?: Maybe; 2291 | content?: Maybe; 2292 | tag: Scalars["String"]; 2293 | }; 2294 | 2295 | /** Specifies how to filter text fields */ 2296 | export type TextFilter = { 2297 | /** Filter records with the specified field defined (i.e. with any value) or not */ 2298 | exists?: InputMaybe; 2299 | /** Filter records with the specified field set as blank (null or empty string) */ 2300 | isBlank?: InputMaybe; 2301 | /** Filter records based on a regular expression */ 2302 | matches?: InputMaybe; 2303 | /** Exclude records based on a regular expression */ 2304 | notMatches?: InputMaybe; 2305 | }; 2306 | 2307 | /** Specifies how to filter by upload type */ 2308 | export type TypeFilter = { 2309 | /** Search uploads with the specified type */ 2310 | eq?: InputMaybe; 2311 | /** Search uploads with the specified types */ 2312 | in?: InputMaybe>>; 2313 | /** Exclude uploads with the specified type */ 2314 | neq?: InputMaybe; 2315 | /** Search uploads without the specified types */ 2316 | notIn?: InputMaybe>>; 2317 | }; 2318 | 2319 | /** Specifies how to filter by update datetime */ 2320 | export type UpdatedAtFilter = { 2321 | /** Filter records with a value that's within the specified minute range. Seconds and milliseconds are truncated from the argument. */ 2322 | eq?: InputMaybe; 2323 | /** Filter records with the specified field defined (i.e. with any value) or not */ 2324 | exists?: InputMaybe; 2325 | /** Filter records with a value that's strictly greater than the one specified. Seconds and milliseconds are truncated from the argument. */ 2326 | gt?: InputMaybe; 2327 | /** Filter records with a value that's greater than or equal to than the one specified. Seconds and milliseconds are truncated from the argument. */ 2328 | gte?: InputMaybe; 2329 | /** Filter records with a value that's less than the one specified. Seconds and milliseconds are truncated from the argument. */ 2330 | lt?: InputMaybe; 2331 | /** Filter records with a value that's less or equal than the one specified. Seconds and milliseconds are truncated from the argument. */ 2332 | lte?: InputMaybe; 2333 | /** Filter records with a value that's outside the specified minute range. Seconds and milliseconds are truncated from the argument. */ 2334 | neq?: InputMaybe; 2335 | }; 2336 | 2337 | /** Specifies how to filter by default alt */ 2338 | export type UploadAltFilter = { 2339 | /** Search the uploads with the specified alt */ 2340 | eq?: InputMaybe; 2341 | /** Filter uploads with the specified field defined (i.e. with any value) or not */ 2342 | exists?: InputMaybe; 2343 | /** Search uploads with the specified values as default alt */ 2344 | in?: InputMaybe>>; 2345 | /** Filter uploads based on a regular expression */ 2346 | matches?: InputMaybe; 2347 | /** Exclude the uploads with the specified alt */ 2348 | neq?: InputMaybe; 2349 | /** Search uploads that do not have the specified values as default alt */ 2350 | notIn?: InputMaybe>>; 2351 | /** Exclude uploads based on a regular expression */ 2352 | notMatches?: InputMaybe; 2353 | }; 2354 | 2355 | /** Specifies how to filter by auhtor */ 2356 | export type UploadAuthorFilter = { 2357 | /** Filter uploads with the specified field defined (i.e. with any value) or not */ 2358 | exists?: InputMaybe; 2359 | /** Filter uploads based on a regular expression */ 2360 | matches?: InputMaybe; 2361 | /** Exclude uploads based on a regular expression */ 2362 | notMatches?: InputMaybe; 2363 | }; 2364 | 2365 | /** Specifies how to filter by basename */ 2366 | export type UploadBasenameFilter = { 2367 | /** Filter uploads based on a regular expression */ 2368 | matches?: InputMaybe; 2369 | /** Exclude uploads based on a regular expression */ 2370 | notMatches?: InputMaybe; 2371 | }; 2372 | 2373 | /** Specifies how to filter by colors */ 2374 | export type UploadColorsFilter = { 2375 | /** Filter uploads that have all of the specified colors */ 2376 | allIn?: InputMaybe>>; 2377 | /** Filter uploads that have at least one of the specified colors */ 2378 | anyIn?: InputMaybe>>; 2379 | /** Filter uploads that have the specified colors */ 2380 | contains?: InputMaybe; 2381 | /** Search for uploads with an exact match */ 2382 | eq?: InputMaybe>>; 2383 | /** Filter uploads that do not have any of the specified colors */ 2384 | notIn?: InputMaybe>>; 2385 | }; 2386 | 2387 | /** Specifies how to filter by copyright */ 2388 | export type UploadCopyrightFilter = { 2389 | /** Filter records with the specified field defined (i.e. with any value) or not */ 2390 | exists?: InputMaybe; 2391 | /** Filter uploads based on a regular expression */ 2392 | matches?: InputMaybe; 2393 | /** Exclude uploads based on a regular expression */ 2394 | notMatches?: InputMaybe; 2395 | }; 2396 | 2397 | /** Specifies how to filter by creation datetime */ 2398 | export type UploadCreatedAtFilter = { 2399 | /** Search for uploads with an exact match */ 2400 | eq?: InputMaybe; 2401 | /** Filter uploads with a value that's strictly greater than the one specified */ 2402 | gt?: InputMaybe; 2403 | /** Filter uploads with a value that's greater than or equal to the one specified */ 2404 | gte?: InputMaybe; 2405 | /** Filter uploads with a value that's less than the one specified */ 2406 | lt?: InputMaybe; 2407 | /** Filter uploads with a value that's less or equal than the one specified */ 2408 | lte?: InputMaybe; 2409 | /** Exclude uploads with an exact match */ 2410 | neq?: InputMaybe; 2411 | }; 2412 | 2413 | /** Specifies how to filter by filename */ 2414 | export type UploadFilenameFilter = { 2415 | /** Filter uploads based on a regular expression */ 2416 | matches?: InputMaybe; 2417 | /** Exclude uploads based on a regular expression */ 2418 | notMatches?: InputMaybe; 2419 | }; 2420 | 2421 | export type UploadFilter = { 2422 | OR?: InputMaybe>>; 2423 | _createdAt?: InputMaybe; 2424 | _updatedAt?: InputMaybe; 2425 | alt?: InputMaybe; 2426 | author?: InputMaybe; 2427 | basename?: InputMaybe; 2428 | colors?: InputMaybe; 2429 | copyright?: InputMaybe; 2430 | filename?: InputMaybe; 2431 | format?: InputMaybe; 2432 | height?: InputMaybe; 2433 | id?: InputMaybe; 2434 | inUse?: InputMaybe; 2435 | md5?: InputMaybe; 2436 | mimeType?: InputMaybe; 2437 | notes?: InputMaybe; 2438 | orientation?: InputMaybe; 2439 | resolution?: InputMaybe; 2440 | size?: InputMaybe; 2441 | smartTags?: InputMaybe; 2442 | tags?: InputMaybe; 2443 | title?: InputMaybe; 2444 | type?: InputMaybe; 2445 | width?: InputMaybe; 2446 | }; 2447 | 2448 | /** Specifies how to filter by format */ 2449 | export type UploadFormatFilter = { 2450 | /** Search the asset with the specified format */ 2451 | eq?: InputMaybe; 2452 | /** Search assets with the specified formats */ 2453 | in?: InputMaybe>>; 2454 | /** Exclude the asset with the specified format */ 2455 | neq?: InputMaybe; 2456 | /** Search assets that do not have the specified formats */ 2457 | notIn?: InputMaybe>>; 2458 | }; 2459 | 2460 | /** Specifies how to filter by height */ 2461 | export type UploadHeightFilter = { 2462 | /** Search assets with the specified height */ 2463 | eq?: InputMaybe; 2464 | /** Search all assets larger than the specified height */ 2465 | gt?: InputMaybe; 2466 | /** Search all assets larger or equal to the specified height */ 2467 | gte?: InputMaybe; 2468 | /** Search all assets smaller than the specified height */ 2469 | lt?: InputMaybe; 2470 | /** Search all assets larger or equal to the specified height */ 2471 | lte?: InputMaybe; 2472 | /** Search assets that do not have the specified height */ 2473 | neq?: InputMaybe; 2474 | }; 2475 | 2476 | /** Specifies how to filter by ID */ 2477 | export type UploadIdFilter = { 2478 | /** Search the asset with the specified ID */ 2479 | eq?: InputMaybe; 2480 | /** Search assets with the specified IDs */ 2481 | in?: InputMaybe>>; 2482 | /** Exclude the asset with the specified ID */ 2483 | neq?: InputMaybe; 2484 | /** Search assets that do not have the specified IDs */ 2485 | notIn?: InputMaybe>>; 2486 | }; 2487 | 2488 | /** Specifies how to filter by MD5 */ 2489 | export type UploadMd5Filter = { 2490 | /** Search the asset with the specified MD5 */ 2491 | eq?: InputMaybe; 2492 | /** Search assets with the specified MD5s */ 2493 | in?: InputMaybe>>; 2494 | /** Exclude the asset with the specified MD5 */ 2495 | neq?: InputMaybe; 2496 | /** Search assets that do not have the specified MD5s */ 2497 | notIn?: InputMaybe>>; 2498 | }; 2499 | 2500 | /** Specifies how to filter by mime type */ 2501 | export type UploadMimeTypeFilter = { 2502 | /** Search the asset with the specified mime type */ 2503 | eq?: InputMaybe; 2504 | /** Search assets with the specified mime types */ 2505 | in?: InputMaybe>>; 2506 | /** Filter uploads based on a regular expression */ 2507 | matches?: InputMaybe; 2508 | /** Exclude the asset with the specified mime type */ 2509 | neq?: InputMaybe; 2510 | /** Search assets that do not have the specified mime types */ 2511 | notIn?: InputMaybe>>; 2512 | /** Exclude uploads based on a regular expression */ 2513 | notMatches?: InputMaybe; 2514 | }; 2515 | 2516 | /** Specifies how to filter by notes */ 2517 | export type UploadNotesFilter = { 2518 | /** Filter records with the specified field defined (i.e. with any value) or not */ 2519 | exists?: InputMaybe; 2520 | /** Filter uploads based on a regular expression */ 2521 | matches?: InputMaybe; 2522 | /** Exclude uploads based on a regular expression */ 2523 | notMatches?: InputMaybe; 2524 | }; 2525 | 2526 | export enum UploadOrderBy { 2527 | CreatedAtAsc = "_createdAt_ASC", 2528 | CreatedAtDesc = "_createdAt_DESC", 2529 | UpdatedAtAsc = "_updatedAt_ASC", 2530 | UpdatedAtDesc = "_updatedAt_DESC", 2531 | BasenameAsc = "basename_ASC", 2532 | BasenameDesc = "basename_DESC", 2533 | FilenameAsc = "filename_ASC", 2534 | FilenameDesc = "filename_DESC", 2535 | FormatAsc = "format_ASC", 2536 | FormatDesc = "format_DESC", 2537 | IdAsc = "id_ASC", 2538 | IdDesc = "id_DESC", 2539 | MimeTypeAsc = "mimeType_ASC", 2540 | MimeTypeDesc = "mimeType_DESC", 2541 | ResolutionAsc = "resolution_ASC", 2542 | ResolutionDesc = "resolution_DESC", 2543 | SizeAsc = "size_ASC", 2544 | SizeDesc = "size_DESC", 2545 | } 2546 | 2547 | export enum UploadOrientation { 2548 | Landscape = "landscape", 2549 | Portrait = "portrait", 2550 | Square = "square", 2551 | } 2552 | 2553 | /** Specifies how to filter by size */ 2554 | export type UploadSizeFilter = { 2555 | /** Search assets with the specified size (in bytes) */ 2556 | eq?: InputMaybe; 2557 | /** Search all assets larger than the specified size (in bytes) */ 2558 | gt?: InputMaybe; 2559 | /** Search all assets larger or equal to the specified size (in bytes) */ 2560 | gte?: InputMaybe; 2561 | /** Search all assets smaller than the specified size (in bytes) */ 2562 | lt?: InputMaybe; 2563 | /** Search all assets larger or equal to the specified size (in bytes) */ 2564 | lte?: InputMaybe; 2565 | /** Search assets that do not have the specified size (in bytes) */ 2566 | neq?: InputMaybe; 2567 | }; 2568 | 2569 | /** Specifies how to filter by tags */ 2570 | export type UploadTagsFilter = { 2571 | /** Filter uploads linked to all of the specified tags */ 2572 | allIn?: InputMaybe>; 2573 | /** Filter uploads linked to at least one of the specified tags */ 2574 | anyIn?: InputMaybe>; 2575 | /** Filter uploads linked to the specified tag */ 2576 | contains?: InputMaybe; 2577 | /** Search for uploads with an exact match */ 2578 | eq?: InputMaybe>; 2579 | /** Filter uploads not linked to any of the specified tags */ 2580 | notIn?: InputMaybe>; 2581 | }; 2582 | 2583 | /** Specifies how to filter by default title */ 2584 | export type UploadTitleFilter = { 2585 | /** Search the asset with the specified title */ 2586 | eq?: InputMaybe; 2587 | /** Filter assets with the specified field defined (i.e. with any value) or not */ 2588 | exists?: InputMaybe; 2589 | /** Search assets with the specified as default title */ 2590 | in?: InputMaybe>>; 2591 | /** Filter uploads based on a regular expression */ 2592 | matches?: InputMaybe; 2593 | /** Exclude the asset with the specified title */ 2594 | neq?: InputMaybe; 2595 | /** Search assets that do not have the specified as default title */ 2596 | notIn?: InputMaybe>>; 2597 | /** Exclude uploads based on a regular expression */ 2598 | notMatches?: InputMaybe; 2599 | }; 2600 | 2601 | export enum UploadType { 2602 | Archive = "archive", 2603 | Audio = "audio", 2604 | Image = "image", 2605 | Pdfdocument = "pdfdocument", 2606 | Presentation = "presentation", 2607 | Richtext = "richtext", 2608 | Spreadsheet = "spreadsheet", 2609 | Video = "video", 2610 | } 2611 | 2612 | /** Specifies how to filter by update datetime */ 2613 | export type UploadUpdatedAtFilter = { 2614 | /** Search for uploads with an exact match */ 2615 | eq?: InputMaybe; 2616 | /** Filter uploads with a value that's strictly greater than the one specified */ 2617 | gt?: InputMaybe; 2618 | /** Filter uploads with a value that's greater than or equal to the one specified */ 2619 | gte?: InputMaybe; 2620 | /** Filter uploads with a value that's less than the one specified */ 2621 | lt?: InputMaybe; 2622 | /** Filter uploads with a value that's less or equal than the one specified */ 2623 | lte?: InputMaybe; 2624 | /** Exclude uploads with an exact match */ 2625 | neq?: InputMaybe; 2626 | }; 2627 | 2628 | export type UploadVideoField = { 2629 | __typename?: "UploadVideoField"; 2630 | duration?: Maybe; 2631 | framerate?: Maybe; 2632 | mp4Url?: Maybe; 2633 | muxAssetId: Scalars["String"]; 2634 | muxPlaybackId: Scalars["String"]; 2635 | streamingUrl: Scalars["String"]; 2636 | thumbnailUrl: Scalars["String"]; 2637 | }; 2638 | 2639 | export type UploadVideoFieldMp4UrlArgs = { 2640 | exactRes?: InputMaybe; 2641 | res?: InputMaybe; 2642 | }; 2643 | 2644 | export type UploadVideoFieldThumbnailUrlArgs = { 2645 | format?: InputMaybe; 2646 | }; 2647 | 2648 | /** Specifies how to filter by width */ 2649 | export type UploadWidthFilter = { 2650 | /** Search assets with the specified width */ 2651 | eq?: InputMaybe; 2652 | /** Search all assets larger than the specified width */ 2653 | gt?: InputMaybe; 2654 | /** Search all assets larger or equal to the specified width */ 2655 | gte?: InputMaybe; 2656 | /** Search all assets smaller than the specified width */ 2657 | lt?: InputMaybe; 2658 | /** Search all assets larger or equal to the specified width */ 2659 | lte?: InputMaybe; 2660 | /** Search assets that do not have the specified width */ 2661 | neq?: InputMaybe; 2662 | }; 2663 | 2664 | export enum VideoMp4Res { 2665 | High = "high", 2666 | Low = "low", 2667 | Medium = "medium", 2668 | } 2669 | 2670 | export type WorkModelFilter = { 2671 | OR?: InputMaybe>>; 2672 | _createdAt?: InputMaybe; 2673 | _firstPublishedAt?: InputMaybe; 2674 | _isValid?: InputMaybe; 2675 | _publicationScheduledAt?: InputMaybe; 2676 | _publishedAt?: InputMaybe; 2677 | _status?: InputMaybe; 2678 | _unpublishingScheduledAt?: InputMaybe; 2679 | _updatedAt?: InputMaybe; 2680 | about?: InputMaybe; 2681 | categories?: InputMaybe; 2682 | createdAt?: InputMaybe; 2683 | date?: InputMaybe; 2684 | deployment?: InputMaybe; 2685 | excerpt?: InputMaybe; 2686 | id?: InputMaybe; 2687 | image?: InputMaybe; 2688 | slug?: InputMaybe; 2689 | technologyUsed?: InputMaybe; 2690 | title?: InputMaybe; 2691 | updatedAt?: InputMaybe; 2692 | }; 2693 | 2694 | export enum WorkModelOrderBy { 2695 | CreatedAtAsc = "_createdAt_ASC", 2696 | CreatedAtDesc = "_createdAt_DESC", 2697 | FirstPublishedAtAsc = "_firstPublishedAt_ASC", 2698 | FirstPublishedAtDesc = "_firstPublishedAt_DESC", 2699 | IsValidAsc = "_isValid_ASC", 2700 | IsValidDesc = "_isValid_DESC", 2701 | PublicationScheduledAtAsc = "_publicationScheduledAt_ASC", 2702 | PublicationScheduledAtDesc = "_publicationScheduledAt_DESC", 2703 | PublishedAtAsc = "_publishedAt_ASC", 2704 | PublishedAtDesc = "_publishedAt_DESC", 2705 | StatusAsc = "_status_ASC", 2706 | StatusDesc = "_status_DESC", 2707 | UnpublishingScheduledAtAsc = "_unpublishingScheduledAt_ASC", 2708 | UnpublishingScheduledAtDesc = "_unpublishingScheduledAt_DESC", 2709 | UpdatedAtAsc = "_updatedAt_ASC", 2710 | UpdatedAtDesc = "_updatedAt_DESC", 2711 | CategoriesAsc = "categories_ASC", 2712 | CategoriesDesc = "categories_DESC", 2713 | DateAsc = "date_ASC", 2714 | DateDesc = "date_DESC", 2715 | DeploymentAsc = "deployment_ASC", 2716 | DeploymentDesc = "deployment_DESC", 2717 | ExcerptAsc = "excerpt_ASC", 2718 | ExcerptDesc = "excerpt_DESC", 2719 | IdAsc = "id_ASC", 2720 | IdDesc = "id_DESC", 2721 | TechnologyUsedAsc = "technologyUsed_ASC", 2722 | TechnologyUsedDesc = "technologyUsed_DESC", 2723 | TitleAsc = "title_ASC", 2724 | TitleDesc = "title_DESC", 2725 | } 2726 | 2727 | /** Record of type Work (work) */ 2728 | export type WorkRecord = RecordInterface & { 2729 | __typename?: "WorkRecord"; 2730 | _createdAt: Scalars["DateTime"]; 2731 | _firstPublishedAt?: Maybe; 2732 | _isValid: Scalars["BooleanType"]; 2733 | _modelApiKey: Scalars["String"]; 2734 | _publicationScheduledAt?: Maybe; 2735 | _publishedAt?: Maybe; 2736 | /** SEO meta tags */ 2737 | _seoMetaTags: Array; 2738 | _status: ItemStatus; 2739 | _unpublishingScheduledAt?: Maybe; 2740 | _updatedAt: Scalars["DateTime"]; 2741 | about?: Maybe; 2742 | categories?: Maybe; 2743 | createdAt: Scalars["DateTime"]; 2744 | date?: Maybe; 2745 | deployment?: Maybe; 2746 | excerpt?: Maybe; 2747 | id: Scalars["ItemId"]; 2748 | image?: Maybe; 2749 | slug?: Maybe; 2750 | technologyUsed?: Maybe; 2751 | title?: Maybe; 2752 | updatedAt: Scalars["DateTime"]; 2753 | }; 2754 | 2755 | /** Record of type Work (work) */ 2756 | export type WorkRecord_SeoMetaTagsArgs = { 2757 | locale?: InputMaybe; 2758 | }; 2759 | 2760 | /** Record of type Work (work) */ 2761 | export type WorkRecordAboutArgs = { 2762 | markdown?: InputMaybe; 2763 | }; 2764 | 2765 | export type FocalPoint = { 2766 | __typename?: "focalPoint"; 2767 | x: Scalars["FloatType"]; 2768 | y: Scalars["FloatType"]; 2769 | }; 2770 | 2771 | export type HomeQueryQueryVariables = Exact<{ [key: string]: never }>; 2772 | 2773 | export type HomeQueryQuery = { 2774 | __typename?: "Query"; 2775 | allBlogs: Array<{ 2776 | __typename?: "BlogRecord"; 2777 | title?: string | null; 2778 | id: string; 2779 | excerpt?: string | null; 2780 | categories?: string | null; 2781 | date?: string | null; 2782 | slug?: string | null; 2783 | }>; 2784 | allWorks: Array<{ 2785 | __typename?: "WorkRecord"; 2786 | title?: string | null; 2787 | slug?: string | null; 2788 | id: string; 2789 | excerpt?: string | null; 2790 | date?: string | null; 2791 | categories?: string | null; 2792 | }>; 2793 | allLogLists: Array<{ __typename?: "LogListRecord"; content?: string | null; date?: string | null }>; 2794 | }; 2795 | 2796 | export type AllBlogQueryVariables = Exact<{ [key: string]: never }>; 2797 | 2798 | export type AllBlogQuery = { 2799 | __typename?: "Query"; 2800 | allBlogs: Array<{ 2801 | __typename?: "BlogRecord"; 2802 | title?: string | null; 2803 | id: string; 2804 | excerpt?: string | null; 2805 | categories?: string | null; 2806 | date?: string | null; 2807 | slug?: string | null; 2808 | }>; 2809 | }; 2810 | 2811 | export type AllworkQueryVariables = Exact<{ [key: string]: never }>; 2812 | 2813 | export type AllworkQuery = { 2814 | __typename?: "Query"; 2815 | allWorks: Array<{ 2816 | __typename?: "WorkRecord"; 2817 | title?: string | null; 2818 | slug?: string | null; 2819 | id: string; 2820 | excerpt?: string | null; 2821 | date?: string | null; 2822 | categories?: string | null; 2823 | }>; 2824 | }; 2825 | 2826 | export type SingleBlogQueryVariables = Exact<{ 2827 | slug?: InputMaybe; 2828 | }>; 2829 | 2830 | export type SingleBlogQuery = { 2831 | __typename?: "Query"; 2832 | blog?: { 2833 | __typename?: "BlogRecord"; 2834 | title?: string | null; 2835 | id: string; 2836 | excerpt?: string | null; 2837 | categories?: string | null; 2838 | date?: string | null; 2839 | slug?: string | null; 2840 | content?: string | null; 2841 | image?: { __typename?: "FileField"; url: string } | null; 2842 | } | null; 2843 | }; 2844 | 2845 | export type SingleWorkQueryVariables = Exact<{ 2846 | slug?: InputMaybe; 2847 | }>; 2848 | 2849 | export type SingleWorkQuery = { 2850 | __typename?: "Query"; 2851 | work?: { 2852 | __typename?: "WorkRecord"; 2853 | date?: string | null; 2854 | id: string; 2855 | excerpt?: string | null; 2856 | deployment?: string | null; 2857 | categories?: string | null; 2858 | about?: string | null; 2859 | slug?: string | null; 2860 | title?: string | null; 2861 | technologyUsed?: string | null; 2862 | image?: { __typename?: "FileField"; url: string } | null; 2863 | } | null; 2864 | }; 2865 | 2866 | export type NowPageQueryVariables = Exact<{ [key: string]: never }>; 2867 | 2868 | export type NowPageQuery = { 2869 | __typename?: "Query"; 2870 | now?: { __typename?: "NowRecord"; updatedAt: string; content?: string | null } | null; 2871 | }; 2872 | 2873 | export type AboutPageQueryVariables = Exact<{ [key: string]: never }>; 2874 | 2875 | export type AboutPageQuery = { 2876 | __typename?: "Query"; 2877 | about?: { __typename?: "AboutRecord"; content?: string | null } | null; 2878 | }; 2879 | 2880 | export type ShotsPageQueryVariables = Exact<{ [key: string]: never }>; 2881 | 2882 | export type ShotsPageQuery = { 2883 | __typename?: "Query"; 2884 | allShotsAnalogs: Array<{ 2885 | __typename?: "ShotsAnalogRecord"; 2886 | id: string; 2887 | shots: Array<{ __typename?: "FileField"; filename: string; url: string }>; 2888 | }>; 2889 | }; 2890 | 2891 | export const HomeQueryDocument = { 2892 | kind: "Document", 2893 | definitions: [ 2894 | { 2895 | kind: "OperationDefinition", 2896 | operation: "query", 2897 | name: { kind: "Name", value: "HomeQuery" }, 2898 | selectionSet: { 2899 | kind: "SelectionSet", 2900 | selections: [ 2901 | { 2902 | kind: "Field", 2903 | name: { kind: "Name", value: "allBlogs" }, 2904 | arguments: [ 2905 | { 2906 | kind: "Argument", 2907 | name: { kind: "Name", value: "orderBy" }, 2908 | value: { kind: "EnumValue", value: "date_DESC" }, 2909 | }, 2910 | { 2911 | kind: "Argument", 2912 | name: { kind: "Name", value: "first" }, 2913 | value: { kind: "StringValue", value: "2", block: false }, 2914 | }, 2915 | ], 2916 | selectionSet: { 2917 | kind: "SelectionSet", 2918 | selections: [ 2919 | { kind: "Field", name: { kind: "Name", value: "title" } }, 2920 | { kind: "Field", name: { kind: "Name", value: "id" } }, 2921 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 2922 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 2923 | { kind: "Field", name: { kind: "Name", value: "date" } }, 2924 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 2925 | ], 2926 | }, 2927 | }, 2928 | { 2929 | kind: "Field", 2930 | name: { kind: "Name", value: "allWorks" }, 2931 | arguments: [ 2932 | { 2933 | kind: "Argument", 2934 | name: { kind: "Name", value: "orderBy" }, 2935 | value: { kind: "EnumValue", value: "date_DESC" }, 2936 | }, 2937 | { 2938 | kind: "Argument", 2939 | name: { kind: "Name", value: "first" }, 2940 | value: { kind: "StringValue", value: "3", block: false }, 2941 | }, 2942 | ], 2943 | selectionSet: { 2944 | kind: "SelectionSet", 2945 | selections: [ 2946 | { kind: "Field", name: { kind: "Name", value: "title" } }, 2947 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 2948 | { kind: "Field", name: { kind: "Name", value: "id" } }, 2949 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 2950 | { kind: "Field", name: { kind: "Name", value: "date" } }, 2951 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 2952 | ], 2953 | }, 2954 | }, 2955 | { 2956 | kind: "Field", 2957 | name: { kind: "Name", value: "allLogLists" }, 2958 | arguments: [ 2959 | { 2960 | kind: "Argument", 2961 | name: { kind: "Name", value: "orderBy" }, 2962 | value: { kind: "EnumValue", value: "date_DESC" }, 2963 | }, 2964 | ], 2965 | selectionSet: { 2966 | kind: "SelectionSet", 2967 | selections: [ 2968 | { kind: "Field", name: { kind: "Name", value: "content" } }, 2969 | { kind: "Field", name: { kind: "Name", value: "date" } }, 2970 | ], 2971 | }, 2972 | }, 2973 | ], 2974 | }, 2975 | }, 2976 | ], 2977 | } as unknown as DocumentNode; 2978 | export const AllBlogDocument = { 2979 | kind: "Document", 2980 | definitions: [ 2981 | { 2982 | kind: "OperationDefinition", 2983 | operation: "query", 2984 | name: { kind: "Name", value: "AllBlog" }, 2985 | selectionSet: { 2986 | kind: "SelectionSet", 2987 | selections: [ 2988 | { 2989 | kind: "Field", 2990 | name: { kind: "Name", value: "allBlogs" }, 2991 | arguments: [ 2992 | { 2993 | kind: "Argument", 2994 | name: { kind: "Name", value: "orderBy" }, 2995 | value: { kind: "EnumValue", value: "date_DESC" }, 2996 | }, 2997 | ], 2998 | selectionSet: { 2999 | kind: "SelectionSet", 3000 | selections: [ 3001 | { kind: "Field", name: { kind: "Name", value: "title" } }, 3002 | { kind: "Field", name: { kind: "Name", value: "id" } }, 3003 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 3004 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 3005 | { kind: "Field", name: { kind: "Name", value: "date" } }, 3006 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 3007 | ], 3008 | }, 3009 | }, 3010 | ], 3011 | }, 3012 | }, 3013 | ], 3014 | } as unknown as DocumentNode; 3015 | export const AllworkDocument = { 3016 | kind: "Document", 3017 | definitions: [ 3018 | { 3019 | kind: "OperationDefinition", 3020 | operation: "query", 3021 | name: { kind: "Name", value: "Allwork" }, 3022 | selectionSet: { 3023 | kind: "SelectionSet", 3024 | selections: [ 3025 | { 3026 | kind: "Field", 3027 | name: { kind: "Name", value: "allWorks" }, 3028 | arguments: [ 3029 | { 3030 | kind: "Argument", 3031 | name: { kind: "Name", value: "orderBy" }, 3032 | value: { kind: "EnumValue", value: "date_DESC" }, 3033 | }, 3034 | ], 3035 | selectionSet: { 3036 | kind: "SelectionSet", 3037 | selections: [ 3038 | { kind: "Field", name: { kind: "Name", value: "title" } }, 3039 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 3040 | { kind: "Field", name: { kind: "Name", value: "id" } }, 3041 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 3042 | { kind: "Field", name: { kind: "Name", value: "date" } }, 3043 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 3044 | ], 3045 | }, 3046 | }, 3047 | ], 3048 | }, 3049 | }, 3050 | ], 3051 | } as unknown as DocumentNode; 3052 | export const SingleBlogDocument = { 3053 | kind: "Document", 3054 | definitions: [ 3055 | { 3056 | kind: "OperationDefinition", 3057 | operation: "query", 3058 | name: { kind: "Name", value: "SingleBlog" }, 3059 | variableDefinitions: [ 3060 | { 3061 | kind: "VariableDefinition", 3062 | variable: { kind: "Variable", name: { kind: "Name", value: "slug" } }, 3063 | type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, 3064 | }, 3065 | ], 3066 | selectionSet: { 3067 | kind: "SelectionSet", 3068 | selections: [ 3069 | { 3070 | kind: "Field", 3071 | name: { kind: "Name", value: "blog" }, 3072 | arguments: [ 3073 | { 3074 | kind: "Argument", 3075 | name: { kind: "Name", value: "filter" }, 3076 | value: { 3077 | kind: "ObjectValue", 3078 | fields: [ 3079 | { 3080 | kind: "ObjectField", 3081 | name: { kind: "Name", value: "slug" }, 3082 | value: { 3083 | kind: "ObjectValue", 3084 | fields: [ 3085 | { 3086 | kind: "ObjectField", 3087 | name: { kind: "Name", value: "eq" }, 3088 | value: { kind: "Variable", name: { kind: "Name", value: "slug" } }, 3089 | }, 3090 | ], 3091 | }, 3092 | }, 3093 | ], 3094 | }, 3095 | }, 3096 | ], 3097 | selectionSet: { 3098 | kind: "SelectionSet", 3099 | selections: [ 3100 | { kind: "Field", name: { kind: "Name", value: "title" } }, 3101 | { kind: "Field", name: { kind: "Name", value: "id" } }, 3102 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 3103 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 3104 | { kind: "Field", name: { kind: "Name", value: "date" } }, 3105 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 3106 | { kind: "Field", name: { kind: "Name", value: "content" } }, 3107 | { 3108 | kind: "Field", 3109 | name: { kind: "Name", value: "image" }, 3110 | selectionSet: { 3111 | kind: "SelectionSet", 3112 | selections: [{ kind: "Field", name: { kind: "Name", value: "url" } }], 3113 | }, 3114 | }, 3115 | ], 3116 | }, 3117 | }, 3118 | ], 3119 | }, 3120 | }, 3121 | ], 3122 | } as unknown as DocumentNode; 3123 | export const SingleWorkDocument = { 3124 | kind: "Document", 3125 | definitions: [ 3126 | { 3127 | kind: "OperationDefinition", 3128 | operation: "query", 3129 | name: { kind: "Name", value: "SingleWork" }, 3130 | variableDefinitions: [ 3131 | { 3132 | kind: "VariableDefinition", 3133 | variable: { kind: "Variable", name: { kind: "Name", value: "slug" } }, 3134 | type: { kind: "NamedType", name: { kind: "Name", value: "String" } }, 3135 | }, 3136 | ], 3137 | selectionSet: { 3138 | kind: "SelectionSet", 3139 | selections: [ 3140 | { 3141 | kind: "Field", 3142 | name: { kind: "Name", value: "work" }, 3143 | arguments: [ 3144 | { 3145 | kind: "Argument", 3146 | name: { kind: "Name", value: "filter" }, 3147 | value: { 3148 | kind: "ObjectValue", 3149 | fields: [ 3150 | { 3151 | kind: "ObjectField", 3152 | name: { kind: "Name", value: "slug" }, 3153 | value: { 3154 | kind: "ObjectValue", 3155 | fields: [ 3156 | { 3157 | kind: "ObjectField", 3158 | name: { kind: "Name", value: "eq" }, 3159 | value: { kind: "Variable", name: { kind: "Name", value: "slug" } }, 3160 | }, 3161 | ], 3162 | }, 3163 | }, 3164 | ], 3165 | }, 3166 | }, 3167 | ], 3168 | selectionSet: { 3169 | kind: "SelectionSet", 3170 | selections: [ 3171 | { kind: "Field", name: { kind: "Name", value: "date" } }, 3172 | { kind: "Field", name: { kind: "Name", value: "id" } }, 3173 | { kind: "Field", name: { kind: "Name", value: "excerpt" } }, 3174 | { kind: "Field", name: { kind: "Name", value: "deployment" } }, 3175 | { kind: "Field", name: { kind: "Name", value: "categories" } }, 3176 | { kind: "Field", name: { kind: "Name", value: "about" } }, 3177 | { kind: "Field", name: { kind: "Name", value: "slug" } }, 3178 | { kind: "Field", name: { kind: "Name", value: "title" } }, 3179 | { kind: "Field", name: { kind: "Name", value: "technologyUsed" } }, 3180 | { 3181 | kind: "Field", 3182 | name: { kind: "Name", value: "image" }, 3183 | selectionSet: { 3184 | kind: "SelectionSet", 3185 | selections: [{ kind: "Field", name: { kind: "Name", value: "url" } }], 3186 | }, 3187 | }, 3188 | ], 3189 | }, 3190 | }, 3191 | ], 3192 | }, 3193 | }, 3194 | ], 3195 | } as unknown as DocumentNode; 3196 | export const NowPageDocument = { 3197 | kind: "Document", 3198 | definitions: [ 3199 | { 3200 | kind: "OperationDefinition", 3201 | operation: "query", 3202 | name: { kind: "Name", value: "NowPage" }, 3203 | selectionSet: { 3204 | kind: "SelectionSet", 3205 | selections: [ 3206 | { 3207 | kind: "Field", 3208 | name: { kind: "Name", value: "now" }, 3209 | selectionSet: { 3210 | kind: "SelectionSet", 3211 | selections: [ 3212 | { kind: "Field", name: { kind: "Name", value: "updatedAt" } }, 3213 | { kind: "Field", name: { kind: "Name", value: "content" } }, 3214 | ], 3215 | }, 3216 | }, 3217 | ], 3218 | }, 3219 | }, 3220 | ], 3221 | } as unknown as DocumentNode; 3222 | export const AboutPageDocument = { 3223 | kind: "Document", 3224 | definitions: [ 3225 | { 3226 | kind: "OperationDefinition", 3227 | operation: "query", 3228 | name: { kind: "Name", value: "AboutPage" }, 3229 | selectionSet: { 3230 | kind: "SelectionSet", 3231 | selections: [ 3232 | { 3233 | kind: "Field", 3234 | name: { kind: "Name", value: "about" }, 3235 | selectionSet: { 3236 | kind: "SelectionSet", 3237 | selections: [{ kind: "Field", name: { kind: "Name", value: "content" } }], 3238 | }, 3239 | }, 3240 | ], 3241 | }, 3242 | }, 3243 | ], 3244 | } as unknown as DocumentNode; 3245 | export const ShotsPageDocument = { 3246 | kind: "Document", 3247 | definitions: [ 3248 | { 3249 | kind: "OperationDefinition", 3250 | operation: "query", 3251 | name: { kind: "Name", value: "ShotsPage" }, 3252 | selectionSet: { 3253 | kind: "SelectionSet", 3254 | selections: [ 3255 | { 3256 | kind: "Field", 3257 | name: { kind: "Name", value: "allShotsAnalogs" }, 3258 | arguments: [ 3259 | { kind: "Argument", name: { kind: "Name", value: "first" }, value: { kind: "IntValue", value: "1" } }, 3260 | ], 3261 | selectionSet: { 3262 | kind: "SelectionSet", 3263 | selections: [ 3264 | { kind: "Field", name: { kind: "Name", value: "id" } }, 3265 | { 3266 | kind: "Field", 3267 | name: { kind: "Name", value: "shots" }, 3268 | selectionSet: { 3269 | kind: "SelectionSet", 3270 | selections: [ 3271 | { kind: "Field", name: { kind: "Name", value: "filename" } }, 3272 | { kind: "Field", name: { kind: "Name", value: "url" } }, 3273 | ], 3274 | }, 3275 | }, 3276 | ], 3277 | }, 3278 | }, 3279 | ], 3280 | }, 3281 | }, 3282 | ], 3283 | } as unknown as DocumentNode; 3284 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /lib/request.ts: -------------------------------------------------------------------------------- 1 | import type { TypedDocumentNode } from "@graphql-typed-document-node/core"; 2 | import type { RequestDocument, Variables } from "graphql-request"; 3 | import { request as graphqlRequest } from "graphql-request"; 4 | 5 | const API_TOKEN = process.env.DATOCMS_API_TOKEN; 6 | 7 | export const request = ( 8 | document: RequestDocument | TypedDocumentNode, 9 | variables?: Variables, 10 | ) => 11 | graphqlRequest("https://graphql.datocms.com/", document, variables, { 12 | Authorization: API_TOKEN || "", 13 | "X-Exclude-Invalid": "true", 14 | }); 15 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | images: { 5 | domains: ["www.datocms-assets.com"], 6 | }, 7 | async redirects() { 8 | return [ 9 | { 10 | source: "/resume", 11 | destination: "/resume.pdf", 12 | permanent: true, 13 | }, 14 | ]; 15 | }, 16 | }; 17 | 18 | module.exports = nextConfig; 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kikiding-chakra", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "eslint --fix \"**/*.{ts,tsx}\"", 10 | "generate-ts-types": "graphql-codegen --config graphql.config.yml" 11 | }, 12 | "dependencies": { 13 | "@chakra-icons/bootstrap": "^1.2.0", 14 | "@chakra-ui/icons": "^1.1.7", 15 | "@chakra-ui/react": "^2.8.1", 16 | "@emotion/react": "^11", 17 | "@emotion/styled": "^11", 18 | "@fontsource/mali": "^4.5.5", 19 | "@graphql-codegen/cli": "^2.16.1", 20 | "@graphql-codegen/typed-document-node": "^2.3.10", 21 | "@graphql-codegen/typescript": "^2.8.5", 22 | "@graphql-codegen/typescript-operations": "^2.5.10", 23 | "@graphql-typed-document-node/core": "^3.1.1", 24 | "@skip-go/widget": "0.0.1-alpha.6", 25 | "@vercel/og": "^0.5.17", 26 | "chakra-ui-markdown-renderer": "^4.0.0", 27 | "date-fns": "^2.28.0", 28 | "framer-motion": "^6", 29 | "graphql": "^16.6.0", 30 | "graphql-request": "^5.1.0", 31 | "next": "13.5.3", 32 | "next-seo": "^5.4.0", 33 | "react": "18.2.0", 34 | "react-dom": "18.2.0", 35 | "react-markdown": "^8.0.3", 36 | "react-twitter-widgets": "^1.10.0" 37 | }, 38 | "devDependencies": { 39 | "@graz-sh/style-guide": "4.1.0", 40 | "@types/node": "^16", 41 | "@types/react": "^18.2", 42 | "@types/react-dom": "18.2", 43 | "eslint": "^8.46.0", 44 | "prettier": "^3.0.1", 45 | "typescript": "^5" 46 | }, 47 | "lint-staged": { 48 | "**/*.{js,cjs,mjs,ts,tsx}": [ 49 | "eslint --fix" 50 | ] 51 | }, 52 | "prettier": "@graz-sh/style-guide/prettier" 53 | } 54 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "@fontsource/mali/400.css"; 2 | import "@fontsource/mali/500.css"; 3 | import "@fontsource/mali/600.css"; 4 | import "@fontsource/mali/700.css"; 5 | 6 | import { ChakraProvider } from "@chakra-ui/react"; 7 | import type { AppProps } from "next/app"; 8 | 9 | import { Layout } from "../components/Layout"; 10 | import { theme } from "../styles/theme"; 11 | 12 | const App = ({ Component, pageProps }: AppProps) => { 13 | return ( 14 | 15 | 16 | 17 | 18 | 19 | ); 20 | }; 21 | 22 | export default App; 23 | -------------------------------------------------------------------------------- /pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import Document, { Head, Html, Main, NextScript } from "next/document"; 2 | import Script from "next/script"; 3 | 4 | export default class MyDocument extends Document { 5 | render() { 6 | return ( 7 | 8 | 9 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
39 | 40 | 41 | 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /pages/about.tsx: -------------------------------------------------------------------------------- 1 | import { Box, Center, Flex, Link, Text } from "@chakra-ui/react"; 2 | import ChakraUIRenderer from "chakra-ui-markdown-renderer"; 3 | import { AboutPageDocument } from "graphql/generated"; 4 | import { request } from "lib/request"; 5 | import type { GetStaticProps, NextPage } from "next"; 6 | import Image from "next/image"; 7 | import { NextSeo } from "next-seo"; 8 | import ReactMarkdown from "react-markdown"; 9 | import { Tweet } from "react-twitter-widgets"; 10 | 11 | import { MyButton } from "../components/Button"; 12 | import { SinglePageContent } from "../components/Layout"; 13 | 14 | export interface AboutPageProps { 15 | data: { about: { content: string } }; 16 | } 17 | 18 | const About: NextPage = ({ data }) => { 19 | return ( 20 | <> 21 | 45 | 46 |
47 | 48 | actual me 57 | 58 |
59 | 60 | { 64 | if (props.href?.startsWith("https://twitter.com")) { 65 | return ( 66 |
67 | 68 | { 70 | return {e.message}; 71 | }} 72 | tweetId={String(props.href.split("status/")[1]?.split("?")[0])} 73 | /> 74 | 75 |
76 | ); 77 | } 78 | return ( 79 | 80 | {props.children} 81 | 82 | ); 83 | }, 84 | img: (props) => { 85 | return ( 86 | 87 | about 96 | 97 | ); 98 | }, 99 | }} 100 | skipHtml 101 | > 102 | {data.about.content} 103 |
104 | 105 | 106 | View my resume 107 | 108 | 109 |
110 |
111 | 112 | ); 113 | }; 114 | 115 | export const getStaticProps: GetStaticProps = async () => { 116 | const data = await request(AboutPageDocument); 117 | return { 118 | props: { data }, 119 | }; 120 | }; 121 | 122 | export default About; 123 | -------------------------------------------------------------------------------- /pages/api/social-image.tsx: -------------------------------------------------------------------------------- 1 | import { ImageResponse } from "@vercel/og"; 2 | import type { NextRequest } from "next/server"; 3 | 4 | export const config = { 5 | runtime: "edge", 6 | }; 7 | 8 | export default async (request: NextRequest) => { 9 | const maliBold = await fetch(new URL("../../assets/Mali-Bold.ttf", import.meta.url)).then((res) => res.arrayBuffer()); 10 | const maliSemiBold = await fetch(new URL("../../assets/Mali-SemiBold.ttf", import.meta.url)).then((res) => 11 | res.arrayBuffer(), 12 | ); 13 | const maliRegular = await fetch(new URL("../../assets/Mali-Regular.ttf", import.meta.url)).then((res) => 14 | res.arrayBuffer(), 15 | ); 16 | const maliMedium = await fetch(new URL("../../assets/Mali-Medium.ttf", import.meta.url)).then((res) => 17 | res.arrayBuffer(), 18 | ); 19 | 20 | const { searchParams } = new URL(request.url); 21 | 22 | const hasTitle = searchParams.has("title"); 23 | const title = hasTitle ? searchParams.get("title")?.slice(0, 100) : "Hi👋 I'm Kiki"; 24 | 25 | const hasDescription = searchParams.has("description"); 26 | const description = hasDescription 27 | ? searchParams.get("description")?.slice(0, 100) 28 | : "I'm a designer who trapped in the mind of a programmer. Crafting beautiful apps with React and ❤️"; 29 | 30 | return new ImageResponse( 31 | ( 32 |
43 |
57 |
64 |

{title}

65 |

{description}

66 |
67 |
68 |
69 | ), 70 | { 71 | width: 1200, 72 | height: 630, 73 | fonts: [ 74 | { 75 | data: maliRegular, 76 | name: "MaliRegular", 77 | style: "normal", 78 | }, 79 | { 80 | data: maliBold, 81 | name: "MaliBold", 82 | style: "normal", 83 | }, 84 | { 85 | data: maliSemiBold, 86 | name: "MaliSemiBold", 87 | style: "normal", 88 | }, 89 | { 90 | data: maliMedium, 91 | name: "MaliMedium", 92 | style: "normal", 93 | }, 94 | ], 95 | }, 96 | ); 97 | }; 98 | -------------------------------------------------------------------------------- /pages/blog.tsx: -------------------------------------------------------------------------------- 1 | import type { AllBlogQuery } from "graphql/generated"; 2 | import { AllBlogDocument } from "graphql/generated"; 3 | import { request } from "lib/request"; 4 | import type { GetStaticProps, NextPage } from "next"; 5 | import { NextSeo } from "next-seo"; 6 | 7 | import { BlogCard, VCardLayoutList } from "../components/Card"; 8 | 9 | export interface BlogPageProps { 10 | data: AllBlogQuery; 11 | } 12 | 13 | const Blog: NextPage = ({ data }) => { 14 | return ( 15 | <> 16 | 42 | 43 | {data.allBlogs.map((item) => ( 44 | 45 | ))} 46 | 47 | 48 | ); 49 | }; 50 | 51 | export const getStaticProps: GetStaticProps = async () => { 52 | const data = await request(AllBlogDocument); 53 | return { 54 | props: { data }, 55 | }; 56 | }; 57 | 58 | export default Blog; 59 | -------------------------------------------------------------------------------- /pages/blog/[slug].tsx: -------------------------------------------------------------------------------- 1 | import { Twitter } from "@chakra-icons/bootstrap"; 2 | import { Box, Center, Flex, Heading, Link, Text } from "@chakra-ui/react"; 3 | import ChakraUIRenderer from "chakra-ui-markdown-renderer"; 4 | import { format } from "date-fns"; 5 | import type { AllBlogQuery, SingleBlogQuery } from "graphql/generated"; 6 | import { AllBlogDocument, SingleBlogDocument } from "graphql/generated"; 7 | import { request } from "lib/request"; 8 | import type { GetStaticPaths, GetStaticProps, NextPage } from "next"; 9 | import Image from "next/image"; 10 | import NextLink from "next/link"; 11 | import { NextSeo } from "next-seo"; 12 | import ReactMarkdown from "react-markdown"; 13 | import { Tweet } from "react-twitter-widgets"; 14 | 15 | import { SocialButton } from "../../components/Button"; 16 | import { SinglePageContent } from "../../components/Layout"; 17 | 18 | export interface SingleBlogPageProps { 19 | data: SingleBlogQuery; 20 | } 21 | 22 | const SingleBlog: NextPage = ({ data }) => { 23 | return ( 24 | <> 25 | 52 | 53 | 54 | {data.blog?.title} 55 | 56 | {data.blog?.categories} | {data.blog?.date ? format(new Date(data.blog.date), "dd MMM yyyy") : null} 57 | 58 | { 62 | if (props.href?.startsWith("https://twitter.com")) { 63 | return ( 64 |
65 | 66 | { 68 | return {error.message}; 69 | }} 70 | tweetId={String(props.href.split("status/")[1]?.split("?")[0])} 71 | /> 72 | 73 |
74 | ); 75 | } 76 | return ( 77 | 78 | {props.children} 79 | 80 | ); 81 | }, 82 | img: (props) => { 83 | return ( 84 | 85 | {data.blog?.title 94 | 95 | ); 96 | }, 97 | }} 98 | skipHtml 99 | > 100 | {data.blog?.content || ""} 101 |
{" "} 102 | 106 | 119 | 120 | Share to twitter 121 | 122 | 123 |
124 |
125 | 126 | ); 127 | }; 128 | 129 | export const getStaticPaths: GetStaticPaths = async () => { 130 | const allBlogs = await request(AllBlogDocument); 131 | const allPosts = allBlogs.allBlogs; 132 | return { 133 | paths: allPosts.map((post) => `/blog/${post.slug}`), 134 | fallback: false, 135 | }; 136 | }; 137 | 138 | export const getStaticProps: GetStaticProps = async ({ params }) => { 139 | const data = await request(SingleBlogDocument, { slug: params?.slug }); 140 | return { 141 | props: { data }, 142 | }; 143 | }; 144 | 145 | export default SingleBlog; 146 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { Box, Flex, Stack, Text } from "@chakra-ui/react"; 2 | import { format } from "date-fns"; 3 | import type { HomeQueryQuery } from "graphql/generated"; 4 | import { HomeQueryDocument } from "graphql/generated"; 5 | import { request } from "lib/request"; 6 | import type { GetStaticProps, NextPage } from "next"; 7 | import { NextSeo } from "next-seo"; 8 | 9 | import { MyButton } from "../components/Button"; 10 | import { BlogCard, CardShell, VCardLayoutList, WorkCard } from "../components/Card"; 11 | import { Header } from "../components/Header"; 12 | 13 | export interface HomePageProps { 14 | data: HomeQueryQuery; 15 | } 16 | 17 | const Home: NextPage = ({ data }) => { 18 | return ( 19 | <> 20 | 45 |
46 | 47 | {data.allBlogs.map((item) => ( 48 | 49 | ))} 50 | 51 | 52 | {data.allWorks.map((item) => ( 53 | 54 | ))} 55 | 56 | 57 | 58 | 59 | 60 | Timeline 61 | 62 | 63 | 64 | {data.allLogLists.map((item, index) => ( 65 | 66 | {index !== 0 ? ( 67 | 68 | ) : ( 69 | 70 | )} 71 | 72 | 73 | 74 | 75 | 76 | 77 | 82 | 83 | {item.date ? format(new Date(item.date), "MMM yyyy") : null} 84 | 85 | 86 | {item.content} 87 | 88 | 89 | 90 | 91 | 92 | ))} 93 | 94 | 95 | 96 | ); 97 | }; 98 | 99 | export const getStaticProps: GetStaticProps = async () => { 100 | const data = await request(HomeQueryDocument); 101 | return { 102 | props: { data }, 103 | }; 104 | }; 105 | 106 | export default Home; 107 | -------------------------------------------------------------------------------- /pages/now.tsx: -------------------------------------------------------------------------------- 1 | import { Box, Center, Flex, Heading, Link, Text } from "@chakra-ui/react"; 2 | import ChakraUIRenderer from "chakra-ui-markdown-renderer"; 3 | import { format } from "date-fns"; 4 | import type { NowPageQuery } from "graphql/generated"; 5 | import { NowPageDocument } from "graphql/generated"; 6 | import { request } from "lib/request"; 7 | import type { GetStaticProps, NextPage } from "next"; 8 | import Image from "next/image"; 9 | import { NextSeo } from "next-seo"; 10 | import ReactMarkdown from "react-markdown"; 11 | import { Tweet } from "react-twitter-widgets"; 12 | 13 | import { SinglePageContent } from "../components/Layout"; 14 | 15 | export interface NowPageProps { 16 | data: NowPageQuery; 17 | } 18 | 19 | const Now: NextPage = ({ data }) => { 20 | return ( 21 | <> 22 | 46 | 47 | 48 | Current state 49 | 50 | Last updated : {data.now?.updatedAt ? format(new Date(data.now.updatedAt), "dd MMM yyyy") : null} 51 | 52 | { 56 | if (props.href?.startsWith("https://twitter.com")) { 57 | return ( 58 |
59 | 60 | { 62 | return {error.message}; 63 | }} 64 | tweetId={String(props.href.split("status/")[1]?.split("?")[0])} 65 | /> 66 | 67 |
68 | ); 69 | } 70 | return ( 71 | 72 | {props.children} 73 | 74 | ); 75 | }, 76 | img: (props) => { 77 | return ( 78 | 79 | about 88 | 89 | ); 90 | }, 91 | }} 92 | skipHtml 93 | > 94 | {data.now?.content || ""} 95 |
96 |
97 |
98 | 99 | ); 100 | }; 101 | 102 | export const getStaticProps: GetStaticProps = async () => { 103 | const data = await request(NowPageDocument); 104 | return { 105 | props: { data }, 106 | }; 107 | }; 108 | 109 | export default Now; 110 | -------------------------------------------------------------------------------- /pages/shots.tsx: -------------------------------------------------------------------------------- 1 | import { Modal, ModalContent, ModalOverlay, SimpleGrid, Text, useDisclosure } from "@chakra-ui/react"; 2 | import { CardShell } from "components/Card"; 3 | import { ChakraNextImage } from "components/Image"; 4 | import type { ShotsPageQuery } from "graphql/generated"; 5 | import { ShotsPageDocument } from "graphql/generated"; 6 | import { request } from "lib/request"; 7 | import type { NextPage } from "next"; 8 | import { NextSeo } from "next-seo"; 9 | import { useEffect, useState } from "react"; 10 | 11 | export interface ShotsPageProps { 12 | data: ShotsPageQuery; 13 | } 14 | export const Shots: NextPage = ({ data }) => { 15 | const [selectedIndex, setSelectedIndex] = useState(null); 16 | const { isOpen, onOpen, onClose } = useDisclosure({ 17 | onClose: () => { 18 | setSelectedIndex(null); 19 | }, 20 | }); 21 | 22 | const shots = data.allShotsAnalogs[0]?.shots; 23 | 24 | const keyPress = (e: KeyboardEvent) => { 25 | // left 26 | if (e.key === "ArrowLeft") { 27 | if (Number(selectedIndex) !== 0) { 28 | setSelectedIndex(String(Number(selectedIndex) - 1)); 29 | } 30 | } 31 | // right 32 | if (e.key === "ArrowRight") { 33 | if (Number(selectedIndex) !== Number(shots?.length) - 1) { 34 | setSelectedIndex(String(Number(selectedIndex) + 1)); 35 | } 36 | } 37 | }; 38 | 39 | useEffect(() => { 40 | if (isOpen) { 41 | window.addEventListener("keydown", keyPress); 42 | } 43 | 44 | return () => { 45 | window.removeEventListener("keydown", keyPress); 46 | }; 47 | // eslint-disable-next-line react-hooks/exhaustive-deps 48 | }, [isOpen, selectedIndex]); 49 | 50 | return ( 51 | <> 52 | 76 | 77 | {shots?.map((item, index) => { 78 | return ( 79 | { 82 | setSelectedIndex(String(index)); 83 | onOpen(); 84 | }} 85 | p="2" 86 | > 87 | 95 | 96 | {item.filename} 97 | 98 | 99 | ); 100 | })} 101 | 102 | 103 | 104 | 105 | 106 | 114 | 115 | {selectedIndex ? shots?.[Number(selectedIndex)]?.filename : "Not found"} 116 | 117 | 118 | 119 | 120 | 121 | ); 122 | }; 123 | 124 | export const getStaticProps = async () => { 125 | const data = await request(ShotsPageDocument); 126 | return { 127 | props: { 128 | data, 129 | }, 130 | }; 131 | }; 132 | 133 | export default Shots; 134 | -------------------------------------------------------------------------------- /pages/swap.tsx: -------------------------------------------------------------------------------- 1 | import { SwapWidget, SwapWidgetProvider } from "@skip-go/widget"; 2 | import type { NextPage } from "next"; 3 | import { NextSeo } from "next-seo"; 4 | 5 | import { SinglePageContent } from "../components/Layout"; 6 | 7 | const Swap: NextPage = () => { 8 | return ( 9 | <> 10 | 34 | 43 | 44 | 49 | 50 | 51 | 52 | ); 53 | }; 54 | 55 | export default Swap; 56 | -------------------------------------------------------------------------------- /pages/works.tsx: -------------------------------------------------------------------------------- 1 | import type { AllworkQuery } from "graphql/generated"; 2 | import { AllworkDocument } from "graphql/generated"; 3 | import { request } from "lib/request"; 4 | import type { GetStaticProps, NextPage } from "next"; 5 | import { NextSeo } from "next-seo"; 6 | 7 | import { VCardLayoutList, WorkCard } from "../components/Card"; 8 | 9 | export interface WorksPageProps { 10 | data: AllworkQuery; 11 | } 12 | 13 | const Works: NextPage = ({ data }) => { 14 | return ( 15 | <> 16 | 42 | 43 | {data.allWorks.map((item) => ( 44 | 45 | ))} 46 | 47 | 48 | ); 49 | }; 50 | 51 | export const getStaticProps: GetStaticProps = async () => { 52 | const data = await request(AllworkDocument); 53 | return { 54 | props: { data }, 55 | }; 56 | }; 57 | 58 | export default Works; 59 | -------------------------------------------------------------------------------- /pages/works/[slug].tsx: -------------------------------------------------------------------------------- 1 | import { Twitter } from "@chakra-icons/bootstrap"; 2 | import { Box, Center, Flex, Heading, Link, Text } from "@chakra-ui/react"; 3 | import ChakraUIRenderer from "chakra-ui-markdown-renderer"; 4 | import type { AllworkQuery, SingleWorkQuery } from "graphql/generated"; 5 | import { AllworkDocument, SingleWorkDocument } from "graphql/generated"; 6 | import { request } from "lib/request"; 7 | import type { GetStaticPaths, GetStaticProps, NextPage } from "next"; 8 | import Image from "next/image"; 9 | import NextLink from "next/link"; 10 | import { NextSeo } from "next-seo"; 11 | import ReactMarkdown from "react-markdown"; 12 | import { Tweet } from "react-twitter-widgets"; 13 | 14 | import { MyButton, SocialButton } from "../../components/Button"; 15 | import { SinglePageContent } from "../../components/Layout"; 16 | 17 | export interface SingleWorkPageProps { 18 | data: SingleWorkQuery; 19 | } 20 | 21 | const SingleWork: NextPage = ({ data }) => { 22 | return ( 23 | <> 24 | 51 | 52 | {data.work?.image ? ( 53 | 54 | {data.work.title 63 | 64 | ) : null} 65 | 66 | 67 | {data.work?.title} 68 | 69 | {data.work?.categories?.split(", ").map((item) => ( 70 | 80 | {item} 81 | 82 | ))} 83 | 84 | 85 | About the project 86 | 87 | { 91 | if (props.href?.startsWith("https://twitter.com")) { 92 | return ( 93 |
94 | 95 | { 97 | return {error.message}; 98 | }} 99 | tweetId={String(props.href.split("status/")[1]?.split("?")[0])} 100 | /> 101 | 102 |
103 | ); 104 | } 105 | return ( 106 | 107 | {props.children} 108 | 109 | ); 110 | }, 111 | img: (props) => { 112 | return ( 113 | 114 | {data.work?.title 123 | 124 | ); 125 | }, 126 | }} 127 | skipHtml 128 | > 129 | {data.work?.about || ""} 130 |
131 | 132 | Technology used : 133 | 134 | 135 | {data.work?.technologyUsed?.split(", ").map((item) => ( 136 | 146 | {item} 147 | 148 | ))} 149 | 150 | {data.work?.deployment ? ( 151 | 152 | Links : 153 | 154 | ) : null} 155 | 156 | 157 | {data.work?.deployment?.split(", ").map((item) => { 158 | const val = item.split(": "); 159 | const txt = `${val[0]?.charAt(0).toUpperCase()}${val[0]?.slice(1)}`; 160 | return ( 161 | 162 | 171 | {txt} 172 | 173 | 174 | ); 175 | })} 176 | 177 | 181 | 193 | 194 | Share to twitter 195 | 196 | 197 |
198 |
199 | 200 | ); 201 | }; 202 | 203 | export const getStaticPaths: GetStaticPaths = async () => { 204 | const workRes = await request(AllworkDocument); 205 | const allWorks = workRes.allWorks; 206 | 207 | return { 208 | paths: allWorks.map((post) => `/works/${post.slug}`), 209 | fallback: false, 210 | }; 211 | }; 212 | 213 | export const getStaticProps: GetStaticProps = async ({ params }) => { 214 | const data = await request(SingleWorkDocument, { slug: params?.slug }); 215 | return { 216 | props: { data }, 217 | }; 218 | }; 219 | 220 | export default SingleWork; 221 | -------------------------------------------------------------------------------- /public/actualme.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/actualme.jpeg -------------------------------------------------------------------------------- /public/favicon/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-144x144.png -------------------------------------------------------------------------------- /public/favicon/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-192x192.png -------------------------------------------------------------------------------- /public/favicon/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-36x36.png -------------------------------------------------------------------------------- /public/favicon/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-48x48.png -------------------------------------------------------------------------------- /public/favicon/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-72x72.png -------------------------------------------------------------------------------- /public/favicon/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/android-icon-96x96.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-114x114.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-120x120.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-144x144.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-152x152.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-180x180.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-57x57.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-60x60.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-72x72.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-76x76.png -------------------------------------------------------------------------------- /public/favicon/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon-precomposed.png -------------------------------------------------------------------------------- /public/favicon/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/apple-icon.png -------------------------------------------------------------------------------- /public/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /public/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/favicon-96x96.png -------------------------------------------------------------------------------- /public/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/favicon.ico -------------------------------------------------------------------------------- /public/favicon/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /public/favicon/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/ms-icon-144x144.png -------------------------------------------------------------------------------- /public/favicon/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/ms-icon-150x150.png -------------------------------------------------------------------------------- /public/favicon/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/ms-icon-310x310.png -------------------------------------------------------------------------------- /public/favicon/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/favicon/ms-icon-70x70.png -------------------------------------------------------------------------------- /public/image-loading.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/image-loading.jpg -------------------------------------------------------------------------------- /public/kiki.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/kiki.jpg -------------------------------------------------------------------------------- /public/me.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/me.png -------------------------------------------------------------------------------- /public/webcam.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codingki/personal-site/2d3767a18b1295a4e3f3f02036db884a7fc94574/public/webcam.jpg -------------------------------------------------------------------------------- /styles/theme.ts: -------------------------------------------------------------------------------- 1 | import type { ThemeOverride } from "@chakra-ui/react"; 2 | import { extendTheme } from "@chakra-ui/react"; 3 | 4 | export const theme = extendTheme({ 5 | fonts: { 6 | body: "Mali , cursive", 7 | heading: "Mali, cursive", 8 | }, 9 | colors: { 10 | orange: "rgb(249, 90, 44)", 11 | yellow: "rgb(255, 189, 18)", 12 | blue: "rgb(25, 71, 229)", 13 | paper: "#fbfbf8", 14 | black: "#0a0a0a", 15 | }, 16 | styles: { 17 | global: () => ({ 18 | body: { 19 | fontFamily: "body", 20 | color: "gray.800", 21 | bg: "yellow", 22 | lineHeight: "base", 23 | }, 24 | "*::placeholder": { 25 | color: "gray.400", 26 | }, 27 | "*, *::before, &::after": { 28 | borderColor: "gray.200", 29 | wordWrap: "break-word", 30 | }, 31 | ".handDrawnBorder": { 32 | borderRadius: "255px 15px 225px 15px/15px 225px 15px 255px", 33 | border: "solid 6px #0a0a0a", 34 | overflow: "hidden", 35 | }, 36 | ".handDrawnBorder:hover": { 37 | borderRadius: "10px 212px 30px 251px/223px 12px 223px 25px", 38 | border: "solid 6px #0a0a0a", 39 | overflow: "hidden", 40 | }, 41 | ".handDrawnBorderLight": { 42 | borderRadius: "255px 15px 225px 15px/15px 225px 15px 255px", 43 | border: "solid 4px #0a0a0a", 44 | overflow: "hidden", 45 | }, 46 | ".handDrawnBorderLight:hover": { 47 | borderRadius: "10px 212px 30px 251px/223px 12px 223px 25px", 48 | border: "solid 4px #0a0a0a", 49 | overflow: "hidden", 50 | }, 51 | ".centerFixed": { 52 | left: "50%", 53 | transform: "translateX(-50%)", 54 | }, 55 | ".hideScrollbar::-webkit-scrollbar": { 56 | display: "none", 57 | }, 58 | ".hideScrollbar": { 59 | scrollbarWidth: "none", 60 | msOverflowStyle: "none", 61 | }, 62 | ".handDrawnBorderLeft": { 63 | borderRadius: "0px 15px 225px 15px/15px 225px 15px 255px", 64 | borderLeft: "solid 6px #0a0a0a", 65 | borderTop: "solid 6px #0a0a0a", 66 | overflow: "hidden", 67 | }, 68 | }), 69 | }, 70 | } as ThemeOverride); 71 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@graz-sh/style-guide/tsconfig/next", 3 | "compilerOptions": { 4 | "baseUrl": "." 5 | }, 6 | "include": ["next-env.d.ts", "env.d.ts", "**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"], 7 | "exclude": ["node_modules"] 8 | } 9 | --------------------------------------------------------------------------------