inline en
*
* PATRÓN:
* - Singleton via DIContainer (NO estático)
* - Cumple DIP: Renderers reciben interface, no clase concreta
*
* UBICACIÓN: Infrastructure/Services (según 00.02)
*
* @package ROITheme\Shared\Infrastructure\Services
*/
final class CriticalCSSCollector implements CriticalCSSCollectorInterface
{
/** @var array */
private array $criticalStyles = [];
/**
* {@inheritDoc}
*/
public function add(string $componentName, string $css): void
{
$this->criticalStyles[$componentName] = $css;
}
/**
* {@inheritDoc}
*/
public function getAll(): array
{
return $this->criticalStyles;
}
/**
* {@inheritDoc}
*/
public function render(): string
{
if (empty($this->criticalStyles)) {
return '';
}
$css = implode("\n", $this->criticalStyles);
return sprintf(
'',
$css
);
}
/**
* {@inheritDoc}
*/
public function clear(): void
{
$this->criticalStyles = [];
}
}