summaryrefslogtreecommitdiffstats
path: root/afb-client
/// @Foundation.settings
// Button
$button-padding: 0.85em 1em !default;
$button-margin: 0 $global-padding $global-padding 0 !default;
$button-style: solid !default;
$button-background: $primary-color !default;
$button-background-hover: scale-color($button-background, $lightness: -15%) !default;
$button-color: auto !default;
$button-radius: 0 !default;
$button-sizes: (
  tiny: 0.7,
  small: 0.8,
  medium: 1,
  large: 1.3,
) !default;
$button-font-size: 0.9rem !default;
$button-opacity-disabled: 0.5 !default;
$button-tag-selector: false !default;
///

%button {
  display: inline-block;
  border: 0;
  text-align: center;
  line-height: 1;
  cursor: pointer;
  -webkit-appearance: none;
  -webkit-font-smoothing: antialiased;
  transition: background 0.25s ease-out;
  vertical-align: middle;

  padding: $button-padding;
  margin: $button-margin;
  font-size: $button-font-size;
  border-radius: $button-radius;

  // Dropdown arrow
  // TODO: Change to class and mixin because now the toggle is 'fa-open' which is too generic
  // &[data-popup-toggle] {
  //   position: relative;
  //   padding-right: 2em; // Placeholder

  //   &::after {
  //     @include css-triangle(6px, black, top);
  //     position: absolute;
  //     right: 0.7em;
  //     top: 50%;
  //     margin-top: -3px;
  //   }
  // }
}

@mixin button-size($size: medium, $expand: false) {
  $size: $button-font-size * map-get($button-sizes, $size);
  font-size: $size;

  @if $expand {
    @include button-expand;
  }

  @if using(iconic) {
    .iconic {
      width: 1em;
      height: 1em;
      vertical-align: middle;
      margin-right: 0.25em;
      margin-top: -2px; // The icons are oddly misaligned
    }
  }
}

@mixin button-expand($expand: true) {
  @if $expand {
    display: block;
    width: 100%;
    margin-left: 0;
    margin-right: 0;
  }
  @else {
    display: inline-block;
    width: auto;
    margin: $button-margin;
  }
}

@mixin button-style(
  $background: $button-background,
  $background-hover: $button-background-hover,
  $color: $button-color,
  $style: $button-style,
  $radius: $button-radius,
  $btngroup: false
){
  @if $style == hollow {
    border: 1px solid $background;
    background: transparent;
    color: $background;

    &:hover, &:focus {
      border-color: scale-color($background, $lightness: 25%);
      background: transparent;
      color: scale-color($background, $lightness: 25%);
    }
  }
  // Solid is the default
  @else {
    @if $color == auto {
      $color: isitlight($background);
    }

    background: $background;
    color: $color;

    &:hover, &:focus {
      @if $background-hover == auto {
        background: scale-color($background, $lightness: -15%);
      }
      @else {
        background: $background-hover;
      }
      color: $color;
    }
  }

  @if $btngroup {
    border-color: $background;
    &:hover, &:focus {
      border-color: scale-color($background, $lightness: -25%);
    }
  }

  @if using(iconic) {
    @if $style == hollow {
      .iconic {
        @include color-icon($background);
      }
      &:hover .iconic {
        @include color-icon(scale-color($background, $lightness: 25%));
      }
    }
    @else {
      .iconic {
        @include color-icon($color);
      }
    }
  }
}

@mixin button-disabled() {
  opacity: $button-opacity-disabled;
  cursor: default;
  pointer-events: none;
}

@mixin button(
  $size: medium,
  $expand: false,
  $background: $button-background,
  $background-hover: $button-background-hover,
  $color: $button-color,
  $style: $button-style,
  $radius: $button-radius
) {
  @extend %button;
  @include button-size($size);
  @include button-expand($expand);
  @include button-style($background, $background-hover, $color, $style);
}

@include exports(button) {
  .button {
    @include button;

    &.tiny   { @include button-size(tiny); }
    &.small  { @include button-size(small); }
    &.large  { @include button-size(large); }
    &.expand { @include button-expand; }

    &.secondary { @include button-style($secondary-color, auto) }
    &.success   { @include button-style($success-color, auto) }
    &.warning   { @include button-style($warning-color, auto) }
    &.alert     { @include button-style($alert-color, auto) }
    &.info      { @include button-style($info-color, auto) }
    &.dark      { @include button-style($dark-color, auto) }

    @if $button-style != hollow {
      &.hollow { @include button-style($style: hollow);
        &.secondary { @include button-style($secondary-color, $style: hollow); }
        &.success   { @include button-style($success-color, $style: hollow); }
        &.warning   { @include button-style($warning-color, $style: hollow); }
        &.alert     { @include button-style($alert-color, $style: hollow); }
        &.info      { @include button-style($info-color, $style: hollow); }
        &.dark      { @include button-style($dark-color, $style: hollow); }
      }
    }

    &.disabled { @include button-disabled; }
  }

  @if $button-tag-selector {
    button {
      @extend .button;
    }
  }
}