first commit
This commit is contained in:
70
vendor/nunomaduro/termwind/src/ValueObjects/Style.php
vendored
Normal file
70
vendor/nunomaduro/termwind/src/ValueObjects/Style.php
vendored
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Termwind\ValueObjects;
|
||||
|
||||
use Closure;
|
||||
use Termwind\Actions\StyleToMethod;
|
||||
use Termwind\Exceptions\InvalidColor;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class Style
|
||||
{
|
||||
/**
|
||||
* Creates a new value object instance.
|
||||
*
|
||||
* @param Closure(Styles $styles, string|int ...$argument): Styles $callback
|
||||
*/
|
||||
public function __construct(private Closure $callback, private string $color = '')
|
||||
{
|
||||
// ..
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the given set of styles to the styles.
|
||||
*/
|
||||
public function apply(string $styles): void
|
||||
{
|
||||
$callback = clone $this->callback;
|
||||
|
||||
$this->callback = static function (
|
||||
Styles $formatter,
|
||||
string|int ...$arguments
|
||||
) use ($callback, $styles): Styles {
|
||||
$formatter = $callback($formatter, ...$arguments);
|
||||
|
||||
return StyleToMethod::multiple($formatter, $styles);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the color to the style.
|
||||
*/
|
||||
public function color(string $color): void
|
||||
{
|
||||
if (preg_match('/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/', $color) < 1) {
|
||||
throw new InvalidColor(sprintf('The color %s is invalid.', $color));
|
||||
}
|
||||
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the color.
|
||||
*/
|
||||
public function getColor(): string
|
||||
{
|
||||
return $this->color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Styles the given formatter with this style.
|
||||
*/
|
||||
public function __invoke(Styles $styles, string|int ...$arguments): Styles
|
||||
{
|
||||
return ($this->callback)($styles, ...$arguments);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user