/** * @license * Copyright 2023 Nuraly, Laabidi Aymen * SPDX-License-Identifier: MIT */ import { ReactiveControllerHost } from 'lit'; import { TextareaHost } from './base.controller.js'; import { BaseValidationController, SharedValidationRule } from '@nuralyui/common/controllers'; import { ValidationRule, TextareaValidationResult } from '../textarea.types.js'; /** * Validation event detail interface */ export interface TextareaValidationEventDetail { isValid: boolean; validationMessage: string; errors: string[]; warnings: string[]; validationResult: TextareaValidationResult; } /** * Extended textarea host interface for validation */ export interface TextareaValidationHost extends TextareaHost { rules: ValidationRule[]; validateOnChange: boolean; validateOnBlur: boolean; hasFeedback: boolean; state: string; validationMessage?: string; } /** * Validation controller manages all validation logic for textarea components * This controller handles: * - Rule-based validation (required, patterns, custom validators, etc.) * - Validation timing (change, blur, submit) * - Validation state management * - Error and warning messages * - Character count validation */ export declare class TextareaValidationController extends BaseValidationController { private _validationResult?; private _validationDebounceMs; private _validationTimeout?; /** * Get the validation host with extended interface */ get validationHost(): TextareaValidationHost & ReactiveControllerHost; /** * Get current validation result */ get validationResult(): TextareaValidationResult | undefined; /** * Set validation debounce delay */ setValidationDebounce(ms: number): void; /** * Validate the current value against all rules (base contract) */ validate(): Promise; /** * Validate the current value against all rules (textarea-specific, returns full result) */ validateTextarea(value?: string): Promise; /** * Validate with debouncing */ validateDebounced(value?: string): Promise; /** * Validate if change validation is enabled */ validateOnChangeIfEnabled(value?: string): Promise; /** * Validate if blur validation is enabled */ validateOnBlurIfEnabled(value?: string): Promise; /** * Clear validation state */ clearValidation(): void; /** * Check if the current value is valid according to validation rules */ isCurrentlyValid(): boolean; /** * Check if validation is blocking (prevents form submission) */ isBlocking(): boolean; /** * Get validation messages */ getValidationMessages(): string[]; /** * Add a validation rule to the host */ addRule(rule: SharedValidationRule): void; /** * Remove a validation rule from the host */ removeRule(predicate: (rule: SharedValidationRule) => boolean): void; /** * Remove all validation rules */ clearRules(): void; /** * Create a required field validation rule */ static createRequiredRule(message?: string): ValidationRule; /** * Create a minimum length validation rule */ static createMinLengthRule(minLength: number, message?: string): ValidationRule; /** * Create a maximum length validation rule */ static createMaxLengthRule(maxLength: number, message?: string): ValidationRule; /** * Create a pattern validation rule */ static createPatternRule(pattern: RegExp, message: string): ValidationRule; /** * Update host validation state based on validation result */ private updateHostValidationState; /** * Dispatch textarea-specific validation event (standardized to nr-validation) */ private dispatchTextareaValidationEvent; /** * Cleanup on disconnect */ hostDisconnected(): void; } //# sourceMappingURL=validation.controller.d.ts.map