UNPKG

@keenmate/svelte-docs

Version:

A professional component library for building beautiful documentation and showcase sites with SvelteKit

167 lines (166 loc) 5.61 kB
// Configuration types for the documentation library // Default configuration export const defaultConfig = { site: { title: "Documentation", language: "en", keywords: ["documentation", "svelte", "sveltekit"], }, theme: { colors: { primary: "#00A7E1", primaryDark: "#007EA7", secondary: "#003459", dark: "#00171F", light: "#FFFFFF", success: "#198754", warning: "#ffc107", danger: "#dc3545", info: "#0dcaf0", }, fonts: { body: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif', heading: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif', mono: '"Courier New", Monaco, "Cascadia Code", "Roboto Mono", monospace', }, components: { navbar: { height: "56px", }, sidebar: { width: "280px", }, footer: { height: "60px", }, tooltip: { isEnabled: true, placement: "right", showOnMobile: false, showDelay: 0, hideDelay: 0, backgroundColor: "rgba(0, 0, 0, 0.9)", textColor: "white", fontSize: "0.875rem", maxWidth: "300px", zIndex: 1060, borderRadius: "0.375rem", padding: "0.5rem 0.75rem", arrowSize: "8px", }, }, }, features: { search: true, tableOfContents: true, breadcrumbs: true, copyCode: true, darkMode: false, editOnGitHub: false, lastModified: false, nextPrevious: true, }, }; // Configuration validation helpers export function validateConfig(config) { const errors = []; // Required fields if (!config.site.title) { errors.push("site.title is required"); } if (!config.company.name) { errors.push("company.name is required"); } if (!config.navigation.main || config.navigation.main.length === 0) { errors.push("navigation.main must contain at least one item"); } // Validate navigation items const validateNavItems = (items, path = "navigation.main") => { items.forEach((item, index) => { if (!item.label) { errors.push(`${path}[${index}].label is required`); } if (!item.href) { errors.push(`${path}[${index}].href is required`); } if (item.children) { validateNavItems(item.children, `${path}[${index}].children`); } }); }; validateNavItems(config.navigation.main); if (config.navigation.footer) { validateNavItems(config.navigation.footer, "navigation.footer"); } // Validate URLs if (config.site.url && !isValidUrl(config.site.url)) { errors.push("site.url must be a valid URL"); } if (config.company.website && !isValidUrl(config.company.website)) { errors.push("company.website must be a valid URL"); } // Validate social links if (config.company.social) { Object.entries(config.company.social).forEach(([platform, url]) => { if (url && !isValidUrl(url)) { errors.push(`company.social.${platform} must be a valid URL`); } }); } return errors; } // Helper function to validate URLs function isValidUrl(string) { try { new URL(string); return true; } catch { return false; } } // Configuration merging utility export function mergeConfig(baseConfig, userConfig) { return { site: { ...baseConfig.site, ...userConfig.site }, company: { ...baseConfig.company, ...userConfig.company, social: { ...baseConfig.company?.social, ...userConfig.company.social }, }, navigation: { ...baseConfig.navigation, ...userConfig.navigation, main: userConfig.navigation.main, footer: userConfig.navigation.footer || baseConfig.navigation?.footer, social: userConfig.navigation.social || baseConfig.navigation?.social, }, theme: { ...baseConfig.theme, ...userConfig.theme, colors: { ...baseConfig.theme?.colors, ...userConfig.theme?.colors }, fonts: { ...baseConfig.theme?.fonts, ...userConfig.theme?.fonts }, components: { ...baseConfig.theme?.components, ...userConfig.theme?.components, navbar: { ...baseConfig.theme?.components?.navbar, ...userConfig.theme?.components?.navbar, }, sidebar: { ...baseConfig.theme?.components?.sidebar, ...userConfig.theme?.components?.sidebar, }, footer: { ...baseConfig.theme?.components?.footer, ...userConfig.theme?.components?.footer, }, tooltip: { ...baseConfig.theme?.components?.tooltip, ...userConfig.theme?.components?.tooltip, }, }, }, features: { ...baseConfig.features, ...userConfig.features }, }; }