mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 18:51:31 +00:00
The official image from streamline does not currently work for the arm64 platform. As a temporary measure, the source code and docker build scripts have been lifted from the official images and are used to build locally. Some additional modifications are made to reduce overall image size, these are documented in docker/README.md
122 lines
3.2 KiB
PHP
122 lines
3.2 KiB
PHP
<?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();
|
|
}
|
|
}
|