UNPKG

zyros

Version:

A developer-friendly static site generator built with Next.js and Tailwind CSS. Transform a simple JSON file into a beautiful, fast static website.

1,323 lines (1,251 loc) 27.4 kB
export interface SiteConfig { site: { title: string; description?: string; theme?: 'light' | 'dark' | 'minimal' | 'ocean' | 'sunset' | 'forest' | 'midnight' | 'neon' | 'aurora' | 'autumn' | 'cyberpunk' | 'sakura' | 'custom'; author?: string; url?: string; language?: string; favicon?: string; logo?: string; layout?: 'default' | 'blog' | 'portfolio' | 'landing' | 'documentation' | 'magazine' | 'business' | 'minimal'; customization?: SiteCustomization; social?: { twitter?: string; github?: string; linkedin?: string; email?: string; facebook?: string; instagram?: string; youtube?: string; behance?: string; }; analytics?: { googleAnalytics?: string; plausible?: string; }; seo?: { keywords?: string[]; ogImage?: string; twitterCard?: 'summary' | 'summary_large_image'; }; features?: { search?: boolean; newsletter?: boolean; comments?: boolean; darkMode?: boolean; analytics?: boolean; socialShare?: boolean; tableOfContents?: boolean; readingProgress?: boolean; }; }; pages?: Page[]; navigation?: NavigationItem[]; header?: HeaderConfig; footer?: FooterConfig; contentBlocks?: ContentBlock[]; forms?: FormConfig[]; gallery?: GalleryConfig[]; i18n?: InternationalizationConfig; designSystem?: DesignSystemConfig; customTheme?: CustomThemeConfig; ui?: UICustomizationConfig; animations?: AnimationConfig; layout?: LayoutConfig; floatingElements?: FloatingElementsConfig; customButtons?: CustomButtonsConfig; } export interface Page { title: string; slug: string; content: string; description?: string; category?: string; tags?: string[]; publishedAt?: string; updatedAt?: string; readingTime?: number; featured?: boolean; draft?: boolean; author?: string; image?: string; layout?: 'default' | 'full-width' | 'sidebar' | 'minimal' | 'landing' | 'grid' | 'masonry' | 'split' | 'magazine' | 'portfolio'; contentBlocks?: string[]; // References to contentBlocks by ID customFields?: Record<string, unknown>; seo?: { title?: string; description?: string; keywords?: string[]; ogImage?: string; }; } export interface NavigationItem { title: string; href: string; external?: boolean; icon?: string; badge?: string; children?: NavigationItem[]; megaMenu?: MegaMenuConfig; } export interface HeaderConfig { logo?: { text?: string; image?: string; url?: string; size?: 'small' | 'medium' | 'large'; position?: 'left' | 'center' | 'right'; }; navigation?: NavigationItem[]; cta?: { text: string; href: string; style?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'gradient'; size?: 'small' | 'medium' | 'large'; icon?: string; }; search?: boolean; themeToggle?: boolean; sticky?: boolean; transparent?: boolean; height?: 'compact' | 'normal' | 'tall'; style?: 'minimal' | 'modern' | 'classic' | 'bold'; background?: { type?: 'solid' | 'gradient' | 'blur'; color?: string; gradient?: { from: string; to: string; direction?: 'horizontal' | 'vertical' | 'diagonal'; }; }; border?: { show?: boolean; style?: 'solid' | 'dashed' | 'dotted'; color?: string; width?: 'thin' | 'medium' | 'thick'; }; layout?: 'spread' | 'center' | 'left' | 'right'; mobileMenu?: { style?: 'slide' | 'overlay' | 'push'; position?: 'left' | 'right' | 'top' | 'bottom'; }; } export interface FooterConfig { copyright?: string; links?: FooterLink[]; columns?: FooterColumn[]; newsletter?: boolean | NewsletterCustomization; social?: boolean; backToTop?: boolean; style?: 'minimal' | 'modern' | 'classic' | 'bold'; layout?: 'columns' | 'centered' | 'split' | 'stacked'; background?: { type?: 'solid' | 'gradient' | 'image'; color?: string; gradient?: { from: string; to: string; direction?: 'horizontal' | 'vertical' | 'diagonal'; }; image?: string; }; spacing?: 'compact' | 'normal' | 'spacious'; border?: { show?: boolean; style?: 'solid' | 'dashed' | 'dotted'; color?: string; width?: 'thin' | 'medium' | 'thick'; }; socialLinks?: { platform: string; url: string; icon?: string; color?: string; }[]; customSections?: { id: string; title?: string; content?: string; position?: 'left' | 'center' | 'right'; }[]; contact?: { email?: string; phone?: string; address?: string; }; customization?: { colorScheme?: { primary?: string; secondary?: string; accent?: string; background?: string; surface?: string; text?: string; }; }; } export interface FooterLink { text: string; url: string; icon?: string; external?: boolean; } export interface FooterColumn { title: string; links: FooterLink[]; } export interface NewsletterCustomization { enabled?: boolean; style?: 'minimal' | 'modern' | 'glassmorphism' | 'gradient' | 'elegant'; colorScheme?: { primary?: string; secondary?: string; accent?: string; background?: string; surface?: string; }; content?: { title?: string; subtitle?: string; placeholder?: string; buttonText?: string; successMessage?: string; privacyNote?: string; }; layout?: 'centered' | 'split' | 'inline' | 'floating'; showStats?: boolean; showIcon?: boolean; animation?: 'none' | 'fade' | 'slide' | 'bounce' | 'scale'; } export interface ContentBlock { id: string; type: 'hero' | 'features' | 'testimonials' | 'cta' | 'gallery' | 'stats' | 'team' | 'faq' | 'pricing' | 'contact'; title?: string; subtitle?: string; content?: string; data?: Record<string, unknown>; style?: Record<string, unknown>; visible?: boolean; } export interface FormConfig { id: string; title: string; description?: string; fields: FormField[]; submitText?: string; successMessage?: string; action?: string; method?: 'POST' | 'GET'; } export interface FormField { id: string; type: 'text' | 'email' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'file'; label: string; placeholder?: string; required?: boolean; options?: string[]; // For select, radio, checkbox validation?: { minLength?: number; maxLength?: number; pattern?: string; }; } export interface GalleryConfig { id: string; title: string; description?: string; images: GalleryImage[]; layout?: 'grid' | 'masonry' | 'carousel' | 'lightbox'; columns?: number; } export interface GalleryImage { src: string; alt: string; title?: string; description?: string; tags?: string[]; } export interface MegaMenuConfig { columns: MegaMenuColumn[]; featured?: { title: string; description: string; image?: string; href: string; }; } export interface MegaMenuColumn { title: string; links: NavigationItem[]; } export interface InternationalizationConfig { defaultLocale: string; locales: string[]; translations: Record<string, Record<string, string>>; } export interface Theme { name: string; background: string; text: string; accent: string; muted: string; border: string; card: string; hover: string; primary: string; secondary: string; code: string; link: string; shadow: string; } // New comprehensive design system interfaces export interface DesignSystemConfig { colors?: ColorSystemConfig; typography?: TypographySystemConfig; spacing?: SpacingSystemConfig; borders?: BorderSystemConfig; shadows?: ShadowSystemConfig; animations?: AnimationSystemConfig; breakpoints?: BreakpointSystemConfig; components?: ComponentStylesConfig; } export interface ColorSystemConfig { primary?: ColorPaletteConfig; secondary?: ColorPaletteConfig; accent?: ColorPaletteConfig; neutral?: ColorPaletteConfig; success?: ColorPaletteConfig; warning?: ColorPaletteConfig; error?: ColorPaletteConfig; info?: ColorPaletteConfig; background?: { primary?: string; secondary?: string; tertiary?: string; overlay?: string; }; text?: { primary?: string; secondary?: string; tertiary?: string; inverse?: string; muted?: string; }; border?: { primary?: string; secondary?: string; focus?: string; error?: string; success?: string; }; } export interface ColorPaletteConfig { 50?: string; 100?: string; 200?: string; 300?: string; 400?: string; 500?: string; 600?: string; 700?: string; 800?: string; 900?: string; 950?: string; } export interface TypographySystemConfig { fontFamilies?: { primary?: string; secondary?: string; mono?: string; display?: string; }; fontSizes?: { xs?: string; sm?: string; base?: string; lg?: string; xl?: string; '2xl'?: string; '3xl'?: string; '4xl'?: string; '5xl'?: string; '6xl'?: string; '7xl'?: string; '8xl'?: string; '9xl'?: string; }; fontWeights?: { thin?: string; extralight?: string; light?: string; normal?: string; medium?: string; semibold?: string; bold?: string; extrabold?: string; black?: string; }; lineHeights?: { none?: string; tight?: string; snug?: string; normal?: string; relaxed?: string; loose?: string; }; letterSpacing?: { tighter?: string; tight?: string; normal?: string; wide?: string; wider?: string; widest?: string; }; } export interface SpacingSystemConfig { scale?: { 0?: string; px?: string; 0.5?: string; 1?: string; 1.5?: string; 2?: string; 2.5?: string; 3?: string; 3.5?: string; 4?: string; 5?: string; 6?: string; 7?: string; 8?: string; 9?: string; 10?: string; 11?: string; 12?: string; 14?: string; 16?: string; 20?: string; 24?: string; 28?: string; 32?: string; 36?: string; 40?: string; 44?: string; 48?: string; 52?: string; 56?: string; 60?: string; 64?: string; 72?: string; 80?: string; 96?: string; }; container?: { padding?: string; maxWidth?: string; }; } export interface BorderSystemConfig { radius?: { none?: string; sm?: string; base?: string; md?: string; lg?: string; xl?: string; '2xl'?: string; '3xl'?: string; full?: string; }; width?: { 0?: string; 1?: string; 2?: string; 4?: string; 8?: string; }; style?: { solid?: string; dashed?: string; dotted?: string; double?: string; none?: string; }; } export interface ShadowSystemConfig { sm?: string; base?: string; md?: string; lg?: string; xl?: string; '2xl'?: string; inner?: string; none?: string; } export interface AnimationSystemConfig { duration?: { 75?: string; 100?: string; 150?: string; 200?: string; 300?: string; 500?: string; 700?: string; 1000?: string; }; easing?: { linear?: string; in?: string; out?: string; 'in-out'?: string; }; keyframes?: Record<string, Record<string, string>>; } export interface BreakpointSystemConfig { sm?: string; md?: string; lg?: string; xl?: string; '2xl'?: string; } export interface ComponentStylesConfig { button?: ButtonStyleConfig; card?: CardStyleConfig; input?: InputStyleConfig; navigation?: NavigationStyleConfig; footer?: FooterStyleConfig; hero?: HeroStyleConfig; content?: ContentStyleConfig; } export interface ButtonStyleConfig { base?: ComponentStyleVariant; variants?: { primary?: ComponentStyleVariant; secondary?: ComponentStyleVariant; outline?: ComponentStyleVariant; ghost?: ComponentStyleVariant; gradient?: ComponentStyleVariant; }; sizes?: { sm?: ComponentStyleVariant; md?: ComponentStyleVariant; lg?: ComponentStyleVariant; xl?: ComponentStyleVariant; }; } export interface CardStyleConfig { base?: ComponentStyleVariant; variants?: { default?: ComponentStyleVariant; elevated?: ComponentStyleVariant; outlined?: ComponentStyleVariant; filled?: ComponentStyleVariant; }; } export interface InputStyleConfig { base?: ComponentStyleVariant; variants?: { default?: ComponentStyleVariant; filled?: ComponentStyleVariant; outlined?: ComponentStyleVariant; }; states?: { focus?: ComponentStyleVariant; error?: ComponentStyleVariant; disabled?: ComponentStyleVariant; }; } export interface NavigationStyleConfig { base?: ComponentStyleVariant; link?: ComponentStyleVariant; activeLink?: ComponentStyleVariant; dropdown?: ComponentStyleVariant; } export interface FooterStyleConfig { base?: ComponentStyleVariant; link?: ComponentStyleVariant; section?: ComponentStyleVariant; } export interface HeroStyleConfig { base?: ComponentStyleVariant; title?: ComponentStyleVariant; subtitle?: ComponentStyleVariant; button?: ComponentStyleVariant; } export interface ContentStyleConfig { base?: ComponentStyleVariant; heading?: ComponentStyleVariant; paragraph?: ComponentStyleVariant; link?: ComponentStyleVariant; code?: ComponentStyleVariant; blockquote?: ComponentStyleVariant; } export interface ComponentStyleVariant { className?: string; styles?: { backgroundColor?: string; color?: string; borderColor?: string; borderWidth?: string; borderRadius?: string; padding?: string; margin?: string; fontSize?: string; fontWeight?: string; lineHeight?: string; boxShadow?: string; transition?: string; transform?: string; opacity?: string; [key: string]: string | undefined; }; } export interface CustomThemeConfig { name?: string; colors?: { background?: string; foreground?: string; primary?: string; primaryForeground?: string; secondary?: string; secondaryForeground?: string; accent?: string; accentForeground?: string; muted?: string; mutedForeground?: string; border?: string; input?: string; ring?: string; card?: string; cardForeground?: string; popover?: string; popoverForeground?: string; destructive?: string; destructiveForeground?: string; success?: string; successForeground?: string; warning?: string; warningForeground?: string; info?: string; infoForeground?: string; }; gradients?: { primary?: string; secondary?: string; accent?: string; background?: string; }; effects?: { blur?: string; opacity?: string; backdropBlur?: string; }; } export interface UICustomizationConfig { scrollToTop?: ScrollToTopConfig; readingProgress?: ReadingProgressConfig; notifications?: NotificationConfig; overlays?: OverlayConfig; zIndexes?: ZIndexConfig; // New comprehensive UI customization options hero?: HeroUIConfig; stats?: StatsUIConfig; cards?: CardsUIConfig; buttons?: ButtonsUIConfig; navigation?: NavigationUIConfig; footer?: FooterUIConfig; analytics?: AnalyticsUIConfig; gradients?: GradientUIConfig; animations?: AnimationUIConfig; forms?: FormsUIConfig; newsletter?: NewsletterUIConfig; socialShare?: SocialShareUIConfig; loadingSpinner?: LoadingSpinnerUIConfig; searchBar?: SearchBarUIConfig; tableOfContents?: TableOfContentsUIConfig; contentBlocks?: ContentBlocksUIConfig; } export interface AnimationConfig { durations?: { fast?: string; normal?: string; slow?: string; }; easings?: { default?: string; bounce?: string; elastic?: string; }; transitions?: { page?: string; component?: string; hover?: string; }; } export interface LayoutConfig { container?: { maxWidth?: string; padding?: string; margin?: string; }; spacing?: { section?: string; component?: string; element?: string; }; breakpoints?: { mobile?: string; tablet?: string; desktop?: string; wide?: string; }; } export interface FloatingElementsConfig { aiContentGenerator?: FloatingButtonConfig; seoAnalyzer?: FloatingButtonConfig; performanceDashboard?: FloatingButtonConfig; visualPageBuilder?: FloatingButtonConfig; scrollToTop?: FloatingButtonConfig; } export interface FloatingButtonConfig { enabled?: boolean; position?: { bottom?: string; right?: string; left?: string; top?: string; }; style?: { background?: string; color?: string; size?: string; borderRadius?: string; shadow?: string; }; animation?: { hover?: string; click?: string; entrance?: string; }; zIndex?: number; } export interface ScrollToTopConfig { enabled?: boolean; threshold?: number; position?: { bottom?: string; right?: string; }; style?: { background?: string; color?: string; size?: string; borderRadius?: string; }; } export interface ReadingProgressConfig { enabled?: boolean; height?: string; background?: string; foreground?: string; position?: 'top' | 'bottom'; zIndex?: number; } export interface NotificationConfig { position?: { top?: string; right?: string; bottom?: string; left?: string; }; style?: { background?: string; color?: string; borderRadius?: string; shadow?: string; }; animation?: { enter?: string; exit?: string; duration?: string; }; } export interface OverlayConfig { background?: string; backdropBlur?: string; zIndex?: number; } export interface ZIndexConfig { modal?: number; overlay?: number; dropdown?: number; tooltip?: number; fixed?: number; } export interface CustomButtonsConfig { [buttonId: string]: CustomButtonConfig; } export interface CustomButtonConfig { enabled?: boolean; text?: string; icon?: string; iconPosition?: 'left' | 'right'; styles?: { backgroundColor?: string; color?: string; borderRadius?: string; fontSize?: string; fontWeight?: string; padding?: string; border?: string; boxShadow?: string; transition?: string; [key: string]: string | undefined; }; hoverStyles?: { backgroundColor?: string; color?: string; transform?: string; boxShadow?: string; [key: string]: string | undefined; }; } // New comprehensive UI configuration interfaces export interface HeroUIConfig { enabled?: boolean; background?: { type?: 'solid' | 'gradient' | 'image'; color?: string; gradient?: string; image?: string; }; title?: { fontSize?: string; fontWeight?: string; color?: string; gradient?: string; }; subtitle?: { fontSize?: string; color?: string; }; badge?: { backgroundColor?: string; color?: string; borderRadius?: string; }; decorations?: { enabled?: boolean; colors?: string[]; animation?: string; }; } export interface StatsUIConfig { enabled?: boolean; background?: { type?: 'solid' | 'gradient'; color?: string; gradient?: string; }; numbers?: { fontSize?: string; fontWeight?: string; gradient?: string; }; labels?: { fontSize?: string; color?: string; }; icons?: { backgroundColor?: string; color?: string; }; } export interface CardsUIConfig { enabled?: boolean; background?: string; border?: { color?: string; width?: string; radius?: string; }; shadow?: string; hover?: { transform?: string; shadow?: string; borderColor?: string; }; badge?: { backgroundColor?: string; color?: string; }; } export interface ButtonsUIConfig { enabled?: boolean; primary?: { background?: string; color?: string; borderRadius?: string; padding?: string; fontSize?: string; fontWeight?: string; hover?: { background?: string; transform?: string; shadow?: string; }; }; secondary?: { background?: string; color?: string; border?: string; borderRadius?: string; hover?: { background?: string; transform?: string; }; }; } export interface NavigationUIConfig { enabled?: boolean; background?: { type?: 'solid' | 'gradient' | 'blur'; color?: string; gradient?: string; }; logo?: { background?: string; color?: string; borderRadius?: string; }; links?: { color?: string; activeColor?: string; hoverBackground?: string; borderRadius?: string; }; mobileMenu?: { background?: string; itemBackground?: string; }; } export interface FooterUIConfig { background?: { type?: 'solid' | 'gradient'; color?: string; gradient?: string; }; text?: { color?: string; linkColor?: string; }; border?: { color?: string; width?: string; }; } export interface AnalyticsUIConfig { enabled?: boolean; cards?: { background?: string; border?: string; borderRadius?: string; }; metrics?: { colors?: { views?: string; pages?: string; searches?: string; shares?: string; }; }; progressBars?: { background?: string; foreground?: string; }; } export interface GradientUIConfig { primary?: string; secondary?: string; accent?: string; hero?: string; stats?: string; cards?: string; buttons?: string; navigation?: string; decorative?: string[]; } export interface AnimationUIConfig { durations?: { fast?: string; normal?: string; slow?: string; }; easings?: { default?: string; bounce?: string; elastic?: string; }; hover?: { scale?: string; translateY?: string; }; } export interface FormsUIConfig { enabled?: boolean; input?: { background?: string; border?: string; borderRadius?: string; fontSize?: string; padding?: string; focus?: { borderColor?: string; boxShadow?: string; }; }; label?: { fontSize?: string; fontWeight?: string; color?: string; }; button?: { background?: string; color?: string; borderRadius?: string; padding?: string; fontSize?: string; fontWeight?: string; hover?: { background?: string; transform?: string; }; }; } export interface NewsletterUIConfig { enabled?: boolean; background?: { type?: 'solid' | 'gradient'; color?: string; gradient?: string; }; title?: { fontSize?: string; fontWeight?: string; color?: string; }; subtitle?: { fontSize?: string; color?: string; }; input?: { background?: string; borderRadius?: string; padding?: string; fontSize?: string; }; button?: { background?: string; color?: string; borderRadius?: string; padding?: string; fontSize?: string; fontWeight?: string; }; } export interface SocialShareUIConfig { enabled?: boolean; button?: { background?: string; border?: string; color?: string; borderRadius?: string; padding?: string; fontSize?: string; hover?: { background?: string; color?: string; transform?: string; }; }; } export interface LoadingSpinnerUIConfig { enabled?: boolean; color?: string; size?: string; animation?: string; } export interface SearchBarUIConfig { enabled?: boolean; background?: string; border?: string; borderRadius?: string; padding?: string; fontSize?: string; focus?: { borderColor?: string; boxShadow?: string; }; results?: { background?: string; border?: string; borderRadius?: string; shadow?: string; }; } export interface TableOfContentsUIConfig { enabled?: boolean; background?: string; border?: string; borderRadius?: string; padding?: string; title?: { fontSize?: string; fontWeight?: string; color?: string; }; link?: { color?: string; fontSize?: string; padding?: string; borderRadius?: string; hover?: { background?: string; color?: string; }; active?: { background?: string; color?: string; }; }; } export interface ContentBlocksUIConfig { enabled?: boolean; features?: { background?: string; border?: string; borderRadius?: string; padding?: string; title?: { fontSize?: string; fontWeight?: string; color?: string; }; description?: { fontSize?: string; color?: string; }; icon?: { background?: string; color?: string; borderRadius?: string; size?: string; }; }; testimonials?: { background?: string; border?: string; borderRadius?: string; padding?: string; quote?: { fontSize?: string; fontStyle?: string; color?: string; }; author?: { fontSize?: string; fontWeight?: string; color?: string; }; }; pricing?: { background?: string; border?: string; borderRadius?: string; padding?: string; popular?: { border?: string; background?: string; }; price?: { fontSize?: string; fontWeight?: string; color?: string; }; feature?: { fontSize?: string; color?: string; }; }; } export interface Site { title: string; description: string; author?: string; email?: string; url?: string; social?: SocialLinks; theme?: string; layout?: 'default' | 'portfolio' | 'business' | 'minimal' | 'documentation' | 'blog'; customization?: SiteCustomization; } export interface SiteCustomization { // Layout Options layoutStyle?: 'grid' | 'masonry' | 'timeline' | 'magazine' | 'dashboard' | 'split' | 'fullscreen'; // Color Schemes colorScheme?: { primary?: string; secondary?: string; accent?: string; background?: string; surface?: string; text?: string; }; // Typography typography?: { headingFont?: string; bodyFont?: string; fontSize?: 'xs' | 'sm' | 'base' | 'lg' | 'xl'; fontWeight?: 'light' | 'normal' | 'medium' | 'bold'; }; // Header Customization header?: { style?: 'minimal' | 'elegant' | 'modern' | 'bold' | 'creative'; showSearch?: boolean; showSocial?: boolean; sticky?: boolean; }; // Hero Section hero?: { style?: 'centered' | 'split' | 'fullscreen' | 'minimal' | 'magazine' | 'video'; showStats?: boolean; backgroundType?: 'gradient' | 'image' | 'video' | 'pattern' | 'solid'; backgroundUrl?: string; overlayOpacity?: number; }; // Content Layout content?: { cardStyle?: 'minimal' | 'elevated' | 'bordered' | 'glassmorphism' | 'neumorphism'; spacing?: 'tight' | 'normal' | 'relaxed' | 'loose'; animation?: 'none' | 'fade' | 'slide' | 'scale' | 'bounce'; showExcerpts?: boolean; showReadingTime?: boolean; showTags?: boolean; }; // Footer footer?: { style?: 'minimal' | 'detailed' | 'newsletter' | 'social'; showSocial?: boolean; showNewsletter?: boolean; }; // Advanced Features features?: { darkMode?: boolean; searchEnabled?: boolean; commentsEnabled?: boolean; analyticsEnabled?: boolean; socialSharing?: boolean; }; }