/** * Event Formatting Interfaces * * Defines interfaces for event formatting, display, and internationalization */ import { CalendarEvent, EventDateTime } from './event.interfaces'; /** * Date format options */ export interface DateFormatOptions { /** Date style */ dateStyle?: 'full' | 'long' | 'medium' | 'short'; /** Time style */ timeStyle?: 'full' | 'long' | 'medium' | 'short'; /** Custom format pattern */ pattern?: string; /** Show time zone */ showTimeZone?: boolean; /** Show relative dates (e.g., "Today", "Tomorrow") */ showRelative?: boolean; /** Use 12-hour format */ use12Hour?: boolean; } /** * Event display options */ export interface EventDisplayOptions { /** Show description */ showDescription?: boolean; /** Show location */ showLocation?: boolean; /** Show attendees */ showAttendees?: boolean; /** Maximum description length */ maxDescriptionLength?: number; /** Show event status */ showStatus?: boolean; /** Show priority indicator */ showPriority?: boolean; /** Show recurrence indicator */ showRecurrence?: boolean; /** Custom CSS classes */ cssClasses?: Record; } /** * Duration format options */ export interface DurationFormatOptions { /** Format style */ style: 'compact' | 'long' | 'narrow'; /** Units to display */ units?: ('days' | 'hours' | 'minutes')[]; /** Maximum unit precision */ maxUnits?: number; } /** * Formatted event output */ export interface FormattedEvent { /** Event ID */ id: string; /** Formatted title */ title: string; /** Formatted description */ description?: string; /** Formatted date and time */ dateTime: { /** Formatted start date */ startDate: string; /** Formatted start time */ startTime: string; /** Formatted end date */ endDate: string; /** Formatted end time */ endTime: string; /** Formatted duration */ duration: string; /** Whether event spans multiple days */ isMultiDay: boolean; /** Relative time description */ relative?: string; }; /** Formatted location */ location?: string; /** Formatted attendees */ attendees?: string[]; /** Status display */ status: { text: string; color: string; icon?: string; }; /** Priority display */ priority: { text: string; level: number; color: string; icon?: string; }; /** Recurrence display */ recurrence?: { text: string; nextOccurrence?: string; }; /** CSS classes for styling */ cssClasses: string[]; /** Accessibility labels */ accessibility: { label: string; description: string; }; } /** * Calendar view formatting options */ export interface CalendarViewFormatOptions { /** View type */ viewType: 'month' | 'week' | 'day' | 'agenda'; /** Compact mode */ compact?: boolean; /** Show week numbers */ showWeekNumbers?: boolean; /** First day of week (0-6) */ firstDayOfWeek?: number; /** Time slot duration in minutes */ timeSlotDuration?: number; /** Business hours display */ businessHours?: { start: string; end: string; highlight: boolean; }; } /** * Export format options */ export interface ExportFormatOptions { /** Export format */ format: 'ics' | 'csv' | 'json' | 'xml' | 'pdf'; /** Include attachments */ includeAttachments?: boolean; /** Include private events */ includePrivate?: boolean; /** Custom field mapping */ fieldMapping?: Record; /** File name template */ filenameTemplate?: string; } /** * Localization settings */ export interface LocalizationSettings { /** Locale identifier */ locale: string; /** Time zone */ timeZone: string; /** Custom translations */ translations?: Record; /** Date format preferences */ dateFormats?: { short: string; medium: string; long: string; full: string; }; /** Number format preferences */ numberFormats?: { decimal: string; grouping: string; }; } /** * Event formatting service interface */ export interface IEventFormattingService { /** * Initialize formatting service */ initialize(localization: LocalizationSettings): void; /** * Format single event */ formatEvent(event: CalendarEvent, displayOptions?: EventDisplayOptions, dateOptions?: DateFormatOptions): FormattedEvent; /** * Format multiple events */ formatEvents(events: CalendarEvent[], displayOptions?: EventDisplayOptions, dateOptions?: DateFormatOptions): FormattedEvent[]; /** * Format date and time */ formatDateTime(dateTime: EventDateTime, options?: DateFormatOptions): { startDate: string; startTime: string; endDate: string; endTime: string; duration: string; relative?: string; }; /** * Format duration */ formatDuration(startDate: Date, endDate: Date, options?: DurationFormatOptions): string; /** * Format for calendar view */ formatForCalendarView(events: CalendarEvent[], viewOptions: CalendarViewFormatOptions): Array; /** * Export events in specified format */ exportEvents(events: CalendarEvent[], options: ExportFormatOptions): Promise<{ data: string | Blob; filename: string; mimeType: string; }>; /** * Get accessibility label for event */ getAccessibilityLabel(event: CalendarEvent): string; /** * Get event summary for notifications */ getEventSummary(event: CalendarEvent, maxLength?: number): string; /** * Update localization settings */ updateLocalization(settings: Partial): void; /** * Get available locales */ getAvailableLocales(): string[]; /** * Get supported export formats */ getSupportedExportFormats(): string[]; /** * Format recurring event pattern */ formatRecurrencePattern(recurrence: any): string; /** * Get next occurrence text */ getNextOccurrenceText(event: CalendarEvent): string | null; }