diff --git a/backend/src/api/article/content-types/article/schema.json b/backend/src/api/article/content-types/article/schema.json index fc89d44..06c0fef 100644 --- a/backend/src/api/article/content-types/article/schema.json +++ b/backend/src/api/article/content-types/article/schema.json @@ -12,19 +12,15 @@ }, "pluginOptions": {}, "attributes": { - "title": { + "previewCardTitle": { "type": "string", "required": true, "unique": true }, "slug": { "type": "uid", - "targetField": "title", "required": true }, - "subtitle": { - "type": "string" - }, "datePublished": { "type": "date", "required": true diff --git a/backend/types/generated/contentTypes.d.ts b/backend/types/generated/contentTypes.d.ts index 2820503..abd7518 100644 --- a/backend/types/generated/contentTypes.d.ts +++ b/backend/types/generated/contentTypes.d.ts @@ -800,9 +800,8 @@ export interface ApiArticleArticle extends Schema.CollectionType { draftAndPublish: true; }; attributes: { - title: Attribute.String & Attribute.Required & Attribute.Unique; - slug: Attribute.UID<'api::article.article', 'title'> & Attribute.Required; - subtitle: Attribute.String; + previewCardTitle: Attribute.String & Attribute.Required & Attribute.Unique; + slug: Attribute.UID & Attribute.Required; datePublished: Attribute.Date & Attribute.Required; coverImage: Attribute.Media; body: Attribute.Blocks & Attribute.Required; diff --git a/frontend/.env.development b/frontend/.env.development index 45430ae..6daed48 100644 --- a/frontend/.env.development +++ b/frontend/.env.development @@ -1,4 +1,2 @@ # Database url for outside requests -OUTSIDE_STRAPI_URL=http://localhost:1337 - -INTERNAL_STRAPI_URL=http://localhost:1337 \ No newline at end of file +STRAPI_URL=http://localhost:1337 diff --git a/frontend/.env.production b/frontend/.env.production index 8bdef3f..4b3d365 100644 --- a/frontend/.env.production +++ b/frontend/.env.production @@ -1,5 +1,3 @@ # Database url for outside requests, set in github repo variables -OUTSIDE_STRAPI_URL=http://web.hypso.ies.ntnu.no:1337 +STRAPI_URL=http://web.hypso.ies.ntnu.no:1337 -# Database url for internal requests between the docker containers, set in github repo variables -INTERNAL_STRAPI_URL=http://backend:1337 diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs index d26e413..5d83319 100644 --- a/frontend/next.config.mjs +++ b/frontend/next.config.mjs @@ -15,6 +15,10 @@ const nextConfig = { hostname: "web.hypso.ies.ntnu.no", port: '1337' }, + { + protocol: "http", + hostname: "backend", + }, ], }, }; diff --git a/frontend/package-lock.json b/frontend/package-lock.json index d714e15..161349f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,12 +32,14 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "cmdk": "0.2.0", + "country-emoji": "^1.5.6", "framer-motion": "^11.0.24", "globe.gl": "^2.32.2", "gsap": "^3.12.5", "lucide-react": "^0.314.0", "luxon": "^3.4.4", "next": "14.1.0", + "next-share": "^0.27.0", "next-themes": "^0.2.1", "node-geometry-library": "^1.2.6", "ol": "^8.2.0", @@ -9987,6 +9989,11 @@ } } }, + "node_modules/country-emoji": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/country-emoji/-/country-emoji-1.5.6.tgz", + "integrity": "sha512-pSB8OOROfimFc2bcN+H41DuzXYIod/JQ6SgF4pYXkRCm9f8uF1JAJ0vXPhenug6xkpt3Gv33mdypMXB49CJWRA==" + }, "node_modules/country-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", @@ -14587,6 +14594,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/jsonp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", + "integrity": "sha512-pfog5gdDxPdV4eP7Kg87M8/bHgshlZ5pybl+yKxAnCZ5O7lCIn7Ixydj03wOlnDQesky2BPyA91SQ+5Y/mNwzw==", + "dependencies": { + "debug": "^2.1.3" + } + }, + "node_modules/jsonp/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/jsonp/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/jspdf": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", @@ -16055,6 +16083,21 @@ } } }, + "node_modules/next-share": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/next-share/-/next-share-0.27.0.tgz", + "integrity": "sha512-Fmfl4LIL61g10vtiDECVldxtNgVNd4OQgnI5vk9IJxn/WMZLdhniUtV15xz4PGpo8UuDdTHwmDT8R/CP60EQHA==", + "dependencies": { + "jsonp": "^0.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": ">=17.0.2" + } + }, "node_modules/next-themes": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.2.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index 0b8be56..5fe8005 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -40,12 +40,14 @@ "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "cmdk": "0.2.0", + "country-emoji": "^1.5.6", "framer-motion": "^11.0.24", "globe.gl": "^2.32.2", "gsap": "^3.12.5", "lucide-react": "^0.314.0", "luxon": "^3.4.4", "next": "14.1.0", + "next-share": "^0.27.0", "next-themes": "^0.2.1", "node-geometry-library": "^1.2.6", "ol": "^8.2.0", diff --git a/frontend/src/__generated__/gql.ts b/frontend/src/__generated__/gql.ts index b758d1b..55667a4 100644 --- a/frontend/src/__generated__/gql.ts +++ b/frontend/src/__generated__/gql.ts @@ -13,12 +13,11 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/ * 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 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 subtitle\n title\n }\n }\n }\n }\n \n ": types.ArticleWithSlugDocument, + "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 previewCardTitle\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 previewImage {\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 celestrakURL\n catalogNumberNORAD\n name\n previewImage {\n data {\n attributes {\n url\n }\n }\n }\n missionStatus\n }\n }\n }\n }\n": types.Get_SatellitesDocument, - "query Satellites($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n attributes {\n celestrakURL\n catalogNumberNORAD\n }\n }\n }\n }\n ": types.SatellitesDocument, - "\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 title\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n subtitle\n Tag\n }\n }\n meta {\n pagination {\n total\n }\n }\n }\n}\n": types.Get_ArticlesDocument, + "\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 previewCardTitle\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 MostRecentImages {\n mostRecentImages(sort: [\"publishedAt:desc\"]) {\n data {\n attributes {\n mostRecentImage {\n data {\n attributes {\n url\n }\n }\n }\n satellite {\n data {\n attributes {\n catalogNumberNORAD\n name\n }\n }\n }\n createdAt\n updatedAt\n publishedAt\n }\n }\n }\n}\n\n": types.MostRecentImagesDocument, "query GET_SATELLITE_INFO($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n id\n attributes {\n celestrakURL\n catalogNumberNORAD\n content\n name\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 }\n }\n }\n }\n ": types.Get_Satellite_InfoDocument, }; @@ -40,7 +39,7 @@ 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 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 subtitle\n title\n }\n }\n }\n }\n \n "): (typeof documents)["query ArticleWithSlug($articlesFilters: ArticleFiltersInput) {\n articles(filters: $articlesFilters) {\n data {\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 subtitle\n title\n }\n }\n }\n }\n \n "]; +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 previewCardTitle\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 previewCardTitle\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. */ @@ -56,11 +55,7 @@ export function gql(source: "\nquery GET_SATELLITES {\n satellites {\n d /** * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function gql(source: "query Satellites($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n attributes {\n celestrakURL\n catalogNumberNORAD\n }\n }\n }\n }\n "): (typeof documents)["query Satellites($filters: SatelliteFiltersInput) {\n satellites(filters: $filters) {\n data {\n attributes {\n celestrakURL\n catalogNumberNORAD\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 title\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n subtitle\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 title\n datePublished\n body\n coverImage {\n data {\n attributes {\n url\n }\n }\n }\n createdAt\n publishedAt\n slug\n subtitle\n Tag\n }\n }\n meta {\n pagination {\n total\n }\n }\n }\n}\n"]; +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 previewCardTitle\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 previewCardTitle\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. */ diff --git a/frontend/src/__generated__/graphql.ts b/frontend/src/__generated__/graphql.ts index dd9e9d3..185b978 100644 --- a/frontend/src/__generated__/graphql.ts +++ b/frontend/src/__generated__/graphql.ts @@ -32,10 +32,9 @@ export type Article = { coverImage?: Maybe; createdAt?: Maybe; datePublished: Scalars['Date']['output']; + previewCardTitle: Scalars['String']['output']; publishedAt?: Maybe; slug: Scalars['String']['output']; - subtitle?: Maybe; - title: Scalars['String']['output']; updatedAt?: Maybe; }; @@ -66,10 +65,9 @@ export type ArticleFiltersInput = { id?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; + previewCardTitle?: InputMaybe; publishedAt?: InputMaybe; slug?: InputMaybe; - subtitle?: InputMaybe; - title?: InputMaybe; updatedAt?: InputMaybe; }; @@ -79,10 +77,9 @@ export type ArticleInput = { body?: InputMaybe; coverImage?: InputMaybe; datePublished?: InputMaybe; + previewCardTitle?: InputMaybe; publishedAt?: InputMaybe; slug?: InputMaybe; - subtitle?: InputMaybe; - title?: InputMaybe; }; export type ArticleRelationResponseCollection = { @@ -1400,7 +1397,7 @@ export type ArticleWithSlugQueryVariables = Exact<{ }>; -export type ArticleWithSlugQuery = { __typename?: 'Query', articles?: { __typename?: 'ArticleEntityResponseCollection', data: Array<{ __typename?: 'ArticleEntity', attributes?: { __typename?: 'Article', body: any, datePublished: any, subtitle?: string | null, title: 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 ArticleWithSlugQuery = { __typename?: 'Query', articles?: { __typename?: 'ArticleEntityResponseCollection', data: Array<{ __typename?: 'ArticleEntity', id?: string | null, attributes?: { __typename?: 'Article', body: any, datePublished: any, previewCardTitle: 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; @@ -1419,20 +1416,13 @@ 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', celestrakURL?: string | null, catalogNumberNORAD?: string | null, name: string, missionStatus?: string | null, previewImage?: { __typename?: 'UploadFileEntityResponse', data?: { __typename?: 'UploadFileEntity', attributes?: { __typename?: 'UploadFile', url: string } | null } | null } | null } | null }> } | null }; -export type SatellitesQueryVariables = Exact<{ - filters?: InputMaybe; -}>; - - -export type SatellitesQuery = { __typename?: 'Query', satellites?: { __typename?: 'SatelliteEntityResponseCollection', data: Array<{ __typename?: 'SatelliteEntity', attributes?: { __typename?: 'Satellite', celestrakURL?: string | null, catalogNumberNORAD?: string | 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', title: string, datePublished: any, body: any, createdAt?: any | null, publishedAt?: any | null, slug: string, subtitle?: string | null, 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 Get_ArticlesQuery = { __typename?: 'Query', articles?: { __typename?: 'ArticleEntityResponseCollection', data: Array<{ __typename?: 'ArticleEntity', id?: string | null, attributes?: { __typename?: 'Article', previewCardTitle: 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 MostRecentImagesQueryVariables = Exact<{ [key: string]: never; }>; @@ -1447,11 +1437,10 @@ export type Get_Satellite_InfoQueryVariables = Exact<{ export type Get_Satellite_InfoQuery = { __typename?: 'Query', satellites?: { __typename?: 'SatelliteEntityResponseCollection', data: Array<{ __typename?: 'SatelliteEntity', id?: string | null, attributes?: { __typename?: 'Satellite', celestrakURL?: string | null, catalogNumberNORAD?: string | null, content?: any | null, name: string, 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 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":"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":"subtitle"}},{"kind":"Field","name":{"kind":"Name","value":"title"}}]}}]}}]}}]}}]} as unknown as DocumentNode; +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":"previewCardTitle"}}]}}]}}]}}]}}]} as unknown as DocumentNode; 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":"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":"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":"celestrakURL"}},{"kind":"Field","name":{"kind":"Name","value":"catalogNumberNORAD"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"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":"missionStatus"}}]}}]}}]}}]}}]} as unknown as DocumentNode; -export const SatellitesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"Satellites"},"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":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"celestrakURL"}},{"kind":"Field","name":{"kind":"Name","value":"catalogNumberNORAD"}}]}}]}}]}}]}}]} 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":"title"}},{"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":"subtitle"}},{"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 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":"previewCardTitle"}},{"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 MostRecentImagesDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"MostRecentImages"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mostRecentImages"},"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":"attributes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"mostRecentImage"},"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":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"publishedAt"}}]}}]}}]}}]}}]} as unknown as DocumentNode; 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":"celestrakURL"}},{"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":"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"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/frontend/src/app/blog/[articleSlug]/page.tsx b/frontend/src/app/blog/[articleSlug]/page.tsx index c149149..f08bcab 100644 --- a/frontend/src/app/blog/[articleSlug]/page.tsx +++ b/frontend/src/app/blog/[articleSlug]/page.tsx @@ -1,16 +1,19 @@ -export const runtime = "edge"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; +import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { BlocksContent } from "@strapi/blocks-react-renderer"; import BlockRendererClient from "@/components/BlockRendererClient"; import { gql } from "@/__generated__/gql"; import { getClient } from "@/lib/ApolloClient"; -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; +import { AvatarImageFix } from "@/components/AvatarImageFix"; +import ShareButtons from "@/components/ShareButtons"; + +const STRAPI_URL = process.env.STRAPI_URL; const GET_ARTICLE_BY_SLUG = gql( `query ArticleWithSlug($articlesFilters: ArticleFiltersInput) { articles(filters: $articlesFilters) { data { + id attributes { author { data { @@ -35,8 +38,7 @@ const GET_ARTICLE_BY_SLUG = gql( } } datePublished - subtitle - title + previewCardTitle } } } @@ -71,8 +73,8 @@ export default async function Page({ graphqlData.data.articles?.data[0]?.attributes?.author?.data?.attributes ?.avatar?.data?.attributes?.url; - if (OUTSIDE_STRAPI_URL && avatarURL != undefined) { - avatarURL = OUTSIDE_STRAPI_URL + avatarURL; + if (STRAPI_URL && avatarURL != undefined) { + avatarURL = STRAPI_URL + avatarURL; } const article = graphqlData.data.articles?.data[0]; @@ -82,15 +84,15 @@ export default async function Page({ const content: BlocksContent = article?.attributes?.body ?? []; return ( - <> -
-

- {article?.attributes?.title} -

-
+
+
+ +
+
+
{avatarURL && ( - + {// Get initials from author name authorName @@ -105,13 +107,10 @@ export default async function Page({

{datePublished}

-

- {article?.attributes?.subtitle}{" "} -

-
- +
+
- +
); } diff --git a/frontend/src/app/blog/blogDataCards.tsx b/frontend/src/app/blog/blogDataCards.tsx index d40a1d2..c9d38f9 100644 --- a/frontend/src/app/blog/blogDataCards.tsx +++ b/frontend/src/app/blog/blogDataCards.tsx @@ -1,7 +1,7 @@ -export const runtime = "edge"; import FullBlogCard from "@/components/fullBlogCard"; import BlogpageButtons from "@/components/BlogpageButtons"; import { BlogPost } from "./page"; +import React from "react"; export default async function BlogDataCards({ articles, @@ -17,34 +17,34 @@ export default async function BlogDataCards({ } return ( -
- {articles.map((article: any) => { - return ( -
- {" "} - {article.firstArticle ? : null} -
- ); - })} -
+ <> +
+ + {/* Only map fist article */} + {articles.map((article: BlogPost) => { + if (article.firstArticle) { + return ( + + + + ); + } + })} + + {articles.map((article: BlogPost) => { + if (article.firstArticle) { + return; + } + return ( + + + + ); + })} +
+ ); } diff --git a/frontend/src/app/blog/layout.tsx b/frontend/src/app/blog/layout.tsx new file mode 100644 index 0000000..3eab227 --- /dev/null +++ b/frontend/src/app/blog/layout.tsx @@ -0,0 +1,5 @@ +import { PagePadding } from "@/components/PagePadding"; +import React from "react"; +export default function Layout({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/frontend/src/app/blog/page.tsx b/frontend/src/app/blog/page.tsx index 9b5422b..f09dca9 100644 --- a/frontend/src/app/blog/page.tsx +++ b/frontend/src/app/blog/page.tsx @@ -3,6 +3,11 @@ import BlogDataCards from "./blogDataCards"; import { BlocksContent } from "@strapi/blocks-react-renderer"; import { Enum_Article_Tag } from "@/__generated__/graphql"; import fetchArticlePages from "@/lib/data/fetchArticleInfo"; +import { + PageHeaderAndSubtitle, + PageSubtitle, + PageHeader, +} from "@/components/PageHeader"; export interface BlogPost { key: string | null | undefined; @@ -41,10 +46,19 @@ export default async function BlogPage({ const { articleList, totalArticles } = result; return ( -
- {/* */} - - -
+ <> + + Blog + + Welcome to the blog! Here you can find all of the articles + we have written. + + +
+ {/* */} + + +
+ ); } diff --git a/frontend/src/app/projects/[projectSlug]/page.tsx b/frontend/src/app/projects/[projectSlug]/page.tsx index 24cc2e0..8518853 100644 --- a/frontend/src/app/projects/[projectSlug]/page.tsx +++ b/frontend/src/app/projects/[projectSlug]/page.tsx @@ -1,11 +1,10 @@ -export const runtime = "edge"; import { gql } from "@/__generated__/gql"; import BlockRendererClient from "@/components/BlockRendererClient"; import { getClient } from "@/lib/ApolloClient"; import { BlocksContent } from "@strapi/blocks-react-renderer"; import RelatedProjectsAndSatellites from "@/components/RelatedProjectsAndSatellites"; import { ProjectOrSatellite } from "@/app/satellites/[satelliteSlug]/page"; -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; const GET_PROJECT_BY_SLUG = gql(` query Projects($projectFilters: ProjectFiltersInput) { @@ -70,8 +69,8 @@ export default async function Page({ let projectTitle = projects?.attributes?.slug; - if (OUTSIDE_STRAPI_URL && projectTitle != undefined) { - projectTitle = OUTSIDE_STRAPI_URL + projectTitle; + if (STRAPI_URL && projectTitle != undefined) { + projectTitle = STRAPI_URL + projectTitle; } return (
diff --git a/frontend/src/app/projects/layout.tsx b/frontend/src/app/projects/layout.tsx new file mode 100644 index 0000000..3eab227 --- /dev/null +++ b/frontend/src/app/projects/layout.tsx @@ -0,0 +1,5 @@ +import { PagePadding } from "@/components/PagePadding"; +import React from "react"; +export default function Layout({ children }: { children: React.ReactNode }) { + return {children}; +} diff --git a/frontend/src/app/projects/page.tsx b/frontend/src/app/projects/page.tsx index 76d8257..9c5270c 100644 --- a/frontend/src/app/projects/page.tsx +++ b/frontend/src/app/projects/page.tsx @@ -1,12 +1,16 @@ -export const runtime = "edge"; import { gql } from "@/__generated__/gql"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { getClient } from "@/lib/ApolloClient"; import Link from "next/link"; import Image from "next/image"; import { SlicePreviewText } from "@/components/SlicePreviewText"; +import { + PageHeader, + PageHeaderAndSubtitle, + PageSubtitle, +} from "@/components/PageHeader"; import { OuiImage } from "@/components/fullBlogCard"; -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; const GET_PROJECTS = gql(` query GET_PROJECTS { @@ -53,20 +57,22 @@ export default async function ProjectsPage() { return (
-

Our Projects

-

- Information about our various projects are shown here. -

+ + Our Projects + + Information about our various projects are shown here. + +
-
+
{graphqlData.data.projects.data.map((project) => { let previewImage = project?.attributes?.previewImage?.data?.attributes ?.url; - if (OUTSIDE_STRAPI_URL && previewImage != undefined) { - previewImage = OUTSIDE_STRAPI_URL + previewImage; + if (STRAPI_URL && previewImage != undefined) { + previewImage = STRAPI_URL + previewImage; } return ( {children}; +} diff --git a/frontend/src/app/satellites/page.tsx b/frontend/src/app/satellites/page.tsx index 037a43c..eae274a 100644 --- a/frontend/src/app/satellites/page.tsx +++ b/frontend/src/app/satellites/page.tsx @@ -1,9 +1,6 @@ -export const runtime = "edge"; import { gql } from "@/__generated__/gql"; +import SatelliteStatsTableRow from "@/components/satelliteData/SatelliteStatsTableRow"; import { getClient } from "@/lib/ApolloClient"; -import SatelliteCard from "@/components/ui/satelliteCard"; - -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; const GET_SATELLITES = gql(` query GET_SATELLITES { satellites { @@ -34,26 +31,35 @@ export default async function Satellites() { }); return ( -
- {graphqlData?.data?.satellites?.data?.map((satellite: any) => { - let previewImage = - satellite?.attributes?.previewImage?.data?.attributes - ?.url; - if (OUTSIDE_STRAPI_URL && previewImage != undefined) { - previewImage = OUTSIDE_STRAPI_URL + previewImage; - } - let satelliteName = satellite?.attributes?.name ?? ""; - let missionStatus = - satellite?.attributes?.missionStatus ?? ""; - return ( - // eslint-disable-next-line react/jsx-key - - ); - })} +
+

+ Satellites +

+ + + + + + + + + + + + {graphqlData?.data?.satellites?.data?.map( + (satellite: any) => { + let satelliteName = + satellite?.attributes?.name ?? ""; + return ( + + ); + }, + )} + +
SatelliteSpeedAltitudeLatitudeLongitude
); } catch (error) { diff --git a/frontend/src/components/AvatarImageFix.tsx b/frontend/src/components/AvatarImageFix.tsx new file mode 100644 index 0000000..a3bb7d4 --- /dev/null +++ b/frontend/src/components/AvatarImageFix.tsx @@ -0,0 +1,19 @@ +import React from "react"; +import * as AvatarPrimitive from "@radix-ui/react-avatar"; +import { cn } from "@/lib/utils"; +const STRAPI_URL = process.env.STRAPI_URL; + +const AvatarImageFix = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, src, ...props }, ref) => ( + +)); +AvatarImageFix.displayName = "AvatarImageFix"; + +export { AvatarImageFix }; diff --git a/frontend/src/components/BlogpageButtons.tsx b/frontend/src/components/BlogpageButtons.tsx index ddb342d..ca5010d 100644 --- a/frontend/src/components/BlogpageButtons.tsx +++ b/frontend/src/components/BlogpageButtons.tsx @@ -2,8 +2,9 @@ import { useState } from "react"; import { Button } from "./ui/button"; import { useRouter, useSearchParams } from "next/navigation"; +import { cn } from "@/lib/utils"; -export default function BlogpageButtons() { +export default function BlogpageButtons({ className }: { className?: string }) { const [activeButton, setActiveButton] = useState("All Posts"); const router = useRouter(); const page = useSearchParams().get("currentPage"); @@ -18,21 +19,26 @@ export default function BlogpageButtons() { }; return ( -
+
); diff --git a/frontend/src/components/satelliteData/SatelliteStatsTable.tsx b/frontend/src/components/satelliteData/SatelliteStatsTable.tsx index 1f18fae..769eef3 100644 --- a/frontend/src/components/satelliteData/SatelliteStatsTable.tsx +++ b/frontend/src/components/satelliteData/SatelliteStatsTable.tsx @@ -86,3 +86,22 @@ export default function SatelliteStatsTable({ ); } + +import type { SVGProps } from "react"; + +export function MaterialSymbolsSpeedOutline(props: SVGProps) { + return ( + + + + ); +} diff --git a/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx b/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx new file mode 100644 index 0000000..b2678bf --- /dev/null +++ b/frontend/src/components/satelliteData/SatelliteStatsTableRow.tsx @@ -0,0 +1,80 @@ +"use client"; +import { useState, useEffect } from "react"; +import { convertSatrec, SatelliteInfo } from "@/lib/convertSatrec"; +import { useSatelliteStore } from "@/lib/store"; +import Link from "next/link"; + +const updateInterval = 10; + +export default function SatelliteStatsTableRow({ + satName, +}: { + satName: string; +}) { + const { satelliteData, fetchAndSetSatelliteData } = useSatelliteStore(); + const [satelliteInfo, setSatelliteInfo] = useState( + null, + ); + + // Fetch satellite data on component mount + useEffect(() => { + fetchAndSetSatelliteData(satName); + }, [fetchAndSetSatelliteData, satName]); + + // Update satellite info every `updateInterval` ms + useEffect(() => { + const intervalId = setInterval(() => { + // Access satellite data by name + const satData = satelliteData[satName]; + if (satData) { + const updatedInfo = convertSatrec(satData.satrec, satData.name); + setSatelliteInfo(updatedInfo); + } + }, updateInterval); + + // Clear interval on component unmount + return () => clearInterval(intervalId); + }, [satelliteData, satName]); + + // Display loading message if satellite info is not available + if (!satelliteInfo) { + return ( + + Loading... + Loading... + Loading... + Loading... + Loading... + + ); + } + return ( + + + + {satName} + + + + + {satelliteInfo.velocity + " km/s"} + + + + + {satelliteInfo.altitude + " km"} + + + + + {satelliteInfo.latitudeDeg + "° N"} + + + + + {satelliteInfo.longitudeDeg + "° E"} + + + + ); +} diff --git a/frontend/src/components/ui/blogCard.tsx b/frontend/src/components/ui/blogCard.tsx index c2531bf..f1389dc 100644 --- a/frontend/src/components/ui/blogCard.tsx +++ b/frontend/src/components/ui/blogCard.tsx @@ -9,7 +9,7 @@ const BlogCard = React.forwardRef<
(({ className, ...props }, ref) => (
)); @@ -36,7 +36,7 @@ const BlogCardTitle = React.forwardRef<

->(({ className, ...props }, ref) => ( -

-)); -BlogCardDescription.displayName = "BlogCardDescription"; - const BlogCardContent = React.forwardRef< HTMLDivElement, React.HTMLAttributes >(({ className, ...props }, ref) => ( -

+
)); BlogCardContent.displayName = "BlogCardContent"; @@ -68,11 +56,7 @@ const BlogCardFooter = React.forwardRef< HTMLDivElement, React.HTMLAttributes >(({ className, ...props }, ref) => ( -
+
)); BlogCardFooter.displayName = "BlogCardFooter"; @@ -81,6 +65,5 @@ export { BlogCardHeader, BlogCardFooter, BlogCardTitle, - BlogCardDescription, BlogCardContent, }; diff --git a/frontend/src/components/ui/satelliteCard.tsx b/frontend/src/components/ui/satelliteCard.tsx index 32a1257..d5cd40b 100644 --- a/frontend/src/components/ui/satelliteCard.tsx +++ b/frontend/src/components/ui/satelliteCard.tsx @@ -1,5 +1,6 @@ "use client"; import React from "react"; +import Link from "next/link"; import Image from "next/image"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import SatelliteStatsTable from "@/components/satelliteData/SatelliteStatsTable"; @@ -11,29 +12,25 @@ interface SatelliteCardProps { satelliteName: string; missionStatus: string; previewImage?: string; // Optional + satelliteId: Number; } const SatelliteCard: React.FC = ({ satelliteName, missionStatus, previewImage, + satelliteId, }) => { /*const setSelectedSatellite = useSatelliteStore( (state) => state.setSelectedSatellite, );*/ - const handleSatelliteCardClick = (satelliteName: string) => () => { - //setSelectedSatellite(satelliteName); - window.location.href = `/satellites/${encodeURIComponent(satelliteName)}`; - }; - return ( -
- {" "} - {/* Ensure the link is clickable and accessible */} {satelliteName} @@ -46,9 +43,9 @@ const SatelliteCard: React.FC = ({ {previewImage ? ( {satelliteName} ) : ( @@ -58,7 +55,7 @@ const SatelliteCard: React.FC = ({ )} -
+ ); }; diff --git a/frontend/src/components/wrappers/ApolloWrapper.tsx b/frontend/src/components/wrappers/ApolloWrapper.tsx index e1f8b7a..53f220e 100644 --- a/frontend/src/components/wrappers/ApolloWrapper.tsx +++ b/frontend/src/components/wrappers/ApolloWrapper.tsx @@ -10,13 +10,13 @@ import { SSRMultipartLink, } from "@apollo/experimental-nextjs-app-support/ssr"; -const INTERNAL_STRAPI_URL = process.env.INTERNAL_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; // have a function to create a client for you function makeClient() { const httpLink = new HttpLink({ // this needs to be an absolute url, as relative urls cannot be used in SSR - uri: INTERNAL_STRAPI_URL + "/graphql", + uri: STRAPI_URL + "/graphql", // you can disable result caching here if you want to // (this does not work if you are rendering your page with `export const dynamic = "force-static"`) fetchOptions: { cache: "no-store" }, diff --git a/frontend/src/lib/ApolloClient.js b/frontend/src/lib/ApolloClient.js index e56aa2e..86cd93e 100644 --- a/frontend/src/lib/ApolloClient.js +++ b/frontend/src/lib/ApolloClient.js @@ -1,14 +1,14 @@ import { ApolloClient, HttpLink, InMemoryCache } from "@apollo/client"; import { registerApolloClient } from "@apollo/experimental-nextjs-app-support/rsc"; -const INTERNAL_STRAPI_URL = process.env.INTERNAL_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; export const { getClient } = registerApolloClient(() => { return new ApolloClient({ cache: new InMemoryCache(), link: new HttpLink({ // this needs to be an absolute url, as relative urls cannot be used in SSR - uri: INTERNAL_STRAPI_URL + "/graphql", + uri: STRAPI_URL + "/graphql", // you can disable result caching here if you want to // (this does not work if you are rendering your page with `export const dynamic = "force-static"`) fetchOptions: { cache: "no-store" }, diff --git a/frontend/src/lib/data/fetchArticleInfo.tsx b/frontend/src/lib/data/fetchArticleInfo.tsx index d829ac8..122272e 100644 --- a/frontend/src/lib/data/fetchArticleInfo.tsx +++ b/frontend/src/lib/data/fetchArticleInfo.tsx @@ -4,7 +4,7 @@ import { BlocksContent } from "@strapi/blocks-react-renderer"; import { Enum_Article_Tag } from "@/__generated__/graphql"; import { BlogPost } from "@/app/blog/page"; -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; const GET_ARTICLES = gql(` query GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) { @@ -26,7 +26,7 @@ query GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) { } } } - title + previewCardTitle datePublished body coverImage { @@ -39,7 +39,6 @@ query GET_ARTICLES($pagination: PaginationArg, $filters: ArticleFiltersInput) { createdAt publishedAt slug - subtitle Tag } } @@ -106,8 +105,8 @@ export default async function fetchArticlePages({ article?.attributes?.author?.data?.attributes?.avatar?.data ?.attributes?.url; - if (OUTSIDE_STRAPI_URL && avatarURL != undefined) { - avatarURL = OUTSIDE_STRAPI_URL + avatarURL; + if (STRAPI_URL && avatarURL != undefined) { + avatarURL = STRAPI_URL + avatarURL; } const authorName: string | undefined = @@ -117,12 +116,12 @@ export default async function fetchArticlePages({ const datePublished: any = article?.attributes?.datePublished; let coverImage: string | undefined = article?.attributes?.coverImage?.data?.attributes?.url; - if (OUTSIDE_STRAPI_URL && coverImage != undefined) { - coverImage = OUTSIDE_STRAPI_URL + coverImage; + if (STRAPI_URL && coverImage != undefined) { + coverImage = STRAPI_URL + coverImage; } let content: BlocksContent = article?.attributes?.body ?? []; - const title: string | undefined = article?.attributes?.title; + const title: string | undefined = article?.attributes?.previewCardTitle; for (const block of content) { if (block.type === "paragraph") { @@ -139,7 +138,7 @@ export default async function fetchArticlePages({ coverImage, datePublished, tag, - HOST_URL: OUTSIDE_STRAPI_URL, + HOST_URL: STRAPI_URL, authorName, avatarURL, slug: article.attributes.slug, diff --git a/frontend/src/lib/data/fetchMostRecentImage.tsx b/frontend/src/lib/data/fetchMostRecentImage.tsx index f10d9c6..4bc9ef8 100644 --- a/frontend/src/lib/data/fetchMostRecentImage.tsx +++ b/frontend/src/lib/data/fetchMostRecentImage.tsx @@ -2,7 +2,7 @@ import { gql } from "@/__generated__/gql"; import { getClient } from "../ApolloClient"; import Image from "next/image"; -const OUTSIDE_STRAPI_URL = process.env.OUTSIDE_STRAPI_URL; +const STRAPI_URL = process.env.STRAPI_URL; const GET_MOST_RECENT_IMAGE = gql(` query MostRecentImages { @@ -43,8 +43,8 @@ export default async function fetchMostrecentImage() { graphqlData.data.mostRecentImages?.data[0]?.attributes?.mostRecentImage ?.data?.attributes?.url; - if (OUTSIDE_STRAPI_URL && mostRecentImageURL != undefined) { - mostRecentImageURL = OUTSIDE_STRAPI_URL + mostRecentImageURL; + if (STRAPI_URL && mostRecentImageURL != undefined) { + mostRecentImageURL = STRAPI_URL + mostRecentImageURL; } else { mostRecentImageURL = ""; } diff --git a/package-lock.json b/package-lock.json index 7d0810b..0a251b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -136,6 +136,11 @@ "node": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -220,6 +225,14 @@ "url": "https://opencollective.com/date-fns" } }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -329,6 +342,12 @@ "node": ">=0.12.0" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -340,11 +359,31 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsonp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.2.1.tgz", + "integrity": "sha512-pfog5gdDxPdV4eP7Kg87M8/bHgshlZ5pybl+yKxAnCZ5O7lCIn7Ixydj03wOlnDQesky2BPyA91SQ+5Y/mNwzw==", + "dependencies": { + "debug": "^2.1.3" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -365,6 +404,26 @@ "node": ">=8.6" } }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/next-share": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/next-share/-/next-share-0.27.0.tgz", + "integrity": "sha512-Fmfl4LIL61g10vtiDECVldxtNgVNd4OQgnI5vk9IJxn/WMZLdhniUtV15xz4PGpo8UuDdTHwmDT8R/CP60EQHA==", + "dependencies": { + "jsonp": "^0.2.1" + }, + "engines": { + "node": ">=8", + "npm": ">=5" + }, + "peerDependencies": { + "react": ">=17.0.2" + } + }, "node_modules/openapi-typescript": { "version": "6.7.4", "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.4.tgz", @@ -411,6 +470,30 @@ } ] }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-share": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/react-share/-/react-share-5.1.0.tgz", + "integrity": "sha512-OvyfMtj/0UzH1wi90OdHhZVJ6WUC/+IeWvBwppeZozwIGyAjQgyR0QXlHOrxVHVECqnGvcpBaFTXVrqouTieaw==", + "dependencies": { + "classnames": "^2.3.2", + "jsonp": "^0.2.1" + }, + "peerDependencies": { + "react": "^17 || ^18" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",