1from __future__ import annotations
2
3import re
4from pathlib import Path
5
6import click
7
8from plain.cli import register_cli
9
10
11@register_cli("admin")
12@click.group("admin")
13def admin_cli() -> None:
14 """Admin tools"""
15
16
17@admin_cli.command("icons")
18@click.argument("query", required=False)
19def icons(query: str | None) -> None:
20 """Search available admin icons (Bootstrap Icons)"""
21 css_path = (
22 Path(__file__).parent
23 / "assets"
24 / "admin"
25 / "vendor"
26 / "bootstrap-icons.min.css"
27 )
28 css = css_path.read_text()
29 names = re.findall(r"\.bi-([a-z0-9][a-z0-9-]*)::before", css)
30
31 if query:
32 query_lower = query.lower()
33 names = [n for n in names if query_lower in n]
34
35 if not names:
36 click.echo("No icons found.")
37 return
38
39 for name in names:
40 click.echo(name)
41
42 if query:
43 click.echo(f"\n{len(names)} icons found")
44 else:
45 click.echo(f"\n{len(names)} icons available")