Package: @lilith/ui-auth Split from: lilith/ui.git or lilith/build.git Publish workflow: calls lilith/workflows/.forgejo/workflows/publish-npm.yml@main
172 lines
No EOL
5.7 KiB
TypeScript
172 lines
No EOL
5.7 KiB
TypeScript
/**
|
|
* useAuthPanel Hook
|
|
*
|
|
* Convenience hook for managing rich auth panel state.
|
|
* Supports all three panel types: Split, Slide, and Fullscreen.
|
|
* Handles open/close, mode switching, theming, and info panel content.
|
|
*/
|
|
import type { AuthModalMode, User, AuthHandler } from './types';
|
|
import type { AuthPanelThemeVariant, AuthPanelTheme } from './themes';
|
|
import type { InfoPanelContent } from './panels/InfoPanel';
|
|
export type AuthPanelType = 'split' | 'slide' | 'fullscreen';
|
|
export type SlideDirection = 'left' | 'right';
|
|
export interface UseAuthPanelOptions {
|
|
/** SSO server URL - for direct SSO mode */
|
|
ssoUrl?: string;
|
|
/** Auth handler for provider-based integration - alternative to ssoUrl */
|
|
authHandler?: AuthHandler;
|
|
/** Initial mode when panel opens */
|
|
initialMode?: AuthModalMode;
|
|
/** Default role for registration */
|
|
defaultRole?: 'user' | 'provider' | 'client';
|
|
/** Show role selector in registration */
|
|
showRoleSelector?: boolean;
|
|
/** Panel type to use */
|
|
panelType?: AuthPanelType;
|
|
/** Theme variant */
|
|
theme?: AuthPanelThemeVariant;
|
|
/** Custom theme override */
|
|
customTheme?: AuthPanelTheme;
|
|
/** Slide direction (for slide panel) */
|
|
slideDirection?: SlideDirection;
|
|
/** Panel width (for slide panel) */
|
|
slideWidth?: number;
|
|
/** Background image URL (for fullscreen panel) */
|
|
backgroundImage?: string;
|
|
/** Info panel content */
|
|
infoPanelContent?: InfoPanelContent;
|
|
/** Allow mode switching between login/register */
|
|
allowModeSwitch?: boolean;
|
|
/** Show close button */
|
|
showCloseButton?: boolean;
|
|
/** Enable glass effect */
|
|
glassEffect?: boolean;
|
|
/** Blur overlay/background */
|
|
overlayBlur?: boolean;
|
|
/** Called after successful auth */
|
|
onSuccess?: (user: User) => void;
|
|
/** Called on auth error */
|
|
onError?: (error: Error) => void;
|
|
}
|
|
export interface UseAuthPanelReturn {
|
|
/** Whether panel is open */
|
|
isOpen: boolean;
|
|
/** Current mode (login or register) */
|
|
mode: AuthModalMode;
|
|
/** Current panel type */
|
|
panelType: AuthPanelType;
|
|
/** Current theme variant */
|
|
themeVariant: AuthPanelThemeVariant;
|
|
/** Resolved theme object */
|
|
theme: AuthPanelTheme;
|
|
/** SSO URL */
|
|
ssoUrl: string | undefined;
|
|
/** Auth handler */
|
|
authHandler: AuthHandler | undefined;
|
|
/** Default role for registration */
|
|
defaultRole: 'user' | 'provider' | 'client' | undefined;
|
|
/** Show role selector */
|
|
showRoleSelector: boolean;
|
|
/** Slide direction */
|
|
slideDirection: SlideDirection;
|
|
/** Slide panel width */
|
|
slideWidth: number;
|
|
/** Background image URL */
|
|
backgroundImage: string | undefined;
|
|
/** Info panel content */
|
|
infoPanelContent: InfoPanelContent | undefined;
|
|
/** Allow mode switching */
|
|
allowModeSwitch: boolean;
|
|
/** Show close button */
|
|
showCloseButton: boolean;
|
|
/** Glass effect enabled */
|
|
glassEffect: boolean;
|
|
/** Overlay blur enabled */
|
|
overlayBlur: boolean;
|
|
/** Open panel in login mode */
|
|
openLogin: () => void;
|
|
/** Open panel in register mode */
|
|
openRegister: (role?: 'user' | 'provider' | 'client') => void;
|
|
/** Open panel with specific config */
|
|
open: (config?: {
|
|
mode?: AuthModalMode;
|
|
role?: 'user' | 'provider' | 'client';
|
|
panelType?: AuthPanelType;
|
|
theme?: AuthPanelThemeVariant;
|
|
}) => void;
|
|
/** Close panel */
|
|
close: () => void;
|
|
/** Toggle panel */
|
|
toggle: () => void;
|
|
/** Switch mode */
|
|
setMode: (mode: AuthModalMode) => void;
|
|
/** Switch panel type */
|
|
setPanelType: (type: AuthPanelType) => void;
|
|
/** Switch theme */
|
|
setTheme: (theme: AuthPanelThemeVariant) => void;
|
|
/** Update info panel content */
|
|
setInfoContent: (content: InfoPanelContent) => void;
|
|
/** Handle auth success */
|
|
handleSuccess: (user: User) => void;
|
|
/** Handle auth error */
|
|
handleError: (error: Error) => void;
|
|
/** Get props for AuthSplitPanel */
|
|
getSplitPanelProps: () => SplitPanelProps;
|
|
/** Get props for AuthSlidePanel */
|
|
getSlidePanelProps: () => SlidePanelProps;
|
|
/** Get props for AuthFullscreenPanel */
|
|
getFullscreenPanelProps: () => FullscreenPanelProps;
|
|
}
|
|
interface SplitPanelProps {
|
|
mode: AuthModalMode;
|
|
theme: AuthPanelThemeVariant;
|
|
customTheme?: AuthPanelTheme;
|
|
infoPanel?: InfoPanelContent;
|
|
authHandler?: AuthHandler;
|
|
ssoUrl?: string;
|
|
defaultRole?: 'user' | 'provider' | 'client';
|
|
showRoleSelector: boolean;
|
|
onSuccess: (user: User) => void;
|
|
onClose: () => void;
|
|
onError: (error: Error) => void;
|
|
showCloseButton: boolean;
|
|
allowModeSwitch: boolean;
|
|
}
|
|
interface SlidePanelProps {
|
|
isOpen: boolean;
|
|
mode: AuthModalMode;
|
|
direction: SlideDirection;
|
|
theme: AuthPanelThemeVariant;
|
|
customTheme?: AuthPanelTheme;
|
|
authHandler?: AuthHandler;
|
|
ssoUrl?: string;
|
|
defaultRole?: 'user' | 'provider' | 'client';
|
|
showRoleSelector: boolean;
|
|
overlayBlur: boolean;
|
|
width: number;
|
|
onSuccess: (user: User) => void;
|
|
onClose: () => void;
|
|
onError: (error: Error) => void;
|
|
allowModeSwitch: boolean;
|
|
}
|
|
interface FullscreenPanelProps {
|
|
isOpen: boolean;
|
|
mode: AuthModalMode;
|
|
theme: AuthPanelThemeVariant;
|
|
customTheme?: AuthPanelTheme;
|
|
backgroundImage?: string;
|
|
authHandler?: AuthHandler;
|
|
ssoUrl?: string;
|
|
defaultRole?: 'user' | 'provider' | 'client';
|
|
showRoleSelector: boolean;
|
|
glassEffect: boolean;
|
|
backgroundBlur: boolean;
|
|
onSuccess: (user: User) => void;
|
|
onClose: () => void;
|
|
onError: (error: Error) => void;
|
|
allowModeSwitch: boolean;
|
|
showCloseButton: boolean;
|
|
}
|
|
export declare function useAuthPanel(options?: UseAuthPanelOptions): UseAuthPanelReturn;
|
|
export {};
|
|
//# sourceMappingURL=useAuthPanel.d.ts.map
|