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