Вход Регистрация
Файл: vendor/laravel/prompts/src/Concerns/Themes.php
Строк: 110
<?php

namespace LaravelPromptsConcerns;

use 
InvalidArgumentException;
use 
LaravelPromptsConfirmPrompt;
use 
LaravelPromptsMultiSearchPrompt;
use 
LaravelPromptsMultiSelectPrompt;
use 
LaravelPromptsNote;
use 
LaravelPromptsPasswordPrompt;
use 
LaravelPromptsPausePrompt;
use 
LaravelPromptsProgress;
use 
LaravelPromptsSearchPrompt;
use 
LaravelPromptsSelectPrompt;
use 
LaravelPromptsSpinner;
use 
LaravelPromptsSuggestPrompt;
use 
LaravelPromptsTable;
use 
LaravelPromptsTextareaPrompt;
use 
LaravelPromptsTextPrompt;
use 
LaravelPromptsThemesDefaultConfirmPromptRenderer;
use 
LaravelPromptsThemesDefaultMultiSearchPromptRenderer;
use 
LaravelPromptsThemesDefaultMultiSelectPromptRenderer;
use 
LaravelPromptsThemesDefaultNoteRenderer;
use 
LaravelPromptsThemesDefaultPasswordPromptRenderer;
use 
LaravelPromptsThemesDefaultPausePromptRenderer;
use 
LaravelPromptsThemesDefaultProgressRenderer;
use 
LaravelPromptsThemesDefaultSearchPromptRenderer;
use 
LaravelPromptsThemesDefaultSelectPromptRenderer;
use 
LaravelPromptsThemesDefaultSpinnerRenderer;
use 
LaravelPromptsThemesDefaultSuggestPromptRenderer;
use 
LaravelPromptsThemesDefaultTableRenderer;
use 
LaravelPromptsThemesDefaultTextareaPromptRenderer;
use 
LaravelPromptsThemesDefaultTextPromptRenderer;

trait 
Themes
{
    
/**
     * The name of the active theme.
     */
    
protected static string $theme 'default';

    
/**
     * The available themes.
     *
     * @var array<string, array<class-string<LaravelPromptsPrompt>, 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<LaravelPromptsPrompt>, 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);
    }
}
Онлайн: 1
Реклама