import { z } from 'zod'; import { NextConfig } from 'next'; declare const NextAdapterOptionsSchema: z.ZodObject<{ mode: z.ZodOptional>; autoClientBoundary: z.ZodOptional; addDataAttr: z.ZodOptional; hoist: z.ZodOptional; routeCss: z.ZodOptional; incremental: z.ZodOptional; verbose: z.ZodOptional; include: z.ZodOptional>; exclude: z.ZodOptional>; }, z.core.$strip>; type NextAdapterOptionsInput = z.infer; declare const parseNextAdapterOptions: (options: unknown) => { mode?: "zero-runtime" | undefined; autoClientBoundary?: boolean | undefined; addDataAttr?: boolean | undefined; hoist?: boolean | undefined; routeCss?: boolean | undefined; incremental?: boolean | undefined; verbose?: boolean | undefined; include?: RegExp | undefined; exclude?: RegExp | undefined; }; interface TailwindStyledNextOptions { /** @deprecated — handled by engine internally */ mode?: "zero-runtime"; /** @deprecated — handled by engine internally */ autoClientBoundary?: boolean; /** @deprecated — handled by engine internally */ addDataAttr?: boolean; /** @deprecated — handled by engine internally */ hoist?: boolean; /** @deprecated — handled by engine internally */ routeCss?: boolean; /** @deprecated — handled by engine internally */ incremental?: boolean; /** Show detailed loader output */ verbose?: boolean; /** Path to generated safelist CSS file. Default: /__tw_safelist.css */ safelistPath?: string; include?: RegExp; exclude?: RegExp; } declare function withTailwindStyled(options?: TailwindStyledNextOptions): (nextConfig?: NextConfig) => NextConfig; /** * StaticCssWebpackPlugin * * Webpack plugin companion untuk tailwind-styled-v4 build-time migration. * * STATUS (2026-06-27): hanya aktif kalau Next.js benar-benar pakai webpack * (flag `--webpack` eksplisit). Next.js 16 default Turbopack untuk `next dev` * MAUPUN `next build` — di kondisi itu, fungsi webpack(config, options) di * withTailwindStyled.ts (tempat plugin ini di-register) TIDAK PERNAH * dipanggil sama sekali, jadi plugin ini gak ke-apply. Lihat known-issues.md. * * BUKAN murni dead weight meski begitu — ini SENGAJA dipertahankan (bukan * dihapus sebagai code-hygiene), karena masih menyediakan kapabilitas nyata * yang gak ada gantinya di mode --webpack: update incremental/HMR-aware * untuk _tw-state-static.css saat file di-edit selama dev session jalan. * `appendStaticStateCssToSafelist()` (dipanggil dari config-eval-time IIFE * di withTailwindStyled.ts, jalan terlepas dari bundler) cuma generate versi * AWAL sekali waktu startup — gak react ke perubahan file berikutnya tanpa * restart dev server. Plugin ini (kalau aktif, i.e. mode --webpack) yang * nutup gap itu lewat hook `done` tiap recompile. * * Masalah yang diselesaikan: * - `webpackLoader.ts` di-invoke per-file saat transform. Kalau pakai append-to-file * langsung, ada dua bug: (1) rules lama tidak dibersihkan saat file di-edit/hapus * statenya, (2) duplicate rules kalau file di-transform ulang. * * Solusi: plugin ini maintain `_fileStaticCssMap: Map` yang hidup * selama proses webpack. Setiap kali loader transform file, ia update Map. * Di `compiler.hooks.done`, plugin rebuild `_tw-state-static.css` dari scratch * menggunakan seluruh isi Map → selalu fresh, tidak ada stale rules. * * HMR flow: * File berubah → webpack incremental compilation → loader transform file baru * → `setFileStaticCss(filepath, newCss)` update Map → `done` hook flush Map * → `_tw-state-static.css` berisi state terbaru dari semua file. * * File dihapus / state dihapus: * Webpack invalidate → loader transform ulang → `setFileStaticCss(filepath, undefined)` * hapus entry dari Map → `done` hook flush → file tidak ada stale rules. */ /** * Dipanggil oleh `webpackLoader.ts` setiap kali file di-transform. * Pass `undefined` / empty string untuk hapus entry (file tidak punya state CSS). */ declare function setFileStaticCss(filepath: string, css: string | undefined): void; interface WebpackCompiler { hooks: { done: { tap(pluginName: string, callback: () => void): void; }; }; } declare class StaticCssWebpackPlugin { static readonly PLUGIN_NAME = "TailwindStyledStaticCss"; private readonly outPath; constructor(safelistPath: string); apply(compiler: WebpackCompiler): void; } export { type NextAdapterOptionsInput, NextAdapterOptionsSchema, StaticCssWebpackPlugin, type TailwindStyledNextOptions, parseNextAdapterOptions, setFileStaticCss, withTailwindStyled };