nunomaduro/termwind

它就像 Tailwind CSS,但用于控制台。

v2.1.0 2024-09-05 15:25 UTC

README

Termwind logo

Termwind

Termwind example

GitHub Workflow Status (master) Total Downloads Latest Version License

Termwind 允许您使用 Tailwind CSS API 构建独特且美观的 PHP 命令行应用程序。简而言之,它就像 Tailwind CSS,但用于 PHP 命令行应用程序。

安装

需要 PHP 8.0+

使用 Composer 安装 Termwind

composer require nunomaduro/termwind

用法

use function Termwind\{render};

// single line html...
render('<div class="px-1 bg-green-300">Termwind</div>');

// multi-line html...
render(<<<'HTML'
    <div>
        <div class="px-1 bg-green-600">Termwind</div>
        <em class="ml-1">
          Give your CLI apps a unique look
        </em>
    </div>
HTML);

// Laravel or Symfony console commands...
class UsersCommand extends Command
{
    public function handle()
    {
        render(
            view('users.index', [
                'users' => User::all()
            ])
        );
    }
}

style()

style() 函数可用于添加自定义样式并更新颜色。

use function Termwind\{style};

style('green-300')->color('#bada55');
style('btn')->apply('p-4 bg-green-300 text-white');

render('<div class="btn">Click me</div>');

ask()

ask() 函数可用于提示用户一个问题。

use function Termwind\{ask};

$answer = ask(<<<HTML
    <span class="mt-1 ml-2 mr-1 bg-green px-1 text-black">
        What is your name?
    </span>
HTML);

ask 方法提供的 return 将是用户提供的答案。

terminal()

terminal() 函数返回一个包含以下方法的 Terminal 类实例:

  • ->width(): 返回终端的全宽。
  • ->height(): 返回终端的全高。
  • ->clear(): 清除终端屏幕。

支持的类

所有支持的类都使用与 tailwindcss.com/docs 上相同的逻辑。

响应式设计

与TailwindCSS一样,我们也支持响应式设计媒体查询,以下是支持的断点:

  • sm: 64个空格(640px)
  • md: 76个空格(768px)
  • lg: 102个空格(1024px)
  • xl: 128个空格(1280px)
  • 2xl: 153个空格(1536px)
render(<<<'HTML'
    <div class="bg-blue-500 sm:bg-red-600">
        If bg is blue is sm, if red > than sm breakpoint.
    </div>
HTML);

CLI的所有大小均基于字体大小15。

支持的HTML元素

所有元素都具备使用class属性的权限。

<div>

<div>元素可以用作块类型元素。

默认样式: block

render(<<<'HTML'
    <div>This is a div element.</div>
HTML);

<p>

<p>元素可以用作段落。

默认样式: block

render(<<<'HTML'
    <p>This is a paragraph.</p>
HTML);

<span>

<span>元素可以用作内联文本容器。

render(<<<'HTML'
    <p>
        This is a CLI app built with <span class="text-green-300">Termwind</span>.
    </p>
HTML);

<a>

<a>元素可以用作超链接。点击时允许使用href属性打开链接。

render(<<<'HTML'
    <p>
        This is a CLI app built with Termwind. <a href="/">Click here to open</a>
    </p>
HTML);

<b><strong>

<b><strong>元素可以用作将文本标记为粗体

默认样式: font-bold

render(<<<'HTML'
    <p>
        This is a CLI app built with <b>Termwind</b>.
    </p>
HTML);

<i><em>

<i><em>元素可以用作将文本标记为斜体

默认样式: italic

render(<<<'HTML'
    <p>
        This is a CLI app built with <i>Termwind</i>.
    </p>
HTML);

<s>

<s>元素可以用作在文本上添加删除线

默认样式: line-through

render(<<<'HTML'
    <p>
        This is a CLI app built with <s>Termwind</s>.
    </p>
HTML);

<br>

<br>元素可以用作换行。

render(<<<'HTML'
    <p>
        This is a CLI <br>
        app built with Termwind.
    </p>
HTML);

<ul>

<ul>元素可以用作无序列表。它只能接受<li>元素作为子元素,如果提供了另一个元素,将抛出InvalidChild异常。

默认样式: block, list-disc

render(<<<'HTML'
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
    </ul>
HTML);

<ol>

<ol>元素可以用作有序列表。它只能接受<li>元素作为子元素,如果提供了另一个元素,将抛出InvalidChild异常。

默认样式: block, list-decimal

render(<<<'HTML'
    <ol>
        <li>Item 1</li>
        <li>Item 2</li>
    </ol>
HTML);

<li>

<li>元素可以用作列表项。它应仅作为<ul><ol>元素的子元素使用。

默认样式: block, list-decimal

render(<<<'HTML'
    <ul>
        <li>Item 1</li>
    </ul>
HTML);

<dl>

可以使用 <dl> 元素来创建描述列表。它只能接受 <dt><dd> 元素作为子元素,如果提供了其他元素,将会抛出 InvalidChild 异常。

默认样式: block

render(<<<'HTML'
    <dl>
        <dt>🍃 Termwind</dt>
        <dd>Give your CLI apps a unique look</dd>
    </dl>
HTML);

<dt>

可以使用 <dt> 元素作为描述标题。它应该仅作为 <dl> 元素的子元素使用。

默认样式: block, font-bold

render(<<<'HTML'
    <dl>
        <dt>🍃 Termwind</dt>
    </dl>
HTML);

<dd>

可以使用 <dd> 元素作为描述内容。它应该仅作为 <dl> 元素的子元素使用。

默认样式: block, ml-4

render(<<<'HTML'
    <dl>
        <dd>Give your CLI apps a unique look</dd>
    </dl>
HTML);

<hr>

可以使用 <hr> 元素来创建水平线。

render(<<<'HTML'
    <div>
        <div>🍃 Termwind</div>
        <hr>
        <p>Give your CLI apps a unique look</p>
    </div>
HTML);

<table>

<table> 元素可以包含列和行。

render(<<<'HTML'
    <table>
        <thead>
            <tr>
                <th>Task</th>
                <th>Status</th>
            </tr>
        </thead>
        <tr>
            <th>Termwind</th>
            <td>✓ Done</td>
        </tr>
    </table>
HTML);

<pre>

可以使用 <pre> 元素来显示预格式化的文本。

render(<<<'HTML'
    <pre>
        Text in a pre element
        it preserves
        both      spaces and
        line breaks
    </pre>
HTML);

<code>

<code> 元素可以用作代码高亮。它接受 linestart-line 属性。

render(<<<'HTML'
    <code line="22" start-line="20">
        try {
            throw new \Exception('Something went wrong');
        } catch (\Throwable $e) {
            report($e);
        }
    </code>
HTML);

Termwind 是一个开源软件,遵循 MIT 许可协议