PluginProbe
Elementor Website Builder – more than just a page builder / 3.32.2
Elementor Website Builder – more than just a page builder v3.32.2
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 3.32.2, at modules/atomic-widgets/styles/style-schema.php

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