Upgrade framework

This commit is contained in:
2023-11-14 16:54:35 +01:00
parent 1648a5cd42
commit 4fcf6fffcc
10548 changed files with 693138 additions and 466698 deletions

View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Anchor extends Element
{
}

View File

@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class BreakLine extends Element
{
/**
* Get the string representation of the element.
*/
public function toString(): string
{
$display = $this->styles->getProperties()['styles']['display'] ?? 'inline';
if ($display === 'hidden') {
return '';
}
if ($display === 'block') {
return parent::toString();
}
return parent::toString()."\r";
}
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Dd extends Element
{
protected static array $defaultStyles = ['block', 'ml-4'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Div extends Element
{
protected static array $defaultStyles = ['block'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Dl extends Element
{
protected static array $defaultStyles = ['block'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Dt extends Element
{
protected static array $defaultStyles = ['block', 'font-bold'];
}

View File

@@ -0,0 +1,121 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
use Symfony\Component\Console\Output\OutputInterface;
use Termwind\Actions\StyleToMethod;
use Termwind\Html\InheritStyles;
use Termwind\ValueObjects\Styles;
/**
* @internal
*
* @method Element inheritFromStyles(Styles $styles)
* @method Element fontBold()
* @method Element strong()
* @method Element italic()
* @method Element underline()
* @method Element lineThrough()
* @method int getLength()
* @method int getInnerWidth()
* @method array getProperties()
* @method Element href(string $href)
* @method bool hasStyle(string $style)
* @method Element addStyle(string $style)
*/
abstract class Element
{
/** @var string[] */
protected static array $defaultStyles = [];
protected Styles $styles;
/**
* Creates an element instance.
*
* @param array<int, Element|string>|string $content
*/
final public function __construct(
protected OutputInterface $output,
protected array|string $content,
Styles|null $styles = null
) {
$this->styles = $styles ?? new Styles(defaultStyles: static::$defaultStyles);
$this->styles->setElement($this);
}
/**
* Creates an element instance with the given styles.
*
* @param array<int, Element|string>|string $content
* @param array<string, mixed> $properties
*/
final public static function fromStyles(OutputInterface $output, array|string $content, string $styles = '', array $properties = []): static
{
$element = new static($output, $content);
if ($properties !== []) {
$element->styles->setProperties($properties);
}
$elementStyles = StyleToMethod::multiple($element->styles, $styles);
return new static($output, $content, $elementStyles);
}
/**
* Get the string representation of the element.
*/
public function toString(): string
{
if (is_array($this->content)) {
$inheritance = new InheritStyles();
$this->content = implode('', $inheritance($this->content, $this->styles));
}
return $this->styles->format($this->content);
}
/**
* @param array<int, mixed> $arguments
*/
public function __call(string $name, array $arguments): mixed
{
if (method_exists($this->styles, $name)) {
$result = $this->styles->{$name}(...$arguments);
if (str_starts_with($name, 'get') || str_starts_with($name, 'has')) {
return $result;
}
}
return $this;
}
/**
* Sets the content of the element.
*
* @param array<int, Element|string>|string $content
*/
final public function setContent(array|string $content): static
{
return new static($this->output, $content, $this->styles);
}
/**
* Renders the string representation of the element on the output.
*/
final public function render(int $options): void
{
$this->output->writeln($this->toString(), $options);
}
/**
* Get the string representation of the element.
*/
final public function __toString(): string
{
return $this->toString();
}
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Hr extends Element
{
protected static array $defaultStyles = ['block', 'border-t'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Li extends Element
{
protected static array $defaultStyles = ['block'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Ol extends Element
{
protected static array $defaultStyles = ['block', 'list-decimal'];
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Paragraph extends Element
{
protected static array $defaultStyles = ['block', 'my-1'];
}

View File

@@ -0,0 +1,19 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
/**
* @internal
*/
final class Raw extends Element
{
/**
* Get the string representation of the element.
*/
public function toString(): string
{
return is_array($this->content) ? implode('', $this->content) : $this->content;
}
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Span extends Element
{
// ..
}

View File

@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace Termwind\Components;
final class Ul extends Element
{
protected static array $defaultStyles = ['block', 'list-disc'];
}