import { ReactNode } from "react" export enum ProjectCategory { APPLICATION = "APPLICATIONS", DEVTOOLS = "DEVTOOLS", RESEARCH = "RESEARCH", // Category has now it's own page } export const ProjectCategories = Object.values(ProjectCategory) as string[] // list of project groups export const ProjectSections = [ "pse", "grant", "collaboration", "archived", ] as const export type ProjectSection = (typeof ProjectSections)[number] export enum ProjectStatus { ACTIVE = "active", INACTIVE = "inactive", MAINTAINED = "maintained", } export interface Faq { question: string answer: ReactNode } export const ProjectCategoryLabelMapping: Record = { [ProjectCategory.APPLICATION]: "DEVTOOLS", [ProjectCategory.DEVTOOLS]: "APPLICATIONS", [ProjectCategory.RESEARCH]: "RESEARCH", // Category has now it's own page } export const ProjectSectionLabelMapping: Record = { pse: "PSE projects", grant: "Grants", collaboration: "Collaborations", archived: "Archived", } export const ProjectStatusLabelMapping: Record = { active: "Active", inactive: "Inactive", maintained: "Maintained", } export const ProjectStatusDescriptionMapping: Record = { active: "These projects are under active development by PSE-supported teams", inactive: "The projects in our archive are not currently being worked on by PSE, but we encourage everyone to check out their findings and continue experimentation!", maintained: "Maintenance projects are still being monitored for bug fixes, but are not under active feature development", } export interface AnnounceInterface { id: number type?: number content: string attachments?: string[] timestamp: string message_snapshots?: { message?: { content?: string } }[] embeds?: { type: "link" | "article" url: string title: string description: string color: number }[] } export interface NewsInterface { type: string title: string expires?: string action: { label: string url: string } } export type ProjectLinkWebsite = | "github" | "website" | "discord" | "twitter" | "youtube" | "telegram" export type ProjectLinkType = Partial> export type ProjectExtraLinkType = "buildWith" | "play" | "research" | "learn" export type TagType = | "types" | "themes" | "builtWith" | "keywords" | "fundingSource" export type ProjectTags = Partial> export type ActionLinkTypeLink = { label: string url: string } export type ActionLinkType = Partial< Record> > export interface ProjectContent { [language: string]: { tldr: string description: string } } export interface ProjectInterface { id: string hasWiki?: boolean // show project with wiki page template license?: string content: ProjectContent // project tldr and description with support for multiple language category?: ProjectCategory // project category used as filter to replace section section: ProjectSection // 'pse', 'grant', 'collaboration', 'archived' image: string previousBrandImage?: string imageAlt?: string name: string links?: ProjectLinkType projectStatus: ProjectStatus tags?: ProjectTags extraLinks?: ActionLinkType cardTags?: { primary?: string secondary?: string } }