Next generation utility-first CSS framework with on-demand generation and Tailwind compatibility.
—
WindiCSS provides helper functions that enhance the developer experience with template literals, configuration utilities, and code transformation tools. These helpers simplify common workflows and improve integration with build tools.
Template literal function for enhanced WindiCSS class string handling.
/**
* Tagged template literal for WindiCSS classes with enhanced processing
* @param strings - Template literal strings
* @param values - Interpolated values
* @returns Processed class string
*/
function windi(strings: TemplateStringsArray, ...values: unknown[]): string;Usage Examples:
import { windi } from "windicss/helpers";
// Basic usage with template literal
const classes = windi`
bg-blue-500
text-white
p-4
rounded-lg
`;
console.log(classes); // "bg-blue-500 text-white p-4 rounded-lg"
// With interpolated values
const isActive = true;
const size = "lg";
const buttonClasses = windi`
px-4 py-2
rounded-${size}
${isActive ? 'bg-blue-500 text-white' : 'bg-gray-200 text-gray-700'}
hover:opacity-90
transition-opacity
`;
// Conditional classes
const cardClasses = windi`
bg-white
shadow-lg
rounded-xl
p-6
${process.env.NODE_ENV === 'development' ? 'border-2 border-red-500' : ''}
`;
// Dynamic values
const spacing = 4;
const color = "blue";
const dynamicClasses = windi`
p-${spacing}
bg-${color}-500
text-${color === 'blue' ? 'white' : 'black'}
`;Type-safe configuration definition helper for WindiCSS configurations.
/**
* Type-safe configuration definition helper
* @param config - WindiCSS configuration object
* @returns Same configuration with enhanced type safety
*/
function defineConfig(config: FullConfig): FullConfig;
interface FullConfig extends Config {
/** Extended configuration options */
[key: string]: any;
}Usage Examples:
import { defineConfig } from "windicss/helpers";
import type { Config } from "windicss";
// Basic configuration
export default defineConfig({
theme: {
extend: {
colors: {
primary: {
50: '#eff6ff',
500: '#3b82f6',
900: '#1e3a8a'
}
},
fontFamily: {
'brand': ['Inter', 'system-ui', 'sans-serif']
}
}
},
plugins: [
// plugins array
]
});
// Advanced configuration with full type safety
export default defineConfig({
theme: {
extend: {
spacing: {
'18': '4.5rem',
'88': '22rem'
},
animation: {
'fade-in': 'fadeIn 0.3s ease-in-out',
'slide-up': 'slideUp 0.5s ease-out'
},
keyframes: {
fadeIn: {
'0%': { opacity: '0' },
'100%': { opacity: '1' }
},
slideUp: {
'0%': { transform: 'translateY(100%)', opacity: '0' },
'100%': { transform: 'translateY(0)', opacity: '1' }
}
}
}
},
shortcuts: {
'btn': 'px-4 py-2 rounded-lg font-medium transition-colors',
'btn-primary': 'btn bg-primary-500 text-white hover:bg-primary-600',
'card': 'bg-white shadow-lg rounded-xl p-6'
},
plugins: [
// Type-safe plugin definitions
]
});
// Configuration with custom properties
export default defineConfig({
theme: {
extend: {
colors: {
// CSS custom properties
primary: 'var(--primary-color)',
secondary: 'var(--secondary-color)'
}
}
},
// Custom configuration properties
customOptions: {
enableDebug: true,
buildTarget: 'modern'
}
} satisfies Config);Code transformation utilities for converting between TailwindCSS and WindiCSS imports.
/**
* Converts TailwindCSS imports to WindiCSS equivalents
* @param code - Source code string with TailwindCSS imports
* @returns Converted code with WindiCSS imports
*/
function convert(code: string): string;
/**
* Transforms module imports during require/import processing
* @param path - Module path to transform
* @returns Transformed module or original if no transformation needed
*/
function transform(path: string): any;Usage Examples:
import { convert, transform } from "windicss/helpers";
// Convert TailwindCSS imports to WindiCSS
const tailwindCode = `
import { createApp } from 'vue'
import 'tailwindcss/tailwind.css'
import colors from 'tailwindcss/colors'
import { Config } from 'tailwindcss'
const config: Config = {
theme: {
extend: {
colors: colors
}
}
}
`;
const windiCode = convert(tailwindCode);
console.log(windiCode);
// Output will have WindiCSS imports instead:
// import 'windicss/windi.css'
// import colors from 'windicss/colors'
// import { Config } from 'windicss'
// Transform individual imports
const transformedColors = transform('tailwindcss/colors');
// Returns windicss/colors equivalent
// Common transformation patterns
const transformations = [
'tailwindcss/tailwind.css', // -> 'windicss/windi.css'
'tailwindcss/base.css', // -> 'windicss/base.css'
'tailwindcss/components.css', // -> 'windicss/components.css'
'tailwindcss/utilities.css', // -> 'windicss/utilities.css'
'tailwindcss/colors', // -> 'windicss/colors'
'tailwindcss/defaultTheme', // -> 'windicss/defaultTheme'
'tailwindcss/defaultConfig', // -> 'windicss/defaultConfig'
'tailwindcss/plugin', // -> 'windicss/plugin'
];
transformations.forEach(path => {
const transformed = transform(path);
console.log(`${path} -> ${transformed}`);
});Additional helpers for development and debugging workflows.
/**
* Console utilities for debugging and logging
*/
interface Console {
log(...args: any[]): void;
warn(...args: any[]): void;
error(...args: any[]): void;
info(...args: any[]): void;
}
/**
* Generates autocomplete suggestions for IDE support
* @param processor - WindiCSS processor instance
* @returns Object with completion arrays for different utility types
*/
function generateCompletions(processor: any): {
static: string[];
color: string[];
dynamic: string[];
};Usage Examples:
import Processor from "windicss";
import { generateCompletions } from "windicss/utils";
// Generate IDE completions
const processor = new Processor({
theme: {
extend: {
colors: {
brand: '#ff6b6b'
}
}
}
});
const completions = generateCompletions(processor);
console.log(completions.static); // Static utility class names
console.log(completions.color); // Color-based utility variations
console.log(completions.dynamic); // Dynamic utility patterns
// Use completions for IDE integration
const allCompletions = [
...completions.static,
...completions.color,
...completions.dynamic
];
// Export completions for VS Code extension or other IDE tools
export { allCompletions };Helpers for integrating WindiCSS with build tools and bundlers.
/**
* Creates build-time processor configuration
* @param options - Build options
* @returns Configured processor for build tools
*/
interface BuildOptions {
configPath?: string;
scanPaths?: string[];
exclude?: RegExp[];
include?: RegExp[];
minify?: boolean;
preflight?: boolean;
}Usage Example:
import { defineConfig } from "windicss/helpers";
// Configuration for build tools (Vite, Webpack, etc.)
export default defineConfig({
// Scan paths for class extraction
extract: {
include: [
'src/**/*.{vue,html,jsx,tsx}',
'pages/**/*.{vue,html,jsx,tsx}',
'components/**/*.{vue,html,jsx,tsx}'
],
exclude: [
'node_modules',
'.git',
'dist'
]
},
// Production optimizations
purge: {
enabled: process.env.NODE_ENV === 'production',
content: [
'./src/**/*.html',
'./src/**/*.vue',
'./src/**/*.jsx',
'./src/**/*.tsx'
]
},
// Build-specific options
build: {
minify: true,
sourcemap: process.env.NODE_ENV === 'development'
},
theme: {
extend: {
// Theme configuration
}
}
});
// Framework-specific helpers
export const viteConfig = defineConfig({
// Vite-specific WindiCSS configuration
vite: {
plugins: ['windicss']
}
});
export const webpackConfig = defineConfig({
// Webpack-specific WindiCSS configuration
webpack: {
loader: 'windicss-webpack-plugin'
}
});TypeScript type utilities for enhanced type safety in WindiCSS configurations.
/**
* Utility type for configuration with strict typing
*/
type StrictConfig<T extends Config = Config> = T & {
theme: Required<T['theme']>;
};
/**
* Helper for extracting theme types
*/
type ThemeValue<
T extends Record<string, any>,
K extends keyof T
> = T[K];
/**
* Utility for plugin configuration with options
*/
type PluginConfig<T = any> = {
plugin: (options: T) => any;
options: T;
};Usage Examples:
import { defineConfig } from "windicss/helpers";
import type { Config } from "windicss";
// Strict configuration typing
const strictConfig = defineConfig({
theme: {
colors: {
primary: '#3b82f6',
secondary: '#10b981'
},
spacing: {
xs: '0.5rem',
sm: '1rem'
}
}
} satisfies Config);
// Extract theme value types
type Colors = ThemeValue<typeof strictConfig.theme, 'colors'>;
type Spacing = ThemeValue<typeof strictConfig.theme, 'spacing'>;
// Plugin with typed options
interface TypographyOptions {
className?: string;
modifiers?: string[];
headings?: boolean;
}
const typographyConfig: PluginConfig<TypographyOptions> = {
plugin: (options) => {
// Plugin implementation with typed options
return {
className: options.className || 'prose',
modifiers: options.modifiers || ['sm', 'lg'],
headings: options.headings ?? true
};
},
options: {
className: 'prose',
modifiers: ['sm', 'lg', 'xl'],
headings: true
}
};Install with Tessl CLI
npx tessl i tessl/npm-windicss