Initial commit for iiEasy: all files included

This commit is contained in:
2026-02-03 23:16:16 +05:00
commit 3b3d29e21c
158 changed files with 32962 additions and 0 deletions

442
types.ts Executable file
View File

@@ -0,0 +1,442 @@
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;
}