neumorphic-peripheral
Version:
A lightweight, framework-agnostic JavaScript/TypeScript library for beautiful neumorphic styling
147 lines • 4.41 kB
TypeScript
/**
* Joi Validation Adapter for Neumorphic Peripheral
*
* This adapter allows you to use Joi schemas for validation
* Install: npm install joi
*
* Usage:
* import Joi from 'joi'
* import { joiAdapter } from 'neumorphic-peripheral/adapters/joi'
*
* const schema = Joi.string().email().min(5)
* np.input(element, { validate: joiAdapter(schema) })
*/
import { ValidationFunction, ValidationResult } from '../types';
type JoiSchema = any;
/**
* Creates a validation function from a Joi schema
*/
export declare function joiAdapter(schema: JoiSchema): ValidationFunction;
/**
* Creates a comprehensive validation function that returns all errors
*/
export declare function joiAdapterDetailed(schema: JoiSchema): (value: string) => ValidationResult;
/**
* Async validation adapter for Joi schemas
*/
export declare function joiAdapterAsync(schema: JoiSchema): (value: string) => Promise<ValidationResult>;
/**
* Schema builder utilities for common patterns
*/
export declare const joiSchemas: {
email: () => Promise<any>;
password: (minLength?: number) => Promise<any>;
phone: () => Promise<any>;
url: () => Promise<any>;
required: (message?: string) => Promise<any>;
number: (min?: number, max?: number) => Promise<any>;
/**
* Date validation schemas
*/
date: () => Promise<{
birthDate: any;
futureDate: any;
pastDate: any;
ageRange: (minAge: number, maxAge: number) => any;
}>;
};
/**
* Form-level validation using Joi
*/
export declare class JoiFormValidator {
private schema;
private fields;
constructor(schema: JoiSchema);
/**
* Register a field with its schema key
*/
registerField(element: HTMLElement, key: string): void;
/**
* Validate a specific field
*/
validateField(element: HTMLElement): ValidationResult;
/**
* Async field validation
*/
validateFieldAsync(element: HTMLElement): Promise<ValidationResult>;
/**
* Validate entire form
*/
validateForm(): {
isValid: boolean;
errors: Record<string, string[]>;
data?: any;
};
/**
* Async form validation
*/
validateFormAsync(): Promise<{
isValid: boolean;
errors: Record<string, string[]>;
data?: any;
}>;
private getElementValue;
}
/**
* Helper function to create form validator
*/
export declare function createJoiFormValidator(schema: JoiSchema): JoiFormValidator;
/**
* Integration with neumorphic components
*/
export declare const joiIntegration: {
/**
* Setup form validation with Joi schema
*/
setupForm(formElement: HTMLFormElement, schema: JoiSchema, components: Record<string, any>): JoiFormValidator;
/**
* Setup async form validation
*/
setupAsyncForm(formElement: HTMLFormElement, schema: JoiSchema, components: Record<string, any>): JoiFormValidator;
/**
* Setup conditional validation based on other fields
*/
setupConditionalValidation(component: any, schemaBuilder: (formData: Record<string, any>) => JoiSchema, getFormData: () => Record<string, any>): void;
};
/**
* Advanced Joi utilities for neumorphic components
*/
export declare const joiUtils: {
/**
* Create a cross-field validation schema
*/
createCrossFieldValidation: (dependencies: string[]) => Promise<any>;
/**
* Create async validation (e.g., for username availability)
*/
createAsyncValidation: (checkFunction: (value: string) => Promise<boolean>, errorMessage?: string) => Promise<any>;
/**
* Create conditional validation based on other fields
*/
createConditionalValidation: (condition: (formData: any) => boolean, trueSchema: any, falseSchema?: any) => Promise<any>;
/**
* Create date validation with relative constraints
*/
createDateValidation: () => Promise<{
birthDate: any;
futureDate: any;
pastDate: any;
ageRange: (minAge: number, maxAge: number) => any;
}>;
/**
* Create file validation schemas
*/
createFileValidation: () => Promise<{
imageFile: any;
documentFile: any;
}>;
};
export declare const examples: {
basicField: string;
asyncValidation: string;
complexForm: string;
dateValidation: string;
fileValidation: string;
};
export {};
//# sourceMappingURL=joi.d.ts.map