A MoonBit implementation of the Tailwind CSS v4 compiler
Dependencies
///|
async test {
let compiler = @tailwindcss.compile(
"@theme { --color-black: #000; } @tailwind utilities;",
)
let css = compiler.build(["flex", "hover:bg-black"])
assert_true(css.contains("display: flex"))
assert_true(css.contains("background-color: var(--color-black)"))
}///|
test {
let loader = @tailwindcss.MemoryStylesheetLoader::new(files=[
("base.css", "@theme { --color-black: #000; }"),
])
let compiler = @tailwindcss.compile_sync(
"@import \"base.css\"; @tailwind utilities;",
options=@tailwindcss.CompileOptions::new(sync_loader=loader),
)
let css = compiler.build(["flex"])
assert_true(css.contains("display: flex"))
}moon build --target native cmd/tailwindcss
tailwindcss -i input.css -o output.css -c candidates.txt --polyfills 3{
"css": "@import \"base.css\"; @tailwind utilities;",
"candidates": ["flex", "hover:bg-black"],
"imports": { "base.css": "@theme { --color-black: #000; }" },
"from": "input.css",
"polyfills": 3
}moon test
npm install --prefix tools/oracle
node tools/diff/compare.mjspub(open) trait StylesheetLoader {
async fn load(Self, id : String, base : String) -> LoadedStylesheet raise CompileError
}pub(open) trait SyncStylesheetLoader {
fn load(Self, id : String, base : String) -> LoadedStylesheet raise CompileError
}impl Show for CompileErrorpub struct CompileOptions {
base : String
from : String?
loader : &StylesheetLoader?
sync_loader : &SyncStylesheetLoader?
polyfills : Int
}fn CompileOptions::new(base? : String, from? : String, loader? : &StylesheetLoader, sync_loader? : &SyncStylesheetLoader, polyfills? : Int) -> CompileOptionspub struct Compiler {
input : String
polyfills : Int
stylesheet : Array[CssNode]
theme : Map[String, String]
sources : Array[Source]
candidates : Map[String, Unit]
excluded_candidates : Map[String, Unit]
custom_utilities : Map[String, Array[CssNode]]
functional_utilities : Map[String, Array[CssNode]]
custom_variants : Map[String, CustomVariantTemplate]
has_utilities : Bool
}impl StylesheetLoader for MemoryStylesheetLoaderasync fn load(self : MemoryStylesheetLoader, id : String, base : String) -> LoadedStylesheet raise CompileErrorfn load(self : MemoryStylesheetLoader, id : String, base : String) -> LoadedStylesheet raise CompileErrorfn MemoryStylesheetLoader::add(self : MemoryStylesheetLoader, path : String, content : String) -> Unitlet POLYFILL_AT_PROPERTY : Intlet POLYFILL_COLOR_MIX : Intasync fn collect_imports(css : String, loader : &StylesheetLoader, base? : String) -> Map[String, String] raise CompileErrorA MoonBit implementation of the Tailwind CSS v4 compiler
Dependencies