@use 'sass:map';

$base-enums: (
  'none': 0,
  '0\\.25': 0.25em,
  '0\\.5': 0.5em,
  '0\\.75': 0.75em,
  '1': 1em,
  '1\\.25': 1.25em,
  '1\\.5': 1.5em,
  '2': 2em,
  '3': 3em,
  '4': 4em
);

$margin-enums: map.set($base-enums, 'auto', auto);

/*=== Spacing ===*/

@each $enum, $value in $base-enums {
  .spacing-h--#{$enum} {
    > * {
      margin-right: $value;

      &:last-child {
        margin-right: 0;
      }
    }
  }
}

@each $enum, $value in $base-enums {
  .spacing-v--#{$enum} {
    > * {
      margin-bottom: $value;

      &:last-child {
        margin-bottom: 0;
      }
    }
  }
}

/*=== Margins ===*/

@each $enum, $value in $margin-enums {
  .margin--#{$enum} {
    margin: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-v--#{$enum} {
    margin-bottom: $value;
    margin-top: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-h--#{$enum} {
    margin-left: $value;
    margin-right: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-l--#{$enum} {
    margin-left: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-r--#{$enum} {
    margin-right: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-b--#{$enum} {
    margin-bottom: $value;
  }
}

@each $enum, $value in $margin-enums {
  .margin-t--#{$enum} {
    margin-top: $value;
  }
}

/*=== Padding ===*/

@each $enum, $value in $base-enums {
  .padding--#{$enum} {
    padding: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-v--#{$enum} {
    padding-bottom: $value;
    padding-top: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-h--#{$enum} {
    padding-left: $value;
    padding-right: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-l--#{$enum} {
    padding-left: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-r--#{$enum} {
    padding-right: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-b--#{$enum} {
    padding-bottom: $value;
  }
}

@each $enum, $value in $base-enums {
  .padding-t--#{$enum} {
    padding-top: $value;
  }
}

/*=== Flex Gap ===*/
@each $enum, $value in $base-enums {
  .flex-gap--#{$enum} {
    gap: $value;
  }
}

@each $enum, $value in $base-enums {
  .flex-gap-v--#{$enum} {
    row-gap: $value;
  }
}

@each $enum, $value in $base-enums {
  .flex-gap-h--#{$enum} {
    column-gap: $value;
  }
}
