v0.166.0
  1import os
  2
  3import click
  4from plain.cli import register_cli
  5from plain.runtime import APP_PATH
  6
  7from .core import Tailwind
  8
  9
 10@register_cli("tailwind")
 11@click.group("tailwind")
 12def cli() -> None:
 13    """Tailwind CSS management"""
 14
 15
 16@cli.command()
 17@click.pass_context
 18def init(ctx: click.Context) -> None:
 19    """Install Tailwind CSS"""
 20    tailwind = Tailwind()
 21
 22    if not tailwind.is_installed():
 23        ctx.invoke(update)
 24
 25    if not tailwind.src_css_path.exists():
 26        click.secho("Creating Tailwind source CSS...", bold=True)
 27        tailwind.create_src_css()
 28
 29    # gitignore
 30
 31
 32@cli.command()
 33@click.option("--force", is_flag=True, help="Reinstall even if up to date")
 34@click.pass_context
 35def install(ctx: click.Context, force: bool) -> None:
 36    """Install Tailwind CSS binary"""
 37    tailwind = Tailwind()
 38
 39    if force or not tailwind.is_installed():
 40        version_to_install = tailwind.get_version_from_config()
 41        if version_to_install:
 42            click.secho(
 43                f"Installing Tailwind standalone {version_to_install}...",
 44                bold=True,
 45                nl=False,
 46            )
 47            version = tailwind.install(version_to_install)
 48            click.secho(f"Tailwind {version} installed", fg="green")
 49        else:
 50            ctx.invoke(update)
 51    else:
 52        click.secho("Tailwind already installed", fg="green")
 53
 54
 55@cli.command()
 56def update() -> None:
 57    """Update Tailwind CSS to latest version"""
 58    tailwind = Tailwind()
 59    click.secho("Installing Tailwind standalone...", bold=True, nl=True)
 60    version = tailwind.install()
 61    click.secho(f"Tailwind {version} installed", fg="green")
 62
 63
 64@cli.command()
 65@click.option("--watch", is_flag=True)
 66@click.option("--minify", is_flag=True)
 67@click.pass_context
 68def build(ctx: click.Context, watch: bool, minify: bool) -> None:
 69    """Build Tailwind CSS files"""
 70    tailwind = Tailwind()
 71
 72    ctx.invoke(install)
 73
 74    tailwind.update_plain_sources()
 75
 76    args = []
 77    args.append("-i")
 78    args.append(tailwind.src_css_path)
 79
 80    args.append("-o")
 81    args.append(tailwind.dist_css_path)
 82
 83    click.secho(
 84        f"Compiling {os.path.relpath(tailwind.src_css_path)} to {os.path.relpath(tailwind.dist_css_path)}...",
 85        bold=True,
 86    )
 87
 88    if watch:
 89        args.append("--watch")
 90
 91    if minify:
 92        args.append("--minify")
 93
 94    tailwind.invoke(*args, cwd=os.path.dirname(APP_PATH))
 95
 96
 97@cli.command()
 98def version() -> None:
 99    """Show Tailwind CSS version"""
100    tailwind = Tailwind()
101
102    configured_version = tailwind.get_version_from_config()
103
104    if not configured_version:
105        click.secho("No Tailwind version configured", fg="red")
106    elif not tailwind.is_installed():
107        click.secho(f"{configured_version} (configured but not installed)", fg="yellow")
108    else:
109        click.echo(configured_version)
110
111
112if __name__ == "__main__":
113    cli()