From 34b916cc8f83f19d5e81494d14cb01dfec02a17e Mon Sep 17 00:00:00 2001 From: Lukas Thrane <76877975+Windove@users.noreply.github.com> Date: Thu, 9 May 2024 13:38:48 +0200 Subject: [PATCH] 385 redesign layout of homepage (#398) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * delete coloredSection component * feat(frontend): add strapi single types for homepage, redesign homepage * styling * test design * styling changes * featured project carousel test * final styling tourches * fullscreen button for globe * final touches, move globe section to bottom * responsiveness * lint and prettier * fix graphql types * fix types for fetchMissionStatement * prettier * fix(frontend): :bug: fix typo in tada typegen * convert d.ts to .ts for runtime typing. remove unnesescary types. add pakcage command to force generate types. * move back to tada .d.ts as they recommend it * generate turbo type cache * remove type cache as I don't want to add CI/CD and run turbo command every commit. * fix project card inputs * change explicit undefined to optional type * fix window not defined * fix: serializable parameters * WIP: refactoring * remove any typecast * more refactoring * add strapi as dependency to use it's date type. * fix pagination * fix project card double link * fix regression, add default tag back * create common grid component * change name of zustand initialization component * refactor(frontend): :fire: Remove unused code, sort and organize files * fix imports * fix remaining import errors * remove legacy next image props * update sitemap with root directories for blog, projects and satellites * fix sitemap env var * wip homepage redesign, add desc to featured image * add google metadata verification * add robots txt * feat(frontend): restyle home page * fix image width * change description * fix(frontend): :bug: Fix component test import paths * add wrong slug errors * add bouncing scroll indicator on home page * chnge hero margin * Update image paths in README.md and tech-stack.md files. Also add a new environemnt view (#397) * fix(frontend): :white_check_mark: Fix blog component test enum tag * 91 docs update readmemd (#399) * Update deployment.md with Apache configuration and GitHub secrets * Update deployment.md with Apache configuration link * build(deps): bump vite and @strapi/strapi in /backend (#393) Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to 5.0.13 and updates ancestor dependency [@strapi/strapi](https://github.com/strapi/strapi). These dependencies need to be updated together. Updates `vite` from 5.0.11 to 5.0.13 - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v5.0.13/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v5.0.13/packages/vite) Updates `@strapi/strapi` from 4.20.5 to 4.24.0 - [Release notes](https://github.com/strapi/strapi/releases) - [Commits](https://github.com/strapi/strapi/compare/v4.20.5...v4.24.0) --- updated-dependencies: - dependency-name: vite dependency-type: indirect - dependency-name: "@strapi/strapi" dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump webpack-dev-middleware and @strapi/strapi in /backend (#394) Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) to 6.1.2 and updates ancestor dependency [@strapi/strapi](https://github.com/strapi/strapi). These dependencies need to be updated together. Updates `webpack-dev-middleware` from 6.1.1 to 6.1.2 - [Release notes](https://github.com/webpack/webpack-dev-middleware/releases) - [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v6.1.2/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v6.1.1...v6.1.2) Updates `@strapi/strapi` from 4.20.5 to 4.24.0 - [Release notes](https://github.com/strapi/strapi/releases) - [Commits](https://github.com/strapi/strapi/compare/v4.20.5...v4.24.0) --- updated-dependencies: - dependency-name: webpack-dev-middleware dependency-type: indirect - dependency-name: "@strapi/strapi" dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix(frontend): :bug: remove first article definition and fix page size (#401) * fix(frontend): :bug: remove first article definition and fix page size * style(frontend): :art: prettier * style(frontend): :lipstick: change bg for project card * refactor(frontend): :fire: remove unecessary in project page * style(frontend): :art: prettier --------- Co-authored-by: Lucas Tran * remove unecessary interfaces * move ci/cd back to github, because of memory capacity on semi managed server * remove strapi package from frontend, tyring to resolve memory issues --------- Signed-off-by: dependabot[bot] Co-authored-by: Magnus Alexander Strømseng Co-authored-by: Jakob Grøtan Gregusson Co-authored-by: Mads Hermansen <119772939+madshermansen@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Mats <64415243+mnyflot@users.noreply.github.com> Co-authored-by: Lucas Tran --- .github/workflows/autoredeploy.yml | 1 + .github/workflows/node.js.yml | 102 +- .../content-types/featured-image/schema.json | 17 +- .../api/hero/content-types/hero/schema.json | 2 +- .../home-featured-projects/schema.json | 36 + .../controllers/home-featured-projects.js | 9 + .../routes/home-featured-projects.js | 9 + .../services/home-featured-projects.js | 9 + .../home-mission-statement/schema.json | 21 + .../controllers/home-mission-statement.js | 9 + .../routes/home-mission-statement.js | 9 + .../services/home-mission-statement.js | 9 + backend/types/generated/contentTypes.d.ts | 86 +- frontend/.prettierignore | 2 +- frontend/package-lock.json | 344 +- frontend/package.json | 3 +- frontend/playwright-ct.config.ts | 1 + frontend/public/robots.txt | 2 + frontend/src/__generated__/gql.ts | 126 + frontend/src/__generated__/graphql.ts | 4171 +++++++++++++++++ .../src/app/_homeComponents/FeaturedImage.tsx | 87 + .../_homeComponents/FeaturedProjectCard.tsx | 39 + .../app/_homeComponents/FeaturedProjects.tsx | 71 + .../app/_homeComponents/GlobeWithStats.tsx | 27 + .../app/_homeComponents/MissionStatement.tsx | 25 + .../_homeComponents}/SatDropdown.tsx | 64 +- .../_homeComponents/SatelliteGlobe.tsx} | 38 +- .../app/_homeComponents/SatelliteSelector.tsx | 11 + .../app/_homeComponents/ScrollIndicator.tsx | 44 + .../src/app/_homeComponents/TeamSection.tsx | 77 + .../_homeComponents}/files/earth-dark.jpg | Bin .../files/globe-cables-data.json | 0 .../files/globe-data-min.json | 0 .../_homeComponents}/files/globe-data.json | 0 .../blog}/BlogPaginator.tsx | 2 +- .../blog}/BlogpageButtons.tsx | 2 +- .../blog/[articleSlug]}/ShareButtons.tsx | 0 .../src/app/blog/[articleSlug]/layout.tsx | 2 +- frontend/src/app/blog/[articleSlug]/page.tsx | 11 +- frontend/src/app/blog/blogDataCards.tsx | 43 +- frontend/src/app/blog/page.tsx | 113 +- frontend/src/app/globals.css | 7 +- frontend/src/app/layout.tsx | 23 +- frontend/src/app/page.tsx | 117 +- .../src/app/projects/[projectSlug]/layout.tsx | 2 +- .../src/app/projects/[projectSlug]/page.tsx | 16 +- frontend/src/app/projects/page.tsx | 67 +- .../satellites}/SatelliteResponsiveTable.tsx | 6 +- .../_2dmap}/2dMapProjection.tsx | 6 +- .../[satelliteSlug]/_2dmap}/Map2d.tsx | 0 .../[satelliteSlug]/_2dmap}/world-topo.json | 0 .../app/satellites/[satelliteSlug]/page.tsx | 15 +- frontend/src/app/satellites/layout.tsx | 2 +- frontend/src/app/satellites/page.tsx | 13 +- frontend/src/app/sitemap.ts | 7 +- frontend/src/components/HeroWrapper.tsx | 75 - .../homeComponents/SatelliteSelector.tsx | 34 - .../{ => layout}/ErrorBoundaryNavigation.tsx | 0 .../src/components/{ => layout}/Footer.tsx | 19 +- .../components/{ntnu => layout}/NTNULogo.tsx | 0 .../src/components/{ => layout}/Navbar.tsx | 9 +- .../components/{ => layout}/PageHeader.tsx | 0 .../components/{ => layout}/PageLayout.tsx | 12 +- .../{starBackground => layout}/Starfield.tsx | 0 .../satelliteData/SatelliteInitialFetch.tsx | 9 +- frontend/src/components/shadcn/button.tsx | 2 + .../{ => shared}/BlockRendererClient.tsx | 0 frontend/src/components/shared/CardGrid.tsx | 9 + .../CardWithContent.tsx} | 82 +- .../RelatedProjectsAndSatellites.tsx | 2 +- frontend/src/components/ui/coloredSection.tsx | 21 - frontend/src/components/ui/hero.tsx | 28 +- .../SlicePreviewText.ts} | 10 +- frontend/src/lib/convertSatrec.ts | 2 +- frontend/src/lib/data/fetchArticleInfo.tsx | 153 - frontend/src/lib/data/fetchFeaturedImage.tsx | 80 - .../src/lib/data/fetchFeaturedProjects.ts | 69 + .../src/lib/data/fetchMissionStatement.ts | 31 + frontend/src/lib/data/fetchSatelliteInfo.ts | 2 +- .../src/lib/data/fetchSatelliteNamesAndId.ts | 2 +- frontend/src/lib/tada/graphql-env.d.ts | 141 + frontend/src/{ => lib}/tada/graphql.ts | 4 + frontend/src/tada/graphql-env.d.ts | 133 - .../SolarActivity/SolarData.tsx | 146 - .../scrollLinkedDiv.tsx | 59 - .../separator.tsx | 33 - .../blocksrendererclient.spec.tsx | 2 +- .../componentTests/fullblogcard.spec.tsx | 52 - .../tests/componentTests/pageheader.spec.tsx | 2 +- .../satelliteStatsTableRow.spec.tsx | 24 - .../componentTests/sharebuttons.spec.tsx | 2 +- .../componentTests/slicepreviewtext.spec.tsx | 4 +- frontend/tsconfig.json | 3 +- 93 files changed, 5905 insertions(+), 1256 deletions(-) create mode 100644 backend/src/api/home-featured-projects/content-types/home-featured-projects/schema.json create mode 100644 backend/src/api/home-featured-projects/controllers/home-featured-projects.js create mode 100644 backend/src/api/home-featured-projects/routes/home-featured-projects.js create mode 100644 backend/src/api/home-featured-projects/services/home-featured-projects.js create mode 100644 backend/src/api/home-mission-statement/content-types/home-mission-statement/schema.json create mode 100644 backend/src/api/home-mission-statement/controllers/home-mission-statement.js create mode 100644 backend/src/api/home-mission-statement/routes/home-mission-statement.js create mode 100644 backend/src/api/home-mission-statement/services/home-mission-statement.js create mode 100644 frontend/public/robots.txt create mode 100644 frontend/src/__generated__/gql.ts create mode 100644 frontend/src/__generated__/graphql.ts create mode 100644 frontend/src/app/_homeComponents/FeaturedImage.tsx create mode 100644 frontend/src/app/_homeComponents/FeaturedProjectCard.tsx create mode 100644 frontend/src/app/_homeComponents/FeaturedProjects.tsx create mode 100644 frontend/src/app/_homeComponents/GlobeWithStats.tsx create mode 100644 frontend/src/app/_homeComponents/MissionStatement.tsx rename frontend/src/{components/homeComponents => app/_homeComponents}/SatDropdown.tsx (77%) rename frontend/src/{components/homeComponents/homeGlobe.tsx => app/_homeComponents/SatelliteGlobe.tsx} (92%) create mode 100644 frontend/src/app/_homeComponents/SatelliteSelector.tsx create mode 100644 frontend/src/app/_homeComponents/ScrollIndicator.tsx create mode 100644 frontend/src/app/_homeComponents/TeamSection.tsx rename frontend/src/{components/homeComponents => app/_homeComponents}/files/earth-dark.jpg (100%) rename frontend/src/{components/homeComponents => app/_homeComponents}/files/globe-cables-data.json (100%) rename frontend/src/{components/homeComponents => app/_homeComponents}/files/globe-data-min.json (100%) rename frontend/src/{components/homeComponents => app/_homeComponents}/files/globe-data.json (100%) rename frontend/src/{components => app/blog}/BlogPaginator.tsx (98%) rename frontend/src/{components => app/blog}/BlogpageButtons.tsx (96%) rename frontend/src/{components => app/blog/[articleSlug]}/ShareButtons.tsx (100%) rename frontend/src/{components => app/satellites}/SatelliteResponsiveTable.tsx (95%) rename frontend/src/{components/2dmap => app/satellites/[satelliteSlug]/_2dmap}/2dMapProjection.tsx (96%) rename frontend/src/{components/2dmap => app/satellites/[satelliteSlug]/_2dmap}/Map2d.tsx (100%) rename frontend/src/{components/2dmap => app/satellites/[satelliteSlug]/_2dmap}/world-topo.json (100%) delete mode 100644 frontend/src/components/HeroWrapper.tsx delete mode 100644 frontend/src/components/homeComponents/SatelliteSelector.tsx rename frontend/src/components/{ => layout}/ErrorBoundaryNavigation.tsx (100%) rename frontend/src/components/{ => layout}/Footer.tsx (82%) rename frontend/src/components/{ntnu => layout}/NTNULogo.tsx (100%) rename frontend/src/components/{ => layout}/Navbar.tsx (98%) rename frontend/src/components/{ => layout}/PageHeader.tsx (100%) rename frontend/src/components/{ => layout}/PageLayout.tsx (69%) rename frontend/src/components/{starBackground => layout}/Starfield.tsx (100%) rename frontend/src/components/{ => shared}/BlockRendererClient.tsx (100%) create mode 100644 frontend/src/components/shared/CardGrid.tsx rename frontend/src/components/{fullBlogCard.tsx => shared/CardWithContent.tsx} (52%) rename frontend/src/components/{ => shared}/RelatedProjectsAndSatellites.tsx (96%) delete mode 100644 frontend/src/components/ui/coloredSection.tsx rename frontend/src/{components/SlicePreviewText.tsx => lib/SlicePreviewText.ts} (71%) delete mode 100644 frontend/src/lib/data/fetchArticleInfo.tsx delete mode 100644 frontend/src/lib/data/fetchFeaturedImage.tsx create mode 100644 frontend/src/lib/data/fetchFeaturedProjects.ts create mode 100644 frontend/src/lib/data/fetchMissionStatement.ts create mode 100644 frontend/src/lib/tada/graphql-env.d.ts rename frontend/src/{ => lib}/tada/graphql.ts (80%) delete mode 100644 frontend/src/tada/graphql-env.d.ts delete mode 100644 frontend/src/unused_work_for_later_improvements/SolarActivity/SolarData.tsx delete mode 100644 frontend/src/unused_work_for_later_improvements/scrollLinkedDiv.tsx delete mode 100644 frontend/src/unused_work_for_later_improvements/separator.tsx delete mode 100644 frontend/tests/componentTests/fullblogcard.spec.tsx delete mode 100644 frontend/tests/componentTests/satelliteStatsTableRow.spec.tsx diff --git a/.github/workflows/autoredeploy.yml b/.github/workflows/autoredeploy.yml index aa27184..59e5abf 100644 --- a/.github/workflows/autoredeploy.yml +++ b/.github/workflows/autoredeploy.yml @@ -30,6 +30,7 @@ jobs: # Create .env.production for the frontend nextjs echo "BACKEND_INTERNAL_URL=${{ vars.BACKEND_INTERNAL_URL }}" >> .env.production echo "STRAPI_URL=${{ vars.STRAPI_URL }}" >> .env.production + echo "OUTWARD_FACING_URL=${{ vars.OUTWARD_FACING_URL }}" >> .env.production - name: Docker build run: docker-compose build - name: Docker up diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 44c5b04..26efc78 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,66 +5,66 @@ name: Node.js CI on: - push: - branches: ["main"] - pull_request: - branches: ["main"] + push: + branches: ["main"] + pull_request: + branches: ["main"] defaults: - run: - working-directory: ./frontend + run: + working-directory: ./frontend jobs: - build: - runs-on: self-hosted + build: + runs-on: ubuntu-latest - strategy: - matrix: - node-version: [18.x, 20.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + strategy: + matrix: + node-version: [18.x, 20.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci # Clean install packages - - run: npm run build # Build the frontend + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci # Clean install packages + - run: npm run build # Build the frontend - lint: - runs-on: self-hosted + lint: + runs-on: self-hosted - strategy: - matrix: - node-version: [20.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + strategy: + matrix: + node-version: [20.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci # Clean install packages - - run: npm run lint # Run linter + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci # Clean install packages + - run: npm run lint # Run linter - prettier: - runs-on: self-hosted + prettier: + runs-on: self-hosted - strategy: - matrix: - node-version: [20.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + strategy: + matrix: + node-version: [20.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: "npm" - - run: npm ci # Clean install packages - - run: npx prettier . --check # Run prettier + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - run: npm ci # Clean install packages + - run: npx prettier . --check # Run prettier diff --git a/backend/src/api/featured-image/content-types/featured-image/schema.json b/backend/src/api/featured-image/content-types/featured-image/schema.json index 0239a02..4f062c0 100644 --- a/backend/src/api/featured-image/content-types/featured-image/schema.json +++ b/backend/src/api/featured-image/content-types/featured-image/schema.json @@ -4,7 +4,8 @@ "info": { "singularName": "featured-image", "pluralName": "featured-images", - "displayName": "featuredImage" + "displayName": "featuredImage", + "description": "" }, "options": { "draftAndPublish": true @@ -12,20 +13,26 @@ "pluginOptions": {}, "attributes": { "featuredImage": { + "type": "media", + "multiple": false, + "required": true, "allowedTypes": [ "images", "files", "videos", "audios" - ], - "type": "media", - "multiple": false, - "required": true + ] }, "satellite": { "type": "relation", "relation": "oneToOne", "target": "api::satellite.satellite" + }, + "description": { + "type": "string" + }, + "title": { + "type": "string" } } } diff --git a/backend/src/api/hero/content-types/hero/schema.json b/backend/src/api/hero/content-types/hero/schema.json index 20957e9..7136b87 100644 --- a/backend/src/api/hero/content-types/hero/schema.json +++ b/backend/src/api/hero/content-types/hero/schema.json @@ -4,7 +4,7 @@ "info": { "singularName": "hero", "pluralName": "heroes", - "displayName": "Hero", + "displayName": "HomeTeamSection", "description": "" }, "options": { diff --git a/backend/src/api/home-featured-projects/content-types/home-featured-projects/schema.json b/backend/src/api/home-featured-projects/content-types/home-featured-projects/schema.json new file mode 100644 index 0000000..9c91b20 --- /dev/null +++ b/backend/src/api/home-featured-projects/content-types/home-featured-projects/schema.json @@ -0,0 +1,36 @@ +{ + "kind": "singleType", + "collectionName": "home_featured_projects_plural", + "info": { + "singularName": "home-featured-projects", + "pluralName": "home-featured-projects-plural", + "displayName": "HomeFeaturedProjects" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "title": { + "type": "string" + }, + "textContent": { + "type": "text" + }, + "featuredProject1": { + "type": "relation", + "relation": "oneToOne", + "target": "api::project.project" + }, + "featuredProject2": { + "type": "relation", + "relation": "oneToOne", + "target": "api::project.project" + }, + "featuredProject3": { + "type": "relation", + "relation": "oneToOne", + "target": "api::project.project" + } + } +} diff --git a/backend/src/api/home-featured-projects/controllers/home-featured-projects.js b/backend/src/api/home-featured-projects/controllers/home-featured-projects.js new file mode 100644 index 0000000..344cdb7 --- /dev/null +++ b/backend/src/api/home-featured-projects/controllers/home-featured-projects.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-featured-projects controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::home-featured-projects.home-featured-projects'); diff --git a/backend/src/api/home-featured-projects/routes/home-featured-projects.js b/backend/src/api/home-featured-projects/routes/home-featured-projects.js new file mode 100644 index 0000000..be0a489 --- /dev/null +++ b/backend/src/api/home-featured-projects/routes/home-featured-projects.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-featured-projects router + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::home-featured-projects.home-featured-projects'); diff --git a/backend/src/api/home-featured-projects/services/home-featured-projects.js b/backend/src/api/home-featured-projects/services/home-featured-projects.js new file mode 100644 index 0000000..e27401f --- /dev/null +++ b/backend/src/api/home-featured-projects/services/home-featured-projects.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-featured-projects service + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::home-featured-projects.home-featured-projects'); diff --git a/backend/src/api/home-mission-statement/content-types/home-mission-statement/schema.json b/backend/src/api/home-mission-statement/content-types/home-mission-statement/schema.json new file mode 100644 index 0000000..c428de1 --- /dev/null +++ b/backend/src/api/home-mission-statement/content-types/home-mission-statement/schema.json @@ -0,0 +1,21 @@ +{ + "kind": "singleType", + "collectionName": "home_mission_statements", + "info": { + "singularName": "home-mission-statement", + "pluralName": "home-mission-statements", + "displayName": "HomeMissionStatement" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "title": { + "type": "string" + }, + "textContent": { + "type": "text" + } + } +} diff --git a/backend/src/api/home-mission-statement/controllers/home-mission-statement.js b/backend/src/api/home-mission-statement/controllers/home-mission-statement.js new file mode 100644 index 0000000..61c175f --- /dev/null +++ b/backend/src/api/home-mission-statement/controllers/home-mission-statement.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-mission-statement controller + */ + +const { createCoreController } = require('@strapi/strapi').factories; + +module.exports = createCoreController('api::home-mission-statement.home-mission-statement'); diff --git a/backend/src/api/home-mission-statement/routes/home-mission-statement.js b/backend/src/api/home-mission-statement/routes/home-mission-statement.js new file mode 100644 index 0000000..f9ebae2 --- /dev/null +++ b/backend/src/api/home-mission-statement/routes/home-mission-statement.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-mission-statement router + */ + +const { createCoreRouter } = require('@strapi/strapi').factories; + +module.exports = createCoreRouter('api::home-mission-statement.home-mission-statement'); diff --git a/backend/src/api/home-mission-statement/services/home-mission-statement.js b/backend/src/api/home-mission-statement/services/home-mission-statement.js new file mode 100644 index 0000000..62321aa --- /dev/null +++ b/backend/src/api/home-mission-statement/services/home-mission-statement.js @@ -0,0 +1,9 @@ +'use strict'; + +/** + * home-mission-statement service + */ + +const { createCoreService } = require('@strapi/strapi').factories; + +module.exports = createCoreService('api::home-mission-statement.home-mission-statement'); diff --git a/backend/types/generated/contentTypes.d.ts b/backend/types/generated/contentTypes.d.ts index 27038d4..8b89107 100644 --- a/backend/types/generated/contentTypes.d.ts +++ b/backend/types/generated/contentTypes.d.ts @@ -872,6 +872,7 @@ export interface ApiFeaturedImageFeaturedImage extends Schema.SingleType { singularName: 'featured-image'; pluralName: 'featured-images'; displayName: 'featuredImage'; + description: ''; }; options: { draftAndPublish: true; @@ -883,6 +884,8 @@ export interface ApiFeaturedImageFeaturedImage extends Schema.SingleType { 'oneToOne', 'api::satellite.satellite' >; + description: Attribute.String; + title: Attribute.String; createdAt: Attribute.DateTime; updatedAt: Attribute.DateTime; publishedAt: Attribute.DateTime; @@ -906,7 +909,7 @@ export interface ApiHeroHero extends Schema.SingleType { info: { singularName: 'hero'; pluralName: 'heroes'; - displayName: 'Hero'; + displayName: 'HomeTeamSection'; description: ''; }; options: { @@ -926,6 +929,85 @@ export interface ApiHeroHero extends Schema.SingleType { }; } +export interface ApiHomeFeaturedProjectsHomeFeaturedProjects + extends Schema.SingleType { + collectionName: 'home_featured_projects_plural'; + info: { + singularName: 'home-featured-projects'; + pluralName: 'home-featured-projects-plural'; + displayName: 'HomeFeaturedProjects'; + }; + options: { + draftAndPublish: true; + }; + attributes: { + title: Attribute.String; + textContent: Attribute.Text; + featuredProject1: Attribute.Relation< + 'api::home-featured-projects.home-featured-projects', + 'oneToOne', + 'api::project.project' + >; + featuredProject2: Attribute.Relation< + 'api::home-featured-projects.home-featured-projects', + 'oneToOne', + 'api::project.project' + >; + featuredProject3: Attribute.Relation< + 'api::home-featured-projects.home-featured-projects', + 'oneToOne', + 'api::project.project' + >; + createdAt: Attribute.DateTime; + updatedAt: Attribute.DateTime; + publishedAt: Attribute.DateTime; + createdBy: Attribute.Relation< + 'api::home-featured-projects.home-featured-projects', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + updatedBy: Attribute.Relation< + 'api::home-featured-projects.home-featured-projects', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + }; +} + +export interface ApiHomeMissionStatementHomeMissionStatement + extends Schema.SingleType { + collectionName: 'home_mission_statements'; + info: { + singularName: 'home-mission-statement'; + pluralName: 'home-mission-statements'; + displayName: 'HomeMissionStatement'; + }; + options: { + draftAndPublish: true; + }; + attributes: { + title: Attribute.String; + textContent: Attribute.Text; + createdAt: Attribute.DateTime; + updatedAt: Attribute.DateTime; + publishedAt: Attribute.DateTime; + createdBy: Attribute.Relation< + 'api::home-mission-statement.home-mission-statement', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + updatedBy: Attribute.Relation< + 'api::home-mission-statement.home-mission-statement', + 'oneToOne', + 'admin::user' + > & + Attribute.Private; + }; +} + export interface ApiProjectProject extends Schema.CollectionType { collectionName: 'projects'; info: { @@ -1031,6 +1113,8 @@ declare module '@strapi/types' { 'api::author.author': ApiAuthorAuthor; 'api::featured-image.featured-image': ApiFeaturedImageFeaturedImage; 'api::hero.hero': ApiHeroHero; + 'api::home-featured-projects.home-featured-projects': ApiHomeFeaturedProjectsHomeFeaturedProjects; + 'api::home-mission-statement.home-mission-statement': ApiHomeMissionStatementHomeMissionStatement; 'api::project.project': ApiProjectProject; 'api::satellite.satellite': ApiSatelliteSatellite; } diff --git a/frontend/.prettierignore b/frontend/.prettierignore index 2f69188..746ba25 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -3,4 +3,4 @@ build coverage # Ignore gql.tada generated types -src/tada/graphql-env.d.ts \ No newline at end of file +src/lib/tada/graphql-env.d.ts \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c93851b..b9e6f82 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1067,6 +1067,23 @@ "node": ">=16" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "peer": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true, + "peer": true + }, "node_modules/@ericcornelissen/bash-parser": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@ericcornelissen/bash-parser/-/bash-parser-0.5.2.tgz", @@ -1601,11 +1618,11 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz", - "integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", + "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", "dependencies": { - "@floating-ui/dom": "^1.5.4" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -1773,13 +1790,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -1794,22 +1811,34 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3319,6 +3348,212 @@ "react-dom": "^18.0.0" } }, + "node_modules/@swc/core": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.5.3.tgz", + "integrity": "sha512-pSEglypnBGLHBoBcv3aYS7IM2t2LRinubYMyP88UoFIcD2pear2CeB15CbjJ2IzuvERD0ZL/bthM7cDSR9g+aQ==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.2", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.5.3", + "@swc/core-darwin-x64": "1.5.3", + "@swc/core-linux-arm-gnueabihf": "1.5.3", + "@swc/core-linux-arm64-gnu": "1.5.3", + "@swc/core-linux-arm64-musl": "1.5.3", + "@swc/core-linux-x64-gnu": "1.5.3", + "@swc/core-linux-x64-musl": "1.5.3", + "@swc/core-win32-arm64-msvc": "1.5.3", + "@swc/core-win32-ia32-msvc": "1.5.3", + "@swc/core-win32-x64-msvc": "1.5.3" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.3.tgz", + "integrity": "sha512-kRmmV2XqWegzGXvJfVVOj10OXhLgaVOOBjaX3p3Aqg7Do5ksg+bY5wi1gAN/Eul7B08Oqf7GG7WJevjDQGWPOg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.5.3.tgz", + "integrity": "sha512-EYs0+ovaRw6ZN9GBr2nIeC7gUXWA0q4RYR+Og3Vo0Qgv2Mt/XudF44A2lPK9X7M3JIfu6JjnxnTuvsK1Lqojfw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.3.tgz", + "integrity": "sha512-RBVUTidSf4wgPdv98VrgJ4rMzMDN/3LBWdT7l+R7mNFH+mtID7ZAhTON0o/m1HkECgAgi1xcbTOVAw1xgd5KLA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.3.tgz", + "integrity": "sha512-DCC6El3MiTYfv98CShxz/g2s4Pxn6tV0mldCQ0UdRqaN2ApUn7E+zTrqaj5bk7yII3A43WhE9Mr6wNPbXUeVyg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.3.tgz", + "integrity": "sha512-p04ysjYXEyaCGpJvwHm0T0nkPawXtdKBTThWnlh8M5jYULVNVA1YmC9azG2Avs1GDaLgBPVUgodmFYpdSupOYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.3.tgz", + "integrity": "sha512-/l4KJu0xwYm6tcVSOvF8RbXrIeIHJAhWnKvuX4ZnYKFkON968kB8Ghx+1yqBQcZf36tMzSuZUC5xBUA9u66lGA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.3.tgz", + "integrity": "sha512-54DmSnrTXq4fYEKNR0nFAImG3+FxsHlQ6Tol/v3l+rxmg2K0FeeDOpH7wTXeWhMGhFlGrLIyLSnA+SzabfoDIA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.3.tgz", + "integrity": "sha512-piUMqoHNwDXChBfaaFIMzYgoxepfd8Ci1uXXNVEnuiRKz3FiIcNLmvXaBD7lKUwKcnGgVziH/CrndX6SldKQNQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.3.tgz", + "integrity": "sha512-zV5utPYBUzYhBOomCByAjKAvfVBcOCJtnszx7Zlfz7SAv/cGm8D1QzPDCvv6jDhIlUtLj6KyL8JXeFr+f95Fjw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.3.tgz", + "integrity": "sha512-QmUiXiPIV5gBADfDh8e2jKynEhyRC+dcKP/zF9y5KqDUErYzlhocLd68uYS4uIegP6AylYlmigHgcaktGEE9VQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "optional": true, + "peer": true + }, "node_modules/@swc/helpers": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", @@ -3327,6 +3562,16 @@ "tslib": "^2.4.0" } }, + "node_modules/@swc/types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz", + "integrity": "sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==", + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", @@ -7121,9 +7366,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dependencies": { "tslib": "^2.0.0" }, @@ -9360,9 +9605,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -12032,6 +12277,17 @@ "node": ">= 4" } }, + "node_modules/immer": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "optional": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -15852,9 +16108,9 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", - "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -17186,6 +17442,18 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", @@ -17951,6 +18219,34 @@ "dev": true, "peer": true }, + "node_modules/terser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true, + "peer": true + }, "node_modules/text-segmentation": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", diff --git a/frontend/package.json b/frontend/package.json index 2a32d9e..45a7a15 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -13,7 +13,8 @@ "testui": "npx playwright test --ui", "codegen": "npx playwright codegen", "test-ct": "playwright test -c playwright-ct.config.ts", - "find-unused-files": "knip" + "find-unused-files": "knip", + "forceTadaGenerateTypes": "npx gql.tada generate output" }, "dependencies": { "@apollo/client": "^3.9.0-alpha.5", diff --git a/frontend/playwright-ct.config.ts b/frontend/playwright-ct.config.ts index 5345b7e..9ac02d8 100644 --- a/frontend/playwright-ct.config.ts +++ b/frontend/playwright-ct.config.ts @@ -35,6 +35,7 @@ export default defineConfig({ alias: { "@/components": resolve("./src/components"), "@/lib": resolve("./src/lib"), + "@/app": resolve("./src/app"), }, }, }, diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..14267e9 --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / \ No newline at end of file diff --git a/frontend/src/__generated__/gql.ts b/frontend/src/__generated__/gql.ts new file mode 100644 index 0000000..20b3e0b --- /dev/null +++ b/frontend/src/__generated__/gql.ts @@ -0,0 +1,126 @@ +/* eslint-disable */ +import * as types from "./graphql"; +import { TypedDocumentNode as DocumentNode } from "@graphql-typed-document-node/core"; + +/** + * Map of all GraphQL operations in the project. + * + * This map has several performance disadvantages: + * 1. It is not tree-shakeable, so it will include all operations in the project. + * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle. + * 3. It does not support dead code elimination, so it will add unused operations. + * + * Therefore it is highly recommended to use the babel or swc plugin for production. + */ +const documents = { + "query ArticleWithSlug($articlesFilters: ArticleFiltersInput) {\n articles(filters: $articlesFilters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n datePublished\n previewTitle\n }\n }\n }\n }\n \n ": + types.ArticleWithSlugDocument, + "\nquery Projects($projectFilters: ProjectFiltersInput) {\n projects(filters: $projectFilters) {\n data {\n attributes {\n title\n content\n satellites {\n data {\n id\n attributes {\n name\n slug\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n slug\n previewImage {\n data {\n id\n attributes {\n url\n }\n }\n }\n }\n }\n }\n}": + types.ProjectsDocument, + '\n query GET_PROJECTS {\n projects(sort: ["publishedAt:desc"]) {\n data {\n id\n attributes {\n title\n content\n satellites {\n data {\n attributes {\n catalogNumberNORAD\n }\n }\n }\n slug\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }': + types.Get_ProjectsDocument, + "\nquery GET_SATELLITES {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n missionStatus\n slug\n massKg\n }\n }\n }\n }\n": + types.Get_SatellitesDocument, + "\nquery Query($publicationState: PublicationState) {\n hero(publicationState: $publicationState) {\n data {\n attributes {\n title\n text\n image {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }": + types.QueryDocument, + '\nquery GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) {\n articles(sort: ["datePublished:desc"], pagination: $pagination, filters: $filters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n previewTitle\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n Tag\n }\n }\n meta {\n pagination {\n total\n }\n }\n }\n}\n': + types.Get_ArticlesDocument, + "\nquery FeaturedImage {\n featuredImage {\n data {\n attributes {\n featuredImage {\n data {\n attributes {\n url\n }\n }\n }\n satellite {\n data {\n attributes {\n catalogNumberNORAD\n name\n slug\n }\n }\n }\n createdAt\n updatedAt\n publishedAt\n }\n }\n }\n}\n\n": + types.FeaturedImageDocument, + "\nquery HomeFeaturedProjects {\n homeFeaturedProjects {\n data {\n attributes {\n title\n textContent\n featuredProject1 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject2 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject3 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n }\n }\n }\n}\n": + types.HomeFeaturedProjectsDocument, + "\nquery HomeMissionStatement {\n homeMissionStatement {\n data {\n attributes {\n title\n textContent\n }\n }\n }\n\n}\n": + types.HomeMissionStatementDocument, + "query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n id\n attributes {\n catalogNumberNORAD\n content\n name\n massKg\n missionStatus\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n projects {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n }\n id\n }\n }\n launchDate\n }\n }\n }\n }\n ": + types.Get_Satellite_InfoDocument, + "\n query GET_SATELLITE_NAMES_AND_ID {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n }\n }\n }\n }\n": + types.Get_Satellite_Names_And_IdDocument, +}; + +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + * + * + * @example + * ```ts + * const query = gql(`query GetUser($id: ID!) { user(id: $id) { name } }`); + * ``` + * + * The query argument is unknown! + * Please regenerate the types. + */ +export function gql(source: string): unknown; + +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "query ArticleWithSlug($articlesFilters: ArticleFiltersInput) {\n articles(filters: $articlesFilters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n datePublished\n previewTitle\n }\n }\n }\n }\n \n ", +): (typeof documents)["query ArticleWithSlug($articlesFilters: ArticleFiltersInput) {\n articles(filters: $articlesFilters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n datePublished\n previewTitle\n }\n }\n }\n }\n \n "]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery Projects($projectFilters: ProjectFiltersInput) {\n projects(filters: $projectFilters) {\n data {\n attributes {\n title\n content\n satellites {\n data {\n id\n attributes {\n name\n slug\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n slug\n previewImage {\n data {\n id\n attributes {\n url\n }\n }\n }\n }\n }\n }\n}", +): (typeof documents)["\nquery Projects($projectFilters: ProjectFiltersInput) {\n projects(filters: $projectFilters) {\n data {\n attributes {\n title\n content\n satellites {\n data {\n id\n attributes {\n name\n slug\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n slug\n previewImage {\n data {\n id\n attributes {\n url\n }\n }\n }\n }\n }\n }\n}"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: '\n query GET_PROJECTS {\n projects(sort: ["publishedAt:desc"]) {\n data {\n id\n attributes {\n title\n content\n satellites {\n data {\n attributes {\n catalogNumberNORAD\n }\n }\n }\n slug\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }', +): (typeof documents)['\n query GET_PROJECTS {\n projects(sort: ["publishedAt:desc"]) {\n data {\n id\n attributes {\n title\n content\n satellites {\n data {\n attributes {\n catalogNumberNORAD\n }\n }\n }\n slug\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }']; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery GET_SATELLITES {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n missionStatus\n slug\n massKg\n }\n }\n }\n }\n", +): (typeof documents)["\nquery GET_SATELLITES {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n missionStatus\n slug\n massKg\n }\n }\n }\n }\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery Query($publicationState: PublicationState) {\n hero(publicationState: $publicationState) {\n data {\n attributes {\n title\n text\n image {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }", +): (typeof documents)["\nquery Query($publicationState: PublicationState) {\n hero(publicationState: $publicationState) {\n data {\n attributes {\n title\n text\n image {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n }"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: '\nquery GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) {\n articles(sort: ["datePublished:desc"], pagination: $pagination, filters: $filters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n previewTitle\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n Tag\n }\n }\n meta {\n pagination {\n total\n }\n }\n }\n}\n', +): (typeof documents)['\nquery GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) {\n articles(sort: ["datePublished:desc"], pagination: $pagination, filters: $filters) {\n data {\n id\n attributes {\n author {\n data {\n attributes {\n name\n avatar {\n data {\n attributes {\n url\n }\n }\n }\n }\n }\n }\n previewTitle\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n Tag\n }\n }\n meta {\n pagination {\n total\n }\n }\n }\n}\n']; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery FeaturedImage {\n featuredImage {\n data {\n attributes {\n featuredImage {\n data {\n attributes {\n url\n }\n }\n }\n satellite {\n data {\n attributes {\n catalogNumberNORAD\n name\n slug\n }\n }\n }\n createdAt\n updatedAt\n publishedAt\n }\n }\n }\n}\n\n", +): (typeof documents)["\nquery FeaturedImage {\n featuredImage {\n data {\n attributes {\n featuredImage {\n data {\n attributes {\n url\n }\n }\n }\n satellite {\n data {\n attributes {\n catalogNumberNORAD\n name\n slug\n }\n }\n }\n createdAt\n updatedAt\n publishedAt\n }\n }\n }\n}\n\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery HomeFeaturedProjects {\n homeFeaturedProjects {\n data {\n attributes {\n title\n textContent\n featuredProject1 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject2 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject3 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n }\n }\n }\n}\n", +): (typeof documents)["\nquery HomeFeaturedProjects {\n homeFeaturedProjects {\n data {\n attributes {\n title\n textContent\n featuredProject1 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject2 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n featuredProject3 {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n content\n }\n }\n }\n }\n }\n }\n}\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\nquery HomeMissionStatement {\n homeMissionStatement {\n data {\n attributes {\n title\n textContent\n }\n }\n }\n\n}\n", +): (typeof documents)["\nquery HomeMissionStatement {\n homeMissionStatement {\n data {\n attributes {\n title\n textContent\n }\n }\n }\n\n}\n"]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n id\n attributes {\n catalogNumberNORAD\n content\n name\n massKg\n missionStatus\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n projects {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n }\n id\n }\n }\n launchDate\n }\n }\n }\n }\n ", +): (typeof documents)["query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n id\n attributes {\n catalogNumberNORAD\n content\n name\n massKg\n missionStatus\n satelliteImage {\n data {\n attributes {\n url\n }\n }\n }\n projects {\n data {\n attributes {\n title\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n slug\n }\n id\n }\n }\n launchDate\n }\n }\n }\n }\n "]; +/** + * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function gql( + source: "\n query GET_SATELLITE_NAMES_AND_ID {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n }\n }\n }\n }\n", +): (typeof documents)["\n query GET_SATELLITE_NAMES_AND_ID {\n satellites {\n data {\n id\n attributes {\n catalogNumberNORAD\n name\n }\n }\n }\n }\n"]; + +export function gql(source: string) { + return (documents as any)[source] ?? {}; +} + +export type DocumentType> = + TDocumentNode extends DocumentNode ? TType : never; diff --git a/frontend/src/__generated__/graphql.ts b/frontend/src/__generated__/graphql.ts new file mode 100644 index 0000000..9048974 --- /dev/null +++ b/frontend/src/__generated__/graphql.ts @@ -0,0 +1,4171 @@ +/* eslint-disable */ +import { TypedDocumentNode as DocumentNode } from "@graphql-typed-document-node/core"; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +export type MakeEmpty< + T extends { [key: string]: unknown }, + K extends keyof T, +> = { [_ in K]?: never }; +export type Incremental = + | T + | { + [P in keyof T]?: P extends " $fragmentName" | "__typename" + ? T[P] + : never; + }; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string }; + String: { input: string; output: string }; + Boolean: { input: boolean; output: boolean }; + Int: { input: number; output: number }; + Float: { input: number; output: number }; + /** A date string, such as 2007-12-03, compliant with the `full-date` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + Date: { input: any; output: any }; + /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar. */ + DateTime: { input: any; output: 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: { input: any; output: any }; + /** The `Upload` scalar type represents a file upload. */ + Upload: { input: any; output: any }; +}; + +export type Article = { + __typename?: "Article"; + Tag?: Maybe; + author?: Maybe; + body: Scalars["JSON"]["output"]; + coverImage?: Maybe; + createdAt?: Maybe; + datePublished: Scalars["Date"]["output"]; + previewTitle: Scalars["String"]["output"]; + publishedAt?: Maybe; + slug: Scalars["String"]["output"]; + updatedAt?: Maybe; +}; + +export type ArticleEntity = { + __typename?: "ArticleEntity"; + attributes?: Maybe
; + id?: Maybe; +}; + +export type ArticleEntityResponse = { + __typename?: "ArticleEntityResponse"; + data?: Maybe; +}; + +export type ArticleEntityResponseCollection = { + __typename?: "ArticleEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type ArticleFiltersInput = { + Tag?: InputMaybe; + and?: InputMaybe>>; + author?: InputMaybe; + body?: InputMaybe; + createdAt?: InputMaybe; + datePublished?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + previewTitle?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ArticleInput = { + Tag?: InputMaybe; + author?: InputMaybe; + body?: InputMaybe; + coverImage?: InputMaybe; + datePublished?: InputMaybe; + previewTitle?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; +}; + +export type ArticleRelationResponseCollection = { + __typename?: "ArticleRelationResponseCollection"; + data: Array; +}; + +export type Author = { + __typename?: "Author"; + articles?: Maybe; + avatar?: Maybe; + createdAt?: Maybe; + name: Scalars["String"]["output"]; + publishedAt?: Maybe; + updatedAt?: Maybe; +}; + +export type AuthorArticlesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type AuthorEntity = { + __typename?: "AuthorEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type AuthorEntityResponse = { + __typename?: "AuthorEntityResponse"; + data?: Maybe; +}; + +export type AuthorEntityResponseCollection = { + __typename?: "AuthorEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type AuthorFiltersInput = { + and?: InputMaybe>>; + articles?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type AuthorInput = { + articles?: InputMaybe>>; + avatar?: InputMaybe; + name?: InputMaybe; + publishedAt?: InputMaybe; +}; + +export type BooleanFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type DateFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type DateTimeFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export enum Enum_Article_Tag { + General = "General", + Projects = "Projects", + Satellites = "Satellites", +} + +export type FeaturedImage = { + __typename?: "FeaturedImage"; + createdAt?: Maybe; + featuredImage: UploadFileEntityResponse; + publishedAt?: Maybe; + satellite?: Maybe; + updatedAt?: Maybe; +}; + +export type FeaturedImageEntity = { + __typename?: "FeaturedImageEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type FeaturedImageEntityResponse = { + __typename?: "FeaturedImageEntityResponse"; + data?: Maybe; +}; + +export type FeaturedImageInput = { + featuredImage?: InputMaybe; + publishedAt?: InputMaybe; + satellite?: InputMaybe; +}; + +export type FileInfoInput = { + alternativeText?: InputMaybe; + caption?: InputMaybe; + name?: InputMaybe; +}; + +export type FloatFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type GenericMorph = + | Article + | Author + | FeaturedImage + | Hero + | HomeFeaturedProjects + | HomeMissionStatement + | I18NLocale + | Project + | Satellite + | UploadFile + | UploadFolder + | UsersPermissionsPermission + | UsersPermissionsRole + | UsersPermissionsUser; + +export type Hero = { + __typename?: "Hero"; + createdAt?: Maybe; + image: UploadFileEntityResponse; + publishedAt?: Maybe; + text?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type HeroEntity = { + __typename?: "HeroEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type HeroEntityResponse = { + __typename?: "HeroEntityResponse"; + data?: Maybe; +}; + +export type HeroInput = { + image?: InputMaybe; + publishedAt?: InputMaybe; + text?: InputMaybe; + title?: InputMaybe; +}; + +export type HomeFeaturedProjects = { + __typename?: "HomeFeaturedProjects"; + createdAt?: Maybe; + featuredProject1?: Maybe; + featuredProject2?: Maybe; + featuredProject3?: Maybe; + publishedAt?: Maybe; + textContent?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type HomeFeaturedProjectsEntity = { + __typename?: "HomeFeaturedProjectsEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type HomeFeaturedProjectsEntityResponse = { + __typename?: "HomeFeaturedProjectsEntityResponse"; + data?: Maybe; +}; + +export type HomeFeaturedProjectsInput = { + featuredProject1?: InputMaybe; + featuredProject2?: InputMaybe; + featuredProject3?: InputMaybe; + publishedAt?: InputMaybe; + textContent?: InputMaybe; + title?: InputMaybe; +}; + +export type HomeMissionStatement = { + __typename?: "HomeMissionStatement"; + createdAt?: Maybe; + publishedAt?: Maybe; + textContent?: Maybe; + title?: Maybe; + updatedAt?: Maybe; +}; + +export type HomeMissionStatementEntity = { + __typename?: "HomeMissionStatementEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type HomeMissionStatementEntityResponse = { + __typename?: "HomeMissionStatementEntityResponse"; + data?: Maybe; +}; + +export type HomeMissionStatementInput = { + publishedAt?: InputMaybe; + textContent?: InputMaybe; + title?: InputMaybe; +}; + +export type I18NLocale = { + __typename?: "I18NLocale"; + code?: Maybe; + createdAt?: Maybe; + name?: Maybe; + updatedAt?: Maybe; +}; + +export type I18NLocaleEntity = { + __typename?: "I18NLocaleEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type I18NLocaleEntityResponse = { + __typename?: "I18NLocaleEntityResponse"; + data?: Maybe; +}; + +export type I18NLocaleEntityResponseCollection = { + __typename?: "I18NLocaleEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type I18NLocaleFiltersInput = { + and?: InputMaybe>>; + code?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + updatedAt?: InputMaybe; +}; + +export type IdFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type IntFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type JsonFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type Mutation = { + __typename?: "Mutation"; + /** Change user password. Confirm with the current password. */ + changePassword?: Maybe; + createArticle?: Maybe; + createAuthor?: Maybe; + createProject?: Maybe; + createSatellite?: Maybe; + createUploadFile?: Maybe; + createUploadFolder?: Maybe; + /** Create a new role */ + createUsersPermissionsRole?: Maybe; + /** Create a new user */ + createUsersPermissionsUser: UsersPermissionsUserEntityResponse; + deleteArticle?: Maybe; + deleteAuthor?: Maybe; + deleteFeaturedImage?: Maybe; + deleteHero?: Maybe; + deleteHomeFeaturedProjects?: Maybe; + deleteHomeMissionStatement?: Maybe; + deleteProject?: Maybe; + deleteSatellite?: Maybe; + deleteUploadFile?: Maybe; + deleteUploadFolder?: Maybe; + /** Delete an existing role */ + deleteUsersPermissionsRole?: Maybe; + /** Delete an existing user */ + deleteUsersPermissionsUser: UsersPermissionsUserEntityResponse; + /** Confirm an email users email address */ + emailConfirmation?: Maybe; + /** Request a reset password token */ + forgotPassword?: Maybe; + login: UsersPermissionsLoginPayload; + multipleUpload: Array>; + /** Register a user */ + register: UsersPermissionsLoginPayload; + removeFile?: Maybe; + /** Reset user password. Confirm with a code (resetToken from forgotPassword) */ + resetPassword?: Maybe; + updateArticle?: Maybe; + updateAuthor?: Maybe; + updateFeaturedImage?: Maybe; + updateFileInfo: UploadFileEntityResponse; + updateHero?: Maybe; + updateHomeFeaturedProjects?: Maybe; + updateHomeMissionStatement?: Maybe; + updateProject?: Maybe; + updateSatellite?: Maybe; + updateUploadFile?: Maybe; + updateUploadFolder?: Maybe; + /** Update an existing role */ + updateUsersPermissionsRole?: Maybe; + /** Update an existing user */ + updateUsersPermissionsUser: UsersPermissionsUserEntityResponse; + upload: UploadFileEntityResponse; +}; + +export type MutationChangePasswordArgs = { + currentPassword: Scalars["String"]["input"]; + password: Scalars["String"]["input"]; + passwordConfirmation: Scalars["String"]["input"]; +}; + +export type MutationCreateArticleArgs = { + data: ArticleInput; +}; + +export type MutationCreateAuthorArgs = { + data: AuthorInput; +}; + +export type MutationCreateProjectArgs = { + data: ProjectInput; +}; + +export type MutationCreateSatelliteArgs = { + data: SatelliteInput; +}; + +export type MutationCreateUploadFileArgs = { + data: UploadFileInput; +}; + +export type MutationCreateUploadFolderArgs = { + data: UploadFolderInput; +}; + +export type MutationCreateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; +}; + +export type MutationCreateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; +}; + +export type MutationDeleteArticleArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteAuthorArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteProjectArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteSatelliteArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteUploadFileArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteUploadFolderArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteUsersPermissionsRoleArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationDeleteUsersPermissionsUserArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationEmailConfirmationArgs = { + confirmation: Scalars["String"]["input"]; +}; + +export type MutationForgotPasswordArgs = { + email: Scalars["String"]["input"]; +}; + +export type MutationLoginArgs = { + input: UsersPermissionsLoginInput; +}; + +export type MutationMultipleUploadArgs = { + field?: InputMaybe; + files: Array>; + ref?: InputMaybe; + refId?: InputMaybe; +}; + +export type MutationRegisterArgs = { + input: UsersPermissionsRegisterInput; +}; + +export type MutationRemoveFileArgs = { + id: Scalars["ID"]["input"]; +}; + +export type MutationResetPasswordArgs = { + code: Scalars["String"]["input"]; + password: Scalars["String"]["input"]; + passwordConfirmation: Scalars["String"]["input"]; +}; + +export type MutationUpdateArticleArgs = { + data: ArticleInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateAuthorArgs = { + data: AuthorInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateFeaturedImageArgs = { + data: FeaturedImageInput; +}; + +export type MutationUpdateFileInfoArgs = { + id: Scalars["ID"]["input"]; + info?: InputMaybe; +}; + +export type MutationUpdateHeroArgs = { + data: HeroInput; +}; + +export type MutationUpdateHomeFeaturedProjectsArgs = { + data: HomeFeaturedProjectsInput; +}; + +export type MutationUpdateHomeMissionStatementArgs = { + data: HomeMissionStatementInput; +}; + +export type MutationUpdateProjectArgs = { + data: ProjectInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateSatelliteArgs = { + data: SatelliteInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateUploadFileArgs = { + data: UploadFileInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateUploadFolderArgs = { + data: UploadFolderInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateUsersPermissionsRoleArgs = { + data: UsersPermissionsRoleInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUpdateUsersPermissionsUserArgs = { + data: UsersPermissionsUserInput; + id: Scalars["ID"]["input"]; +}; + +export type MutationUploadArgs = { + field?: InputMaybe; + file: Scalars["Upload"]["input"]; + info?: InputMaybe; + ref?: InputMaybe; + refId?: InputMaybe; +}; + +export type Pagination = { + __typename?: "Pagination"; + page: Scalars["Int"]["output"]; + pageCount: Scalars["Int"]["output"]; + pageSize: Scalars["Int"]["output"]; + total: Scalars["Int"]["output"]; +}; + +export type PaginationArg = { + limit?: InputMaybe; + page?: InputMaybe; + pageSize?: InputMaybe; + start?: InputMaybe; +}; + +export type Project = { + __typename?: "Project"; + content?: Maybe; + createdAt?: Maybe; + previewImage?: Maybe; + publishedAt?: Maybe; + satellites?: Maybe; + slug: Scalars["String"]["output"]; + title: Scalars["String"]["output"]; + updatedAt?: Maybe; +}; + +export type ProjectSatellitesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ProjectEntity = { + __typename?: "ProjectEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type ProjectEntityResponse = { + __typename?: "ProjectEntityResponse"; + data?: Maybe; +}; + +export type ProjectEntityResponseCollection = { + __typename?: "ProjectEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type ProjectFiltersInput = { + and?: InputMaybe>>; + content?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + publishedAt?: InputMaybe; + satellites?: InputMaybe; + slug?: InputMaybe; + title?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type ProjectInput = { + content?: InputMaybe; + previewImage?: InputMaybe; + publishedAt?: InputMaybe; + satellites?: InputMaybe>>; + slug?: InputMaybe; + title?: InputMaybe; +}; + +export type ProjectRelationResponseCollection = { + __typename?: "ProjectRelationResponseCollection"; + data: Array; +}; + +export enum PublicationState { + Live = "LIVE", + Preview = "PREVIEW", +} + +export type Query = { + __typename?: "Query"; + article?: Maybe; + articles?: Maybe; + author?: Maybe; + authors?: Maybe; + featuredImage?: Maybe; + hero?: Maybe; + homeFeaturedProjects?: Maybe; + homeMissionStatement?: Maybe; + i18NLocale?: Maybe; + i18NLocales?: Maybe; + me?: Maybe; + project?: Maybe; + projects?: Maybe; + satellite?: Maybe; + satellites?: Maybe; + uploadFile?: Maybe; + uploadFiles?: Maybe; + uploadFolder?: Maybe; + uploadFolders?: Maybe; + usersPermissionsRole?: Maybe; + usersPermissionsRoles?: Maybe; + usersPermissionsUser?: Maybe; + usersPermissionsUsers?: Maybe; +}; + +export type QueryArticleArgs = { + id?: InputMaybe; +}; + +export type QueryArticlesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryAuthorArgs = { + id?: InputMaybe; +}; + +export type QueryAuthorsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryFeaturedImageArgs = { + publicationState?: InputMaybe; +}; + +export type QueryHeroArgs = { + publicationState?: InputMaybe; +}; + +export type QueryHomeFeaturedProjectsArgs = { + publicationState?: InputMaybe; +}; + +export type QueryHomeMissionStatementArgs = { + publicationState?: InputMaybe; +}; + +export type QueryI18NLocaleArgs = { + id?: InputMaybe; +}; + +export type QueryI18NLocalesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryProjectArgs = { + id?: InputMaybe; +}; + +export type QueryProjectsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QuerySatelliteArgs = { + id?: InputMaybe; +}; + +export type QuerySatellitesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryUploadFileArgs = { + id?: InputMaybe; +}; + +export type QueryUploadFilesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryUploadFolderArgs = { + id?: InputMaybe; +}; + +export type QueryUploadFoldersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryUsersPermissionsRoleArgs = { + id?: InputMaybe; +}; + +export type QueryUsersPermissionsRolesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type QueryUsersPermissionsUserArgs = { + id?: InputMaybe; +}; + +export type QueryUsersPermissionsUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type ResponseCollectionMeta = { + __typename?: "ResponseCollectionMeta"; + pagination: Pagination; +}; + +export type Satellite = { + __typename?: "Satellite"; + catalogNumberNORAD?: Maybe; + content?: Maybe; + createdAt?: Maybe; + launchDate?: Maybe; + massKg?: Maybe; + missionStatus?: Maybe; + name: Scalars["String"]["output"]; + projects?: Maybe; + publishedAt?: Maybe; + satelliteImage?: Maybe; + slug: Scalars["String"]["output"]; + updatedAt?: Maybe; +}; + +export type SatelliteProjectsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + publicationState?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type SatelliteEntity = { + __typename?: "SatelliteEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type SatelliteEntityResponse = { + __typename?: "SatelliteEntityResponse"; + data?: Maybe; +}; + +export type SatelliteEntityResponseCollection = { + __typename?: "SatelliteEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type SatelliteFiltersInput = { + and?: InputMaybe>>; + catalogNumberNORAD?: InputMaybe; + content?: InputMaybe; + createdAt?: InputMaybe; + id?: InputMaybe; + launchDate?: InputMaybe; + massKg?: InputMaybe; + missionStatus?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + projects?: InputMaybe; + publishedAt?: InputMaybe; + slug?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type SatelliteInput = { + catalogNumberNORAD?: InputMaybe; + content?: InputMaybe; + launchDate?: InputMaybe; + massKg?: InputMaybe; + missionStatus?: InputMaybe; + name?: InputMaybe; + projects?: InputMaybe>>; + publishedAt?: InputMaybe; + satelliteImage?: InputMaybe; + slug?: InputMaybe; +}; + +export type SatelliteRelationResponseCollection = { + __typename?: "SatelliteRelationResponseCollection"; + data: Array; +}; + +export type StringFilterInput = { + and?: InputMaybe>>; + between?: InputMaybe>>; + contains?: InputMaybe; + containsi?: InputMaybe; + endsWith?: InputMaybe; + eq?: InputMaybe; + eqi?: InputMaybe; + gt?: InputMaybe; + gte?: InputMaybe; + in?: InputMaybe>>; + lt?: InputMaybe; + lte?: InputMaybe; + ne?: InputMaybe; + nei?: InputMaybe; + not?: InputMaybe; + notContains?: InputMaybe; + notContainsi?: InputMaybe; + notIn?: InputMaybe>>; + notNull?: InputMaybe; + null?: InputMaybe; + or?: InputMaybe>>; + startsWith?: InputMaybe; +}; + +export type UploadFile = { + __typename?: "UploadFile"; + alternativeText?: Maybe; + caption?: Maybe; + createdAt?: Maybe; + ext?: Maybe; + formats?: Maybe; + hash: Scalars["String"]["output"]; + height?: Maybe; + mime: Scalars["String"]["output"]; + name: Scalars["String"]["output"]; + previewUrl?: Maybe; + provider: Scalars["String"]["output"]; + provider_metadata?: Maybe; + related?: Maybe>>; + size: Scalars["Float"]["output"]; + updatedAt?: Maybe; + url: Scalars["String"]["output"]; + width?: Maybe; +}; + +export type UploadFileEntity = { + __typename?: "UploadFileEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type UploadFileEntityResponse = { + __typename?: "UploadFileEntityResponse"; + data?: Maybe; +}; + +export type UploadFileEntityResponseCollection = { + __typename?: "UploadFileEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type UploadFileFiltersInput = { + alternativeText?: InputMaybe; + and?: InputMaybe>>; + caption?: InputMaybe; + createdAt?: InputMaybe; + ext?: InputMaybe; + folder?: InputMaybe; + folderPath?: InputMaybe; + formats?: InputMaybe; + hash?: InputMaybe; + height?: InputMaybe; + id?: InputMaybe; + mime?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + previewUrl?: InputMaybe; + provider?: InputMaybe; + provider_metadata?: InputMaybe; + size?: InputMaybe; + updatedAt?: InputMaybe; + url?: InputMaybe; + width?: InputMaybe; +}; + +export type UploadFileInput = { + alternativeText?: InputMaybe; + caption?: InputMaybe; + ext?: InputMaybe; + folder?: InputMaybe; + folderPath?: InputMaybe; + formats?: InputMaybe; + hash?: InputMaybe; + height?: InputMaybe; + mime?: InputMaybe; + name?: InputMaybe; + previewUrl?: InputMaybe; + provider?: InputMaybe; + provider_metadata?: InputMaybe; + size?: InputMaybe; + url?: InputMaybe; + width?: InputMaybe; +}; + +export type UploadFileRelationResponseCollection = { + __typename?: "UploadFileRelationResponseCollection"; + data: Array; +}; + +export type UploadFolder = { + __typename?: "UploadFolder"; + children?: Maybe; + createdAt?: Maybe; + files?: Maybe; + name: Scalars["String"]["output"]; + parent?: Maybe; + path: Scalars["String"]["output"]; + pathId: Scalars["Int"]["output"]; + updatedAt?: Maybe; +}; + +export type UploadFolderChildrenArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UploadFolderFilesArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UploadFolderEntity = { + __typename?: "UploadFolderEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type UploadFolderEntityResponse = { + __typename?: "UploadFolderEntityResponse"; + data?: Maybe; +}; + +export type UploadFolderEntityResponseCollection = { + __typename?: "UploadFolderEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type UploadFolderFiltersInput = { + and?: InputMaybe>>; + children?: InputMaybe; + createdAt?: InputMaybe; + files?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + parent?: InputMaybe; + path?: InputMaybe; + pathId?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type UploadFolderInput = { + children?: InputMaybe>>; + files?: InputMaybe>>; + name?: InputMaybe; + parent?: InputMaybe; + path?: InputMaybe; + pathId?: InputMaybe; +}; + +export type UploadFolderRelationResponseCollection = { + __typename?: "UploadFolderRelationResponseCollection"; + data: Array; +}; + +export type UsersPermissionsCreateRolePayload = { + __typename?: "UsersPermissionsCreateRolePayload"; + ok: Scalars["Boolean"]["output"]; +}; + +export type UsersPermissionsDeleteRolePayload = { + __typename?: "UsersPermissionsDeleteRolePayload"; + ok: Scalars["Boolean"]["output"]; +}; + +export type UsersPermissionsLoginInput = { + identifier: Scalars["String"]["input"]; + password: Scalars["String"]["input"]; + provider?: Scalars["String"]["input"]; +}; + +export type UsersPermissionsLoginPayload = { + __typename?: "UsersPermissionsLoginPayload"; + jwt?: Maybe; + user: UsersPermissionsMe; +}; + +export type UsersPermissionsMe = { + __typename?: "UsersPermissionsMe"; + blocked?: Maybe; + confirmed?: Maybe; + email?: Maybe; + id: Scalars["ID"]["output"]; + role?: Maybe; + username: Scalars["String"]["output"]; +}; + +export type UsersPermissionsMeRole = { + __typename?: "UsersPermissionsMeRole"; + description?: Maybe; + id: Scalars["ID"]["output"]; + name: Scalars["String"]["output"]; + type?: Maybe; +}; + +export type UsersPermissionsPasswordPayload = { + __typename?: "UsersPermissionsPasswordPayload"; + ok: Scalars["Boolean"]["output"]; +}; + +export type UsersPermissionsPermission = { + __typename?: "UsersPermissionsPermission"; + action: Scalars["String"]["output"]; + createdAt?: Maybe; + role?: Maybe; + updatedAt?: Maybe; +}; + +export type UsersPermissionsPermissionEntity = { + __typename?: "UsersPermissionsPermissionEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type UsersPermissionsPermissionFiltersInput = { + action?: InputMaybe; + and?: InputMaybe>>; + createdAt?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + role?: InputMaybe; + updatedAt?: InputMaybe; +}; + +export type UsersPermissionsPermissionRelationResponseCollection = { + __typename?: "UsersPermissionsPermissionRelationResponseCollection"; + data: Array; +}; + +export type UsersPermissionsRegisterInput = { + email: Scalars["String"]["input"]; + password: Scalars["String"]["input"]; + username: Scalars["String"]["input"]; +}; + +export type UsersPermissionsRole = { + __typename?: "UsersPermissionsRole"; + createdAt?: Maybe; + description?: Maybe; + name: Scalars["String"]["output"]; + permissions?: Maybe; + type?: Maybe; + updatedAt?: Maybe; + users?: Maybe; +}; + +export type UsersPermissionsRolePermissionsArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UsersPermissionsRoleUsersArgs = { + filters?: InputMaybe; + pagination?: InputMaybe; + sort?: InputMaybe>>; +}; + +export type UsersPermissionsRoleEntity = { + __typename?: "UsersPermissionsRoleEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type UsersPermissionsRoleEntityResponse = { + __typename?: "UsersPermissionsRoleEntityResponse"; + data?: Maybe; +}; + +export type UsersPermissionsRoleEntityResponseCollection = { + __typename?: "UsersPermissionsRoleEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type UsersPermissionsRoleFiltersInput = { + and?: InputMaybe>>; + createdAt?: InputMaybe; + description?: InputMaybe; + id?: InputMaybe; + name?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + permissions?: InputMaybe; + type?: InputMaybe; + updatedAt?: InputMaybe; + users?: InputMaybe; +}; + +export type UsersPermissionsRoleInput = { + description?: InputMaybe; + name?: InputMaybe; + permissions?: InputMaybe>>; + type?: InputMaybe; + users?: InputMaybe>>; +}; + +export type UsersPermissionsUpdateRolePayload = { + __typename?: "UsersPermissionsUpdateRolePayload"; + ok: Scalars["Boolean"]["output"]; +}; + +export type UsersPermissionsUser = { + __typename?: "UsersPermissionsUser"; + blocked?: Maybe; + confirmed?: Maybe; + createdAt?: Maybe; + email: Scalars["String"]["output"]; + provider?: Maybe; + role?: Maybe; + updatedAt?: Maybe; + username: Scalars["String"]["output"]; +}; + +export type UsersPermissionsUserEntity = { + __typename?: "UsersPermissionsUserEntity"; + attributes?: Maybe; + id?: Maybe; +}; + +export type UsersPermissionsUserEntityResponse = { + __typename?: "UsersPermissionsUserEntityResponse"; + data?: Maybe; +}; + +export type UsersPermissionsUserEntityResponseCollection = { + __typename?: "UsersPermissionsUserEntityResponseCollection"; + data: Array; + meta: ResponseCollectionMeta; +}; + +export type UsersPermissionsUserFiltersInput = { + and?: InputMaybe>>; + blocked?: InputMaybe; + confirmationToken?: InputMaybe; + confirmed?: InputMaybe; + createdAt?: InputMaybe; + email?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; + password?: InputMaybe; + provider?: InputMaybe; + resetPasswordToken?: InputMaybe; + role?: InputMaybe; + updatedAt?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserInput = { + blocked?: InputMaybe; + confirmationToken?: InputMaybe; + confirmed?: InputMaybe; + email?: InputMaybe; + password?: InputMaybe; + provider?: InputMaybe; + resetPasswordToken?: InputMaybe; + role?: InputMaybe; + username?: InputMaybe; +}; + +export type UsersPermissionsUserRelationResponseCollection = { + __typename?: "UsersPermissionsUserRelationResponseCollection"; + data: Array; +}; + +export type ArticleWithSlugQueryVariables = Exact<{ + articlesFilters?: InputMaybe; +}>; + +export type ArticleWithSlugQuery = { + __typename?: "Query"; + articles?: { + __typename?: "ArticleEntityResponseCollection"; + data: Array<{ + __typename?: "ArticleEntity"; + id?: string | null; + attributes?: { + __typename?: "Article"; + body: any; + datePublished: any; + previewTitle: string; + author?: { + __typename?: "AuthorEntityResponse"; + data?: { + __typename?: "AuthorEntity"; + attributes?: { + __typename?: "Author"; + name: string; + avatar?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + coverImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; +}; + +export type ProjectsQueryVariables = Exact<{ + projectFilters?: InputMaybe; +}>; + +export type ProjectsQuery = { + __typename?: "Query"; + projects?: { + __typename?: "ProjectEntityResponseCollection"; + data: Array<{ + __typename?: "ProjectEntity"; + attributes?: { + __typename?: "Project"; + title: string; + content?: any | null; + slug: string; + satellites?: { + __typename?: "SatelliteRelationResponseCollection"; + data: Array<{ + __typename?: "SatelliteEntity"; + id?: string | null; + attributes?: { + __typename?: "Satellite"; + name: string; + slug: string; + satelliteImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + id?: string | null; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; +}; + +export type Get_ProjectsQueryVariables = Exact<{ [key: string]: never }>; + +export type Get_ProjectsQuery = { + __typename?: "Query"; + projects?: { + __typename?: "ProjectEntityResponseCollection"; + data: Array<{ + __typename?: "ProjectEntity"; + id?: string | null; + attributes?: { + __typename?: "Project"; + title: string; + content?: any | null; + slug: string; + satellites?: { + __typename?: "SatelliteRelationResponseCollection"; + data: Array<{ + __typename?: "SatelliteEntity"; + attributes?: { + __typename?: "Satellite"; + catalogNumberNORAD?: string | null; + } | null; + }>; + } | null; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; +}; + +export type Get_SatellitesQueryVariables = Exact<{ [key: string]: never }>; + +export type Get_SatellitesQuery = { + __typename?: "Query"; + satellites?: { + __typename?: "SatelliteEntityResponseCollection"; + data: Array<{ + __typename?: "SatelliteEntity"; + id?: string | null; + attributes?: { + __typename?: "Satellite"; + catalogNumberNORAD?: string | null; + name: string; + missionStatus?: string | null; + slug: string; + massKg?: number | null; + satelliteImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; +}; + +export type QueryQueryVariables = Exact<{ + publicationState?: InputMaybe; +}>; + +export type QueryQuery = { + __typename?: "Query"; + hero?: { + __typename?: "HeroEntityResponse"; + data?: { + __typename?: "HeroEntity"; + attributes?: { + __typename?: "Hero"; + title?: string | null; + text?: string | null; + image: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + }; + } | null; + } | null; + } | null; +}; + +export type Get_ArticlesQueryVariables = Exact<{ + pagination?: InputMaybe; + filters?: InputMaybe; +}>; + +export type Get_ArticlesQuery = { + __typename?: "Query"; + articles?: { + __typename?: "ArticleEntityResponseCollection"; + data: Array<{ + __typename?: "ArticleEntity"; + id?: string | null; + attributes?: { + __typename?: "Article"; + previewTitle: string; + datePublished: any; + body: any; + createdAt?: any | null; + publishedAt?: any | null; + slug: string; + Tag?: Enum_Article_Tag | null; + author?: { + __typename?: "AuthorEntityResponse"; + data?: { + __typename?: "AuthorEntity"; + attributes?: { + __typename?: "Author"; + name: string; + avatar?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + coverImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + meta: { + __typename?: "ResponseCollectionMeta"; + pagination: { __typename?: "Pagination"; total: number }; + }; + } | null; +}; + +export type FeaturedImageQueryVariables = Exact<{ [key: string]: never }>; + +export type FeaturedImageQuery = { + __typename?: "Query"; + featuredImage?: { + __typename?: "FeaturedImageEntityResponse"; + data?: { + __typename?: "FeaturedImageEntity"; + attributes?: { + __typename?: "FeaturedImage"; + createdAt?: any | null; + updatedAt?: any | null; + publishedAt?: any | null; + featuredImage: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + }; + satellite?: { + __typename?: "SatelliteEntityResponse"; + data?: { + __typename?: "SatelliteEntity"; + attributes?: { + __typename?: "Satellite"; + catalogNumberNORAD?: string | null; + name: string; + slug: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; +}; + +export type HomeFeaturedProjectsQueryVariables = Exact<{ + [key: string]: never; +}>; + +export type HomeFeaturedProjectsQuery = { + __typename?: "Query"; + homeFeaturedProjects?: { + __typename?: "HomeFeaturedProjectsEntityResponse"; + data?: { + __typename?: "HomeFeaturedProjectsEntity"; + attributes?: { + __typename?: "HomeFeaturedProjects"; + title?: string | null; + textContent?: string | null; + featuredProject1?: { + __typename?: "ProjectEntityResponse"; + data?: { + __typename?: "ProjectEntity"; + attributes?: { + __typename?: "Project"; + title: string; + slug: string; + content?: any | null; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + featuredProject2?: { + __typename?: "ProjectEntityResponse"; + data?: { + __typename?: "ProjectEntity"; + attributes?: { + __typename?: "Project"; + title: string; + slug: string; + content?: any | null; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + featuredProject3?: { + __typename?: "ProjectEntityResponse"; + data?: { + __typename?: "ProjectEntity"; + attributes?: { + __typename?: "Project"; + title: string; + slug: string; + content?: any | null; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; + } | null; +}; + +export type HomeMissionStatementQueryVariables = Exact<{ + [key: string]: never; +}>; + +export type HomeMissionStatementQuery = { + __typename?: "Query"; + homeMissionStatement?: { + __typename?: "HomeMissionStatementEntityResponse"; + data?: { + __typename?: "HomeMissionStatementEntity"; + attributes?: { + __typename?: "HomeMissionStatement"; + title?: string | null; + textContent?: string | null; + } | null; + } | null; + } | null; +}; + +export type Get_Satellite_InfoQueryVariables = Exact<{ + filters?: InputMaybe; +}>; + +export type Get_Satellite_InfoQuery = { + __typename?: "Query"; + satellites?: { + __typename?: "SatelliteEntityResponseCollection"; + data: Array<{ + __typename?: "SatelliteEntity"; + id?: string | null; + attributes?: { + __typename?: "Satellite"; + catalogNumberNORAD?: string | null; + content?: any | null; + name: string; + massKg?: number | null; + missionStatus?: string | null; + launchDate?: any | null; + satelliteImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + projects?: { + __typename?: "ProjectRelationResponseCollection"; + data: Array<{ + __typename?: "ProjectEntity"; + id?: string | null; + attributes?: { + __typename?: "Project"; + title: string; + slug: string; + previewImage?: { + __typename?: "UploadFileEntityResponse"; + data?: { + __typename?: "UploadFileEntity"; + attributes?: { + __typename?: "UploadFile"; + url: string; + } | null; + } | null; + } | null; + } | null; + }>; + } | null; + } | null; + }>; + } | null; +}; + +export type Get_Satellite_Names_And_IdQueryVariables = Exact<{ + [key: string]: never; +}>; + +export type Get_Satellite_Names_And_IdQuery = { + __typename?: "Query"; + satellites?: { + __typename?: "SatelliteEntityResponseCollection"; + data: Array<{ + __typename?: "SatelliteEntity"; + id?: string | null; + attributes?: { + __typename?: "Satellite"; + catalogNumberNORAD?: string | null; + name: string; + } | null; + }>; + } | null; +}; + +export const ArticleWithSlugDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "ArticleWithSlug" }, + variableDefinitions: [ + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "articlesFilters" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "ArticleFiltersInput" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "articles" }, + arguments: [ + { + kind: "Argument", + name: { kind: "Name", value: "filters" }, + value: { + kind: "Variable", + name: { + kind: "Name", + value: "articlesFilters", + }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "author", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "avatar", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "body", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "coverImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "datePublished", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewTitle", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + ArticleWithSlugQuery, + ArticleWithSlugQueryVariables +>; +export const ProjectsDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "Projects" }, + variableDefinitions: [ + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "projectFilters" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "ProjectFiltersInput" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "projects" }, + arguments: [ + { + kind: "Argument", + name: { kind: "Name", value: "filters" }, + value: { + kind: "Variable", + name: { + kind: "Name", + value: "projectFilters", + }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satellites", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satelliteImage", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const Get_ProjectsDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "GET_PROJECTS" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "projects" }, + arguments: [ + { + kind: "Argument", + name: { kind: "Name", value: "sort" }, + value: { + kind: "ListValue", + values: [ + { + kind: "StringValue", + value: "publishedAt:desc", + block: false, + }, + ], + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satellites", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "catalogNumberNORAD", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const Get_SatellitesDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "GET_SATELLITES" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "satellites" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "catalogNumberNORAD", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satelliteImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "missionStatus", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "massKg", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const QueryDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "Query" }, + variableDefinitions: [ + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "publicationState" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "PublicationState" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "hero" }, + arguments: [ + { + kind: "Argument", + name: { + kind: "Name", + value: "publicationState", + }, + value: { + kind: "Variable", + name: { + kind: "Name", + value: "publicationState", + }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "text", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "image", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const Get_ArticlesDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "GET_ARTICLES" }, + variableDefinitions: [ + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "pagination" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "PaginationArg" }, + }, + }, + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "filters" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "ArticleFiltersInput" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "articles" }, + arguments: [ + { + kind: "Argument", + name: { kind: "Name", value: "sort" }, + value: { + kind: "ListValue", + values: [ + { + kind: "StringValue", + value: "datePublished:desc", + block: false, + }, + ], + }, + }, + { + kind: "Argument", + name: { kind: "Name", value: "pagination" }, + value: { + kind: "Variable", + name: { kind: "Name", value: "pagination" }, + }, + }, + { + kind: "Argument", + name: { kind: "Name", value: "filters" }, + value: { + kind: "Variable", + name: { kind: "Name", value: "filters" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "author", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "avatar", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewTitle", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "datePublished", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "body", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "coverImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "createdAt", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "publishedAt", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "Tag", + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { kind: "Name", value: "meta" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "pagination", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "total", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const FeaturedImageDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "FeaturedImage" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "featuredImage" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "featuredImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satellite", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "catalogNumberNORAD", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "createdAt", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "updatedAt", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "publishedAt", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode; +export const HomeFeaturedProjectsDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "HomeFeaturedProjects" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "homeFeaturedProjects" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "textContent", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "featuredProject1", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "featuredProject2", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "featuredProject3", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + HomeFeaturedProjectsQuery, + HomeFeaturedProjectsQueryVariables +>; +export const HomeMissionStatementDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "HomeMissionStatement" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "homeMissionStatement" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "textContent", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + HomeMissionStatementQuery, + HomeMissionStatementQueryVariables +>; +export const Get_Satellite_InfoDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "GET_SATELLITE_INFO" }, + variableDefinitions: [ + { + kind: "VariableDefinition", + variable: { + kind: "Variable", + name: { kind: "Name", value: "filters" }, + }, + type: { + kind: "NamedType", + name: { kind: "Name", value: "SatelliteFiltersInput" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "satellites" }, + arguments: [ + { + kind: "Argument", + name: { kind: "Name", value: "filters" }, + value: { + kind: "Variable", + name: { kind: "Name", value: "filters" }, + }, + }, + ], + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "catalogNumberNORAD", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "content", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "massKg", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "missionStatus", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "satelliteImage", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "projects", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "title", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "previewImage", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "data", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: + { + kind: "SelectionSet", + selections: + [ + { + kind: "Field", + name: { + kind: "Name", + value: "url", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "slug", + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + ], + }, + }, + ], + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "launchDate", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + Get_Satellite_InfoQuery, + Get_Satellite_InfoQueryVariables +>; +export const Get_Satellite_Names_And_IdDocument = { + kind: "Document", + definitions: [ + { + kind: "OperationDefinition", + operation: "query", + name: { kind: "Name", value: "GET_SATELLITE_NAMES_AND_ID" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "satellites" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { kind: "Name", value: "data" }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "id", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "attributes", + }, + selectionSet: { + kind: "SelectionSet", + selections: [ + { + kind: "Field", + name: { + kind: "Name", + value: "catalogNumberNORAD", + }, + }, + { + kind: "Field", + name: { + kind: "Name", + value: "name", + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], + }, + }, + ], +} as unknown as DocumentNode< + Get_Satellite_Names_And_IdQuery, + Get_Satellite_Names_And_IdQueryVariables +>; diff --git a/frontend/src/app/_homeComponents/FeaturedImage.tsx b/frontend/src/app/_homeComponents/FeaturedImage.tsx new file mode 100644 index 0000000..6d4b838 --- /dev/null +++ b/frontend/src/app/_homeComponents/FeaturedImage.tsx @@ -0,0 +1,87 @@ +import Link from "next/link"; +import Image from "next/image"; +import { graphql } from "@/lib/tada/graphql"; +import { getClient } from "@/lib/ApolloClient"; + +const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; + +const GET_FEATURED_IMAGE = graphql(` + query FeaturedImage { + featuredImage { + data { + attributes { + description + featuredImage { + data { + attributes { + url + } + } + } + satellite { + data { + attributes { + name + slug + } + } + } + title + } + } + } + } +`); + +export default async function featuredImage() { + const graphqlData = await getClient().query({ + query: GET_FEATURED_IMAGE, + }); + + const queryAttributes = graphqlData.data.featuredImage?.data?.attributes; + const title = queryAttributes?.title; + const description = queryAttributes?.description; + const featuredImageURL = + queryAttributes?.featuredImage.data?.attributes?.url; + const satellite = queryAttributes?.satellite?.data?.attributes; + const satelliteName = satellite?.name; + const satelliteSlug = satellite?.slug; + + if (!STRAPI_URL || !featuredImageURL) { + return null; + } + + return ( +
+
+
+

{title}

+

{description}

+
+
+
+ Featured Satellite Image + + {satelliteName && satelliteSlug ? ( +
+

+ Image Taken by{" "} + + {satelliteName} + +

+
+ ) : null} +
+
+ ); +} diff --git a/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx b/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx new file mode 100644 index 0000000..afea07a --- /dev/null +++ b/frontend/src/app/_homeComponents/FeaturedProjectCard.tsx @@ -0,0 +1,39 @@ +import Link from "next/link"; +import Image from "next/image"; +import { PlaceholderImage } from "@/components/shared/CardWithContent"; + +const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; + +export default function FeaturedProjectCard({ + title, + imageURL, + projectSlug, +}: { + title: string; + imageURL?: string; + projectSlug?: string; + key: string; +}) { + return ( + +
+
+ {imageURL ? ( + Project Image + ) : ( +
+ +
+ )} +
+
+

{title}

+
+
+ + ); +} diff --git a/frontend/src/app/_homeComponents/FeaturedProjects.tsx b/frontend/src/app/_homeComponents/FeaturedProjects.tsx new file mode 100644 index 0000000..e7966b6 --- /dev/null +++ b/frontend/src/app/_homeComponents/FeaturedProjects.tsx @@ -0,0 +1,71 @@ +import fetchFeaturedProjects from "@/lib/data/fetchFeaturedProjects"; +import Link from "next/link"; +import { Button } from "@components/shadcn/button"; +import CardWithContent from "@components/shared/CardWithContent"; +import { PagePaddingOnlyHorizontal } from "@/components/layout/PageLayout"; + +const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; + +export default async function FeaturedProjects() { + const featuredProjects = await fetchFeaturedProjects(); + + const threeProjects = [ + featuredProjects?.featuredProject1, + featuredProjects?.featuredProject2, + featuredProjects?.featuredProject3, + ]; + + let image_url = undefined; + if (STRAPI_URL) { + image_url = + STRAPI_URL + + featuredProjects?.featuredProject1?.data?.attributes?.previewImage + ?.data?.attributes?.url; + } + + return ( + +
+
+
+

+ {featuredProjects?.title + ? featuredProjects.title + : "Projects"} +

+

+ {featuredProjects?.textContent + ? featuredProjects.textContent + : "Here are some of our projects"} +

+
+
+
+
+ {threeProjects.map((project, index) => { + if (!project?.data?.attributes?.title) { + return null; + } + return ( + + ); + })} +
+
+
+ + + +
+
+
+ ); +} diff --git a/frontend/src/app/_homeComponents/GlobeWithStats.tsx b/frontend/src/app/_homeComponents/GlobeWithStats.tsx new file mode 100644 index 0000000..d60cdf0 --- /dev/null +++ b/frontend/src/app/_homeComponents/GlobeWithStats.tsx @@ -0,0 +1,27 @@ +"use client"; +import SatelliteSelector from "./SatelliteSelector"; +import SatelliteDataHome from "@/components/satelliteData/SatelliteDataHome"; +import dynamic from "next/dynamic"; + +const SatelliteGlobeNoSSR = dynamic(() => import("./SatelliteGlobe"), { + ssr: false, +}); + +export default function GlobeWithStats() { + return ( + <> +
+
+ + +
+ +
+
+ +
+
+
+ + ); +} diff --git a/frontend/src/app/_homeComponents/MissionStatement.tsx b/frontend/src/app/_homeComponents/MissionStatement.tsx new file mode 100644 index 0000000..9f10c6d --- /dev/null +++ b/frontend/src/app/_homeComponents/MissionStatement.tsx @@ -0,0 +1,25 @@ +import fetchMissionStatement from "@/lib/data/fetchMissionStatement"; + +import Hero from "@/components/ui/hero"; +import { PagePaddingOnlyHorizontal } from "@/components/layout/PageLayout"; + +export default async function MissionStatement() { + const missionStatement = await fetchMissionStatement(); + + if ( + !missionStatement || + !missionStatement.title || + !missionStatement.textContent + ) { + return null; + } + + return ( + + + + ); +} diff --git a/frontend/src/components/homeComponents/SatDropdown.tsx b/frontend/src/app/_homeComponents/SatDropdown.tsx similarity index 77% rename from frontend/src/components/homeComponents/SatDropdown.tsx rename to frontend/src/app/_homeComponents/SatDropdown.tsx index 950b2b1..2321cdf 100644 --- a/frontend/src/components/homeComponents/SatDropdown.tsx +++ b/frontend/src/app/_homeComponents/SatDropdown.tsx @@ -1,31 +1,35 @@ "use client"; -import React, { useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import { motion } from "framer-motion"; import { cn } from "@/lib/utils"; import { satLoaderById } from "@/lib/getSatelliteData"; -import { - SatelliteActions, - SatelliteName, - SatelliteNumber, - SatelliteState, -} from "@/lib/store"; +import { SatelliteNumber } from "@/lib/store"; +import { useSatelliteStore } from "@/lib/store"; +export default function SatDropdown() { + const selectedSatellite = useSatelliteStore( + (state) => state.selectedSatellite, + ); + const setSelectedSatellite = useSatelliteStore( + (state) => state.setSelectedSatellite, + ); + const setSatellites = useSatelliteStore((state) => state.setSatellites); + const satNumToEntry = useSatelliteStore((state) => state.satNumToEntry); + let selectedSatelliteName = undefined; + if (selectedSatellite) { + selectedSatelliteName = satNumToEntry[selectedSatellite]?.name; + } -type DropdownProps = { - selectedSatellite: SatelliteState["selectedSatellite"]; - setSelectedSatellite: SatelliteActions["setSelectedSatellite"]; - setSatellites: SatelliteActions["setSatellites"]; - selectedSatelliteName?: SatelliteName; - satNumToEntry: SatelliteState["satNumToEntry"]; -}; + let isLargeScreen = useRef(false); + + // Useeffect to check window type + useEffect(() => { + if (typeof window !== "undefined") { + isLargeScreen.current = + window.matchMedia("(min-width: 768px)").matches; + } + }, []); -export default function SatDropdown({ - selectedSatellite, - setSelectedSatellite, - setSatellites, - selectedSatelliteName, - satNumToEntry, -}: DropdownProps) { - const [isOpen, setIsOpen] = useState(false); + const [isOpen, setIsOpen] = useState(isLargeScreen.current); const [noradID, setNoradID] = useState(); const [error, setError] = useState(""); @@ -36,7 +40,6 @@ export default function SatDropdown({ const handleSelect = (satellite: SatelliteNumber) => { setSelectedSatellite(satellite); - setIsOpen(false); }; const handleAddSatellite = async (noradID: SatelliteNumber) => { @@ -110,7 +113,9 @@ export default function SatDropdown({ >
{selectedSatelliteName || "Select a Satellite"}
-

Selected Satellite

+

+ {selectedSatelliteName ? "Selected Satellite" : null} +

handleSelect(Number(num) as SatelliteNumber) } > - {satNum !== selectedSatellite - ? satNumToEntry[satNum].name - : `${satNumToEntry[satNum].name} (Selected)`} + {satNumToEntry[satNum].name} ); })} @@ -177,7 +183,7 @@ export default function SatDropdown({ handleAddSatellite(noradID); } }} - className=" mr-2 whitespace-nowrap rounded border bg-white p-1 text-black transition duration-150 ease-in-out hover:bg-gray-300" + className="mr-2 whitespace-nowrap rounded-md border bg-primary p-1 text-white duration-200 ease-in-out hover:opacity-80" > Add Satellite diff --git a/frontend/src/components/homeComponents/homeGlobe.tsx b/frontend/src/app/_homeComponents/SatelliteGlobe.tsx similarity index 92% rename from frontend/src/components/homeComponents/homeGlobe.tsx rename to frontend/src/app/_homeComponents/SatelliteGlobe.tsx index 8610fb2..bcf48c3 100644 --- a/frontend/src/components/homeComponents/homeGlobe.tsx +++ b/frontend/src/app/_homeComponents/SatelliteGlobe.tsx @@ -73,28 +73,14 @@ export default function SatelliteGlobe() { chart.current.getBoundingClientRect(); globeRef.current.width(width); globeRef.current.height(height - 76); + + console.log(width, height); } }; // Initially set the globe size to match the container setInitialGlobeSize(); - // set globesize on screen resize - const setGlobeSize = () => { - if (globeRef.current && chart.current) { - const { width } = chart.current.getBoundingClientRect(); - globeRef.current.width(width); - } - }; - - // Resize listener to update the globe size - if (typeof window !== "undefined") { - window.addEventListener("resize", setGlobeSize); - return () => { - window.removeEventListener("resize", setGlobeSize); - }; - } - // Set initial positions of satellites let initialPositions: initpostype[] = Object.entries(satNumToEntry) .map(([satName, sat]) => { @@ -123,6 +109,22 @@ export default function SatelliteGlobe() { globeRef.current.objectsData(initialPositions); } + // Function to update the globe size based on the current size of the chart + const setGlobeSize = () => { + if (globeRef.current && chart.current) { + const { width, height } = + chart.current.getBoundingClientRect(); + globeRef.current.width(width); + globeRef.current.height(width <= 640 ? width : height - 76); + } + }; + + // Add resize event listener if the window is defined (i.e., in client-side environment) + if (typeof window !== "undefined") { + window.addEventListener("resize", setGlobeSize); + } + + // Cleanup function to remove the resize event listener return () => { if (typeof window !== "undefined") { window.removeEventListener("resize", setGlobeSize); @@ -157,8 +159,8 @@ export default function SatelliteGlobe() { color: selectedSatellite === Number(sat.satrec.satnum) - ? "red" - : "palegreen", + ? "#2860f1" + : "#56876d", }; } }) diff --git a/frontend/src/app/_homeComponents/SatelliteSelector.tsx b/frontend/src/app/_homeComponents/SatelliteSelector.tsx new file mode 100644 index 0000000..fa8c905 --- /dev/null +++ b/frontend/src/app/_homeComponents/SatelliteSelector.tsx @@ -0,0 +1,11 @@ +"use client"; +import React from "react"; +import SatDropdown from "./SatDropdown"; + +export default function SatelliteSelector() { + return ( +
+ +
+ ); +} diff --git a/frontend/src/app/_homeComponents/ScrollIndicator.tsx b/frontend/src/app/_homeComponents/ScrollIndicator.tsx new file mode 100644 index 0000000..438580e --- /dev/null +++ b/frontend/src/app/_homeComponents/ScrollIndicator.tsx @@ -0,0 +1,44 @@ +"use client"; +import { motion, useScroll } from "framer-motion"; +import React, { useRef } from "react"; +import type { SVGProps } from "react"; + +export function UiwDown(props: SVGProps) { + return ( + + + + ); +} + +export default function ScrollIndicator() { + const ref = useRef(null); + const { scrollYProgress } = useScroll({ + target: ref, + offset: ["start start", "end end"], + }); + + return ( + + + + ); +} diff --git a/frontend/src/app/_homeComponents/TeamSection.tsx b/frontend/src/app/_homeComponents/TeamSection.tsx new file mode 100644 index 0000000..f44962f --- /dev/null +++ b/frontend/src/app/_homeComponents/TeamSection.tsx @@ -0,0 +1,77 @@ +import { getClient } from "@/lib/ApolloClient"; +import { graphql } from "@/lib/tada/graphql"; +import Image from "next/image"; + +const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; + +const GET_TEAM_DATA = graphql(` + query Query($publicationState: PublicationState) { + hero(publicationState: $publicationState) { + data { + attributes { + title + text + image { + data { + attributes { + url + } + } + } + } + } + } + } +`); + +export default async function TeamSection() { + const graphqlData = await getClient().query({ + query: GET_TEAM_DATA, + }); + + // Check if data is available + if ( + !graphqlData.data || + !graphqlData.data.hero || + !graphqlData.data.hero.data + ) { + return <>; + } + + const teamData = graphqlData.data.hero.data; + const teamAttributes = teamData.attributes; + + if (!teamAttributes || !teamAttributes.image?.data) { + return <>; + } + + const imageUrl = STRAPI_URL! + teamAttributes.image?.data?.attributes?.url; + + return ( +
+
+
+ {teamAttributes.title +
+
+

{teamAttributes.title}

+ {teamAttributes.text && + teamAttributes.text + .split("\n") + .map((paragraph, index) => ( +

+ {paragraph} +

+ ))} +
+
+
+ ); +} diff --git a/frontend/src/components/homeComponents/files/earth-dark.jpg b/frontend/src/app/_homeComponents/files/earth-dark.jpg similarity index 100% rename from frontend/src/components/homeComponents/files/earth-dark.jpg rename to frontend/src/app/_homeComponents/files/earth-dark.jpg diff --git a/frontend/src/components/homeComponents/files/globe-cables-data.json b/frontend/src/app/_homeComponents/files/globe-cables-data.json similarity index 100% rename from frontend/src/components/homeComponents/files/globe-cables-data.json rename to frontend/src/app/_homeComponents/files/globe-cables-data.json diff --git a/frontend/src/components/homeComponents/files/globe-data-min.json b/frontend/src/app/_homeComponents/files/globe-data-min.json similarity index 100% rename from frontend/src/components/homeComponents/files/globe-data-min.json rename to frontend/src/app/_homeComponents/files/globe-data-min.json diff --git a/frontend/src/components/homeComponents/files/globe-data.json b/frontend/src/app/_homeComponents/files/globe-data.json similarity index 100% rename from frontend/src/components/homeComponents/files/globe-data.json rename to frontend/src/app/_homeComponents/files/globe-data.json diff --git a/frontend/src/components/BlogPaginator.tsx b/frontend/src/app/blog/BlogPaginator.tsx similarity index 98% rename from frontend/src/components/BlogPaginator.tsx rename to frontend/src/app/blog/BlogPaginator.tsx index 7984d9b..388eb67 100644 --- a/frontend/src/components/BlogPaginator.tsx +++ b/frontend/src/app/blog/BlogPaginator.tsx @@ -7,7 +7,7 @@ import { PaginationLink, PaginationNext, PaginationPrevious, -} from "./shadcn/pagination"; +} from "../../components/shadcn/pagination"; import { useRouter, useSearchParams } from "next/navigation"; export default function BlogPaginator({ diff --git a/frontend/src/components/BlogpageButtons.tsx b/frontend/src/app/blog/BlogpageButtons.tsx similarity index 96% rename from frontend/src/components/BlogpageButtons.tsx rename to frontend/src/app/blog/BlogpageButtons.tsx index 1f67cbd..9dbc62a 100644 --- a/frontend/src/components/BlogpageButtons.tsx +++ b/frontend/src/app/blog/BlogpageButtons.tsx @@ -1,6 +1,6 @@ "use client"; import { useState } from "react"; -import { Button } from "./shadcn/button"; +import { Button } from "../../components/shadcn/button"; import { useRouter, useSearchParams } from "next/navigation"; import { cn } from "@/lib/utils"; diff --git a/frontend/src/components/ShareButtons.tsx b/frontend/src/app/blog/[articleSlug]/ShareButtons.tsx similarity index 100% rename from frontend/src/components/ShareButtons.tsx rename to frontend/src/app/blog/[articleSlug]/ShareButtons.tsx diff --git a/frontend/src/app/blog/[articleSlug]/layout.tsx b/frontend/src/app/blog/[articleSlug]/layout.tsx index de2f2b5..9dc0a6c 100644 --- a/frontend/src/app/blog/[articleSlug]/layout.tsx +++ b/frontend/src/app/blog/[articleSlug]/layout.tsx @@ -1,4 +1,4 @@ -import { PageColoredBackground } from "@/components/PageLayout"; +import { PageColoredBackground } from "@/components/layout/PageLayout"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { return {children}; diff --git a/frontend/src/app/blog/[articleSlug]/page.tsx b/frontend/src/app/blog/[articleSlug]/page.tsx index 91eef1b..010da7e 100644 --- a/frontend/src/app/blog/[articleSlug]/page.tsx +++ b/frontend/src/app/blog/[articleSlug]/page.tsx @@ -1,12 +1,12 @@ import { Avatar, AvatarFallback } from "@shadcn/avatar"; import { BlocksContent } from "@strapi/blocks-react-renderer"; -import BlockRendererClient from "@/components/BlockRendererClient"; +import BlockRendererClient from "@/components/shared/BlockRendererClient"; import { getClient } from "@/lib/ApolloClient"; -import ShareButtons from "@/components/ShareButtons"; +import ShareButtons from "./ShareButtons"; import NextImage from "next/image"; import fullNameToInitials from "@/lib/helpers"; -import { graphql } from "@/tada/graphql"; +import { graphql } from "@/lib/tada/graphql"; const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; @@ -64,9 +64,10 @@ export default async function Page({ graphqlData.data === null || graphqlData.data === undefined || graphqlData.data.articles === undefined || - graphqlData.data.articles === null + graphqlData.data.articles === null || + graphqlData.data.articles.data.length === 0 ) { - return
Article not found
; + return
Article not found
; } let avatarURL = graphqlData.data.articles?.data[0]?.attributes?.author?.data?.attributes diff --git a/frontend/src/app/blog/blogDataCards.tsx b/frontend/src/app/blog/blogDataCards.tsx index 9bcc0ce..3c4f843 100644 --- a/frontend/src/app/blog/blogDataCards.tsx +++ b/frontend/src/app/blog/blogDataCards.tsx @@ -1,12 +1,16 @@ -import FullBlogCard from "@/components/fullBlogCard"; -import BlogpageButtons from "@/components/BlogpageButtons"; -import { BlogPost } from "./page"; +import BlogpageButtons from "./BlogpageButtons"; import React from "react"; +import CardWithContent from "@/components/shared/CardWithContent"; +import type { ArticlesDataType } from "@/app/blog/page"; +import { slicePreviewText } from "@lib/SlicePreviewText"; +import CardGrid from "@/components/shared/CardGrid"; + +const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; export default async function BlogDataCards({ articles, }: { - articles: BlogPost[] | null; + articles: ArticlesDataType; }) { if (articles === null || articles === undefined) { return ( @@ -18,16 +22,35 @@ export default async function BlogDataCards({ return ( <> -
+ - {articles.map((article: BlogPost) => { + {articles.map((article) => { + let imgurl = undefined; + if ( + STRAPI_URL && + article.attributes?.coverImage?.data?.attributes?.url + ) { + imgurl = + STRAPI_URL + + article.attributes?.coverImage?.data?.attributes + ?.url; + } + return ( - - - + ); })} -
+ ); } diff --git a/frontend/src/app/blog/page.tsx b/frontend/src/app/blog/page.tsx index 40d1bdb..b0a9a11 100644 --- a/frontend/src/app/blog/page.tsx +++ b/frontend/src/app/blog/page.tsx @@ -1,29 +1,72 @@ -import BlogPaginator from "@/components/BlogPaginator"; +import BlogPaginator from "./BlogPaginator"; import BlogDataCards from "./blogDataCards"; -import { BlocksContent } from "@strapi/blocks-react-renderer"; -import fetchArticlePages from "@/lib/data/fetchArticleInfo"; import { PageHeaderAndSubtitle, PageSubtitle, PageHeader, -} from "@/components/PageHeader"; +} from "@/components/layout/PageHeader"; -import { PagePadding } from "@/components/PageLayout"; +import { PagePadding } from "@/components/layout/PageLayout"; import React from "react"; +import { getClient } from "@/lib/ApolloClient"; +import { ResultOf, graphql } from "@/lib/tada/graphql"; -export interface BlogPost { - key: string | null | undefined; - firstArticle?: boolean | null | undefined; - title: string | undefined; - content: BlocksContent; - coverImage?: string; - datePublished: any; - tag?: string | null | undefined; - HOST_URL?: string; - authorName?: string; - avatarURL?: string; - slug: string | undefined; -} +type articlesFetchType = ResultOf; +export type ArticlesDataType = NonNullable< + articlesFetchType["articles"] +>["data"]; + +const GET_ARTICLES = graphql(` + query GET_ARTICLES( + $pagination: PaginationArg + $filters: ArticleFiltersInput + ) { + articles( + sort: ["datePublished:desc"] + pagination: $pagination + filters: $filters + ) { + data { + id + attributes { + author { + data { + attributes { + name + avatar { + data { + attributes { + url + } + } + } + } + } + } + previewTitle + datePublished + body + coverImage { + data { + attributes { + url + } + } + } + createdAt + publishedAt + slug + Tag + } + } + meta { + pagination { + total + } + } + } + } +`); export default async function BlogPage({ searchParams, @@ -32,20 +75,36 @@ export default async function BlogPage({ }) { const page = searchParams?.page; const currentPage = parseInt(page ?? "1", 10); - const tag = searchParams?.tag ?? null; + const tag = searchParams?.tag ?? undefined; - const result = await fetchArticlePages({ - currentPage: currentPage, - pageSize: 9, - tag: tag, + const pageSize = 9; + + let { data, error } = await getClient().query({ + query: GET_ARTICLES, + variables: { + pagination: { + pageSize: pageSize, + page: currentPage, + }, + filters: { + Tag: { + contains: tag, + }, + }, + }, }); - if (!result) { + if (error || !data) { // Handle the case where fetchArticlePages returns null return
Error fetching articles
; } - const { articleList, totalArticles } = result; + const result = data?.articles?.data; + const amount = data.articles?.meta.pagination.total ?? 0; + + if (!result) { + return
Error fetching articles
; + } return ( <> @@ -59,8 +118,8 @@ export default async function BlogPage({
{/* */} - - + +
diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index dbee394..0b73845 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -60,8 +60,9 @@ body { @apply bg-background text-foreground; - overflow-x: hidden; - /* Prevent horizontal scrolling */ - width: 100%; + } + + html { + @apply snap-y snap-proximity; } } diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 8f1a48f..0ef123a 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -2,11 +2,11 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import { cn } from "@/lib/utils"; import "./globals.css"; -import Navbar from "@/components/Navbar"; -import Footer from "@/components/Footer"; +import Navbar from "@/components/layout/Navbar"; +import Footer from "@/components/layout/Footer"; import React from "react"; import { ApolloWrapper } from "@/components/wrappers/ApolloWrapper"; -import SatelliteInitialClientFetch from "@/components/satelliteData/SatelliteInitialFetch"; +import InitializeZustandWithSatEntries from "@/components/satelliteData/SatelliteInitialFetch"; // imports to get satellites from strapi and fetch the data serverside import fetchSatelliteNamesAndId from "@/lib/data/fetchSatelliteNamesAndId"; @@ -16,11 +16,15 @@ const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { title: "Small Satellite Lab", - description: "NTNU Small Satellite Lab", + description: + "NTNU Organization with a focus in small satellite systems, hyperspectral cameras, AI for space, and advanced communications. Pushing the boundaries of space technology from our university lab.", + verification: { + google: "JTCGP84XF7D1ZdhzYT6JkJ1vYX7WZru_1Wsw7Ax13fU", + }, }; -import ErrorBoundaryNavigation from "@/components/ErrorBoundaryNavigation"; -import Starfield from "@/components/starBackground/Starfield"; +import ErrorBoundaryNavigation from "@/components/layout/ErrorBoundaryNavigation"; +import Starfield from "@/components/layout/Starfield"; import { SatelliteEntry } from "@/lib/store"; export default async function RootLayout({ @@ -40,9 +44,8 @@ export default async function RootLayout({ satData.push(entry); } catch (e) { console.error( - "Either CelesTrak has IP banned the server, or the satellite data is not available for the provided NORAD ID: " + - sat.num + - ", or CelesTrak is down.", + "Either CelesTrak has IP banned the server, or CelesTrak is down, or the satellite data is not available for the provided NORAD ID: " + + sat.num, ); } } @@ -53,7 +56,7 @@ export default async function RootLayout({ - +
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 12bdbe1..8805cfe 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -1,108 +1,31 @@ -import { Button } from "@shadcn/button"; -import ColoredSection from "@/components/ui/coloredSection"; - -import Image from "next/image"; -import Link from "next/link"; - -import fetchFeaturedImage from "@/lib/data/fetchFeaturedImage"; - -import SatelliteDataHome from "@/components/satelliteData/SatelliteDataHome"; -import SatelliteSelector from "@/components/homeComponents/SatelliteSelector"; -import dynamic from "next/dynamic"; -import HeroWrapper from "@/components/HeroWrapper"; - -const SatelliteGlobeNoSSR = dynamic( - () => import("@/components/homeComponents/homeGlobe"), - { - ssr: false, - }, -); +import TeamSection from "./_homeComponents/TeamSection"; +import FeaturedProjects from "./_homeComponents/FeaturedProjects"; +import MissionStatement from "./_homeComponents/MissionStatement"; +import FeaturedImage from "./_homeComponents/FeaturedImage"; +import GlobeWithStats from "./_homeComponents/GlobeWithStats"; +import ScrollIndicator from "./_homeComponents/ScrollIndicator"; export default async function Home() { - const featuredImageURL = await fetchFeaturedImage(); - return ( <> -
- {/* Stats Container */} -
- - -
- - {/* Globe Container */} -
-
- -
-
+ + {/* Globe */} +
+
- - -
-

- Empowering Space Exploration One Satellite at a Time -

- -
- Satellite in orbit -
-
-
-

- NTNU Small Satellite Lab is an initiative to - strenghten the small satellite and space related - activities at NTNU and make them more visible. - At the lab, we have a group consisting of about - ten PhD-students, two post.docs and many - bachelor- and master students every semester. - Physically, the lab consists of a concurrent - design work space as well as an well-equiped - ESD-safe area for development and testing of - electronic and mechanical parts for payloads and - platforms. -

-
-
-
-
-
-
-

Projects

-

- The SmallSat Lab team is part of a variety of projects, - a selection listed below. The main effort is on our two - satellites; HYPSO-1 (launched January 2022) and HYPSO-2 - (expected to launch June 2024) - which you can read more - about by visiting hypso.space. Activities and research - topics include spacecraft- and systems engineering in an - university setting, development of hyperspectral camera - systems, onboard processing including autonomy and AI, - communication infrastructure for small satellites and - other satellite autonomous sensor platforms. -

- - - -
+
+ {/* Mission Statement Section */} +
- -
-

Featured Satellite Image

- {featuredImageURL} -
-
+ {/* Projects Section */} + + + {/* Team Section */} + - + {/* Featured image */} + ); } diff --git a/frontend/src/app/projects/[projectSlug]/layout.tsx b/frontend/src/app/projects/[projectSlug]/layout.tsx index de2f2b5..9dc0a6c 100644 --- a/frontend/src/app/projects/[projectSlug]/layout.tsx +++ b/frontend/src/app/projects/[projectSlug]/layout.tsx @@ -1,4 +1,4 @@ -import { PageColoredBackground } from "@/components/PageLayout"; +import { PageColoredBackground } from "@/components/layout/PageLayout"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { return {children}; diff --git a/frontend/src/app/projects/[projectSlug]/page.tsx b/frontend/src/app/projects/[projectSlug]/page.tsx index 4111a96..95f6626 100644 --- a/frontend/src/app/projects/[projectSlug]/page.tsx +++ b/frontend/src/app/projects/[projectSlug]/page.tsx @@ -1,9 +1,9 @@ -import BlockRendererClient from "@/components/BlockRendererClient"; +import BlockRendererClient from "@/components/shared/BlockRendererClient"; import { getClient } from "@/lib/ApolloClient"; import { BlocksContent } from "@strapi/blocks-react-renderer"; -import RelatedProjectsAndSatellites from "@/components/RelatedProjectsAndSatellites"; +import RelatedProjectsAndSatellites from "@/components/shared/RelatedProjectsAndSatellites"; import { ProjectOrSatellite } from "@/app/satellites/[satelliteSlug]/page"; -import { graphql } from "@/tada/graphql"; +import { graphql } from "@/lib/tada/graphql"; const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; const GET_PROJECT_BY_SLUG = graphql(` @@ -57,13 +57,15 @@ export default async function Page({ }, }, }); + if ( graphqlData.data === null || graphqlData.data === undefined || graphqlData.data.projects === undefined || - graphqlData.data.projects === null + graphqlData.data.projects === null || + graphqlData.data.projects.data.length === 0 ) { - return
Project not found
; + return
Project not found
; } const projects = graphqlData.data.projects?.data[0]; @@ -78,14 +80,14 @@ export default async function Page({ return (
- {graphqlData.data.projects?.data[0].attributes?.satellites?.data + {graphqlData.data.projects?.data[0]?.attributes?.satellites?.data .length != 0 && ( <>

Related Satellites

- {graphqlData.data.projects?.data[0].attributes?.satellites?.data.map( + {graphqlData.data.projects?.data[0]?.attributes?.satellites?.data.map( (satellite: any) => { const satelliteImage = satellite?.attributes?.satelliteImage?.data diff --git a/frontend/src/app/projects/page.tsx b/frontend/src/app/projects/page.tsx index 3dd4879..5ae046c 100644 --- a/frontend/src/app/projects/page.tsx +++ b/frontend/src/app/projects/page.tsx @@ -1,20 +1,13 @@ -import { - Card, - CardContent, - CardHeader, - CardTitle, -} from "@/components/shadcn/card"; import { getClient } from "@/lib/ApolloClient"; -import Link from "next/link"; -import Image from "next/image"; -import { SlicePreviewText } from "@/components/SlicePreviewText"; +import { slicePreviewText } from "@lib/SlicePreviewText"; import { PageHeader, PageHeaderAndSubtitle, PageSubtitle, -} from "@/components/PageHeader"; -import { PlaceholderImage } from "@/components/fullBlogCard"; -import { graphql } from "@/tada/graphql"; +} from "@/components/layout/PageHeader"; +import CardWithContent from "@/components/shared/CardWithContent"; +import { graphql } from "@/lib/tada/graphql"; +import CardGrid from "@/components/shared/CardGrid"; const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; const GET_PROJECTS = graphql(` @@ -73,8 +66,8 @@ export default async function ProjectsPage() {
-
- {graphqlData.data.projects.data.map((project: any) => { + + {graphqlData.data.projects.data.map((project) => { let previewImage = project?.attributes?.previewImage?.data?.attributes ?.url; @@ -83,47 +76,19 @@ export default async function ProjectsPage() { previewImage = STRAPI_URL + previewImage; } return ( - - - - -
- {previewImage ? ( - {previewImage} - ) : ( -
- -
- )} -
-
- - {project?.attributes?.title} - -

- {SlicePreviewText( - project?.attributes?.content ?? - [], - )} -

-
-
-
- + title={project?.attributes?.title ?? ""} + link={"/projects/" + project?.attributes?.slug} + imageURL={previewImage} + description={slicePreviewText( + project?.attributes?.content ?? [], + )} + > ); })} -
+
); } diff --git a/frontend/src/components/SatelliteResponsiveTable.tsx b/frontend/src/app/satellites/SatelliteResponsiveTable.tsx similarity index 95% rename from frontend/src/components/SatelliteResponsiveTable.tsx rename to frontend/src/app/satellites/SatelliteResponsiveTable.tsx index cf674d7..ea8a6a5 100644 --- a/frontend/src/components/SatelliteResponsiveTable.tsx +++ b/frontend/src/app/satellites/SatelliteResponsiveTable.tsx @@ -3,7 +3,7 @@ import { PageHeaderAndSubtitle, PageHeader, PageSubtitle, -} from "@/components/PageHeader"; +} from "@/components/layout/PageHeader"; import SatelliteStatsTableRow from "@/components/satelliteData/SatelliteStatsTableRow"; import { Table, @@ -24,7 +24,7 @@ export default function SatelliteResponsiveTable({ }) { const router = useRouter(); const handleRowClick = (slug: string) => { - // This will update the URL without triggering a full page refresh + // This will update the URL without triggering a full page refresh, must be used because Link element does not work here. router.push(`/satellites/${slug}`, undefined); }; @@ -39,7 +39,7 @@ export default function SatelliteResponsiveTable({ {inOrbit ? "Here are some satellites we have worked on that are in orbit. Click on a satellite to view more information." - : "Here are some satellites currently being worked on."} + : "Here are some satellites we have worked on that are not currently in orbit."} diff --git a/frontend/src/components/2dmap/2dMapProjection.tsx b/frontend/src/app/satellites/[satelliteSlug]/_2dmap/2dMapProjection.tsx similarity index 96% rename from frontend/src/components/2dmap/2dMapProjection.tsx rename to frontend/src/app/satellites/[satelliteSlug]/_2dmap/2dMapProjection.tsx index 34cec70..f6dd3d3 100644 --- a/frontend/src/components/2dmap/2dMapProjection.tsx +++ b/frontend/src/app/satellites/[satelliteSlug]/_2dmap/2dMapProjection.tsx @@ -49,7 +49,7 @@ export default function Map2dNaturalProjection({ // Function to interpolate the green color based on the index const interPolateColor = (index: number, total: number) => { const startColor = { r: 40, g: 96, b: 241 }; - const endColor = { r: 241, g: 0, b: 20 }; + const endColor = { r: 241, g: 20, b: 40 }; const ratio = index / total; const r = Math.round((1 - ratio) * startColor.r + ratio * endColor.r); const g = Math.round((1 - ratio) * startColor.g + ratio * endColor.g); @@ -96,7 +96,7 @@ export default function Map2dNaturalProjection({ key={`future-position-${i}`} cx={point[0]} cy={point[1]} - r="3" + r={width < 500 ? 3 : 5} fill={interPolateColor( i, futurePositions.length - @@ -110,7 +110,7 @@ export default function Map2dNaturalProjection({ Loading...; + console.log(satelliteInfo); + let imageURL = undefined; if (STRAPI_URL && satelliteInfo.satelliteImage) { imageURL = STRAPI_URL + satelliteInfo.satelliteImage; } + if (Number.isNaN(satelliteInfo.noradId)) { + return
Satellite not found
; + } + return ( <>
@@ -102,7 +108,6 @@ export default async function SatelliteInfoPage({ alt={satelliteInfo.name} width={1600} // Set according to the aspect ratio of the image height={0} - layout="responsive" className="p-2" /> ) : null} diff --git a/frontend/src/app/satellites/layout.tsx b/frontend/src/app/satellites/layout.tsx index de2f2b5..9dc0a6c 100644 --- a/frontend/src/app/satellites/layout.tsx +++ b/frontend/src/app/satellites/layout.tsx @@ -1,4 +1,4 @@ -import { PageColoredBackground } from "@/components/PageLayout"; +import { PageColoredBackground } from "@/components/layout/PageLayout"; import React from "react"; export default function Layout({ children }: { children: React.ReactNode }) { return {children}; diff --git a/frontend/src/app/satellites/page.tsx b/frontend/src/app/satellites/page.tsx index 802371f..caa68c2 100644 --- a/frontend/src/app/satellites/page.tsx +++ b/frontend/src/app/satellites/page.tsx @@ -1,6 +1,6 @@ import { getClient } from "@/lib/ApolloClient"; -import SatelliteResponsiveTable from "@/components/SatelliteResponsiveTable"; -import { graphql } from "@/tada/graphql"; +import SatelliteResponsiveTable from "./SatelliteResponsiveTable"; +import { graphql } from "@/lib/tada/graphql"; const GET_SATELLITES = graphql(` query GET_SATELLITES { @@ -10,16 +10,7 @@ const GET_SATELLITES = graphql(` attributes { catalogNumberNORAD name - satelliteImage { - data { - attributes { - url - } - } - } - missionStatus slug - massKg } } } diff --git a/frontend/src/app/sitemap.ts b/frontend/src/app/sitemap.ts index 7366c11..d6867a9 100644 --- a/frontend/src/app/sitemap.ts +++ b/frontend/src/app/sitemap.ts @@ -1,7 +1,7 @@ import { MetadataRoute } from "next"; import { getClient } from "@lib/ApolloClient"; import { env } from "process"; -import { graphql } from "@/tada/graphql"; +import { graphql } from "@/lib/tada/graphql"; import { TadaDocumentNode } from "gql.tada"; // Needs to be dynamic as we use the rsc apollo client @@ -51,6 +51,11 @@ export default async function sitemap(): Promise { routes.push({ url: env.OUTWARD_FACING_URL }); } + // Add all root routes for blo, projects and satellites + routes.push({ url: `${env.OUTWARD_FACING_URL}/blog` }); + routes.push({ url: `${env.OUTWARD_FACING_URL}/projects` }); + routes.push({ url: `${env.OUTWARD_FACING_URL}/satellites` }); + // Add the blog posts let articleSlugs = await getSlugs(GET_ARTICLE_SLUGS); diff --git a/frontend/src/components/HeroWrapper.tsx b/frontend/src/components/HeroWrapper.tsx deleted file mode 100644 index 7350b62..0000000 --- a/frontend/src/components/HeroWrapper.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { getClient } from "@/lib/ApolloClient"; -import { graphql } from "@/tada/graphql"; -import Hero from "@components/ui/hero"; - -const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; - -const GET_HERO_DATA = graphql(` - query Query($publicationState: PublicationState) { - hero(publicationState: $publicationState) { - data { - attributes { - title - text - image { - data { - attributes { - url - } - } - } - } - } - } - } -`); - -export default async function HeroWrapper() { - const graphqlData = await getClient().query({ - query: GET_HERO_DATA, - }); - - // Check if data is available - if ( - !graphqlData.data || - !graphqlData.data.hero || - !graphqlData.data.hero.data - ) { - return <>; - } - - const heroData = graphqlData.data.hero.data; - const heroAttributes = heroData.attributes; - - if (!heroAttributes || !heroAttributes.image?.data) { - return <>; - } - - const imageUrl = STRAPI_URL! + heroAttributes.image?.data?.attributes?.url; - if (!isValidUrl(imageUrl)) { - return
Invalid image URL.
; - } - - return ( - <> -
-
- -
-
- - ); -} - -function isValidUrl(urlString: string): boolean { - try { - new URL(urlString); - return true; - } catch (e) { - return false; - } -} diff --git a/frontend/src/components/homeComponents/SatelliteSelector.tsx b/frontend/src/components/homeComponents/SatelliteSelector.tsx deleted file mode 100644 index f9c2d2e..0000000 --- a/frontend/src/components/homeComponents/SatelliteSelector.tsx +++ /dev/null @@ -1,34 +0,0 @@ -"use client"; -import React from "react"; -import { useSatelliteStore } from "@/lib/store"; -import SatDropdown from "@/components/homeComponents/SatDropdown"; - -export default function SatelliteSelector() { - const selectedSatellite = useSatelliteStore( - (state) => state.selectedSatellite, - ); - const setSelectedSatellite = useSatelliteStore( - (state) => state.setSelectedSatellite, - ); - const setSatellites = useSatelliteStore((state) => state.setSatellites); - - const satNumToEntry = useSatelliteStore((state) => state.satNumToEntry); - - let selectedSatelliteName = undefined; - - if (selectedSatellite) { - selectedSatelliteName = satNumToEntry[selectedSatellite]?.name; - } - - return ( -
- -
- ); -} diff --git a/frontend/src/components/ErrorBoundaryNavigation.tsx b/frontend/src/components/layout/ErrorBoundaryNavigation.tsx similarity index 100% rename from frontend/src/components/ErrorBoundaryNavigation.tsx rename to frontend/src/components/layout/ErrorBoundaryNavigation.tsx diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/layout/Footer.tsx similarity index 82% rename from frontend/src/components/Footer.tsx rename to frontend/src/components/layout/Footer.tsx index 695fa9b..7bc5ee7 100644 --- a/frontend/src/components/Footer.tsx +++ b/frontend/src/components/layout/Footer.tsx @@ -1,5 +1,5 @@ import { env } from "process"; -import NTNULogo from "./ntnu/NTNULogo"; +import NTNULogo from "./NTNULogo"; export default function Footer() { return ( @@ -10,8 +10,8 @@ export default function Footer() {
diff --git a/frontend/src/components/ntnu/NTNULogo.tsx b/frontend/src/components/layout/NTNULogo.tsx similarity index 100% rename from frontend/src/components/ntnu/NTNULogo.tsx rename to frontend/src/components/layout/NTNULogo.tsx diff --git a/frontend/src/components/Navbar.tsx b/frontend/src/components/layout/Navbar.tsx similarity index 98% rename from frontend/src/components/Navbar.tsx rename to frontend/src/components/layout/Navbar.tsx index 74ddf09..8346af9 100644 --- a/frontend/src/components/Navbar.tsx +++ b/frontend/src/components/layout/Navbar.tsx @@ -13,6 +13,9 @@ import Image from "next/image"; import type { SVGProps } from "react"; +const iconSize = 30; +const iconStyle = "mx-2"; + export function IconParkHamburgerButton(props: SVGProps) { return ( ) { ); } -const iconSize = 30; -const iconStyle = "mx-2"; - export function SolarSatelliteLineDuotone(props: SVGProps) { return ( diff --git a/frontend/src/components/PageHeader.tsx b/frontend/src/components/layout/PageHeader.tsx similarity index 100% rename from frontend/src/components/PageHeader.tsx rename to frontend/src/components/layout/PageHeader.tsx diff --git a/frontend/src/components/PageLayout.tsx b/frontend/src/components/layout/PageLayout.tsx similarity index 69% rename from frontend/src/components/PageLayout.tsx rename to frontend/src/components/layout/PageLayout.tsx index ea1bafb..274bb73 100644 --- a/frontend/src/components/PageLayout.tsx +++ b/frontend/src/components/layout/PageLayout.tsx @@ -9,6 +9,16 @@ function PagePadding({ children }: { children: React.ReactNode }) { ); } +function PagePaddingOnlyHorizontal({ + children, +}: { + children: React.ReactNode; +}) { + return ( +
{children}
+ ); +} + // Used for pages that require a colored transparent background function PageColoredBackground({ children }: { children: React.ReactNode }) { return ( @@ -18,4 +28,4 @@ function PageColoredBackground({ children }: { children: React.ReactNode }) { ); } -export { PageColoredBackground, PagePadding }; +export { PageColoredBackground, PagePadding, PagePaddingOnlyHorizontal }; diff --git a/frontend/src/components/starBackground/Starfield.tsx b/frontend/src/components/layout/Starfield.tsx similarity index 100% rename from frontend/src/components/starBackground/Starfield.tsx rename to frontend/src/components/layout/Starfield.tsx diff --git a/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx b/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx index 38af3ed..0c67d1e 100644 --- a/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx +++ b/frontend/src/components/satelliteData/SatelliteInitialFetch.tsx @@ -3,10 +3,15 @@ import { SatelliteEntry, useSatelliteStore } from "@/lib/store"; import { useEffect } from "react"; interface SatelliteInitialClientFetchProps { - satData: SatelliteEntry[]; // Adjusted to possibly include 'selected' + satData: SatelliteEntry[]; } -export default function SatelliteInitialClientFetch({ +/* +This is a component that initializes the Zustand store with satellite data +fetched from the server. It is used in the layout to fetch satellite data +serverside and set it in the store. +*/ +export default function InitializeZustandWithSatEntries({ satData, }: SatelliteInitialClientFetchProps) { const setSatellites = useSatelliteStore((state) => state.setSatellites); diff --git a/frontend/src/components/shadcn/button.tsx b/frontend/src/components/shadcn/button.tsx index 0053c7e..c68b1eb 100644 --- a/frontend/src/components/shadcn/button.tsx +++ b/frontend/src/components/shadcn/button.tsx @@ -19,12 +19,14 @@ const buttonVariants = cva( "bg-secondary text-secondary-foreground hover:bg-secondary/80", ghost: "hover:bg-accent hover:text-accent-foreground", link: "text-primary underline-offset-4 hover:underline", + navbarLink: "hover:bg-primary hover:text-accent-foreground", }, size: { default: "h-10 px-4 py-2", sm: "h-9 rounded-md px-3", lg: "h-11 rounded-md px-8", icon: "h-10 w-10", + link: "", }, }, defaultVariants: { diff --git a/frontend/src/components/BlockRendererClient.tsx b/frontend/src/components/shared/BlockRendererClient.tsx similarity index 100% rename from frontend/src/components/BlockRendererClient.tsx rename to frontend/src/components/shared/BlockRendererClient.tsx diff --git a/frontend/src/components/shared/CardGrid.tsx b/frontend/src/components/shared/CardGrid.tsx new file mode 100644 index 0000000..d992970 --- /dev/null +++ b/frontend/src/components/shared/CardGrid.tsx @@ -0,0 +1,9 @@ +import React from "react"; + +export default function CardGrid({ children }: { children: React.ReactNode }) { + return ( +
+ {children} +
+ ); +} diff --git a/frontend/src/components/fullBlogCard.tsx b/frontend/src/components/shared/CardWithContent.tsx similarity index 52% rename from frontend/src/components/fullBlogCard.tsx rename to frontend/src/components/shared/CardWithContent.tsx index 9f54319..6c4f4aa 100644 --- a/frontend/src/components/fullBlogCard.tsx +++ b/frontend/src/components/shared/CardWithContent.tsx @@ -1,12 +1,10 @@ import { - BlogCard, - BlogCardContent, - BlogCardHeader, - BlogCardTitle, + BlogCard as Card, + BlogCardContent as CardContent, + BlogCardHeader as CardHeader, + BlogCardTitle as CardTitle, } from "@/components/ui/blogCard"; import Link from "next/link"; -import { SlicePreviewText } from "./SlicePreviewText"; -import { BlogPost } from "@/app/blog/page"; import Image from "next/image"; import { cn } from "@/lib/utils"; import { SVGProps } from "react"; @@ -28,35 +26,48 @@ export function PlaceholderImage(props: SVGProps) { ); } -export default function FullBlogCard({ - article, +export default function CardWithContent({ + title, + description, + link, className, + tag, + datePublished, + imageURL, }: { - article: BlogPost; + title: string; + description?: string; + link: string; className?: string; + tag?: string; + datePublished?: string | Date; + imageURL?: string; }) { - function formatDate(dateString: string) { - const date = new Date(dateString); + function formatDate(date: string | Date) { + let newDate = new Date(date); const options: Intl.DateTimeFormatOptions = { month: "long", day: "numeric", year: "numeric", }; - return date.toLocaleDateString("en-US", options); + return newDate.toLocaleDateString("en-US", options); + } + if (datePublished) { + datePublished = formatDate(datePublished); } return ( - - - {article.coverImage ? ( + + + {imageURL ? ( )}
-

- {article.tag ? article.tag : "General"} -

+ {tag ? ( +

+ {tag} +

+ ) : null} +

- {formatDate(article.datePublished)} + {datePublished}

- - {article.title} - -
- -

- {SlicePreviewText(article.content)} -

-
-
+ {title} + + +

{description}

+
+ ); } diff --git a/frontend/src/components/RelatedProjectsAndSatellites.tsx b/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx similarity index 96% rename from frontend/src/components/RelatedProjectsAndSatellites.tsx rename to frontend/src/components/shared/RelatedProjectsAndSatellites.tsx index c46e281..72bd2d8 100644 --- a/frontend/src/components/RelatedProjectsAndSatellites.tsx +++ b/frontend/src/components/shared/RelatedProjectsAndSatellites.tsx @@ -8,7 +8,7 @@ import { CardHeader, CardTitle, } from "@/components/shadcn/card"; -import { PlaceholderImage } from "@/components/fullBlogCard"; +import { PlaceholderImage } from "@/components/shared/CardWithContent"; export default function RelatedProjectsAndSatellites({ project, diff --git a/frontend/src/components/ui/coloredSection.tsx b/frontend/src/components/ui/coloredSection.tsx deleted file mode 100644 index 13cb503..0000000 --- a/frontend/src/components/ui/coloredSection.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from "react"; -import { cn } from "@/lib/utils"; - -const ColoredSection = React.forwardRef< - HTMLDivElement, - React.HTMLAttributes ->(({ className, ...props }, ref) => { - return ( - <> -
- - ); -}); - -ColoredSection.displayName = "ColoredSection"; // Add display name - -export default ColoredSection; diff --git a/frontend/src/components/ui/hero.tsx b/frontend/src/components/ui/hero.tsx index 1f0dff9..d5d2638 100644 --- a/frontend/src/components/ui/hero.tsx +++ b/frontend/src/components/ui/hero.tsx @@ -3,29 +3,35 @@ import Image from "next/image"; interface HeroProps extends React.HTMLAttributes { title: string; description: string; - imageUrl: string; + imageUrl?: string; className?: string; } const Hero = React.forwardRef( ({ title, description, imageUrl, className, children, ...props }, ref) => ( -
-
-

{title}

-
+
+

+ {title} +

+
+ {imageUrl ? ( -

{description}

- {children} -
+ className="h-auto w-[70%]" + /> + ) : null} +

{description}

+ {children}
-
+
), ); diff --git a/frontend/src/components/SlicePreviewText.tsx b/frontend/src/lib/SlicePreviewText.ts similarity index 71% rename from frontend/src/components/SlicePreviewText.tsx rename to frontend/src/lib/SlicePreviewText.ts index 2c8849d..2479a7b 100644 --- a/frontend/src/components/SlicePreviewText.tsx +++ b/frontend/src/lib/SlicePreviewText.ts @@ -1,6 +1,6 @@ import { BlocksContent } from "@strapi/blocks-react-renderer"; -function SlicePreviewText(content: BlocksContent): string { +function slicePreviewText(content: BlocksContent): string { let text = ""; for (const block of content) { if (block.type === "paragraph") { @@ -13,7 +13,11 @@ function SlicePreviewText(content: BlocksContent): string { continue; } - text = paragraphBlock.children[0].text.slice(0, 100) + "..."; + text = paragraphBlock.children[0].text.slice(0, 100); + + if (text.length < paragraphBlock.children[0].text.length) { + text += "..."; + } break; } @@ -21,4 +25,4 @@ function SlicePreviewText(content: BlocksContent): string { return text; } -export { SlicePreviewText }; +export { slicePreviewText }; diff --git a/frontend/src/lib/convertSatrec.ts b/frontend/src/lib/convertSatrec.ts index aaae2a7..1b58a19 100644 --- a/frontend/src/lib/convertSatrec.ts +++ b/frontend/src/lib/convertSatrec.ts @@ -1,6 +1,6 @@ import * as satellite from "satellite.js"; import { SatRec } from "satellite.js"; -import globeData from "@/components/homeComponents/files/globe-data.json"; +import globeData from "@/app/_homeComponents/files/globe-data.json"; // turf needs ts ignore to work with typescript // @ts-ignore diff --git a/frontend/src/lib/data/fetchArticleInfo.tsx b/frontend/src/lib/data/fetchArticleInfo.tsx deleted file mode 100644 index 3e696cf..0000000 --- a/frontend/src/lib/data/fetchArticleInfo.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { getClient } from "../ApolloClient"; -import { BlocksContent } from "@strapi/blocks-react-renderer"; -import { BlogPost } from "@/app/blog/page"; -import { graphql } from "@/tada/graphql"; - -const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; - -const GET_ARTICLES = graphql(` - query GET_ARTICLES( - $pagination: PaginationArg - $filters: ArticleFiltersInput - ) { - articles( - sort: ["datePublished:desc"] - pagination: $pagination - filters: $filters - ) { - data { - id - attributes { - author { - data { - attributes { - name - avatar { - data { - attributes { - url - } - } - } - } - } - } - previewTitle - datePublished - body - coverImage { - data { - attributes { - url - } - } - } - createdAt - publishedAt - slug - Tag - } - } - meta { - pagination { - total - } - } - } - } -`); - -export default async function fetchArticlePages({ - currentPage, - pageSize, - tag, -}: { - currentPage: number; - pageSize: number; - tag: string | null; -}) { - let graphqlData; - - if (!tag) { - graphqlData = await getClient().query({ - query: GET_ARTICLES, - variables: { - pagination: { - pageSize: pageSize, - page: currentPage, - }, - }, - }); - } else { - graphqlData = await getClient().query({ - query: GET_ARTICLES, - variables: { - pagination: { - pageSize: pageSize, - page: currentPage, - }, - filters: { - Tag: { - contains: tag, - }, - }, - }, - }); - } - if ( - graphqlData.data === null || - graphqlData.data === undefined || - graphqlData.data.articles === undefined || - graphqlData.data.articles === null - ) { - return null; - } - let articleList: BlogPost[] = []; - - graphqlData.data.articles.data.forEach((article: any) => { - let avatarURL: string | undefined = - article?.attributes?.author?.data?.attributes?.avatar?.data - ?.attributes?.url; - - if (STRAPI_URL && avatarURL != undefined) { - avatarURL = STRAPI_URL + avatarURL; - } - - const authorName: string | undefined = - article?.attributes?.author?.data?.attributes?.name; - const tag: string | null | undefined = article?.attributes?.Tag; - const datePublished: any = article?.attributes?.datePublished; - let coverImage: string | undefined = - article?.attributes?.coverImage?.data?.attributes?.url; - if (STRAPI_URL && coverImage != undefined) { - coverImage = STRAPI_URL + coverImage; - } - let content: BlocksContent = article?.attributes?.body ?? []; - - const title: string | undefined = article?.attributes?.previewTitle; - - for (const block of content) { - if (block.type === "paragraph") { - content = [block]; - break; - } - } - - articleList.push({ - key: article.id, - title, - content, - coverImage, - datePublished, - tag, - HOST_URL: STRAPI_URL, - authorName, - avatarURL, - slug: article.attributes.slug, - }); - }); - - const totalArticles = graphqlData.data?.articles?.meta?.pagination?.total; - - return { articleList, totalArticles }; -} diff --git a/frontend/src/lib/data/fetchFeaturedImage.tsx b/frontend/src/lib/data/fetchFeaturedImage.tsx deleted file mode 100644 index 5af6fa4..0000000 --- a/frontend/src/lib/data/fetchFeaturedImage.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { getClient } from "../ApolloClient"; -import Image from "next/image"; -import { PlaceholderImage } from "@/components/fullBlogCard"; -import { graphql } from "@/tada/graphql"; - -const STRAPI_URL = process.env.BACKEND_INTERNAL_URL; - -const GET_FEATURED_IMAGE = graphql(` - query FeaturedImage { - featuredImage { - data { - attributes { - featuredImage { - data { - attributes { - url - } - } - } - satellite { - data { - attributes { - catalogNumberNORAD - name - } - } - } - createdAt - updatedAt - publishedAt - } - } - } - } -`); - -export default async function fetchFeaturedImage() { - const graphqlData = await getClient().query({ - query: GET_FEATURED_IMAGE, - }); - - let featuredImageURL = - graphqlData.data.featuredImage?.data?.attributes?.featuredImage?.data - ?.attributes?.url; - - if (STRAPI_URL && featuredImageURL != undefined) { - featuredImageURL = STRAPI_URL + featuredImageURL; - } else { - featuredImageURL = ""; - } - - const imageSatelliteRelation = - graphqlData.data.featuredImage?.data?.attributes?.satellite?.data - ?.attributes?.name; - - return ( -
- {featuredImageURL ? ( -
-
- -
-
-

Taken by {imageSatelliteRelation}

-
-
- ) : ( -
- -
- )} -
- ); -} diff --git a/frontend/src/lib/data/fetchFeaturedProjects.ts b/frontend/src/lib/data/fetchFeaturedProjects.ts new file mode 100644 index 0000000..1598475 --- /dev/null +++ b/frontend/src/lib/data/fetchFeaturedProjects.ts @@ -0,0 +1,69 @@ +import { graphql } from "@/lib/tada/graphql"; +import { getClient } from "../ApolloClient"; + +const GET_FEATURED_PROJECTS = graphql(` + query HomeFeaturedProjects { + homeFeaturedProjects { + data { + attributes { + title + textContent + featuredProject1 { + data { + attributes { + title + previewImage { + data { + attributes { + url + } + } + } + slug + } + } + } + featuredProject2 { + data { + attributes { + title + previewImage { + data { + attributes { + url + } + } + } + slug + } + } + } + featuredProject3 { + data { + attributes { + title + previewImage { + data { + attributes { + url + } + } + } + slug + } + } + } + } + } + } + } +`); + +export default async function fetchFeaturedProjects() { + const client = getClient(); + const { data } = await client.query({ + query: GET_FEATURED_PROJECTS, + }); + + return data.homeFeaturedProjects?.data?.attributes; +} diff --git a/frontend/src/lib/data/fetchMissionStatement.ts b/frontend/src/lib/data/fetchMissionStatement.ts new file mode 100644 index 0000000..d73e728 --- /dev/null +++ b/frontend/src/lib/data/fetchMissionStatement.ts @@ -0,0 +1,31 @@ +import { graphql } from "@/lib/tada/graphql"; +import { getClient } from "../ApolloClient"; + +const GET_MISSION_STATEMENT = graphql(` + query HomeMissionStatement { + homeMissionStatement { + data { + attributes { + title + textContent + } + } + } + } +`); + +export default async function fetchMissionStatement() { + const client = getClient(); // Ensure getClient properly typed to return ApolloClient + const response = await client.query({ + // This ensures that TypeScript expects the right structure + query: GET_MISSION_STATEMENT, + }); + + const missionStatement = + response.data.homeMissionStatement?.data?.attributes; + + return { + title: missionStatement?.title, + textContent: missionStatement?.textContent, + }; +} diff --git a/frontend/src/lib/data/fetchSatelliteInfo.ts b/frontend/src/lib/data/fetchSatelliteInfo.ts index 4968dad..5da4259 100644 --- a/frontend/src/lib/data/fetchSatelliteInfo.ts +++ b/frontend/src/lib/data/fetchSatelliteInfo.ts @@ -4,7 +4,7 @@ import { } from "@/app/satellites/[satelliteSlug]/page"; import { getClient } from "../ApolloClient"; import { SatelliteName, SatelliteNumber } from "../store"; -import { graphql } from "@/tada/graphql"; +import { graphql } from "@/lib/tada/graphql"; import { BlocksContent } from "@strapi/blocks-react-renderer"; const GET_SATELLITE_INFO = graphql(` diff --git a/frontend/src/lib/data/fetchSatelliteNamesAndId.ts b/frontend/src/lib/data/fetchSatelliteNamesAndId.ts index fe7dc3a..ea2b0b4 100644 --- a/frontend/src/lib/data/fetchSatelliteNamesAndId.ts +++ b/frontend/src/lib/data/fetchSatelliteNamesAndId.ts @@ -1,6 +1,6 @@ import { getClient } from "@/lib/ApolloClient"; import { SatelliteName, SatelliteNumber } from "../store"; -import { graphql } from "@/tada/graphql"; +import { graphql } from "@/lib/tada/graphql"; const GET_SATELLITE_NAMES_AND_ID = graphql(` query GET_SATELLITE_NAMES_AND_ID { diff --git a/frontend/src/lib/tada/graphql-env.d.ts b/frontend/src/lib/tada/graphql-env.d.ts new file mode 100644 index 0000000..9b8e045 --- /dev/null +++ b/frontend/src/lib/tada/graphql-env.d.ts @@ -0,0 +1,141 @@ +/* eslint-disable */ +/* prettier-ignore */ + +/** An IntrospectionQuery representation of your schema. + * + * @remarks + * This is an introspection of your schema saved as a file by GraphQLSP. + * It will automatically be used by `gql.tada` to infer the types of your GraphQL documents. + * If you need to reuse this data or update your `scalars`, update `tadaOutputLocation` to + * instead save to a .ts instead of a .d.ts file. + */ +export type introspection = { + name: never; + query: 'Query'; + mutation: 'Mutation'; + subscription: never; + types: { + 'Article': { kind: 'OBJECT'; name: 'Article'; fields: { 'Tag': { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; } }; 'author': { name: 'author'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'body': { name: 'body'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; } }; 'coverImage': { name: 'coverImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'datePublished': { name: 'datePublished'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'previewTitle': { name: 'previewTitle'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'ArticleEntity': { kind: 'OBJECT'; name: 'ArticleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Article'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'ArticleEntityResponse': { kind: 'OBJECT'; name: 'ArticleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; } }; }; }; + 'ArticleEntityResponseCollection': { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'ArticleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewTitle'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'ArticleInput': { kind: 'INPUT_OBJECT'; name: 'ArticleInput'; isOneOf: false; inputFields: [{ name: 'previewTitle'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'coverImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'ArticleRelationResponseCollection': { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; }; }; + 'Author': { kind: 'OBJECT'; name: 'Author'; fields: { 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; ofType: null; } }; 'avatar': { name: 'avatar'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'AuthorEntity': { kind: 'OBJECT'; name: 'AuthorEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Author'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'AuthorEntityResponse': { kind: 'OBJECT'; name: 'AuthorEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; } }; }; }; + 'AuthorEntityResponseCollection': { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'AuthorFiltersInput': { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'AuthorInput': { kind: 'INPUT_OBJECT'; name: 'AuthorInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'avatar'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'Boolean': unknown; + 'BooleanFilterInput': { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }]; }; + 'Date': unknown; + 'DateFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }]; }; + 'DateTime': unknown; + 'DateTimeFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }]; }; + 'ENUM_ARTICLE_TAG': { name: 'ENUM_ARTICLE_TAG'; enumValues: 'Satellites' | 'Projects' | 'General'; }; + 'FeaturedImage': { kind: 'OBJECT'; name: 'FeaturedImage'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'FeaturedImageEntity': { kind: 'OBJECT'; name: 'FeaturedImageEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'FeaturedImage'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'FeaturedImageEntityResponse': { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntity'; ofType: null; } }; }; }; + 'FeaturedImageInput': { kind: 'INPUT_OBJECT'; name: 'FeaturedImageInput'; isOneOf: false; inputFields: [{ name: 'featuredImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellite'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'FileInfoInput': { kind: 'INPUT_OBJECT'; name: 'FileInfoInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; + 'Float': unknown; + 'FloatFilterInput': { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }]; }; + 'GenericMorph': { kind: 'UNION'; name: 'GenericMorph'; fields: {}; possibleTypes: 'Article' | 'Author' | 'FeaturedImage' | 'Hero' | 'HomeFeaturedProjects' | 'HomeMissionStatement' | 'I18NLocale' | 'Project' | 'Satellite' | 'UploadFile' | 'UploadFolder' | 'UsersPermissionsPermission' | 'UsersPermissionsRole' | 'UsersPermissionsUser'; }; + 'Hero': { kind: 'OBJECT'; name: 'Hero'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'image': { name: 'image'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'text': { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'HeroEntity': { kind: 'OBJECT'; name: 'HeroEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Hero'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'HeroEntityResponse': { kind: 'OBJECT'; name: 'HeroEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HeroEntity'; ofType: null; } }; }; }; + 'HeroInput': { kind: 'INPUT_OBJECT'; name: 'HeroInput'; isOneOf: false; inputFields: [{ name: 'image'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'HomeFeaturedProjects': { kind: 'OBJECT'; name: 'HomeFeaturedProjects'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'featuredProject1': { name: 'featuredProject1'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'featuredProject2': { name: 'featuredProject2'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'featuredProject3': { name: 'featuredProject3'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'HomeFeaturedProjectsEntity': { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjects'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'HomeFeaturedProjectsEntityResponse': { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntity'; ofType: null; } }; }; }; + 'HomeFeaturedProjectsInput': { kind: 'INPUT_OBJECT'; name: 'HomeFeaturedProjectsInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'featuredProject1'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject2'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'featuredProject3'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'HomeMissionStatement': { kind: 'OBJECT'; name: 'HomeMissionStatement'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'textContent': { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'HomeMissionStatementEntity': { kind: 'OBJECT'; name: 'HomeMissionStatementEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'HomeMissionStatement'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'HomeMissionStatementEntityResponse': { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntity'; ofType: null; } }; }; }; + 'HomeMissionStatementInput': { kind: 'INPUT_OBJECT'; name: 'HomeMissionStatementInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'textContent'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'I18NLocale': { kind: 'OBJECT'; name: 'I18NLocale'; fields: { 'code': { name: 'code'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'I18NLocaleEntity': { kind: 'OBJECT'; name: 'I18NLocaleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'I18NLocale'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'I18NLocaleEntityResponse': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; } }; }; }; + 'I18NLocaleEntityResponseCollection': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'I18NLocaleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'code'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'ID': unknown; + 'IDFilterInput': { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; }; + 'Int': unknown; + 'IntFilterInput': { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; }; + 'JSON': unknown; + 'JSONFilterInput': { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }]; }; + 'Mutation': { kind: 'OBJECT'; name: 'Mutation'; fields: { 'changePassword': { name: 'changePassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'createArticle': { name: 'createArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'createAuthor': { name: 'createAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'createProject': { name: 'createProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'createSatellite': { name: 'createSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'createUploadFile': { name: 'createUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createUploadFolder': { name: 'createUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'createUsersPermissionsRole': { name: 'createUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; ofType: null; } }; 'createUsersPermissionsUser': { name: 'createUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'deleteArticle': { name: 'deleteArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'deleteAuthor': { name: 'deleteAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'deleteFeaturedImage': { name: 'deleteFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'deleteHero': { name: 'deleteHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'deleteHomeFeaturedProjects': { name: 'deleteHomeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'deleteHomeMissionStatement': { name: 'deleteHomeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'deleteProject': { name: 'deleteProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'deleteSatellite': { name: 'deleteSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'deleteUploadFile': { name: 'deleteUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'deleteUploadFolder': { name: 'deleteUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'deleteUsersPermissionsRole': { name: 'deleteUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; ofType: null; } }; 'deleteUsersPermissionsUser': { name: 'deleteUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'emailConfirmation': { name: 'emailConfirmation'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'forgotPassword': { name: 'forgotPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; ofType: null; } }; 'login': { name: 'login'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'multipleUpload': { name: 'multipleUpload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; }; } }; 'register': { name: 'register'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'removeFile': { name: 'removeFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'resetPassword': { name: 'resetPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'updateArticle': { name: 'updateArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'updateAuthor': { name: 'updateAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'updateFeaturedImage': { name: 'updateFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'updateFileInfo': { name: 'updateFileInfo'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'updateHero': { name: 'updateHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'updateHomeFeaturedProjects': { name: 'updateHomeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'updateHomeMissionStatement': { name: 'updateHomeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'updateProject': { name: 'updateProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'updateSatellite': { name: 'updateSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'updateUploadFile': { name: 'updateUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'updateUploadFolder': { name: 'updateUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'updateUsersPermissionsRole': { name: 'updateUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; ofType: null; } }; 'updateUsersPermissionsUser': { name: 'updateUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'upload': { name: 'upload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; }; }; + 'Pagination': { kind: 'OBJECT'; name: 'Pagination'; fields: { 'page': { name: 'page'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageCount': { name: 'pageCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageSize': { name: 'pageSize'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'total': { name: 'total'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; }; }; + 'PaginationArg': { kind: 'INPUT_OBJECT'; name: 'PaginationArg'; isOneOf: false; inputFields: [{ name: 'page'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'pageSize'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'start'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'limit'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }]; }; + 'Project': { kind: 'OBJECT'; name: 'Project'; fields: { 'content': { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'previewImage': { name: 'previewImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'ProjectEntity': { kind: 'OBJECT'; name: 'ProjectEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Project'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'ProjectEntityResponse': { kind: 'OBJECT'; name: 'ProjectEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; } }; }; }; + 'ProjectEntityResponseCollection': { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'ProjectFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'ProjectInput': { kind: 'INPUT_OBJECT'; name: 'ProjectInput'; isOneOf: false; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'ProjectRelationResponseCollection': { kind: 'OBJECT'; name: 'ProjectRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; }; }; + 'PublicationState': { name: 'PublicationState'; enumValues: 'LIVE' | 'PREVIEW'; }; + 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'article': { name: 'article'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; ofType: null; } }; 'author': { name: 'author'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'authors': { name: 'authors'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'hero': { name: 'hero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'homeFeaturedProjects': { name: 'homeFeaturedProjects'; type: { kind: 'OBJECT'; name: 'HomeFeaturedProjectsEntityResponse'; ofType: null; } }; 'homeMissionStatement': { name: 'homeMissionStatement'; type: { kind: 'OBJECT'; name: 'HomeMissionStatementEntityResponse'; ofType: null; } }; 'i18NLocale': { name: 'i18NLocale'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; ofType: null; } }; 'i18NLocales': { name: 'i18NLocales'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; ofType: null; } }; 'me': { name: 'me'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; } }; 'project': { name: 'project'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'projects': { name: 'projects'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; ofType: null; } }; 'uploadFile': { name: 'uploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'uploadFiles': { name: 'uploadFiles'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; ofType: null; } }; 'uploadFolder': { name: 'uploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'uploadFolders': { name: 'uploadFolders'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; ofType: null; } }; 'usersPermissionsRole': { name: 'usersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'usersPermissionsRoles': { name: 'usersPermissionsRoles'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; ofType: null; } }; 'usersPermissionsUser': { name: 'usersPermissionsUser'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; } }; 'usersPermissionsUsers': { name: 'usersPermissionsUsers'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; ofType: null; } }; }; }; + 'ResponseCollectionMeta': { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; fields: { 'pagination': { name: 'pagination'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Pagination'; ofType: null; }; } }; }; }; + 'Satellite': { kind: 'OBJECT'; name: 'Satellite'; fields: { 'catalogNumberNORAD': { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'content': { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'launchDate': { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'massKg': { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'missionStatus': { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'projects': { name: 'projects'; type: { kind: 'OBJECT'; name: 'ProjectRelationResponseCollection'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satelliteImage': { name: 'satelliteImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'SatelliteEntity': { kind: 'OBJECT'; name: 'SatelliteEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Satellite'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'SatelliteEntityResponse': { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; } }; }; }; + 'SatelliteEntityResponseCollection': { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'SatelliteFiltersInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'SatelliteInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'satelliteImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; + 'SatelliteRelationResponseCollection': { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; }; }; + 'String': unknown; + 'StringFilterInput': { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; isOneOf: false; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; }; + 'Upload': unknown; + 'UploadFile': { kind: 'OBJECT'; name: 'UploadFile'; fields: { 'alternativeText': { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'caption': { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'ext': { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'formats': { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'hash': { name: 'hash'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'height': { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'mime': { name: 'mime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'previewUrl': { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'provider': { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider_metadata': { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'related': { name: 'related'; type: { kind: 'LIST'; name: never; ofType: { kind: 'UNION'; name: 'GenericMorph'; ofType: null; }; } }; 'size': { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'url': { name: 'url'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'width': { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; }; }; + 'UploadFileEntity': { kind: 'OBJECT'; name: 'UploadFileEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFile'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'UploadFileEntityResponse': { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; } }; }; }; + 'UploadFileEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'UploadFileFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'UploadFileInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; + 'UploadFileRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; }; }; + 'UploadFolder': { kind: 'OBJECT'; name: 'UploadFolder'; fields: { 'children': { name: 'children'; type: { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'files': { name: 'files'; type: { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'parent': { name: 'parent'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'path': { name: 'path'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'pathId': { name: 'pathId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'UploadFolderEntity': { kind: 'OBJECT'; name: 'UploadFolderEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFolder'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'UploadFolderEntityResponse': { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; } }; }; }; + 'UploadFolderEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'UploadFolderFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'files'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'path'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'UploadFolderInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'files'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'path'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; + 'UploadFolderRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; }; }; + 'UsersPermissionsCreateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; + 'UsersPermissionsDeleteRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; + 'UsersPermissionsLoginInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsLoginInput'; isOneOf: false; inputFields: [{ name: 'identifier'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: "\"local\"" }]; }; + 'UsersPermissionsLoginPayload': { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; fields: { 'jwt': { name: 'jwt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'user': { name: 'user'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; }; } }; }; }; + 'UsersPermissionsMe': { kind: 'OBJECT'; name: 'UsersPermissionsMe'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; + 'UsersPermissionsMeRole': { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; fields: { 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; + 'UsersPermissionsPasswordPayload': { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; + 'UsersPermissionsPermission': { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; fields: { 'action': { name: 'action'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; + 'UsersPermissionsPermissionEntity': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'UsersPermissionsPermissionFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'action'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'UsersPermissionsPermissionRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; ofType: null; }; }; }; } }; }; }; + 'UsersPermissionsRegisterInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRegisterInput'; isOneOf: false; inputFields: [{ name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; }; + 'UsersPermissionsRole': { kind: 'OBJECT'; name: 'UsersPermissionsRole'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'permissions': { name: 'permissions'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; ofType: null; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'users': { name: 'users'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; ofType: null; } }; }; }; + 'UsersPermissionsRoleEntity': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRole'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'UsersPermissionsRoleEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; } }; }; }; + 'UsersPermissionsRoleEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'UsersPermissionsRoleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'users'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'UsersPermissionsRoleInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleInput'; isOneOf: false; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'users'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; }; + 'UsersPermissionsUpdateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; + 'UsersPermissionsUser': { kind: 'OBJECT'; name: 'UsersPermissionsUser'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider': { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; + 'UsersPermissionsUserEntity': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUser'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; + 'UsersPermissionsUserEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; } }; }; }; + 'UsersPermissionsUserEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; + 'UsersPermissionsUserFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; isOneOf: false; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'username'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }]; }; + 'UsersPermissionsUserInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserInput'; isOneOf: false; inputFields: [{ name: 'username'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }]; }; + 'UsersPermissionsUserRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; }; }; + }; +}; + +import * as gqlTada from 'gql.tada'; + +declare module 'gql.tada' { + interface setupSchema { + introspection: introspection + } +} \ No newline at end of file diff --git a/frontend/src/tada/graphql.ts b/frontend/src/lib/tada/graphql.ts similarity index 80% rename from frontend/src/tada/graphql.ts rename to frontend/src/lib/tada/graphql.ts index c53de36..aae219e 100644 --- a/frontend/src/tada/graphql.ts +++ b/frontend/src/lib/tada/graphql.ts @@ -3,6 +3,10 @@ import type { introspection } from "./graphql-env.d.ts"; export const graphql = initGraphQLTada<{ introspection: introspection; + scalars: { + JSON: any; + Date: Date | string; + }; }>(); export type { FragmentOf, ResultOf, VariablesOf } from "gql.tada"; diff --git a/frontend/src/tada/graphql-env.d.ts b/frontend/src/tada/graphql-env.d.ts deleted file mode 100644 index 363b4c7..0000000 --- a/frontend/src/tada/graphql-env.d.ts +++ /dev/null @@ -1,133 +0,0 @@ -/* eslint-disable */ -/* prettier-ignore */ - -/** An IntrospectionQuery representation of your schema. - * - * @remarks - * This is an introspection of your schema saved as a file by GraphQLSP. - * It will automatically be used by `gql.tada` to infer the types of your GraphQL documents. - * If you need to reuse this data or update your `scalars`, update `tadaOutputLocation` to - * instead save to a .ts instead of a .d.ts file. - */ -export type introspection = { - name: never; - query: 'Query'; - mutation: 'Mutation'; - subscription: never; - types: { - 'Article': { kind: 'OBJECT'; name: 'Article'; fields: { 'Tag': { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; } }; 'author': { name: 'author'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'body': { name: 'body'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; } }; 'coverImage': { name: 'coverImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'datePublished': { name: 'datePublished'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; } }; 'previewTitle': { name: 'previewTitle'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'ArticleEntity': { kind: 'OBJECT'; name: 'ArticleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Article'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'ArticleEntityResponse': { kind: 'OBJECT'; name: 'ArticleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; } }; }; }; - 'ArticleEntityResponseCollection': { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'ArticleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewTitle'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'ArticleInput': { kind: 'INPUT_OBJECT'; name: 'ArticleInput'; inputFields: [{ name: 'previewTitle'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'datePublished'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'coverImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'body'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'author'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'Tag'; type: { kind: 'ENUM'; name: 'ENUM_ARTICLE_TAG'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'ArticleRelationResponseCollection': { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ArticleEntity'; ofType: null; }; }; }; } }; }; }; - 'Author': { kind: 'OBJECT'; name: 'Author'; fields: { 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleRelationResponseCollection'; ofType: null; } }; 'avatar': { name: 'avatar'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'AuthorEntity': { kind: 'OBJECT'; name: 'AuthorEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Author'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'AuthorEntityResponse': { kind: 'OBJECT'; name: 'AuthorEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; } }; }; }; - 'AuthorEntityResponseCollection': { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'AuthorEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'AuthorFiltersInput': { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'INPUT_OBJECT'; name: 'ArticleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'AuthorFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'AuthorInput': { kind: 'INPUT_OBJECT'; name: 'AuthorInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'avatar'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'articles'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'Boolean': unknown; - 'BooleanFilterInput': { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; }; defaultValue: null }]; }; - 'Date': unknown; - 'DateFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Date'; ofType: null; }; }; defaultValue: null }]; }; - 'DateTime': unknown; - 'DateTimeFilterInput': { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; }; defaultValue: null }]; }; - 'ENUM_ARTICLE_TAG': { name: 'ENUM_ARTICLE_TAG'; enumValues: 'Satellites' | 'Projects' | 'General'; }; - 'FeaturedImage': { kind: 'OBJECT'; name: 'FeaturedImage'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'FeaturedImageEntity': { kind: 'OBJECT'; name: 'FeaturedImageEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'FeaturedImage'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'FeaturedImageEntityResponse': { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntity'; ofType: null; } }; }; }; - 'FeaturedImageInput': { kind: 'INPUT_OBJECT'; name: 'FeaturedImageInput'; inputFields: [{ name: 'featuredImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellite'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'FileInfoInput': { kind: 'INPUT_OBJECT'; name: 'FileInfoInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; - 'Float': unknown; - 'FloatFilterInput': { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; }; defaultValue: null }]; }; - 'GenericMorph': { kind: 'UNION'; name: 'GenericMorph'; fields: {}; possibleTypes: 'Article' | 'Author' | 'FeaturedImage' | 'Hero' | 'I18NLocale' | 'Project' | 'Satellite' | 'UploadFile' | 'UploadFolder' | 'UsersPermissionsPermission' | 'UsersPermissionsRole' | 'UsersPermissionsUser'; }; - 'Hero': { kind: 'OBJECT'; name: 'Hero'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'image': { name: 'image'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'text': { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'title': { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'HeroEntity': { kind: 'OBJECT'; name: 'HeroEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Hero'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'HeroEntityResponse': { kind: 'OBJECT'; name: 'HeroEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'HeroEntity'; ofType: null; } }; }; }; - 'HeroInput': { kind: 'INPUT_OBJECT'; name: 'HeroInput'; inputFields: [{ name: 'image'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'text'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'I18NLocale': { kind: 'OBJECT'; name: 'I18NLocale'; fields: { 'code': { name: 'code'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'I18NLocaleEntity': { kind: 'OBJECT'; name: 'I18NLocaleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'I18NLocale'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'I18NLocaleEntityResponse': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; } }; }; }; - 'I18NLocaleEntityResponseCollection': { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'I18NLocaleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'I18NLocaleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'code'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'I18NLocaleFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'ID': unknown; - 'IDFilterInput': { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; }; - 'Int': unknown; - 'IntFilterInput': { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; }; defaultValue: null }]; }; - 'JSON': unknown; - 'JSONFilterInput': { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; }; defaultValue: null }]; }; - 'Mutation': { kind: 'OBJECT'; name: 'Mutation'; fields: { 'changePassword': { name: 'changePassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'createArticle': { name: 'createArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'createAuthor': { name: 'createAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'createProject': { name: 'createProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'createSatellite': { name: 'createSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'createUploadFile': { name: 'createUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'createUploadFolder': { name: 'createUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'createUsersPermissionsRole': { name: 'createUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; ofType: null; } }; 'createUsersPermissionsUser': { name: 'createUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'deleteArticle': { name: 'deleteArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'deleteAuthor': { name: 'deleteAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'deleteFeaturedImage': { name: 'deleteFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'deleteHero': { name: 'deleteHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'deleteProject': { name: 'deleteProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'deleteSatellite': { name: 'deleteSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'deleteUploadFile': { name: 'deleteUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'deleteUploadFolder': { name: 'deleteUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'deleteUsersPermissionsRole': { name: 'deleteUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; ofType: null; } }; 'deleteUsersPermissionsUser': { name: 'deleteUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'emailConfirmation': { name: 'emailConfirmation'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'forgotPassword': { name: 'forgotPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; ofType: null; } }; 'login': { name: 'login'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'multipleUpload': { name: 'multipleUpload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; }; } }; 'register': { name: 'register'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; }; } }; 'removeFile': { name: 'removeFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'resetPassword': { name: 'resetPassword'; type: { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; ofType: null; } }; 'updateArticle': { name: 'updateArticle'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'updateAuthor': { name: 'updateAuthor'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'updateFeaturedImage': { name: 'updateFeaturedImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'updateFileInfo': { name: 'updateFileInfo'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; 'updateHero': { name: 'updateHero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'updateProject': { name: 'updateProject'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'updateSatellite': { name: 'updateSatellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'updateUploadFile': { name: 'updateUploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'updateUploadFolder': { name: 'updateUploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'updateUsersPermissionsRole': { name: 'updateUsersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; ofType: null; } }; 'updateUsersPermissionsUser': { name: 'updateUsersPermissionsUser'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; }; } }; 'upload': { name: 'upload'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; }; } }; }; }; - 'Pagination': { kind: 'OBJECT'; name: 'Pagination'; fields: { 'page': { name: 'page'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageCount': { name: 'pageCount'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'pageSize': { name: 'pageSize'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'total': { name: 'total'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; }; }; - 'PaginationArg': { kind: 'INPUT_OBJECT'; name: 'PaginationArg'; inputFields: [{ name: 'page'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'pageSize'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'start'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'limit'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }]; }; - 'Project': { kind: 'OBJECT'; name: 'Project'; fields: { 'content': { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'previewImage': { name: 'previewImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'title': { name: 'title'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'ProjectEntity': { kind: 'OBJECT'; name: 'ProjectEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Project'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'ProjectEntityResponse': { kind: 'OBJECT'; name: 'ProjectEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; } }; }; }; - 'ProjectEntityResponseCollection': { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'ProjectFiltersInput': { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'title'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'ProjectInput': { kind: 'INPUT_OBJECT'; name: 'ProjectInput'; inputFields: [{ name: 'title'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'satellites'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'ProjectRelationResponseCollection': { kind: 'OBJECT'; name: 'ProjectRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ProjectEntity'; ofType: null; }; }; }; } }; }; }; - 'PublicationState': { name: 'PublicationState'; enumValues: 'LIVE' | 'PREVIEW'; }; - 'Query': { kind: 'OBJECT'; name: 'Query'; fields: { 'article': { name: 'article'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponse'; ofType: null; } }; 'articles': { name: 'articles'; type: { kind: 'OBJECT'; name: 'ArticleEntityResponseCollection'; ofType: null; } }; 'author': { name: 'author'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponse'; ofType: null; } }; 'authors': { name: 'authors'; type: { kind: 'OBJECT'; name: 'AuthorEntityResponseCollection'; ofType: null; } }; 'featuredImage': { name: 'featuredImage'; type: { kind: 'OBJECT'; name: 'FeaturedImageEntityResponse'; ofType: null; } }; 'hero': { name: 'hero'; type: { kind: 'OBJECT'; name: 'HeroEntityResponse'; ofType: null; } }; 'i18NLocale': { name: 'i18NLocale'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponse'; ofType: null; } }; 'i18NLocales': { name: 'i18NLocales'; type: { kind: 'OBJECT'; name: 'I18NLocaleEntityResponseCollection'; ofType: null; } }; 'me': { name: 'me'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; } }; 'project': { name: 'project'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponse'; ofType: null; } }; 'projects': { name: 'projects'; type: { kind: 'OBJECT'; name: 'ProjectEntityResponseCollection'; ofType: null; } }; 'satellite': { name: 'satellite'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; ofType: null; } }; 'satellites': { name: 'satellites'; type: { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; ofType: null; } }; 'uploadFile': { name: 'uploadFile'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'uploadFiles': { name: 'uploadFiles'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; ofType: null; } }; 'uploadFolder': { name: 'uploadFolder'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'uploadFolders': { name: 'uploadFolders'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; ofType: null; } }; 'usersPermissionsRole': { name: 'usersPermissionsRole'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'usersPermissionsRoles': { name: 'usersPermissionsRoles'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; ofType: null; } }; 'usersPermissionsUser': { name: 'usersPermissionsUser'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; ofType: null; } }; 'usersPermissionsUsers': { name: 'usersPermissionsUsers'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; ofType: null; } }; }; }; - 'ResponseCollectionMeta': { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; fields: { 'pagination': { name: 'pagination'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'Pagination'; ofType: null; }; } }; }; }; - 'Satellite': { kind: 'OBJECT'; name: 'Satellite'; fields: { 'catalogNumberNORAD': { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'content': { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'launchDate': { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'massKg': { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; } }; 'missionStatus': { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'projects': { name: 'projects'; type: { kind: 'OBJECT'; name: 'ProjectRelationResponseCollection'; ofType: null; } }; 'publishedAt': { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'satelliteImage': { name: 'satelliteImage'; type: { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; ofType: null; } }; 'slug': { name: 'slug'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'SatelliteEntity': { kind: 'OBJECT'; name: 'SatelliteEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'Satellite'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'SatelliteEntityResponse': { kind: 'OBJECT'; name: 'SatelliteEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; } }; }; }; - 'SatelliteEntityResponseCollection': { kind: 'OBJECT'; name: 'SatelliteEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'SatelliteFiltersInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'INPUT_OBJECT'; name: 'ProjectFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'SatelliteFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'SatelliteInput': { kind: 'INPUT_OBJECT'; name: 'SatelliteInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'catalogNumberNORAD'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'content'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'satelliteImage'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'projects'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'missionStatus'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'launchDate'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }, { name: 'slug'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'massKg'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'publishedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; }; defaultValue: null }]; }; - 'SatelliteRelationResponseCollection': { kind: 'OBJECT'; name: 'SatelliteRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'SatelliteEntity'; ofType: null; }; }; }; } }; }; }; - 'String': unknown; - 'StringFilterInput': { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; inputFields: [{ name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'eq'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'eqi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ne'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'nei'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'startsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'endsWith'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'contains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContains'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'containsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'notContainsi'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'gte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'lte'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'null'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'notNull'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'in'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'notIn'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'between'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; }; - 'Upload': unknown; - 'UploadFile': { kind: 'OBJECT'; name: 'UploadFile'; fields: { 'alternativeText': { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'caption': { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'ext': { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'formats': { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'hash': { name: 'hash'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'height': { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; 'mime': { name: 'mime'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'previewUrl': { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'provider': { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider_metadata': { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; } }; 'related': { name: 'related'; type: { kind: 'LIST'; name: never; ofType: { kind: 'UNION'; name: 'GenericMorph'; ofType: null; }; } }; 'size': { name: 'size'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'url': { name: 'url'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'width': { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; } }; }; }; - 'UploadFileEntity': { kind: 'OBJECT'; name: 'UploadFileEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFile'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'UploadFileEntityResponse': { kind: 'OBJECT'; name: 'UploadFileEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; } }; }; }; - 'UploadFileEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFileEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'UploadFileFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'INPUT_OBJECT'; name: 'FloatFilterInput'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'INPUT_OBJECT'; name: 'JSONFilterInput'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'UploadFileInput': { kind: 'INPUT_OBJECT'; name: 'UploadFileInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'alternativeText'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'caption'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'width'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'height'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'formats'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'hash'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'ext'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'mime'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'size'; type: { kind: 'SCALAR'; name: 'Float'; ofType: null; }; defaultValue: null }, { name: 'url'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'previewUrl'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider_metadata'; type: { kind: 'SCALAR'; name: 'JSON'; ofType: null; }; defaultValue: null }, { name: 'folder'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'folderPath'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; - 'UploadFileRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFileEntity'; ofType: null; }; }; }; } }; }; }; - 'UploadFolder': { kind: 'OBJECT'; name: 'UploadFolder'; fields: { 'children': { name: 'children'; type: { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'files': { name: 'files'; type: { kind: 'OBJECT'; name: 'UploadFileRelationResponseCollection'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'parent': { name: 'parent'; type: { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; ofType: null; } }; 'path': { name: 'path'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'pathId': { name: 'pathId'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'UploadFolderEntity': { kind: 'OBJECT'; name: 'UploadFolderEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UploadFolder'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'UploadFolderEntityResponse': { kind: 'OBJECT'; name: 'UploadFolderEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; } }; }; }; - 'UploadFolderEntityResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'UploadFolderFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'INPUT_OBJECT'; name: 'IntFilterInput'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'files'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFileFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'path'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UploadFolderFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'UploadFolderInput': { kind: 'INPUT_OBJECT'; name: 'UploadFolderInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'pathId'; type: { kind: 'SCALAR'; name: 'Int'; ofType: null; }; defaultValue: null }, { name: 'parent'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }, { name: 'children'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'files'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'path'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }]; }; - 'UploadFolderRelationResponseCollection': { kind: 'OBJECT'; name: 'UploadFolderRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UploadFolderEntity'; ofType: null; }; }; }; } }; }; }; - 'UsersPermissionsCreateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsCreateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; - 'UsersPermissionsDeleteRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsDeleteRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; - 'UsersPermissionsLoginInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsLoginInput'; inputFields: [{ name: 'identifier'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'provider'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: "\"local\"" }]; }; - 'UsersPermissionsLoginPayload': { kind: 'OBJECT'; name: 'UsersPermissionsLoginPayload'; fields: { 'jwt': { name: 'jwt'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'user': { name: 'user'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsMe'; ofType: null; }; } }; }; }; - 'UsersPermissionsMe': { kind: 'OBJECT'; name: 'UsersPermissionsMe'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; - 'UsersPermissionsMeRole': { kind: 'OBJECT'; name: 'UsersPermissionsMeRole'; fields: { 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; }; }; - 'UsersPermissionsPasswordPayload': { kind: 'OBJECT'; name: 'UsersPermissionsPasswordPayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; - 'UsersPermissionsPermission': { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; fields: { 'action': { name: 'action'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; }; }; - 'UsersPermissionsPermissionEntity': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermission'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'UsersPermissionsPermissionFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'action'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'UsersPermissionsPermissionRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionEntity'; ofType: null; }; }; }; } }; }; }; - 'UsersPermissionsRegisterInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRegisterInput'; inputFields: [{ name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }, { name: 'password'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; }; defaultValue: null }]; }; - 'UsersPermissionsRole': { kind: 'OBJECT'; name: 'UsersPermissionsRole'; fields: { 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'description': { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'name': { name: 'name'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'permissions': { name: 'permissions'; type: { kind: 'OBJECT'; name: 'UsersPermissionsPermissionRelationResponseCollection'; ofType: null; } }; 'type': { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'users': { name: 'users'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; ofType: null; } }; }; }; - 'UsersPermissionsRoleEntity': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRole'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'UsersPermissionsRoleEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; } }; }; }; - 'UsersPermissionsRoleEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'UsersPermissionsRoleFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'name'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsPermissionFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'users'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'UsersPermissionsRoleInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleInput'; inputFields: [{ name: 'name'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'description'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'type'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'permissions'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }, { name: 'users'; type: { kind: 'LIST'; name: never; ofType: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; }; defaultValue: null }]; }; - 'UsersPermissionsUpdateRolePayload': { kind: 'OBJECT'; name: 'UsersPermissionsUpdateRolePayload'; fields: { 'ok': { name: 'ok'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; } }; }; }; - 'UsersPermissionsUser': { kind: 'OBJECT'; name: 'UsersPermissionsUser'; fields: { 'blocked': { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'confirmed': { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; } }; 'createdAt': { name: 'createdAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'email': { name: 'email'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; 'provider': { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; } }; 'role': { name: 'role'; type: { kind: 'OBJECT'; name: 'UsersPermissionsRoleEntityResponse'; ofType: null; } }; 'updatedAt': { name: 'updatedAt'; type: { kind: 'SCALAR'; name: 'DateTime'; ofType: null; } }; 'username': { name: 'username'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'SCALAR'; name: 'String'; ofType: null; }; } }; }; }; - 'UsersPermissionsUserEntity': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; fields: { 'attributes': { name: 'attributes'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUser'; ofType: null; } }; 'id': { name: 'id'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; } }; }; }; - 'UsersPermissionsUserEntityResponse': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponse'; fields: { 'data': { name: 'data'; type: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; } }; }; }; - 'UsersPermissionsUserEntityResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserEntityResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; 'meta': { name: 'meta'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'ResponseCollectionMeta'; ofType: null; }; } }; }; }; - 'UsersPermissionsUserFiltersInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; inputFields: [{ name: 'id'; type: { kind: 'INPUT_OBJECT'; name: 'IDFilterInput'; ofType: null; }; defaultValue: null }, { name: 'username'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'INPUT_OBJECT'; name: 'StringFilterInput'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'INPUT_OBJECT'; name: 'BooleanFilterInput'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsRoleFiltersInput'; ofType: null; }; defaultValue: null }, { name: 'createdAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'updatedAt'; type: { kind: 'INPUT_OBJECT'; name: 'DateTimeFilterInput'; ofType: null; }; defaultValue: null }, { name: 'and'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'or'; type: { kind: 'LIST'; name: never; ofType: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; }; defaultValue: null }, { name: 'not'; type: { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserFiltersInput'; ofType: null; }; defaultValue: null }]; }; - 'UsersPermissionsUserInput': { kind: 'INPUT_OBJECT'; name: 'UsersPermissionsUserInput'; inputFields: [{ name: 'username'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'email'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'provider'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'password'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'resetPasswordToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmationToken'; type: { kind: 'SCALAR'; name: 'String'; ofType: null; }; defaultValue: null }, { name: 'confirmed'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'blocked'; type: { kind: 'SCALAR'; name: 'Boolean'; ofType: null; }; defaultValue: null }, { name: 'role'; type: { kind: 'SCALAR'; name: 'ID'; ofType: null; }; defaultValue: null }]; }; - 'UsersPermissionsUserRelationResponseCollection': { kind: 'OBJECT'; name: 'UsersPermissionsUserRelationResponseCollection'; fields: { 'data': { name: 'data'; type: { kind: 'NON_NULL'; name: never; ofType: { kind: 'LIST'; name: never; ofType: { kind: 'NON_NULL'; name: never; ofType: { kind: 'OBJECT'; name: 'UsersPermissionsUserEntity'; ofType: null; }; }; }; } }; }; }; - }; -}; - -import * as gqlTada from 'gql.tada'; - -declare module 'gql.tada' { - interface setupSchema { - introspection: introspection - } -} \ No newline at end of file diff --git a/frontend/src/unused_work_for_later_improvements/SolarActivity/SolarData.tsx b/frontend/src/unused_work_for_later_improvements/SolarActivity/SolarData.tsx deleted file mode 100644 index 04c562a..0000000 --- a/frontend/src/unused_work_for_later_improvements/SolarActivity/SolarData.tsx +++ /dev/null @@ -1,146 +0,0 @@ -"use client"; -import React, { useEffect, useRef, useState } from "react"; -import { Chart, registerables } from "chart.js"; -import { DateTime } from "luxon"; -import "chartjs-adapter-luxon"; - -interface SolarDataEntry { - [0]: string; // Date - [1]: string; // Kp value - [2]: "predicted" | "estimated" | "observed"; // Tag -} -type SolarData = SolarDataEntry[]; - -// Fetch solar activity data -async function getSolarData(): Promise { - const res = await fetch( - "https://services.swpc.noaa.gov/products/noaa-planetary-k-index-forecast.json", - { - next: { - revalidate: 60 * 60 * 24, // revalidate every 24 hours - }, - }, - ); - - if (!res.ok) { - throw new Error("Failed to fetch solar activity data"); - } - - return res.json(); -} - -export default function SolarDataComponent() { - const [solarData, setSolarData] = useState(null); - const chartRef = useRef(null); - - // Fetch data when component mounts - useEffect(() => { - getSolarData() - .then((data) => setSolarData(data)) - .catch((err) => console.error(err)); - }, []); - - // Create chart when data is fetched - useEffect(() => { - const solarDataChart = chartRef.current; - - if ( - solarData && - solarDataChart && - solarDataChart instanceof HTMLCanvasElement - ) { - Chart.register(...registerables); - - // Group solarData by tag - const groupedData = solarData.reduce( - (acc, data) => { - const tag = data[2]; - if (!acc[tag]) { - acc[tag] = []; - } - // Convert date to timestamp and parse Kp value - const timestamp = DateTime.fromSQL(data[0]).toMillis(); - acc[tag].push({ x: timestamp, y: parseFloat(data[1]) }); - return acc; - }, - {} as Record, - ); - - // Connect last 'observed' to first 'estimated' and last 'estimated' to first 'predicted' - if (groupedData["observed"] && groupedData["estimated"]) { - const lastObserved = - groupedData["observed"][groupedData["observed"].length - 1]; - groupedData["estimated"].unshift(lastObserved); - } - if (groupedData["estimated"] && groupedData["predicted"]) { - const lastEstimated = - groupedData["estimated"][ - groupedData["estimated"].length - 1 - ]; - groupedData["predicted"].unshift(lastEstimated); - } - - // Create datasets from the grouped and adjusted data - const datasets = Object.keys(groupedData).map((tag) => ({ - label: tag.charAt(0).toUpperCase() + tag.slice(1), - data: groupedData[tag], - fill: false, - borderColor: - tag === "predicted" - ? "rgb(255, 99, 132)" - : tag === "estimated" - ? "rgb(54, 162, 235)" - : "rgb(75, 192, 192)", - borderDash: tag === "predicted" ? [5, 5] : [], - tension: 0.3, - })); - - // Create chart - const chart = new Chart(solarDataChart, { - type: "line", - data: { - datasets, - }, - options: { - scales: { - x: { - type: "time", - time: { - unit: "day", - tooltipFormat: "MMM D", - displayFormats: { - day: "MMM D", - }, - }, - ticks: { - source: "auto", - }, - }, - y: { - beginAtZero: true, - title: { - display: true, - text: "Kp value", - }, - }, - }, - plugins: { - legend: { - display: true, - }, - }, - }, - }); - - return () => { - chart.destroy(); - }; - } - }, [solarData]); - - return ( -
- -
- ); -} diff --git a/frontend/src/unused_work_for_later_improvements/scrollLinkedDiv.tsx b/frontend/src/unused_work_for_later_improvements/scrollLinkedDiv.tsx deleted file mode 100644 index 8d92f47..0000000 --- a/frontend/src/unused_work_for_later_improvements/scrollLinkedDiv.tsx +++ /dev/null @@ -1,59 +0,0 @@ -"use client"; -import { motion, useScroll } from "framer-motion"; -import { useRef } from "react"; -import React from "react"; -function ScrollLinkedDiv({ - transformOrigin = "left", -}: { - transformOrigin?: string; -}) { - const ref = useRef(null); - const { scrollYProgress } = useScroll({ - target: ref, - offset: ["end end", "start start"], - }); - - return ( - - ); -} - -function WindowScrollLinkedDiv({ children }: { children?: React.ReactNode }) { - const ref = useRef(null); - const { scrollYProgress } = useScroll({ - target: ref, - offset: ["end end", "start start"], - }); - return ( - <> - - {children} - - - ); -} - -export { ScrollLinkedDiv, WindowScrollLinkedDiv }; diff --git a/frontend/src/unused_work_for_later_improvements/separator.tsx b/frontend/src/unused_work_for_later_improvements/separator.tsx deleted file mode 100644 index 7ac8dea..0000000 --- a/frontend/src/unused_work_for_later_improvements/separator.tsx +++ /dev/null @@ -1,33 +0,0 @@ -"use client"; - -import * as React from "react"; -import * as SeparatorPrimitive from "@radix-ui/react-separator"; - -import { cn } from "@/lib/utils"; - -const Separator = React.forwardRef< - React.ElementRef, - React.ComponentPropsWithoutRef ->( - ( - { className, orientation = "horizontal", decorative = true, ...props }, - ref, - ) => ( - - ), -); -Separator.displayName = SeparatorPrimitive.Root.displayName; - -export { Separator }; diff --git a/frontend/tests/componentTests/blocksrendererclient.spec.tsx b/frontend/tests/componentTests/blocksrendererclient.spec.tsx index 8e3f36d..f770a0f 100644 --- a/frontend/tests/componentTests/blocksrendererclient.spec.tsx +++ b/frontend/tests/componentTests/blocksrendererclient.spec.tsx @@ -1,5 +1,5 @@ import { test, expect } from "@playwright/experimental-ct-react"; -import BlockRendererClient from "@/components/BlockRendererClient"; +import BlockRendererClient from "@/components/shared/BlockRendererClient"; import { BlocksContent } from "@strapi/blocks-react-renderer"; test("Check content rendering in BlockRendererClient", async ({ mount }) => { diff --git a/frontend/tests/componentTests/fullblogcard.spec.tsx b/frontend/tests/componentTests/fullblogcard.spec.tsx deleted file mode 100644 index 85e3cd5..0000000 --- a/frontend/tests/componentTests/fullblogcard.spec.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { test, expect } from "@playwright/experimental-ct-react"; -import FullBlogCard from "@/components/fullBlogCard"; -import { BlogPost } from "@/app/blog/page"; - -test("FullBlogCard renders correctly", async ({ mount }) => { - const mockArticle: BlogPost = { - key: "mock-key", - title: "Mock Article Title", - content: [ - { - type: "paragraph", - children: [ - { - type: "text", - text: "Mock article content preview text...", - }, - ], - }, - ], - coverImage: "mock-cover-image.jpg", - datePublished: "2024-04-13", - tag: "Projects", - slug: "mock-article-slug", - }; - // Mount the FullBlogCard component with mock data - const component = await mount(); - - //Check if the component is visible - await expect(component).toBeVisible(); - - //Check if title is correct - await expect(component.getByTestId("blogCardTitle")).toContainText( - "Mock Article Title", - ); - - //Check if preview text for blog is visible - await expect( - component.getByText("Mock article content preview text..."), - ).toBeVisible(); - - //Wait for the image to actually have its src attribute set with the real image URL - await expect(component.getByRole("img")).toHaveAttribute( - "src", - /mock-cover-image\.jpg/, - ); - - //Check if datePublished is visible - await expect(component.getByText("April 13, 2024")).toBeVisible(); - - //Check if the tag is correct - await expect(component.getByTestId("articleTag")).toHaveText("Projects"); -}); diff --git a/frontend/tests/componentTests/pageheader.spec.tsx b/frontend/tests/componentTests/pageheader.spec.tsx index 3c7445d..27bdb44 100644 --- a/frontend/tests/componentTests/pageheader.spec.tsx +++ b/frontend/tests/componentTests/pageheader.spec.tsx @@ -3,7 +3,7 @@ import { PageHeader, PageHeaderAndSubtitle, PageSubtitle, -} from "@/components/PageHeader"; +} from "@/components/layout/PageHeader"; // Mock data const headerText = "Welcome to our Page"; diff --git a/frontend/tests/componentTests/satelliteStatsTableRow.spec.tsx b/frontend/tests/componentTests/satelliteStatsTableRow.spec.tsx deleted file mode 100644 index 17a3a83..0000000 --- a/frontend/tests/componentTests/satelliteStatsTableRow.spec.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import SatelliteStatsTableRow from "@/components/satelliteData/SatelliteStatsTableRow"; -import { test, expect } from "@playwright/experimental-ct-react"; - -// Mock satellite data -const mockSatellite = { - id: "satelliteId", - name: "Satellite Name", - previewImage: "Satellite Image", - slug: "SatelliteSlug", -}; - -test("should be clickable", async ({ mount }) => { - const component = await mount( - {}} - />, - ); - - await expect(component).toContainText("Satellite Name"); - - // Click the row - await component.click(); -}); diff --git a/frontend/tests/componentTests/sharebuttons.spec.tsx b/frontend/tests/componentTests/sharebuttons.spec.tsx index 55825ce..65f3543 100644 --- a/frontend/tests/componentTests/sharebuttons.spec.tsx +++ b/frontend/tests/componentTests/sharebuttons.spec.tsx @@ -1,6 +1,6 @@ // Import necessary dependencies import { test, expect } from "@playwright/experimental-ct-react"; -import ShareButtons from "@/components/ShareButtons"; +import ShareButtons from "@/app/blog/[articleSlug]/ShareButtons"; // Define the test test("Check ShareButtons component", async ({ mount }) => { diff --git a/frontend/tests/componentTests/slicepreviewtext.spec.tsx b/frontend/tests/componentTests/slicepreviewtext.spec.tsx index b09ec88..e15c840 100644 --- a/frontend/tests/componentTests/slicepreviewtext.spec.tsx +++ b/frontend/tests/componentTests/slicepreviewtext.spec.tsx @@ -1,5 +1,5 @@ import { test, expect } from "@playwright/experimental-ct-react"; -import { SlicePreviewText } from "@/components/SlicePreviewText"; +import { slicePreviewText } from "@/lib/SlicePreviewText"; import { BlocksContent } from "@strapi/blocks-react-renderer"; test("Check SlicePreviewText function", async () => { @@ -44,7 +44,7 @@ test("Check SlicePreviewText function", async () => { }, ]; - const slicedText = SlicePreviewText(mockContent); + const slicedText = slicePreviewText(mockContent); // Assert that the sliced text contains the expected content expect(slicedText).toContain( diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 9ace339..025de6d 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -19,7 +19,8 @@ { "name": "@0no-co/graphqlsp", "schema": "http://localhost:1337/graphql", - "tadaOutputLocation": "./src/tada/graphql-env.d.ts", + "tadaOutputLocation": "./src/lib/tada/graphql-env.d.ts", + "tadaTurboLocation": "./src/lib/tada/graphql-turbo.d.ts", }, ], "paths": {