// To RGB
@function to-rgb($hex-color, $opacity: 1) {
  $color: $hex-color;
  @if ($hex-color != transparent and $hex-color != currentColor) {
    $rgba-color: rgba($hex-color, 0.1);
    $color-length: string.length($rgba-color + "");
    $sliced-color: string.slice($rgba-color + "", 1, $color-length - 4) +
      $opacity +
      ")";
    $color: string.unquote($sliced-color);
  }
  @return $color;
}

// Replace String
@function str-replace($string, $search, $replace: "") {
  $index: str-index($string, $search);

  @if $index {
    @return str-slice($string, 1, $index - 1) + $replace +
      str-replace(
        str-slice($string, $index + str-length($search)),
        $search,
        $replace
      );
  }

  @return $string;
}

// Remove Item From List
@function nth-remove($list, $n) {
  $result: ();
  $n: if($n < 0, length($list) + $n + 1, $n);
  $bracketed: is-bracketed($list);
  $separator: list-separator($list);
  @for $i from 1 through length($list) {
    @if $i != $n {
      $result: append($result, nth($list, $i));
    }
  }
  @return join((), $result, $separator, $bracketed);
}

// Implode List
@function nth-implode($list, $separator: "") {
  $result: "";
  @if (length($list) == 1) {
    $result: list.nth($list, 1);
  } @else {
    @each $val in $list {
      $result: $result + $separator + $val;
    }
    $result: string.slice($result, 2);
  }
  @return $result;
}

// Flatten Tree Array
@function flatten($arr, $parentKey...) {
  $newArr: ();
  @each $key, $val in $arr {
    @if type-of($val) == "map" {
      @if (length($parentKey) != 0) {
        $newArr: map-merge($newArr, flatten($val, #{$parentKey}-#{$key}));
      } @else {
        $newArr: map-merge($newArr, flatten($val, $key));
      }
    } @else {
      @if (length($parentKey) != 0) {
        $newArr: map-merge($newArr, (#{$parentKey}-#{$key}: $val));
      } @else {
        $newArr: map-merge($newArr, (#{$key}: $val));
      }
    }
  }

  @return $newArr;
}

// Explode String
@function explode($string, $delimiter) {
  $result: ();
  @if $delimiter == "" {
    @for $i from 1 through str-length($string) {
      $result: append($result, str-slice($string, $i, $i));
    }
    @return $result;
  }
  $exploding: true;
  @while $exploding {
    $d-index: str-index($string, $delimiter);
    @if $d-index {
      @if $d-index > 1 {
        $result: append($result, str-slice($string, 1, $d-index - 1));
        $string: str-slice($string, $d-index + str-length($delimiter));
      } @else if $d-index == 1 {
        $string: str-slice($string, 1, $d-index + str-length($delimiter));
      } @else {
        $result: append($result, $string);
        $exploding: false;
      }
    } @else {
      $result: append($result, $string);
      $exploding: false;
    }
  }
  @return $result;
}
