import { CardProps } from '@heroui/react'; import { AthenaAuthCapabilitiesResult } from '@xylex-group/athena/browser'; import { ComponentType, ReactNode } from 'react'; import { AuthPluginRequiredCapability } from './plugin-capability.js'; export type AuthUiExtensionArea = "account" | "security" | "organization"; export interface SettingsSectionContentProps { area: AuthUiExtensionArea; id: string; variant?: CardProps["variant"]; } export interface SettingsSectionContribution { area: AuthUiExtensionArea; capability?: AuthPluginRequiredCapability; description?: ReactNode; id: string; /** Plain-text label used for loading and error semantics. */ label: string; order?: number; render: ComponentType; title: ReactNode; } export type SettingsSectionContributionSourceKind = "extension" | "plugin"; export interface SettingsSectionContributionSource { id: string; kind: SettingsSectionContributionSourceKind; requiresCapability?: AuthPluginRequiredCapability; sections: readonly SettingsSectionContribution[]; } export interface ResolvedSettingsSectionContribution { contribution: SettingsSectionContribution; sourceId: string; sourceKind: SettingsSectionContributionSourceKind; } export interface SettingsContributionIdentity { area: AuthUiExtensionArea; contributionId: string; sourceId: string; sourceKind: SettingsSectionContributionSourceKind; } export interface ResolveSettingsContributionsOptions { area?: AuthUiExtensionArea; capabilities?: AthenaAuthCapabilitiesResult; sources: readonly SettingsSectionContributionSource[]; } export interface AuthActionContribution { id: string; label: ReactNode; order?: number; render: ComponentType; } export interface UserMenuContribution { id: string; label: ReactNode; order?: number; render: ComponentType; } export interface AthenaAuthUiExtension { auth?: { actions?: readonly AuthActionContribution[]; }; id: string; requires?: AuthPluginRequiredCapability; settings?: { sections?: readonly SettingsSectionContribution[]; }; userMenu?: { items?: readonly UserMenuContribution[]; }; } export interface AthenaAuthUiExtensionRegistry { getExtensions: () => readonly AthenaAuthUiExtension[]; getResolvedSettingsSections: (area?: AuthUiExtensionArea) => readonly ResolvedSettingsSectionContribution[]; getSettingsSections: (area?: AuthUiExtensionArea) => readonly SettingsSectionContribution[]; register: (extension: AthenaAuthUiExtension) => void; unregister: (id: string) => boolean; } export declare function settingsContributionKey(identity: SettingsContributionIdentity): string; export declare function validateSettingsContributionSource(source: SettingsSectionContributionSource): SettingsSectionContributionSource; export declare function validateAthenaAuthUiExtension(extension: AthenaAuthUiExtension): AthenaAuthUiExtension; export declare function assertUniqueAthenaAuthUiExtensions(extensions: readonly AthenaAuthUiExtension[]): void; export declare function resolveSettingsContributions({ area, capabilities, sources }: ResolveSettingsContributionsOptions): ResolvedSettingsSectionContribution[]; export declare function resolveSettingsSectionContributions(sections: readonly SettingsSectionContribution[], area?: AuthUiExtensionArea): SettingsSectionContribution[]; export declare function resolveSettingsSectionContributionsWithSources(sections: readonly ResolvedSettingsSectionContribution[], area?: AuthUiExtensionArea): ResolvedSettingsSectionContribution[]; export declare function resolveSettingsSectionContributionsFromSources(sources: readonly SettingsSectionContributionSource[], capabilities: AthenaAuthCapabilitiesResult): ResolvedSettingsSectionContribution[]; export declare function createAthenaAuthUiExtensionRegistry(initialExtensions?: readonly AthenaAuthUiExtension[]): AthenaAuthUiExtensionRegistry;