declare global {
	namespace Theme {
		type Contents = Record<WidgetProvider.AuthFlow, Theme.Content>;

		interface Content {
			title?: string | React.ReactElement;
			subtitle?: string | React.ReactElement;
			logo?: string | React.ReactElement;
			hideLogo?: boolean;
		}

		interface Settings {
			colors: {
				primaryButton: string;
				primaryButtonLabel: string;
				secondaryButton: string;
				secondaryButtonBorder: string;
				secondaryButtonLabel: string;
				baseFocusColor?: string;
				baseHoverColor?: string;
				linksFocusedComponents: string;
				headerText: string;
				bodyText: string;
				widgetBackground: string;
				widgetBorder: string;
				inputLabelsPlaceholders: string;
				inputFilledText: string;
				inputBorder: string;
				inputBackground: string;
				icons: string;
				error: string;
				success: string;
			};
			fonts: {
				fontUrl: string;
				fontFamily: string;
				referenceTextSize: number;
				title: Theme.FontStyle;
				subtitle: Theme.FontStyle;
				bodyText: Theme.FontStyle;
				buttonsText: Theme.FontStyle;
				inputLabels: Theme.FontStyle;
				links: Theme.FontStyle;
				linksStyle: 'normal' | 'underlined';
			};
			borders: {
				buttonBorderWeight: number;
				buttonsStyle: Theme.EdgeStyle;
				buttonBorderRadius: number;
				inputBorderWeight: number;
				inputsStyle: Theme.EdgeStyle;
				inputBorderRadius: number;
				widgetCornerRadius: number;
				widgetBorderWeight: number;
				showWidgetShadow: boolean;
			};
			widget: {
				logoPosition: Theme.ElementPlacement;
				logoUrl: string;
				logoHeight: number;
				headerTextAlignment: Theme.ElementPlacement;
				socialButtonsLayout: 'top' | 'bottom';
			};
			pageBackground: {
				pageLayout: Theme.ElementPlacement;
				backgroundColor: string;
				backgroundImageUrl: string;
			};
		}

		type EdgeStyle = 'square' | 'rounded' | 'pill';
		type ElementPlacement = 'left' | 'center' | 'right';

		interface FontStyle {
			bold: boolean;
			size: number;
		}
	}
}

export {};
