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()