buildHeader($componentId); // Layout 2 columnas $html .= '
'; $html .= '
'; $html .= $this->buildVisibilityGroup($componentId); $html .= $this->buildLayoutGroup($componentId); $html .= $this->buildBehaviorGroup($componentId); $html .= $this->buildMediaGroup($componentId); $html .= '
'; $html .= '
'; $html .= $this->buildLinksGroup($componentId); $html .= $this->buildVisualEffectsGroup($componentId); $html .= $this->buildColorsGroup($componentId); $html .= '
'; $html .= '
'; return $html; } private function buildHeader(string $componentId): string { $html = '
renderer->getFieldValue($componentId, 'visibility', 'is_enabled', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Switch: Show on Mobile $showMobile = $this->renderer->getFieldValue($componentId, 'visibility', 'show_on_mobile', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Switch: Show on Desktop $showDesktop = $this->renderer->getFieldValue($componentId, 'visibility', 'show_on_desktop', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // ============================================= // Checkboxes de visibilidad por tipo de página // Grupo especial: _page_visibility // ============================================= $html .= '
'; $html .= '

'; $html .= ' '; $html .= ' Mostrar en tipos de pagina'; $html .= '

'; $showOnHome = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_home', true); $showOnPosts = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_posts', true); $showOnPages = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_pages', true); $showOnArchives = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_archives', true); $showOnSearch = $this->renderer->getFieldValue($componentId, '_page_visibility', 'show_on_search', true); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('navbarVisibilityHome', 'Home', 'bi-house', $showOnHome); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('navbarVisibilityPosts', 'Posts', 'bi-file-earmark-text', $showOnPosts); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('navbarVisibilityPages', 'Paginas', 'bi-file-earmark', $showOnPages); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('navbarVisibilityArchives', 'Archivos', 'bi-archive', $showOnArchives); $html .= '
'; $html .= '
'; $html .= $this->buildPageVisibilityCheckbox('navbarVisibilitySearch', 'Busqueda', 'bi-search', $showOnSearch); $html .= '
'; $html .= '
'; // Switch: Sticky $sticky = $this->renderer->getFieldValue($componentId, 'visibility', 'sticky_enabled', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Switch: CSS Crítico $isCritical = $this->renderer->getFieldValue($componentId, 'visibility', 'is_critical', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; $html .= ''; return $html; } private function buildLayoutGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Layout y Estructura'; $html .= '
'; // Container Type $containerType = $this->renderer->getFieldValue($componentId, 'layout', 'container_type', 'container'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Padding Vertical $paddingVertical = $this->renderer->getFieldValue($componentId, 'layout', 'padding_vertical', '0.75rem 0'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Z-index $zIndex = $this->renderer->getFieldValue($componentId, 'layout', 'z_index', '1030'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildBehaviorGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Configuración del Menú'; $html .= '
'; // Menu Location $menuLocation = $this->renderer->getFieldValue($componentId, 'behavior', 'menu_location', 'primary'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Custom Menu ID $customMenuId = $this->renderer->getFieldValue($componentId, 'behavior', 'custom_menu_id', '0'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Enable Dropdowns $enableDropdowns = $this->renderer->getFieldValue($componentId, 'behavior', 'enable_dropdowns', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Mobile Breakpoint $mobileBreakpoint = $this->renderer->getFieldValue($componentId, 'behavior', 'mobile_breakpoint', 'lg'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildMediaGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Logo/Marca'; $html .= '
'; // Show Brand $showBrand = $this->renderer->getFieldValue($componentId, 'media', 'show_brand', false); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Use Logo $useLogo = $this->renderer->getFieldValue($componentId, 'media', 'use_logo', false); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Logo URL $logoUrl = $this->renderer->getFieldValue($componentId, 'media', 'logo_url', ''); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Logo Height $logoHeight = $this->renderer->getFieldValue($componentId, 'media', 'logo_height', '40px'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Brand Text $brandText = $this->renderer->getFieldValue($componentId, 'media', 'brand_text', 'Mi Sitio'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Brand Font Size $brandFontSize = $this->renderer->getFieldValue($componentId, 'media', 'brand_font_size', '1.5rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Brand Color $brandColor = $this->renderer->getFieldValue($componentId, 'media', 'brand_color', '#FFFFFF'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Brand Hover Color $brandHoverColor = $this->renderer->getFieldValue($componentId, 'media', 'brand_hover_color', '#FF8600'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildLinksGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Estilos de Enlaces'; $html .= '
'; // Text Color $textColor = $this->renderer->getFieldValue($componentId, 'links', 'text_color', '#FFFFFF'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Hover Color $hoverColor = $this->renderer->getFieldValue($componentId, 'links', 'hover_color', '#FF8600'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Active Color $activeColor = $this->renderer->getFieldValue($componentId, 'links', 'active_color', '#FF8600'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Font Size $fontSize = $this->renderer->getFieldValue($componentId, 'links', 'font_size', '0.9rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Font Weight $fontWeight = $this->renderer->getFieldValue($componentId, 'links', 'font_weight', '500'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Padding $padding = $this->renderer->getFieldValue($componentId, 'links', 'padding', '0.5rem 0.65rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Border Radius $borderRadius = $this->renderer->getFieldValue($componentId, 'links', 'border_radius', '4px'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Show Underline Effect $showUnderline = $this->renderer->getFieldValue($componentId, 'links', 'show_underline_effect', true); $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; // Underline Color $underlineColor = $this->renderer->getFieldValue($componentId, 'links', 'underline_color', '#FF8600'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildVisualEffectsGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Estilos de Dropdown'; $html .= '
'; // Background Color $bgColor = $this->renderer->getFieldValue($componentId, 'visual_effects', 'background_color', '#FFFFFF'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Border Radius $borderRadius = $this->renderer->getFieldValue($componentId, 'visual_effects', 'border_radius', '8px'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Shadow $shadow = $this->renderer->getFieldValue($componentId, 'visual_effects', 'shadow', '0 8px 24px rgba(0, 0, 0, 0.12)'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Item Color $itemColor = $this->renderer->getFieldValue($componentId, 'visual_effects', 'item_color', '#495057'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Item Hover Background $itemHoverBg = $this->renderer->getFieldValue($componentId, 'visual_effects', 'item_hover_background', 'rgba(255, 133, 0, 0.1)'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Item Padding $itemPadding = $this->renderer->getFieldValue($componentId, 'visual_effects', 'item_padding', '0.625rem 1.25rem'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Dropdown Max Height $dropdownMaxHeight = $this->renderer->getFieldValue($componentId, 'visual_effects', 'dropdown_max_height', '300px'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= ' Si se excede, aparece scroll vertical'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildColorsGroup(string $componentId): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Estilos del Navbar'; $html .= '
'; // Background Color $navbarBgColor = $this->renderer->getFieldValue($componentId, 'colors', 'background_color', '#1e3a5f'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; // Box Shadow $boxShadow = $this->renderer->getFieldValue($componentId, 'colors', 'box_shadow', '0 4px 12px rgba(30, 58, 95, 0.15)'); $html .= '
'; $html .= ' '; $html .= ' '; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildPageVisibilityCheckbox(string $id, string $label, string $icon, mixed $checked): string { $checked = $checked === true || $checked === '1' || $checked === 1; $html = '
'; $html .= sprintf( ' ', esc_attr($id), $checked ? 'checked' : '' ); $html .= sprintf( ' '; $html .= '
'; return $html; } }