/**
 * Type definitions for the role-based icon control system
 *
 * This module defines the structure for icons_behaviour configuration
 * which controls how field control icons are displayed and behave
 * based on user roles.
 */
/**
 * Available control names in the icon system
 */
export type ControlName = 'control_lock' | 'control_delete' | 'control_visibility' | 'control_data_ok' | 'control_complete' | 'control_skip' | 'control_notes' | 'control_chat' | 'control_add_elements' | 'control_edit_field' | 'control_edit_group' | 'control_delete_field' | 'control_edit_elements' | 'control_private_files' | 'control_revalidate';
/**
 * Default order for controls when no order is specified
 */
export declare const DEFAULT_ICON_ORDER: ControlName[];
/**
 * Default controls that are always shown inline (extracted from kebab menu)
 */
export declare const DEFAULT_ALWAYS_EXTRACTED: ControlName[];
/**
 * Default controls that are extracted from kebab when they have values/activity
 * (e.g., notes icon extracted when notes exist, chat icon extracted when messages exist)
 */
export declare const DEFAULT_EXTRACTED_ON_VALUE: ControlName[];
/**
 * Edit icon controls - structural editing actions
 * Affected by `show_edit_icons` field/group override
 */
export declare const EDIT_CONTROL_NAMES: ControlName[];
/**
 * Control icon controls - collaboration/review actions
 * Affected by `show_control_icons` field/group override
 */
export declare const CONTROL_ICON_NAMES: ControlName[];
/**
 * Role-specific behavior for a single control
 */
export interface RoleControlBehaviour {
    /** Whether this control is visible to this role */
    visible: boolean;
    /** Whether this control is interactive (clickable) for this role */
    enabled: boolean;
    /**
     * Restrict which values the user can select (for multi-value controls like data_ok).
     * System can still programmatically set any value, but UI only shows allowed values.
     * @example ['ok', 'not_ok'] - user can't select 'pending'
     */
    allowed_values?: string[];
}
/**
 * Role definition with control behaviors
 */
export interface RoleBehaviour {
    /** Unique identifier for the role (used with active_role prop) */
    role_id: string;
    /** Display name for the role */
    role_name: string;
    /** Optional description of the role */
    role_description?: string;
    /** Control behaviors for this role - keyed by ControlName */
    controls: Partial<Record<ControlName, RoleControlBehaviour>>;
}
/**
 * Icons behaviour configuration at form/section root level
 *
 * This configuration controls:
 * - Which icons have borders
 * - The order icons are displayed
 * - Which icons are always extracted (shown individually)
 * - Which icons are extracted when they have values
 * - Role definitions for visibility/enabled states
 *
 * Consolidation rule (automatic):
 * 1. Data OK: ALWAYS inline (hardcoded)
 * 2. Controls in always_extracted: ALWAYS inline
 * 3. Controls in extracted_on_value AND has activity: INLINE (extracted)
 * 4. Remaining visible controls: Kebab menu if 2+, otherwise inline
 */
export interface IconsBehaviour {
    /**
     * Data OK display mode for all fields in this form
     * - 'checkbox': Binary checkbox (OK/Not OK) - default
     * - 'multistate': Three-state selector (OK/Not OK/Pending)
     */
    data_ok_mode?: 'checkbox' | 'multistate';
    /**
     * Controls that have borders enabled.
     * When icons_behaviour is provided, only controls listed here will have borders.
     * All other controls will have no border (default: off).
     * @example ['control_data_ok'] - Only data_ok has a border
     */
    border_on?: ControlName[];
    /**
     * @deprecated No longer used. Use border_on to specify which controls have borders.
     */
    border_off?: ControlName[];
    /**
     * Display order of icons (left to right)
     * Icons not in this array will not be shown
     * @default DEFAULT_ICON_ORDER
     */
    icon_order?: ControlName[];
    /**
     * Icons always shown individually (never in kebab menu)
     * @example ['control_data_ok'] - Data OK always shown inline
     */
    always_extracted?: ControlName[];
    /**
     * Icons extracted from kebab menu when they have values/activity
     *
     * Extraction behavior by control:
     * - control_notes: extracted when at least one note exists
     * - control_chat: extracted when at least one chat message exists
     *
     * @example ['control_notes', 'control_chat']
     */
    extracted_on_value?: ControlName[];
    /**
     * Role definitions for different user scenarios
     * Each role defines which controls are visible and enabled
     */
    roles?: RoleBehaviour[];
}
/**
 * Default role control behaviour - all controls hidden and disabled
 */
export declare const DEFAULT_ROLE_CONTROL_BEHAVIOUR: RoleControlBehaviour;
/**
 * Get default icons behaviour configuration
 */
export declare function get_default_icons_behaviour(): IconsBehaviour;
/**
 * Type alias for IconsBehaviour
 * The name "GlobalSettings" better represents the expanded scope of this configuration,
 * which now includes role-based permissions (like can_access_private_files) in addition to icon behaviors.
 *
 * @alias IconsBehaviour
 */
export type GlobalSettings = IconsBehaviour;
//# sourceMappingURL=icons_behaviour.d.ts.map