encre_css/plugins/layout/
mod.rs

1//! Layout utilities
2pub mod aspect_ratio;
3pub mod box_decoration_break;
4pub mod box_sizing;
5pub mod break_after;
6pub mod break_before;
7pub mod break_inside;
8pub mod clear;
9pub mod columns;
10pub mod container;
11pub mod display;
12pub mod floats;
13pub mod isolation;
14pub mod object_fit;
15pub mod object_position;
16pub mod overflow;
17pub mod overscroll_behavior;
18pub mod placement;
19pub mod position;
20pub mod visibility;
21pub mod z_index;
22pub mod at_container;
23
24#[cfg(test)]
25mod tests {
26    use crate::{generate, utils::testing::base_config};
27
28    use pretty_assertions::assert_eq;
29
30    #[test]
31    fn aspect_ratio() {
32        assert_eq!(
33            generate(["aspect-auto"], &base_config()),
34            ".aspect-auto {
35  aspect-ratio: auto;
36}"
37        );
38        assert_eq!(
39            generate(["aspect-video"], &base_config()),
40            ".aspect-video {
41  aspect-ratio: 16 / 9;
42}"
43        );
44    }
45
46    #[test]
47    fn box_decoration_break() {
48        assert_eq!(
49            generate(["box-decoration-clone"], &base_config()),
50            ".box-decoration-clone {
51  box-decoration-break: clone;
52}"
53        );
54    }
55
56    #[test]
57    fn box_sizing() {
58        assert_eq!(
59            generate(["box-content"], &base_config()),
60            ".box-content {
61  box-sizing: content-box;
62}"
63        );
64    }
65
66    #[test]
67    fn break_after() {
68        assert_eq!(
69            generate(["break-after-all"], &base_config()),
70            ".break-after-all {
71  break-after: all;
72}"
73        );
74        assert_eq!(
75            generate(["break-after-avoid-page"], &base_config()),
76            ".break-after-avoid-page {
77  break-after: avoid-page;
78}"
79        );
80        assert_eq!(
81            generate(["break-after-column"], &base_config()),
82            ".break-after-column {
83  break-after: column;
84}"
85        );
86    }
87
88    #[test]
89    fn break_before() {
90        assert_eq!(
91            generate(["break-before-all"], &base_config()),
92            ".break-before-all {
93  break-before: all;
94}"
95        );
96        assert_eq!(
97            generate(["break-before-avoid-page"], &base_config()),
98            ".break-before-avoid-page {
99  break-before: avoid-page;
100}"
101        );
102        assert_eq!(
103            generate(["break-before-column"], &base_config()),
104            ".break-before-column {
105  break-before: column;
106}"
107        );
108    }
109
110    #[test]
111    fn break_inside() {
112        assert_eq!(
113            generate(["break-inside-auto"], &base_config()),
114            ".break-inside-auto {
115  break-inside: auto;
116}"
117        );
118        assert_eq!(
119            generate(["break-inside-avoid-page"], &base_config()),
120            ".break-inside-avoid-page {
121  break-inside: avoid-page;
122}"
123        );
124    }
125
126    #[test]
127    fn clear() {
128        assert_eq!(
129            generate(["clear-both"], &base_config()),
130            ".clear-both {
131  clear: both;
132}"
133        );
134
135        assert_eq!(
136            generate(["clear-start"], &base_config()),
137            ".clear-start {
138  clear: inline-start;
139}"
140        );
141
142        assert_eq!(
143            generate(["clear-end"], &base_config()),
144            ".clear-end {
145  clear: inline-end;
146}"
147        );
148    }
149
150    #[test]
151    fn columns() {
152        assert_eq!(
153            generate(["columns-md"], &base_config()),
154            ".columns-md {
155  columns: 28rem;
156}"
157        );
158        assert_eq!(
159            generate(["columns-4"], &base_config()),
160            ".columns-4 {
161  columns: 4;
162}"
163        );
164    }
165
166    #[test]
167    fn container() {
168        assert_eq!(
169            generate(["container"], &base_config()),
170            ".container {
171  width: 100%;
172}
173
174@media (width >= 40rem) {
175  .container {
176    max-width: 40rem;
177  }
178}
179
180@media (width >= 48rem) {
181  .container {
182    max-width: 48rem;
183  }
184}
185
186@media (width >= 64rem) {
187  .container {
188    max-width: 64rem;
189  }
190}
191
192@media (width >= 80rem) {
193  .container {
194    max-width: 80rem;
195  }
196}
197
198@media (width >= 96rem) {
199  .container {
200    max-width: 96rem;
201  }
202}"
203        );
204    }
205
206    #[test]
207    fn display() {
208        assert_eq!(
209            generate(["inline-flex"], &base_config()),
210            ".inline-flex {
211  display: inline-flex;
212}"
213        );
214        assert_eq!(
215            generate(["hidden"], &base_config()),
216            ".hidden {
217  display: none;
218}"
219        );
220    }
221
222    #[test]
223    fn floats() {
224        assert_eq!(
225            generate(["float-right"], &base_config()),
226            ".float-right {
227  float: right;
228}"
229        );
230
231        assert_eq!(
232            generate(["float-start"], &base_config()),
233            ".float-start {
234  float: inline-start;
235}"
236        );
237
238        assert_eq!(
239            generate(["float-end"], &base_config()),
240            ".float-end {
241  float: inline-end;
242}"
243        );
244    }
245
246    #[test]
247    fn isolation() {
248        assert_eq!(
249            generate(["isolate"], &base_config()),
250            ".isolate {
251  isolation: isolate;
252}"
253        );
254        assert_eq!(
255            generate(["isolation-auto"], &base_config()),
256            ".isolation-auto {
257  isolation: auto;
258}"
259        );
260    }
261
262    #[test]
263    fn object_fit() {
264        assert_eq!(
265            generate(["object-contain"], &base_config()),
266            ".object-contain {
267  object-fit: contain;
268}"
269        );
270        assert_eq!(
271            generate(["object-scale-down"], &base_config()),
272            ".object-scale-down {
273  object-fit: scale-down;
274}"
275        );
276    }
277
278    #[test]
279    fn object_position() {
280        assert_eq!(
281            generate(["object-bottom"], &base_config()),
282            ".object-bottom {
283  object-position: bottom;
284}"
285        );
286        assert_eq!(
287            generate(["object-top-left"], &base_config()),
288            ".object-top-left {
289  object-position: top left;
290}"
291        );
292        assert_eq!(
293            generate(["object-[center_bottom]"], &base_config()),
294            r".object-\[center_bottom\] {
295  object-position: center bottom;
296}"
297        );
298    }
299
300    #[test]
301    fn overflow() {
302        assert_eq!(
303            generate(["overflow-hidden"], &base_config()),
304            ".overflow-hidden {
305  overflow: hidden;
306}"
307        );
308        assert_eq!(
309            generate(["overflow-y-scroll"], &base_config()),
310            ".overflow-y-scroll {
311  overflow-y: scroll;
312}"
313        );
314    }
315
316    #[test]
317    fn overscroll_behavior() {
318        assert_eq!(
319            generate(["overscroll-auto"], &base_config()),
320            ".overscroll-auto {
321  overscroll-behavior: auto;
322}"
323        );
324        assert_eq!(
325            generate(["overscroll-y-none"], &base_config()),
326            ".overscroll-y-none {
327  overscroll-behavior-y: none;
328}"
329        );
330    }
331
332    #[test]
333    fn placement() {
334        assert_eq!(
335            generate(["top-12"], &base_config()),
336            ".top-12 {
337  top: 3rem;
338}"
339        );
340        assert_eq!(
341            generate(["top-[1px]"], &base_config()),
342            r".top-\[1px\] {
343  top: 1px;
344}"
345        );
346        assert_eq!(
347            generate(["left-auto"], &base_config()),
348            ".left-auto {
349  left: auto;
350}"
351        );
352        assert_eq!(
353            generate(["right-full"], &base_config()),
354            ".right-full {
355  right: 100%;
356}"
357        );
358        assert_eq!(
359            generate(["inset-2"], &base_config()),
360            ".inset-2 {
361  inset: 0.5rem;
362}"
363        );
364        assert_eq!(
365            generate(["-top-full"], &base_config()),
366            ".-top-full {
367  top: -100%;
368}"
369        );
370        assert_eq!(
371            generate(["-left-20"], &base_config()),
372            ".-left-20 {
373  left: -5rem;
374}"
375        );
376        assert_eq!(
377            generate(["right-[20%]"], &base_config()),
378            r".right-\[20\%\] {
379  right: 20%;
380}"
381        );
382        assert_eq!(
383            generate(["inset-[20px]"], &base_config()),
384            r".inset-\[20px\] {
385  inset: 20px;
386}"
387        );
388        assert_eq!(
389            generate(["inset-y-[10em]"], &base_config()),
390            r".inset-y-\[10em\] {
391  inset-block: 10em;
392}"
393        );
394    }
395
396    #[test]
397    fn position() {
398        assert_eq!(
399            generate(["relative"], &base_config()),
400            ".relative {
401  position: relative;
402}"
403        );
404    }
405
406    #[test]
407    fn visibility() {
408        assert_eq!(
409            generate(["visible"], &base_config()),
410            ".visible {
411  visibility: visible;
412}"
413        );
414        assert_eq!(
415            generate(["invisible"], &base_config()),
416            ".invisible {
417  visibility: hidden;
418}"
419        );
420    }
421
422    #[test]
423    fn z_index() {
424        assert_eq!(
425            generate(["z-22"], &base_config()),
426            ".z-22 {
427  z-index: 22;
428}"
429        );
430    }
431
432    #[test]
433    fn at_container() {
434        assert_eq!(
435            generate(["@container @container-[size_scroll-state] @md:bg-red-300"], &base_config()),
436            r".\@container {
437  container-type: inline-size;
438}
439
440.\@container-\[size_scroll-state\] {
441  container-type: size scroll-state;
442}
443
444@container (width >= 28rem) {
445  .\@md\:bg-red-300 {
446    background-color: oklch(80.8% .114 19.571);
447  }
448}"
449        );
450    }
451}