encre-css 0.20.1

A TailwindCSS-compatible utility-first CSS generation library written in Rust
Documentation
//! Effect utilities
pub mod background_blend_mode;
pub mod box_shadow;
pub mod box_shadow_color;
pub mod text_shadow;
pub mod text_shadow_color;
pub mod mix_blend_mode;
pub mod opacity;

#[cfg(test)]
mod tests {
    use crate::{generate, utils::testing::base_config};

    use pretty_assertions::assert_eq;

    #[test]
    fn background_blend_mode() {
        assert_eq!(
            generate(["bg-blend-multiply"], &base_config()),
            ".bg-blend-multiply {
  background-blend-mode: multiply;
}"
        );
        assert_eq!(
            generate(["bg-blend-luminosity"], &base_config()),
            ".bg-blend-luminosity {
  background-blend-mode: luminosity;
}"
        );
    }

    #[test]
    fn box_shadow() {
        assert_eq!(
            generate(["shadow-sm"], &base_config()),
            ".shadow-sm {
  --en-shadow: 0 1px 3px 0 var(--en-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--en-shadow-color, rgb(0 0 0 / 0.1));
  box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow);
}"
        );
        assert_eq!(
            generate(["shadow-2xl"], &base_config()),
            ".shadow-2xl {
  --en-shadow: 0 25px 50px -12px var(--en-shadow-color, rgb(0 0 0 / 0.25));
  box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow);
}"
        );
        assert_eq!(
            generate(["shadow-none"], &base_config()),
            ".shadow-none {
  --en-shadow: 0 0 #0000;
  box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow);
}"
        );
        assert_eq!(
            generate(["shadow-[12px_3rem_12rem_2em_#f00]"], &base_config()),
            r".shadow-\[12px_3rem_12rem_2em_\#f00\] {
  --en-shadow: 12px 3rem 12rem 2em var(--en-shadow-color, #f00);
  box-shadow: var(--en-inset-shadow, 0 0 #0000), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow);
}"
        );

        assert_eq!(
            generate(["inset-shadow-sm"], &base_config()),
            r".inset-shadow-sm {
  --en-inset-shadow: 0 2px 4px var(--en-inset-shadow-color, rgb(0 0 0 / 0.05));
  box-shadow: var(--en-inset-shadow), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow, 0 0 #0000);
}"
        );

        assert_eq!(
            generate(["inset-shadow-[0_2px_2px_rgb(0_0_0_/_0.1)]"], &base_config()),
            r".inset-shadow-\[0_2px_2px_rgb\(0_0_0_\/_0\.1\)\] {
  --en-inset-shadow: 0 2px 2px var(--en-inset-shadow-color, rgb(0 0 0 / 0.1));
  box-shadow: var(--en-inset-shadow), var(--en-inset-ring-shadow, 0 0 #0000), var(--en-ring-offset-shadow, 0 0 #0000), var(--en-ring-shadow, 0 0 #0000), var(--en-shadow, 0 0 #0000);
}"
        );
    }

    #[test]
    fn box_shadow_color() {
        assert_eq!(
            generate(["shadow-red-400"], &base_config()),
            ".shadow-red-400 {
  --en-shadow-color: oklch(70.4% .191 22.216);
}"
        );
        assert_eq!(
            generate(["shadow-[rgb(12,12,12)]"], &base_config()),
            r".shadow-\[rgb\(12\,12\,12\)\] {
  --en-shadow-color: rgb(12,12,12);
}"
        );
        assert_eq!(
            generate(["inset-shadow-red-400"], &base_config()),
            ".inset-shadow-red-400 {
  --en-inset-shadow-color: oklch(70.4% .191 22.216);
}"
        );
    }

    #[test]
    fn text_shadow() {
        assert_eq!(
            generate(["text-shadow-2xs"], &base_config()),
            ".text-shadow-2xs {
  text-shadow: 0px 1px 0px var(--en-text-shadow-color, rgb(0 0 0 / 0.15));
}"
        );
        assert_eq!(
            generate(["text-shadow-sm"], &base_config()),
            ".text-shadow-sm {
  text-shadow: 0px 1px 0px var(--en-text-shadow-color, rgb(0 0 0 / 0.075)), 0px 1px 1px var(--en-text-shadow-color, rgb(0 0 0 / 0.075)), 0px 2px 2px var(--en-text-shadow-color, rgb(0 0 0 / 0.075));
}"
        );
        assert_eq!(
            generate(["text-shadow-none"], &base_config()),
            ".text-shadow-none {
  text-shadow: none;
}"
        );
        assert_eq!(
            generate(["text-shadow-[12px_3rem_12rem_#f00]"], &base_config()),
            r".text-shadow-\[12px_3rem_12rem_\#f00\] {
  text-shadow: 12px 3rem 12rem var(--en-text-shadow-color, #f00);
}"
        );
    }

    #[test]
    fn text_shadow_color() {
        assert_eq!(
            generate(["text-shadow-red-400"], &base_config()),
            ".text-shadow-red-400 {
  --en-text-shadow-color: oklch(70.4% .191 22.216);
}"
        );
        assert_eq!(
            generate(["text-shadow-[rgb(12,12,12)]"], &base_config()),
            r".text-shadow-\[rgb\(12\,12\,12\)\] {
  --en-text-shadow-color: rgb(12,12,12);
}"
        );
    }

    #[test]
    fn mix_blend_mode() {
        assert_eq!(
            generate(["mix-blend-multiply"], &base_config()),
            ".mix-blend-multiply {
  mix-blend-mode: multiply;
}"
        );
        assert_eq!(
            generate(["mix-blend-plus-lighter"], &base_config()),
            ".mix-blend-plus-lighter {
  mix-blend-mode: plus-lighter;
}"
        );
    }

    #[test]
    fn opacity() {
        assert_eq!(
            generate(["opacity-12"], &base_config()),
            ".opacity-12 {
  opacity: 0.12;
}"
        );
    }
}