@tamilvananmurugan/xlibs
Version:
Comprehensive UI component library with Aceternity, MagicUI, and ShadCN components
72 lines (59 loc) • 1.93 kB
text/typescript
// Component Configuration Types and Validation
export interface VariantConfig {
className: string;
[key: string]: any;
}
export interface SizeConfig {
className: string;
[key: string]: any;
}
export interface ComponentConfig {
variants: Record<string, VariantConfig>;
sizes: Record<string, SizeConfig>;
defaultVariant?: string;
defaultSize?: string;
[key: string]: any;
}
/**
* Validate component configuration
* @param config The component configuration to validate
* @returns Validation result with isValid flag and errors array
*/
export function validateComponentConfig(config: ComponentConfig): {
isValid: boolean;
errors: string[]
} {
const errors: string[] = [];
// Check if variants exist
if (!config.variants || Object.keys(config.variants).length === 0) {
errors.push('Component must have at least one variant');
}
// Check if sizes exist
if (!config.sizes || Object.keys(config.sizes).length === 0) {
errors.push('Component must have at least one size');
}
// Check if default variant exists in variants
if (config.defaultVariant && !config.variants[config.defaultVariant]) {
errors.push(`Default variant '${config.defaultVariant}' not found in variants`);
}
// Check if default size exists in sizes
if (config.defaultSize && !config.sizes[config.defaultSize]) {
errors.push(`Default size '${config.defaultSize}' not found in sizes`);
}
return {
isValid: errors.length === 0,
errors
};
}
/**
* Create a component configuration
* @param config The component configuration
* @returns The validated component configuration
*/
export function createComponentConfig(config: ComponentConfig): ComponentConfig {
const validation = validateComponentConfig(config);
if (!validation.isValid) {
throw new Error(`Invalid component configuration: ${validation.errors.join(', ')}`);
}
return config;
}