export type SettingsFactStatus = "error" | "known" | "pending" | "unknown" | "unavailable"; export type SettingsSurfaceState = "degraded" | "error" | "forbidden" | "loading" | "ready" | "unsupported" | "unavailable"; export type SettingsSurfaceAccess = "manager" | "read-only" | "none"; export type SettingsSurfaceRequirement = { key: string; kind: "authorization"; read?: string; write?: string; } | { key: string; kind: "capability"; } | { key: string; kind: "runtime"; }; export interface SettingsAuthorizationRequirement { read?: string; write?: string; } export interface SettingsSurfaceRequirements { all?: readonly SettingsSurfaceRequirement[]; authorization?: SettingsAuthorizationRequirement; capability?: string; runtime?: string; } export interface SettingsSurfaceRegistration { id?: string; pluginId?: string; source: "application" | "compatibility" | "core" | "plugin"; } export interface SettingsSurfaceNavigationPolicy { discoverable?: boolean; order?: number; } export interface SettingsSurfaceDefinition { component?: unknown; id: string; label: string; navigation?: SettingsSurfaceNavigationPolicy; order?: number; path: string; registration?: SettingsSurfaceRegistration; requirements?: SettingsSurfaceRequirements; view: string; /** UI visibility is a preference, never an authorization grant. */ visibility?: "hidden" | "visible"; } export interface SettingsCapabilitiesFacts { status: SettingsFactStatus; values: Readonly>; } export interface SettingsAuthorizationFacts { canManage?: boolean; effectiveRights: readonly string[]; status: SettingsFactStatus; } export interface SettingsRuntimeFacts { authorization: SettingsAuthorizationFacts; capabilities: SettingsCapabilitiesFacts; runtime: { status: SettingsFactStatus; statuses?: Readonly>; values?: Readonly>; }; } export interface ResolvedSettingsSurface extends SettingsSurfaceDefinition { access: SettingsSurfaceAccess; missingRights: readonly string[]; state: SettingsSurfaceState; visible: boolean; } export interface ResolvedSettingsNavigationItem { access: SettingsSurfaceAccess; id: string; label: string; order: number; path: string; state: SettingsSurfaceState; view: string; visible: boolean; } export interface ResolvedSettingsModel { active: ResolvedSettingsSurface | null; navigation: readonly ResolvedSettingsNavigationItem[]; pathToView: Readonly>; surfaces: readonly ResolvedSettingsSurface[]; }