442 lines
10 KiB
TypeScript
442 lines
10 KiB
TypeScript
|
|
import React from 'react';
|
||
|
|
|
||
|
|
export interface NavLinkItem {
|
||
|
|
id: string;
|
||
|
|
label: string;
|
||
|
|
href: string;
|
||
|
|
icon?: React.ElementType;
|
||
|
|
children?: NavLinkItem[];
|
||
|
|
targetView?: CurrentView; // For view switching
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface GalleryItem {
|
||
|
|
id: string;
|
||
|
|
type: 'image' | 'video';
|
||
|
|
url: string;
|
||
|
|
altText?: string;
|
||
|
|
caption?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Post {
|
||
|
|
id:string;
|
||
|
|
title: string;
|
||
|
|
category: string;
|
||
|
|
date?: string;
|
||
|
|
publishedAt?: string;
|
||
|
|
readTime?: string;
|
||
|
|
imageUrl: string;
|
||
|
|
videoUrl?: string;
|
||
|
|
isFeatured?: boolean;
|
||
|
|
description?: string;
|
||
|
|
fullContent?: string | React.ReactNode; // For detail view
|
||
|
|
gallery?: GalleryItem[]; // Added gallery
|
||
|
|
href: string; // Will be used to set selectedItemId or for direct linking if routing is added
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface NewsArticle {
|
||
|
|
id: string;
|
||
|
|
title: string;
|
||
|
|
category: string;
|
||
|
|
date?: string;
|
||
|
|
publishedAt?: string;
|
||
|
|
imageUrl: string;
|
||
|
|
href: string;
|
||
|
|
description?: string;
|
||
|
|
fullContent?: string | React.ReactNode; // For detail view
|
||
|
|
gallery?: GalleryItem[]; // Added gallery
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ResearchPaper {
|
||
|
|
id: string;
|
||
|
|
title: string;
|
||
|
|
category: string; // e.g., "Публикация", "Статья"
|
||
|
|
date?: string;
|
||
|
|
publishedAt?: string;
|
||
|
|
imageUrl: string;
|
||
|
|
href: string;
|
||
|
|
authors?: string[];
|
||
|
|
abstract?: string; // For detail view
|
||
|
|
fullContent?: string | React.ReactNode; // For detail view
|
||
|
|
gallery?: GalleryItem[]; // Added gallery for ResearchPaper
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BusinessStory {
|
||
|
|
id: string;
|
||
|
|
title: string;
|
||
|
|
category: string; // e.g., "API", "ChatGPT", "Партнерство"
|
||
|
|
imageUrl: string;
|
||
|
|
href: string;
|
||
|
|
description?: string;
|
||
|
|
fullContent?: string | React.ReactNode; // For detail view
|
||
|
|
gallery?: GalleryItem[]; // Added gallery
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Vacancy {
|
||
|
|
id: string;
|
||
|
|
title: string;
|
||
|
|
department: string;
|
||
|
|
location: string;
|
||
|
|
type: string; // e.g., Full-time, Part-time
|
||
|
|
description: string; // Short description for the card
|
||
|
|
fullDescription?: string | React.ReactNode; // Detailed description for the detail page
|
||
|
|
responsibilities?: string[];
|
||
|
|
qualifications?: string[];
|
||
|
|
offer?: string[];
|
||
|
|
href: string; // For consistency, though navigation will use selectedItemId
|
||
|
|
}
|
||
|
|
|
||
|
|
// For EducationBusinessSection
|
||
|
|
export interface BusinessCourse {
|
||
|
|
icon: string; // Updated to string to hold icon name from Strapi
|
||
|
|
title: string;
|
||
|
|
description: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// For EducationStudentsSection
|
||
|
|
export interface StudentProgram {
|
||
|
|
icon: string; // Updated to string to hold icon name from Strapi
|
||
|
|
title: string;
|
||
|
|
targetAudience: string;
|
||
|
|
description: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// For AcceleratorAboutSection
|
||
|
|
export interface AcceleratorFeature {
|
||
|
|
icon: React.ElementType;
|
||
|
|
title: string;
|
||
|
|
description: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// For BusinessServicesSection (Services)
|
||
|
|
export interface ServiceItemData {
|
||
|
|
icon: string; // Updated to string to hold icon name from Strapi
|
||
|
|
title: string;
|
||
|
|
description: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// For BusinessServicesSection (Client Logos)
|
||
|
|
export interface ClientLogo {
|
||
|
|
id: string;
|
||
|
|
name: string;
|
||
|
|
imageUrl: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
// For AcceleratorProjectsSection
|
||
|
|
export interface AcceleratorProject {
|
||
|
|
id: string;
|
||
|
|
name: string;
|
||
|
|
tagline: string;
|
||
|
|
description: string;
|
||
|
|
imageUrl: string;
|
||
|
|
category: string; // e.g., Healthcare AI, FinTech, EdTech
|
||
|
|
websiteUrl?: string;
|
||
|
|
statuspro: 'Active' | 'Graduated' | 'Acquired'; // Renamed from status
|
||
|
|
}
|
||
|
|
|
||
|
|
// For AcceleratorInvestmentSection
|
||
|
|
export interface InvestmentProject {
|
||
|
|
id: string;
|
||
|
|
name: string;
|
||
|
|
industry: string;
|
||
|
|
problem: string;
|
||
|
|
solution: string;
|
||
|
|
teamSize: number;
|
||
|
|
fundingSought: string; // e.g., "$500K - $1M"
|
||
|
|
imageUrl: string;
|
||
|
|
contactEmail?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
export type CurrentView =
|
||
|
|
| 'main'
|
||
|
|
| 'about'
|
||
|
|
| 'mission'
|
||
|
|
| 'careers'
|
||
|
|
| 'businessLanding'
|
||
|
|
| 'businessServices'
|
||
|
|
| 'educationBusiness'
|
||
|
|
| 'educationStudents'
|
||
|
|
| 'researchAll'
|
||
|
|
| 'newsAll'
|
||
|
|
| 'storiesAll'
|
||
|
|
| 'acceleratorAbout'
|
||
|
|
| 'acceleratorProjects'
|
||
|
|
| 'acceleratorInvestment'
|
||
|
|
| 'blogPostDetail'
|
||
|
|
| 'newsArticleDetail'
|
||
|
|
| 'researchPaperDetail'
|
||
|
|
| 'businessStoryDetail'
|
||
|
|
| 'vacancyDetail'
|
||
|
|
| 'termsOfUse' // New view for Terms of Use
|
||
|
|
| 'privacyPolicy'; // New view for Privacy Policy
|
||
|
|
|
||
|
|
|
||
|
|
// --- Content Types for Centralized Text ---
|
||
|
|
|
||
|
|
export interface HeroContent {
|
||
|
|
titlePart1: string;
|
||
|
|
titlePart2Gradient: string;
|
||
|
|
subtitle: string;
|
||
|
|
primaryButtonText: string;
|
||
|
|
secondaryButtonText: string;
|
||
|
|
scrollDownAriaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AboutUsContent {
|
||
|
|
title: string;
|
||
|
|
paragraph1: string;
|
||
|
|
paragraph2: string;
|
||
|
|
teamTitle: string;
|
||
|
|
teamParagraph: string;
|
||
|
|
valuesTitle: string;
|
||
|
|
valuesList: { strong: string; text: string }[];
|
||
|
|
closingParagraph: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface FooterLink {
|
||
|
|
text: string;
|
||
|
|
href: string;
|
||
|
|
targetView: CurrentView; // Added to control view switching
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface FooterSocialLink {
|
||
|
|
name: string;
|
||
|
|
href: string;
|
||
|
|
icon: React.ElementType; // Added icon type
|
||
|
|
ariaLabel: string; // Added ariaLabel
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface FooterContent {
|
||
|
|
legalTitle: string;
|
||
|
|
legalLinks: FooterLink[];
|
||
|
|
copyrightText: (year: number) => string;
|
||
|
|
tagline: string;
|
||
|
|
credits: string;
|
||
|
|
socialTitle: string;
|
||
|
|
socialLinks: FooterSocialLink[];
|
||
|
|
address: string;
|
||
|
|
email: string;
|
||
|
|
emailHref: string;
|
||
|
|
companyName?: string;
|
||
|
|
companyInn?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ContactMethodUI {
|
||
|
|
id: string;
|
||
|
|
name: string;
|
||
|
|
href: string;
|
||
|
|
icon: React.ElementType;
|
||
|
|
bgColor: string;
|
||
|
|
hoverBgColor: string;
|
||
|
|
ringColor: string;
|
||
|
|
ariaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ConnectSectionContent {
|
||
|
|
title: string;
|
||
|
|
subtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BlogSectionContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
showAllText: string;
|
||
|
|
showAllAriaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface NewsSectionContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
showAllText: string;
|
||
|
|
showAllAriaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface ResearchSectionContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
showAllText: string;
|
||
|
|
showAllAriaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BusinessSectionContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
showAllText: string;
|
||
|
|
showAllAriaLabel: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface MissionSection {
|
||
|
|
title: string;
|
||
|
|
content: string | React.ReactNode;
|
||
|
|
}
|
||
|
|
export interface OurMissionContent {
|
||
|
|
title: string;
|
||
|
|
preamble: string | React.ReactNode;
|
||
|
|
sections: MissionSection[];
|
||
|
|
closingStatement: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface CareersPageContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
noVacanciesTitle: string;
|
||
|
|
noVacanciesMessagePt1: string;
|
||
|
|
noVacanciesMessagePt2: string;
|
||
|
|
noVacanciesContactEmailText: string;
|
||
|
|
hrEmail: string;
|
||
|
|
notFoundTitle: string;
|
||
|
|
notFoundMessage: string;
|
||
|
|
applyButtonText: string;
|
||
|
|
applySubject: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BusinessLandingContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
emptyStateTitle: string;
|
||
|
|
emptyStateMessage: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BusinessServicesContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
trustedByTitle: string;
|
||
|
|
ctaTitle: string;
|
||
|
|
ctaSubtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface EducationBusinessContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
ctaTitle: string;
|
||
|
|
ctaSubtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface EducationStudentsContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
ctaTitle: string;
|
||
|
|
ctaSubtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AllItemsPageContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
backButtonTextPrefix: string;
|
||
|
|
backButtonTextSuffix: string;
|
||
|
|
subtitle: string;
|
||
|
|
emptyStateTitle: string;
|
||
|
|
emptyStateMessage: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AcceleratorAboutContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
whatWeOfferTitle: string;
|
||
|
|
whatWeOfferParagraph: string;
|
||
|
|
ctaTitle: string;
|
||
|
|
ctaSubtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AcceleratorProjectsContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
emptyStateTitle: string;
|
||
|
|
emptyStateMessage: string;
|
||
|
|
projectWebsiteButtonText: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface AcceleratorInvestmentContent {
|
||
|
|
title: string;
|
||
|
|
titleGradientPart: string;
|
||
|
|
subtitle: string;
|
||
|
|
problemLabel: string;
|
||
|
|
solutionLabel: string;
|
||
|
|
teamLabel: string;
|
||
|
|
fundingLabel: string;
|
||
|
|
contactProjectButtonText: string;
|
||
|
|
requestContactButtonText: string;
|
||
|
|
emptyStateTitle: string;
|
||
|
|
emptyStateMessage: string;
|
||
|
|
investorCtaTitle: string;
|
||
|
|
investorCtaSubtitle: string;
|
||
|
|
contactMethods: ContactMethodUI[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface DetailPageContent { // Base for specific detail page content types
|
||
|
|
notFoundTitle: string;
|
||
|
|
backButtonText: string;
|
||
|
|
itemTypeSingular: string;
|
||
|
|
itemTypePlural: string;
|
||
|
|
galleryTitle?: string; // Added gallery title
|
||
|
|
keepReadingTitle?: string;
|
||
|
|
viewAllButtonText?: string;
|
||
|
|
previousItemButtonLabel?: string;
|
||
|
|
nextItemButtonLabel?: string;
|
||
|
|
noPreviousItemText?: string;
|
||
|
|
noNextItemText?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface BlogPostDetailContent extends DetailPageContent {}
|
||
|
|
export interface NewsArticleDetailContent extends DetailPageContent {}
|
||
|
|
export interface BusinessStoryDetailContent extends DetailPageContent {}
|
||
|
|
|
||
|
|
export interface ResearchPaperDetailContent extends DetailPageContent {
|
||
|
|
abstractTitle: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface VacancyDetailContent {
|
||
|
|
notFoundTitle: string;
|
||
|
|
vacancyNotFoundMessage: string;
|
||
|
|
backButtonText: string;
|
||
|
|
descriptionTitle: string;
|
||
|
|
responsibilitiesTitle: string;
|
||
|
|
qualificationsTitle: string;
|
||
|
|
offerTitle: string;
|
||
|
|
applyPromptTitle: string;
|
||
|
|
applyPromptMessage: string;
|
||
|
|
applyButtonText: string;
|
||
|
|
hrEmail: string;
|
||
|
|
mailtoSubjectPrefix: string;
|
||
|
|
mailtoBodyPrefix: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LegalPageSection {
|
||
|
|
heading?: string;
|
||
|
|
content: string | React.ReactNode;
|
||
|
|
}
|
||
|
|
export interface TermsOfUseContent {
|
||
|
|
title: string;
|
||
|
|
pageTitleGradientPart: string;
|
||
|
|
lastUpdated: string;
|
||
|
|
backButtonText: string;
|
||
|
|
sections: LegalPageSection[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface PrivacyPolicyContent {
|
||
|
|
title: string;
|
||
|
|
pageTitleGradientPart: string;
|
||
|
|
lastUpdated: string;
|
||
|
|
backButtonText: string;
|
||
|
|
sections: LegalPageSection[];
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
export interface UITexts {
|
||
|
|
playVideoAriaLabel: string;
|
||
|
|
pauseVideoAriaLabel: string;
|
||
|
|
sidebarToggleOpenAriaLabel: string;
|
||
|
|
sidebarToggleCloseAriaLabel: string;
|
||
|
|
}
|