b0y-101 Mini Shell


Current Path : E:/www2/risk/components/com_sppagebuilder/addons/tab/
File Upload :
Current File : E:/www2/risk/components/com_sppagebuilder/addons/tab/site.php

<?php

/**
 * @package SP Page Builder
 * @author JoomShaper http://www.joomshaper.com
 * @copyright Copyright (c) 2010 - 2023 JoomShaper
 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 or later
 */
//no direct access
defined('_JEXEC') or die('Restricted access');

use Joomla\CMS\Uri\Uri;

class SppagebuilderAddonTab extends SppagebuilderAddons
{
	/**
	 * The addon frontend render method.
	 * The returned HTML string will render to the frontend page.
	 *
	 * @return  string  The HTML string.
	 * @since   1.0.0
	 */
	public function render()
	{
		$settings = $this->addon->settings;

		$class = (isset($settings->class) && $settings->class) ? $settings->class : '';
		$style = (isset($settings->style) && $settings->style) ? $settings->style : '';
		$title = (isset($settings->title) && $settings->title) ? $settings->title : '';
		$nav_icon_postion = (isset($settings->nav_icon_postion) && $settings->nav_icon_postion) ? $settings->nav_icon_postion : '';
		$nav_image_postion = (isset($settings->nav_image_postion) && $settings->nav_image_postion) ? $settings->nav_image_postion : '';
		$heading_selector = (isset($settings->heading_selector) && $settings->heading_selector) ? $settings->heading_selector : 'h3';
		$nav_text_align = (isset($settings->nav_text_align) && $settings->nav_text_align) ? $settings->nav_text_align : 'sppb-text-left';

		$nav_position = (isset($settings->nav_position) && $settings->nav_position) ? $settings->nav_position : 'nav-left';



		// Output
		$output  = '<div class="sppb-addon sppb-addon-tab ' . $class . '">';
		$output .= ($title) ? '<' . $heading_selector . ' class="sppb-addon-title">' . $title . '</' . $heading_selector . '>' : '';
		$output .= '<div class="sppb-addon-content sppb-tab sppb-' . $style . '-tab sppb-tab-nav-position">';
		// $output .= '<div class="sppb-addon-content sppb-tab sppb-' . $style . '-tab sppb-tab-' . $nav_position . ' sppb-tab-nav-position">';

		// Tab Title
		$output .= '<ul class="sppb-nav sppb-nav-' . $style . '" role="tablist">';

		foreach ($settings->sp_tab_item as $key => $tab)
		{
			$icon_top = '';
			$icon_bottom = '';
			$icon_right = '';
			$icon_left = '';
			$icon_block = '';

			// Image
			$image_top = '';
			$image_bottom = '';
			$image_right = '';
			$image_left = '';

			// Lazy load image
			$tab_image = isset($tab->image) && $tab->image ? $tab->image : '';
			$tab_image_src = isset($tab_image->src) ? $tab_image->src : $tab_image;
			$tab_image_width = (isset($tab_image->width) && $tab_image->width) ? $tab_image->width : '';
			$tab_image_height = (isset($tab_image->height) && $tab_image->height) ? $tab_image->height : '';

			$placeholder = $tab_image_src == '' ? false : $this->get_image_placeholder($tab_image_src);

			if (strpos($tab_image_src, "http://") !== false || strpos($tab_image_src, "https://") !== false)
			{
				$tab_image_src = $tab_image_src;
			}
			else
			{
				if ($tab_image_src)
				{
					$tab_image_src = Uri::base() . $tab_image_src;
				}
			}

			$title = (isset($tab->title) && $tab->title) ? ' ' . $tab->title . ' ' : '';
			$subtitle = (isset($tab->subtitle) && $tab->subtitle) ? '<span class="sppb-tab-subtitle">' . $tab->subtitle . '</span>' : '';

			if (isset($tab->image_or_icon) && $tab->image_or_icon == 'image')
			{
				if ($tab_image_src && $nav_image_postion == 'top')
				{
					$image_top = '<img class="sppb-tab-image tab-image-block' . ($placeholder ? ' sppb-element-lazy' : '') . '" src="' . ($placeholder ? $placeholder : $tab_image_src) . '" alt="' . trim(strip_tags($title)) . '" ' . ($placeholder ? 'data-large="' . $tab_image_src . '"' : '') . ' ' . ($tab_image_width ? 'width="' . $tab_image_width . '"' : '') . ' ' . ($tab_image_height ? 'height="' . $tab_image_height . '"' : '') . ' loading="lazy"/>';
				}
				elseif ($tab_image_src && $nav_image_postion == 'bottom')
				{
					$image_bottom = '<img class="sppb-tab-image tab-image-block' . ($placeholder ? ' sppb-element-lazy' : '') . '" src="' . ($placeholder ? $placeholder : $tab_image_src) . '" alt="' . trim(strip_tags($title)) . '" ' . ($placeholder ? 'data-large="' . $tab_image_src . '"' : '') . ' ' . ($tab_image_width ? 'width="' . $tab_image_width . '"' : '') . ' ' . ($tab_image_height ? 'height="' . $tab_image_height . '"' : '') . ' loading="lazy"/>';
				}
				elseif ($tab_image_src && $nav_image_postion == 'right')
				{
					$image_right = '<img class="sppb-tab-image' . ($placeholder ? ' sppb-element-lazy' : '') . '" src="' . ($placeholder ? $placeholder : $tab_image_src) . '" alt="' . trim(strip_tags($title)) . '" ' . ($placeholder ? 'data-large="' . $tab_image_src . '"' : '') . ' ' . ($tab_image_width ? 'width="' . $tab_image_width . '"' : '') . ' ' . ($tab_image_height ? 'height="' . $tab_image_height . '"' : '') . ' loading="lazy"/>';
				}
				else
				{
					$image_left = $tab_image_src ? '<img class="sppb-tab-image' . ($placeholder ? ' sppb-element-lazy' : '') . '" src="' . ($placeholder ? $placeholder : $tab_image_src) . '" alt="' . trim(strip_tags($title)) . '" ' . ($placeholder ? 'data-large="' . $tab_image_src . '"' : '') . ' ' . ($tab_image_width ? 'width="' . $tab_image_width . '"' : '') . ' ' . ($tab_image_height ? 'height="' . $tab_image_height . '"' : '') . ' loading="lazy"/>' : '';
				}
			}
			else
			{

				if (isset($tab->icon) && $tab->icon)
				{
					$icon_arr = array_filter(explode(' ', $tab->icon));

					if (count($icon_arr) === 1)
					{
						$tab->icon = 'fa ' . $tab->icon;
					}

					if ($tab->icon && $nav_icon_postion === 'top')
					{
						$icon_top = '<span class="sppb-tab-icon tab-icon-block" aria-label="' . trim(strip_tags($title)) . '"><i class="' . $tab->icon . '" aria-hidden="true"></i></span>';
					}
					elseif ($tab->icon && $nav_icon_postion === 'bottom')
					{
						$icon_bottom = '<span class="sppb-tab-icon tab-icon-block" aria-label="' . trim(strip_tags($title)) . '"><i class="' . $tab->icon . '" aria-hidden="true"></i></span>';
					}
					elseif ($tab->icon && $nav_icon_postion === 'right')
					{
						$icon_right = '<span class="sppb-tab-icon" aria-label="' . trim(strip_tags($title)) . '"><i class="' . $tab->icon . '" aria-hidden="true"></i></span>';
					}
					else
					{
						$icon_left = '<span class="sppb-tab-icon" aria-label="' . trim(strip_tags($title)) . '"><i class="' . $tab->icon . '" aria-hidden="true"></i></span>';
					}
				}
			}

			if ($nav_icon_postion === 'top' || $nav_icon_postion === 'bottom' || $nav_image_postion === 'top' || $nav_image_postion === 'bottom')
			{
				$icon_block = 'tab-img-or-icon-block-wrap';
			}

			$output .= '<li role="presentation" class="' . (($key === 0) ? "active" : "") . '">';
			$output .= '<a data-toggle="sppb-tab" id="sppb-content-' . ($this->addon->id . $key) . '" class="' . $icon_block . '" href="#sppb-tab-' . ($this->addon->id . $key) . '" role="tab" aria-controls="sppb-tab-' . ($this->addon->id . $key) . '" aria-selected="' . (($key == 0) ? "true" : "false") . '">' . $image_top . $image_left . $icon_top . $icon_left . $title . $image_right . $image_bottom . $icon_right . $icon_bottom . $subtitle . '</a>';
			$output .= '</li>';
		}

		$output .= '</ul>';

		// Tab Content
		$output .= '<div class="sppb-tab-content sppb-tab-' . $style . '-content">';

		foreach ($settings->sp_tab_item as $key => $tab)
		{
			$output .= '<div id="sppb-tab-' . ($this->addon->id . $key) . '" class="sppb-tab-pane sppb-fade' . (($key == 0) ? " active in" : "") . '" role="tabpanel" aria-labelledby="sppb-content-' . ($this->addon->id . $key) . '">' . $tab->content . '</div>';
		}

		$output .= '</div>';
		$output .= '</div>';
		$output .= '</div>';

		return $output;
	}

	/**
	 * Generate the CSS string for the frontend page.
	 *
	 * @return 	string 	The CSS string for the page.
	 * @since 	1.0.0
	 */
	public function css()
	{
		$addon_id = '#sppb-addon-' . $this->addon->id;
		$settings = $this->addon->settings;
		$cssHelper = new CSSHelper($addon_id);
		$css = '';

		$nav_position = (isset($settings->nav_position_original) && $settings->nav_position_original) ? $settings->nav_position_original : 'nav-top';

		$settings->nav_padding = $settings->nav_padding_original ?? $settings->nav_padding ?? '';
		$settings->nav_margin  = $settings->nav_margin_original ?? $settings->nav_margin ?? '';

		$tab_style = (isset($settings->style) && $settings->style) ? $settings->style : '';

		$settings->nav_gutter = empty($settings->nav_gutter) ? 0 : $settings->nav_gutter;

		$selector = '';
		$props = ['active_tab_color' => 'color', 'active_tab_border_width' => 'border-width', 'active_tab_border_color' => 'border-color'];
		$units = ['active_tab_color' => false, 'active_tab_border_color' => false, 'active_tab_bg' => false, 'active_tab_border_width' => false];

		switch ($tab_style)
		{
			case 'pills':
				$selector = '.sppb-nav-pills > li.active > a, .sppb-nav-pills > li.active > a:hover, .sppb-nav-pills > li.active > a:focus';
				$props['active_tab_bg'] = 'background';
				break;
			case 'lines':
				$selector = '.sppb-nav-lines > li.active > a, .sppb-nav-lines > li.active > a:hover, .sppb-nav-lines > li.active > a:focus';
				$props['active_tab_bg'] = 'border-bottom-color';
				break;
			case 'custom':
				$selector = '.sppb-nav-custom > li.active > a, .sppb-nav-custom > li.active > a:hover, .sppb-nav-custom > li.active > a:focus';
				$props['active_tab_bg'] = 'background';
				break;
		}

		$tabStyle = $cssHelper->generateStyle($selector, $settings, $props, $units);
		$navFontStyle = $cssHelper->typography(
			'.sppb-nav-custom a',
			$settings,
			'nav_typography',
			[
				'font' => 'nav_font_family',
				'size' => 'nav_fontsize',
				'line_height' => 'nav_lineheight',
				'uppercase' => 'nav_font_style.uppercase',
				'italic' => 'nav_font_style.italic',
				'underline' => 'nav_font_style.underline',
				'weight' => 'nav_font_style.weight',
			]
		);

		$nav_border = (isset($settings->nav_border) && trim($settings->nav_border)) ? $settings->nav_border : '';

		$isUnitPresent = preg_match('/(px|rem|em|%)\b/', $nav_border);

		$navStyle = $cssHelper->generateStyle(
			'.sppb-nav-custom a',
			$settings,
			[
				'nav_border' => $isUnitPresent
					? 'border-style: solid; border-width'
					: 'border: %spx solid',
				'nav_border_color' => 'border-color',
				'nav_color' => 'color',
				'nav_bg_color' => 'background',
				'nav_border_radius' => 'border-radius',
				'nav_padding' => 'padding',
				'nav_margin' => 'margin'
			],
			[
				'nav_border' => $isUnitPresent ? false : 'px',
				'nav_border_color' => false,
				'nav_color' => false,
				'nav_bg_color' => false,
				'nav_padding' => false,
				'nav_margin' => false
			],
			['nav_padding' => 'spacing', 'nav_margin' => 'spacing']
		);

		$customNavPadding = $cssHelper->generateStyle('.sppb-nav-custom li', $settings, ['nav_padding' => 'padding', 'nav_margin' => 'margin'], false, ['nav_padding' => 'spacing', 'nav_margin' => 'spacing']);

		$contentStyle = $cssHelper->generateStyle(
			'.sppb-tab-custom-content > div',
			$settings,
			[
				'content_backround' => 'background',
				'content_border' => 'border: %spx solid',
				'content_color' => 'color',
				'content_border_color' => 'border-color',
				'content_border_radius' => 'border-radius',
				'content_margin' => 'margin',
				'content_padding' => 'padding',
			],
			[
				'content_backround' => false,
				'content_border' => false,
				'content_color' => false,
				'content_border_color' => false,
				'content_margin' => false,
				'content_padding' => false
			],
			['content_margin' => 'spacing', 'content_padding' => 'spacing']
		);

		$contentFontStyle = $cssHelper->typography('.sppb-tab-custom-content > div', $settings, 'content_typography', [
			'font' => 'content_font_family',
			'size' => 'content_fontsize',
			'line_height' => 'content_lineheight',
			'uppercase' => 'content_font_style.uppercase',
			'italic' => 'content_font_style.italic',
			'underline' => 'content_font_style.underline',
			'weight' => 'content_font_style.weight',
		]);

		$show_boxshadow = (isset($settings->show_boxshadow) && $settings->show_boxshadow) ?  $settings->show_boxshadow : '';
		$box_shadow 	= '';

		if ($show_boxshadow)
		{
			$box_shadow .= (isset($settings->shadow_horizontal) && $settings->shadow_horizontal) ?  $settings->shadow_horizontal . 'px ' : '0 ';
			$box_shadow .= (isset($settings->shadow_vertical) && $settings->shadow_vertical) ?  $settings->shadow_vertical . 'px ' : '0 ';
			$box_shadow .= (isset($settings->shadow_blur) && $settings->shadow_blur) ?  $settings->shadow_blur . 'px ' : '0 ';
			$box_shadow .= (isset($settings->shadow_spread) && $settings->shadow_spread) ?  $settings->shadow_spread . 'px ' : '0 ';
			$box_shadow .= (isset($settings->shadow_color) && $settings->shadow_color) ?  $settings->shadow_color : 'rgba(0, 0, 0, .5)';
		}

		$settings->dummy_box_shadow = $box_shadow;
		$boxShadowStyle = $cssHelper->generateStyle('.sppb-tab-custom-content > div, .sppb-nav-custom a', $settings, ['dummy_box_shadow' => 'box-shadow'], false);
		$iconStyle = $cssHelper->generateStyle('.sppb-tab-icon', $settings, ['icon_fontsize' => 'font-size', 'icon_margin' => 'margin', 'icon_color' => 'color'], ['icon_margin' => false, 'icon_color' => false], ['icon_margin' => 'spacing']);
		$imageStyle = $cssHelper->generateStyle('.sppb-tab-image', $settings, ['image_height' => 'height', 'image_width' => 'width', 'image_margin' => 'margin'], ['image_margin' => false], ['image_margin' => 'spacing']);
		$customHoverStyle = $cssHelper->generateStyle('.sppb-nav-custom > li > a:hover, .sppb-nav-custom > li > a:focus', $settings, ['hover_tab_color' => 'color', 'hover_tab_border_width' => 'border-width', 'hover_tab_border_color' => 'border-color', 'hover_tab_bg' => 'background-color'], ['hover_tab_color' => false, 'hover_tab_border_color' => false, 'hover_tab_bg' => false, 'hover_tab_border_width' => false]);
		$customIconHoverStyle = $cssHelper->generateStyle('.sppb-nav-custom > li > a:hover  > .sppb-tab-icon,.sppb-nav-custom > li > a:focus > .sppb-tab-icon', $settings, ['icon_color_hover' => 'color'], false);
		$customIconActiveStyle = $cssHelper->generateStyle('.sppb-nav-custom > li.active > a > .sppb-tab-icon, .sppb-nav-custom > li.active > a:hover  > .sppb-tab-icon, .sppb-nav-custom > li.active > a:focus > .sppb-tab-icon', $settings, ['icon_color_active' => 'color'], false);

		if ($tab_style == "custom")
		{
			$customContentWidth = $cssHelper->generateStyle('.sppb-tab-content.sppb-tab-custom-content', $settings, ['content_width' => 'max-width'], '%');
		}

		$mediaQueries = [
			"xl" => "@media ( min-width: 1199.99px ) and ( max-width:1399.99px)",
			"lg" => "@media ( min-width: 991.99px ) and ( max-width: 1199.98px )",
			"md" => "@media ( min-width: 767.99px ) and ( max-width: 991.98px )",
			"sm" => "@media ( min-width: 575.99px ) and ( max-width: 767.98px )",
			"xs" => "@media ( max-width: 575.98px )",
		];

		$navGutter 	  = $settings->nav_gutter_original ?? $settings->nav_gutter ?? 0;
		$navJustified = $settings->nav_justified_original ?? $settings->nav_justified ?? false;
		$navWidth 	  = $settings->nav_width_original ?? $settings->nav_width ?? 30;

		$loopOutput = '';
		foreach ($mediaQueries as $size => $media)
		{

			$loopOutput .= "$media {";
			if (is_object($nav_position) && isset($nav_position->$size))
			{
				if ($nav_position->$size == "nav-left" || $nav_position->$size == "nav-right")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-tab-custom-content 
					{
						flex-basis: 0;
						flex-grow: 1;
					}";
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				 	{
						flex-direction: column !important;
					}";
				}

				if ($nav_position->$size == "nav-right")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position
				 	{
						flex-direction: row-reverse !important;
					}";
				}

				if ($nav_position->$size == "nav-top")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
					{
						flex-direction: row !important;
					}";
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
					{
						flex-direction: column !important;
					}";
				}

				if ($nav_position->$size == "nav-bottom")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
					{
						flex-direction: row !important;
					}";
					$loopOutput .= ".sppb-custom-tab.sppb-tab-nav-position 
					{
						flex-direction: column-reverse !important;
					}";
				}

				$loopOutput .= "$addon_id .sppb-tab-content {";

				$newGutter 	 = is_object($navGutter) ? (empty($navGutter->$size) ? 0 : $navGutter->$size) : $navGutter;
				$newNavWidth = is_object($navWidth) ? (empty($navWidth->$size) ? 30 : $navWidth->$size) : $navWidth;

				if ($nav_position->$size == "nav-top")
				{
					$loopOutput .= 'padding: ' . $newGutter . 'px 0 0 0 !important';
				}
				else if ($nav_position->$size == "nav-bottom")
				{
					$loopOutput .= 'padding: 0 0 ' . $newGutter . 'px 0 !important';
				}
				else if ($nav_position->$size == "nav-right")
				{
					$loopOutput .= 'padding: 0 ' . $newGutter . 'px 0 0 !important';
				}
				else
				{
					$loopOutput .= 'padding: 0 0 0 ' . $newGutter . 'px !important';
				}
				$loopOutput .= "}";

				$isNavJustified = is_object($navJustified) ? (empty($navJustified->$size) ? false : $navJustified->$size) : $navJustified;

				if (($nav_position->$size == "nav-top" || $nav_position->$size == "nav-bottom") && $isNavJustified)
				{
					$loopOutput .= "$addon_id .sppb-nav > li {flex: 1 1 auto !important;} $addon_id .sppb-nav {width: 100% !important;}";
				}

				if (($nav_position->$size == "nav-top" || $nav_position->$size == "nav-bottom") && !$isNavJustified)
				{
					$loopOutput .= "$addon_id .sppb-nav {width: fit-content !important;}";
				}

				if ($tab_style == "custom" && ($nav_position->$size == "nav-left" || $nav_position->$size == "nav-right"))
				{
					$loopOutput .= $addon_id . '.sppb-nav { width: ' . $newNavWidth . '% !important;}';
				}
			}
			else
			{
				if ($nav_position == "nav-left" || $nav_position == "nav-right")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-tab-custom-content 
					{
						flex-basis: 0;
						flex-grow: 1;
					}";
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				 	{
						flex-direction: column !important;
					}";
				}

				if ($nav_position == "nav-right")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position
				 	{
						flex-direction: row-reverse !important;
					}";
				}

				if ($nav_position == "nav-top")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
					 {
						flex-direction: row !important;
					}";
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
					{
						flex-direction: column !important;
					}";
				}

				if ($nav_position == "nav-bottom")
				{
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
					 {
						flex-direction: row !important;
					}";
					$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
					{
						flex-direction: column-reverse !important;
					}";
				}

				$loopOutput .= "$addon_id .sppb-tab-content {";


				$newGutter	 = is_object($navGutter) ? (empty($navGutter->$size) ? 0 : $navGutter->$size) : $navGutter;
				$newNavWidth = is_object($navWidth) ? (empty($navWidth->$size) ? 30 : $navWidth->$size) : $navWidth;

				if ($nav_position == "nav-top")
				{
					$loopOutput .= 'padding: ' . $newGutter . 'px 0 0 0 !important';
				}
				else if ($nav_position == "nav-bottom")
				{
					$loopOutput .= 'padding: 0 0 ' . $newGutter . 'px 0 !important';
				}
				else if ($nav_position == "nav-right")
				{
					$loopOutput .= 'padding: 0 ' . $newGutter . 'px 0 0 !important';
				}
				else
				{
					$loopOutput .= 'padding: 0 0 0 ' . $newGutter . 'px !important';
				}
				$loopOutput .= "}";

				$isNavJustified = is_object($navJustified) ? (empty($navJustified->$size) ? false : $navJustified->$size) : $navJustified;

				if (($nav_position == "nav-top" || $nav_position == "nav-bottom") && $isNavJustified)
				{
					$loopOutput .= "$addon_id .sppb-nav > li {flex: 1 1 auto !important;} $addon_id .sppb-nav {width: 100% !important;}";
				}

				if (($nav_position == "nav-top" || $nav_position == "nav-bottom") && !$isNavJustified)
				{
					$loopOutput .= "$addon_id .sppb-nav {width: fit-content !important;}";
				}

				if ($tab_style == "custom" && ($nav_position == "nav-left" || $nav_position == "nav-right"))
				{
					$loopOutput .= "$addon_id .sppb-nav { width: $newNavWidth% !important;}";
				}
			}
			$loopOutput .= "}";
		}

		// default device style
		if (is_object($nav_position))
		{
			if ($nav_position->xl == "nav-left" || $nav_position->xl == "nav-right")
			{
				$loopOutput .= ".sppb-custom-tab.sppb-tab-nav-position .sppb-tab-custom-content 
				{
					flex-basis: 0;
					flex-grow: 1;
				}";
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				 {
					flex-direction: column;
				}";
			}

			if ($nav_position->xl == "nav-right")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position
				 {
					flex-direction: row-reverse;
				}";
			}

			if ($nav_position == "nav-top" || $nav_position == "nav-bottom")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				 {
					flex-direction: row;
				}";
			}

			if ($nav_position->xl == "nav-top")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
				{
					flex-direction: column;
				}";
			}

			if ($nav_position->xl == "nav-bottom")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
				{
					flex-direction: column-reverse;
				}";
			}

			$loopOutput .= "$addon_id .sppb-tab-content {";

			$newGutter   = is_object($navGutter) ? (empty($navGutter->xl) ? 0 : $navGutter->xl) : $navGutter;
			$newNavWidth = is_object($navWidth) ? (empty($navWidth->xl) ? 30 : $navWidth->xl) : $navWidth;

			if ($nav_position->xl == "nav-top")
			{
				$loopOutput .= 'padding-top: ' . $newGutter . 'px';
			}
			else if ($nav_position->xl == "nav-bottom")
			{
				$loopOutput .= 'padding-bottom: ' . $newGutter . 'px';
			}
			else if ($nav_position->xl == "nav-right")
			{
				$loopOutput .= 'padding-right: ' . $newGutter . 'px';
			}
			else
			{
				$loopOutput .= 'padding-left: ' . $newGutter . 'px';
			}
			$loopOutput .= "}";

			$isNavJustified = is_object($navJustified) ? (empty($navJustified->xl) ? false : $navJustified->xl) : $navJustified;

			if (($nav_position->xl == "nav-top" || $nav_position->xl == "nav-bottom") && $isNavJustified)
			{
				$loopOutput .= "$addon_id .sppb-nav > li {flex: 1 1 auto;} $addon_id .sppb-nav {width: 100%;}";
			}


			if (($nav_position->xl == "nav-top" || $nav_position->xl == "nav-bottom") && !$isNavJustified)
			{
				$loopOutput .= "$addon_id .sppb-nav {width: fit-content;}";
			}

			if ($tab_style == "custom" && ($nav_position->xl == "nav-left" || $nav_position->xl == "nav-right"))
			{
				$loopOutput .= "$addon_id .sppb-nav { width: $newNavWidth%;}";
			}
		}
		else
		{
			if ($nav_position == "nav-left" || $nav_position == "nav-right")
			{
				$loopOutput .= ".sppb-custom-tab.sppb-tab-nav-position .sppb-tab-custom-content 
				{
					flex-basis: 0;
					flex-grow: 1;
				}";
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				{
					flex-direction: column;
				}";
			}

			if ($nav_position == "nav-right")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position
				 {
					flex-direction: row-reverse;
				}";
			}

			if ($nav_position == "nav-top" || $nav_position == "nav-bottom")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position .sppb-nav.sppb-nav-custom
				 {
					flex-direction: row;
				}";
			}

			if ($nav_position == "nav-top")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
				{
					flex-direction: column;
				}";
			}

			if ($nav_position == "nav-bottom")
			{
				$loopOutput .= "$addon_id .sppb-custom-tab.sppb-tab-nav-position 
				{
					flex-direction: column-reverse;
				}";
			}

			$loopOutput .= "$addon_id .sppb-tab-content {";


			$newGutter 	 = is_object($navGutter) ? (empty($navGutter->xl) ? 0 : $navGutter->xl) : $navGutter;
			$newNavWidth = is_object($navWidth) ? (empty($navWidth->xl) ? 30 : $navGutter->xl) : $navWidth;


			if ($nav_position == "nav-top")
			{
				$loopOutput .= 'padding-top: ' . $newGutter . 'px';
			}
			else if ($nav_position == "nav-bottom")
			{
				$loopOutput .= 'padding-bottom: ' . $newGutter . 'px';
			}
			else if ($nav_position == "nav-right")
			{
				$loopOutput .= 'padding-right: ' . $newGutter . 'px';
			}
			else
			{
				$loopOutput .= 'padding-left: ' . $newGutter . 'px';
			}
			$loopOutput .= "}";

			$isNavJustified = is_object($navJustified) ? (empty($navJustified->xl) ? false : $navJustified->xl) : $navJustified;

			if (($nav_position == "nav-top" || $nav_position == "nav-bottom") && $isNavJustified)
			{
				$loopOutput .= "$addon_id .sppb-nav > li {flex: 1 1 auto !important;} $addon_id .sppb-nav {width: 100%;}";
			}

			if (($nav_position == "nav-top" || $nav_position == "nav-bottom") && !$isNavJustified)
			{
				$loopOutput .= "$addon_id .sppb-nav {width: fit-content;}";
			}

			if ($tab_style == "custom" && ($nav_position == "nav-left" || $nav_position == "nav-right"))
			{
				$loopOutput .= "$addon_id .sppb-nav { width: $newNavWidth%;}";
			}
		}

		$imgOrIconStyles = '';
		$imgOrIconStyles .= $cssHelper->generateStyle('.sppb-nav > li > a', $settings, ['nav_text_align_original' => 'text-align'], false);
		$transformCss = $cssHelper->generateTransformStyle('.sppb-addon-tab', $settings, 'transform');


		if ($tab_style === 'custom')
		{
			$css .= $imgOrIconStyles;
			$css .= $navStyle;
			$css .= $navFontStyle;
			$css .= $contentStyle;
			$css .= $boxShadowStyle;
			$css .= $customHoverStyle;
			$css .= $contentFontStyle;
			$css .= $customNavPadding;
			$css .= $customIconHoverStyle;
			$css .= $customIconActiveStyle;
			$css .= $customContentWidth;
			$css .= $loopOutput;
		}

		$css .= $tabStyle;
		$css .= $iconStyle;
		$css .= $transformCss;
		$css .= $imageStyle;
		return $css;
	}

	/**
	 * Generate the lodash template string for the frontend editor.
	 *
	 * @return 	string 	The lodash template string.
	 * @since 	1.0.0
	 */
	public static function getTemplate()
	{
		$lodash = new Lodash('#sppb-addon-{{ data.id }}');
		$output = '
		<style type="text/css">
            <# 

                let box_shadow = ""; 
                if (data.show_boxshadow) {
                    box_shadow += (!_.isEmpty(data.shadow_horizontal) && data.shadow_horizontal) ?  data.shadow_horizontal + \'px \' : "0 ";
                    box_shadow += (!_.isEmpty(data.shadow_vertical) && data.shadow_vertical) ?  data.shadow_vertical + \'px \' : "0 ";
                    box_shadow += (!_.isEmpty(data.shadow_blur) && data.shadow_blur) ?  data.shadow_blur + \'px \' : "0 ";
                    box_shadow += (!_.isEmpty(data.shadow_spread) && data.shadow_spread) ?  data.shadow_spread + \'px \' : "0 ";
                    box_shadow += (!_.isEmpty(data.shadow_color) && data.shadow_color) ?  data.shadow_color : "rgba(0, 0, 0, .5)";
                }

				const mediaQueries = {
					lg: "@media ( min-width: 991.99px ) and ( max-width: 1199.98px )",
					md: "@media ( min-width: 767.99px ) and ( max-width: 991.98px )",
					sm: "@media ( min-width: 575.99px ) and ( max-width: 767.98px )",
					xs: "@media ( max-width: 575.98px )",
				};
				
				let navPosition = data?.nav_position  || "nav-top";
            #>';


		// title
		$titleTypographyFallbacks = [
			'font'           => 'data.title_font_family',
			'size'           => 'data.title_fontsize',
			'line_height'    => 'data.title_lineheight',
			'letter_spacing' => 'data.title_letterspace',
			'uppercase'      => 'data.title_font_style?.uppercase',
			'italic'         => 'data.title_font_style?.italic',
			'underline'      => 'data.title_font_style?.underline',
			'weight'         => 'data.title_font_style?.weight'
		];
		$output .= $lodash->unit('margin-top', '.sppb-addon-title', 'data.title_margin_top', 'px');
		$output .= $lodash->unit('margin-bottom', '.sppb-addon-title', 'data.title_margin_bottom', 'px');
		$output .= $lodash->color('color', '.sppb-addon-title', 'data.title_text_color');
		$output .= $lodash->typography('.sppb-addon-title', 'data.title_typography', $titleTypographyFallbacks);

		// pills
		$output .= '<# if (data.style == "pills") { #>';
		$output .= $lodash->color('color', '.sppb-nav-pills > li.active > a,.sppb-nav-pills > li.active > a:hover,.sppb-nav-pills > li.active > a:focus', 'data.active_tab_color');
		$output .= $lodash->color('background-color', '.sppb-nav-pills > li.active > a,.sppb-nav-pills > li.active > a:hover,.sppb-nav-pills > li.active > a:focus', 'data.active_tab_bg');
		$output .= '<# } #>';

		// lines
		$output .= '<# if (data.style == "lines") { #>';
		$output .= $lodash->color('color', '.sppb-nav-lines > li.active > a,.sppb-nav-lines > li.active > a:hover,.sppb-nav-lines > li.active > a:focus', 'data.active_tab_color');
		$output .= $lodash->unit('border-bottom-color', '.sppb-nav-lines > li.active > a,.sppb-nav-lines > li.active > a:hover,.sppb-nav-lines > li.active > a:focus', 'data.active_tab_bg');
		$output .= '<# } #>';

		// custom
		$output .= '<# if (data.style == "custom") { #>';
		$output .= $lodash->color('color', '.sppb-nav-custom > li.active > a,.sppb-nav-custom > li.active > a:hover,.sppb-nav-custom > li.active > a:focus', 'data.active_tab_color');
		$output .= $lodash->color('background-color', '.sppb-nav-custom > li.active > a,.sppb-nav-custom > li.active > a:hover,.sppb-nav-custom > li.active > a:focus', 'data.active_tab_bg');
		$output .= $lodash->unit('border-width', '.sppb-nav-custom > li.active > a,.sppb-nav-custom > li.active > a:hover,.sppb-nav-custom > li.active > a:focus', 'data.active_tab_border_width');
		$output .= $lodash->unit('border-color', '.sppb-nav-custom > li.active > a,.sppb-nav-custom > li.active > a:hover,.sppb-nav-custom > li.active > a:focus', 'data.active_tab_border_width');


		// hover
		$output .= $lodash->color('color', '.sppb-nav-custom > li > a:hover,.sppb-nav-custom > li > a:focus', 'data.hover_tab_color');
		$output .= $lodash->color('background-color', '.sppb-nav-custom > li > a:hover,.sppb-nav-custom > li > a:focus', 'data.hover_tab_bg');
		$output .= $lodash->unit('border-width', '.sppb-nav-custom > li > a:hover,.sppb-nav-custom > li > a:focus', 'data.hover_tab_border_width');
		$output .= $lodash->unit('border-color', '.sppb-nav-custom > li > a:hover,.sppb-nav-custom > li > a:focus', 'data.hover_tab_border_color');
		// icon
		$output .= $lodash->color('color', '.sppb-nav-custom > li > a:hover > .sppb-tab-icon, .sppb-nav-custom > li > a:focus > .sppb-tab-icon', 'data.icon_color_hover');
		$output .= $lodash->color('color', '.sppb-nav-custom > li.active > a > .sppb-tab-icon,.sppb-nav-custom > li.active > a:hover > .sppb-tab-icon,.sppb-nav-custom > li.active > a:focus > .sppb-tab-icon', 'data.icon_color_active');

		$output .= $lodash->spacing('padding', '.sppb-nav-custom li', 'data.nav_margin');
		$output .= $lodash->spacing('padding', '.sppb-nav-custom li a', 'data.nav_padding');

		$output .= $lodash->spacing('margin', '.sppb-tab-icon', 'data.icon_margin');
		$output .= $lodash->color('color', '.sppb-tab-icon', 'data.icon_color');
		$output .= $lodash->unit('font-size', '.sppb-tab-icon', 'data.icon_fontsize', 'px');

		$output .= '#sppb-addon-{{ data.id }} .sppb-tab-custom-content > div {border-style: solid;}';
		$output .= $lodash->color('background-color', '.sppb-tab-custom-content > div', 'data.content_backround');
		$output .= $lodash->color('color', '.sppb-tab-custom-content > div', 'data.content_color');
		$output .= $lodash->unit('border-color', '.sppb-tab-custom-content > div', 'data.content_border_color');
		$output .= $lodash->unit('border-radius', '.sppb-tab-custom-content > div', 'data.content_border_radius');
		$output .= $lodash->unit('border', '.sppb-tab-custom-content > div', 'data.content_border');
		$output .= $lodash->spacing('padding', '.sppb-tab-custom-content > div', 'data.content_padding');
		$output .= $lodash->spacing('margin', '.sppb-tab-custom-content > div', 'data.content_margin');

		$output .= '<# } #>';

		// pills, lines & custom
		$output .= '<# if (data.style == "pills" || data.style == "lines" || data.style == "custom") { #>';
		$output .= $lodash->color('color', '.sppb-nav > li > a', 'data.nav_color');
		$output .= $lodash->color('color', '.sppb-nav > li:hover > a', 'data.hover_tab_color');
		$output .= $lodash->color('color', '.sppb-nav > li.active > a', 'data.active_tab_color');

		$output .= $lodash->color('background-color', '.sppb-tab-pane', 'data.content_backround');
		$output .= $lodash->color('color', '.sppb-tab-pane', 'data.content_color');
		$output .= $lodash->unit('border-color', '.sppb-tab-pane', 'data.content_border_color', '', false);
		$output .= '<# } #>';

		// pills & custom
		$output .= '<# if (data.style == "pills" || data.style == "custom") { #>';
		$output .= $lodash->color('background-color', '.sppb-nav > li > a', 'data.nav_bg_color');
		$output .= $lodash->color('background-color', '.sppb-nav > li:hover > a', 'data.hover_tab_bg');
		$output .= $lodash->color('background-color', '.sppb-nav > li.active > a', 'data.active_tab_bg');

		$output .= $lodash->unit('border-radius', '.sppb-nav > li > a', 'data.nav_border_radius', 'px');
		$output .= '<# } #>';

		// lines only
		$output .= '<# if (data.style == "lines") { #>';
		$output .= $lodash->unit('border-bottom-color', '.sppb-nav-lines', 'data.nav_border_color', '', false);
		$output .= $lodash->unit('border-bottom-color', '.sppb-nav > li:hover > a', 'data.hover_tab_border_color', '', false);
		$output .= $lodash->unit('border-bottom-color', '.sppb-nav > li.active > a', 'data.active_tab_border_color', '', false);
		$output .= '<# } #>';

		// Custom
		$output .= '<# if (data.style == "custom") { #>';
		$output .= '<# if (!_.isEmpty(data.nav_border)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li > a {border-style: solid;}';
		$output .= $lodash->unit('border-width', '.sppb-nav > li > a', 'data.nav_border');
		$output .= $lodash->unit('border-color', '.sppb-nav > li > a', 'data.nav_border_color', '', false);
		$output .= $lodash->unit('border-color', '.sppb-nav > li:hover > a', 'data.hover_tab_border_color', '', false);
		$output .= $lodash->unit('border-color', '.sppb-nav > li.active > a', 'data.active_tab_border_color', '', false);
		$output .= '<# } #>';

		$output .= $lodash->unit("max-width", ".sppb-tab-content.sppb-tab-custom-content", "data.content_width", '%');

		$output .= '<# Object.keys(mediaQueries).forEach(size => { #>';
		$output .= '<# if(_.isObject(navPosition)) { #>';
		$output .= '{{ mediaQueries[size] }} {
						#sppb-addon-{{data.id}} .sppb-tab-content {';
		$output .= '<# if (navPosition[size] === "nav-top") { #>';
		$output .= 'padding: {{ data.nav_gutter?.[size] || 0 }}px 0 0 0 !important;';

		$output .= '<# } else if (navPosition[size] === "nav-right") { #>';
		$output .= 'padding: 0 {{ data.nav_gutter?.[size] || 0 }}px 0 0 !important;';
		$output .= '<# } else if (navPosition[size] === "nav-bottom") { #>';
		$output .= 'padding: 0 0 {{ data.nav_gutter?.[size] || 0 }}px 0 !important;';
		$output .= '<# } else { #>';
		$output .= 'padding: 0 0 0 {{ data.nav_gutter?.[size] || 0 }}px !important; <# } #>  }';

		$output .= '<# if (navPosition[size] === "nav-top" && (_.isObject(data?.nav_justified) ? data?.nav_justified[size] : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100% !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-bottom" && (_.isObject(data?.nav_justified) ? data?.nav_justified[size] : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100% !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-top" && (_.isObject(data?.nav_justified) ? !data?.nav_justified[size] : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-bottom" && (_.isObject(data?.nav_justified) ? !data?.nav_justified[size] : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-left" && data?.style === "custom") { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width[size] : data.nav_width }}% !important;}';
		$output .= '<# } #>';

		$output .= '<# if (navPosition[size] === "nav-right" && data?.style === "custom") { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width[size] : data.nav_width }}% !important;}';
		$output .= '<# }  #> }';

		$output .= '<# } else { #>';

		$output .= '{{ mediaQueries[size] }} {
			#sppb-addon-{{data.id}} .sppb-tab-content {';
		$output .= '<# if (navPosition === "nav-top") { #>';
		$output .= 'padding: {{ data.nav_gutter }}px 0 0 0 !important;';

		$output .= '<# } else if (navPosition === "nav-right") { #>';
		$output .= 'padding: 0 {{ data.nav_gutter }}px 0 0 !important;';
		$output .= '<# } else if (navPosition === "nav-bottom") { #>';
		$output .= 'padding: 0 0 {{ data.nav_gutter }}px 0 !important;';
		$output .= '<# } else { #>';
		$output .= 'padding: 0 0 0 {{ data.nav_gutter }}px !important; } }';

		$output .= '<# if (navPosition[size] === "nav-top" && (_.isObject(data?.nav_justified) ? data?.nav_justified[size] : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100% !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-bottom" && (_.isObject(data?.nav_justified) ? data?.nav_justified[size] : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100% !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-top" && (_.isObject(data?.nav_justified) ? !data?.nav_justified[size] : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition[size] === "nav-bottom" && (_.isObject(data?.nav_justified) ? !data?.nav_justified[size] : !data?.nav_justified)) { #>';
		$output .= ' #sppb-addon-{{ data.id }} .sppb-nav {width: fit-content !important;}';
		$output .= '<# }  #>';

		$output .= '<# if (data?.style === "custom" && (navPosition[size] === "nav-left" || navPosition[size] === "nav-right")) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width[size] : data.nav_width }}% !important;}';
		$output .= '<# } } #>';

		$output .= '<# } }) #>';
		$output .= '<# } #>';

		// for default device
		$output .= '<# if(_.isObject(navPosition)) { #>';
		$output .= '#sppb-addon-{{data.id}} .sppb-tab-content {';
		$output .= '<# if (navPosition?.xl === "nav-top") { #>';
		$output .= 'padding: {{ data.nav_gutter?.xl || 0 }}px 0 0 0;';
		$output .= '<# } else if (navPosition?.xl === "nav-right") { #>';
		$output .= 'padding: 0 {{ data.nav_gutter?.xl || 0 }}px 0 0;';
		$output .= '<# } else if (navPosition?.xl === "nav-bottom") { #>';
		$output .= 'padding: 0 0 {{ data.nav_gutter?.xl || 0 }}px 0;';
		$output .= '<# } else if(navPosition?.xl === "nav-left") { #>';
		$output .= 'padding: 0 0 0 {{ data.nav_gutter?.xl || 0 }}px; <# } #> }';

		$output .= '<# if (navPosition?.xl === "nav-top" && (_.isObject(data?.nav_justified) ? data?.nav_justified?.xl : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100%;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-bottom" && (_.isObject(data?.nav_justified) ? data?.nav_justified?.xl : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100%;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-top" && (_.isObject(data?.nav_justified) ? !data?.nav_justified?.xl : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-bottom" && (_.isObject(data?.nav_justified) ? !data?.nav_justified?.xl : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-left" && data?.style === "custom") { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width?.xl : data.nav_width }}%;}';
		$output .= '<# } #>';

		$output .= '<# if (navPosition?.xl === "nav-right" && data?.style === "custom") { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width?.xl : data.nav_width }}%;}';
		$output .= '<# }  #> }';

		$output .= '<# } else { #>';

		$output .= '#sppb-addon-{{data.id}} .sppb-tab-content {';

		$output .= '<# if (navPosition === "nav-top") { #>';
		$output .= 'padding-top: {{ data.nav_gutter }}px;';

		$output .= '<# } else if (navPosition === "nav-right") { #>';
		$output .= 'padding-right: {{ data.nav_gutter }}px;';
		$output .= '<# } else if (navPosition === "nav-bottom") { #>';
		$output .= 'padding-bottom: {{ data.nav_gutter }}px;';
		$output .= '<# } else { #>';
		$output .= 'padding-left: {{ data.nav_gutter }}px; }';

		$output .= '<# if (navPosition?.xl === "nav-top" && (_.isObject(data?.nav_justified) ? data?.nav_justified?.xl : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100%;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-bottom" && (_.isObject(data?.nav_justified) ? data?.nav_justified?.xl : data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav > li {flex: 1 1 auto;} #sppb-addon-{{ data.id }} .sppb-nav {width: 100%;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-top" && (_.isObject(data?.nav_justified) ? !data?.nav_justified?.xl : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content;}';
		$output .= '<# }  #>';

		$output .= '<# if (navPosition?.xl === "nav-bottom" && (_.isObject(data?.nav_justified) ? !data?.nav_justified?.xl : !data?.nav_justified)) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav {width: fit-content;}';
		$output .= '<# }  #>';

		$output .= '<# if (data?.style === "custom" && (navPosition?.xl === "nav-left" || navPosition?.xl === "nav-right")) { #>';
		$output .= '#sppb-addon-{{ data.id }} .sppb-nav { width: {{ _.isObject(data.nav_width) ? data.nav_width?.xl : data.nav_width }}%;}';
		$output .= '<# } } #>';

		$output .= '<# } #>';

		// Nav
		$navItemTypographyFallbacks = [
			'font'           => 'data.nav_font_family',
			'size'           => 'data.nav_fontsize',
			'line_height'    => 'data.nav_lineheight',
			'uppercase'      => 'data.nav_font_style?.uppercase',
			'italic'         => 'data.nav_font_style?.italic',
			'underline'      => 'data.nav_font_style?.underline',
			'weight'         => 'data.nav_font_style?.weight'
		];
		$output .= $lodash->spacing('padding', '.sppb-nav > li > a', 'data.nav_padding');
		$output .= $lodash->spacing('padding', '.sppb-nav > li', 'data.nav_padding');
		$output .= $lodash->spacing('margin', '.sppb-nav > li > a', 'data.nav_margin');
		$output .= $lodash->spacing('margin', '.sppb-nav > li', 'data.nav_margin');
		// $output .= $lodash->flexAlignment('.sppb-nav > li > a', 'data.nav_text_align');
		$output .= $lodash->typography('.sppb-nav > li > a', 'data.nav_typography', $navItemTypographyFallbacks);



		// Media
		$output .= $lodash->color('color', '.sppb-nav > li > a .sppb-tab-icon', 'data.icon_color');
		$output .= $lodash->color('color', '.sppb-nav > li:hover > a .sppb-tab-icon', 'data.icon_color_hover');
		$output .= $lodash->color('color', '.sppb-nav > li.active > a .sppb-tab-icon', 'data.icon_color_active');

		$output .= $lodash->unit('font-size', '.sppb-tab-icon', 'data.icon_fontsize', 'px');
		$output .= $lodash->spacing('margin', '.sppb-tab-icon', 'data.icon_margin');

		$output .= $lodash->unit('width', '.sppb-tab-image', 'data.image_width', 'px');
		$output .= $lodash->unit('height', '.sppb-tab-image', 'data.image_height', 'px');
		$output .= $lodash->spacing('margin', '.sppb-tab-image', 'data.image_margin');

		$output .= $lodash->spacing('margin', '.sppb-tab-image', 'data.image_margin');


		// Content
		$contentTypographyFallbacks = [
			'font'           => 'data.content_font_family',
			'size'           => 'data.content_fontsize',
			'line_height'    => 'data.content_lineheight',
			'uppercase'      => 'data.content_font_style?.uppercase',
			'italic'         => 'data.content_font_style?.italic',
			'underline'      => 'data.content_font_style?.underline',
			'weight'         => 'data.content_font_style?.weight'
		];
		$output .= $lodash->typography('.sppb-tab-content', 'data.content_typography', $contentTypographyFallbacks);

		$output .= $lodash->spacing('padding', '.sppb-tab-pane', 'data.content_padding');
		$output .= $lodash->spacing('margin', '.sppb-tab-pane', 'data.content_margin');
		$output .= $lodash->unit('border-radius', '.sppb-tab-pane', 'data.content_border_radius', 'px');

		// box shadow
		$output .= '<# if (data.style == "custom") { #>';
		$output .= $lodash->boxShadow('.sppb-nav > li > a', 'box_shadow');
		$output .= $lodash->boxShadow('.sppb-tab-pane', 'box_shadow');
		$output .= '<# } #>';
		$output .= $lodash->generateTransformCss('', 'data.transform');
		$output .= '
		</style>
		';

		return $output;
	}
}

Copyright © 2019 by b0y-101