File: /home/prospack/public_html/wp-content/plugins/xpro-elementor-addons/widgets/pricing/pricing.php
<?php
namespace XproElementorAddons\Widget;
use Elementor\Controls_Manager;
use Elementor\Group_Control_Background;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Image_Size;
use Elementor\Group_Control_Typography;
use Elementor\Repeater;
use Elementor\Utils;
use Elementor\Widget_Base;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
/**
* Xpro Elementor Addons
*
* Elementor widget.
*
* @since 1.0.0
*/
class Pricing extends Widget_Base {
private static function get_currency_symbol( $symbol_name ) {
$symbols = array(
'dollar' => '$',
'baht' => '฿',
'bdt' => '৳',
'euro' => '€',
'franc' => '₣',
'guilder' => 'ƒ',
'indian_rupee' => '₹',
'pound' => '£',
'peso' => '₱',
'peseta' => '₧',
'lira' => '₤',
'ruble' => '₽',
'shekel' => '₪',
'rupee' => '₨',
'real' => 'R$',
'krona' => 'kr',
'won' => '₩',
'yen' => '¥'
);
return isset( $symbols[ $symbol_name ] ) ? $symbols[ $symbol_name ] : '';
}
/**
* Get widget name.
*
* Retrieve image widget name.
*
* @return string Widget name.
* @since 1.0.0
* @access public
*
*/
public function get_name() {
return 'xpro-pricing';
}
/**
* Get widget title.
*
* Retrieve image widget title.
*
* @return string Widget title.
* @since 1.0.0
* @access public
*
*/
public function get_title() {
return __( 'Pricing', 'xpro-elementor-addons' );
}
/**
* Get widget icon.
*
* Retrieve image widget icon.
*
* @return string Widget icon.
* @since 1.0.0
* @access public
*
*/
public function get_icon() {
return 'xi-pricing xpro-widget-label';
}
/**
* Get widget categories.
*
* Retrieve the list of categories the image widget belongs to.
*
* Used to determine where to display the widget in the editor.
*
* @return array Widget categories.
* @since 1.0.0
* @access public
*
*/
public function get_categories() {
return array( 'xpro-widgets' );
}
/**
* Get widget keywords.
*
* Retrieve the list of keywords the widget belongs to.
*
* @return array Widget keywords.
* @since 1.0.0
* @access public
*
*/
public function get_keywords() {
return array( 'pricing', 'price', 'card', 'table' );
}
/**
* Register Pricing widget controls.
*
* Adds different input fields to allow the user to change and customize the widget settings.
*
* @since 1.0.0
* @access protected
*/
protected function register_controls() {
$this->start_controls_section(
'section_header',
array(
'label' => __( 'Header', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'title',
array(
'label' => __( 'Title', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => __( 'Basic', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
)
);
$this->add_control(
'media_type',
array(
'label' => __( 'Media Type', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'label_block' => false,
'options' => array(
'icon' => array(
'title' => __( 'Icon', 'xpro-elementor-addons' ),
'icon' => 'eicon-star-o',
),
'image' => array(
'title' => __( 'Image', 'xpro-elementor-addons' ),
'icon' => 'eicon-image',
),
),
'default' => 'icon',
'toggle' => false,
)
);
$this->add_control(
'icon',
array(
'label' => __( 'Icon', 'xpro-elementor-addons' ),
'type' => Controls_Manager::ICONS,
'default' => array(
'value' => 'far fa-clone',
'library' => 'regular',
),
'condition' => array(
'media_type' => 'icon',
),
)
);
$this->add_control(
'image',
array(
'label' => __( 'Image', 'xpro-elementor-addons' ),
'type' => Controls_Manager::MEDIA,
'default' => array(
'url' => Utils::get_placeholder_image_src(),
),
'condition' => array(
'media_type' => 'image',
),
'dynamic' => array(
'active' => true,
),
)
);
$this->add_group_control(
Group_Control_Image_Size::get_type(),
array(
'name' => 'media_thumbnail',
'default' => 'full',
'separator' => 'none',
'exclude' => array(
'custom',
),
'condition' => array(
'media_type' => 'image',
),
)
);
$this->add_control(
'media_position',
array(
'label' => __( 'Position', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'before_header',
'options' => array(
'after_header' => __( 'After Title', 'xpro-elementor-addons' ),
'before_header' => __( 'Before Title', 'xpro-elementor-addons' ),
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_price',
array(
'label' => __( 'Price', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'currency',
array(
'label' => __( 'Currency', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'label_block' => false,
'options' => array(
'' => __( 'None', 'xpro-elementor-addons' ),
'dollar' => '$ ' . _x( 'Dollar', 'Currency Symbol', 'xpro-elementor-addons' ),
'baht' => '฿ ' . _x( 'Baht', 'Currency Symbol', 'xpro-elementor-addons' ),
'bdt' => '৳ ' . _x( 'BD Taka', 'Currency Symbol', 'xpro-elementor-addons' ),
'euro' => '€ ' . _x( 'Euro', 'Currency Symbol', 'xpro-elementor-addons' ),
'franc' => '₣ ' . _x( 'Franc', 'Currency Symbol', 'xpro-elementor-addons' ),
'guilder' => 'ƒ ' . _x( 'Guilder', 'Currency Symbol', 'xpro-elementor-addons' ),
'krona' => 'kr ' . _x( 'Krona', 'Currency Symbol', 'xpro-elementor-addons' ),
'lira' => '₤ ' . _x( 'Lira', 'Currency Symbol', 'xpro-elementor-addons' ),
'peseta' => '₧ ' . _x( 'Peseta', 'Currency Symbol', 'xpro-elementor-addons' ),
'peso' => '₱ ' . _x( 'Peso', 'Currency Symbol', 'xpro-elementor-addons' ),
'pound' => '£ ' . _x( 'Pound Sterling', 'Currency Symbol', 'xpro-elementor-addons' ),
'real' => 'R$ ' . _x( 'Real', 'Currency Symbol', 'xpro-elementor-addons' ),
'ruble' => '₽ ' . _x( 'Ruble', 'Currency Symbol', 'xpro-elementor-addons' ),
'rupee' => '₨ ' . _x( 'Rupee', 'Currency Symbol', 'xpro-elementor-addons' ),
'indian_rupee' => '₹ ' . _x( 'Rupee (Indian)', 'Currency Symbol', 'xpro-elementor-addons' ),
'shekel' => '₪ ' . _x( 'Shekel', 'Currency Symbol', 'xpro-elementor-addons' ),
'won' => '₩ ' . _x( 'Won', 'Currency Symbol', 'xpro-elementor-addons' ),
'yen' => '¥ ' . _x( 'Yen/Yuan', 'Currency Symbol', 'xpro-elementor-addons' ),
'custom' => __( 'Custom', 'xpro-elementor-addons' ),
),
'default' => 'dollar',
)
);
$this->add_control(
'currency_custom',
array(
'label' => __( 'Custom Symbol', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'condition' => array(
'currency' => 'custom',
),
)
);
$this->add_control(
'price',
array(
'label' => __( 'Price', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'default' => '9.99',
'dynamic' => array(
'active' => true,
),
)
);
$this->add_control(
'period',
array(
'label' => __( 'Period', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'Per Month', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
)
);
$this->add_control(
'price_position',
array(
'label' => __( 'Position', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'before_features',
'options' => array(
'before_features' => __( 'Before Features', 'xpro-elementor-addons' ),
'after_features' => __( 'After Features', 'xpro-elementor-addons' ),
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_features',
array(
'label' => __( 'Features', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'show_feature',
array(
'label' => __( 'Show', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Show', 'xpro-elementor-addons' ),
'label_off' => __( 'Hide', 'xpro-elementor-addons' ),
'return_value' => 'yes',
'default' => 'yes',
)
);
$this->add_control(
'features_title',
array(
'label' => __( 'Title', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'Features', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
'condition' => array(
'show_feature' => 'yes',
),
)
);
$repeater = new Repeater();
$repeater->add_control(
'icon',
array(
'label' => __( 'Icon', 'xpro-elementor-addons' ),
'type' => Controls_Manager::ICONS,
'default' => array(
'value' => 'fas fa-check',
'library' => 'fa-solid',
),
'recommended' => array(
'fa-solid' => array(
'check',
'check-circle',
'times',
'times-circle',
),
),
)
);
$repeater->add_control(
'title_text',
array(
'label' => __( 'Title', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'placeholder' => __( 'Type list item content.', 'xpro-elementor-addons' ),
'label_block' => true,
'dynamic' => array(
'active' => true,
),
)
);
$repeater->add_control(
'tooltip_text',
array(
'label' => __( 'Tooltip Text', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXTAREA,
'rows' => 3,
'placeholder' => __( 'Type tooltip text here.', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
)
);
$repeater->add_control(
'status',
array(
'label' => __( 'Status', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'active',
'options' => array(
'active' => __( 'Active', 'xpro-elementor-addons' ),
'inactive' => __( 'Inactive', 'xpro-elementor-addons' ),
),
)
);
$this->add_control(
'feature_items',
array(
'type' => Controls_Manager::REPEATER,
'fields' => $repeater->get_controls(),
'show_label' => false,
'title_field' => sprintf(
/* translators: %s: Title */
__( 'Item: %1$s', 'xpro-elementor-addons' ),
'{{title_text}}'
),
'render_type' => 'template',
'default' => array(
array(
'icon' => array(
'value' => 'fas fa-check',
'library' => 'fa-solid',
),
'title_text' => __( 'Feature List 1', 'xpro-elementor-addons' ),
'status' => 'active',
),
array(
'icon' => array(
'value' => 'fas fa-check',
'library' => 'fa-solid',
),
'title_text' => __( 'Feature List 2', 'xpro-elementor-addons' ),
'tooltip_text' => __( 'Tooltip Text Here', 'xpro-elementor-addons' ),
'status' => 'active',
),
array(
'icon' => array(
'value' => 'fas fa-times',
'library' => 'fa-solid',
),
'title_text' => __( 'Feature List 3', 'xpro-elementor-addons' ),
'status' => 'inactive',
),
array(
'icon' => array(
'value' => 'fas fa-times',
'library' => 'fa-solid',
),
'title_text' => __( 'Feature List 4', 'xpro-elementor-addons' ),
'status' => 'inactive',
),
),
'condition' => array(
'show_feature' => 'yes',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_description',
array(
'label' => __( 'Description', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'item_description',
array(
'label' => '',
'type' => Controls_Manager::WYSIWYG,
'default' => __( 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'description_position',
array(
'label' => __( 'Position', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'before_features',
'options' => array(
'before_features' => __( 'Before Features', 'xpro-elementor-addons' ),
'after_features' => __( 'After Features', 'xpro-elementor-addons' ),
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_button',
array(
'label' => __( 'Button', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'button_title',
array(
'label' => __( 'Title', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => __( 'Get Started', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
)
);
$this->add_control(
'button_link',
array(
'label' => __( 'Link', 'xpro-elementor-addons' ),
'type' => Controls_Manager::URL,
'label_block' => true,
'placeholder' => 'https://yoursite.com/',
'default' => array(
'url' => '#',
),
'dynamic' => array(
'active' => true,
),
)
);
$this->add_control(
'button_position',
array(
'label' => __( 'Position', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'after_features',
'options' => array(
'before_features' => __( 'Before Features', 'xpro-elementor-addons' ),
'after_features' => __( 'After Features', 'xpro-elementor-addons' ),
),
)
);
$this->add_control(
'button_css_id',
array(
'label' => __( 'Button ID', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'dynamic' => array(
'active' => true,
),
'placeholder' => 'myID',
'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'onclick_event',
array(
'label' => esc_html__( 'onClick Event', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'placeholder' => 'myFunction()',
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_badge',
array(
'label' => __( 'Badge', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'show_badge',
array(
'label' => __( 'Show', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Show', 'xpro-elementor-addons' ),
'label_off' => __( 'Hide', 'xpro-elementor-addons' ),
'return_value' => 'yes',
'default' => 'yes',
)
);
$this->add_control(
'badge_text',
array(
'label' => __( 'Text', 'xpro-elementor-addons' ),
'type' => Controls_Manager::TEXT,
'label_block' => false,
'default' => __( 'Premium', 'xpro-elementor-addons' ),
'dynamic' => array(
'active' => true,
),
'condition' => array(
'show_badge' => 'yes',
),
)
);
$this->end_controls_section();
//Styling
$this->start_controls_section(
'section_style_general',
array(
'label' => __( 'General', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_responsive_control(
'align',
array(
'label' => __( 'Alignment', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'options' => array(
'left' => array(
'title' => __( 'Left', 'xpro-elementor-addons' ),
'icon' => 'eicon-h-align-left',
),
'center' => array(
'title' => __( 'Center', 'xpro-elementor-addons' ),
'icon' => 'eicon-h-align-center',
),
'right' => array(
'title' => __( 'Right', 'xpro-elementor-addons' ),
'icon' => 'eicon-h-align-right',
),
),
'prefix_class' => 'xpro-pricing-align-',
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item' => 'text-align: {{VALUE}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_style_header',
array(
'label' => __( 'Header', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'header_title_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-title',
)
);
$this->add_control(
'header_title_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-title' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Background::get_type(),
array(
'name' => 'header_title_background',
'label' => __( 'Background', 'xpro-elementor-addons' ),
'types' => array( 'classic', 'gradient' ),
'selector' => '{{WRAPPER}} .xpro-pricing-title',
)
);
$this->add_group_control(
Group_Control_Border::get_type(),
array(
'name' => 'header_title_border',
'label' => __( 'Border', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-title',
)
);
$this->add_control(
'header_title_display',
array(
'label' => __( 'Display', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'default' => 'block',
'options' => array(
'block' => array(
'title' => __( 'Block', 'xpro-elementor-addons' ),
'icon' => 'eicon-menu-bar',
),
'inline-block' => array(
'title' => __( 'Inline', 'xpro-elementor-addons' ),
'icon' => 'eicon-ellipsis-h',
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-title' => 'display: {{VALUE}};',
),
)
);
$this->add_responsive_control(
'header_title_padding',
array(
'label' => __( 'Padding', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-title' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'header_title_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_control(
'header_media',
array(
'label' => __( 'Media', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'header_media_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'condition' => array(
'media_type' => 'icon',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-icon > i' => 'color: {{VALUE}}',
'{{WRAPPER}} .xpro-pricing-icon > svg' => 'fill: {{VALUE}}',
),
)
);
$this->add_responsive_control(
'header_media_size',
array(
'label' => __( 'Size', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 1000,
'step' => 1,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'unit' => 'px',
'size' => 40,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-icon > i' => 'font-size: {{SIZE}}{{UNIT}};',
'{{WRAPPER}} .xpro-pricing-icon > svg' => 'width: {{SIZE}}{{UNIT}};',
'{{WRAPPER}} .xpro-pricing-media img' => 'width: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'image_height',
array(
'label' => __( 'Height', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'default' => array(
'unit' => 'px',
),
'tablet_default' => array(
'unit' => 'px',
),
'mobile_default' => array(
'unit' => 'px',
),
'size_units' => array( 'px', 'vh' ),
'range' => array(
'px' => array(
'min' => 1,
'max' => 500,
),
'vh' => array(
'min' => 1,
'max' => 100,
),
),
'condition' => array(
'media_type' => 'image',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-media img' => 'height: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'object-fit',
array(
'label' => __( 'Object Fit', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'options' => array(
'' => __( 'Default', 'xpro-elementor-addons' ),
'fill' => __( 'Fill', 'xpro-elementor-addons' ),
'cover' => __( 'Cover', 'xpro-elementor-addons' ),
'contain' => __( 'Contain', 'xpro-elementor-addons' ),
),
'default' => '',
'condition' => array(
'media_type' => 'image',
'image_height[size]!' => '',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-media img' => 'object-fit: {{VALUE}};',
),
)
);
$this->add_responsive_control(
'header_media_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-icon, {{WRAPPER}} .xpro-pricing-media' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_style_price',
array(
'label' => __( 'Price', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_control(
'price_style',
array(
'label' => __( 'Layout', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'default' => '2',
'options' => array(
'1' => array(
'title' => __( 'Block', 'xpro-elementor-addons' ),
'icon' => 'eicon-menu-bar',
),
'2' => array(
'title' => __( 'Inline', 'xpro-elementor-addons' ),
'icon' => 'eicon-ellipsis-h',
),
),
)
);
$this->add_control(
'price_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-price-tag' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'price_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-price-tag',
)
);
$this->add_responsive_control(
'price_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-price-tag' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_control(
'price_currency_title',
array(
'label' => __( 'Currency', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'price_currency_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-currency' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'price_currency_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-currency',
)
);
$this->add_responsive_control(
'price_currency_vertical_offset',
array(
'label' => __( 'Vertical Offset', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'default' => array(
'unit' => 'px',
),
'range' => array(
'px' => array(
'min' => - 50,
'max' => 50,
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-currency' => 'transform: translateY({{SIZE}}{{UNIT}});',
),
)
);
$this->add_responsive_control(
'price_currency_space_between',
array(
'label' => __( 'Space Between', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'default' => array(
'unit' => 'px',
),
'range' => array(
'px' => array(
'min' => 0,
'max' => 50,
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-currency' => 'margin-right: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_control(
'price_period_title',
array(
'label' => __( 'Period', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'price_period_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-price-period' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'price_period_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-price-period',
)
);
$this->add_responsive_control(
'price_period_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-price-period' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_style_features',
array(
'label' => __( 'Features', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => array(
'show_feature' => 'yes',
),
)
);
$this->add_responsive_control(
'features_margin',
array(
'label' => __( 'Wrapper Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_control(
'features_title_heading',
array(
'label' => __( 'Title', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'features_title_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-title' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'features_title_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-features-title',
)
);
$this->add_responsive_control(
'features_title_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-title' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_control(
'features_list_heading',
array(
'label' => __( 'Feature List', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_responsive_control(
'features_icon_size',
array(
'label' => __( 'Icon Size', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 100,
'step' => 1,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'unit' => 'px',
'size' => 14,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-feature-icon' => 'font-size: {{SIZE}}{{UNIT}};',
'{{WRAPPER}} .xpro-pricing-feature-icon' => 'width: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'features_icon_space',
array(
'label' => __( 'Icon Space', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 100,
'step' => 1,
),
),
'default' => array(
'unit' => 'px',
'size' => 10,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-feature-icon' => 'margin:0 {{SIZE}}{{UNIT}} 0 0;',
'{{WRAPPER}}.xpro-pricing-align-right .xpro-pricing-feature-icon' => 'margin:0 0 0 {{SIZE}}{{UNIT}};',
),
)
);
$this->add_control(
'features_list_align',
array(
'label' => __( 'Content Align', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'options' => array(
'flex-start' => array(
'title' => __( 'Left', 'xpro-elementor-addons' ),
'icon' => 'eicon-h-align-left',
),
'center' => array(
'title' => __( 'Center', 'xpro-elementor-addons' ),
'icon' => 'eicon-h-align-center',
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li' => 'justify-content: {{VALUE}};',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'features_list_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-features-list li',
)
);
$this->add_responsive_control(
'features_list_space_between',
array(
'label' => __( 'Space between', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 100,
'step' => 1,
),
),
'default' => array(
'unit' => 'px',
'size' => 15,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li' => 'margin-bottom: {{SIZE}}{{UNIT}};',
),
)
);
$this->start_controls_tabs( 'features_list_tab' );
$this->start_controls_tab(
'features_list_active',
array(
'label' => __( 'Active', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'features_list_active_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li.active' => 'color: {{VALUE}}',
),
)
);
$this->add_control(
'features_list_active_icon_color',
array(
'label' => __( 'Icon Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li.active .xpro-pricing-feature-icon' => 'color: {{VALUE}}',
),
)
);
$this->end_controls_tab();
$this->start_controls_tab(
'features_list_inactive',
array(
'label' => __( 'Inactive', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'features_list_inactive_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li.inactive' => 'color: {{VALUE}}',
),
)
);
$this->add_control(
'features_list_inactive_icon_color',
array(
'label' => __( 'Icon Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-features-list li.inactive .xpro-pricing-feature-icon' => 'color: {{VALUE}}',
),
)
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_control(
'features_list_tooltip',
array(
'label' => __( 'Tooltip', 'xpro-elementor-addons' ),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
)
);
$this->add_control(
'features_list_tooltip_color',
array(
'label' => __( 'Icon Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip-toggle' => 'color: {{VALUE}}',
),
)
);
$this->add_control(
'features_list_tooltip_bg',
array(
'label' => __( 'Icon Background', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip-toggle' => 'background-color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'features_tooltip_typography',
'label' => __( 'Content Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip',
)
);
$this->add_responsive_control(
'features_list_tooltip_width',
array(
'label' => __( 'Width', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 1000,
'step' => 1,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'unit' => 'px',
'size' => 200,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip' => 'width: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_control(
'features_list_tooltip_content_color',
array(
'label' => __( 'Content Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip' => 'color: {{VALUE}}',
),
)
);
$this->add_control(
'features_list_tooltip_content_bg',
array(
'label' => __( 'Content Background', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip' => 'background-color: {{VALUE}};',
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip::after' => 'border-color: transparent {{VALUE}} transparent transparent;',
),
)
);
$this->add_responsive_control(
'features_list_icon_tooltip_padding',
array(
'label' => __( 'Content Padding', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-pricing-tooltip' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_description_style',
array(
'label' => __( 'Description', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_control(
'features_description_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-description,{{WRAPPER}} .xpro-pricing-description > *' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'description_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-description, {{WRAPPER}} .xpro-pricing-description > *',
)
);
$this->add_responsive_control(
'description_width',
array(
'label' => __( 'Max Width', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 1000,
'step' => 1,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'unit' => 'px',
'size' => 400,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-description' => 'max-width: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'description_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-description-wrapper' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_separator_style',
array(
'label' => __( 'Separator', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_control(
'show_separator',
array(
'label' => __( 'Show', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SWITCHER,
'label_on' => __( 'Show', 'xpro-elementor-addons' ),
'label_off' => __( 'Hide', 'xpro-elementor-addons' ),
'return_value' => 'yes',
)
);
$this->add_control(
'separator_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-separator:before' => 'border-color: {{VALUE}}',
),
'condition' => array(
'show_separator' => 'yes',
),
)
);
$this->add_control(
'separator_style',
array(
'label' => __( 'Style', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'default' => 'solid',
'options' => array(
'solid' => __( 'Solid', 'xpro-elementor-addons' ),
'double' => __( 'Double', 'xpro-elementor-addons' ),
'dotted' => __( 'Dotted', 'xpro-elementor-addons' ),
'dashed' => __( 'Dashed', 'xpro-elementor-addons' ),
'groove' => __( 'Groove', 'xpro-elementor-addons' ),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-separator:before' => 'border-top-style: {{VALUE}};',
),
'condition' => array(
'show_separator' => 'yes',
),
)
);
$this->add_responsive_control(
'separator_width',
array(
'label' => __( 'Width', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 1000,
'step' => 1,
),
'%' => array(
'min' => 0,
'max' => 100,
),
),
'default' => array(
'unit' => 'px',
'size' => 100,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-separator:before' => 'width: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'show_separator' => 'yes',
),
)
);
$this->add_responsive_control(
'separator_height',
array(
'label' => __( 'Height', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'range' => array(
'px' => array(
'min' => 0,
'max' => 10,
'step' => 1,
),
),
'default' => array(
'unit' => 'px',
'size' => 1,
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-separator:before' => 'border-top-width: {{SIZE}}{{UNIT}};',
),
'condition' => array(
'show_separator' => 'yes',
),
)
);
$this->add_responsive_control(
'separator_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-separator' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
'condition' => array(
'show_separator' => 'yes',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_button_style',
array(
'label' => __( 'Button', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
)
);
$this->add_control(
'button_display',
array(
'label' => __( 'Display', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'default' => 'inline-block',
'options' => array(
'block' => array(
'title' => __( 'Block', 'xpro-elementor-addons' ),
'icon' => 'eicon-menu-bar',
),
'inline-block' => array(
'title' => __( 'Inline', 'xpro-elementor-addons' ),
'icon' => 'eicon-ellipsis-h',
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn' => 'display: {{VALUE}};',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'button_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-btn',
)
);
$this->start_controls_tabs(
'button_style_tabs'
);
$this->start_controls_tab(
'button_normal_tab',
array(
'label' => __( 'Normal', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'button_color',
array(
'label' => __( 'Text Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Background::get_type(),
array(
'name' => 'button_bg',
'label' => __( 'Background', 'xpro-elementor-addons' ),
'types' => array( 'classic', 'gradient' ),
'selector' => '{{WRAPPER}} .xpro-pricing-btn',
)
);
$this->add_group_control(
Group_Control_Border::get_type(),
array(
'name' => 'button_border',
'label' => __( 'Border', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-btn',
)
);
$this->end_controls_tab();
$this->start_controls_tab(
'button_hover_tab_style',
array(
'label' => __( 'Hover', 'xpro-elementor-addons' ),
)
);
$this->add_control(
'button_hcolor',
array(
'label' => __( 'Text Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn:hover,{{WRAPPER}} .xpro-pricing-btn:focus' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Background::get_type(),
array(
'name' => 'button_hbg',
'label' => __( 'Background', 'xpro-elementor-addons' ),
'types' => array( 'classic', 'gradient' ),
'selector' => '{{WRAPPER}} .xpro-pricing-btn:hover,{{WRAPPER}} .xpro-pricing-btn:focus',
)
);
$this->add_control(
'button_hborder',
array(
'label' => __( 'Border Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn:hover,{{WRAPPER}} .xpro-pricing-btn:focus' => 'border-color: {{VALUE}}',
),
)
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->add_responsive_control(
'button_border_radius',
array(
'label' => __( 'Border Radius', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'button_item_padding',
array(
'label' => __( 'Padding', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'button_margin',
array(
'label' => __( 'Margin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-btn' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
$this->start_controls_section(
'section_badge_style',
array(
'label' => __( 'Badge', 'xpro-elementor-addons' ),
'tab' => Controls_Manager::TAB_STYLE,
'condition' => array(
'show_badge' => 'yes',
),
)
);
$this->add_control(
'badge_display',
array(
'label' => __( 'Display', 'xpro-elementor-addons' ),
'type' => Controls_Manager::CHOOSE,
'default' => 'auto',
'options' => array(
'100%' => array(
'title' => __( 'Block', 'xpro-elementor-addons' ),
'icon' => 'eicon-menu-bar',
),
'auto' => array(
'title' => __( 'Inline', 'xpro-elementor-addons' ),
'icon' => 'eicon-ellipsis-h',
),
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => 'width: {{VALUE}}; top:0; left: 0',
'{{WRAPPER}} .xpro-pricing-item .xpro-badge-top-left' => 'left:0; right:auto;',
'{{WRAPPER}} .xpro-pricing-item .xpro-badge-top-center' => 'left:50%; right:auto;',
'{{WRAPPER}} .xpro-pricing-item .xpro-badge-top-right' => 'right:0; left:auto;',
),
)
);
$this->add_control(
'badge_position',
array(
'label' => __( 'Position', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'options' => array(
'top-left' => __( 'Top Left', 'xpro-elementor-addons' ),
'top-center' => __( 'Top Center', 'xpro-elementor-addons' ),
'top-right' => __( 'Top Right', 'xpro-elementor-addons' ),
),
'default' => 'top-right',
'condition' => array(
'badge_display' => 'auto',
),
)
);
$this->add_control(
'badge_transform_toggle',
array(
'label' => __( 'Transform', 'xpro-elementor-addons' ),
'type' => Controls_Manager::POPOVER_TOGGLE,
'label_off' => __( 'None', 'xpro-elementor-addons' ),
'label_on' => __( 'Custom', 'xpro-elementor-addons' ),
'return_value' => 'yes',
)
);
$this->start_popover();
$this->add_responsive_control(
'badge_horizontal_offset',
array(
'label' => __( 'Horizontal Offset', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'default' => array(
'unit' => 'px',
),
'range' => array(
'px' => array(
'min' => - 1000,
'max' => 1000,
),
'%' => array(
'min' => - 100,
'max' => 100,
),
),
'condition' => array(
'badge_transform_toggle' => 'yes',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => '--xpro-badge-translate-x: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'badge_vertical_offset',
array(
'label' => __( 'Vertical Offset', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px', '%' ),
'default' => array(
'unit' => 'px',
),
'range' => array(
'px' => array(
'min' => - 1000,
'max' => 1000,
),
'%' => array(
'min' => - 100,
'max' => 200,
),
),
'condition' => array(
'badge_transform_toggle' => 'yes',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => '--xpro-badge-translate-y: {{SIZE}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'badge_rotate',
array(
'label' => __( 'Rotate', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SLIDER,
'size_units' => array( 'px' ),
'range' => array(
'px' => array(
'min' => - 360,
'max' => 360,
),
),
'condition' => array(
'badge_transform_toggle' => 'yes',
),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => '--xpro-badge-rotate: {{SIZE}}deg;',
),
)
);
$this->add_control(
'badge_transform_origin',
array(
'label' => __( 'Transform Origin', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'label_block' => true,
'options' => array(
'center center' => _x( 'Center Center', 'Background Control', 'xpro-elementor-addons' ),
'center left' => _x( 'Center Left', 'Background Control', 'xpro-elementor-addons' ),
'center right' => _x( 'Center Right', 'Background Control', 'xpro-elementor-addons' ),
'top center' => _x( 'Top Center', 'Background Control', 'xpro-elementor-addons' ),
'top left' => _x( 'Top Left', 'Background Control', 'xpro-elementor-addons' ),
'top right' => _x( 'Top Right', 'Background Control', 'xpro-elementor-addons' ),
'bottom center' => _x( 'Bottom Center', 'Background Control', 'xpro-elementor-addons' ),
'bottom left' => _x( 'Bottom Left', 'Background Control', 'xpro-elementor-addons' ),
'bottom right' => _x( 'Bottom Right', 'Background Control', 'xpro-elementor-addons' ),
),
'default' => 'center center',
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => 'transform-origin: {{VALUE}};',
),
'condition' => array(
'badge_transform_toggle' => 'yes',
),
)
);
$this->end_popover();
$this->add_control(
'badge_overflow',
array(
'label' => __( 'Overflow', 'xpro-elementor-addons' ),
'type' => Controls_Manager::SELECT,
'options' => array(
'' => _x( 'Auto', 'Background Control', 'xpro-elementor-addons' ),
'hidden' => _x( 'Hidden', 'Background Control', 'xpro-elementor-addons' ),
),
'default' => '',
'selectors' => array(
'{{WRAPPER}}.elementor-widget-xpro-pricing > .elementor-widget-container' => 'overflow: {{VALUE}};',
),
)
);
$this->add_group_control(
Group_Control_Typography::get_type(),
array(
'name' => 'badge_typography',
'label' => __( 'Typography', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-item .xpro-badge',
)
);
$this->add_control(
'badge_color',
array(
'label' => __( 'Color', 'xpro-elementor-addons' ),
'type' => Controls_Manager::COLOR,
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => 'color: {{VALUE}}',
),
)
);
$this->add_group_control(
Group_Control_Background::get_type(),
array(
'name' => 'badge_background',
'label' => __( 'Background', 'xpro-elementor-addons' ),
'types' => array( 'classic', 'gradient' ),
'selector' => '{{WRAPPER}} .xpro-pricing-item .xpro-badge',
)
);
$this->add_group_control(
Group_Control_Border::get_type(),
array(
'name' => 'badge_border',
'label' => __( 'Border', 'xpro-elementor-addons' ),
'selector' => '{{WRAPPER}} .xpro-pricing-item .xpro-badge',
)
);
$this->add_responsive_control(
'badge_border_radius',
array(
'label' => __( 'Border Radius', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->add_responsive_control(
'badge_padding',
array(
'label' => __( 'Padding', 'xpro-elementor-addons' ),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => array( 'px', '%', 'em' ),
'selectors' => array(
'{{WRAPPER}} .xpro-pricing-item .xpro-badge' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
),
)
);
$this->end_controls_section();
}
/**
* Render image widget output on the frontend.
*
* Written in PHP and used to generate the final HTML.
*
* @since 1.0.0
* @access protected
*/
protected function render() {
$settings = $this->get_settings_for_display();
require XPRO_ELEMENTOR_ADDONS_WIDGET . 'pricing/layout/frontend.php';
}
}