1use stylex_structures::order_pair::OrderPair;
2
3#[derive(Debug, PartialEq, Eq, Clone, Hash)]
4pub struct Shorthands;
5
6impl Shorthands {
7 fn all(_: Option<String>) -> Result<Vec<OrderPair>, String> {
8 Err("all is not supported".into())
9 }
10 fn animation(value: Option<String>) -> Result<Vec<OrderPair>, String> {
11 let mut result = vec![
12 OrderPair("animation".to_string(), value),
13 OrderPair("animationComposition".to_string(), None),
14 OrderPair("animationName".to_string(), None),
15 OrderPair("animationDuration".to_string(), None),
16 OrderPair("animationTimingFunction".to_string(), None),
17 OrderPair("animationDelay".to_string(), None),
18 OrderPair("animationIterationCount".to_string(), None),
19 OrderPair("animationDirection".to_string(), None),
20 OrderPair("animationFillMode".to_string(), None),
21 OrderPair("animationPlayState".to_string(), None),
22 OrderPair("animationTimeline".to_string(), None),
23 ];
24
25 result.extend(Shorthands::animation_range(None)?);
26
27 Ok(result)
28 }
29
30 fn animation_range(value: Option<String>) -> Result<Vec<OrderPair>, String> {
31 let result = vec![
32 OrderPair("animationRange".to_string(), value),
33 OrderPair("animationRangeEnd".to_string(), None),
34 OrderPair("animationRangeStart".to_string(), None),
35 ];
36
37 Ok(result)
38 }
39
40 fn background(value: Option<String>) -> Result<Vec<OrderPair>, String> {
41 let mut result = vec![
42 OrderPair("background".to_string(), value),
43 OrderPair("backgroundAttachment".to_string(), None),
44 OrderPair("backgroundClip".to_string(), None),
45 OrderPair("backgroundColor".to_string(), None),
46 OrderPair("backgroundImage".to_string(), None),
47 OrderPair("backgroundOrigin".to_string(), None),
48 OrderPair("backgroundRepeat".to_string(), None),
49 OrderPair("backgroundSize".to_string(), None),
50 ];
51
52 result.extend(Shorthands::background_position(None)?);
53
54 Ok(result)
55 }
56
57 fn background_position(value: Option<String>) -> Result<Vec<OrderPair>, String> {
58 let result = vec![
59 OrderPair("backgroundPosition".to_string(), value),
60 OrderPair("backgroundPositionX".to_string(), None),
61 OrderPair("backgroundPositionY".to_string(), None),
62 ];
63
64 Ok(result)
65 }
66
67 fn border(value: Option<String>) -> Result<Vec<OrderPair>, String> {
70 let mut result = vec![OrderPair("border".to_string(), value)];
71
72 result.extend(Shorthands::border_width(None)?);
73 result.extend(Shorthands::border_style(None)?);
74 result.extend(Shorthands::border_color(None)?);
75
76 Ok(result)
77 }
78 fn border_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
79 let mut result = vec![OrderPair("borderInline".to_string(), value)];
80
81 result.extend(Shorthands::border_inline_width(None)?);
82 result.extend(Shorthands::border_inline_style(None)?);
83 result.extend(Shorthands::border_inline_color(None)?);
84
85 Ok(result)
86 }
87 fn border_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
88 let mut result = vec![OrderPair("borderBlock".to_string(), value)];
89
90 result.extend(Shorthands::border_block_width(None)?);
91 result.extend(Shorthands::border_block_style(None)?);
92 result.extend(Shorthands::border_block_color(None)?);
93
94 Ok(result)
95 }
96
97 fn border_top(value: Option<String>) -> Result<Vec<OrderPair>, String> {
98 let result = vec![
99 OrderPair("borderTop".to_string(), value),
100 OrderPair("borderTopWidth".to_string(), None),
101 OrderPair("borderTopStyle".to_string(), None),
102 OrderPair("borderTopColor".to_string(), None),
103 ];
104
105 Ok(result)
106 }
107 fn border_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
109 let mut result = vec![OrderPair("borderInlineEnd".to_string(), value)];
110
111 result.extend(Shorthands::border_inline_end_width(None)?);
112 result.extend(Shorthands::border_inline_end_style(None)?);
113 result.extend(Shorthands::border_inline_end_color(None)?);
114
115 Ok(result)
116 }
117 fn border_right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
119 let mut result = vec![OrderPair("borderRight".to_string(), value)];
120
121 result.extend(Shorthands::border_right_width(None)?);
122 result.extend(Shorthands::border_right_style(None)?);
123 result.extend(Shorthands::border_right_color(None)?);
124
125 Ok(result)
126 }
127 fn border_bottom(value: Option<String>) -> Result<Vec<OrderPair>, String> {
129 let result = vec![
130 OrderPair("borderBottom".to_string(), value),
131 OrderPair("borderBottomWidth".to_string(), None),
132 OrderPair("borderBottomStyle".to_string(), None),
133 OrderPair("borderBottomColor".to_string(), None),
134 ];
135
136 Ok(result)
137 }
138 fn border_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
140 let mut result = vec![OrderPair("borderInlineStart".to_string(), value)];
141
142 result.extend(Shorthands::border_inline_start_width(None)?);
143 result.extend(Shorthands::border_inline_start_style(None)?);
144 result.extend(Shorthands::border_inline_start_color(None)?);
145
146 Ok(result)
147 }
148 fn border_left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
150 let mut result = vec![OrderPair("borderLeft".to_string(), value)];
151
152 result.extend(Shorthands::border_left_width(None)?);
153 result.extend(Shorthands::border_left_style(None)?);
154 result.extend(Shorthands::border_left_color(None)?);
155
156 Ok(result)
157 }
158 fn border_inline_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
159 let result = vec![
160 OrderPair("borderInlineWidth".to_string(), value),
161 OrderPair("borderInlineStartWidth".to_string(), None),
162 OrderPair("borderLeftWidth".to_string(), None),
163 OrderPair("borderInlineEndWidth".to_string(), None),
164 OrderPair("borderRightWidth".to_string(), None),
165 ];
166
167 Ok(result)
168 }
169 fn border_inline_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
170 let result = vec![
171 OrderPair("borderInlineStyle".to_string(), value),
172 OrderPair("borderInlineStartStyle".to_string(), None),
173 OrderPair("borderLeftStyle".to_string(), None),
174 OrderPair("borderInlineEndStyle".to_string(), None),
175 OrderPair("borderRightStyle".to_string(), None),
176 ];
177
178 Ok(result)
179 }
180 fn border_inline_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
181 let result = vec![
182 OrderPair("borderInlineColor".to_string(), value),
183 OrderPair("borderInlineStartColor".to_string(), None),
184 OrderPair("borderLeftColor".to_string(), None),
185 OrderPair("borderInlineEndColor".to_string(), None),
186 OrderPair("borderRightColor".to_string(), None),
187 ];
188
189 Ok(result)
190 }
191 fn border_block_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
192 let result = vec![
193 OrderPair("borderBlockWidth".to_string(), value),
194 OrderPair("borderTopWidth".to_string(), None),
195 OrderPair("borderBottomWidth".to_string(), None),
196 ];
197
198 Ok(result)
199 }
200 fn border_block_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
201 let result = vec![
202 OrderPair("borderBlockStyle".to_string(), value),
203 OrderPair("borderTopStyle".to_string(), None),
204 OrderPair("borderBottomStyle".to_string(), None),
205 ];
206
207 Ok(result)
208 }
209 fn border_block_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
210 let result = vec![
211 OrderPair("borderBlockColor".to_string(), value),
212 OrderPair("borderTopColor".to_string(), None),
213 OrderPair("borderBottomColor".to_string(), None),
214 ];
215
216 Ok(result)
217 }
218 fn border_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
219 let mut result = vec![OrderPair("borderColor".to_string(), value)];
220
221 result.extend(Shorthands::border_inline_color(None)?);
222 result.extend(Shorthands::border_block_color(None)?);
223
224 Ok(result)
225 }
226 fn border_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
227 let mut result = vec![OrderPair("borderStyle".to_string(), value)];
228
229 result.extend(Shorthands::border_inline_style(None)?);
230 result.extend(Shorthands::border_block_style(None)?);
231
232 Ok(result)
233 }
234 fn border_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
235 let mut result = vec![OrderPair("borderWidth".to_string(), value)];
236
237 result.extend(Shorthands::border_inline_width(None)?);
238 result.extend(Shorthands::border_block_width(None)?);
239
240 Ok(result)
241 }
242 fn border_inline_start_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
243 let result = vec![
244 OrderPair("borderInlineStartColor".to_string(), value),
245 OrderPair("borderLeftColor".to_string(), None),
246 OrderPair("borderRightColor".to_string(), None),
247 ];
248
249 Ok(result)
250 }
251 fn border_inline_end_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
252 let result = vec![
253 OrderPair("borderInlineEndColor".to_string(), value),
254 OrderPair("borderLeftColor".to_string(), None),
255 OrderPair("borderRightColor".to_string(), None),
256 ];
257
258 Ok(result)
259 }
260 fn border_inline_start_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
261 let result = vec![
262 OrderPair("borderInlineStartStyle".to_string(), value),
263 OrderPair("borderLeftStyle".to_string(), None),
264 OrderPair("borderRightStyle".to_string(), None),
265 ];
266
267 Ok(result)
268 }
269 fn border_inline_end_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
270 let result = vec![
271 OrderPair("borderInlineEndStyle".to_string(), value),
272 OrderPair("borderLeftStyle".to_string(), None),
273 OrderPair("borderRightStyle".to_string(), None),
274 ];
275
276 Ok(result)
277 }
278 fn border_inline_start_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
279 let result = vec![
280 OrderPair("borderInlineStartWidth".to_string(), value),
281 OrderPair("borderLeftWidth".to_string(), None),
282 OrderPair("borderRightWidth".to_string(), None),
283 ];
284
285 Ok(result)
286 }
287 fn border_inline_end_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
288 let result = vec![
289 OrderPair("borderInlineEndWidth".to_string(), value),
290 OrderPair("borderLeftWidth".to_string(), None),
291 OrderPair("borderRightWidth".to_string(), None),
292 ];
293
294 Ok(result)
295 }
296 fn border_left_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
297 let result = vec![
298 OrderPair("borderLeftColor".to_string(), value),
299 OrderPair("borderInlineStartColor".to_string(), None),
300 OrderPair("borderInlineEndColor".to_string(), None),
301 ];
302
303 Ok(result)
304 }
305 fn border_right_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
306 let result = vec![
307 OrderPair("borderRightColor".to_string(), value),
308 OrderPair("borderInlineStartColor".to_string(), None),
309 OrderPair("borderInlineEndColor".to_string(), None),
310 ];
311
312 Ok(result)
313 }
314 fn border_left_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
315 let result = vec![
316 OrderPair("borderLeftStyle".to_string(), value),
317 OrderPair("borderInlineStartStyle".to_string(), None),
318 OrderPair("borderInlineEndStyle".to_string(), None),
319 ];
320
321 Ok(result)
322 }
323 fn border_right_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
324 let result = vec![
325 OrderPair("borderRightStyle".to_string(), value),
326 OrderPair("borderInlineStartStyle".to_string(), None),
327 OrderPair("borderInlineEndStyle".to_string(), None),
328 ];
329
330 Ok(result)
331 }
332 fn border_left_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
333 let result = vec![
334 OrderPair("borderLeftWidth".to_string(), value),
335 OrderPair("borderInlineStartWidth".to_string(), None),
336 OrderPair("borderInlineEndWidth".to_string(), None),
337 ];
338
339 Ok(result)
340 }
341 fn border_right_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
342 let result = vec![
343 OrderPair("borderRightWidth".to_string(), value),
344 OrderPair("borderInlineStartWidth".to_string(), None),
345 OrderPair("borderInlineEndWidth".to_string(), None),
346 ];
347
348 Ok(result)
349 }
350
351 fn border_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
352 let result = vec![
353 OrderPair("borderRadius".to_string(), value),
354 OrderPair("borderStartStartRadius".to_string(), None),
356 OrderPair("borderStartEndRadius".to_string(), None),
357 OrderPair("borderEndStartRadius".to_string(), None),
358 OrderPair("borderEndEndRadius".to_string(), None),
359 OrderPair("borderTopLeftRadius".to_string(), None),
361 OrderPair("borderTopRightRadius".to_string(), None),
362 OrderPair("borderBottomLeftRadius".to_string(), None),
363 OrderPair("borderBottomRightRadius".to_string(), None),
364 ];
365
366 Ok(result)
367 }
368
369 fn border_start_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
370 let result = vec![
371 OrderPair("borderStartStartRadius".to_string(), value),
372 OrderPair("borderTopLeftRadius".to_string(), None),
373 OrderPair("borderTopRightRadius".to_string(), None),
374 ];
375
376 Ok(result)
377 }
378 fn border_start_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
379 let result = vec![
380 OrderPair("borderStartEndRadius".to_string(), value),
381 OrderPair("borderTopLeftRadius".to_string(), None),
382 OrderPair("borderTopRightRadius".to_string(), None),
383 ];
384
385 Ok(result)
386 }
387 fn border_end_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
388 let result = vec![
389 OrderPair("borderEndStartRadius".to_string(), value),
390 OrderPair("borderBottomLeftRadius".to_string(), None),
391 OrderPair("borderBottomRightRadius".to_string(), None),
392 ];
393
394 Ok(result)
395 }
396 fn border_end_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
397 let result = vec![
398 OrderPair("borderEndEndRadius".to_string(), value),
399 OrderPair("borderBottomLeftRadius".to_string(), None),
400 OrderPair("borderBottomRightRadius".to_string(), None),
401 ];
402
403 Ok(result)
404 }
405 fn border_top_left_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
406 let result = vec![
407 OrderPair("borderTopLeftRadius".to_string(), value),
408 OrderPair("borderStartStartRadius".to_string(), None),
409 OrderPair("borderStartEndRadius".to_string(), None),
410 ];
411
412 Ok(result)
413 }
414 fn border_top_right_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
415 let result = vec![
416 OrderPair("borderTopRightRadius".to_string(), value),
417 OrderPair("borderStartStartRadius".to_string(), None),
418 OrderPair("borderStartEndRadius".to_string(), None),
419 ];
420
421 Ok(result)
422 }
423 fn border_bottom_left_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
424 let result = vec![
425 OrderPair("borderBottomLeftRadius".to_string(), value),
426 OrderPair("borderEndStartRadius".to_string(), None),
427 OrderPair("borderEndEndRadius".to_string(), None),
428 ];
429
430 Ok(result)
431 }
432 fn border_bottom_right_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
433 let result = vec![
434 OrderPair("borderBottomRightRadius".to_string(), value),
435 OrderPair("borderEndStartRadius".to_string(), None),
436 OrderPair("borderEndEndRadius".to_string(), None),
437 ];
438
439 Ok(result)
440 }
441
442 fn corner_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
443 let result = vec![
444 OrderPair("cornerShape".to_string(), value),
445 OrderPair("cornerStartStartShape".to_string(), None),
446 OrderPair("cornerStartEndShape".to_string(), None),
447 OrderPair("cornerEndStartShape".to_string(), None),
448 OrderPair("cornerEndEndShape".to_string(), None),
449 OrderPair("cornerTopLeftShape".to_string(), None),
450 OrderPair("cornerTopRightShape".to_string(), None),
451 OrderPair("cornerBottomLeftShape".to_string(), None),
452 OrderPair("cornerBottomRightShape".to_string(), None),
453 ];
454
455 Ok(result)
456 }
457
458 fn corner_start_start_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
459 let result = vec![
460 OrderPair("cornerStartStartShape".to_string(), value),
461 OrderPair("cornerTopLeftShape".to_string(), None),
462 OrderPair("cornerTopRightShape".to_string(), None),
463 ];
464
465 Ok(result)
466 }
467
468 fn corner_start_end_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
469 let result = vec![
470 OrderPair("cornerStartEndShape".to_string(), value),
471 OrderPair("cornerTopLeftShape".to_string(), None),
472 OrderPair("cornerTopRightShape".to_string(), None),
473 ];
474
475 Ok(result)
476 }
477
478 fn corner_end_start_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
479 let result = vec![
480 OrderPair("cornerEndStartShape".to_string(), value),
481 OrderPair("cornerBottomLeftShape".to_string(), None),
482 OrderPair("cornerBottomRightShape".to_string(), None),
483 ];
484
485 Ok(result)
486 }
487
488 fn corner_end_end_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
489 let result = vec![
490 OrderPair("cornerEndEndShape".to_string(), value),
491 OrderPair("cornerBottomLeftShape".to_string(), None),
492 OrderPair("cornerBottomRightShape".to_string(), None),
493 ];
494
495 Ok(result)
496 }
497
498 fn corner_top_left_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
499 let result = vec![
500 OrderPair("cornerTopLeftShape".to_string(), value),
501 OrderPair("cornerStartStartShape".to_string(), None),
502 OrderPair("cornerStartEndShape".to_string(), None),
503 ];
504
505 Ok(result)
506 }
507
508 fn corner_top_right_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
509 let result = vec![
510 OrderPair("cornerTopRightShape".to_string(), value),
511 OrderPair("cornerStartStartShape".to_string(), None),
512 OrderPair("cornerStartEndShape".to_string(), None),
513 ];
514
515 Ok(result)
516 }
517
518 fn corner_bottom_left_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
519 let result = vec![
520 OrderPair("cornerBottomLeftShape".to_string(), value),
521 OrderPair("cornerEndStartShape".to_string(), None),
522 OrderPair("cornerEndEndShape".to_string(), None),
523 ];
524
525 Ok(result)
526 }
527
528 fn corner_bottom_right_shape(value: Option<String>) -> Result<Vec<OrderPair>, String> {
529 let result = vec![
530 OrderPair("cornerBottomRightShape".to_string(), value),
531 OrderPair("cornerEndStartShape".to_string(), None),
532 OrderPair("cornerEndEndShape".to_string(), None),
533 ];
534
535 Ok(result)
536 }
537
538 fn border_image(value: Option<String>) -> Result<Vec<OrderPair>, String> {
539 let result = vec![
540 OrderPair("borderImage".to_string(), value),
541 OrderPair("borderImageOutset".to_string(), None),
542 OrderPair("borderImageRepeat".to_string(), None),
543 OrderPair("borderImageSlice".to_string(), None),
544 OrderPair("borderImageSource".to_string(), None),
545 OrderPair("borderImageWidth".to_string(), None),
546 ];
547
548 Ok(result)
549 }
550
551 fn column_rule(value: Option<String>) -> Result<Vec<OrderPair>, String> {
552 let result = vec![
553 OrderPair("columnRule".to_string(), value),
554 OrderPair("columnRuleColor".to_string(), None),
555 OrderPair("columnRuleStyle".to_string(), None),
556 OrderPair("columnRuleWidth".to_string(), None),
557 ];
558
559 Ok(result)
560 }
561 fn columns(value: Option<String>) -> Result<Vec<OrderPair>, String> {
562 let result = vec![
563 OrderPair("columns".to_string(), value),
564 OrderPair("columnCount".to_string(), None),
565 OrderPair("columnWidth".to_string(), None),
566 ];
567
568 Ok(result)
569 }
570
571 fn container(value: Option<String>) -> Result<Vec<OrderPair>, String> {
572 let result = vec![
573 OrderPair("container".to_string(), value),
574 OrderPair("containerName".to_string(), None),
575 OrderPair("containerType".to_string(), None),
576 ];
577
578 Ok(result)
579 }
580
581 fn contain_intrinsic_size(value: Option<String>) -> Result<Vec<OrderPair>, String> {
582 let result = vec![
583 OrderPair("containIntrinsicSize".to_string(), value),
584 OrderPair("containIntrinsicWidth".to_string(), None),
585 OrderPair("containIntrinsicHeight".to_string(), None),
586 ];
587
588 Ok(result)
589 }
590
591 fn flex(value: Option<String>) -> Result<Vec<OrderPair>, String> {
592 let result = vec![
593 OrderPair("flex".to_string(), value),
594 OrderPair("flexGrow".to_string(), None),
595 OrderPair("flexShrink".to_string(), None),
596 OrderPair("flexBasis".to_string(), None),
597 ];
598
599 Ok(result)
600 }
601 fn flex_flow(value: Option<String>) -> Result<Vec<OrderPair>, String> {
602 let result = vec![
603 OrderPair("flexFlow".to_string(), value),
604 OrderPair("flexDirection".to_string(), None),
605 OrderPair("flexWrap".to_string(), None),
606 ];
607
608 Ok(result)
609 }
610 fn font(value: Option<String>) -> Result<Vec<OrderPair>, String> {
612 let mut result = vec![
613 OrderPair("font".to_string(), value),
614 OrderPair("fontFamily".to_string(), None),
615 OrderPair("fontSize".to_string(), None),
616 OrderPair("fontStretch".to_string(), None),
617 OrderPair("fontStyle".to_string(), None),
618 OrderPair("fontWeight".to_string(), None),
619 OrderPair("lineHeight".to_string(), None),
620 ];
621
622 result.extend(Shorthands::font_variant(None)?);
623
624 Ok(result)
625 }
626 fn font_variant(value: Option<String>) -> Result<Vec<OrderPair>, String> {
627 let result = vec![
628 OrderPair("fontVariant".to_string(), value),
629 OrderPair("fontVariantAlternates".to_string(), None),
630 OrderPair("fontVariantCaps".to_string(), None),
631 OrderPair("fontVariantEastAsian".to_string(), None),
632 OrderPair("fontVariantEmoji".to_string(), None),
633 OrderPair("fontVariantLigatures".to_string(), None),
634 OrderPair("fontVariantNumeric".to_string(), None),
635 OrderPair("fontVariantPosition".to_string(), None),
636 ];
637
638 Ok(result)
639 }
640 fn gap(value: Option<String>) -> Result<Vec<OrderPair>, String> {
641 let result = vec![
642 OrderPair("gap".to_string(), value),
643 OrderPair("rowGap".to_string(), None),
644 OrderPair("columnGap".to_string(), None),
645 ];
646
647 Ok(result)
648 }
649 fn grid(value: Option<String>) -> Result<Vec<OrderPair>, String> {
650 let mut result = vec![
651 OrderPair("grid".to_string(), value),
652 OrderPair("gridAutoRows".to_string(), None),
653 OrderPair("gridAutoColumns".to_string(), None),
654 OrderPair("gridAutoFlow".to_string(), None),
655 ];
656
657 result.extend(Shorthands::grid_template(None)?);
658
659 Ok(result)
660 }
661 fn grid_area(value: Option<String>) -> Result<Vec<OrderPair>, String> {
662 let result = vec![
663 OrderPair("gridArea".to_string(), value),
664 OrderPair("gridRow".to_string(), None),
665 OrderPair("gridRowStart".to_string(), None),
666 OrderPair("gridRowEnd".to_string(), None),
667 OrderPair("gridColumn".to_string(), None),
668 OrderPair("gridColumnStart".to_string(), None),
669 OrderPair("gridColumnEnd".to_string(), None),
670 ];
671
672 Ok(result)
673 }
674 fn grid_row(value: Option<String>) -> Result<Vec<OrderPair>, String> {
675 let result = vec![
676 OrderPair("gridRow".to_string(), value),
677 OrderPair("gridRowStart".to_string(), None),
678 OrderPair("gridRowEnd".to_string(), None),
679 ];
680
681 Ok(result)
682 }
683 fn grid_column(value: Option<String>) -> Result<Vec<OrderPair>, String> {
684 let result = vec![
685 OrderPair("gridColumn".to_string(), value),
686 OrderPair("gridColumnStart".to_string(), None),
687 OrderPair("gridColumnEnd".to_string(), None),
688 ];
689
690 Ok(result)
691 }
692 fn grid_template(value: Option<String>) -> Result<Vec<OrderPair>, String> {
693 let result = vec![
694 OrderPair("gridTemplate".to_string(), value),
695 OrderPair("gridTemplateAreas".to_string(), None),
696 OrderPair("gridTemplateColumns".to_string(), None),
697 OrderPair("gridTemplateRows".to_string(), None),
698 ];
699
700 Ok(result)
701 }
702 fn inset(value: Option<String>) -> Result<Vec<OrderPair>, String> {
703 let mut result = vec![OrderPair("inset".to_string(), value)];
704
705 result.extend(Shorthands::inset_inline(None)?);
706 result.extend(Shorthands::inset_block(None)?);
707
708 Ok(result)
709 }
710 fn inset_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
711 let result = vec![
712 OrderPair("insetInline".to_string(), value),
713 OrderPair("insetInlineStart".to_string(), None),
714 OrderPair("insetInlineEnd".to_string(), None),
715 OrderPair("left".to_string(), None),
716 OrderPair("right".to_string(), None),
717 ];
718
719 Ok(result)
720 }
721 fn inset_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
722 let result = vec![
723 OrderPair("insetBlock".to_string(), value),
724 OrderPair("top".to_string(), None),
725 OrderPair("bottom".to_string(), None),
726 ];
727
728 Ok(result)
729 }
730 fn inset_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
731 let result = vec![
732 OrderPair("insetInlineStart".to_string(), value),
733 OrderPair("left".to_string(), None),
734 OrderPair("right".to_string(), None),
735 ];
736
737 Ok(result)
738 }
739 fn inset_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
740 let result = vec![
741 OrderPair("insetInlineEnd".to_string(), value),
742 OrderPair("left".to_string(), None),
743 OrderPair("right".to_string(), None),
744 ];
745
746 Ok(result)
747 }
748 fn left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
749 let result = vec![
750 OrderPair("left".to_string(), value),
751 OrderPair("insetInlineStart".to_string(), None),
752 OrderPair("insetInlineEnd".to_string(), None),
753 ];
754
755 Ok(result)
756 }
757 fn right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
758 let result = vec![
759 OrderPair("right".to_string(), value),
760 OrderPair("insetInlineStart".to_string(), None),
761 OrderPair("insetInlineEnd".to_string(), None),
762 ];
763
764 Ok(result)
765 }
766
767 fn list_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
768 let result = vec![
769 OrderPair("listStyle".to_string(), value),
770 OrderPair("listStyleImage".to_string(), None),
771 OrderPair("listStylePosition".to_string(), None),
772 OrderPair("listStyleType".to_string(), None),
773 ];
774
775 Ok(result)
776 }
777
778 fn margin(value: Option<String>) -> Result<Vec<OrderPair>, String> {
779 let mut result = vec![OrderPair("margin".to_string(), value)];
780
781 result.extend(Shorthands::margin_inline(None)?);
782 result.extend(Shorthands::margin_block(None)?);
783
784 Ok(result)
785 }
786 fn margin_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
787 let result = vec![
788 OrderPair("marginInline".to_string(), value),
789 OrderPair("marginInlineStart".to_string(), None),
790 OrderPair("marginLeft".to_string(), None),
791 OrderPair("marginInlineEnd".to_string(), None),
792 OrderPair("marginRight".to_string(), None),
793 ];
794
795 Ok(result)
796 }
797 fn margin_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
798 let result = vec![
799 OrderPair("marginBlock".to_string(), value),
800 OrderPair("marginTop".to_string(), None),
801 OrderPair("marginBottom".to_string(), None),
802 ];
803
804 Ok(result)
805 }
806 fn margin_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
807 let result = vec![
808 OrderPair("marginInlineStart".to_string(), value),
809 OrderPair("marginLeft".to_string(), None),
810 OrderPair("marginRight".to_string(), None),
811 ];
812
813 Ok(result)
814 }
815 fn margin_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
816 let result = vec![
817 OrderPair("marginInlineEnd".to_string(), value),
818 OrderPair("marginLeft".to_string(), None),
819 OrderPair("marginRight".to_string(), None),
820 ];
821
822 Ok(result)
823 }
824 fn margin_left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
825 let result = vec![
826 OrderPair("marginLeft".to_string(), value),
827 OrderPair("marginInlineStart".to_string(), None),
828 OrderPair("marginInlineEnd".to_string(), None),
829 ];
830
831 Ok(result)
832 }
833 fn margin_right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
834 let result = vec![
835 OrderPair("marginRight".to_string(), value),
836 OrderPair("marginInlineStart".to_string(), None),
837 OrderPair("marginInlineEnd".to_string(), None),
838 ];
839
840 Ok(result)
841 }
842
843 fn mask(value: Option<String>) -> Result<Vec<OrderPair>, String> {
844 let result = vec![
845 OrderPair("mask".to_string(), value),
846 OrderPair("maskClip".to_string(), None),
847 OrderPair("maskComposite".to_string(), None),
848 OrderPair("maskImage".to_string(), None),
849 OrderPair("maskMode".to_string(), None),
850 OrderPair("maskOrigin".to_string(), None),
851 OrderPair("maskPosition".to_string(), None),
852 OrderPair("maskRepeat".to_string(), None),
853 OrderPair("maskSize".to_string(), None),
854 ];
855
856 Ok(result)
857 }
858
859 fn mask_border(value: Option<String>) -> Result<Vec<OrderPair>, String> {
860 let result = vec![
861 OrderPair("maskBorder".to_string(), value),
862 OrderPair("maskBorderMode".to_string(), None),
863 OrderPair("maskBorderOutset".to_string(), None),
864 OrderPair("maskBorderRepeat".to_string(), None),
865 OrderPair("maskBorderSlice".to_string(), None),
866 OrderPair("maskBorderSource".to_string(), None),
867 OrderPair("maskBorderWidth".to_string(), None),
868 ];
869
870 Ok(result)
871 }
872
873 fn offset(value: Option<String>) -> Result<Vec<OrderPair>, String> {
874 let result = vec![
875 OrderPair("offset".to_string(), value),
876 OrderPair("offsetAnchor".to_string(), None),
877 OrderPair("offsetDistance".to_string(), None),
878 OrderPair("offsetPath".to_string(), None),
879 OrderPair("offsetPosition".to_string(), None),
880 OrderPair("offsetRotate".to_string(), None),
881 ];
882
883 Ok(result)
884 }
885
886 fn outline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
887 let result = vec![
888 OrderPair("outline".to_string(), value),
889 OrderPair("outlineColor".to_string(), None),
890 OrderPair("outlineOffset".to_string(), None),
891 OrderPair("outlineStyle".to_string(), None),
892 OrderPair("outlineWidth".to_string(), None),
893 ];
894
895 Ok(result)
896 }
897
898 fn overflow(value: Option<String>) -> Result<Vec<OrderPair>, String> {
899 let result = vec![
900 OrderPair("overflow".to_string(), value),
901 OrderPair("overflowX".to_string(), None),
902 OrderPair("overflowY".to_string(), None),
903 ];
904
905 Ok(result)
906 }
907
908 fn padding(value: Option<String>) -> Result<Vec<OrderPair>, String> {
909 let mut result = vec![OrderPair("padding".to_string(), value)];
910
911 result.extend(Shorthands::padding_inline(None)?);
912 result.extend(Shorthands::padding_block(None)?);
913
914 Ok(result)
915 }
916
917 fn padding_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
918 let result = vec![
919 OrderPair("paddingInline".to_string(), value),
920 OrderPair("paddingStart".to_string(), None),
921 OrderPair("paddingLeft".to_string(), None),
922 OrderPair("paddingEnd".to_string(), None),
923 OrderPair("paddingRight".to_string(), None),
924 ];
925
926 Ok(result)
927 }
928 fn padding_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
929 let result = vec![
930 OrderPair("paddingBlock".to_string(), value),
931 OrderPair("paddingTop".to_string(), None),
932 OrderPair("paddingBottom".to_string(), None),
933 ];
934
935 Ok(result)
936 }
937 fn padding_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
938 let result = vec![
939 OrderPair("paddingInlineStart".to_string(), value),
940 OrderPair("paddingLeft".to_string(), None),
941 OrderPair("paddingRight".to_string(), None),
942 ];
943
944 Ok(result)
945 }
946 fn padding_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
947 let result = vec![
948 OrderPair("paddingInlineEnd".to_string(), value),
949 OrderPair("paddingLeft".to_string(), None),
950 OrderPair("paddingRight".to_string(), None),
951 ];
952
953 Ok(result)
954 }
955 fn padding_left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
956 let result = vec![
957 OrderPair("paddingLeft".to_string(), value),
958 OrderPair("paddingInlineStart".to_string(), None),
959 OrderPair("paddingInlineEnd".to_string(), None),
960 ];
961
962 Ok(result)
963 }
964 fn padding_right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
965 let result = vec![
966 OrderPair("paddingRight".to_string(), value),
967 OrderPair("paddingInlineStart".to_string(), None),
968 OrderPair("paddingInlineEnd".to_string(), None),
969 ];
970
971 Ok(result)
972 }
973 fn place_content(value: Option<String>) -> Result<Vec<OrderPair>, String> {
974 let result = vec![
975 OrderPair("placeContent".to_string(), value),
976 OrderPair("alignContent".to_string(), None),
977 OrderPair("justifyContent".to_string(), None),
978 ];
979
980 Ok(result)
981 }
982 fn place_items(value: Option<String>) -> Result<Vec<OrderPair>, String> {
983 let result = vec![
984 OrderPair("placeItems".to_string(), value),
985 OrderPair("alignItems".to_string(), None),
986 OrderPair("justifyItems".to_string(), None),
987 ];
988
989 Ok(result)
990 }
991 fn place_self(value: Option<String>) -> Result<Vec<OrderPair>, String> {
992 let result = vec![
993 OrderPair("placeSelf".to_string(), value),
994 OrderPair("alignSelf".to_string(), None),
995 OrderPair("justifySelf".to_string(), None),
996 ];
997
998 Ok(result)
999 }
1000 fn scroll_margin(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1001 let mut result = vec![OrderPair("scrollMargin".to_string(), value)];
1002
1003 result.extend(Shorthands::scroll_margin_inline(None)?);
1004 result.extend(Shorthands::scroll_margin_block(None)?);
1005
1006 Ok(result)
1007 }
1008 fn scroll_margin_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1009 let result = vec![
1010 OrderPair("scrollMarginBlock".to_string(), value),
1011 OrderPair("scrollMarginTop".to_string(), None),
1012 OrderPair("scrollMarginBottom".to_string(), None),
1013 ];
1014
1015 Ok(result)
1016 }
1017 fn scroll_margin_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1018 let result = vec![
1019 OrderPair("scrollMarginInline".to_string(), value),
1020 OrderPair("scrollMarginInlineStart".to_string(), None),
1021 OrderPair("scrollMarginInlineEnd".to_string(), None),
1022 OrderPair("scrollMarginLeft".to_string(), None),
1023 OrderPair("scrollMarginRight".to_string(), None),
1024 ];
1025
1026 Ok(result)
1027 }
1028 fn scroll_margin_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1029 let result = vec![
1030 OrderPair("scrollMarginInlineStart".to_string(), value),
1031 OrderPair("scrollMarginLeft".to_string(), None),
1032 OrderPair("scrollMarginRight".to_string(), None),
1033 ];
1034
1035 Ok(result)
1036 }
1037 fn scroll_margin_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1038 let result = vec![
1039 OrderPair("scrollMarginInlineEnd".to_string(), value),
1040 OrderPair("scrollMarginLeft".to_string(), None),
1041 OrderPair("scrollMarginRight".to_string(), None),
1042 ];
1043
1044 Ok(result)
1045 }
1046 fn scroll_margin_left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1047 let result = vec![
1048 OrderPair("scrollMarginLeft".to_string(), value),
1049 OrderPair("scrollMarginInlineStart".to_string(), None),
1050 OrderPair("scrollMarginInlineEnd".to_string(), None),
1051 ];
1052
1053 Ok(result)
1054 }
1055 fn scroll_margin_right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1056 let result = vec![
1057 OrderPair("scrollMarginRight".to_string(), value),
1058 OrderPair("scrollMarginInlineStart".to_string(), None),
1059 OrderPair("scrollMarginInlineEnd".to_string(), None),
1060 ];
1061
1062 Ok(result)
1063 }
1064 fn scroll_padding(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1065 let mut result = vec![OrderPair("scrollPadding".to_string(), value)];
1066
1067 result.extend(Shorthands::scroll_padding_block(None)?);
1068 result.extend(Shorthands::scroll_padding_inline(None)?);
1069
1070 Ok(result)
1071 }
1072 fn scroll_padding_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1073 let result = vec![
1074 OrderPair("scrollPaddingBlock".to_string(), value),
1075 OrderPair("scrollPaddingTop".to_string(), None),
1076 OrderPair("scrollPaddingBottom".to_string(), None),
1077 ];
1078
1079 Ok(result)
1080 }
1081 fn scroll_padding_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1082 let result = vec![
1083 OrderPair("scrollPaddingInline".to_string(), value),
1084 OrderPair("scrollPaddingInlineStart".to_string(), None),
1085 OrderPair("scrollPaddingInlineEnd".to_string(), None),
1086 OrderPair("scrollPaddingLeft".to_string(), None),
1087 OrderPair("scrollPaddingRight".to_string(), None),
1088 ];
1089
1090 Ok(result)
1091 }
1092 fn scroll_padding_inline_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1093 let result = vec![
1094 OrderPair("scrollPaddingInlineStart".to_string(), value),
1095 OrderPair("scrollPaddingLeft".to_string(), None),
1096 OrderPair("scrollPaddingRight".to_string(), None),
1097 ];
1098
1099 Ok(result)
1100 }
1101 fn scroll_padding_inline_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1102 let result = vec![
1103 OrderPair("scrollPaddingInlineEnd".to_string(), value),
1104 OrderPair("scrollPaddingLeft".to_string(), None),
1105 OrderPair("scrollPaddingRight".to_string(), None),
1106 ];
1107
1108 Ok(result)
1109 }
1110 fn scroll_padding_left(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1111 let result = vec![
1112 OrderPair("scrollPaddingLeft".to_string(), value),
1113 OrderPair("scrollPaddingInlineStart".to_string(), None),
1114 OrderPair("scrollPaddingInlineEnd".to_string(), None),
1115 ];
1116
1117 Ok(result)
1118 }
1119 fn scroll_padding_right(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1120 let result = vec![
1121 OrderPair("scrollPaddingRight".to_string(), value),
1122 OrderPair("scrollPaddingInlineStart".to_string(), None),
1123 OrderPair("scrollPaddingInlineEnd".to_string(), None),
1124 ];
1125
1126 Ok(result)
1127 }
1128 fn scroll_snap_type(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1129 let result = vec![
1130 OrderPair("scrollSnapType".to_string(), value),
1131 OrderPair("scrollSnapTypeX".to_string(), None),
1132 OrderPair("scrollSnapTypeY".to_string(), None),
1133 ];
1134
1135 Ok(result)
1136 }
1137 fn scroll_timeline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1138 let result = vec![
1139 OrderPair("scrollTimeline".to_string(), value),
1140 OrderPair("scrollTimelineName".to_string(), None),
1141 OrderPair("scrollTimelineAxis".to_string(), None),
1142 ];
1143
1144 Ok(result)
1145 }
1146 fn text_decoration(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1147 let result = vec![
1148 OrderPair("textDecoration".to_string(), value),
1149 OrderPair("textDecorationColor".to_string(), None),
1150 OrderPair("textDecorationLine".to_string(), None),
1151 OrderPair("textDecorationStyle".to_string(), None),
1152 OrderPair("textDecorationThickness".to_string(), None),
1153 ];
1154
1155 Ok(result)
1156 }
1157 fn text_emphasis(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1158 let result = vec![
1159 OrderPair("textEmphasis".to_string(), value),
1160 OrderPair("textEmphasisColor".to_string(), None),
1161 OrderPair("textEmphasisStyle".to_string(), None),
1162 ];
1163
1164 Ok(result)
1165 }
1166 fn transition(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1167 let result = vec![
1168 OrderPair("transition".to_string(), value),
1169 OrderPair("transitionBehavior".to_string(), None),
1170 OrderPair("transitionDelay".to_string(), None),
1171 OrderPair("transitionDuration".to_string(), None),
1172 OrderPair("transitionProperty".to_string(), None),
1173 OrderPair("transitionTimingFunction".to_string(), None),
1174 ];
1175
1176 Ok(result)
1177 }
1178
1179 pub fn get(name: &str) -> Option<fn(Option<String>) -> Result<Vec<OrderPair>, String>> {
1180 match name {
1181 "all" => Some(Shorthands::all),
1182 "animation" => Some(Shorthands::animation),
1183 "animationRange" => Some(Shorthands::animation_range),
1184 "background" => Some(Shorthands::background),
1185 "backgroundPosition" => Some(Shorthands::background_position),
1186 "border" => Some(Shorthands::border),
1187 "borderInline" => Some(Shorthands::border_inline),
1188 "borderBlock" => Some(Shorthands::border_block),
1189 "borderTop" => Some(Shorthands::border_top),
1190 "borderInlineEnd" => Some(Shorthands::border_inline_end),
1191 "borderRight" => Some(Shorthands::border_right),
1192 "borderBottom" => Some(Shorthands::border_bottom),
1193 "borderInlineStart" => Some(Shorthands::border_inline_start),
1194 "borderLeft" => Some(Shorthands::border_left),
1195 "borderInlineWidth" => Some(Shorthands::border_inline_width),
1196 "borderInlineStyle" => Some(Shorthands::border_inline_style),
1197 "borderInlineColor" => Some(Shorthands::border_inline_color),
1198 "borderBlockWidth" => Some(Shorthands::border_block_width),
1199 "borderBlockStyle" => Some(Shorthands::border_block_style),
1200 "borderBlockColor" => Some(Shorthands::border_block_color),
1201 "borderColor" => Some(Shorthands::border_color),
1202 "borderStyle" => Some(Shorthands::border_style),
1203 "borderWidth" => Some(Shorthands::border_width),
1204 "borderInlineStartColor" => Some(Shorthands::border_inline_start_color),
1205 "borderInlineEndColor" => Some(Shorthands::border_inline_end_color),
1206 "borderInlineStartStyle" => Some(Shorthands::border_inline_start_style),
1207 "borderInlineEndStyle" => Some(Shorthands::border_inline_end_style),
1208 "borderInlineStartWidth" => Some(Shorthands::border_inline_start_width),
1209 "borderInlineEndWidth" => Some(Shorthands::border_inline_end_width),
1210 "borderLeftColor" => Some(Shorthands::border_left_color),
1211 "borderRightColor" => Some(Shorthands::border_right_color),
1212 "borderLeftStyle" => Some(Shorthands::border_left_style),
1213 "borderRightStyle" => Some(Shorthands::border_right_style),
1214 "borderLeftWidth" => Some(Shorthands::border_left_width),
1215 "borderRightWidth" => Some(Shorthands::border_right_width),
1216 "borderRadius" => Some(Shorthands::border_radius),
1217 "borderStartStartRadius" => Some(Shorthands::border_start_start_radius),
1218 "borderStartEndRadius" => Some(Shorthands::border_start_end_radius),
1219 "borderEndStartRadius" => Some(Shorthands::border_end_start_radius),
1220 "borderEndEndRadius" => Some(Shorthands::border_end_end_radius),
1221 "borderTopLeftRadius" => Some(Shorthands::border_top_left_radius),
1222 "borderTopRightRadius" => Some(Shorthands::border_top_right_radius),
1223 "borderBottomLeftRadius" => Some(Shorthands::border_bottom_left_radius),
1224 "borderBottomRightRadius" => Some(Shorthands::border_bottom_right_radius),
1225 "cornerShape" => Some(Shorthands::corner_shape),
1226 "cornerStartStartShape" => Some(Shorthands::corner_start_start_shape),
1227 "cornerStartEndShape" => Some(Shorthands::corner_start_end_shape),
1228 "cornerEndStartShape" => Some(Shorthands::corner_end_start_shape),
1229 "cornerEndEndShape" => Some(Shorthands::corner_end_end_shape),
1230 "cornerTopLeftShape" => Some(Shorthands::corner_top_left_shape),
1231 "cornerTopRightShape" => Some(Shorthands::corner_top_right_shape),
1232 "cornerBottomLeftShape" => Some(Shorthands::corner_bottom_left_shape),
1233 "cornerBottomRightShape" => Some(Shorthands::corner_bottom_right_shape),
1234 "borderImage" => Some(Shorthands::border_image),
1235 "columnRule" => Some(Shorthands::column_rule),
1236 "columns" => Some(Shorthands::columns),
1237 "container" => Some(Shorthands::container),
1238 "containIntrinsicSize" => Some(Shorthands::contain_intrinsic_size),
1239 "flex" => Some(Shorthands::flex),
1240 "flexFlow" => Some(Shorthands::flex_flow),
1241 "font" => Some(Shorthands::font),
1242 "fontVariant" => Some(Shorthands::font_variant),
1243 "gap" => Some(Shorthands::gap),
1244 "grid" => Some(Shorthands::grid),
1245 "gridArea" => Some(Shorthands::grid_area),
1246 "gridRow" => Some(Shorthands::grid_row),
1247 "gridColumn" => Some(Shorthands::grid_column),
1248 "gridTemplate" => Some(Shorthands::grid_template),
1249 "inset" => Some(Shorthands::inset),
1250 "insetInline" => Some(Shorthands::inset_inline),
1251 "insetBlock" => Some(Shorthands::inset_block),
1252 "insetInlineStart" => Some(Shorthands::inset_inline_start),
1253 "insetInlineEnd" => Some(Shorthands::inset_inline_end),
1254 "left" => Some(Shorthands::left),
1255 "right" => Some(Shorthands::right),
1256 "listStyle" => Some(Shorthands::list_style),
1257 "margin" => Some(Shorthands::margin),
1258 "marginInline" => Some(Shorthands::margin_inline),
1259 "marginBlock" => Some(Shorthands::margin_block),
1260 "marginInlineStart" => Some(Shorthands::margin_inline_start),
1261 "marginInlineEnd" => Some(Shorthands::margin_inline_end),
1262 "marginLeft" => Some(Shorthands::margin_left),
1263 "marginRight" => Some(Shorthands::margin_right),
1264 "mask" => Some(Shorthands::mask),
1265 "maskBorder" => Some(Shorthands::mask_border),
1266 "offset" => Some(Shorthands::offset),
1267 "outline" => Some(Shorthands::outline),
1268 "overflow" => Some(Shorthands::overflow),
1269 "padding" => Some(Shorthands::padding),
1270 "paddingInline" => Some(Shorthands::padding_inline),
1271 "paddingBlock" => Some(Shorthands::padding_block),
1272 "paddingInlineStart" => Some(Shorthands::padding_inline_start),
1273 "paddingInlineEnd" => Some(Shorthands::padding_inline_end),
1274 "paddingLeft" => Some(Shorthands::padding_left),
1275 "paddingRight" => Some(Shorthands::padding_right),
1276 "placeContent" => Some(Shorthands::place_content),
1277 "placeItems" => Some(Shorthands::place_items),
1278 "placeSelf" => Some(Shorthands::place_self),
1279 "scrollMargin" => Some(Shorthands::scroll_margin),
1280 "scrollMarginBlock" => Some(Shorthands::scroll_margin_block),
1281 "scrollMarginInline" => Some(Shorthands::scroll_margin_inline),
1282 "scrollMarginInlineStart" => Some(Shorthands::scroll_margin_inline_start),
1283 "scrollMarginInlineEnd" => Some(Shorthands::scroll_margin_inline_end),
1284 "scrollMarginLeft" => Some(Shorthands::scroll_margin_left),
1285 "scrollMarginRight" => Some(Shorthands::scroll_margin_right),
1286 "scrollPadding" => Some(Shorthands::scroll_padding),
1287 "scrollPaddingBlock" => Some(Shorthands::scroll_padding_block),
1288 "scrollPaddingInline" => Some(Shorthands::scroll_padding_inline),
1289 "scrollPaddingInlineStart" => Some(Shorthands::scroll_padding_inline_start),
1290 "scrollPaddingInlineEnd" => Some(Shorthands::scroll_padding_inline_end),
1291 "scrollPaddingLeft" => Some(Shorthands::scroll_padding_left),
1292 "scrollPaddingRight" => Some(Shorthands::scroll_padding_right),
1293 "scrollSnapType" => Some(Shorthands::scroll_snap_type),
1294 "scrollTimeline" => Some(Shorthands::scroll_timeline),
1295 "textDecoration" => Some(Shorthands::text_decoration),
1296 "textEmphasis" => Some(Shorthands::text_emphasis),
1297 "transition" => Some(Shorthands::transition),
1298 _ => None,
1299 }
1300 }
1301}
1302
1303#[derive(Debug, PartialEq, Eq, Clone, Hash)]
1304pub struct Aliases;
1305
1306impl Aliases {
1307 #[allow(dead_code)]
1308 fn block_size(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1309 Ok(vec![OrderPair("height".to_string(), value)])
1310 }
1311
1312 fn height(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1313 Ok(vec![OrderPair("height".to_string(), value)])
1314 }
1315
1316 fn width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1317 Ok(vec![OrderPair("width".to_string(), value)])
1318 }
1319
1320 fn min_height(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1321 Ok(vec![OrderPair("minHeight".to_string(), value)])
1322 }
1323
1324 fn min_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1325 Ok(vec![OrderPair("minWidth".to_string(), value)])
1326 }
1327
1328 fn max_height(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1329 Ok(vec![OrderPair("maxHeight".to_string(), value)])
1330 }
1331
1332 fn max_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1333 Ok(vec![OrderPair("maxWidth".to_string(), value)])
1334 }
1335
1336 fn border_top_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1337 Ok(vec![OrderPair("borderTopColor".to_string(), value)])
1338 }
1339
1340 fn border_bottom_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1341 Ok(vec![OrderPair("borderBottomColor".to_string(), value)])
1342 }
1343
1344 fn border_top_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1345 Ok(vec![OrderPair("borderTopStyle".to_string(), value)])
1346 }
1347
1348 fn border_bottom_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1349 Ok(vec![OrderPair("borderBottomStyle".to_string(), value)])
1350 }
1351
1352 fn border_top_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1353 Ok(vec![OrderPair("borderTopWidth".to_string(), value)])
1354 }
1355
1356 fn border_bottom_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1357 Ok(vec![OrderPair("borderBottomWidth".to_string(), value)])
1358 }
1359
1360 fn border_start_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1361 Ok(vec![OrderPair("borderStartStartRadius".to_string(), value)])
1362 }
1363
1364 fn border_start_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1365 Ok(vec![OrderPair("borderStartEndRadius".to_string(), value)])
1366 }
1367
1368 fn border_end_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1369 Ok(vec![OrderPair("borderEndStartRadius".to_string(), value)])
1370 }
1371
1372 fn border_end_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1373 Ok(vec![OrderPair("borderEndEndRadius".to_string(), value)])
1374 }
1375
1376 fn contain_intrinsic_height(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1377 Ok(vec![OrderPair("containIntrinsicHeight".to_string(), value)])
1378 }
1379
1380 fn contain_intrinsic_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1381 Ok(vec![OrderPair("containIntrinsicWidth".to_string(), value)])
1382 }
1383
1384 fn row_gap(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1385 Ok(vec![OrderPair("rowGap".to_string(), value)])
1386 }
1387
1388 fn column_gap(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1389 Ok(vec![OrderPair("columnGap".to_string(), value)])
1390 }
1391
1392 fn margin_top(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1393 Ok(vec![OrderPair("marginTop".to_string(), value)])
1394 }
1395
1396 fn margin_bottom(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1397 Ok(vec![OrderPair("marginBottom".to_string(), value)])
1398 }
1399
1400 fn overflow_y(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1401 Ok(vec![OrderPair("overflowY".to_string(), value)])
1402 }
1403
1404 fn overflow_x(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1405 Ok(vec![OrderPair("overflowX".to_string(), value)])
1406 }
1407
1408 fn padding_top(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1409 Ok(vec![OrderPair("paddingTop".to_string(), value)])
1410 }
1411
1412 fn padding_bottom(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1413 Ok(vec![OrderPair("paddingBottom".to_string(), value)])
1414 }
1415
1416 fn scroll_margin_top(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1417 Ok(vec![OrderPair("scrollMarginTop".to_string(), value)])
1418 }
1419
1420 fn scroll_margin_bottom(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1421 Ok(vec![OrderPair("scrollMarginBottom".to_string(), value)])
1422 }
1423
1424 fn top(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1425 Ok(vec![OrderPair("top".to_string(), value)])
1426 }
1427
1428 fn bottom(value: Option<String>) -> Result<Vec<OrderPair>, String> {
1429 Ok(vec![OrderPair("bottom".to_string(), value)])
1430 }
1431
1432 pub fn get(name: &str) -> Option<fn(Option<String>) -> Result<Vec<OrderPair>, String>> {
1433 match name {
1434 "borderHorizontal" => Shorthands::get("borderInline"),
1436 "borderVertical" => Shorthands::get("borderBlock"),
1438 "borderBlockStart" => Shorthands::get("borderTop"),
1440 "borderEnd" => Shorthands::get("borderInlineEnd"),
1442 "borderBlockEnd" => Shorthands::get("borderBottom"),
1444 "borderStart" => Shorthands::get("borderInlineStart"),
1446
1447 "blockSize" => Some(Aliases::height),
1448 "inlineSize" => Some(Aliases::width),
1449 "minBlockSize" => Some(Aliases::min_height),
1450 "minInlineSize" => Some(Aliases::min_width),
1451 "maxBlockSize" => Some(Aliases::max_height),
1452 "maxInlineSize" => Some(Aliases::max_width),
1453
1454 "borderHorizontalWidth" => Shorthands::get("borderInlineWidth"),
1455 "borderHorizontalStyle" => Shorthands::get("borderInlineStyle"),
1456 "borderHorizontalColor" => Shorthands::get("borderInlineColor"),
1457 "borderVerticalWidth" => Shorthands::get("borderBlockWidth"),
1458 "borderVerticalStyle" => Shorthands::get("borderBlockStyle"),
1459 "borderVerticalColor" => Shorthands::get("borderBlockColor"),
1460
1461 "borderBlockStartColor" => Some(Aliases::border_top_color),
1462 "borderBlockEndColor" => Some(Aliases::border_bottom_color),
1463 "borderBlockStartStyle" => Some(Aliases::border_top_style),
1464 "borderBlockEndStyle" => Some(Aliases::border_bottom_style),
1465 "borderBlockStartWidth" => Some(Aliases::border_top_width),
1466 "borderBlockEndWidth" => Some(Aliases::border_bottom_width),
1467 "borderStartColor" => Shorthands::get("borderInlineStartColor"),
1468 "borderEndColor" => Shorthands::get("borderInlineEndColor"),
1469 "borderStartStyle" => Shorthands::get("borderInlineStartStyle"),
1470 "borderEndStyle" => Shorthands::get("borderInlineEndStyle"),
1471 "borderStartWidth" => Shorthands::get("borderInlineStartWidth"),
1472 "borderEndWidth" => Shorthands::get("borderInlineEndWidth"),
1473
1474 "borderTopStartRadius" => Some(Aliases::border_start_start_radius),
1475 "borderTopEndRadius" => Some(Aliases::border_start_end_radius),
1476 "borderBottomStartRadius" => Some(Aliases::border_end_start_radius),
1477 "borderBottomEndRadius" => Some(Aliases::border_end_end_radius),
1478
1479 "containIntrinsicBlockSize" => Some(Aliases::contain_intrinsic_height),
1480 "containIntrinsicInlineSize" => Some(Aliases::contain_intrinsic_width),
1481
1482 "gridGap" => Shorthands::get("gap"),
1483 "gridRowGap" => Some(Aliases::row_gap),
1484 "gridColumnGap" => Some(Aliases::column_gap),
1485
1486 "marginBlockStart" => Some(Aliases::margin_top),
1487 "marginBlockEnd" => Some(Aliases::margin_bottom),
1488 "marginStart" => Shorthands::get("marginInlineStart"),
1489 "marginEnd" => Shorthands::get("marginInlineEnd"),
1490 "marginHorizontal" => Shorthands::get("marginInline"),
1491 "marginVertical" => Shorthands::get("marginBlock"),
1492
1493 "overflowBlock" => Some(Aliases::overflow_y),
1494 "overflowInline" => Some(Aliases::overflow_x),
1495
1496 "paddingBlockStart" => Some(Aliases::padding_top),
1497 "paddingBlockEnd" => Some(Aliases::padding_bottom),
1498 "paddingStart" => Shorthands::get("paddingInlineStart"),
1499 "paddingEnd" => Shorthands::get("paddingInlineEnd"),
1500 "paddingHorizontal" => Shorthands::get("paddingInline"),
1501 "paddingVertical" => Shorthands::get("paddingBlock"),
1502
1503 "scrollMarginBlockStart" => Some(Aliases::scroll_margin_top),
1504 "scrollMarginBlockEnd" => Some(Aliases::scroll_margin_bottom),
1505
1506 "insetBlockStart" => Some(Aliases::top),
1507 "insetBlockEnd" => Some(Aliases::bottom),
1508 "start" => Shorthands::get("insetInlineStart"),
1509 "end" => Shorthands::get("insetInlineEnd"),
1510 _ => None,
1511 }
1512 }
1513}