import * as React from 'react' import { Stack, Group, Title, Text, ActionIcon, Box, Tabs, Badge, Timeline, SimpleGrid } from '@mantine/core' import { IconChevronLeft } from '@tabler/icons-react' interface DetailField { label: string value: React.ReactNode span?: 1 | 2 } interface DetailTab { label: string value: string content: React.ReactNode count?: number } interface TimelineEvent { id: string title: string description?: string timestamp: string icon?: React.ReactNode variant?: 'default' | 'success' | 'warning' | 'error' } interface DetailPageProps { title: string subtitle?: string badge?: React.ReactNode avatar?: React.ReactNode actions?: React.ReactNode onBack?: () => void fields: DetailField[] tabs?: DetailTab[] activeTab?: string onTabChange?: (value: string) => void timeline?: TimelineEvent[] className?: string } const variantColors: Record = { default: 'blue', success: 'green', warning: 'yellow', error: 'red', } export function detailPage({ title, subtitle, badge, avatar, actions, onBack, fields, tabs, activeTab, onTabChange, timeline, }: DetailPageProps): React.ReactElement { return ( {/* Header */} {onBack && ( )} {avatar && ( {avatar} )} {title} {badge} {subtitle && {subtitle}} {actions && {actions}} {/* Fields grid */} {fields.map((field, i) => ( {field.label} {field.value} ))} {/* Tabs */} {tabs && tabs.length > 0 && ( v && onTabChange?.(v)}> {tabs.map((tab) => ( {tab.count} : undefined} > {tab.label} ))} {tabs.find(t => t.value === activeTab)?.content} )} {/* Timeline */} {timeline && timeline.length > 0 && ( Activity {timeline.map((event) => ( {event.title}} > {event.description && {event.description}} {event.timestamp} ))} )} ) } export type { DetailPageProps, DetailField, DetailTab, TimelineEvent }