Skip to main content

stylex_css/order/constants/
property_specificity_order.rs

1use stylex_structures::order_pair::OrderPair;
2
3#[derive(Debug, PartialEq, Eq, Clone, Hash)]
4pub struct Shorthands;
5
6impl Shorthands {
7  #[allow(dead_code)]
8  fn all(_: Option<String>) -> Result<Vec<OrderPair>, String> {
9    Err("all is not supported".into())
10  }
11  fn animation(_value: Option<String>) -> Result<Vec<OrderPair>, String> {
12    Err("animation is not supported".into())
13  }
14  fn background(_value: Option<String>) -> Result<Vec<OrderPair>, String> {
15    Err("background is not supported. Use background-color, border-image etc. instead".into())
16  }
17  fn border(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
18    Err("border is not supported. Use border-width, border-style and border-color instead".into())
19  }
20  fn border_inline(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
21    Err(
22      "borderInline is not supported. Use borderInlineWidth, borderInlineStyle and borderInlineColor instead".into(),
23    )
24  }
25  // @Deprecated
26  fn border_block(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
27    Err(
28      "borderBlock is not supported. Use borderBlockWidth, borderBlockStyle and borderBlockColor instead".into(),
29    )
30  }
31
32  // @Deprecated
33  fn border_top(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
34    Err(
35      "borderTop is not supported. Use borderTopWidth, borderTopStyle and borderTopColor instead"
36        .into(),
37    )
38  }
39  // @Deprecated
40  fn border_inline_end(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
41    Err(
42      "borderInlineEnd is not supported. Use borderInlineEndWidth, borderInlineEndStyle and borderInlineEndColor instead".into(),
43    )
44  }
45  // @Deprecated
46  fn border_right(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
47    Err(
48      "borderRight is not supported. Use borderRightWidth, borderRightStyle and borderRightColor instead".into(),
49    )
50  }
51  // @Deprecated
52  fn border_bottom(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
53    Err(
54      "borderBottom is not supported. Use borderBottomWidth, borderBottomStyle and borderBottomColor instead".into(),
55    )
56  }
57  // @Deprecated
58  fn border_inline_start(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
59    Err(
60      "borderInlineStart is not supported. Use borderInlineStartWidth, borderInlineStartStyle and borderInlineStartColor instead".into(),
61    )
62  }
63  // @Deprecated
64  fn border_left(_raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
65    Err(format!(
66      "{}{}{}",
67      "`borderLeft` is not supported.",
68      "You could use `borderLeftWidth`, `borderLeftStyle` and `borderLeftColor`,",
69      "but it is preferable to use `borderInlineStartWidth`, `borderInlineStartStyle` and `borderInlineStartColor`."
70    ))
71  }
72
73  pub fn get(name: &str) -> Option<fn(Option<String>) -> Result<Vec<OrderPair>, String>> {
74    match name {
75      "animation" => Some(Shorthands::animation),
76      "background" => Some(Shorthands::background),
77      "border" => Some(Shorthands::border),
78      "border_inline" => Some(Shorthands::border_inline),
79      "border_block" => Some(Shorthands::border_block),
80      "border_top" => Some(Shorthands::border_top),
81      "border_inline_end" => Some(Shorthands::border_inline_end),
82      "border_right" => Some(Shorthands::border_right),
83      "border_bottom" => Some(Shorthands::border_bottom),
84      "border_inline_start" => Some(Shorthands::border_inline_start),
85      "border_left" => Some(Shorthands::border_left),
86      _ => None,
87    }
88  }
89}
90
91#[derive(Debug, PartialEq, Eq, Clone, Hash)]
92pub struct Aliases;
93
94impl Aliases {
95  fn block_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
96    Ok(vec![OrderPair("height".to_string(), val)])
97  }
98  fn inline_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
99    Ok(vec![OrderPair("width".to_string(), val)])
100  }
101  fn min_block_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
102    Ok(vec![OrderPair("minHeight".to_string(), val)])
103  }
104  fn min_inline_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
105    Ok(vec![OrderPair("minWidth".to_string(), val)])
106  }
107  fn max_block_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
108    Ok(vec![OrderPair("maxHeight".to_string(), val)])
109  }
110  fn max_inline_size(val: Option<String>) -> Result<Vec<OrderPair>, String> {
111    Ok(vec![OrderPair("maxWidth".to_string(), val)])
112  }
113
114  fn border_horizontal_width(val: Option<String>) -> Result<Vec<OrderPair>, String> {
115    Ok(vec![OrderPair("borderInlineWidth".to_string(), val)])
116  }
117  fn border_horizontal_style(val: Option<String>) -> Result<Vec<OrderPair>, String> {
118    Ok(vec![OrderPair("borderInlineStyle".to_string(), val)])
119  }
120  fn border_horizontal_color(val: Option<String>) -> Result<Vec<OrderPair>, String> {
121    Ok(vec![OrderPair("borderInlineColor".to_string(), val)])
122  }
123  fn border_vertical_width(val: Option<String>) -> Result<Vec<OrderPair>, String> {
124    Ok(vec![OrderPair("borderBlockWidth".to_string(), val)])
125  }
126  fn border_vertical_style(val: Option<String>) -> Result<Vec<OrderPair>, String> {
127    Ok(vec![OrderPair("borderBlockStyle".to_string(), val)])
128  }
129  fn border_vertical_color(val: Option<String>) -> Result<Vec<OrderPair>, String> {
130    Ok(vec![OrderPair("borderBlockColor".to_string(), val)])
131  }
132
133  fn border_block_start_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
134    Ok(vec![OrderPair("borderTopColor".to_string(), value)])
135  }
136  fn border_block_end_color(value: Option<String>) -> Result<Vec<OrderPair>, String> {
137    Ok(vec![OrderPair("borderBottomColor".to_string(), value)])
138  }
139  fn border_block_start_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
140    Ok(vec![OrderPair("borderTopStyle".to_string(), value)])
141  }
142  fn border_block_end_style(value: Option<String>) -> Result<Vec<OrderPair>, String> {
143    Ok(vec![OrderPair("borderBottomStyle".to_string(), value)])
144  }
145  fn border_block_start_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
146    Ok(vec![OrderPair("borderTopWidth".to_string(), value)])
147  }
148  fn border_block_end_width(value: Option<String>) -> Result<Vec<OrderPair>, String> {
149    Ok(vec![OrderPair("borderBottomWidth".to_string(), value)])
150  }
151
152  fn border_start_color(val: Option<String>) -> Result<Vec<OrderPair>, String> {
153    Ok(vec![OrderPair("borderInlineStartColor".to_string(), val)])
154  }
155  fn border_end_color(val: Option<String>) -> Result<Vec<OrderPair>, String> {
156    Ok(vec![OrderPair("borderInlineEndColor".to_string(), val)])
157  }
158  fn border_start_style(val: Option<String>) -> Result<Vec<OrderPair>, String> {
159    Ok(vec![OrderPair("borderInlineStartStyle".to_string(), val)])
160  }
161  fn border_end_style(val: Option<String>) -> Result<Vec<OrderPair>, String> {
162    Ok(vec![OrderPair("borderInlineEndStyle".to_string(), val)])
163  }
164  fn border_start_width(val: Option<String>) -> Result<Vec<OrderPair>, String> {
165    Ok(vec![OrderPair("borderInlineStartWidth".to_string(), val)])
166  }
167  fn border_end_width(val: Option<String>) -> Result<Vec<OrderPair>, String> {
168    Ok(vec![OrderPair("borderInlineEndWidth".to_string(), val)])
169  }
170
171  fn border_top_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
172    Ok(vec![OrderPair("borderStartStartRadius".to_string(), value)])
173  }
174  fn border_top_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
175    Ok(vec![OrderPair("borderStartEndRadius".to_string(), value)])
176  }
177  fn border_bottom_start_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
178    Ok(vec![OrderPair("borderEndStartRadius".to_string(), value)])
179  }
180  fn border_bottom_end_radius(value: Option<String>) -> Result<Vec<OrderPair>, String> {
181    Ok(vec![OrderPair("borderEndEndRadius".to_string(), value)])
182  }
183
184  fn contain_intrinsic_block_size(value: Option<String>) -> Result<Vec<OrderPair>, String> {
185    Ok(vec![OrderPair("containIntrinsicHeight".to_string(), value)])
186  }
187  fn contain_intrinsic_inline_size(value: Option<String>) -> Result<Vec<OrderPair>, String> {
188    Ok(vec![OrderPair("containIntrinsicWidth".to_string(), value)])
189  }
190
191  fn margin_block_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
192    Ok(vec![OrderPair("marginTop".to_string(), value)])
193  }
194  fn margin_block_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
195    Ok(vec![OrderPair("marginBottom".to_string(), value)])
196  }
197  fn margin_start(val: Option<String>) -> Result<Vec<OrderPair>, String> {
198    Ok(vec![OrderPair("marginInlineStart".to_string(), val)])
199  }
200  fn margin_end(val: Option<String>) -> Result<Vec<OrderPair>, String> {
201    Ok(vec![OrderPair("marginInlineEnd".to_string(), val)])
202  }
203  fn margin_horizontal(val: Option<String>) -> Result<Vec<OrderPair>, String> {
204    Ok(vec![OrderPair("marginInline".to_string(), val)])
205  }
206  fn margin_vertical(val: Option<String>) -> Result<Vec<OrderPair>, String> {
207    Ok(vec![OrderPair("marginBlock".to_string(), val)])
208  }
209
210  fn overflow_block(value: Option<String>) -> Result<Vec<OrderPair>, String> {
211    Ok(vec![OrderPair("overflowY".to_string(), value)])
212  }
213  fn overflow_inline(value: Option<String>) -> Result<Vec<OrderPair>, String> {
214    Ok(vec![OrderPair("overflowX".to_string(), value)])
215  }
216
217  fn padding_block_start(raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
218    Ok(vec![OrderPair("paddingTop".to_string(), raw_value)])
219  }
220  fn padding_block_end(raw_value: Option<String>) -> Result<Vec<OrderPair>, String> {
221    Ok(vec![OrderPair("paddingBottom".to_string(), raw_value)])
222  }
223  fn padding_start(val: Option<String>) -> Result<Vec<OrderPair>, String> {
224    Ok(vec![OrderPair("paddingInlineStart".to_string(), val)])
225  }
226  fn padding_end(val: Option<String>) -> Result<Vec<OrderPair>, String> {
227    Ok(vec![OrderPair("paddingInlineEnd".to_string(), val)])
228  }
229  fn padding_horizontal(val: Option<String>) -> Result<Vec<OrderPair>, String> {
230    Ok(vec![OrderPair("paddingInline".to_string(), val)])
231  }
232  fn padding_vertical(val: Option<String>) -> Result<Vec<OrderPair>, String> {
233    Ok(vec![OrderPair("paddingBlock".to_string(), val)])
234  }
235
236  fn scroll_margin_block_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
237    Ok(vec![OrderPair("scrollMarginTop".to_string(), value)])
238  }
239  fn scroll_margin_block_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
240    Ok(vec![OrderPair("scrollMarginBottom".to_string(), value)])
241  }
242
243  fn inset_block_start(value: Option<String>) -> Result<Vec<OrderPair>, String> {
244    Ok(vec![OrderPair("top".to_string(), value)])
245  }
246  fn inset_block_end(value: Option<String>) -> Result<Vec<OrderPair>, String> {
247    Ok(vec![OrderPair("bottom".to_string(), value)])
248  }
249  fn start(val: Option<String>) -> Result<Vec<OrderPair>, String> {
250    Ok(vec![OrderPair("insetInlineStart".to_string(), val)])
251  }
252  fn end(val: Option<String>) -> Result<Vec<OrderPair>, String> {
253    Ok(vec![OrderPair("insetInlineEnd".to_string(), val)])
254  }
255
256  pub fn get(name: &str) -> Option<fn(Option<String>) -> Result<Vec<OrderPair>, String>> {
257    match name {
258      // @Deprecated
259      "borderHorizontal" => Shorthands::get("borderHorizontal"),
260      // @Deprecated
261      "borderVertical" => Shorthands::get("borderVertical"),
262      // @Deprecated
263      "borderBlockStart" => Shorthands::get("borderBlockStart"),
264      // @Deprecated
265      "borderEnd" => Shorthands::get("borderEnd"),
266      // @Deprecated
267      "borderBlockEnd" => Shorthands::get("borderBlockEnd"),
268      // @Deprecated
269      "borderStart" => Shorthands::get("borderStart"),
270
271      "blockSize" => Some(Aliases::block_size),
272      "inlineSize" => Some(Aliases::inline_size),
273      "minBlockSize" => Some(Aliases::min_block_size),
274      "minInlineSize" => Some(Aliases::min_inline_size),
275      "maxBlockSize" => Some(Aliases::max_block_size),
276      "maxInlineSize" => Some(Aliases::max_inline_size),
277      "borderHorizontalWidth" => Some(Aliases::border_horizontal_width),
278      "borderHorizontalStyle" => Some(Aliases::border_horizontal_style),
279      "borderHorizontalColor" => Some(Aliases::border_horizontal_color),
280      "borderVerticalWidth" => Some(Aliases::border_vertical_width),
281      "borderVerticalStyle" => Some(Aliases::border_vertical_style),
282      "borderVerticalColor" => Some(Aliases::border_vertical_color),
283      "borderBlockStartColor" => Some(Aliases::border_block_start_color),
284      "borderBlockEndColor" => Some(Aliases::border_block_end_color),
285      "borderBlockStartStyle" => Some(Aliases::border_block_start_style),
286      "borderBlockEndStyle" => Some(Aliases::border_block_end_style),
287      "borderBlockStartWidth" => Some(Aliases::border_block_start_width),
288      "borderBlockEndWidth" => Some(Aliases::border_block_end_width),
289      "borderStartColor" => Some(Aliases::border_start_color),
290      "borderEndColor" => Some(Aliases::border_end_color),
291      "borderStartStyle" => Some(Aliases::border_start_style),
292      "borderEndStyle" => Some(Aliases::border_end_style),
293      "borderStartWidth" => Some(Aliases::border_start_width),
294      "borderEndWidth" => Some(Aliases::border_end_width),
295      "borderTopStartRadius" => Some(Aliases::border_top_start_radius),
296      "borderTopEndRadius" => Some(Aliases::border_top_end_radius),
297      "borderBottomStartRadius" => Some(Aliases::border_bottom_start_radius),
298      "borderBottomEndRadius" => Some(Aliases::border_bottom_end_radius),
299      "containIntrinsicBlockSize" => Some(Aliases::contain_intrinsic_block_size),
300      "containIntrinsicInlineSize" => Some(Aliases::contain_intrinsic_inline_size),
301      "marginBlockStart" => Some(Aliases::margin_block_start),
302      "marginBlockEnd" => Some(Aliases::margin_block_end),
303      "marginStart" => Some(Aliases::margin_start),
304      "marginEnd" => Some(Aliases::margin_end),
305      "marginHorizontal" => Some(Aliases::margin_horizontal),
306      "marginVertical" => Some(Aliases::margin_vertical),
307      "overflowBlock" => Some(Aliases::overflow_block),
308      "overflowInline" => Some(Aliases::overflow_inline),
309      "paddingBlockStart" => Some(Aliases::padding_block_start),
310      "paddingBlockEnd" => Some(Aliases::padding_block_end),
311      "paddingStart" => Some(Aliases::padding_start),
312      "paddingEnd" => Some(Aliases::padding_end),
313      "paddingHorizontal" => Some(Aliases::padding_horizontal),
314      "paddingVertical" => Some(Aliases::padding_vertical),
315      "scrollMarginBlockStart" => Some(Aliases::scroll_margin_block_start),
316      "scrollMarginBlockEnd" => Some(Aliases::scroll_margin_block_end),
317      "insetBlockStart" => Some(Aliases::inset_block_start),
318      "insetBlockEnd" => Some(Aliases::inset_block_end),
319      "start" => Some(Aliases::start),
320      "end" => Some(Aliases::end),
321      _ => None,
322    }
323  }
324}