PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.0
Elementor Website Builder – more than just a page builder v4.0.0
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 4.0.7 All 451 releases
elementor / modules / atomic-widgets / styles / style-schema.php

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

406 lines 15.5 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\Border_Radius_Prop_Type;
11 use Elementor\Modules\AtomicWidgets\PropTypes\Border_Width_Prop_Type;
12 use Elementor\Modules\AtomicWidgets\PropTypes\Color_Prop_Type;
13 use Elementor\Modules\AtomicWidgets\PropTypes\Dimensions_Prop_Type;
14 use Elementor\Modules\AtomicWidgets\PropTypes\Filters\Backdrop_Filter_Prop_Type;
15 use Elementor\Modules\AtomicWidgets\PropTypes\Filters\Filter_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\Transition_Prop_Type;
24 use Elementor\Modules\AtomicWidgets\PropTypes\Union_Prop_Type;
25 use Elementor\Modules\AtomicWidgets\PropTypes\Flex_Prop_Type;
26 use Elementor\Modules\AtomicWidgets\PropDependencies\Manager as Dependency_Manager;
27
28 if ( ! defined( 'ABSPATH' ) ) {
29 exit; // Exit if accessed directly.
30 }
31
32 class Style_Schema {
33 public static function get() {
34 return apply_filters( 'elementor/atomic-widgets/styles/schema', static::get_style_schema() );
35 }
36
37 public static function get_style_schema(): array {
38 return array_merge(
39 self::get_size_props(),
40 self::get_position_props(),
41 self::get_typography_props(),
42 self::get_spacing_props(),
43 self::get_border_props(),
44 self::get_background_props(),
45 self::get_effects_props(),
46 self::get_layout_props(),
47 self::get_alignment_props(),
48 self::get_special_props(),
49 );
50 }
51
52 private static function get_size_props() {
53 return [
54 'width' => Size_Prop_Type::make()->description( 'The width of the element' ),
55 'height' => Size_Prop_Type::make()->description( 'The height of the element' ),
56 'min-width' => Size_Prop_Type::make()->description( 'The minimum width of the element' ),
57 'min-height' => Size_Prop_Type::make()->description( 'The minimum height of the element' ),
58 'max-width' => Size_Prop_Type::make()->description( 'The maximum width of the element' ),
59 'max-height' => Size_Prop_Type::make()->description( 'The maximum height of the element' ),
60 'overflow' => String_Prop_Type::make()->enum( [
61 'visible',
62 'hidden',
63 'auto',
64 ] )->description( 'The overflow CSS property. CSS values: visible, hidden, auto' ),
65 'aspect-ratio' => String_Prop_Type::make()->description( 'Equivalent to CSS aspect-ration property' ),
66 'object-fit' => String_Prop_Type::make()->enum( [
67 'fill',
68 'cover',
69 'contain',
70 'none',
71 'scale-down',
72 ] )->description( 'The object-fit CSS. CSS values: fill, cover, contain, none, scale-down' ),
73 'object-position' => Union_Prop_Type::make()
74 ->add_prop_type( String_Prop_Type::make()->enum( Position_Prop_Type::get_position_enum_values() ) )
75 ->add_prop_type( Position_Prop_Type::make() )
76 ->set_dependencies(
77 Dependency_Manager::make( Dependency_Manager::RELATION_AND )
78 ->where( [
79 'operator' => 'ne',
80 'path' => [ 'object-fit' ],
81 'value' => 'fill',
82 ] )
83 ->where( [
84 'operator' => 'exists',
85 'path' => [ 'object-fit' ],
86 ] )
87 ->get()
88 ),
89 ];
90 }
91
92 private static function get_position_props() {
93 return [
94 'position' => String_Prop_Type::make()->enum( [
95 'static',
96 'relative',
97 'absolute',
98 'fixed',
99 'sticky',
100 ] )->description( 'The CSS position property specifies the type of positioning method used for an element (static, relative, absolute, fixed, or sticky).' ),
101 'inset-block-start' => Size_Prop_Type::make()->description( 'Size PropType for the inset-block-start CSS property' ),
102 'inset-inline-end' => Size_Prop_Type::make()->description( 'Size PropType for the inset-inline-end CSS property' ),
103 'inset-block-end' => Size_Prop_Type::make()->description( 'Size PropType for the inset-block-end CSS property' ),
104 'inset-inline-start' => Size_Prop_Type::make()->description( 'Size PropType for the inset-inline-start CSS property' ),
105 'z-index' => Number_Prop_Type::make()
106 ->description( 'The z-index CSS property sets the z-order of a positioned element and its descendants or flex items. It specifies the stack order of elements.' ),
107 'scroll-margin-top' => Size_Prop_Type::make()->units( Size_Constants::anchor_offset() ),
108 ];
109 }
110
111 private static function get_typography_props() {
112 return [
113 'font-family' => String_Prop_Type::make()->description( 'The font family of the text content.' ),
114 'font-weight' => String_Prop_Type::make()->enum( [
115 '100',
116 '200',
117 '300',
118 '400',
119 '500',
120 '600',
121 '700',
122 '800',
123 '900',
124 'normal',
125 'bold',
126 'bolder',
127 'lighter',
128 ] )
129 ->description( 'The weight (or boldness) of the font. Values should match css font-weight specifications.' ),
130 'font-size' => Size_Prop_Type::make()->units( Size_Constants::typography() )->description( 'The font size in Size PropType Format' ),
131 'color' => Color_Prop_Type::make()
132 ->description( 'The text color, specified as a hex code, rgb(a), hsl(a), or a standard css color name.' ),
133 'letter-spacing' => Size_Prop_Type::make()->units( Size_Constants::typography() )->description( 'The spacing between letters in Size PropType format' ),
134 'word-spacing' => Size_Prop_Type::make()->units( Size_Constants::typography() )->description( 'The spacing between words in Size PropType format' ),
135 'column-count' => Number_Prop_Type::make()->description( 'The number of columns the text content should be divided into.' ),
136 'column-gap' => Size_Prop_Type::make()
137 ->set_dependencies(
138 Dependency_Manager::make()
139 ->where( [
140 'operator' => 'gte',
141 'path' => [ 'column-count' ],
142 'value' => 1,
143 ] )
144 ->get()
145 ),
146 'line-height' => Size_Prop_Type::make()->units( Size_Constants::typography() )->description( 'The line height of the text content in Size PropType format' ),
147 'text-align' => String_Prop_Type::make()->enum( [
148 'start',
149 'center',
150 'end',
151 'justify',
152 ] )
153 ->description( 'The horizontal alignment of the text content. Allowed values: start, center, end, justify.' ),
154 'font-style' => String_Prop_Type::make()->enum( [
155 'normal',
156 'italic',
157 'oblique',
158 ] )
159 ->description( 'The font style of the text content. CSS values: normal, italic, oblique' ),
160 // TODO: validate text-decoration in more specific way [EDS-524]
161 'text-decoration' => String_Prop_Type::make()
162 ->description( 'The text decoration style. CSS values like: none, underline, overline, line-through, blink, etc.' ),
163 'text-transform' => String_Prop_Type::make()->enum( [
164 'none',
165 'capitalize',
166 'uppercase',
167 'lowercase',
168 ] )
169 ->description( 'Controls the capitalization of text. CSS values: none, capitalize, uppercase, lowercase' ),
170 'direction' => String_Prop_Type::make()->enum( [
171 'ltr',
172 'rtl',
173 ] )->description( 'The text direction. CSS values: ltr (left to right), rtl (right to left)' ),
174 'stroke' => Stroke_Prop_Type::make(),
175 'all' => String_Prop_Type::make()->enum( [
176 'initial',
177 'inherit',
178 'unset',
179 'revert',
180 'revert-layer',
181 ] )->description( 'The all CSS property. CSS values: initial, inherit, unset, revert, revert-layer' ),
182 'cursor' => String_Prop_Type::make()->enum( [
183 'pointer',
184 ] )
185 ->description( 'The type of cursor to be displayed when pointing over the element. E.g., pointer.' ),
186 ];
187 }
188
189 private static function get_spacing_props() {
190 return [
191 'padding' => Union_Prop_Type::make()
192 ->add_prop_type( Dimensions_Prop_Type::make_with_units( Size_Constants::spacing() ) )
193 ->add_prop_type(
194 Size_Prop_Type::make()
195 ->units( Size_Constants::spacing() )
196 ->description( 'Padding css in Size PropType format' )
197 ),
198 'margin' => Union_Prop_Type::make()
199 ->add_prop_type( Dimensions_Prop_Type::make_with_units( Size_Constants::spacing_margin() ) )
200 ->add_prop_type(
201 Size_Prop_Type::make()
202 ->units( Size_Constants::spacing_margin() )
203 ->description( 'Margin css in Size PropType format' )
204 ),
205 ];
206 }
207
208 private static function get_border_props() {
209 return [
210 'border-radius' => Union_Prop_Type::make()
211 ->add_prop_type( Border_Radius_Prop_Type::make() )
212 ->add_prop_type( Size_Prop_Type::make()->units( Size_Constants::border() ) ),
213 'border-width' => Union_Prop_Type::make()
214 ->add_prop_type( Border_Width_Prop_Type::make() )
215 ->add_prop_type( Size_Prop_Type::make()->units( Size_Constants::border() ) ),
216 'border-color' => Color_Prop_Type::make()->description( 'The border color, specified as a hex code, rgb(a), hsl(a), or a standard css color name.' ),
217 'border-style' => String_Prop_Type::make()->enum( [
218 'none',
219 'hidden',
220 'dotted',
221 'dashed',
222 'solid',
223 'double',
224 'groove',
225 'ridge',
226 'inset',
227 'outset',
228 ] )
229 ->description( 'The border style in CSS values' ),
230 'outline-width' => Size_Prop_Type::make()
231 ->units( Size_Constants::border() )
232 ->description( 'The width of the outline in Size PropType format' ),
233 'outline-color' => Color_Prop_Type::make()->description( 'The color of the outline, specified as a hex code, rgb(a), hsl(a), or a standard css color name.' ),
234 'outline-style' => String_Prop_Type::make()->enum( [
235 'none',
236 'hidden',
237 'dotted',
238 'dashed',
239 'solid',
240 'double',
241 'groove',
242 'ridge',
243 'inset',
244 'outset',
245 ] )->description( 'The outline style in CSS values' ),
246 'outline-offset' => Size_Prop_Type::make()->units( Size_Constants::border() )->description( 'The offset of the outline, specified as a length in Size PropType format' ),
247
248 ];
249 }
250
251 private static function get_background_props() {
252 // Background image overlay as an exception
253 $background_prop_type = Background_Prop_Type::make();
254 $bg_overlay_prop_type = $background_prop_type->get_shape_field( Background_Overlay_Prop_Type::get_key() );
255 $bg_image_overlay_prop_type = $bg_overlay_prop_type->get_item_type()->get_prop_type( Background_Image_Overlay_Prop_Type::get_key() );
256 Dynamic_Prop_Types_Mapping::make()->get_extended_schema( $bg_image_overlay_prop_type->get_shape() );
257 return [
258 'background' => $background_prop_type,
259 ];
260 }
261
262 private static function get_effects_props() {
263 return [
264 'mix-blend-mode' => String_Prop_Type::make()->enum( [
265 'normal',
266 'multiply',
267 'screen',
268 'overlay',
269 'darken',
270 'lighten',
271 'color-dodge',
272 'saturation',
273 'color',
274 'difference',
275 'exclusion',
276 'hue',
277 'luminosity',
278 'soft-light',
279 'hard-light',
280 'color-burn',
281 ] )->description( 'Applied as mix-blend mode css effect.' ),
282 'box-shadow' => Box_Shadow_Prop_Type::make(),
283 'opacity' => Size_Prop_Type::make()
284 ->description( 'The opacity of the element, specified as a percentage between 0 (fully transparent) and 100 (fully opaque).' )
285 ->units( Size_Constants::opacity() )
286 ->default_unit( Size_Constants::UNIT_PERCENT ),
287 'filter' => Filter_Prop_Type::make(),
288 'backdrop-filter' => Backdrop_Filter_Prop_Type::make(),
289 'transform' => Transform_Prop_Type::make(),
290 'transition' => Transition_Prop_Type::make(),
291 ];
292 }
293
294 private static function get_layout_props() {
295 return [
296 'display' => String_Prop_Type::make()->enum( [
297 'block',
298 'inline',
299 'inline-block',
300 'flex',
301 'inline-flex',
302 'grid',
303 'inline-grid',
304 'flow-root',
305 'none',
306 'contents',
307 ] )->description( 'The CSS display property defines the display behavior (the type of rendering box) of an element.' ),
308 'flex-direction' => String_Prop_Type::make()
309 ->description( 'The direction of the contained items.' )
310 ->enum( [
311 'row',
312 'row-reverse',
313 'column',
314 'column-reverse',
315 ] ),
316 'gap' => Union_Prop_Type::make()
317 ->add_prop_type( Layout_Direction_Prop_Type::make() )
318 ->add_prop_type( Size_Prop_Type::make()->units( Size_Constants::layout() ) ),
319 'flex-wrap' => String_Prop_Type::make()->enum( [
320 'wrap',
321 'nowrap',
322 'wrap-reverse',
323 ] )->description( 'Specifies whether the flex items should wrap or not. CSS values: wrap, nowrap, wrap-reverse' ),
324 'flex' => Flex_Prop_Type::make(),
325 ];
326 }
327
328 private static function get_alignment_props() {
329 return [
330 'justify-content' => String_Prop_Type::make()->enum( [
331 'center',
332 'start',
333 'end',
334 'flex-start',
335 'flex-end',
336 'left',
337 'right',
338 'normal',
339 'space-between',
340 'space-around',
341 'space-evenly',
342 'stretch',
343 ] )
344 ->description( 'Defines how the browser distributes space between and around content items along the main-axis of a flex container. CSS values: center, start, end, flex-start, flex-end, left, right, normal, space-between, space-around, space-evenly, stretch' ),
345 'justify-items' => String_Prop_Type::make()->enum( [
346 'normal',
347 'stretch',
348 'center',
349 'start',
350 'end',
351 'flex-start',
352 'flex-end',
353 'left',
354 'right',
355 'anchor-center',
356 ] )->description( 'Defines how the browser distributes space between and around content items along the inline axis of a grid container. CSS values: center, start, end, flex-start, flex-end, left, right' ),
357 'align-content' => String_Prop_Type::make()->enum( [
358 'center',
359 'start',
360 'end',
361 'space-between',
362 'space-around',
363 'space-evenly',
364 ] )
365 ->description( 'Aligns a flex container\'s lines within when there is extra space in the cross-axis. CSS values: center, start, end, space-between, space-around, space-evenly' ),
366 'align-items' => String_Prop_Type::make()->enum( [
367 'normal',
368 'stretch',
369 'center',
370 'start',
371 'end',
372 'flex-start',
373 'flex-end',
374 'self-start',
375 'self-end',
376 'anchor-center',
377 ] )->description( 'Defines the default behavior for how flex items are laid out along the cross axis on the current line. CSS values: normal, stretch, center, start, end, flex-start, flex-end, self-start, self-end, anchor-center' ),
378 'align-self' => String_Prop_Type::make()->enum( [
379 'auto',
380 'normal',
381 'center',
382 'start',
383 'end',
384 'self-start',
385 'self-end',
386 'flex-start',
387 'flex-end',
388 'anchor-center',
389 'baseline',
390 'first baseline',
391 'last baseline',
392 'stretch',
393 ] )->description( 'Allows the default alignment (or the one specified by align-items) to be overridden for individual flex items. CSS values: auto, normal, center, start, end, self-start, self-end, flex-start, flex-end, anchor-center, baseline, first baseline, last baseline, stretch' ),
394 'order' => Number_Prop_Type::make()->description( 'Specifies the order of the flex items. Items with lower order values are displayed first.' ),
395 ];
396 }
397
398 private static function get_special_props() {
399 return [
400 'content' => String_Prop_Type::make()->description( 'The string content for pseudo-element content property' ),
401 'appearance' => String_Prop_Type::make()->enum( [ 'none', 'auto' ] )->description( 'The appearance of the element. CSS values: none, auto' ),
402 'clip-path' => String_Prop_Type::make()->description( 'The clip-path CSS property defines a shape to be used as clipping region.' ),
403 ];
404 }
405 }
406