@use './utils/string.scss' as *;
@use './variable.scss' as *;

$ns: '';
$b: '';
$e: null;
$m: null;

@mixin isAtRoot() {
  @if ($is-at-root) {
    @at-root {
      @content;
    }
  }

  @else {
    @content;
  }
}

@mixin ns($namespace_scope) {
  $ns: join($namespace, $common-separator, $namespace_scope) !global;

  .#{$ns} {
    @content;
  }
}

@mixin b($block) {
  @if ($ns =='') {
    $b: join($namespace, $common-separator, $block) !global;
  }

  else {
    $b: join($ns, $common-separator, $block) !global;
  }


  @include isAtRoot {
    .#{$b} {
      @content;
    }
  }
}

@mixin e($element...) {
  $currentSelector: (
  );

@each $item in $element {
  $currentSelector: append($currentSelector,
      join($b, $element-separator, $item),
      comma);
}

$e: $currentSelector !global;

@include isAtRoot {
  .#{$currentSelector} {
    @content;
  }
}
}

@mixin m($modify...) {
  $m: (
  );
$currentSelector: (
);

@each $_b in $e {
  $current: (
  );
$m: append($m, $_b, comma);
}

@each $_e in $m {
  $current: (
  );

@each $unit in $modify {
  $current: append($current, join($_e, $modifier-separator, $unit), comma);
}

$currentSelector: append($currentSelector, $current, comma);
}

@include isAtRoot {
  .#{$currentSelector} {
    @content;
  }
}
}