encre_css/plugins/interactivity/
mod.rs

1//! Interactivity utilities
2pub mod accent_color;
3pub mod appearance;
4pub mod caret_color;
5pub mod cursor;
6pub mod pointer_events;
7pub mod resize;
8pub mod scroll_behavior;
9pub mod scroll_margin;
10pub mod scroll_padding;
11pub mod scroll_snap_align;
12pub mod scroll_snap_stop;
13pub mod scroll_snap_type;
14pub mod touch_action;
15pub mod user_select;
16pub mod will_change;
17
18#[cfg(test)]
19mod tests {
20    use crate::{generate, utils::testing::base_config};
21
22    use pretty_assertions::assert_eq;
23
24    #[test]
25    fn accent_color() {
26        assert_eq!(
27            generate(["accent-red-400"], &base_config()),
28            ".accent-red-400 {
29  accent-color: oklch(70.4% .191 22.216);
30}"
31        );
32        assert_eq!(
33            generate(["accent-[rgb(12,12,12)]"], &base_config()),
34            r".accent-\[rgb\(12\,12\,12\)\] {
35  accent-color: rgb(12,12,12);
36}"
37        );
38    }
39
40    #[test]
41    fn appearance() {
42        assert_eq!(
43            generate(["appearance-none"], &base_config()),
44            ".appearance-none {
45  -webkit-appearance: none;
46  -moz-appearance: none;
47  appearance: none;
48}"
49        );
50    }
51
52    #[test]
53    fn caret_color() {
54        assert_eq!(
55            generate(["caret-red-400"], &base_config()),
56            ".caret-red-400 {
57  caret-color: oklch(70.4% .191 22.216);
58}"
59        );
60        assert_eq!(
61            generate(["caret-[rgb(12,12,12)]"], &base_config()),
62            r".caret-\[rgb\(12\,12\,12\)\] {
63  caret-color: rgb(12,12,12);
64}"
65        );
66    }
67
68    #[test]
69    fn cursor() {
70        assert_eq!(
71            generate(["cursor-auto"], &base_config()),
72            ".cursor-auto {
73  cursor: auto;
74}"
75        );
76        assert_eq!(
77            generate(["cursor-zoom-out"], &base_config()),
78            ".cursor-zoom-out {
79  cursor: zoom-out;
80}"
81        );
82        assert_eq!(
83            generate(["cursor-[url(spinner.svg)_4_5,_progress]"], &base_config()),
84            r".cursor-\[url\(spinner\.svg\)_4_5\,_progress\] {
85  cursor: url(spinner.svg) 4 5, progress;
86}"
87        );
88    }
89
90    #[test]
91    fn pointer_events() {
92        assert_eq!(
93            generate(["pointer-events-none"], &base_config()),
94            ".pointer-events-none {
95  pointer-events: none;
96}"
97        );
98    }
99
100    #[test]
101    fn resize() {
102        assert_eq!(
103            generate(["resize"], &base_config()),
104            ".resize {
105  resize: both;
106}"
107        );
108        assert_eq!(
109            generate(["resize-y"], &base_config()),
110            ".resize-y {
111  resize: vertical;
112}"
113        );
114    }
115
116    #[test]
117    fn scroll_behavior() {
118        assert_eq!(
119            generate(["scroll-smooth"], &base_config()),
120            ".scroll-smooth {
121  scroll-behavior: smooth;
122}"
123        );
124    }
125
126    #[test]
127    fn margin() {
128        assert_eq!(
129            generate(["scroll-m-2"], &base_config()),
130            ".scroll-m-2 {
131  scroll-margin: 0.5rem;
132}"
133        );
134        assert_eq!(
135            generate(["scroll-mx-[2px]"], &base_config()),
136            r".scroll-mx-\[2px\] {
137  scroll-margin-inline: 2px;
138}"
139        );
140    }
141
142    #[test]
143    fn padding() {
144        assert_eq!(
145            generate(["scroll-p-2"], &base_config()),
146            ".scroll-p-2 {
147  scroll-padding: 0.5rem;
148}"
149        );
150        assert_eq!(
151            generate(["scroll-px-[2px]"], &base_config()),
152            r".scroll-px-\[2px\] {
153  scroll-padding-inline: 2px;
154}"
155        );
156    }
157
158    #[test]
159    fn scroll_snap_align() {
160        assert_eq!(
161            generate(["snap-center"], &base_config()),
162            ".snap-center {
163  scroll-snap-align: center;
164}"
165        );
166        assert_eq!(
167            generate(["snap-align-none"], &base_config()),
168            ".snap-align-none {
169  scroll-snap-align: none;
170}"
171        );
172    }
173
174    #[test]
175    fn scroll_snap_stop() {
176        assert_eq!(
177            generate(["snap-always"], &base_config()),
178            ".snap-always {
179  scroll-snap-stop: always;
180}"
181        );
182    }
183
184    #[test]
185    fn scroll_snap_type() {
186        assert_eq!(
187            generate(["snap-none"], &base_config()),
188            ".snap-none {
189  -ms-scroll-snap-type: none;
190  scroll-snap-type: none;
191}"
192        );
193        assert_eq!(
194            generate(["snap-both"], &base_config()),
195            ".snap-both {
196  -ms-scroll-snap-type: both var(--en-scroll-snap-strictness);
197  scroll-snap-type: both var(--en-scroll-snap-strictness);
198}"
199        );
200        assert_eq!(
201            generate(["snap-mandatory"], &base_config()),
202            ".snap-mandatory {
203  --en-scroll-snap-strictness: mandatory;
204}"
205        );
206    }
207
208    #[test]
209    fn touch_action() {
210        assert_eq!(
211            generate(["touch-pan-right"], &base_config()),
212            ".touch-pan-right {
213  touch-action: pan-right;
214}"
215        );
216        assert_eq!(
217            generate(["touch-none"], &base_config()),
218            ".touch-none {
219  touch-action: none;
220}"
221        );
222    }
223
224    #[test]
225    fn user_select() {
226        assert_eq!(
227            generate(["select-all"], &base_config()),
228            ".select-all {
229  user-select: all;
230}"
231        );
232    }
233
234    #[test]
235    fn will_change() {
236        assert_eq!(
237            generate(["will-change-contents"], &base_config()),
238            ".will-change-contents {
239  will-change: contents;
240}"
241        );
242    }
243}