Implementación completa del sistema de Critical CSS dinámico según plan 13.01: Domain Layer: - Crear CriticalCSSCollectorInterface para DIP compliance Infrastructure Layer: - Implementar CriticalCSSCollector (singleton via DIContainer) - Crear CriticalCSSHooksRegistrar para inyección en wp_head - Actualizar DIContainer con getCriticalCSSCollector() Schemas: - Agregar campo is_critical a navbar, top-notification-bar, hero - Sincronizar con BD (18+39+31 campos) Renderers (navbar, top-notification-bar, hero): - Inyectar CriticalCSSCollectorInterface via constructor - Lógica condicional: si is_critical=true → CSS a <head> Admin (FormBuilders + FieldMappers): - Toggle "CSS Crítico" en sección visibility - Mapeo AJAX para persistencia Beneficios: - LCP optimizado: CSS crítico inline en <head> - Above-the-fold rendering sin FOUC - Componentes configurables desde admin panel 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
46 lines
1.1 KiB
PHP
46 lines
1.1 KiB
PHP
<?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;
|
|
}
|