diff --git a/.prettierignore b/.prettierignore
index 3568c2973..13598d0c8 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,3 +6,4 @@ node_modules
tsconfig.json
.vscode
coverage
+graphql-types.ts
\ No newline at end of file
diff --git a/__tests__/components/toggle.test.tsx b/__tests__/components/toggle.test.tsx
new file mode 100644
index 000000000..63f934088
--- /dev/null
+++ b/__tests__/components/toggle.test.tsx
@@ -0,0 +1,32 @@
+import * as React from 'react';
+import { render, screen } from '../utils';
+import userEvent from '@testing-library/user-event';
+import Toggle from '../../src/components/toggle';
+import { ThemeContext } from '../../src/components/layout';
+
+const mockedSetPreferredTheme = jest.fn();
+
+beforeAll(() => {
+ window.__setPreferredTheme = mockedSetPreferredTheme;
+});
+
+describe('Toggle test', () => {
+ test('renders light to dark', () => {
+ render(
+
+
+
+ );
+ userEvent.click(screen.getByTestId('toggle'));
+ expect(mockedSetPreferredTheme).toHaveBeenCalledWith('dark');
+ });
+ test('renders dark to light', () => {
+ render(
+
+
+
+ );
+ userEvent.click(screen.getByTestId('toggle'));
+ expect(mockedSetPreferredTheme).toHaveBeenCalledWith('light');
+ });
+});
diff --git a/gatsby-config.js b/gatsby-config.js
index 874532afd..c43469640 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -28,6 +28,16 @@ const config = {
commit: process.env.VERCEL_GITHUB_COMMIT_SHA || `main`,
},
plugins: [
+ {
+ resolve: `gatsby-plugin-graphql-codegen`,
+ options: {
+ documentPaths: [
+ './src/**/!(*.d).{js,jsx,ts,tsx}',
+ './.cache/fragments/*.js',
+ './node_modules/gatsby-*/**/*.js',
+ ],
+ },
+ },
`@pauliescanlon/gatsby-mdx-embed`,
{
resolve: `gatsby-source-filesystem`,
diff --git a/graphql-types.ts b/graphql-types.ts
new file mode 100644
index 000000000..a625d02d0
--- /dev/null
+++ b/graphql-types.ts
@@ -0,0 +1,3820 @@
+export type Maybe = T | null;
+export type Exact = { [K in keyof T]: T[K] };
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+ ID: string;
+ String: string;
+ Boolean: boolean;
+ Int: number;
+ Float: number;
+ /**
+ * A date string, such as 2007-12-03, compliant with the ISO 8601 standard for
+ * representation of dates and times using the Gregorian calendar.
+ */
+ Date: any;
+ /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */
+ JSON: any;
+};
+
+
+
+
+
+
+
+
+
+
+
+export type BooleanQueryOperatorInput = {
+ eq?: Maybe;
+ ne?: Maybe;
+ in?: Maybe>>;
+ nin?: Maybe>>;
+};
+
+
+export type DateQueryOperatorInput = {
+ eq?: Maybe;
+ ne?: Maybe;
+ gt?: Maybe;
+ gte?: Maybe;
+ lt?: Maybe;
+ lte?: Maybe;
+ in?: Maybe>>;
+ nin?: Maybe>>;
+};
+
+export type Directory = Node & {
+ sourceInstanceName: Scalars['String'];
+ absolutePath: Scalars['String'];
+ relativePath: Scalars['String'];
+ extension: Scalars['String'];
+ size: Scalars['Int'];
+ prettySize: Scalars['String'];
+ modifiedTime: Scalars['Date'];
+ accessTime: Scalars['Date'];
+ changeTime: Scalars['Date'];
+ birthTime: Scalars['Date'];
+ root: Scalars['String'];
+ dir: Scalars['String'];
+ base: Scalars['String'];
+ ext: Scalars['String'];
+ name: Scalars['String'];
+ relativeDirectory: Scalars['String'];
+ dev: Scalars['Int'];
+ mode: Scalars['Int'];
+ nlink: Scalars['Int'];
+ uid: Scalars['Int'];
+ gid: Scalars['Int'];
+ rdev: Scalars['Int'];
+ ino: Scalars['Float'];
+ atimeMs: Scalars['Float'];
+ mtimeMs: Scalars['Float'];
+ ctimeMs: Scalars['Float'];
+ atime: Scalars['Date'];
+ mtime: Scalars['Date'];
+ ctime: Scalars['Date'];
+ /** @deprecated Use `birthTime` instead */
+ birthtime?: Maybe;
+ /** @deprecated Use `birthTime` instead */
+ birthtimeMs?: Maybe;
+ blksize?: Maybe;
+ blocks?: Maybe;
+ id: Scalars['ID'];
+ parent?: Maybe;
+ children: Array;
+ internal: Internal;
+};
+
+
+export type DirectoryModifiedTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryAccessTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryChangeTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryBirthTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryAtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryMtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type DirectoryCtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+export type DirectoryConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ distinct: Array;
+ group: Array;
+};
+
+
+export type DirectoryConnectionDistinctArgs = {
+ field: DirectoryFieldsEnum;
+};
+
+
+export type DirectoryConnectionGroupArgs = {
+ skip?: Maybe;
+ limit?: Maybe;
+ field: DirectoryFieldsEnum;
+};
+
+export type DirectoryEdge = {
+ next?: Maybe;
+ node: Directory;
+ previous?: Maybe;
+};
+
+export type DirectoryFieldsEnum =
+ | 'sourceInstanceName'
+ | 'absolutePath'
+ | 'relativePath'
+ | 'extension'
+ | 'size'
+ | 'prettySize'
+ | 'modifiedTime'
+ | 'accessTime'
+ | 'changeTime'
+ | 'birthTime'
+ | 'root'
+ | 'dir'
+ | 'base'
+ | 'ext'
+ | 'name'
+ | 'relativeDirectory'
+ | 'dev'
+ | 'mode'
+ | 'nlink'
+ | 'uid'
+ | 'gid'
+ | 'rdev'
+ | 'ino'
+ | 'atimeMs'
+ | 'mtimeMs'
+ | 'ctimeMs'
+ | 'atime'
+ | 'mtime'
+ | 'ctime'
+ | 'birthtime'
+ | 'birthtimeMs'
+ | 'blksize'
+ | 'blocks'
+ | 'id'
+ | 'parent___id'
+ | 'parent___parent___id'
+ | 'parent___parent___parent___id'
+ | 'parent___parent___parent___children'
+ | 'parent___parent___children'
+ | 'parent___parent___children___id'
+ | 'parent___parent___children___children'
+ | 'parent___parent___internal___content'
+ | 'parent___parent___internal___contentDigest'
+ | 'parent___parent___internal___description'
+ | 'parent___parent___internal___fieldOwners'
+ | 'parent___parent___internal___ignoreType'
+ | 'parent___parent___internal___mediaType'
+ | 'parent___parent___internal___owner'
+ | 'parent___parent___internal___type'
+ | 'parent___children'
+ | 'parent___children___id'
+ | 'parent___children___parent___id'
+ | 'parent___children___parent___children'
+ | 'parent___children___children'
+ | 'parent___children___children___id'
+ | 'parent___children___children___children'
+ | 'parent___children___internal___content'
+ | 'parent___children___internal___contentDigest'
+ | 'parent___children___internal___description'
+ | 'parent___children___internal___fieldOwners'
+ | 'parent___children___internal___ignoreType'
+ | 'parent___children___internal___mediaType'
+ | 'parent___children___internal___owner'
+ | 'parent___children___internal___type'
+ | 'parent___internal___content'
+ | 'parent___internal___contentDigest'
+ | 'parent___internal___description'
+ | 'parent___internal___fieldOwners'
+ | 'parent___internal___ignoreType'
+ | 'parent___internal___mediaType'
+ | 'parent___internal___owner'
+ | 'parent___internal___type'
+ | 'children'
+ | 'children___id'
+ | 'children___parent___id'
+ | 'children___parent___parent___id'
+ | 'children___parent___parent___children'
+ | 'children___parent___children'
+ | 'children___parent___children___id'
+ | 'children___parent___children___children'
+ | 'children___parent___internal___content'
+ | 'children___parent___internal___contentDigest'
+ | 'children___parent___internal___description'
+ | 'children___parent___internal___fieldOwners'
+ | 'children___parent___internal___ignoreType'
+ | 'children___parent___internal___mediaType'
+ | 'children___parent___internal___owner'
+ | 'children___parent___internal___type'
+ | 'children___children'
+ | 'children___children___id'
+ | 'children___children___parent___id'
+ | 'children___children___parent___children'
+ | 'children___children___children'
+ | 'children___children___children___id'
+ | 'children___children___children___children'
+ | 'children___children___internal___content'
+ | 'children___children___internal___contentDigest'
+ | 'children___children___internal___description'
+ | 'children___children___internal___fieldOwners'
+ | 'children___children___internal___ignoreType'
+ | 'children___children___internal___mediaType'
+ | 'children___children___internal___owner'
+ | 'children___children___internal___type'
+ | 'children___internal___content'
+ | 'children___internal___contentDigest'
+ | 'children___internal___description'
+ | 'children___internal___fieldOwners'
+ | 'children___internal___ignoreType'
+ | 'children___internal___mediaType'
+ | 'children___internal___owner'
+ | 'children___internal___type'
+ | 'internal___content'
+ | 'internal___contentDigest'
+ | 'internal___description'
+ | 'internal___fieldOwners'
+ | 'internal___ignoreType'
+ | 'internal___mediaType'
+ | 'internal___owner'
+ | 'internal___type';
+
+export type DirectoryFilterInput = {
+ sourceInstanceName?: Maybe;
+ absolutePath?: Maybe;
+ relativePath?: Maybe;
+ extension?: Maybe;
+ size?: Maybe;
+ prettySize?: Maybe;
+ modifiedTime?: Maybe;
+ accessTime?: Maybe;
+ changeTime?: Maybe;
+ birthTime?: Maybe;
+ root?: Maybe;
+ dir?: Maybe;
+ base?: Maybe;
+ ext?: Maybe;
+ name?: Maybe;
+ relativeDirectory?: Maybe;
+ dev?: Maybe;
+ mode?: Maybe;
+ nlink?: Maybe;
+ uid?: Maybe;
+ gid?: Maybe;
+ rdev?: Maybe;
+ ino?: Maybe;
+ atimeMs?: Maybe;
+ mtimeMs?: Maybe;
+ ctimeMs?: Maybe;
+ atime?: Maybe;
+ mtime?: Maybe;
+ ctime?: Maybe;
+ birthtime?: Maybe;
+ birthtimeMs?: Maybe;
+ blksize?: Maybe;
+ blocks?: Maybe;
+ id?: Maybe;
+ parent?: Maybe;
+ children?: Maybe;
+ internal?: Maybe;
+};
+
+export type DirectoryGroupConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ field: Scalars['String'];
+ fieldValue?: Maybe;
+};
+
+export type DirectorySortInput = {
+ fields?: Maybe>>;
+ order?: Maybe>>;
+};
+
+export type DuotoneGradient = {
+ highlight: Scalars['String'];
+ shadow: Scalars['String'];
+ opacity?: Maybe;
+};
+
+export type File = Node & {
+ sourceInstanceName: Scalars['String'];
+ absolutePath: Scalars['String'];
+ relativePath: Scalars['String'];
+ extension: Scalars['String'];
+ size: Scalars['Int'];
+ prettySize: Scalars['String'];
+ modifiedTime: Scalars['Date'];
+ accessTime: Scalars['Date'];
+ changeTime: Scalars['Date'];
+ birthTime: Scalars['Date'];
+ root: Scalars['String'];
+ dir: Scalars['String'];
+ base: Scalars['String'];
+ ext: Scalars['String'];
+ name: Scalars['String'];
+ relativeDirectory: Scalars['String'];
+ dev: Scalars['Int'];
+ mode: Scalars['Int'];
+ nlink: Scalars['Int'];
+ uid: Scalars['Int'];
+ gid: Scalars['Int'];
+ rdev: Scalars['Int'];
+ ino: Scalars['Float'];
+ atimeMs: Scalars['Float'];
+ mtimeMs: Scalars['Float'];
+ ctimeMs: Scalars['Float'];
+ atime: Scalars['Date'];
+ mtime: Scalars['Date'];
+ ctime: Scalars['Date'];
+ /** @deprecated Use `birthTime` instead */
+ birthtime?: Maybe;
+ /** @deprecated Use `birthTime` instead */
+ birthtimeMs?: Maybe;
+ blksize?: Maybe;
+ blocks?: Maybe;
+ /** Copy file to static directory and return public url to it */
+ publicURL?: Maybe;
+ childImageSharp?: Maybe;
+ id: Scalars['ID'];
+ parent?: Maybe;
+ children: Array;
+ internal: Internal;
+ childMdx?: Maybe;
+};
+
+
+export type FileModifiedTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileAccessTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileChangeTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileBirthTimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileAtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileMtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+
+export type FileCtimeArgs = {
+ formatString?: Maybe;
+ fromNow?: Maybe;
+ difference?: Maybe;
+ locale?: Maybe;
+};
+
+export type FileConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ distinct: Array;
+ group: Array;
+};
+
+
+export type FileConnectionDistinctArgs = {
+ field: FileFieldsEnum;
+};
+
+
+export type FileConnectionGroupArgs = {
+ skip?: Maybe;
+ limit?: Maybe;
+ field: FileFieldsEnum;
+};
+
+export type FileEdge = {
+ next?: Maybe;
+ node: File;
+ previous?: Maybe;
+};
+
+export type FileFieldsEnum =
+ | 'sourceInstanceName'
+ | 'absolutePath'
+ | 'relativePath'
+ | 'extension'
+ | 'size'
+ | 'prettySize'
+ | 'modifiedTime'
+ | 'accessTime'
+ | 'changeTime'
+ | 'birthTime'
+ | 'root'
+ | 'dir'
+ | 'base'
+ | 'ext'
+ | 'name'
+ | 'relativeDirectory'
+ | 'dev'
+ | 'mode'
+ | 'nlink'
+ | 'uid'
+ | 'gid'
+ | 'rdev'
+ | 'ino'
+ | 'atimeMs'
+ | 'mtimeMs'
+ | 'ctimeMs'
+ | 'atime'
+ | 'mtime'
+ | 'ctime'
+ | 'birthtime'
+ | 'birthtimeMs'
+ | 'blksize'
+ | 'blocks'
+ | 'publicURL'
+ | 'childImageSharp___fixed___base64'
+ | 'childImageSharp___fixed___tracedSVG'
+ | 'childImageSharp___fixed___aspectRatio'
+ | 'childImageSharp___fixed___width'
+ | 'childImageSharp___fixed___height'
+ | 'childImageSharp___fixed___src'
+ | 'childImageSharp___fixed___srcSet'
+ | 'childImageSharp___fixed___srcWebp'
+ | 'childImageSharp___fixed___srcSetWebp'
+ | 'childImageSharp___fixed___originalName'
+ | 'childImageSharp___resolutions___base64'
+ | 'childImageSharp___resolutions___tracedSVG'
+ | 'childImageSharp___resolutions___aspectRatio'
+ | 'childImageSharp___resolutions___width'
+ | 'childImageSharp___resolutions___height'
+ | 'childImageSharp___resolutions___src'
+ | 'childImageSharp___resolutions___srcSet'
+ | 'childImageSharp___resolutions___srcWebp'
+ | 'childImageSharp___resolutions___srcSetWebp'
+ | 'childImageSharp___resolutions___originalName'
+ | 'childImageSharp___fluid___base64'
+ | 'childImageSharp___fluid___tracedSVG'
+ | 'childImageSharp___fluid___aspectRatio'
+ | 'childImageSharp___fluid___src'
+ | 'childImageSharp___fluid___srcSet'
+ | 'childImageSharp___fluid___srcWebp'
+ | 'childImageSharp___fluid___srcSetWebp'
+ | 'childImageSharp___fluid___sizes'
+ | 'childImageSharp___fluid___originalImg'
+ | 'childImageSharp___fluid___originalName'
+ | 'childImageSharp___fluid___presentationWidth'
+ | 'childImageSharp___fluid___presentationHeight'
+ | 'childImageSharp___sizes___base64'
+ | 'childImageSharp___sizes___tracedSVG'
+ | 'childImageSharp___sizes___aspectRatio'
+ | 'childImageSharp___sizes___src'
+ | 'childImageSharp___sizes___srcSet'
+ | 'childImageSharp___sizes___srcWebp'
+ | 'childImageSharp___sizes___srcSetWebp'
+ | 'childImageSharp___sizes___sizes'
+ | 'childImageSharp___sizes___originalImg'
+ | 'childImageSharp___sizes___originalName'
+ | 'childImageSharp___sizes___presentationWidth'
+ | 'childImageSharp___sizes___presentationHeight'
+ | 'childImageSharp___original___width'
+ | 'childImageSharp___original___height'
+ | 'childImageSharp___original___src'
+ | 'childImageSharp___resize___src'
+ | 'childImageSharp___resize___tracedSVG'
+ | 'childImageSharp___resize___width'
+ | 'childImageSharp___resize___height'
+ | 'childImageSharp___resize___aspectRatio'
+ | 'childImageSharp___resize___originalName'
+ | 'childImageSharp___id'
+ | 'childImageSharp___parent___id'
+ | 'childImageSharp___parent___parent___id'
+ | 'childImageSharp___parent___parent___children'
+ | 'childImageSharp___parent___children'
+ | 'childImageSharp___parent___children___id'
+ | 'childImageSharp___parent___children___children'
+ | 'childImageSharp___parent___internal___content'
+ | 'childImageSharp___parent___internal___contentDigest'
+ | 'childImageSharp___parent___internal___description'
+ | 'childImageSharp___parent___internal___fieldOwners'
+ | 'childImageSharp___parent___internal___ignoreType'
+ | 'childImageSharp___parent___internal___mediaType'
+ | 'childImageSharp___parent___internal___owner'
+ | 'childImageSharp___parent___internal___type'
+ | 'childImageSharp___children'
+ | 'childImageSharp___children___id'
+ | 'childImageSharp___children___parent___id'
+ | 'childImageSharp___children___parent___children'
+ | 'childImageSharp___children___children'
+ | 'childImageSharp___children___children___id'
+ | 'childImageSharp___children___children___children'
+ | 'childImageSharp___children___internal___content'
+ | 'childImageSharp___children___internal___contentDigest'
+ | 'childImageSharp___children___internal___description'
+ | 'childImageSharp___children___internal___fieldOwners'
+ | 'childImageSharp___children___internal___ignoreType'
+ | 'childImageSharp___children___internal___mediaType'
+ | 'childImageSharp___children___internal___owner'
+ | 'childImageSharp___children___internal___type'
+ | 'childImageSharp___internal___content'
+ | 'childImageSharp___internal___contentDigest'
+ | 'childImageSharp___internal___description'
+ | 'childImageSharp___internal___fieldOwners'
+ | 'childImageSharp___internal___ignoreType'
+ | 'childImageSharp___internal___mediaType'
+ | 'childImageSharp___internal___owner'
+ | 'childImageSharp___internal___type'
+ | 'id'
+ | 'parent___id'
+ | 'parent___parent___id'
+ | 'parent___parent___parent___id'
+ | 'parent___parent___parent___children'
+ | 'parent___parent___children'
+ | 'parent___parent___children___id'
+ | 'parent___parent___children___children'
+ | 'parent___parent___internal___content'
+ | 'parent___parent___internal___contentDigest'
+ | 'parent___parent___internal___description'
+ | 'parent___parent___internal___fieldOwners'
+ | 'parent___parent___internal___ignoreType'
+ | 'parent___parent___internal___mediaType'
+ | 'parent___parent___internal___owner'
+ | 'parent___parent___internal___type'
+ | 'parent___children'
+ | 'parent___children___id'
+ | 'parent___children___parent___id'
+ | 'parent___children___parent___children'
+ | 'parent___children___children'
+ | 'parent___children___children___id'
+ | 'parent___children___children___children'
+ | 'parent___children___internal___content'
+ | 'parent___children___internal___contentDigest'
+ | 'parent___children___internal___description'
+ | 'parent___children___internal___fieldOwners'
+ | 'parent___children___internal___ignoreType'
+ | 'parent___children___internal___mediaType'
+ | 'parent___children___internal___owner'
+ | 'parent___children___internal___type'
+ | 'parent___internal___content'
+ | 'parent___internal___contentDigest'
+ | 'parent___internal___description'
+ | 'parent___internal___fieldOwners'
+ | 'parent___internal___ignoreType'
+ | 'parent___internal___mediaType'
+ | 'parent___internal___owner'
+ | 'parent___internal___type'
+ | 'children'
+ | 'children___id'
+ | 'children___parent___id'
+ | 'children___parent___parent___id'
+ | 'children___parent___parent___children'
+ | 'children___parent___children'
+ | 'children___parent___children___id'
+ | 'children___parent___children___children'
+ | 'children___parent___internal___content'
+ | 'children___parent___internal___contentDigest'
+ | 'children___parent___internal___description'
+ | 'children___parent___internal___fieldOwners'
+ | 'children___parent___internal___ignoreType'
+ | 'children___parent___internal___mediaType'
+ | 'children___parent___internal___owner'
+ | 'children___parent___internal___type'
+ | 'children___children'
+ | 'children___children___id'
+ | 'children___children___parent___id'
+ | 'children___children___parent___children'
+ | 'children___children___children'
+ | 'children___children___children___id'
+ | 'children___children___children___children'
+ | 'children___children___internal___content'
+ | 'children___children___internal___contentDigest'
+ | 'children___children___internal___description'
+ | 'children___children___internal___fieldOwners'
+ | 'children___children___internal___ignoreType'
+ | 'children___children___internal___mediaType'
+ | 'children___children___internal___owner'
+ | 'children___children___internal___type'
+ | 'children___internal___content'
+ | 'children___internal___contentDigest'
+ | 'children___internal___description'
+ | 'children___internal___fieldOwners'
+ | 'children___internal___ignoreType'
+ | 'children___internal___mediaType'
+ | 'children___internal___owner'
+ | 'children___internal___type'
+ | 'internal___content'
+ | 'internal___contentDigest'
+ | 'internal___description'
+ | 'internal___fieldOwners'
+ | 'internal___ignoreType'
+ | 'internal___mediaType'
+ | 'internal___owner'
+ | 'internal___type'
+ | 'childMdx___rawBody'
+ | 'childMdx___fileAbsolutePath'
+ | 'childMdx___frontmatter___title'
+ | 'childMdx___frontmatter___date'
+ | 'childMdx___frontmatter___spoiler'
+ | 'childMdx___frontmatter___draft'
+ | 'childMdx___frontmatter___keywords'
+ | 'childMdx___slug'
+ | 'childMdx___body'
+ | 'childMdx___excerpt'
+ | 'childMdx___headings'
+ | 'childMdx___headings___value'
+ | 'childMdx___headings___depth'
+ | 'childMdx___html'
+ | 'childMdx___mdxAST'
+ | 'childMdx___tableOfContents'
+ | 'childMdx___timeToRead'
+ | 'childMdx___wordCount___paragraphs'
+ | 'childMdx___wordCount___sentences'
+ | 'childMdx___wordCount___words'
+ | 'childMdx___fields___slug'
+ | 'childMdx___id'
+ | 'childMdx___parent___id'
+ | 'childMdx___parent___parent___id'
+ | 'childMdx___parent___parent___children'
+ | 'childMdx___parent___children'
+ | 'childMdx___parent___children___id'
+ | 'childMdx___parent___children___children'
+ | 'childMdx___parent___internal___content'
+ | 'childMdx___parent___internal___contentDigest'
+ | 'childMdx___parent___internal___description'
+ | 'childMdx___parent___internal___fieldOwners'
+ | 'childMdx___parent___internal___ignoreType'
+ | 'childMdx___parent___internal___mediaType'
+ | 'childMdx___parent___internal___owner'
+ | 'childMdx___parent___internal___type'
+ | 'childMdx___children'
+ | 'childMdx___children___id'
+ | 'childMdx___children___parent___id'
+ | 'childMdx___children___parent___children'
+ | 'childMdx___children___children'
+ | 'childMdx___children___children___id'
+ | 'childMdx___children___children___children'
+ | 'childMdx___children___internal___content'
+ | 'childMdx___children___internal___contentDigest'
+ | 'childMdx___children___internal___description'
+ | 'childMdx___children___internal___fieldOwners'
+ | 'childMdx___children___internal___ignoreType'
+ | 'childMdx___children___internal___mediaType'
+ | 'childMdx___children___internal___owner'
+ | 'childMdx___children___internal___type'
+ | 'childMdx___internal___content'
+ | 'childMdx___internal___contentDigest'
+ | 'childMdx___internal___description'
+ | 'childMdx___internal___fieldOwners'
+ | 'childMdx___internal___ignoreType'
+ | 'childMdx___internal___mediaType'
+ | 'childMdx___internal___owner'
+ | 'childMdx___internal___type'
+ | 'childMdx___childrenGrvscCodeBlock'
+ | 'childMdx___childrenGrvscCodeBlock___id'
+ | 'childMdx___childrenGrvscCodeBlock___parent___id'
+ | 'childMdx___childrenGrvscCodeBlock___parent___children'
+ | 'childMdx___childrenGrvscCodeBlock___children'
+ | 'childMdx___childrenGrvscCodeBlock___children___id'
+ | 'childMdx___childrenGrvscCodeBlock___children___children'
+ | 'childMdx___childrenGrvscCodeBlock___internal___content'
+ | 'childMdx___childrenGrvscCodeBlock___internal___contentDigest'
+ | 'childMdx___childrenGrvscCodeBlock___internal___description'
+ | 'childMdx___childrenGrvscCodeBlock___internal___fieldOwners'
+ | 'childMdx___childrenGrvscCodeBlock___internal___ignoreType'
+ | 'childMdx___childrenGrvscCodeBlock___internal___mediaType'
+ | 'childMdx___childrenGrvscCodeBlock___internal___owner'
+ | 'childMdx___childrenGrvscCodeBlock___internal___type'
+ | 'childMdx___childrenGrvscCodeBlock___index'
+ | 'childMdx___childrenGrvscCodeBlock___text'
+ | 'childMdx___childrenGrvscCodeBlock___html'
+ | 'childMdx___childrenGrvscCodeBlock___preClassName'
+ | 'childMdx___childrenGrvscCodeBlock___codeClassName'
+ | 'childMdx___childrenGrvscCodeBlock___language'
+ | 'childMdx___childrenGrvscCodeBlock___defaultTheme___identifier'
+ | 'childMdx___childrenGrvscCodeBlock___defaultTheme___path'
+ | 'childMdx___childrenGrvscCodeBlock___defaultTheme___conditions'
+ | 'childMdx___childrenGrvscCodeBlock___additionalThemes'
+ | 'childMdx___childrenGrvscCodeBlock___additionalThemes___identifier'
+ | 'childMdx___childrenGrvscCodeBlock___additionalThemes___path'
+ | 'childMdx___childrenGrvscCodeBlock___additionalThemes___conditions'
+ | 'childMdx___childrenGrvscCodeBlock___tokenizedLines'
+ | 'childMdx___childrenGrvscCodeBlock___tokenizedLines___text'
+ | 'childMdx___childrenGrvscCodeBlock___tokenizedLines___className'
+ | 'childMdx___childrenGrvscCodeBlock___tokenizedLines___tokens'
+ | 'childMdx___childrenGrvscCodeBlock___tokenizedLines___html';
+
+export type FileFilterInput = {
+ sourceInstanceName?: Maybe;
+ absolutePath?: Maybe;
+ relativePath?: Maybe;
+ extension?: Maybe;
+ size?: Maybe;
+ prettySize?: Maybe;
+ modifiedTime?: Maybe;
+ accessTime?: Maybe;
+ changeTime?: Maybe;
+ birthTime?: Maybe;
+ root?: Maybe;
+ dir?: Maybe;
+ base?: Maybe;
+ ext?: Maybe;
+ name?: Maybe;
+ relativeDirectory?: Maybe;
+ dev?: Maybe;
+ mode?: Maybe;
+ nlink?: Maybe;
+ uid?: Maybe;
+ gid?: Maybe;
+ rdev?: Maybe;
+ ino?: Maybe;
+ atimeMs?: Maybe;
+ mtimeMs?: Maybe;
+ ctimeMs?: Maybe;
+ atime?: Maybe;
+ mtime?: Maybe;
+ ctime?: Maybe;
+ birthtime?: Maybe;
+ birthtimeMs?: Maybe;
+ blksize?: Maybe;
+ blocks?: Maybe;
+ publicURL?: Maybe;
+ childImageSharp?: Maybe;
+ id?: Maybe;
+ parent?: Maybe;
+ children?: Maybe;
+ internal?: Maybe;
+ childMdx?: Maybe;
+};
+
+export type FileGroupConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ field: Scalars['String'];
+ fieldValue?: Maybe;
+};
+
+export type FileSortInput = {
+ fields?: Maybe>>;
+ order?: Maybe>>;
+};
+
+export type FloatQueryOperatorInput = {
+ eq?: Maybe;
+ ne?: Maybe;
+ gt?: Maybe;
+ gte?: Maybe;
+ lt?: Maybe;
+ lte?: Maybe;
+ in?: Maybe>>;
+ nin?: Maybe>>;
+};
+
+export type GoodreadsShelf = Node & {
+ id: Scalars['ID'];
+ parent?: Maybe;
+ children: Array;
+ internal: Internal;
+ shelfName?: Maybe;
+ reviews?: Maybe>>;
+};
+
+export type GoodreadsShelfConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ distinct: Array;
+ group: Array;
+};
+
+
+export type GoodreadsShelfConnectionDistinctArgs = {
+ field: GoodreadsShelfFieldsEnum;
+};
+
+
+export type GoodreadsShelfConnectionGroupArgs = {
+ skip?: Maybe;
+ limit?: Maybe;
+ field: GoodreadsShelfFieldsEnum;
+};
+
+export type GoodreadsShelfEdge = {
+ next?: Maybe;
+ node: GoodreadsShelf;
+ previous?: Maybe;
+};
+
+export type GoodreadsShelfFieldsEnum =
+ | 'id'
+ | 'parent___id'
+ | 'parent___parent___id'
+ | 'parent___parent___parent___id'
+ | 'parent___parent___parent___children'
+ | 'parent___parent___children'
+ | 'parent___parent___children___id'
+ | 'parent___parent___children___children'
+ | 'parent___parent___internal___content'
+ | 'parent___parent___internal___contentDigest'
+ | 'parent___parent___internal___description'
+ | 'parent___parent___internal___fieldOwners'
+ | 'parent___parent___internal___ignoreType'
+ | 'parent___parent___internal___mediaType'
+ | 'parent___parent___internal___owner'
+ | 'parent___parent___internal___type'
+ | 'parent___children'
+ | 'parent___children___id'
+ | 'parent___children___parent___id'
+ | 'parent___children___parent___children'
+ | 'parent___children___children'
+ | 'parent___children___children___id'
+ | 'parent___children___children___children'
+ | 'parent___children___internal___content'
+ | 'parent___children___internal___contentDigest'
+ | 'parent___children___internal___description'
+ | 'parent___children___internal___fieldOwners'
+ | 'parent___children___internal___ignoreType'
+ | 'parent___children___internal___mediaType'
+ | 'parent___children___internal___owner'
+ | 'parent___children___internal___type'
+ | 'parent___internal___content'
+ | 'parent___internal___contentDigest'
+ | 'parent___internal___description'
+ | 'parent___internal___fieldOwners'
+ | 'parent___internal___ignoreType'
+ | 'parent___internal___mediaType'
+ | 'parent___internal___owner'
+ | 'parent___internal___type'
+ | 'children'
+ | 'children___id'
+ | 'children___parent___id'
+ | 'children___parent___parent___id'
+ | 'children___parent___parent___children'
+ | 'children___parent___children'
+ | 'children___parent___children___id'
+ | 'children___parent___children___children'
+ | 'children___parent___internal___content'
+ | 'children___parent___internal___contentDigest'
+ | 'children___parent___internal___description'
+ | 'children___parent___internal___fieldOwners'
+ | 'children___parent___internal___ignoreType'
+ | 'children___parent___internal___mediaType'
+ | 'children___parent___internal___owner'
+ | 'children___parent___internal___type'
+ | 'children___children'
+ | 'children___children___id'
+ | 'children___children___parent___id'
+ | 'children___children___parent___children'
+ | 'children___children___children'
+ | 'children___children___children___id'
+ | 'children___children___children___children'
+ | 'children___children___internal___content'
+ | 'children___children___internal___contentDigest'
+ | 'children___children___internal___description'
+ | 'children___children___internal___fieldOwners'
+ | 'children___children___internal___ignoreType'
+ | 'children___children___internal___mediaType'
+ | 'children___children___internal___owner'
+ | 'children___children___internal___type'
+ | 'children___internal___content'
+ | 'children___internal___contentDigest'
+ | 'children___internal___description'
+ | 'children___internal___fieldOwners'
+ | 'children___internal___ignoreType'
+ | 'children___internal___mediaType'
+ | 'children___internal___owner'
+ | 'children___internal___type'
+ | 'internal___content'
+ | 'internal___contentDigest'
+ | 'internal___description'
+ | 'internal___fieldOwners'
+ | 'internal___ignoreType'
+ | 'internal___mediaType'
+ | 'internal___owner'
+ | 'internal___type'
+ | 'shelfName'
+ | 'reviews'
+ | 'reviews___reviewID'
+ | 'reviews___rating'
+ | 'reviews___votes'
+ | 'reviews___spoilerFlag'
+ | 'reviews___spoilersState'
+ | 'reviews___dateAdded'
+ | 'reviews___dateUpdated'
+ | 'reviews___body'
+ | 'reviews___book___bookID'
+ | 'reviews___book___isbn'
+ | 'reviews___book___isbn13'
+ | 'reviews___book___textReviewsCount'
+ | 'reviews___book___uri'
+ | 'reviews___book___link'
+ | 'reviews___book___title'
+ | 'reviews___book___titleWithoutSeries'
+ | 'reviews___book___imageUrl'
+ | 'reviews___book___smallImageUrl'
+ | 'reviews___book___largeImageUrl'
+ | 'reviews___book___description';
+
+export type GoodreadsShelfFilterInput = {
+ id?: Maybe;
+ parent?: Maybe;
+ children?: Maybe;
+ internal?: Maybe;
+ shelfName?: Maybe;
+ reviews?: Maybe;
+};
+
+export type GoodreadsShelfGroupConnection = {
+ totalCount: Scalars['Int'];
+ edges: Array;
+ nodes: Array;
+ pageInfo: PageInfo;
+ field: Scalars['String'];
+ fieldValue?: Maybe;
+};
+
+export type GoodreadsShelfReviews = {
+ reviewID?: Maybe;
+ rating?: Maybe;
+ votes?: Maybe;
+ spoilerFlag?: Maybe;
+ spoilersState?: Maybe;
+ dateAdded?: Maybe;
+ dateUpdated?: Maybe;
+ body?: Maybe;
+ book?: Maybe;
+};
+
+export type GoodreadsShelfReviewsBook = {
+ bookID?: Maybe;
+ isbn?: Maybe;
+ isbn13?: Maybe;
+ textReviewsCount?: Maybe;
+ uri?: Maybe;
+ link?: Maybe;
+ title?: Maybe;
+ titleWithoutSeries?: Maybe;
+ imageUrl?: Maybe;
+ smallImageUrl?: Maybe;
+ largeImageUrl?: Maybe;
+ description?: Maybe;
+};
+
+export type GoodreadsShelfReviewsBookFilterInput = {
+ bookID?: Maybe;
+ isbn?: Maybe;
+ isbn13?: Maybe;
+ textReviewsCount?: Maybe;
+ uri?: Maybe;
+ link?: Maybe;
+ title?: Maybe;
+ titleWithoutSeries?: Maybe;
+ imageUrl?: Maybe;
+ smallImageUrl?: Maybe;
+ largeImageUrl?: Maybe;
+ description?: Maybe;
+};
+
+export type GoodreadsShelfReviewsFilterInput = {
+ reviewID?: Maybe;
+ rating?: Maybe;
+ votes?: Maybe;
+ spoilerFlag?: Maybe