UNPKG

windflow-css

Version:

A modern CSS framework inspired by Tailwind with enhanced features

180 lines (140 loc) • 5.98 kB
const fs = require('fs'); const path = require('path'); // Try to load chokidar only if --watch flag is present let chokidar; if (process.argv.includes('--watch')) { try { chokidar = require('chokidar'); } catch (e) { console.log('āš ļø Watch mode requires chokidar. Install with: npm install chokidar'); process.exit(1); } } const config = require('../windflow.config.js'); // Import modular generators const generateReset = require('../src/core/reset.js'); const generateBase = require('../src/core/base.js'); const generateSpacing = require('../src/utilities/spacing.js'); const generateColors = require('../src/utilities/colors.js'); const generateTypography = require('../src/utilities/typography.js'); const { generateFlexbox, generateGrid } = require('../src/utilities/layout.js'); const generateBorders = require('../src/utilities/borders.js'); const generateEffects = require('../src/utilities/effects.js'); const generateAnimations = require('../src/utilities/animations.js'); const generateTransforms = require('../src/utilities/transforms.js'); const generateGradients = require('../src/utilities/gradients.js'); const { generateFilters, generateBackdropFilters } = require('../src/utilities/filters.js'); const { generateClipPath, generateMixBlendMode, generateAspectRatio, generateScrollSnap, generateContainerQueries } = require('../src/utilities/modern.js'); const generateThemes = require('../src/components/themes.js'); const { generateResponsiveVariants, generateDarkModeVariants } = require('../src/utilities/responsive.js'); const generateGridEnhanced = require('../src/utilities/grid.js'); const generateBehavior = require('../src/utilities/behavior.js'); class WindFlowBuilder { constructor() { this.output = []; this.config = config; } generateCSS() { this.output = []; console.log('šŸš€ Building WindFlow CSS...'); // Core styles console.log(' šŸ“‹ Generating reset styles...'); this.output.push(generateReset(this.config)); console.log(' šŸ—ļø Generating base styles...'); this.output.push(generateBase(this.config)); // Utilities console.log(' šŸ“ Generating spacing utilities...'); this.output.push(generateSpacing(this.config)); console.log(' šŸŽØ Generating color utilities...'); this.output.push(generateColors(this.config)); console.log(' šŸ“ Generating typography utilities...'); this.output.push(generateTypography(this.config)); console.log(' šŸ“± Generating layout utilities...'); this.output.push(generateFlexbox(this.config)); this.output.push(generateGrid(this.config)); this.output.push(generateGridEnhanced(this.config)); console.log(' šŸ–¼ļø Generating border utilities...'); this.output.push(generateBorders(this.config)); console.log(' ✨ Generating effects utilities...'); this.output.push(generateEffects(this.config)); console.log(' šŸŽ¬ Generating animation utilities...'); this.output.push(generateAnimations(this.config)); console.log(' šŸ”„ Generating transform utilities...'); this.output.push(generateTransforms(this.config)); console.log(' 🌈 Generating gradient utilities...'); this.output.push(generateGradients(this.config)); console.log(' šŸŽ­ Generating filter utilities...'); this.output.push(generateFilters(this.config)); this.output.push(generateBackdropFilters(this.config)); console.log(' šŸ”§ Generating modern CSS utilities...'); this.output.push(generateClipPath(this.config)); this.output.push(generateMixBlendMode(this.config)); this.output.push(generateAspectRatio(this.config)); this.output.push(generateScrollSnap(this.config)); this.output.push(generateContainerQueries(this.config)); console.log(' šŸŽÆ Generating behavior utilities...'); this.output.push(generateBehavior(this.config)); console.log(' šŸŽØ Generating theme system...'); this.output.push(generateThemes(this.config)); console.log(' šŸ“± Generating responsive variants...'); this.output.push(generateResponsiveVariants(this.config)); console.log(' šŸŒ™ Generating dark mode variants...'); this.output.push(generateDarkModeVariants(this.config)); return this.output.join('\n\n'); } build() { try { const css = this.generateCSS(); // Ensure dist directory exists const distDir = path.dirname(this.config.output.path); if (!fs.existsSync(distDir)) { fs.mkdirSync(distDir, { recursive: true }); } // Write CSS file fs.writeFileSync(this.config.output.path, css); const stats = fs.statSync(this.config.output.path); const fileSizeInKB = (stats.size / 1024).toFixed(2); console.log(`āœ… WindFlow CSS built successfully!`); console.log(`šŸ“ Output: ${this.config.output.path}`); console.log(`šŸ“Š Size: ${fileSizeInKB} KB`); return css; } catch (error) { console.error('āŒ Build failed:', error.message); process.exit(1); } } watch() { if (!chokidar) { console.error('āŒ Watch mode requires chokidar'); return; } console.log('šŸ‘€ Watching for changes...'); const watcher = chokidar.watch(['src/**/*.js', 'windflow.config.js'], { ignored: /node_modules/, persistent: true }); watcher.on('change', (filePath) => { console.log(`\nšŸ”„ File changed: ${filePath}`); // Clear require cache for the changed file delete require.cache[require.resolve(path.resolve(filePath))]; // Rebuild this.build(); }); // Initial build this.build(); } } // Main execution const builder = new WindFlowBuilder(); if (process.argv.includes('--watch')) { builder.watch(); } else { builder.build(); } module.exports = WindFlowBuilder;