import React from 'react';
import type { ApplicationDetailDto, ApplicationTenantDto, ApplicationAccessLevel, AvailableTenantForAppDto } from '@/services/api/adminApi';
export interface BulkModuleNode {
    id: string;
    label: string;
    code: string;
    icon: string | null;
    isAssigned: boolean;
    sections: BulkSectionNode[];
}
export interface BulkSectionNode {
    id: string;
    label: string;
    code: string;
    icon: string | null;
    isAssigned: boolean;
}
export interface ApplicationPublicationTabProps {
    application: ApplicationDetailDto;
    assignedTenants: ApplicationTenantDto[];
    availableTenants: AvailableTenantForAppDto[];
    showAssignModal: boolean;
    selectedTenantIds: string[];
    selectedAccessLevel: ApplicationAccessLevel;
    tenantSearch: string;
    showCustomizeDrawer: boolean;
    customizingTenant: ApplicationTenantDto | null;
    bulkAccessMode: 'full' | 'custom';
    bulkModules: BulkModuleNode[];
    bulkExpandedModules: Set<string>;
    loadingBulkModules: boolean;
    isUpdateMode: boolean;
    updateMergeMode: 'merge' | 'replace';
    showConfirmRemovalDialog: boolean;
    pendingRemovals: {
        modules: number;
        sections: number;
    };
    saving: boolean;
    includePersonalTenants: boolean;
    isInDefaultPersonalTemplate: boolean;
    onAddTenant: () => void;
    onRemoveTenant: (tenantId: string) => Promise<void>;
    onUpdateAccessLevel: (tenantId: string, accessLevel: ApplicationAccessLevel) => Promise<void>;
    onCustomizeTenant: (tenant: ApplicationTenantDto) => void;
    onCloseCustomizeDrawer: () => void;
    onAssignTenants: () => Promise<void>;
    onUpdateTenants: () => Promise<void>;
    onExecuteUpdateTenants: () => Promise<void>;
    onCancelRemovalDialog: () => void;
    setShowAssignModal: (show: boolean) => void;
    setSelectedTenantIds: React.Dispatch<React.SetStateAction<string[]>>;
    setSelectedAccessLevel: React.Dispatch<React.SetStateAction<ApplicationAccessLevel>>;
    setTenantSearch: (search: string) => void;
    setBulkAccessMode: React.Dispatch<React.SetStateAction<'full' | 'custom'>>;
    setIsUpdateMode: (mode: boolean) => void;
    setUpdateMergeMode: React.Dispatch<React.SetStateAction<'merge' | 'replace'>>;
    onToggleTenantSelection: (tenantId: string) => void;
    onSelectAllFilteredTenants: () => void;
    onClearTenantSelection: () => void;
    setIncludePersonalTenants: (value: boolean) => void;
    onLoadBulkModules: () => Promise<void>;
    onToggleBulkModuleExpand: (moduleId: string) => void;
    onToggleBulkModule: (moduleId: string) => void;
    onToggleBulkSection: (moduleId: string, sectionId: string) => void;
    onGetBulkModuleCheckState: (module: BulkModuleNode) => 'checked' | 'unchecked' | 'indeterminate';
    onGetBulkStats: () => {
        totalModules: number;
        assignedModules: number;
        totalSections: number;
        assignedSections: number;
    };
    onSelectAllBulkModules: () => void;
    onClearBulkModules: () => void;
    appId: string;
}
export declare const ApplicationPublicationTab: React.FC<ApplicationPublicationTabProps>;
//# sourceMappingURL=ApplicationPublicationTab.d.ts.map