@function each-negative-space-between($space-between-config) {
  @each $key, $space-between in $space-between-config {
    $space-between-config: map.set(
      $space-between-config,
      $key,
      -$space-between
    );
  }
  @return $space-between-config;
}

@function each-space-x($space-between-config) {
  @each $key, $space-between in $space-between-config {
    $space-between-config: map.set(
      $space-between-config,
      $key,
      (
        margin-right: calc(#{$space-between} * var(--bs-space-x-reverse)),
        margin-left:
          calc(#{$space-between} * calc(1 - var(--bs-space-x-reverse))),
      )
    );
  }
  @return $space-between-config;
}

@function each-space-y($space-between-config) {
  @each $key, $space-between in $space-between-config {
    $space-between-config: map.set(
      $space-between-config,
      $key,
      (
        margin-top:
          calc(#{$space-between} * calc(1 - var(--bs-space-y-reverse))),
        margin-bottom: calc(#{$space-between} * var(--bs-space-y-reverse)),
      )
    );
  }
  @return $space-between-config;
}

$utilities: map-merge(
  $utilities,
  (
    "space-x": (
      property: margin-right margin-left,
      class: space-x,
      variants: space,
      values: each-space-x($space-between-config),
    ),
    "space-x-reverse": (
      property: --bs-space-x-reverse,
      class: space-x,
      variants: space,
      values: (
        reverse: 1,
      ),
    ),
    "negative-space-x": (
      property: margin-right margin-left,
      class: -space-x,
      variants: space,
      values: each-space-x(each-negative-space-between($space-between-config)),
    ),
    "space-y": (
      property: margin-top margin-bottom,
      class: space-y,
      variants: space,
      values: each-space-y($space-between-config),
    ),
    "space-y-reverse": (
      property: --bs-space-y-reverse,
      class: space-y,
      variants: space,
      values: (
        reverse: 1,
      ),
    ),
    "negative-space-y": (
      property: margin-top margin-bottom,
      class: -space-y,
      variants: space,
      values: each-space-y(each-negative-space-between($space-between-config)),
    ),
  )
);
