encre_css/plugins/transform/
mod.rs

1//! Transform utilities
2pub mod perspective;
3pub mod perspective_origin;
4pub mod rotate;
5pub mod scale;
6pub mod skew;
7pub mod transform_origin;
8pub mod transform_type;
9pub mod translate;
10
11const CSS_TRANSFORM: &str = "transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));";
12
13#[cfg(test)]
14mod tests {
15    use crate::{generate, utils::testing::base_config};
16
17    use pretty_assertions::assert_eq;
18
19    #[test]
20    fn perspective() {
21        assert_eq!(generate(["perspective-distant"], &base_config()), ".perspective-distant {
22  perspective: 1200px;
23}");
24        assert_eq!(generate(["perspective-[0.1rem]"], &base_config()), r".perspective-\[0\.1rem\] {
25  perspective: 0.1rem;
26}");
27    }
28
29    #[test]
30    fn perspective_origin() {
31        assert_eq!(generate(["perspective-origin-top-left"], &base_config()), ".perspective-origin-top-left {
32  perspective-origin: top left;
33}");
34        assert_eq!(generate(["perspective-origin-[0.1rem_center]"], &base_config()), r".perspective-origin-\[0\.1rem_center\] {
35  perspective-origin: 0.1rem center;
36}");
37    }
38
39    #[test]
40    fn rotate() {
41        assert_eq!(generate(["rotate-20"], &base_config()), ".rotate-20 {
42  --en-rotate-x: 20deg;
43  --en-rotate-y: 20deg;
44  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
45}");
46        assert_eq!(
47            generate(["rotate-[1.25turn]"], &base_config()),
48            r".rotate-\[1\.25turn\] {
49  --en-rotate-x: 1.25turn;
50  --en-rotate-y: 1.25turn;
51  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
52}"
53        );
54
55        assert_eq!(generate(["rotate-x-20"], &base_config()), ".rotate-x-20 {
56  --en-rotate-x: 20deg;
57  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
58}");
59        assert_eq!(
60            generate(["rotate-x-[1.25turn]"], &base_config()),
61            r".rotate-x-\[1\.25turn\] {
62  --en-rotate-x: 1.25turn;
63  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
64}"
65        );
66
67        assert_eq!(generate(["rotate-y-20"], &base_config()), ".rotate-y-20 {
68  --en-rotate-y: 20deg;
69  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
70}");
71        assert_eq!(
72            generate(["rotate-y-[1.25turn]"], &base_config()),
73            r".rotate-y-\[1\.25turn\] {
74  --en-rotate-y: 1.25turn;
75  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
76}"
77        );
78
79        assert_eq!(generate(["rotate-z-20"], &base_config()), ".rotate-z-20 {
80  --en-rotate-z: 20deg;
81  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
82}");
83        assert_eq!(
84            generate(["rotate-z-[1.25turn]"], &base_config()),
85            r".rotate-z-\[1\.25turn\] {
86  --en-rotate-z: 1.25turn;
87  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
88}"
89        );
90    }
91
92    #[test]
93    fn scale() {
94        assert_eq!(generate(["scale-150"], &base_config()), ".scale-150 {
95  --en-scale-x: 1.5;
96  --en-scale-y: 1.5;
97  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
98}");
99        assert_eq!(generate(["scale-x-20"], &base_config()), ".scale-x-20 {
100  --en-scale-x: 0.2;
101  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
102}");
103        assert_eq!(generate(["scale-y-45"], &base_config()), ".scale-y-45 {
104  --en-scale-y: 0.45;
105  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
106}");
107        assert_eq!(generate(["scale-y-[88.42%]"], &base_config()), r".scale-y-\[88\.42\%\] {
108  --en-scale-y: 88.42%;
109  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
110}");
111        assert_eq!(generate(["scale-z-45"], &base_config()), ".scale-z-45 {
112  --en-scale-z: 0.45;
113  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
114}");
115    }
116
117    #[test]
118    fn skew() {
119        assert_eq!(generate(["skew-x-20"], &base_config()), ".skew-x-20 {
120  --en-skew-x: 20deg;
121  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
122}");
123        assert_eq!(generate(["skew-y-20"], &base_config()), ".skew-y-20 {
124  --en-skew-y: 20deg;
125  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
126}");
127        assert_eq!(
128            generate(["skew-x-[1.25turn]"], &base_config()),
129            r".skew-x-\[1\.25turn\] {
130  --en-skew-x: 1.25turn;
131  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
132}"
133        );
134        assert_eq!(
135            generate(["skew-y-[1.25turn]"], &base_config()),
136            r".skew-y-\[1\.25turn\] {
137  --en-skew-y: 1.25turn;
138  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
139}"
140        );
141    }
142
143    #[test]
144    fn translate() {
145        assert_eq!(generate(["translate-x-20"], &base_config()), ".translate-x-20 {
146  --en-translate-x: 5rem;
147  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
148}");
149        assert_eq!(generate(["-translate-x-full"], &base_config()), ".-translate-x-full {
150  --en-translate-x: -100%;
151  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
152}");
153        assert_eq!(generate(["-translate-x-20"], &base_config()), ".-translate-x-20 {
154  --en-translate-x: -5rem;
155  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
156}");
157        assert_eq!(generate(["translate-x-auto"], &base_config()), ".translate-x-auto {
158  --en-translate-x: auto;
159  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
160}");
161        assert_eq!(
162            generate(["translate-x-[1.25%]"], &base_config()),
163            r".translate-x-\[1\.25\%\] {
164  --en-translate-x: 1.25%;
165  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
166}"
167        );
168
169        assert_eq!(generate(["translate-y-20"], &base_config()), ".translate-y-20 {
170  --en-translate-y: 5rem;
171  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
172}");
173        assert_eq!(generate(["-translate-y-full"], &base_config()), ".-translate-y-full {
174  --en-translate-y: -100%;
175  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
176}");
177        assert_eq!(generate(["-translate-y-20"], &base_config()), ".-translate-y-20 {
178  --en-translate-y: -5rem;
179  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
180}");
181        assert_eq!(generate(["translate-y-auto"], &base_config()), ".translate-y-auto {
182  --en-translate-y: auto;
183  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
184}");
185        assert_eq!(
186            generate(["translate-y-[1.25%]"], &base_config()),
187            r".translate-y-\[1\.25\%\] {
188  --en-translate-y: 1.25%;
189  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
190}"
191        );
192
193        assert_eq!(generate(["translate-z-20"], &base_config()), ".translate-z-20 {
194  --en-translate-z: 5rem;
195  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
196}");
197        assert_eq!(generate(["-translate-z-full"], &base_config()), ".-translate-z-full {
198  --en-translate-z: -100%;
199  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
200}");
201        assert_eq!(generate(["-translate-z-20"], &base_config()), ".-translate-z-20 {
202  --en-translate-z: -5rem;
203  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
204}");
205        assert_eq!(generate(["translate-z-auto"], &base_config()), ".translate-z-auto {
206  --en-translate-z: auto;
207  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
208}");
209        assert_eq!(
210            generate(["translate-z-[1.25%]"], &base_config()),
211            r".translate-z-\[1\.25\%\] {
212  --en-translate-z: 1.25%;
213  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
214}"
215        );
216    }
217
218    #[test]
219    fn transform_origin() {
220        assert_eq!(
221            generate(["origin-center"], &base_config()),
222            ".origin-center {
223  transform-origin: center;
224}"
225        );
226        assert_eq!(
227            generate(["origin-top-left"], &base_config()),
228            ".origin-top-left {
229  transform-origin: top left;
230}"
231        );
232        assert_eq!(
233            generate(["origin-[bottom_right_60px]"], &base_config()),
234            r".origin-\[bottom_right_60px\] {
235  transform-origin: bottom right 60px;
236}"
237        );
238        assert_eq!(
239            generate(["origin-[-100%_40%]"], &base_config()),
240            r".origin-\[-100\%_40\%\] {
241  transform-origin: -100% 40%;
242}"
243        );
244    }
245
246    #[test]
247    fn transform_type() {
248        assert_eq!(generate(["transform-gpu"], &base_config()), ".transform-gpu {
249  transform: translate3d(var(--en-translate-x), var(--en-translate-y), var(--en-translate-z)) rotateX(var(--en-rotate-x)) rotateY(var(--en-rotate-y)) rotateZ(var(--en-rotate-z)) skewX(var(--en-skew-x)) skewY(var(--en-skew-y)) scale3d(var(--en-scale-x), var(--en-scale-y), var(--en-scale-z));
250}");
251        assert_eq!(
252            generate(["transform-none"], &base_config()),
253            ".transform-none {
254  transform: none;
255}"
256        );
257    }
258}