Viewing file: Themes.php (3.78 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace Laravel\Prompts\Concerns;
use InvalidArgumentException; use Laravel\Prompts\ConfirmPrompt; use Laravel\Prompts\MultiSearchPrompt; use Laravel\Prompts\MultiSelectPrompt; use Laravel\Prompts\Note; use Laravel\Prompts\PasswordPrompt; use Laravel\Prompts\PausePrompt; use Laravel\Prompts\Progress; use Laravel\Prompts\SearchPrompt; use Laravel\Prompts\SelectPrompt; use Laravel\Prompts\Spinner; use Laravel\Prompts\SuggestPrompt; use Laravel\Prompts\Table; use Laravel\Prompts\TextareaPrompt; use Laravel\Prompts\TextPrompt; use Laravel\Prompts\Themes\Default\ConfirmPromptRenderer; use Laravel\Prompts\Themes\Default\MultiSearchPromptRenderer; use Laravel\Prompts\Themes\Default\MultiSelectPromptRenderer; use Laravel\Prompts\Themes\Default\NoteRenderer; use Laravel\Prompts\Themes\Default\PasswordPromptRenderer; use Laravel\Prompts\Themes\Default\PausePromptRenderer; use Laravel\Prompts\Themes\Default\ProgressRenderer; use Laravel\Prompts\Themes\Default\SearchPromptRenderer; use Laravel\Prompts\Themes\Default\SelectPromptRenderer; use Laravel\Prompts\Themes\Default\SpinnerRenderer; use Laravel\Prompts\Themes\Default\SuggestPromptRenderer; use Laravel\Prompts\Themes\Default\TableRenderer; use Laravel\Prompts\Themes\Default\TextareaPromptRenderer; use Laravel\Prompts\Themes\Default\TextPromptRenderer;
trait Themes { /** * The name of the active theme. */ protected static string $theme = 'default';
/** * The available themes. * * @var array<string, array<class-string<\Laravel\Prompts\Prompt>, class-string<object&callable>>> */ protected static array $themes = [ 'default' => [ TextPrompt::class => TextPromptRenderer::class, TextareaPrompt::class => TextareaPromptRenderer::class, PasswordPrompt::class => PasswordPromptRenderer::class, SelectPrompt::class => SelectPromptRenderer::class, MultiSelectPrompt::class => MultiSelectPromptRenderer::class, ConfirmPrompt::class => ConfirmPromptRenderer::class, PausePrompt::class => PausePromptRenderer::class, SearchPrompt::class => SearchPromptRenderer::class, MultiSearchPrompt::class => MultiSearchPromptRenderer::class, SuggestPrompt::class => SuggestPromptRenderer::class, Spinner::class => SpinnerRenderer::class, Note::class => NoteRenderer::class, Table::class => TableRenderer::class, Progress::class => ProgressRenderer::class, ], ];
/** * Get or set the active theme. * * @throws \InvalidArgumentException */ public static function theme(?string $name = null): string { if ($name === null) { return static::$theme; }
if (! isset(static::$themes[$name])) { throw new InvalidArgumentException("Prompt theme [{$name}] not found."); }
return static::$theme = $name; }
/** * Add a new theme. * * @param array<class-string<\Laravel\Prompts\Prompt>, class-string<object&callable>> $renderers */ public static function addTheme(string $name, array $renderers): void { if ($name === 'default') { throw new InvalidArgumentException('The default theme cannot be overridden.'); }
static::$themes[$name] = $renderers; }
/** * Get the renderer for the current prompt. */ protected function getRenderer(): callable { $class = get_class($this);
return new (static::$themes[static::$theme][$class] ?? static::$themes['default'][$class])($this); }
/** * Render the prompt using the active theme. */ protected function renderTheme(): string { $renderer = $this->getRenderer();
return $renderer($this); } }
|