import React from 'react'; import { AlertCircle, CheckCircle, Info } from 'lucide-react'; import { cn } from '@/lib/utils'; interface ValidationMessageProps { type: 'error' | 'success' | 'info' | 'warning'; message: string; className?: string; } export const ValidationMessage: React.FC = ({ type, message, className }) => { const getIcon = () => { switch (type) { case 'error': return ; case 'success': return ; case 'info': case 'warning': return ; default: return null; } }; const getStyles = () => { switch (type) { case 'error': return 'text-destructive bg-destructive/10 border-destructive/20'; case 'success': return 'text-green-600 bg-green-50 border-green-200 dark:text-green-400 dark:bg-green-950 dark:border-green-800'; case 'warning': return 'text-yellow-600 bg-yellow-50 border-yellow-200 dark:text-yellow-400 dark:bg-yellow-950 dark:border-yellow-800'; case 'info': return 'text-blue-600 bg-blue-50 border-blue-200 dark:text-blue-400 dark:bg-blue-950 dark:border-blue-800'; default: return ''; } }; return (
{getIcon()} {message}
); }; interface FormFieldHelpProps { children: React.ReactNode; className?: string; } export const FormFieldHelp: React.FC = ({ children, className }) => { return (
{children}
); }; interface ValidationRulesProps { rules: Array<{ text: string; isValid?: boolean; }>; className?: string; } export const ValidationRules: React.FC = ({ rules, className }) => { return (
{rules.map((rule, index) => (
{rule.isValid !== undefined && ( rule.isValid ? ( ) : ( ) )} {rule.text}
))}
); }; // Helper function to validate serial number format export const validateSerialNumber = (value: string) => { const rules = [ { text: 'Must not be empty', isValid: value.trim().length > 0 }, { text: 'Must be 1-50 characters long', isValid: value.length >= 1 && value.length <= 50 }, { text: 'Can only contain letters, numbers, hyphens, and underscores', isValid: /^[A-Za-z0-9\-_]*$/.test(value) } ]; return { isValid: rules.every(rule => rule.isValid), rules }; }; // Helper function to validate screen resolution format export const validateScreenResolution = (value: string) => { const rules = [ { text: 'Must not be empty', isValid: value.trim().length > 0 }, { text: 'Must be in format "1920x1080" or select from dropdown', isValid: /^\d+x\d+$/.test(value.trim()) || value === 'custom' } ]; return { isValid: rules.every(rule => rule.isValid), rules }; }; export default { ValidationMessage, FormFieldHelp, ValidationRules, validateSerialNumber, validateScreenResolution };