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 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 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 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 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 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 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 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 "borderHorizontal" => Shorthands::get("borderHorizontal"),
260 "borderVertical" => Shorthands::get("borderVertical"),
262 "borderBlockStart" => Shorthands::get("borderBlockStart"),
264 "borderEnd" => Shorthands::get("borderEnd"),
266 "borderBlockEnd" => Shorthands::get("borderBlockEnd"),
268 "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}