/** * Cookie Consent Types */ export interface CookieCategory { id: string name: string description: string required: boolean enabled: boolean } export interface ContentSettings { title: string message: string acceptButtonText: string declineButtonText: string settingsButtonText: string privacyPolicyText: string privacyPolicyUrl: string showDeclineButton: boolean showSettingsButton: boolean showPrivacyLink: boolean } export interface AppearanceSettings { template: 'default' | 'minimal' | 'magazine' position: 'bottom' | 'top' | 'bottom-left' | 'bottom-right' | 'center' layout: 'full' | 'boxed' boxedWidth: number // percentage 30-100 theme: 'light' | 'dark' | 'auto' primaryColor: string backgroundColor: string textColor: string borderRadius: number showIcon: boolean animation: 'slide' | 'fade' | 'bounce' | 'scale' | 'flip' | 'none' blur: boolean overlay: boolean overlayColor: string overlayOpacity: number overlayBlur: boolean // Typography fontFamily: string titleFontSize: string bodyFontSize: string fontWeight: string // Button styling buttonStyle: 'filled' | 'outlined' | 'pill' | 'rounded' | 'square' buttonSize: 'sm' | 'md' | 'lg' acceptButtonColor: string acceptButtonTextColor: string declineButtonColor: string declineButtonTextColor: string declineButtonStyle: 'filled' | 'outlined' | 'ghost' | 'link' settingsButtonStyle: 'outlined' | 'ghost' | 'link' } export interface BehaviorSettings { showDelay: number autoHide: boolean autoHideDelay: number reopenMethod: 'floating-button' | 'footer-link' | 'none' floatingButtonPosition: 'bottom-left' | 'bottom-right' respectDoNotTrack: boolean cookieExpiry: number reaskAfterUpdate: boolean reaskAfterDecline: boolean reaskAfterDeclineDays: number policyVersion: string blockPageScroll: boolean closeOnScroll: boolean closeOnClickOutside: boolean } export interface IntegrationSettings { googleAnalytics: { enabled: boolean trackingId: string category: string } googleTagManager: { enabled: boolean containerId: string category: string } facebookPixel: { enabled: boolean pixelId: string category: string } hotjar: { enabled: boolean siteId: string category: string } microsoftClarity: { enabled: boolean projectId: string category: string } googleAds: { enabled: boolean conversionId: string category: string } linkedinInsightTag: { enabled: boolean partnerId: string category: string } tiktokPixel: { enabled: boolean pixelId: string category: string } pinterestTag: { enabled: boolean tagId: string category: string } snapchatPixel: { enabled: boolean pixelId: string category: string } // Note: Custom scripts feature removed — WordPress.org prohibits // plugins from providing textareas for arbitrary JS/CSS injection. // Use the predefined integrations or GTM instead. } export interface GeoSettings { enabled: boolean showOnlyInEU: boolean showOnlyInGDPRCountries: boolean } export interface TcfPurposeMapping { [purposeId: number]: 'functional' | 'analytics' | 'marketing' } export interface TcfSettings { enabled: boolean publisherCC: string cmpId: number cmpVersion: number purposeMapping: TcfPurposeMapping } export interface LoggingSettings { enabled: boolean retention: number } export interface GDPRNoticeSettings { enabled: boolean content: ContentSettings categories: CookieCategory[] appearance: AppearanceSettings behavior: BehaviorSettings integrations: IntegrationSettings geo: GeoSettings tcf: TcfSettings logging: LoggingSettings } // Template presets for Pro feature export interface TemplatePreset { id: string name: string description: string preview: string isPro: boolean alwaysVisible?: boolean settings: Partial } export const templatePresets: TemplatePreset[] = [ { id: 'default', name: 'Default Banner', description: 'Full-width bottom bar, clean and professional', preview: '/images/gdpr-default.png', isPro: false, settings: { template: 'default', position: 'bottom', theme: 'light', borderRadius: 0, showIcon: false, animation: 'slide', blur: false, overlay: false, } }, { id: 'minimal', name: 'Minimal', description: 'Compact corner card, subtle and unobtrusive', preview: '/images/gdpr-minimal.png', isPro: false, settings: { template: 'minimal', position: 'bottom-right', theme: 'light', borderRadius: 8, showIcon: false, animation: 'fade', blur: false, overlay: false, } }, { id: 'magazine', name: 'Magazine', description: 'Editorial newspaper style, bold serif typography', preview: '/images/gdpr-magazine.png', isPro: false, settings: { template: 'magazine', position: 'center', layout: 'full', boxedWidth: 80, theme: 'light', borderRadius: 0, showIcon: false, animation: 'fade', blur: false, overlay: true, } }, ] // Comprehensive Google Fonts list — sorted alphabetically, searchable via combobox export const fontFamilyOptions = [ { value: 'inherit', label: 'Theme Default' }, // Sans-serif { value: 'Abel, sans-serif', label: 'Abel' }, { value: 'Archivo, sans-serif', label: 'Archivo' }, { value: 'Archivo Narrow, sans-serif', label: 'Archivo Narrow' }, { value: 'Arimo, sans-serif', label: 'Arimo' }, { value: 'Asap, sans-serif', label: 'Asap' }, { value: 'Assistant, sans-serif', label: 'Assistant' }, { value: 'Barlow, sans-serif', label: 'Barlow' }, { value: 'Barlow Condensed, sans-serif', label: 'Barlow Condensed' }, { value: 'Barlow Semi Condensed, sans-serif', label: 'Barlow Semi Condensed' }, { value: 'Be Vietnam Pro, sans-serif', label: 'Be Vietnam Pro' }, { value: 'Cabin, sans-serif', label: 'Cabin' }, { value: 'Cairo, sans-serif', label: 'Cairo' }, { value: 'Catamaran, sans-serif', label: 'Catamaran' }, { value: 'Chakra Petch, sans-serif', label: 'Chakra Petch' }, { value: 'Comfortaa, sans-serif', label: 'Comfortaa' }, { value: 'Commissioner, sans-serif', label: 'Commissioner' }, { value: 'DM Sans, sans-serif', label: 'DM Sans' }, { value: 'Dosis, sans-serif', label: 'Dosis' }, { value: 'Exo 2, sans-serif', label: 'Exo 2' }, { value: 'Figtree, sans-serif', label: 'Figtree' }, { value: 'Fira Sans, sans-serif', label: 'Fira Sans' }, { value: 'Fira Sans Condensed, sans-serif', label: 'Fira Sans Condensed' }, { value: 'Heebo, sans-serif', label: 'Heebo' }, { value: 'Hind, sans-serif', label: 'Hind' }, { value: 'Hind Siliguri, sans-serif', label: 'Hind Siliguri' }, { value: 'IBM Plex Sans, sans-serif', label: 'IBM Plex Sans' }, { value: 'Inter, sans-serif', label: 'Inter' }, { value: 'Inter Tight, sans-serif', label: 'Inter Tight' }, { value: 'Jost, sans-serif', label: 'Jost' }, { value: 'Kanit, sans-serif', label: 'Kanit' }, { value: 'Karla, sans-serif', label: 'Karla' }, { value: 'Lato, sans-serif', label: 'Lato' }, { value: 'Lexend, sans-serif', label: 'Lexend' }, { value: 'Libre Franklin, sans-serif', label: 'Libre Franklin' }, { value: 'Manrope, sans-serif', label: 'Manrope' }, { value: 'Maven Pro, sans-serif', label: 'Maven Pro' }, { value: 'Montserrat, sans-serif', label: 'Montserrat' }, { value: 'Montserrat Alternates, sans-serif', label: 'Montserrat Alternates' }, { value: 'Mukta, sans-serif', label: 'Mukta' }, { value: 'Mulish, sans-serif', label: 'Mulish' }, { value: 'Noto Sans, sans-serif', label: 'Noto Sans' }, { value: 'Noto Sans JP, sans-serif', label: 'Noto Sans JP' }, { value: 'Noto Sans KR, sans-serif', label: 'Noto Sans KR' }, { value: 'Noto Sans SC, sans-serif', label: 'Noto Sans SC' }, { value: 'Noto Sans TC, sans-serif', label: 'Noto Sans TC' }, { value: 'Nunito, sans-serif', label: 'Nunito' }, { value: 'Nunito Sans, sans-serif', label: 'Nunito Sans' }, { value: 'Open Sans, sans-serif', label: 'Open Sans' }, { value: 'Oswald, sans-serif', label: 'Oswald' }, { value: 'Outfit, sans-serif', label: 'Outfit' }, { value: 'Overpass, sans-serif', label: 'Overpass' }, { value: 'Oxygen, sans-serif', label: 'Oxygen' }, { value: 'Plus Jakarta Sans, sans-serif', label: 'Plus Jakarta Sans' }, { value: 'Poppins, sans-serif', label: 'Poppins' }, { value: 'PT Sans, sans-serif', label: 'PT Sans' }, { value: 'Public Sans, sans-serif', label: 'Public Sans' }, { value: 'Quicksand, sans-serif', label: 'Quicksand' }, { value: 'Rajdhani, sans-serif', label: 'Rajdhani' }, { value: 'Raleway, sans-serif', label: 'Raleway' }, { value: 'Red Hat Display, sans-serif', label: 'Red Hat Display' }, { value: 'Roboto, sans-serif', label: 'Roboto' }, { value: 'Roboto Condensed, sans-serif', label: 'Roboto Condensed' }, { value: 'Rubik, sans-serif', label: 'Rubik' }, { value: 'Saira, sans-serif', label: 'Saira' }, { value: 'Signika Negative, sans-serif', label: 'Signika Negative' }, { value: 'Source Sans 3, sans-serif', label: 'Source Sans 3' }, { value: 'Space Grotesk, sans-serif', label: 'Space Grotesk' }, { value: 'Teko, sans-serif', label: 'Teko' }, { value: 'Titillium Web, sans-serif', label: 'Titillium Web' }, { value: 'Ubuntu, sans-serif', label: 'Ubuntu' }, { value: 'Urbanist, sans-serif', label: 'Urbanist' }, { value: 'Varela Round, sans-serif', label: 'Varela Round' }, { value: 'Work Sans, sans-serif', label: 'Work Sans' }, { value: 'Yantramanav, sans-serif', label: 'Yantramanav' }, // Serif { value: 'Alegreya, serif', label: 'Alegreya' }, { value: 'Bitter, serif', label: 'Bitter' }, { value: 'Cormorant Garamond, serif', label: 'Cormorant Garamond' }, { value: 'Crimson Text, serif', label: 'Crimson Text' }, { value: 'DM Serif Display, serif', label: 'DM Serif Display' }, { value: 'EB Garamond, serif', label: 'EB Garamond' }, { value: 'Frank Ruhl Libre, serif', label: 'Frank Ruhl Libre' }, { value: 'IBM Plex Serif, serif', label: 'IBM Plex Serif' }, { value: 'Josefin Slab, serif', label: 'Josefin Slab' }, { value: 'Libre Baskerville, serif', label: 'Libre Baskerville' }, { value: 'Lora, serif', label: 'Lora' }, { value: 'Merriweather, serif', label: 'Merriweather' }, { value: 'Noto Serif, serif', label: 'Noto Serif' }, { value: 'Old Standard TT, serif', label: 'Old Standard TT' }, { value: 'Playfair Display, serif', label: 'Playfair Display' }, { value: 'PT Serif, serif', label: 'PT Serif' }, { value: 'Roboto Slab, serif', label: 'Roboto Slab' }, { value: 'Rokkitt, serif', label: 'Rokkitt' }, { value: 'Source Serif 4, serif', label: 'Source Serif 4' }, { value: 'Spectral, serif', label: 'Spectral' }, { value: 'Tinos, serif', label: 'Tinos' }, { value: 'Vollkorn, serif', label: 'Vollkorn' }, // Monospace { value: 'Fira Code, monospace', label: 'Fira Code' }, { value: 'IBM Plex Mono, monospace', label: 'IBM Plex Mono' }, { value: 'Inconsolata, monospace', label: 'Inconsolata' }, { value: 'JetBrains Mono, monospace', label: 'JetBrains Mono' }, { value: 'Roboto Mono, monospace', label: 'Roboto Mono' }, { value: 'Source Code Pro, monospace', label: 'Source Code Pro' }, { value: 'Space Mono, monospace', label: 'Space Mono' }, { value: 'Ubuntu Mono, monospace', label: 'Ubuntu Mono' }, // Display / Decorative { value: 'Abril Fatface, serif', label: 'Abril Fatface' }, { value: 'Alfa Slab One, serif', label: 'Alfa Slab One' }, { value: 'Bebas Neue, sans-serif', label: 'Bebas Neue' }, { value: 'Concert One, sans-serif', label: 'Concert One' }, { value: 'Fredoka, sans-serif', label: 'Fredoka' }, { value: 'Josefin Sans, sans-serif', label: 'Josefin Sans' }, { value: 'Lilita One, sans-serif', label: 'Lilita One' }, { value: 'Lobster, sans-serif', label: 'Lobster' }, { value: 'Orbitron, sans-serif', label: 'Orbitron' }, { value: 'Pacifico, cursive', label: 'Pacifico' }, { value: 'Permanent Marker, cursive', label: 'Permanent Marker' }, { value: 'Righteous, sans-serif', label: 'Righteous' }, { value: 'Russo One, sans-serif', label: 'Russo One' }, { value: 'Satisfy, cursive', label: 'Satisfy' }, { value: 'Shadows Into Light, cursive', label: 'Shadows Into Light' }, // Handwriting { value: 'Caveat, cursive', label: 'Caveat' }, { value: 'Dancing Script, cursive', label: 'Dancing Script' }, { value: 'Great Vibes, cursive', label: 'Great Vibes' }, { value: 'Indie Flower, cursive', label: 'Indie Flower' }, { value: 'Kalam, cursive', label: 'Kalam' }, { value: 'Patrick Hand, cursive', label: 'Patrick Hand' }, { value: 'Sacramento, cursive', label: 'Sacramento' }, ] export const fontSizeOptions = [ { value: '12', label: '12px' }, { value: '13', label: '13px' }, { value: '14', label: '14px (Default)' }, { value: '15', label: '15px' }, { value: '16', label: '16px' }, { value: '18', label: '18px' }, { value: '20', label: '20px' }, ] export const titleFontSizeOptions = [ { value: '14', label: '14px' }, { value: '16', label: '16px (Default)' }, { value: '18', label: '18px' }, { value: '20', label: '20px' }, { value: '22', label: '22px' }, { value: '24', label: '24px' }, ]