import type { ReactNode } from "react";
/**
 * Configuración de un paso individual del wizard
 */
export interface WizardStep {
    /** Número único del paso (1-indexed) */
    number: number;
    /** Título del paso mostrado en la navegación */
    title: string;
    /** Icono opcional para el paso (nombre del icono de solar-icons) */
    icon?: string;
    /** Indica si el paso está deshabilitado y no se puede acceder */
    isDisabled?: boolean;
    /** Indica si el paso está oculto en la navegación */
    isHidden?: boolean;
    /** Metadata adicional que puede ser útil para lógica custom */
    metadata?: Record<string, unknown>;
}
/**
 * Configuración de validación para un paso
 */
export interface WizardStepValidation {
    /** Paso al que aplica la validación */
    stepNumber: number;
    /** Función que valida si se puede avanzar desde este paso */
    canProceed: () => boolean | Promise<boolean>;
    /** Mensaje de error opcional cuando la validación falla */
    errorMessage?: string;
}
/**
 * Configuración de navegación del wizard
 */
export interface WizardNavigationConfig {
    /** Permite navegar hacia pasos anteriores */
    allowBack?: boolean;
    /** Permite navegar a pasos ya completados */
    allowSkipToCompleted?: boolean;
    /** Muestra botones de navegación en cada paso */
    showNavigationButtons?: boolean;
    /** Texto del botón "Siguiente" */
    nextButtonText?: string;
    /** Texto del botón "Atrás" */
    backButtonText?: string;
    /** Texto del botón "Finalizar" (último paso) */
    finishButtonText?: string;
    /** Permite cerrar el wizard en cualquier momento */
    allowClose?: boolean;
}
/**
 * Callback que se ejecuta al cambiar de paso
 */
export interface WizardStepChangeEvent {
    /** Paso anterior */
    fromStep: number;
    /** Nuevo paso */
    toStep: number;
    /** Timestamp del cambio */
    timestamp: Date;
}
/**
 * Props principales del componente Wizard
 */
export interface WizardProps {
    /** Lista de pasos del wizard */
    steps: WizardStep[];
    /** Paso actual (1-indexed) */
    currentStep: number;
    /** Callback cuando cambia el paso actual */
    onStepChange: (step: number) => void;
    /** Renderiza el contenido de cada paso */
    renderStep: (step: WizardStep, stepIndex: number) => ReactNode;
    /** Configuración de navegación */
    navigationConfig?: WizardNavigationConfig;
    /** Validaciones por paso */
    validations?: WizardStepValidation[];
    /** Callback cuando se completa el wizard */
    onComplete?: () => void | Promise<void>;
    /** Callback cuando se cancela/cierra el wizard */
    onCancel?: () => void;
    /** Callback antes de cambiar de paso (puede cancelar el cambio) */
    onBeforeStepChange?: (event: WizardStepChangeEvent) => boolean | Promise<boolean>;
    /** Callback después de cambiar de paso */
    onAfterStepChange?: (event: WizardStepChangeEvent) => void;
    /** Muestra el sidebar de navegación */
    showSidebar?: boolean;
    /** Posición del sidebar */
    sidebarPosition?: "left" | "right";
    /** Altura mínima del wizard */
    minHeight?: string | number;
    /** Clase CSS adicional para el contenedor */
    className?: string;
    /** Indica si el wizard está en modo loading */
    isLoading?: boolean;
    /** Texto mostrado durante el loading (deprecated: use translations.loadingText) */
    loadingText?: string;
    /** Deshabilita completamente el wizard */
    isDisabled?: boolean;
    /** Traducciones del wizard para internacionalización */
    translations?: WizardTranslations;
}
/**
 * Props del componente WizardSidebar
 */
export interface WizardSidebarProps {
    /** Lista de pasos */
    steps: WizardStep[];
    /** Paso actual */
    currentStep: number;
    /** Callback al hacer clic en un paso */
    onStepClick: (stepNumber: number) => void;
    /** Permite navegar a pasos completados */
    allowSkipToCompleted?: boolean;
    /** Posición del sidebar */
    position?: "left" | "right";
    /** Traducciones para el sidebar */
    translations?: Pick<WizardTranslations, "stepNavigationAriaLabel" | "completedLabel" | "currentLabel">;
}
/**
 * Props del componente WizardNavigation (botones de navegación)
 */
export interface WizardNavigationProps {
    /** Paso actual */
    currentStep: number;
    /** Total de pasos */
    totalSteps: number;
    /** Callback para ir al paso anterior */
    onBack: () => void;
    /** Callback para ir al siguiente paso */
    onNext: () => void;
    /** Callback para finalizar el wizard */
    onFinish?: () => void;
    /** Indica si el botón "Siguiente" está deshabilitado */
    isNextDisabled?: boolean;
    /** Indica si el botón "Atrás" está deshabilitado */
    isBackDisabled?: boolean;
    /** Muestra el botón "Atrás" */
    showBack?: boolean;
    /** Texto del botón "Siguiente" (deprecated: use translations.nextButton) */
    nextText?: string;
    /** Texto del botón "Atrás" (deprecated: use translations.backButton) */
    backText?: string;
    /** Texto del botón "Finalizar" (deprecated: use translations.finishButton) */
    finishText?: string;
    /** Indica si está en modo loading */
    isLoading?: boolean;
    /** Clase CSS adicional */
    className?: string;
    /** Traducciones para los botones */
    translations?: Pick<WizardTranslations, "nextButton" | "backButton" | "finishButton">;
}
/**
 * Estado interno del wizard
 */
export interface WizardState {
    /** Paso actual */
    currentStep: number;
    /** Pasos completados */
    completedSteps: Set<number>;
    /** Pasos visitados */
    visitedSteps: Set<number>;
    /** Indica si está procesando un cambio de paso */
    isTransitioning: boolean;
    /** Validaciones pendientes */
    pendingValidations: Map<number, Promise<boolean>>;
}
/**
 * Context del wizard (para componentes internos)
 */
export interface WizardContextValue {
    /** Estado del wizard */
    state: WizardState;
    /** Props del wizard */
    props: WizardProps;
    /** Ir a un paso específico */
    goToStep: (step: number) => Promise<boolean>;
    /** Ir al siguiente paso */
    nextStep: () => Promise<boolean>;
    /** Ir al paso anterior */
    previousStep: () => void;
    /** Validar un paso */
    validateStep: (step: number) => Promise<boolean>;
    /** Marcar un paso como completado */
    markStepAsCompleted: (step: number) => void;
}
/**
 * Traducciones del wizard
 * @description Translation strings for the Wizard component.
 * Supports internationalization (i18n) without imposing any specific system.
 */
export interface WizardTranslations {
    /** Texto del botón "Siguiente" */
    nextButton?: string;
    /** Texto del botón "Atrás" */
    backButton?: string;
    /** Texto del botón "Finalizar" (último paso) */
    finishButton?: string;
    /** Texto del botón "Cancelar" */
    cancelButton?: string;
    /** Texto del botón "Cerrar" */
    closeButton?: string;
    /** Texto mostrado durante loading */
    loadingText?: string;
    /** Label de paso (ej: "Paso {step} de {total}") */
    stepLabel?: string;
    /** Label para pasos completados */
    completedLabel?: string;
    /** Label para paso actual */
    currentLabel?: string;
    /** Label ARIA para el wizard */
    wizardAriaLabel?: string;
    /** Label ARIA para la navegación de pasos */
    stepNavigationAriaLabel?: string;
}
/**
 * Configuración de accesibilidad
 */
export interface WizardA11yConfig {
    /** Label para screen readers del wizard */
    wizardLabel?: string;
    /** Label para screen readers de la navegación de pasos */
    stepNavigationLabel?: string;
    /** Anuncia cambios de paso a screen readers */
    announceStepChanges?: boolean;
}
//# sourceMappingURL=Wizard.types.d.ts.map