@charset 'utf-8';
// PascalCase function
// --------------------------
/// convert any string to PascalCase
/// @access public
/// @group case utilities
///
/// @parameter String
///
/// @output String

@function PascalCase($str) {
  $new-str: allowed-characters(
    to-lower-case(safe-characters($str)),
    ("a-Z", "0-9", " ")
  );
  $temp-list: str-splice($new-str, " ");
  $return-str: ();
  @for $i from 1 through length($temp-list) {
    $return-str: append($return-str, letter-uppercase(nth($temp-list, $i)));
  }
  @return trim(list-to-str($return-str, null));
}

// camelCase function
// --------------------------
/// convert any string to camelCase
/// @access public
/// @group case utilities
///
/// @parameter String
///
/// @output String
@function camelCase($str) {
  $str: PascalCase($str);
  @return letter-lowercase($str);
}

// Trim function
// --------------------------
/// Trim a string
/// @access public
/// @group case utilities
///
/// @parameter String
/// @output String
///

@function trim($str) {
  @if str-slice($str, 1, 1) == "" {
    @debug "there is a empty thingy here";
  }
  @if str-slice($str, 1, 1) == " " {
    @return trim(str-slice($str, 2, str-length($str)));
  } @else if str-slice($str, str-length($str), str-length($str)) == " " {
    @return trim(str-slice($str, 1, str-length($str) - 1));
  } @else {
    @return $str;
  }
}

/// Has lowercase function
// --------------------------
/// Check if a string has any lowercase character
///
/// @access public
/// @group case utilities
/// @param {string} $string
/// @return {boolean}
///

@function has-lowercase($str) {
  $hasLowerCaseLetter: false;
  $letterList: to-letter-list($str);
  $lowercase: list-to-str(character-set("a-z"), "");

  @for $i from 1 through length($letterList) {
    @if str-contains($lowercase, nth($letterList, $i)) {
      $hasLowerCaseLetter: true;
    }
  }
  @return $hasLowerCaseLetter;
}

/// Kebab Case function
// --------------------------
/// Convert any string into a kebabcase type.
///
/// @access public
/// @group case utilities
///
/// @param {string} $string
///
/// @return {string}
///
@function kebabCase($str) {
  $new-str: allowed-characters(
    to-lower-case(safe-characters($str)),
    ("a-Z", "0-9", " ")
  );

  @return str-replace($new-str, " ", "-");
}

/// camelCaseToKebabCase function
// --------------------------
/// Convert a camelCase string to a kebab-case string
///
/// @access public
/// @group case utilities
/// @param {string} $string
/// @return {string}
///
@function camelCaseToKebabCase($str) {
  $str: sentenceCase($str);
  $str: kebabCase($str);
  @return $str;
}
/// Sentence case function
// --------------------------
/// Convert any string into a sentence case.
///
/// @access public
/// @group case utilities
/// @param {string} $string
/// @return {string}
///
@function sentenceCase($str) {
  $letterList: to-letter-list($str);
  $new-list: ();

  @for $i from 1 through length($letterList) {
    $char: nth($letterList, $i);

    @if has-lowercase($char) {
      $new-list: append($new-list, $char);
    } @else {
      $new-list: append($new-list, " #{to-lower-case($char)}");
    }
  }

  @return trim(list-to-str($new-list, ""));
}
