//#region src/css/extract.d.ts /** * Static CSS Extractor for Luna CSS Module * * Extracts all CSS declarations from .mbt files at build time. * This ensures all styles are collected regardless of runtime branches. */ export interface Warning { file: string; line: number; func: string; code: string; reason: string; } export interface ExtractedStyles { base: Set; pseudo: Array<{ pseudo: string; property: string; value: string; }>; media: Array<{ condition: string; pseudo?: string; property: string; value: string; }>; } export interface ExtractOptions { pretty?: boolean; json?: boolean; verbose?: boolean; warn?: boolean; strict?: boolean; splitMode?: "file" | "dir" | null; } export interface ExtractResult { css: string; mapping: Record; stats: { base: number; pseudo: number; media: number; }; warnings?: Warning[]; } export interface SplitExtractResult { /** Per-file or per-dir CSS */ chunks: Map; /** Shared CSS (declarations used in 3+ files/dirs) */ shared: { css: string; styles: ExtractedStyles; }; /** All CSS combined (for comparison) */ combined: string; /** Class name mapping */ mapping: Record; /** Statistics per chunk */ stats: Map; warnings?: Warning[]; } export declare function detectWarnings(content: string, filePath: string): Warning[]; export declare function extractFromContent(content: string): ExtractedStyles; export declare function findMbtFiles(dir: string): string[]; export declare function generateCSS(styles: ExtractedStyles, options?: { pretty?: boolean; }): { css: string; mapping: Record; }; export declare function extract(dir: string, options?: ExtractOptions): ExtractResult; interface SplitExtractOptions extends ExtractOptions { /** Minimum usage count to be considered "shared" (default: 3) */ sharedThreshold?: number; } /** * Extract CSS with split output by file or directory. * Shared CSS (used in 3+ files/dirs) is separated into a shared chunk. */ export declare function extractSplit(dir: string, mode: "file" | "dir", options?: SplitExtractOptions): SplitExtractResult; //#endregion //#region src/css/compile.d.ts export interface StyleCompileOptions { /** Import alias of mizchi/luna/x/css in this package. Defaults to css. */ cssAlias?: string; } export interface StyleCompileResult { code: string; css: string; mapping: Record; stats: { folded: number; precompiled: number; }; /** Literal declarations, including inactive variants, for canonical asset output. */ rules: StyleDeclaration[]; } export interface StyleDeclaration { property: string; value: string | null; pseudo: string; condition: string; } /** * Compile qualified literal CSS calls without evaluating arbitrary MoonBit. * Dynamic composition/when/with_vars remain ordinary MoonBit expressions. * Dynamic declarations fail explicitly: use literal var(--name) + with_vars. */ export declare function compileStyles(source: string, options?: StyleCompileOptions): StyleCompileResult; export interface StyleDirectoryOptions { outputDir: string; /** CSS package path used to resolve aliases from moon.pkg. */ cssPackage?: string; } export interface StyleDirectoryResult { outputDir: string; files: number; stats: StyleCompileResult["stats"]; elapsedMs: number; written: number; } export declare const styleCompileIgnoredDirectories: readonly [".git", ".mooncakes", "node_modules", "_build", "target", "dist"]; /** Stage a complete source directory. Input is never overwritten. */ export declare function compileStyleDirectory(inputDir: string, options: StyleDirectoryOptions): StyleDirectoryResult; //#endregion //#region src/css/minify.d.ts /** * Simple CSS Minifier * * Minifies CSS without changing class names. * Safe for use with existing templates. */ export interface MinifyOptions { verbose?: boolean; } export interface MinifyResult { minified: string; originalSize: number; minifiedSize: number; reduction: number; } /** * Minify CSS content */ export declare function minifyCSS(css: string): string; /** * Format file size */ export declare function formatSize(bytes: number): string; /** * Minify CSS and return result with stats */ export declare function minify(css: string, options?: MinifyOptions): MinifyResult; //#endregion //#region src/css/inline.d.ts /** * CSS Class Name Inliner * * Replaces CSS utility function calls with pre-computed class names. * This enables true zero-runtime CSS by eliminating runtime style registration. */ export interface InlineOptions { verbose?: boolean; dryRun?: boolean; removeRegistry?: boolean; } export interface Replacement { type: "base" | "pseudo" | "media"; from: string; to: string; key?: string; decl?: string; } export interface InlineResult { code: string; replacements: Replacement[]; originalSize: number; finalSize: number; } /** * Replace CSS function calls with pre-computed class names */ export declare function inlineCSS(code: string, mapping: Record, options?: InlineOptions): InlineResult; /** * Remove CSS registry code (dead code after inlining) */ export declare function removeRegistryCode(code: string): string; /** * Inline CSS with mapping extracted from source directory */ export declare function inlineFromSource(code: string, srcDir: string, options?: InlineOptions): InlineResult; //#endregion //#region src/css/inject.d.ts /** * CSS Injection into HTML files * * Replaces CSS between markers in HTML files with extracted CSS. * Supports inline embedding or external file generation. */ export type OutputMode = "inline" | "external" | "auto"; export interface InjectHtmlOptions { srcDir: string; htmlFile: string; outputFile?: string; /** Output mode: "inline" embeds CSS in HTML, "external" creates separate .css file, "auto" chooses based on threshold */ mode?: OutputMode; /** Size threshold in bytes for "auto" mode (default: 4096) */ threshold?: number; /** CSS filename for external mode (default: "luna.css") */ cssFileName?: string; verbose?: boolean; } export interface InjectHtmlResult { html: string; css: string; replaced: boolean; /** Path to external CSS file if created */ cssFile?: string; /** Actual mode used */ mode: OutputMode; } /** * Inject extracted CSS into HTML file between markers */ export declare function injectCssToHtml(options: InjectHtmlOptions): InjectHtmlResult; /** * Inject CSS and write to file(s) */ export declare function injectAndWrite(options: InjectHtmlOptions): InjectHtmlResult; //#endregion