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