//////////////////////// // Default the Breakpoints variable //////////////////////// $breakpoints: () !default; $BREAKPOINTS: () !default;

//////////////////////// // Respond-to API Mixin //////////////////////// @mixin respond-to($context, $no-query: false) {

@if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 {
  @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release.";
  $BREAKPOINTS: $breakpoints !global;
  $breakpoints: () !global;
}

@if type-of($BREAKPOINTS) != 'map' {
  // Just in case someone writes gibberish to the $breakpoints variable.
  @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable.";
  @content;
}
@else if map-has-key($BREAKPOINTS, $context) {
  @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) {
    @content;
  }
}
@else if not map-has-key($BREAKPOINTS, $context) {
  @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`";
  @content;
}
@else {
  @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`";
  @content;
}

}

////////////////////////////// // Add Breakpoint to Breakpoints // TODO: Remove function in next release ////////////////////////////// @function add-breakpoint($name, $bkpt, $overwrite: false) {

$output: ($name: $bkpt);

@if length($breakpoints) == 0 {
  @return $output;
}
@else {
  @if map-has-key($breakpoints, $name) and $overwrite != true {
    @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
    @return $breakpoints;
  }
  @else if not map-has-key($breakpoints, $name) or $overwrite == true {
    @return map-merge($breakpoints, $output);
  }
}

}

@mixin add-breakpoint($name, $bkpt, $overwrite: false) {

$output: ($name: $bkpt);

@if length($BREAKPOINTS) == 0 {
  $BREAKPOINTS: $output !global;
}
@else {
  @if map-has-key($BREAKPOINTS, $name) and $overwrite != true {
    @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint.";
    $BREAKPOINTS: $BREAKPOINTS !global;
  }
  @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true {
    $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global;
  }
}

}

@function get-breakpoint($name: false) {

@if $name == false {
  @return $BREAKPOINTS;
}
@else {
  @return map-get($BREAKPOINTS, $name);
}

}