Commit Graph

20 Commits

Author SHA1 Message Date
FrankZamora
d73e0dc9cd fix(admin-panel): Add component-navbar.css enqueue to class-admin-menu.php
- Added wp_enqueue_style for 'apus-component-navbar-css'
- Points to admin/assets/css/component-navbar.css
- Dependency: 'apus-admin-panel-css'
- Version: APUS_ADMIN_PANEL_VERSION

This was the critical missing piece causing navbar cards to display
with incorrect Bootstrap default styles instead of custom component styles.

Without this enqueue:
- Cards had padding: 11.2px 32px 16px (Bootstrap default)
- Cards had margin: 20px 0px 16px (Bootstrap default)
- card-body had padding: 24px (Bootstrap default)

With this enqueue applied:
- Cards have padding: 0px (custom)
- Cards have margin: 0px 0px 16px (custom)
- card-body has padding: 16px (custom)
- All styles match Top Bar exactly 

Resolves #179 (Phase 3: Enable CSS loading)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 16:02:28 -06:00
FrankZamora
6ba66ab15e fix(admin-panel): Add dynamic hex value updates to component-navbar.js
- Added initColorPickers() method to handle color picker interactions
- Dynamically updates hex value displays when user changes colors
- Covers all 7 color pickers in navbar configuration
- Event listeners on 'input' event for real-time updates
- Initializes hex displays on component load with uppercase format

Enhances UX by showing live color values to user.

Resolves #179 (Phase 2: JavaScript enhancements)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 16:02:15 -06:00
FrankZamora
57b8d01dcb fix(admin-panel): Refactor component-navbar.php to match Top Bar HTML patterns
GRUPO 2 - Colores Personalizados (complete refactor):
- Changed row structure: <div class="row"> → <div class="row g-2 mb-2">
- Changed columns: col-md-6 → col-6 (7 instances)
- Added Bootstrap icons to all labels: <i class="bi bi-*" style="color: #FF8600;">
- Updated label classes: class="form-label small mb-1 fw-semibold"
- Added w-100 class to all color inputs
- Added hex value displays: <small id="*Value">#HEXCODE</small>

Other groups fixed (8 total):
- GRUPO 1: Added g-2, changed col-md-6 → col-6 (2x)
- GRUPO 3: Added g-2, changed col-md-6 → col-6 (2x)
- GRUPO 4: Added g-2, changed col-md-6 → col-6 (2x)
- GRUPO 5: Added g-2 (maintains col-md-4 for 3 columns)
- GRUPO 6: Added g-2, changed col-md-6 → col-6 (2x)
- GRUPO 7: Added g-2, changed col-md-6 → col-6 (4x)
- GRUPO 8: Added g-2, changed col-md-6 → col-6 (2x)

Resolves #179 (Phase 2: Refactor HTML)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 16:01:48 -06:00
FrankZamora
3c4bb8ba5a fix(admin-panel): Create component-navbar.css with #navbarTab rules
- Created component-navbar.css based on component-top-bar.css structure
- Applied #navbarTab selector to match Top Bar design patterns
- Fixed card styles: padding: 0, margin: 0 0 16px, border-radius: 6px
- Fixed card-body padding: 1rem (16px)
- Fixed box-shadow to match Top Bar: rgba(0, 0, 0, 0.075) 0px 2px 4px 0px
- Includes responsive rules and form controls styling

Resolves #179 (Phase 1: Create CSS file)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 16:01:12 -06:00
FrankZamora
144628914d feat(admin-panel): Implement navbar JavaScript controller
JavaScript module that manages navbar component data collection and rendering.
Exposes window.NavbarComponent object with three main methods.

Methods:
- init(): Initializes component (event listeners, etc.)
- collect(): Collects all 38 form fields into structured object
- render(config): Populates form fields from configuration object

Data Structure:
- Flat fields: enabled, position, responsive_breakpoint, etc.
- Nested objects: lets_talk_button, dropdown, custom_styles

Field Coverage:
- Boolean switches: 9 fields
- Color pickers: 7 fields
- Select dropdowns: 7 fields
- Number inputs: 9 fields
- Text inputs: 2 fields
Total: 38 configurable fields

Integration:
- Called by admin-app.js for save/load operations
- Works with Settings Manager for backend persistence
- Supports real-time form validation

File: admin-panel/admin/assets/js/component-navbar.js (160 lines)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 15:26:56 -06:00
FrankZamora
11825e1dc6 feat(admin-panel): Implement navbar admin interface v2.0
Complete admin interface for navbar configuration with 38 customizable fields
organized in 8 logical groups. Follows exact design patterns from Top Bar component.

Design Patterns (100% identical to Top Bar):
1. Header: Navy gradient (#0E2337→#1e3a5f) + orange border (#FF8600 4px)
2. Layout: 2-column responsive grid (col-lg-6, stacks on mobile)
3. Cards: Navy left border (4px solid #1e3a5f)
4. Switches: Vertical alignment with mb-2 spacing

Configuration Groups:
- Group 1: Activation & Visibility (5 fields)
- Group 2: Custom Colors (7 color pickers)
- Group 3: Typography (2 fields)
- Group 4: Visual Effects (5 fields)
- Group 5: Spacing (3 fields)
- Group 6: Let's Talk Button (5 fields)
- Group 7: Dropdown (5 fields)
- Group 8: Advanced (2 fields)

Quality Gate:  PASSED (100% - 23/23 checks)
- Visual comparison: 100% (4/4 patterns)
- Functional validation: 100% (11/11 checks)
- Integration testing: 100% (8/8 checks)

File: admin-panel/admin/components/component-navbar.php (615 lines)

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 15:26:33 -06:00
FrankZamora
755bfbd206 feat(admin-panel): Add navbar component JS enqueue
Fix critical bug where navbar configuration was not being saved.
The component-navbar.js file existed but was not being loaded by WordPress,
causing window.NavbarComponent to be undefined and preventing data collection.

Changes:
- Added wp_enqueue_script for component-navbar.js (lines 126-133)
- Updated admin-app.js dependencies to include navbar component (line 139)

Impact: Navbar settings now save correctly to database

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 15:25:47 -06:00
FrankZamora
3d262adb25 fix(admin): Agregar rows para estructura 2 columnas
- Agregado cierre de row después del card 1
- Agregado apertura de row para cards 2-4
- Corregida indentación de headers dentro de card-body

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:58:01 -06:00
FrankZamora
f890e7f124 fix(admin): Corregir cierre de divs en card Activación
- Eliminado </div> duplicado en toggle Desktop
- Agregado cierre correcto para col-md-6 del primer card

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:54:37 -06:00
FrankZamora
9224f651f5 feat(admin): Mostrar cards en grid de 2 columnas
- Row 1: Activación + Contenido (col-md-6 cada uno)
- Row 2: Estilos + Vista Previa (col-md-6 cada uno)
- Añadido h-100 para altura uniforme entre cards

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:47:41 -06:00
FrankZamora
90b492886f fix(admin): Apilar toggles verticalmente en sección Activación
- Eliminar row g-4 y col-md-4 que causaban layout horizontal
- Cambiar a divs con mb-4 para espaciado vertical consistente
- Último elemento con mb-0 para evitar espacio extra
- Los 3 toggles ahora se apilan verticalmente como cards

Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:31:50 -06:00
FrankZamora
27bc0cea53 feat(admin): Implementar vista previa en tiempo real del Top Bar
Funcionalidades JavaScript agregadas:
- Actualización de progress bar junto con contador de caracteres
- Progress bar cambia de color según proximidad al límite:
  * Naranja: 0-200 caracteres
  * Amarillo: 201-230 caracteres
  * Rojo: 231-250 caracteres
- Vista previa en tiempo real del Top Bar (setupLivePreview)
- Actualización automática al modificar cualquier campo:
  * Icono y visibilidad
  * Texto destacado
  * Mensaje principal
  * Enlace y visibilidad
  * Colores (fondo, texto, destacado)
  * Tamaño de fuente
- Renderizado HTML dinámico en tiempo real
- Listeners optimizados con event delegation

La vista previa refleja exactamente cómo se verá en el frontend

Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:27:33 -06:00
FrankZamora
4dc188c76c feat(admin): Agregar estilos profesionales al Admin Panel
Mejoras CSS implementadas:
- Variables CSS con paleta APUs completa (Navy + Orange + Neutrales)
- Clases de utilidad para colores de marca
- Tab header con gradiente sutil y borde lateral naranja
- Section titles con iconos en gradiente
- Cards con hover effects y transiciones suaves
- Toggle containers con fondos y bordes
- Form switches grandes (3rem) con colores personalizados
- Input groups sin bordes intermedios
- Color pickers con hover effects y transform
- Alert personalizado con gradiente naranja
- Animación fadeInUp para vista previa
- Botones de marca Navy y Orange con hover effects
- Progress bar con transiciones suaves
- Badges y typography utilities
- Responsive design para móviles

Todo con transiciones fluidas y sistema de spacing consistente

Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:27:21 -06:00
FrankZamora
bcd87766ba feat(admin): Aplicar diseño mejorado al componente Top Bar
Mejoras implementadas:
- Header del tab con gradiente y botón de restaurar defaults
- Cards con sombras y bordes sutiles para las secciones
- Section titles con iconos destacados en gradiente naranja
- Toggle containers con fondo gris claro y bordes
- Input groups sin bordes intermedios (merge)
- Color pickers mejorados con preview de código hex
- Progress bar visual para contador de caracteres del mensaje
- Alert personalizado con tip de diseño
- Vista previa interactiva del Top Bar en tiempo real
- Badges para indicadores (Opcional, Requerido)
- Iconografía consistente con Bootstrap Icons
- Espaciado mejorado con sistema g-4

Diseño coherente con paleta APUs (Navy + Orange + Neutrales)

Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:27:08 -06:00
FrankZamora
59253833a2 feat(admin): Agregar contador de caracteres para textarea del Top Bar
- Implementar setupCharacterCounter() en AdminPanel
- Agregar listener de evento 'input' para actualizar contador en tiempo real
- Cambiar color del contador según proximidad al límite (230: danger, 200: warning)
- Trigger automático del contador al cargar/renderizar configuración
- Integrar llamada a setupCharacterCounter() en bindEvents()

Basado en: 07-IMPLEMENTACION-ADMIN-JS.md
Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:05:33 -06:00
FrankZamora
cc072e407a feat(admin): Implementar interfaz HTML del Top Bar según especificación
- Actualizar main.php con diseño completo del Tab Top Bar
- Agregar switches en lugar de checkboxes básicos
- Implementar layout responsive con grid Bootstrap
- Agregar textarea con contador de caracteres para mensaje
- Implementar color pickers para estilos personalizados
- Mejorar accesibilidad con labels y roles ARIA
- Agregar vista previa informativa

Basado en: 05-IMPLEMENTACION-ADMIN-INTERFAZ-TOP-BAR.md
Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 22:05:23 -06:00
FrankZamora
fb36424112 Fix Admin Panel: Resolver error de nonce y validación de URLs
Dos fixes críticos para el admin panel del tema:

1. **Fix error de nonce en AJAX**
   - Cambiar de wp_verify_nonce() a check_ajax_referer()
   - check_ajax_referer() es el método recomendado por WordPress para AJAX
   - Aplicado en ajax_get_settings() y ajax_save_settings()
   - El nonce ahora se valida correctamente

2. **Fix validación de URLs relativas**
   - Aceptar URLs relativas que empiezan con / (ej: /catalogo)
   - filter_var() con FILTER_VALIDATE_URL rechazaba URLs relativas
   - Agregada validación adicional con regex para paths relativos
   - Mantiene validación para URLs completas

Archivos modificados:
- admin-panel/includes/class-settings-manager.php
- admin-panel/includes/class-validator.php

Issue: #144

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 10:58:50 -06:00
FrankZamora
3beb292901 Fix: Corregir formato AJAX WordPress en Admin Panel
Causa raíz del error 400: El código estaba usando formato JSON cuando WordPress AJAX requiere application/x-www-form-urlencoded.

## Problema

**Error:** POST admin-ajax.php 400 (Bad Request)

**Causas:**
1. JavaScript enviaba datos como JSON (`Content-Type: application/json`)
2. PHP usaba `json_decode(file_get_contents('php://input'))`
3. WordPress AJAX espera `$_POST` con `action` y `nonce`

## Solución

### JavaScript (admin-app.js)
```javascript
// ANTES ( Incorrecto)
data: JSON.stringify({
  action: 'apus_save_settings',
  nonce: apusAdminData.nonce,
  ...formData
})

// AHORA ( Correcto)
const postData = new URLSearchParams();
postData.append('action', 'apus_save_settings');
postData.append('nonce', apusAdminData.nonce);
postData.append('components', JSON.stringify(formData.components));
```

### PHP (class-settings-manager.php)
```php
// ANTES ( Incorrecto)
$data = json_decode(file_get_contents('php://input'), true);

// AHORA ( Correcto)
$components = json_decode(stripslashes($_POST['components']), true);
```

### Cambios Aplicados

**admin-app.js:**
- Usar `URLSearchParams` en lugar de `JSON.stringify`
- Header `application/x-www-form-urlencoded`
- Enviar `components` como JSON string en parámetro POST

**class-settings-manager.php:**
- Verificar nonce con `wp_verify_nonce($_POST['nonce'])`
- Parsear `$_POST['components']` como JSON
- Mensajes de error más descriptivos

## WordPress AJAX Requirements

1.  `action` en $_POST
2.  `nonce` en $_POST
3.  Content-Type: application/x-www-form-urlencoded
4.  Usar $_POST, no php://input

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 15:32:47 -06:00
FrankZamora
0fd0ee8231 Refactor: Top Bar v2.1 - Valores CSS + UI Compacta
Remodulación del Top Bar siguiendo algoritmo v2.1 actualizado.

## 1. Valores de Estilos desde CSS

**Antes (v2.0):**
```php
'custom_styles' => array(
    'background_color' => '',  // Vacío
    'text_color' => '',        // Vacío
    'highlight_color' => '',   // Vacío
    'link_hover_color' => '',  // Vacío
)
```

**Ahora (v2.1):**
```php
'custom_styles' => array(
    'background_color' => '#0E2337',  // Extraído de componente-top-bar.css
    'text_color' => '#ffffff',
    'highlight_color' => '#FF8600',   // var(--color-orange-primary)
    'link_hover_color' => '#FF8600',
    'font_size' => 'normal'           // 0.9rem del CSS
)
```

**Mapping CSS → Defaults:**
- `.top-notification-bar { background-color: var(--color-navy-dark) }` → `#0E2337`
- `.top-notification-bar { color: #ffffff }` → `#ffffff`
- `.top-notification-bar strong { color: var(--color-orange-primary) }` → `#FF8600`
- `.top-notification-bar a:hover { color: var(--color-orange-primary) }` → `#FF8600`

## 2. UI Compacta

**Antes:** Checkboxes dispersos (cada uno fila completa)
**Ahora:**
- Checkboxes móvil/desktop → Fila de 2 columnas (col-md-6)
- Campos enlace (texto + URL + target) → Fila compacta (col-md-5 + 5 + 2)
- Colores ya estaban bien (row con col-md-3)

**Resultado:** Menos scroll, mejor aprovechamiento del espacio.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 15:25:47 -06:00
FrankZamora
465b879135 Feat: Implementar Top Bar configurable - Issue #143
Implementación completa del componente Top Bar con 15 campos configurables desde el admin panel, siguiendo el algoritmo universal v2.0.

## Cambios Realizados

### Backend (PHP)
- Agregados defaults del Top Bar a class-settings-manager.php
- Implementada validación completa en class-validator.php (15 campos)
- Implementada sanitización con sanitize_text_field, esc_url_raw y sanitize_hex_color
- Modificado header.php con código 100% configurable usando wp_parse_args()

### Frontend (Admin Panel)
- Creado tab HTML completo con 3 secciones: Activación, Contenido y Estilos
- Implementado JavaScript para renderizado y recolección de datos
- 15 campos configurables: enabled, visibility, icon, content, link, custom styles

### Infraestructura
- Creado admin-panel/init.php para carga del módulo
- Creada class-admin-menu.php con enqueue de Bootstrap 5 y assets
- Creada estructura base CSS y JavaScript del admin
- Ya cargado en functions.php línea 276

## Características
- Responsive: Control independiente mobile/desktop
- Estilos personalizables: 4 colores + tamaño de fuente
- Validación robusta: Límites de caracteres, URLs, colores hex
- Defaults inteligentes: Valores seguros si no hay configuración

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 15:13:55 -06:00