Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
vendor
/
laravel
/
prompts
/
src
/
Themes
/
Contracts
:
Themes-20250318180345.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?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); } }