Skip to main content
Module

x/lume/plugins/tailwindcss.ts

πŸ”₯ Static site generator for Deno πŸ¦•
Very Popular
Go to Latest
File
import tailwind, { Config } from "../deps/tailwindcss.ts";import { merge } from "../core/utils.ts";
import type { Site } from "../core.ts";
export interface Options { extensions: string[]; options: Config;}
export const defaults: Options = { extensions: [".html"], options: {},};
export default function (userOptions?: Partial<Options>) { const options = merge(defaults, userOptions);
return (site: Site) => { // deno-lint-ignore no-explicit-any let tailwindPlugins: any[];
if (site.hooks.postcss) { throw new Error( "PostCSS plugin is required to be installed AFTER TailwindCSS plugin", ); }
site.processAll(options.extensions, (pages) => { // Get the content of all HTML pages (sorted by path) const content = pages.sort((a, b) => a.src.path.localeCompare(b.src.path)) .map((page) => ({ raw: page.content as string }));
// Create Tailwind plugin // @ts-ignore: This expression is not callable. const plugin = tailwind({ ...options.options, content, });
// Ensure PostCSS plugin is installed if (!site.hooks.postcss) { throw new Error( "PostCSS plugin is required to be installed AFTER TailwindCSS plugin", ); }
// Replace the old Tailwind plugin configuration from PostCSS plugins // deno-lint-ignore no-explicit-any site.hooks.postcss((runner: any) => { tailwindPlugins?.forEach((plugin) => { runner.plugins.splice(runner.plugins.indexOf(plugin), 1); }); tailwindPlugins = runner.normalize([plugin]); runner.plugins = runner.plugins.concat(tailwindPlugins); }); }); };}