@use "sass:map";
@use "sass:meta";
@use "../config" as *;
@use "../layout/breakpoints" as *;
@use "../mixins/utilities" as *;
@use "../utilities" as *;

@layer utilities {
  // Loop over each breakpoint
  @each $breakpoint in map.keys($breakpoints) {

    // Generate media query if needed
    @include media-breakpoint-up($breakpoint) {
      $prefix: breakpoint-prefix($breakpoint, $breakpoints);

      // Loop over each utility property
      @each $key, $utility in $utilities {
        // The utility can be disabled with `false`, thus check if the utility is a map first
        // Only proceed if responsive media queries are enabled or if it's the base media query
        @if meta.type-of($utility) == "map" and (map.get($utility, responsive) or $prefix == "") {
          @include generate-utility($utility, $prefix);
        }
      }
    }
  }

  // Print utilities
  @media print {
    @each $key, $utility in $utilities {
      // The utility can be disabled with `false`, thus check if the utility is a map first
      // Then check if the utility needs print styles
      @if meta.type-of($utility) == "map" and map.get($utility, print) == true {
        @include generate-utility($utility, "print\\:");
      }
    }
  }
}
