1import os
2
3import click
4
5from plain.cli import register_cli
6from plain.runtime import APP_PATH
7
8from .core import Tailwind
9
10
11@register_cli("tailwind")
12@click.group("tailwind")
13def cli():
14 """Tailwind CSS"""
15 pass
16
17
18@cli.command()
19@click.pass_context
20def init(ctx):
21 """Install Tailwind, create a tailwind.config.js and app/assets/src/tailwind.css"""
22 tailwind = Tailwind()
23
24 if not tailwind.is_installed():
25 ctx.invoke(update)
26
27 if not tailwind.src_css_path.exists():
28 click.secho("Creating Tailwind source CSS...", bold=True)
29 tailwind.create_src_css()
30
31 # gitignore
32
33
34@cli.command()
35@click.pass_context
36def install(ctx):
37 tailwind = Tailwind()
38
39 if not tailwind.is_installed() or tailwind.needs_update():
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():
57 """Update the Tailwind CSS 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, watch, minify):
69 """Compile a Tailwind CSS file"""
70 tailwind = Tailwind()
71
72 ctx.invoke(install)
73
74 # https://github.com/tailwindlabs/tailwindcss/issues/15452
75 # Remove the .gitignore inside of .venv if it exists, so the sources
76 # are picked up correctly...
77 if os.path.exists(".venv/.gitignore"):
78 click.secho(
79 "Removing .venv/.gitignore to fix tailwind bug...", bold=True, fg="yellow"
80 )
81 os.remove(".venv/.gitignore")
82
83 tailwind.update_plain_sources()
84
85 args = []
86 args.append("-i")
87 args.append(tailwind.src_css_path)
88
89 args.append("-o")
90 args.append(tailwind.dist_css_path)
91
92 click.secho(
93 f"Compiling {os.path.relpath(tailwind.src_css_path)} to {os.path.relpath(tailwind.dist_css_path)}...",
94 bold=True,
95 )
96
97 if watch:
98 args.append("--watch")
99
100 if minify:
101 args.append("--minify")
102
103 tailwind.invoke(*args, cwd=os.path.dirname(APP_PATH))
104
105
106if __name__ == "__main__":
107 cli()