/// Cria um mapa de variáveis para o prefixo informado. Os novos índices podem ou não manter o prefixo.
/// @param {String} $token-prefix - Prefixo do token
/// @param {Map} $tokens-map [$tokens] - Mapa de variáveis dos tokens
/// @param {Boolean} $keys-with-prefix [true] - Indica se os índices do novo mapa devem incluir o prefixo
/// @example scss - Índices com prefixo
///   $line-heights: create-map($token-prefix: "line-height-");
///
///   $line-heights: (
///     line-height-low: 1.2,
///     line-height-medium: 1.5,
///     line-height-high: 1.8
///   );
/// @example scss - Índices sem prefixo
///   $colors: create-map($token-prefix: "colors-", $keys-with-prefix: false);
///
///   $colors: (
///     pure-0: #ffffff,
///     pure-100: #000000,
///     gray-1: #fcfcfc,
///     ...
///   );
@function create-map($token-prefix, $tokens-map: $tokens, $keys-with-prefix: true) {
  // Inicializa um novo mapa vazio
  $new-map: ();

  // Itera sobre o mapa original de tokens
  @each $key, $value in $tokens-map {
    // Retorna verdadeiro para os tokens que possuam o prefixo informado
    @if str-index($key, $token-prefix) == 1 {
      $component-prefix-length: str-length($token-prefix) + 1;
      $new-no-prefix: str-slice($key, $component-prefix-length);

      // Condicional ternário para novo mapa, considerando a inclusão ou não do prefixo nos índices
      $new-map: if(
        $keys-with-prefix,
        map-merge($new-map, (#{$key}: #{$value})),
        map-merge($new-map, (#{$new-no-prefix}: #{$value}))
      );
    }
  }

  // Retorna o novo mapa
  @return $new-map;
}
