Migración completa a Clean Architecture con componentes funcionales

- Reorganización de estructura: Admin/, Public/, Shared/, Schemas/
- 12 componentes migrados: TopNotificationBar, Navbar, CtaLetsTalk, Hero,
  FeaturedImage, TableOfContents, CtaBoxSidebar, SocialShare, CtaPost,
  RelatedPost, ContactForm, Footer
- Panel de administración con tabs Bootstrap 5 funcionales
- Schemas JSON para configuración de componentes
- Renderers dinámicos con CSSGeneratorService (cero CSS hardcodeado)
- FormBuilders para UI admin con Design System consistente
- Fix: Bootstrap JS cargado en header para tabs funcionales
- Fix: buildTextInput maneja valores mixed (bool/string)
- Eliminación de estructura legacy (src/, admin/, assets/css/componente-*)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
FrankZamora
2025-11-25 21:20:06 -06:00
parent 90de6df77c
commit 0846a3bf03
224 changed files with 21670 additions and 17816 deletions

View File

@@ -0,0 +1,74 @@
<?php
declare(strict_types=1);
namespace ROITheme\Shared\Domain\Contracts;
/**
* Interface para el repositorio de configuraciones de componentes
*
* Domain Layer - Define el contrato para acceso a datos de configuraci<63>n
* Trabaja con la tabla wp_roi_theme_component_settings (normalizada)
*
* Esta interfaz es gen<65>rica y funciona para todos los componentes del tema.
*
* @package ROITheme\Shared\Domain\Contracts
*/
interface ComponentSettingsRepositoryInterface
{
/**
* Obtiene todas las configuraciones de un componente agrupadas por grupo
*
* @param string $componentName Nombre del componente (ej: 'top-notification-bar')
* @return array<string, array<string, mixed>> Configuraciones agrupadas
* Ejemplo: [
* 'visibility' => ['enabled' => true, 'show_on_mobile' => true, ...],
* 'content' => ['icon_class' => 'bi-star', 'label_text' => 'Nuevo', ...],
* 'styles' => ['background_color' => '#0E2337', ...]
* ]
*/
public function getComponentSettings(string $componentName): array;
/**
* Guarda las configuraciones de un componente
*
* @param string $componentName Nombre del componente
* @param array<string, array<string, mixed>> $settings Configuraciones agrupadas
* Ejemplo: [
* 'visibility' => ['enabled' => true],
* 'content' => ['icon_class' => 'bi-star']
* ]
* @return int N<>mero de campos actualizados
*/
public function saveComponentSettings(string $componentName, array $settings): int;
/**
* Obtiene el valor de un campo espec<65>fico
*
* @param string $componentName Nombre del componente
* @param string $groupName Nombre del grupo
* @param string $attributeName Nombre del atributo
* @return mixed|null Valor del campo o null si no existe
*/
public function getFieldValue(string $componentName, string $groupName, string $attributeName): mixed;
/**
* Guarda el valor de un campo espec<65>fico
*
* @param string $componentName Nombre del componente
* @param string $groupName Nombre del grupo
* @param string $attributeName Nombre del atributo
* @param mixed $value Valor a guardar
* @return bool True si se guard<72> correctamente
*/
public function saveFieldValue(string $componentName, string $groupName, string $attributeName, mixed $value): bool;
/**
* Restaura un componente a sus valores por defecto desde el schema JSON
*
* @param string $componentName Nombre del componente
* @param string $schemaPath Ruta al archivo schema JSON
* @return int N<>mero de campos restaurados
*/
public function resetToDefaults(string $componentName, string $schemaPath): int;
}