Chewie
Chewie stats
- Downloads
- 220
- Stars
- 23
- Open Issues
- 0
- Forks
- 1
Chewie
Chewie is a package that helps you build text-based user interfaces (TUIs) with Laravel Prompts. It helps to reduce some of the boilerplate code and adds some helpers for alignment, animation, and more.
[!WARNING] This package is currently in active development. The API is subject to change. Documentation will also improve over time.
Installation
composer require joetannenbaum/chewie
Registering Renderers
use App\Renderers\DemoRenderer;use Chewie\Concerns\RegistersRenderers; class Demo extends Prompt{ use RegistersRenderers; public function __construct() { $this->registerRenderer(DemoRenderer::class); }}
You can also tell Chewie that all of your renderers live within a specific namespace, then Chewie will resolve your renderers automatically.
For example, if you call the following in your AppServiceProvider:
use Chewie\Renderer; class AppServiceProvider{ public function boot() { Renderer::setNamespace('App\\Renderers'); }}
Then you can simply do the following when registering renderers. Chewie assumes your renderer class will be your app class + Renderer:
use Chewie\Concerns\RegistersRenderers; class Demo extends Prompt{ use RegistersRenderers; public function __construct() { // Will register App\Renderers\DemoRenderer $this->registerRenderer(); }}
Drawing Art
You can easily print ASCII art from a file out to the terminal in your renderer:
use Chewie\Concerns\DrawsArt; class DemoRenderer extends Renderer{ use DrawsArt; public function __invoke(Demo $prompt): string { // Returns a collection of the lines from your art, // assumes a ".txt" extension $this->artLines(storage_path('my-art/horse')) ->each($this->line(...)); return $this; }}
You can also tell Chewie where all of your art files live:
use Chewie\Art; class AppServiceProvider{ public function boot() { Art::setDirectory(storage_path('my-art')); }}
which allows you to simplify the artLines call to:
use Chewie\Concerns\DrawsArt; class DemoRenderer extends Renderer{ use DrawsArt; public function __invoke(Demo $prompt): string { $this->artLines('horse')->each($this->line(...)); return $this; }}
Alignment
Chewie comes with methods that help align content within the terminal.
use Chewie\Concerns\Aligns; class DemoRenderer extends Renderer{ use Aligns; public function __invoke(Demo $prompt): string { $width = $prompt->terminal()->cols(); $height = $prompt->terminal()->lines(); $lines = [ 'Hello!', 'My name is Joe', ]; $this->centerHorizontally($lines, $width) ->each($this->line(...)); $this->centerVertically($lines, $height) ->each($this->line(...)); $this->center($lines, $width, $height) ->each($this->line(...)); $this->line($this->spaceBetween($width, ...$lines)); $this->pinToBottom($height, function() { $this->newLine(); $this->line('This is pinned to the bottom!'); }); return $this; }}