PluginProbe
Elementor Website Builder – more than just a page builder / 3.31.1
Elementor Website Builder – more than just a page builder v3.31.1
4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / modules / atomic-widgets / styles / style-schema.php

style-schema.php in Elementor Website Builder – more than just a page builder 3.31.1, at modules/atomic-widgets/styles/style-schema.php

323 lines 8.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\AtomicWidgets\Styles;
4
5 use Elementor\Modules\AtomicWidgets\DynamicTags\Dynamic_Prop_Types_Mapping;
6 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Image_Overlay_Prop_Type;
7 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Overlay_Prop_Type;
8 use Elementor\Modules\AtomicWidgets\PropTypes\Background_Prop_Type;
9 use Elementor\Modules\AtomicWidgets\PropTypes\Box_Shadow_Prop_Type;
10 use Elementor\Modules\AtomicWidgets\PropTypes\Filter_Prop_Type;
11 use Elementor\Modules\AtomicWidgets\PropTypes\Backdrop_Filter_Prop_Type;
12 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Radius_Prop_Type;
13 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Width_Prop_Type;
14 use Elementor\Modules\AtomicWidgets\PropTypes\Color_Prop_Type;
15 use Elementor\Modules\AtomicWidgets\PropTypes\Dimensions_Prop_Type;
16 use Elementor\Modules\AtomicWidgets\PropTypes\Layout_Direction_Prop_Type;
17 use Elementor\Modules\AtomicWidgets\PropTypes\Position_Prop_Type;
18 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\Number_Prop_Type;
19 use Elementor\Modules\AtomicWidgets\PropTypes\Size_Prop_Type;
20 use Elementor\Modules\AtomicWidgets\PropTypes\Primitives\String_Prop_Type;
21 use Elementor\Modules\AtomicWidgets\PropTypes\Stroke_Prop_Type;
22 use Elementor\Modules\AtomicWidgets\PropTypes\Transform\Transform_Prop_Type;
23 use Elementor\Modules\AtomicWidgets\PropTypes\Union_Prop_Type;
24 use Elementor\Modules\AtomicWidgets\PropTypes\Flex_Prop_Type;
25 use Elementor\Modules\AtomicWidgets\PropDependencies\Manager as Dependency_Manager;
26
27 if ( ! defined( 'ABSPATH' ) ) {
28 exit; // Exit if accessed directly.
29 }
30
31 class Style_Schema {
32 public static function get() {
33 return apply_filters( 'elementor/atomic-widgets/styles/schema', static::get_style_schema() );
34 }
35
36 public static function get_style_schema(): array {
37 return array_merge(
38 self::get_size_props(),
39 self::get_position_props(),
40 self::get_typography_props(),
41 self::get_spacing_props(),
42 self::get_border_props(),
43 self::get_background_props(),
44 self::get_effects_props(),
45 self::get_layout_props(),
46 self::get_alignment_props(),
47 );
48 }
49
50 private static function get_size_props() {
51 return [
52 'width' => Size_Prop_Type::make(),
53 'height' => Size_Prop_Type::make(),
54 'min-width' => Size_Prop_Type::make(),
55 'min-height' => Size_Prop_Type::make(),
56 'max-width' => Size_Prop_Type::make(),
57 'max-height' => Size_Prop_Type::make(),
58 'overflow' => String_Prop_Type::make()->enum( [
59 'visible',
60 'hidden',
61 'auto',
62 ] ),
63 'aspect-ratio' => String_Prop_Type::make(),
64 'object-fit' => String_Prop_Type::make()->enum( [
65 'fill',
66 'cover',
67 'contain',
68 'none',
69 'scale-down',
70 ] ),
71 'object-position' => Union_Prop_Type::make()
72 ->add_prop_type( String_Prop_Type::make()->enum( Position_Prop_Type::get_position_enum_values() ) )
73 ->add_prop_type( Position_Prop_Type::make() )
74 ->set_dependencies(
75 Dependency_Manager::make( Dependency_Manager::RELATION_AND )
76 ->where( [
77 'operator' => 'ne',
78 'path' => [ 'object-fit' ],
79 'value' => 'fill',
80 ] )
81 ->where( [
82 'operator' => 'exists',
83 'path' => [ 'object-fit' ],
84 ] )
85 ->get()
86 ),
87 ];
88 }
89
90 private static function get_position_props() {
91 return [
92 'position' => String_Prop_Type::make()->enum( [
93 'static',
94 'relative',
95 'absolute',
96 'fixed',
97 'sticky',
98 ] ),
99 'inset-block-start' => Size_Prop_Type::make(),
100 'inset-inline-end' => Size_Prop_Type::make(),
101 'inset-block-end' => Size_Prop_Type::make(),
102 'inset-inline-start' => Size_Prop_Type::make(),
103 'z-index' => Number_Prop_Type::make(),
104 'scroll-margin-top' => Size_Prop_Type::make(),
105 ];
106 }
107
108 private static function get_typography_props() {
109 return [
110 'font-family' => String_Prop_Type::make(),
111 'font-weight' => String_Prop_Type::make()->enum( [
112 '100',
113 '200',
114 '300',
115 '400',
116 '500',
117 '600',
118 '700',
119 '800',
120 '900',
121 'normal',
122 'bold',
123 'bolder',
124 'lighter',
125 ] ),
126 'font-size' => Size_Prop_Type::make(),
127 'color' => Color_Prop_Type::make(),
128 'letter-spacing' => Size_Prop_Type::make(),
129 'word-spacing' => Size_Prop_Type::make(),
130 'column-count' => Number_Prop_Type::make(),
131 'column-gap' => Size_Prop_Type::make()
132 ->set_dependencies(
133 Dependency_Manager::make()
134 ->where( [
135 'operator' => 'gte',
136 'path' => [ 'column-count' ],
137 'value' => 1,
138 ] )
139 ->get()
140 ),
141 'line-height' => Size_Prop_Type::make(),
142 'text-align' => String_Prop_Type::make()->enum( [
143 'start',
144 'center',
145 'end',
146 'justify',
147 ] ),
148 'font-style' => String_Prop_Type::make()->enum( [
149 'normal',
150 'italic',
151 'oblique',
152 ] ),
153 // TODO: validate text-decoration in more specific way [EDS-524]
154 'text-decoration' => String_Prop_Type::make(),
155 'text-transform' => String_Prop_Type::make()->enum( [
156 'none',
157 'capitalize',
158 'uppercase',
159 'lowercase',
160 ] ),
161 'direction' => String_Prop_Type::make()->enum( [
162 'ltr',
163 'rtl',
164 ] ),
165 'stroke' => Stroke_Prop_Type::make(),
166 'all' => String_Prop_Type::make()->enum( [
167 'initial',
168 'inherit',
169 'unset',
170 'revert',
171 'revert-layer',
172 ] ),
173 'cursor' => String_Prop_Type::make()->enum( [
174 'pointer',
175 ] ),
176 ];
177 }
178
179 private static function get_spacing_props() {
180 return [
181 'padding' => Union_Prop_Type::make()
182 ->add_prop_type( Dimensions_Prop_Type::make() )
183 ->add_prop_type( Size_Prop_Type::make() ),
184 'margin' => Union_Prop_Type::make()
185 ->add_prop_type( Dimensions_Prop_Type::make() )
186 ->add_prop_type( Size_Prop_Type::make() ),
187 ];
188 }
189
190 private static function get_border_props() {
191 return [
192 'border-radius' => Union_Prop_Type::make()
193 ->add_prop_type( Size_Prop_Type::make() )
194 ->add_prop_type( Border_Radius_Prop_Type::make() ),
195 'border-width' => Union_Prop_Type::make()
196 ->add_prop_type( Size_Prop_Type::make() )
197 ->add_prop_type( Border_Width_Prop_Type::make() ),
198 'border-color' => Color_Prop_Type::make(),
199 'border-style' => String_Prop_Type::make()->enum( [
200 'none',
201 'hidden',
202 'dotted',
203 'dashed',
204 'solid',
205 'double',
206 'groove',
207 'ridge',
208 'inset',
209 'outset',
210 ] ),
211 ];
212 }
213
214 private static function get_background_props() {
215 // Background image overlay as an exception
216 $background_prop_type = Background_Prop_Type::make();
217 $bg_overlay_prop_type = $background_prop_type->get_shape_field( Background_Overlay_Prop_Type::get_key() );
218 $bg_image_overlay_prop_type = $bg_overlay_prop_type->get_item_type()->get_prop_type( Background_Image_Overlay_Prop_Type::get_key() );
219 Dynamic_Prop_Types_Mapping::make()->get_modified_prop_types( $bg_image_overlay_prop_type->get_shape() );
220 return [
221 'background' => $background_prop_type,
222 ];
223 }
224
225 private static function get_effects_props() {
226 return [
227 'box-shadow' => Box_Shadow_Prop_Type::make(),
228 'opacity' => Size_Prop_Type::make(),
229 'filter' => Filter_Prop_Type::make(),
230 'backdrop-filter' => Backdrop_Filter_Prop_Type::make(),
231 'transform' => Transform_Prop_Type::make(),
232 ];
233 }
234
235 private static function get_layout_props() {
236 return [
237 'display' => String_Prop_Type::make()->enum( [
238 'block',
239 'inline',
240 'inline-block',
241 'flex',
242 'inline-flex',
243 'grid',
244 'inline-grid',
245 'flow-root',
246 'none',
247 'contents',
248 ] ),
249 'flex-direction' => String_Prop_Type::make()->enum( [
250 'row',
251 'row-reverse',
252 'column',
253 'column-reverse',
254 ] ),
255 'gap' => Union_Prop_Type::make()
256 ->add_prop_type( Layout_Direction_Prop_Type::make() )
257 ->add_prop_type( Size_Prop_Type::make() ),
258 'flex-wrap' => String_Prop_Type::make()->enum( [
259 'wrap',
260 'nowrap',
261 'wrap-reverse',
262 ] ),
263 'flex' => Flex_Prop_Type::make(),
264 ];
265 }
266
267 private static function get_alignment_props() {
268 return [
269 'justify-content' => String_Prop_Type::make()->enum( [
270 'center',
271 'start',
272 'end',
273 'flex-start',
274 'flex-end',
275 'left',
276 'right',
277 'normal',
278 'space-between',
279 'space-around',
280 'space-evenly',
281 'stretch',
282 ] ),
283 'align-content' => String_Prop_Type::make()->enum( [
284 'center',
285 'start',
286 'end',
287 'space-between',
288 'space-around',
289 'space-evenly',
290 ] ),
291 'align-items' => String_Prop_Type::make()->enum( [
292 'normal',
293 'stretch',
294 'center',
295 'start',
296 'end',
297 'flex-start',
298 'flex-end',
299 'self-start',
300 'self-end',
301 'anchor-center',
302 ] ),
303 'align-self' => String_Prop_Type::make()->enum( [
304 'auto',
305 'normal',
306 'center',
307 'start',
308 'end',
309 'self-start',
310 'self-end',
311 'flex-start',
312 'flex-end',
313 'anchor-center',
314 'baseline',
315 'first baseline',
316 'last baseline',
317 'stretch',
318 ] ),
319 'order' => Number_Prop_Type::make(),
320 ];
321 }
322 }
323