/**
 * Property Manager - Unified property lifecycle for web components
 *
 * Handles property/attribute synchronization, validation, coercion, and change tracking.
 * All property updates flow through a single code path for consistency.
 */
/**
 * Configuration for a single property
 */
export interface PropertyConfig {
    type: 'string' | 'boolean' | 'number' | 'object' | 'array';
    visual?: boolean;
    formValue?: boolean;
    emitChange?: boolean;
    default?: any;
    validate?: (value: any) => boolean;
    coerce?: (value: any) => any;
    aliases?: Record<string, any>;
}
/**
 * Represents a property change
 */
export interface PropertyChange {
    name: string;
    oldValue: any;
    newValue: any;
    source: 'attribute' | 'property' | 'internal';
}
/**
 * Manages component properties with unified lifecycle
 */
export declare class PropertyManager<T = any> {
    private _props;
    private _config;
    constructor(config: Record<string, PropertyConfig>);
    /**
     * Initialize properties with default values
     */
    private _initializeDefaults;
    /**
     * Update a property value
     * Returns PropertyChange if value changed, null otherwise
     */
    updateProperty(name: string, value: any, source?: 'attribute' | 'property' | 'internal'): PropertyChange | null;
    /**
     * Coerce value to the correct type
     */
    private _coerceValue;
    /**
     * Validate a property value
     */
    private _validateValue;
    /**
     * Check if two values are equal
     */
    private _valuesEqual;
    /**
     * Get a property value
     */
    get(name: string): any;
    /**
     * Get all properties as an object
     */
    getAll(): Record<string, any>;
    /**
     * Get property configuration
     */
    getConfig(name: string): PropertyConfig | undefined;
    /**
     * Check if a property is visual (requires render)
     */
    isVisual(name: string): boolean;
    /**
     * Check if a property affects form value
     */
    isFormValue(name: string): boolean;
    /**
     * Check if a property should emit change events
     */
    shouldEmitChange(name: string): boolean;
    /**
     * Handle property aliases (e.g., not-searchable → searchable: false)
     */
    handleAlias(aliasName: string, value: any): PropertyChange | null;
}
//# sourceMappingURL=property-manager.d.ts.map