import { Renderable } from '@tempots/dom';
import type { Controller } from '../../form';
import type { SchemaContext } from '../schema-context';
import { type VisibilityConfig, type VisibilityCondition, type VisibilityExpression } from './visibility-evaluation';
/**
 * Visibility behavior options
 */
export interface VisibilityOptions {
    /** How to handle hidden fields */
    behavior: 'hide' | 'unmount';
    /** Whether to clear field value when hidden */
    clearOnHide?: boolean;
}
/**
 * Wrapper component that handles field visibility based on x:ui.visibleIf
 */
export declare function WithVisibility<T>({ ctx, controller, children, options, }: {
    ctx: SchemaContext;
    controller: Controller<T>;
    children: Renderable;
    options?: Partial<VisibilityOptions>;
}): Renderable;
/**
 * Enhanced visibility wrapper that also handles CSS classes for hiding
 */
export declare function WithVisibilityAndCSS<T>({ ctx, controller, children, options, }: {
    ctx: SchemaContext;
    controller: Controller<T>;
    children: Renderable;
    options?: Partial<VisibilityOptions>;
    hiddenClass?: string;
}): Renderable;
/**
 * Utility to check if a schema has visibility conditions
 */
export declare function hasVisibilityConditions(ctx: SchemaContext): boolean;
/**
 * Utility to get all fields referenced by visibility conditions in a schema
 */
export declare function getVisibilityDependencies(ctx: SchemaContext): string[];
/**
 * Helper to create visibility conditions programmatically
 */
export declare function createVisibilityCondition(field: string, operator: 'equals' | 'notEquals' | 'truthy' | 'falsy', value?: unknown): VisibilityConfig;
/**
 * Helper to create complex visibility expressions
 */
export declare function createVisibilityExpression(operator: 'and' | 'or' | 'not', conditions: (VisibilityCondition | VisibilityExpression)[]): VisibilityExpression;
/**
 * Validation helper to check if visibility configuration is valid
 */
export declare function validateVisibilityConfig(config: unknown): config is VisibilityConfig;
/**
 * Debug helper to log visibility evaluation
 */
export declare function debugVisibility(config: VisibilityConfig, formData: unknown, fieldPath?: string): void;
