import { ButtonMetadata } from '../../types';
import { PermissionsViewConfig } from './types';
import * as i0 from "@angular/core";
interface PermGroupView {
    key: string;
    label: string;
    perms: string[];
}
interface RoleView {
    id: string;
    name: string;
    description?: string;
    isSystem: boolean;
    groups: PermGroupView[];
    hasPerms: boolean;
}
/**
 * `val-permissions-view` — vista Permisos full-feature autocontenida (organism).
 * Visor RBAC de solo lectura: muestra los roles del sistema (Visor/Editor/Admin +
 * roles de plataforma) y los roles personalizados de la org activa, con el
 * catálogo de permisos agrupado por alcance (app actual / plataforma / otras apps).
 * Promovida desde `showcase` bajo el proceso de ADR-021.
 *
 * **RBAC interno** (como `organization-view`): lee la org activa vía
 * `AuthService.user().activeOrgId`. La vista NO muta nada — el control de quién
 * puede verla es responsabilidad del guard de ruta del consumer; no hay gating
 * fino interno ni se expone como config.
 *
 * Datos: `forkJoin` de `OrgService.listOrgRoles(orgId)` (roles de la org) +
 * `PermissionCatalogService.getCatalog(orgId)` (catálogo + appId actual). El
 * catálogo define el alcance (`scope`/`appId`) de cada recurso para agrupar.
 *
 * NO renderiza ion-content — vive dentro de val-page-wrapper. `ActivatedRoute` se
 * inyecta `{ optional: true }` solo para leer el route data de config. Auto-registra
 * sus defaults i18n (es/en) si el consumer no proveyó el namespace (default
 * `Settings.Permissions`).
 */
export declare class PermissionsViewComponent {
    private i18n;
    private orgService;
    private catalog;
    private auth;
    private nav;
    private route;
    /**
     * Config vía @Input (object-first). Si no se pasa, se cae al route data
     * `permissionsConfig` (poblado por `provideValtechPermissionsRoutes`).
     * `resolvedConfig` mergea con los defaults — `@Input` gana sobre route data.
     */
    config?: PermissionsViewConfig;
    readonly resolvedConfig: import("@angular/core").Signal<Required<PermissionsViewConfig>>;
    /** Namespace i18n resuelto (capturado para llamadas no-reactivas). */
    private get ns();
    readonly loading: import("@angular/core").WritableSignal<boolean>;
    readonly loadError: import("@angular/core").WritableSignal<unknown>;
    private readonly roles;
    readonly systemRoles: import("@angular/core").Signal<RoleView[]>;
    readonly customRoles: import("@angular/core").Signal<RoleView[]>;
    readonly activeOrgId: import("@angular/core").Signal<string>;
    readonly retryButtonProps: import("@angular/core").Signal<Partial<ButtonMetadata>>;
    constructor();
    load(): void;
    private buildRoleView;
    protected tt(key: string): string;
    appLabel(appId: string): string;
    roleLabel(name: string): string;
    permLabel(resource: string, action: string): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<PermissionsViewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PermissionsViewComponent, "val-permissions-view", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
}
export {};
