# elementor/3.27.4/modules/atomic-widgets/base/atomic-element-base.php

Elementor Website Builder – more than just a page builder, version 3.27.4. 48 lines.

- Page: https://pluginprobe.com/plugins/elementor/3.27.4/code/modules/atomic-widgets/base/atomic-element-base.php
- Raw: https://pluginprobe.com/plugins/elementor/3.27.4/raw/modules/atomic-widgets/base/atomic-element-base.php
- Modified: 2025-01-20T14:15:08+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/3.27.4/code/modules/atomic-widgets/base/atomic-element-base.php#L10-L20`.

```php
<?php

namespace Elementor\Modules\AtomicWidgets\Base;

use Elementor\Element_Base;
use Elementor\Modules\AtomicWidgets\PropTypes\Concerns\Has_Atomic_Base;
use Elementor\Modules\AtomicWidgets\PropTypes\Contracts\Prop_Type;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

abstract class Atomic_Element_Base extends Element_Base {

	use Has_Atomic_Base;

	protected $version = '0.0';
	protected $styles = [];

	public function __construct( $data = [], $args = null ) {
		parent::__construct( $data, $args );

		$this->version = $data['version'] ?? '0.0';
		$this->styles = $data['styles'] ?? [];
	}

	abstract protected function define_atomic_controls(): array;

	final public function get_initial_config() {
		$config = parent::get_initial_config();

		$config['atomic_controls'] = $this->get_atomic_controls();
		$config['atomic_props_schema'] = static::get_props_schema();
		$config['version'] = $this->version;
		$config['show_in_panel'] = true;
		$config['categories'] = [ 'layout' ];
		$config['hide_on_search'] = false;
		$config['controls'] = [];

		return $config;
	}

	/**
	 * @return array<string, Prop_Type>
	 */
	abstract protected static function define_props_schema(): array;
}

```
