import type { ButtonHTMLAttributes, CSSProperties, ReactNode } from 'react'; import { ChevronRight, RotateCw } from 'lucide-react'; import { SeyarMascot } from '@/mascots/SeyarMascot'; import type { SeyarChar, SeyarMood } from '@/mascots/seyar'; import { friendlyError } from '@/lib/errors'; import { useNav } from '@/nav/Navigator'; import { shade } from '@/lib/color'; /* ─── سربرگِ رنگیِ صفحه ──────────────────────────────────────────────────── */ export function ScreenHeader({ title, subtitle, color, back = false, mascot, children, }: { title: ReactNode; subtitle?: ReactNode; color: string; /** دکمهی بازگشت؛ true یعنی صفحهی قبل در پشته. */ back?: boolean | (() => void); mascot?: { char: SeyarChar; mood?: SeyarMood; size?: number }; children?: ReactNode; }) { const nav = useNav(); const onBack = typeof back === 'function' ? back : nav.back; return ( {back && (typeof back === 'function' || nav.canGoBack) && ( )} {title} {subtitle && {subtitle}} {mascot && } {children} ); } /* ─── دکمهها ──────────────────────────────────────────────────────────────── */ export function IconButton({ label, className = '', children, ...rest }: ButtonHTMLAttributes & { label: string }) { return ( {children} ); } export function PrimaryButton({ color = '#ED6956', loading = false, className = '', style, children, disabled, ...rest }: ButtonHTMLAttributes & { color?: string; loading?: boolean }) { return ( {loading ? : children} ); } export function SecondaryButton({ className = '', children, ...rest }: ButtonHTMLAttributes) { return ( {children} ); } export function Spinner({ size = 20, className = '' }: { size?: number; className?: string }) { return ( ); } /* ─── حالتهای بارگذاری / خطا / خالی ───────────────────────────────────────── */ function StateBox({ char, mood, text, children }: { char: SeyarChar; mood: SeyarMood; text: ReactNode; children?: ReactNode }) { return ( {text} {children} ); } export function LoadingState({ text = 'یه لحظه صبر کن…', char = 'sigma' as SeyarChar }) { return ; } export function ErrorState({ error, onRetry, text }: { error?: unknown; onRetry?: () => void; text?: string }) { return ( {onRetry && ( دوباره امتحان کن )} ); } export function EmptyState({ text, char = 'pi' as SeyarChar }: { text: string; char?: SeyarChar }) { return ; } export function InlineError({ children }: { children: ReactNode }) { return ( {children} ); } /* ─── چیزهای کوچک ──────────────────────────────────────────────────────────── */ export function ProgressBar({ percent, color, track = '#eae7ff', height = 8 }: { percent: number; color: string; track?: string; height?: number }) { return ( ); } export function Card({ className = '', style, children, onClick }: { className?: string; style?: CSSProperties; children: ReactNode; onClick?: () => void }) { const Tag = onClick ? 'button' : 'div'; return ( {children} ); } /** بدنهی اسکرولشوندهی صفحه، زیرِ سربرگ. */ export function ScreenBody({ className = '', children }: { className?: string; children: ReactNode }) { return {children}; } export function Screen({ className = 'bg-page', children }: { className?: string; children: ReactNode }) { return {children}; }
{text}