import * as rxjs from 'rxjs';
import { Observable } from 'rxjs';
import * as _angular_core from '@angular/core';
import { EventEmitter, QueryList, ElementRef, TrackByFunction, OnInit } from '@angular/core';
import { ConfigStateService, ListService } from '@abp/ng.core';
import { ToasterService, ConfirmationService } from '@abp/ng.theme.shared';
import { GetPermissionListResultDto, PermissionsService, PermissionGroupDto, PermissionGrantInfoDto, ProviderInfoDto, ResourcePermissionGrantInfoDto, ResourcePermissionDefinitionDto, ResourcePermissionWithProdiverGrantInfoDto, ResourceProviderDto, SearchProviderKeyInfo } from '@abp/ng.permission-management/proxy';
import { LookupItem } from '@abp/ng.components/lookup';

declare namespace PermissionManagement {
    interface State {
        permissionRes: GetPermissionListResultDto;
    }
    interface PermissionManagementComponentInputs {
        visible: boolean;
        readonly providerName: string;
        readonly providerKey: string;
        readonly hideBadges: boolean;
    }
    interface PermissionManagementComponentOutputs {
        readonly visibleChange: EventEmitter<boolean>;
    }
}

type PermissionWithStyle = PermissionGrantInfoDto & {
    style: string;
};
type PermissionWithGroupName = PermissionGrantInfoDto & {
    groupName: string;
};
declare class PermissionManagementComponent implements PermissionManagement.PermissionManagementComponentInputs, PermissionManagement.PermissionManagementComponentOutputs {
    protected readonly service: PermissionsService;
    protected readonly configState: ConfigStateService;
    protected readonly toasterService: ToasterService;
    private document;
    readonly providerName: string;
    readonly providerKey: string;
    readonly hideBadges = false;
    protected _visible: boolean;
    entityDisplayName: string | undefined;
    get visible(): boolean;
    set visible(value: boolean);
    readonly visibleChange: EventEmitter<boolean>;
    selectAllInThisTabsRef: QueryList<ElementRef<HTMLInputElement>>;
    selectAllInAllTabsRef: QueryList<ElementRef<HTMLInputElement>>;
    data: GetPermissionListResultDto;
    selectedGroup?: PermissionGroupDto | null;
    permissions: PermissionWithGroupName[];
    selectThisTab: boolean;
    selectAllTab: boolean;
    disableSelectAllTab: boolean;
    disabledSelectAllInAllTabs: boolean;
    modalBusy: boolean;
    filter: _angular_core.WritableSignal<string>;
    selectedGroupPermissions: PermissionWithStyle[];
    permissionGroupSignal: _angular_core.WritableSignal<PermissionGroupDto[]>;
    permissionGroups: _angular_core.Signal<PermissionGroupDto[]>;
    trackByFn: TrackByFunction<PermissionGroupDto>;
    getChecked(name: string): boolean;
    setSelectedGroup(group: PermissionGroupDto): void;
    setDisabled(permissions: PermissionGrantInfoDto[]): void;
    isGrantedByOtherProviderName(grantedProviders: ProviderInfoDto[]): boolean;
    onClickCheckbox(clickedPermission: PermissionGrantInfoDto): void;
    updatePermissionStatus(clickedPermission: PermissionGrantInfoDto): void;
    setParentClicked(clickedPermission: PermissionGrantInfoDto): void;
    updateSelectedGroupPermissions(clickedPermissions: PermissionGrantInfoDto): void;
    setTabCheckboxState(): void;
    setGrantCheckboxState(): void;
    onClickSelectThisTab(): void;
    onClickSelectAll(): void;
    onChangeGroup(group: PermissionGroupDto): void;
    submit(): void;
    openModal(): rxjs.Observable<GetPermissionListResultDto>;
    initModal(): void;
    getAssignedCount(groupName: string): number;
    shouldFetchAppConfig(): boolean;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionManagementComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<PermissionManagementComponent, "abp-permission-management", ["abpPermissionManagement"], { "providerName": { "alias": "providerName"; "required": false; }; "providerKey": { "alias": "providerKey"; "required": false; }; "hideBadges": { "alias": "hideBadges"; "required": false; }; "entityDisplayName": { "alias": "entityDisplayName"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; }, { "visibleChange": "visibleChange"; }, never, never, true, never>;
}

declare enum eResourcePermissionViewModes {
    List = "list",
    Add = "add",
    Edit = "edit"
}

declare class ResourcePermissionStateService {
    readonly viewMode: _angular_core.WritableSignal<eResourcePermissionViewModes>;
    readonly modalBusy: _angular_core.WritableSignal<boolean>;
    readonly hasResourcePermission: _angular_core.WritableSignal<boolean>;
    readonly hasProviderKeyLookupService: _angular_core.WritableSignal<boolean>;
    readonly resourceName: _angular_core.WritableSignal<string>;
    readonly resourceKey: _angular_core.WritableSignal<string>;
    readonly resourceDisplayName: _angular_core.WritableSignal<string>;
    readonly allResourcePermissions: _angular_core.WritableSignal<ResourcePermissionGrantInfoDto[]>;
    readonly resourcePermissions: _angular_core.WritableSignal<ResourcePermissionGrantInfoDto[]>;
    readonly totalCount: _angular_core.WritableSignal<number>;
    readonly permissionDefinitions: _angular_core.WritableSignal<ResourcePermissionDefinitionDto[]>;
    readonly permissionsWithProvider: _angular_core.WritableSignal<ResourcePermissionWithProdiverGrantInfoDto[]>;
    readonly selectedPermissions: _angular_core.WritableSignal<string[]>;
    readonly providers: _angular_core.WritableSignal<ResourceProviderDto[]>;
    readonly selectedProviderName: _angular_core.WritableSignal<string>;
    readonly selectedProviderKey: _angular_core.WritableSignal<string>;
    readonly editProviderName: _angular_core.WritableSignal<string>;
    readonly editProviderKey: _angular_core.WritableSignal<string>;
    readonly searchFilter: _angular_core.WritableSignal<string>;
    readonly searchResults: _angular_core.WritableSignal<SearchProviderKeyInfo[]>;
    readonly showDropdown: _angular_core.WritableSignal<boolean>;
    readonly isAddMode: _angular_core.Signal<boolean>;
    readonly isEditMode: _angular_core.Signal<boolean>;
    readonly isListMode: _angular_core.Signal<boolean>;
    readonly currentPermissionsList: _angular_core.Signal<ResourcePermissionDefinitionDto[]>;
    readonly allPermissionsSelected: _angular_core.Signal<boolean>;
    readonly canSave: _angular_core.Signal<boolean>;
    goToListMode(): void;
    goToAddMode(): void;
    prepareEditMode(grant: ResourcePermissionGrantInfoDto): void;
    setEditModePermissions(permissions: ResourcePermissionWithProdiverGrantInfoDto[]): void;
    togglePermission(permissionName: string): void;
    toggleAllPermissions(selectAll: boolean): void;
    isPermissionSelected(permissionName: string): boolean;
    onProviderChange(providerName: string): void;
    selectProviderKey(key: SearchProviderKeyInfo): void;
    reset(): void;
    setResourceData(permissions: ResourcePermissionGrantInfoDto[]): void;
    setProviders(providers: ResourceProviderDto[]): void;
    setDefinitions(permissions: ResourcePermissionDefinitionDto[]): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResourcePermissionStateService, never>;
    static ɵprov: _angular_core.ɵɵInjectableDeclaration<ResourcePermissionStateService>;
}

declare class ResourcePermissionManagementComponent implements OnInit {
    readonly eResourcePermissionViewModes: typeof eResourcePermissionViewModes;
    protected readonly service: PermissionsService;
    protected readonly toasterService: ToasterService;
    protected readonly confirmationService: ConfirmationService;
    protected readonly state: ResourcePermissionStateService;
    private readonly list;
    readonly resourceName: _angular_core.InputSignal<string>;
    readonly resourceKey: _angular_core.InputSignal<string>;
    readonly resourceDisplayName: _angular_core.InputSignal<string>;
    readonly visible: _angular_core.ModelSignal<boolean>;
    private readonly previousVisible;
    constructor();
    ngOnInit(): void;
    openModal(): void;
    onAddClicked(): void;
    onEditClicked(grant: ResourcePermissionGrantInfoDto): void;
    onDeleteClicked(grant: ResourcePermissionGrantInfoDto): void;
    savePermission(): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResourcePermissionManagementComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourcePermissionManagementComponent, "abp-resource-permission-management", ["abpResourcePermissionManagement"], { "resourceName": { "alias": "resourceName"; "required": true; "isSignal": true; }; "resourceKey": { "alias": "resourceKey"; "required": true; "isSignal": true; }; "resourceDisplayName": { "alias": "resourceDisplayName"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; }, never, never, true, never>;
}

interface ProviderKeyLookupItem extends LookupItem {
    providerKey: string;
    providerDisplayName?: string;
}
declare class ProviderKeySearchComponent implements OnInit {
    readonly state: ResourcePermissionStateService;
    private readonly service;
    private readonly destroyRef;
    readonly resourceName: _angular_core.InputSignal<string>;
    searchFn: (filter: string) => Observable<ProviderKeyLookupItem[]>;
    ngOnInit(): void;
    onItemSelected(item: ProviderKeyLookupItem): void;
    private loadProviderKeys;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProviderKeySearchComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProviderKeySearchComponent, "abp-provider-key-search", never, { "resourceName": { "alias": "resourceName"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
}

interface PermissionItem {
    name?: string | null;
    displayName?: string | null;
}
declare class PermissionCheckboxListComponent {
    readonly state: ResourcePermissionStateService;
    readonly permissions: _angular_core.InputSignal<PermissionItem[]>;
    readonly idPrefix: _angular_core.InputSignal<string>;
    readonly title: _angular_core.InputSignal<string>;
    readonly showTitle: _angular_core.InputSignal<boolean>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionCheckboxListComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<PermissionCheckboxListComponent, "abp-permission-checkbox-list", never, { "permissions": { "alias": "permissions"; "required": true; "isSignal": true; }; "idPrefix": { "alias": "idPrefix"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class ResourcePermissionListComponent {
    readonly state: ResourcePermissionStateService;
    readonly list: ListService<any>;
    readonly addClicked: _angular_core.OutputEmitterRef<void>;
    readonly editClicked: _angular_core.OutputEmitterRef<ResourcePermissionGrantInfoDto>;
    readonly deleteClicked: _angular_core.OutputEmitterRef<ResourcePermissionGrantInfoDto>;
    constructor();
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResourcePermissionListComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourcePermissionListComponent, "abp-resource-permission-list", never, {}, { "addClicked": "addClicked"; "editClicked": "editClicked"; "deleteClicked": "deleteClicked"; }, never, never, true, never>;
}

declare class ResourcePermissionFormComponent {
    readonly state: ResourcePermissionStateService;
    readonly eResourcePermissionViewModes: typeof eResourcePermissionViewModes;
    readonly mode: _angular_core.InputSignal<eResourcePermissionViewModes>;
    readonly resourceName: _angular_core.InputSignal<string>;
    readonly save: _angular_core.OutputEmitterRef<void>;
    readonly cancel: _angular_core.OutputEmitterRef<void>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ResourcePermissionFormComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ResourcePermissionFormComponent, "abp-resource-permission-form", never, { "mode": { "alias": "mode"; "required": true; "isSignal": true; }; "resourceName": { "alias": "resourceName"; "required": true; "isSignal": true; }; }, { "save": "save"; "cancel": "cancel"; }, never, never, true, never>;
}

declare const enum ePermissionManagementComponents {
    PermissionManagement = "PermissionManagement.PermissionManagementComponent",
    ResourcePermissions = "PermissionManagement.ResourcePermissionsComponent"
}

declare class PermissionManagementModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<PermissionManagementModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<PermissionManagementModule, never, [typeof PermissionManagementComponent], [typeof PermissionManagementComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<PermissionManagementModule>;
}

export { PermissionCheckboxListComponent, PermissionManagement, PermissionManagementComponent, PermissionManagementModule, ProviderKeySearchComponent, ResourcePermissionFormComponent, ResourcePermissionListComponent, ResourcePermissionManagementComponent, ePermissionManagementComponents };
