feat: implement is_critical CSS injection via CriticalCSSService
- Created CriticalCSSService (singleton) that queries BD directly in wp_head - Service generates CSS BEFORE components render (priority 1) - Renderers check is_critical flag and skip inline CSS if true - Made generateCSS() public in Renderers for CriticalCSSService to use - Removed CriticalCSSCollector pattern (timing issue with WordPress) Flow: 1. wp_head (priority 1) → CriticalCSSService::render() 2. Service queries BD for components with visibility.is_critical=true 3. Generates CSS using Renderer->generateCSS() methods 4. Outputs: <style id="roi-critical-css">...</style> 5. When Renderers execute, they detect is_critical and omit CSS inline 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,45 +0,0 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Shared\Domain\Contracts;
|
||||
|
||||
/**
|
||||
* Interface para recolectar CSS crítico de componentes above-the-fold
|
||||
*
|
||||
* RESPONSABILIDAD:
|
||||
* - Definir contrato para recolección de CSS crítico
|
||||
* - Permitir inyección en Renderers (DIP)
|
||||
*
|
||||
* UBICACIÓN: Domain (según 00.02 líneas 239-252)
|
||||
*
|
||||
* @package ROITheme\Shared\Domain\Contracts
|
||||
*/
|
||||
interface CriticalCSSCollectorInterface
|
||||
{
|
||||
/**
|
||||
* Agregar CSS de un componente a la colección crítica
|
||||
*
|
||||
* @param string $componentName Identificador del componente (kebab-case)
|
||||
* @param string $css CSS generado del componente
|
||||
*/
|
||||
public function add(string $componentName, string $css): void;
|
||||
|
||||
/**
|
||||
* Obtener todo el CSS crítico recolectado
|
||||
*
|
||||
* @return array<string, string> [componentName => css]
|
||||
*/
|
||||
public function getAll(): array;
|
||||
|
||||
/**
|
||||
* Renderizar CSS crítico como tag <style>
|
||||
*
|
||||
* @return string HTML del tag <style> o string vacío si no hay CSS
|
||||
*/
|
||||
public function render(): string;
|
||||
|
||||
/**
|
||||
* Limpiar colección (útil para tests)
|
||||
*/
|
||||
public function clear(): void;
|
||||
}
|
||||
Reference in New Issue
Block a user