Files
Rental-operations-platform/contracts/phase9/implementation/component-contracts_v1.0.ts
T

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;
}