if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
* Elementor control base units.
* An abstract class for creating new unit controls in the panel.
abstract class Control_Base_Units extends Control_Base_Multiple {
* Get units control default value.
* Retrieve the default value of the units control. Used to return the default
* values while initializing the units control.
* @return array Control default value.
public function get_default_value() {
* Get units control default settings.
* Retrieve the default settings of the units control. Used to return the default
* settings while initializing the units control.
* @return array Control default settings.
protected function get_default_settings() {
'size_units' => [ 'px' ],
* Print units control settings.
* Used to generate the units control template in the editor.
protected function print_units_template() {
<# if ( data.size_units && data.size_units.length > 1 ) { #>
<div class="e-units-wrapper">
<div class="e-units-switcher">
<i class="eicon-edit" aria-hidden="true"></i>
<i class="eicon-angle-right" aria-hidden="true"></i>
<span class="elementor-screen-only"><?php echo esc_html__( 'Switch units', 'elementor' ); ?></span>
<div class="e-units-choices">
<# _.each( data.size_units, function( unit ) { #>
<input id="elementor-choose-{{ data._cid + data.name + unit }}" type="radio" name="elementor-choose-{{ data.name + data._cid }}" data-setting="unit" value="{{ unit }}">
<label class="elementor-units-choices-label" for="elementor-choose-{{ data._cid + data.name + unit }}" data-choose="{{{ unit }}}">
<# if ( 'custom' === unit ) { #>
<i class="eicon-edit" aria-hidden="true"></i>
<span class="elementor-screen-only"><?php echo esc_html__( 'Custom unit', 'elementor' ); ?></span>
<span>{{{ unit }}}</span>
public function get_style_value( $css_property, $control_value, array $control_data ) {
$return_value = parent::get_style_value( $css_property, $control_value, $control_data );
if ( 'UNIT' === $css_property && 'custom' === $return_value ) {
$return_value = '__EMPTY__';