Chewie

joetannenbaum/chewie image

Chewie stats

Downloads
220
Stars
23
Open Issues
0
Forks
1

View on GitHub →

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;
}
}
Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Joetannenbaum Chewie Related Articles

PestPHP Intellisense in Laravel VS Code Extension v1.7.0 image

PestPHP Intellisense in Laravel VS Code Extension v1.7.0

Read article
Laravel Prompts v0.3.15 Adds Streaming, Tasks, Autocomplete, and More image

Laravel Prompts v0.3.15 Adds Streaming, Tasks, Autocomplete, and More

Read article
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
Securing Laravel logo

Securing Laravel

The essential security resource for Laravel devs, covering everything you need to keep your apps secure. Sign up to receive weekly security tips and monthly in depth articles, diving deep into security concepts you need to know!

Securing Laravel
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm
Laravel Cloud logo

Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Laravel Cloud
Acquaint Softtech logo

Acquaint Softtech

Acquaint Softtech offers AI-ready Laravel developers who onboard in 48 hours at $3000/Month with no lengthy sales process and a 100 percent money-back guarantee.

Acquaint Softtech
Blastup logo

Blastup

Blastup provides social media enhancement services including buying Instagram likes, followers, and views, with features like instant delivery and a variety of packages to suit different needs.

Blastup