/**
 * Field rendering decision utility
 *
 * Determines whether a field should be rendered based on:
 * - Dependency conditions
 * - Visibility state
 * - Deleted state
 * - User role permissions
 */
import type { TraversableField, RenderCheckOptions } from './types.js';
import type { FieldMetadata } from '../field_state/types.js';
/**
 * Check if a field should be rendered
 *
 * Evaluates multiple conditions to determine field visibility:
 * 1. Dependency conditions (field shows only when dependent field has specific value)
 * 2. Visibility state (hidden fields are filtered for responders)
 * 3. Deleted state (deleted fields are skipped)
 *
 * @param field - Field configuration
 * @param form_data - Current form data for dependency checking
 * @param field_metadata - Optional field metadata with visibility/deleted state
 * @param options - Check options to enable/disable specific checks
 * @returns true if field should be rendered, false to skip
 *
 * @example
 * ```ts
 * // Basic usage
 * if (should_render_field(field, form_data)) {
 *   renderField(field);
 * }
 *
 * // With metadata and role
 * if (should_render_field(field, form_data, metadata, { user_role: 'responder' })) {
 *   renderField(field);
 * }
 *
 * // Skip dependency checks (show all fields regardless of conditions)
 * if (should_render_field(field, form_data, metadata, { check_dependencies: false })) {
 *   renderField(field);
 * }
 * ```
 */
export declare function should_render_field(field: TraversableField, form_data: Record<string, unknown>, field_metadata?: FieldMetadata, options?: RenderCheckOptions): boolean;
/**
 * Check if a field value is considered "empty"
 *
 * Empty values: undefined, null, empty string, empty array
 *
 * @param value - Field value to check
 * @returns true if value is empty
 */
export declare function is_field_empty(value: unknown): boolean;
/**
 * Get field value from form data
 *
 * Supports nested paths using dot notation (e.g., "group.field").
 *
 * @param field_id - Field ID or nested path
 * @param form_data - Form data record
 * @returns Field value or undefined
 */
export declare function get_field_value(field_id: string, form_data: Record<string, unknown>): unknown;
/**
 * Check if a group has any visible children (recursive).
 *
 * Groups with files are always considered to have visible content.
 *
 * @param group - Group field to check
 * @param form_data - Current form data (used for dependency and file checks)
 * @param field_metadata_map - Map of field_id → FieldMetadata
 * @param options - Render check options (same as should_render_field)
 * @returns true if at least one child would render
 */
export declare function has_visible_children(group: TraversableField, form_data: Record<string, unknown>, field_metadata_map: Record<string, FieldMetadata>, options?: RenderCheckOptions): boolean;
/**
 * Check if any group in a list has visible content.
 *
 * @param groups - Array of groups to check
 * @param form_data - Current form data
 * @param field_metadata_map - Map of field_id → FieldMetadata
 * @param options - Render check options
 * @returns true if at least one group has visible content
 */
export declare function has_visible_groups(groups: TraversableField[], form_data: Record<string, unknown>, field_metadata_map: Record<string, FieldMetadata>, options?: RenderCheckOptions): boolean;
//# sourceMappingURL=should_render_field.d.ts.map