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 = []; } }