137 lines
3.0 KiB
TypeScript
137 lines
3.0 KiB
TypeScript
export type Locale = 'en' | 'fr' | 'ar';
|
|
export type Direction = 'ltr' | 'rtl';
|
|
export type EvidenceStatus = 'approved' | 'illustrative' | 'pending' | 'expired' | 'rejected';
|
|
export type ThemePreference = 'light' | 'dark' | 'system';
|
|
|
|
export interface LinkModel {
|
|
id: string;
|
|
label: string;
|
|
href: string;
|
|
external?: boolean;
|
|
}
|
|
export interface SiteHeaderProps {
|
|
locale: Locale;
|
|
direction: Direction;
|
|
links: LinkModel[];
|
|
login?: LinkModel;
|
|
onDemo(): void;
|
|
}
|
|
export interface DrawerProps extends SiteHeaderProps {
|
|
open: boolean;
|
|
onOpenChange(open: boolean): void;
|
|
returnFocusRef?: HTMLElement | null;
|
|
}
|
|
export interface LocaleSelectorProps {
|
|
locale: Locale;
|
|
routeId: string;
|
|
hash?: string;
|
|
onLocaleChange(locale: Locale): void;
|
|
}
|
|
export interface ThemeSelectorProps {
|
|
preference: ThemePreference;
|
|
onPreferenceChange(value: ThemePreference): void;
|
|
}
|
|
export interface HeroModel {
|
|
eyebrow: string;
|
|
title: string;
|
|
body: string;
|
|
primaryLabel: string;
|
|
secondaryLabel: string;
|
|
}
|
|
export interface ProductPreviewModel {
|
|
status: EvidenceStatus;
|
|
caption: string;
|
|
locale: Locale;
|
|
direction: Direction;
|
|
theme: 'light' | 'dark';
|
|
assetId?: string;
|
|
}
|
|
export interface LifecycleItem {
|
|
id: string;
|
|
title: string;
|
|
description: string;
|
|
icon: string;
|
|
}
|
|
export interface ComparisonModel {
|
|
title: string;
|
|
body: string;
|
|
before: { title: string; items: string[] };
|
|
after: { title: string; items: string[] };
|
|
}
|
|
export interface WorkflowStep {
|
|
id: string;
|
|
ordinal: string;
|
|
title: string;
|
|
description: string;
|
|
}
|
|
export interface RoleCard {
|
|
id: string;
|
|
title: string;
|
|
description: string;
|
|
}
|
|
export interface ModuleCard {
|
|
id: string;
|
|
title: string;
|
|
description: string;
|
|
evidenceStatus: EvidenceStatus;
|
|
}
|
|
export interface MetricDefinition {
|
|
id: string;
|
|
title: string;
|
|
definition: string;
|
|
publishedValue?: never;
|
|
}
|
|
export interface IntegrationCategory {
|
|
id: string;
|
|
label: string;
|
|
verifiedPartners?: never;
|
|
}
|
|
export interface SecurityCheck {
|
|
id: string;
|
|
title: string;
|
|
description: string;
|
|
certificationBadge?: never;
|
|
}
|
|
export interface PricingModel {
|
|
mode: 'quote-only' | 'approved-pricing';
|
|
title: string;
|
|
body: string;
|
|
factors: string[];
|
|
note: string;
|
|
}
|
|
export interface FaqItem {
|
|
id: string;
|
|
question: string;
|
|
answer: string;
|
|
}
|
|
export interface DemoFormValues {
|
|
fullName: string;
|
|
workEmail: string;
|
|
company: string;
|
|
fleetSize: string;
|
|
market?: string;
|
|
preferredLanguage?: Locale;
|
|
message?: string;
|
|
}
|
|
export type DemoFormState =
|
|
| 'idle'
|
|
| 'validating'
|
|
| 'submitting'
|
|
| 'success'
|
|
| 'recoverable_error'
|
|
| 'terminal_error';
|
|
export interface DemoFormProps {
|
|
state: DemoFormState;
|
|
values: DemoFormValues;
|
|
fieldErrors: Partial<Record<keyof DemoFormValues, string>>;
|
|
formError?: string;
|
|
onSubmit(values: DemoFormValues): Promise<void>;
|
|
}
|
|
export interface TourProps {
|
|
steps: WorkflowStep[];
|
|
activeIndex: number;
|
|
open: boolean;
|
|
onOpenChange(open: boolean): void;
|
|
onStepChange(index: number): void;
|
|
}
|