// SASS variables are information about icon's compiled state, stored under its original file name
//
// .icon-home
//   width: $icon-home-width
//
// The large array-like variables contain all information about a single icon
// $icon-home: x y offset_x offset_y width height total_width total_height image_path
//
// At the bottom of this section, we provide information about the spritesheet itself
// $spritesheet: width height image $spritesheet-sprites
$sprite-dash-case-name: 'sprite-dash-case'
$sprite-dash-case-x: 0px
$sprite-dash-case-y: 0px
$sprite-dash-case-offset-x: 0px
$sprite-dash-case-offset-y: 0px
$sprite-dash-case-width: 10px
$sprite-dash-case-height: 20px
$sprite-dash-case-total-width: 80px
$sprite-dash-case-total-height: 100px
$sprite-dash-case-image: 'nested/dir/spritesheet.png'
$sprite-dash-case: (0px, 0px, 0px, 0px, 10px, 20px, 80px, 100px, 'nested/dir/spritesheet.png', 'sprite-dash-case', )
$sprite-snake-case-name: 'sprite_snake_case'
$sprite-snake-case-x: 10px
$sprite-snake-case-y: 20px
$sprite-snake-case-offset-x: -10px
$sprite-snake-case-offset-y: -20px
$sprite-snake-case-width: 20px
$sprite-snake-case-height: 30px
$sprite-snake-case-total-width: 80px
$sprite-snake-case-total-height: 100px
$sprite-snake-case-image: 'nested/dir/spritesheet.png'
$sprite-snake-case: (10px, 20px, -10px, -20px, 20px, 30px, 80px, 100px, 'nested/dir/spritesheet.png', 'sprite_snake_case', )
$sprite-camel-case-name: 'spriteCamelCase'
$sprite-camel-case-x: 30px
$sprite-camel-case-y: 50px
$sprite-camel-case-offset-x: -30px
$sprite-camel-case-offset-y: -50px
$sprite-camel-case-width: 50px
$sprite-camel-case-height: 50px
$sprite-camel-case-total-width: 80px
$sprite-camel-case-total-height: 100px
$sprite-camel-case-image: 'nested/dir/spritesheet.png'
$sprite-camel-case: (30px, 50px, -30px, -50px, 50px, 50px, 80px, 100px, 'nested/dir/spritesheet.png', 'spriteCamelCase', )
$sprite-dash-case-2x-name: 'sprite-dash-case@2x'
$sprite-dash-case-2x-x: 0px
$sprite-dash-case-2x-y: 0px
$sprite-dash-case-2x-offset-x: 0px
$sprite-dash-case-2x-offset-y: 0px
$sprite-dash-case-2x-width: 20px
$sprite-dash-case-2x-height: 40px
$sprite-dash-case-2x-total-width: 160px
$sprite-dash-case-2x-total-height: 200px
$sprite-dash-case-2x-image: 'nested/dir/spritesheet@2x.png'
$sprite-dash-case-2x: (0px, 0px, 0px, 0px, 20px, 40px, 160px, 200px, 'nested/dir/spritesheet@2x.png', 'sprite-dash-case@2x', )
$sprite-snake-case-2x-name: 'sprite_snake_case@2x'
$sprite-snake-case-2x-x: 20px
$sprite-snake-case-2x-y: 40px
$sprite-snake-case-2x-offset-x: -20px
$sprite-snake-case-2x-offset-y: -40px
$sprite-snake-case-2x-width: 40px
$sprite-snake-case-2x-height: 60px
$sprite-snake-case-2x-total-width: 160px
$sprite-snake-case-2x-total-height: 200px
$sprite-snake-case-2x-image: 'nested/dir/spritesheet@2x.png'
$sprite-snake-case-2x: (20px, 40px, -20px, -40px, 40px, 60px, 160px, 200px, 'nested/dir/spritesheet@2x.png', 'sprite_snake_case@2x', )
$sprite-camel-case-2x-name: 'spriteCamelCase@2x'
$sprite-camel-case-2x-x: 60px
$sprite-camel-case-2x-y: 100px
$sprite-camel-case-2x-offset-x: -60px
$sprite-camel-case-2x-offset-y: -100px
$sprite-camel-case-2x-width: 100px
$sprite-camel-case-2x-height: 100px
$sprite-camel-case-2x-total-width: 160px
$sprite-camel-case-2x-total-height: 200px
$sprite-camel-case-2x-image: 'nested/dir/spritesheet@2x.png'
$sprite-camel-case-2x: (60px, 100px, -60px, -100px, 100px, 100px, 160px, 200px, 'nested/dir/spritesheet@2x.png', 'spriteCamelCase@2x', )
$spritesheet-width: 80px
$spritesheet-height: 100px
$spritesheet-image: 'nested/dir/spritesheet.png'
$spritesheet-sprites: ($sprite-dash-case, $sprite-snake-case, $sprite-camel-case, )
$spritesheet: (80px, 100px, 'nested/dir/spritesheet.png', $spritesheet-sprites, )
$retina-spritesheet-width: 160px
$retina-spritesheet-height: 200px
$retina-spritesheet-image: 'nested/dir/spritesheet@2x.png'
$retina-spritesheet-sprites: ($sprite-dash-case-2x, $sprite-snake-case-2x, $sprite-camel-case-2x, )
$retina-spritesheet: (160px, 200px, 'nested/dir/spritesheet@2x.png', $retina-spritesheet-sprites, )

// These "retina group" variables are mappings for the naming and pairing of normal and retina sprites.
//
// The list formatted variables are intended for mixins like `retina-sprite` and `retina-sprites`.
$sprite-dash-case-group-name: 'sprite-dash-case'
$sprite-dash-case-group: ('sprite-dash-case', $sprite-dash-case, $sprite-dash-case-2x, )
$sprite-snake-case-group-name: 'sprite_snake_case'
$sprite-snake-case-group: ('sprite_snake_case', $sprite-snake-case, $sprite-snake-case-2x, )
$sprite-camel-case-group-name: 'spriteCamelCase'
$sprite-camel-case-group: ('spriteCamelCase', $sprite-camel-case, $sprite-camel-case-2x, )
$retina-groups: ($sprite-dash-case-group, $sprite-snake-case-group, $sprite-camel-case-group, )

// The provided mixins are intended to be used with the array-like variables
//
// .icon-home
//   @include sprite-width($icon-home)
//
// .icon-email
//   @include sprite($icon-email)
//
// Example usage in HTML:
//   `display: block` sprite:
//   <div class="icon-home"></div>
//
// To change `display` (e.g. `display: inline-block;`), we suggest using a common CSS class:
//   // CSS
//   .icon {
//     display: inline-block;
//   }
//
//   // HTML
//   <i class="icon icon-home"></i>
@mixin sprite-width($sprite)
  width: nth($sprite, 5)

@mixin sprite-height($sprite)
  height: nth($sprite, 6)

@mixin sprite-position($sprite)
  $sprite-offset-x: nth($sprite, 3)
  $sprite-offset-y: nth($sprite, 4)
  background-position: $sprite-offset-x  $sprite-offset-y

@mixin sprite-image($sprite)
  $sprite-image: nth($sprite, 9)
  background-image: url(#{$sprite-image})

@mixin sprite($sprite)
  @include sprite-image($sprite)
  @include sprite-position($sprite)
  @include sprite-width($sprite)
  @include sprite-height($sprite)

// The `retina-sprite` mixin sets up rules and a media query for a sprite/retina sprite.
//   It should be used with a "retina group" variable.
//
// The media query is from CSS Tricks: https://css-tricks.com/snippets/css/retina-display-media-query/
//
// $icon-home-group: ('icon-home', $icon-home, $icon-home-2x, )
//
// .icon-home
//   @include retina-sprite($icon-home-group)
@mixin sprite-background-size($sprite)
  $sprite-total-width: nth($sprite, 7)
  $sprite-total-height: nth($sprite, 8)
  background-size: $sprite-total-width $sprite-total-height

@mixin retina-sprite($retina-group)
  $normal-sprite: nth($retina-group, 2)
  $retina-sprite: nth($retina-group, 3)
  @include sprite($normal-sprite)

  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)
    @include sprite-image($retina-sprite)
    @include sprite-background-size($normal-sprite)

// The `sprites` mixin generates identical output to the CSS template
//   but can be overridden inside of SASS
//
// @include sprites($spritesheet-sprites)
@mixin sprites($sprites)
  @each $sprite in $sprites
    $sprite-name: nth($sprite, 10)
    .#{$sprite-name}
      @include sprite($sprite)

// The `retina-sprites` mixin generates a CSS rule and media query for retina groups
//   This yields the same output as CSS retina template but can be overridden in SASS
//
// @include retina-sprites($retina-groups)
@mixin retina-sprites($retina-groups)
  @each $retina-group in $retina-groups
    $sprite-name: nth($retina-group, 1)
    .#{$sprite-name}
      @include retina-sprite($retina-group)
