//
// Copyright IBM Corp. 2016, 2018
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//

//-----------------------------
// Search
//-----------------------------

@import '../../globals/scss/vars';
@import '../../globals/scss/helper-mixins';
@import '../../globals/scss/css--reset';
@import '../../globals/scss/typography';
@import '../../globals/scss/import-once';

@mixin search {
  .#{$prefix}--search {
    display: flex;
    position: relative;
    width: 100%;
  }

  .#{$prefix}--search .#{$prefix}--label {
    @include hidden;
  }

  .#{$prefix}--search-input {
    @include reset;
    @include font-family;
    appearance: none;
    border: none;
    background-color: $field-01;
    color: $text-01;
    font-weight: 600;
    padding: 0 $spacing-2xl;
    text-overflow: ellipsis;
    width: 100%;
    order: 1;

    &:focus {
      outline: none;
    }

    &:focus ~ .#{$prefix}--search-magnifier {
      fill: $brand-01;
    }

    &::placeholder {
      color: $text-02;
      font-weight: 400;
    }

    &::-ms-clear {
      display: none;
    }
  }

  .#{$prefix}--search--light .#{$prefix}--search-input {
    background: $field-02;
  }

  .#{$prefix}--search--sm .#{$prefix}--search-input {
    @include typescale('zeta');
    height: rem(32px);
  }

  .#{$prefix}--search--lg .#{$prefix}--search-input {
    @include typescale('zeta');
    height: rem(40px);
  }

  .#{$prefix}--search-magnifier,
  .#{$prefix}--search-close {
    position: absolute;
    height: 1rem;
    width: 1rem;
    top: calc(50% - 0.5rem);
    // Ensure clear icon is rendered in Firefox (#1127)
    z-index: 1;
  }

  .#{$prefix}--search-magnifier {
    left: 0.75rem;
    fill: $ui-05;
    z-index: 2;
  }

  .#{$prefix}--search-close {
    @include button-reset(false);

    transition: opacity $transition--base;
    fill: $ui-05;
    cursor: pointer;
    visibility: visible;
    opacity: 1;
  }

  .#{$prefix}--search-close:focus {
    outline: 1px solid $brand-01;
    outline-offset: 2px;
  }

  .#{$prefix}--search-close {
    right: 0.75rem;
  }

  .#{$prefix}--search--lg .#{$prefix}--search-close {
    right: rem(12px);
  }

  .#{$prefix}--search-button {
    @include reset;
    border: 0;
    transition: $transition--base;
    height: rem(40px);
    width: rem(40px);
    min-width: rem(40px);
    margin-left: $spacing-2xs;
    background-color: $ui-01;
    position: relative;
    padding: 0;
    outline: 1px solid transparent;
    order: 2;
  }

  .#{$prefix}--search-button svg {
    position: relative;
    top: -1px;
    box-sizing: border-box;
    vertical-align: middle;
    transition: $transition--base;
    fill: $hover-primary;
    height: 1rem;
    width: 1rem;
  }

  .#{$prefix}--search-button:hover,
  .#{$prefix}--search-button:focus {
    cursor: pointer;
    background-color: $brand-01;
    outline: 1px solid transparent;
  }

  .#{$prefix}--search-button:hover svg,
  .#{$prefix}--search-button:focus svg {
    fill: $ui-01;
  }

  .#{$prefix}--search-close--hidden {
    visibility: hidden;
    opacity: 0;
  }

  .#{$prefix}--search-view--hidden {
    display: none;
  }

  .#{$prefix}--search--lg.#{$prefix}--skeleton .#{$prefix}--search-input,
  .#{$prefix}--search--sm.#{$prefix}--skeleton .#{$prefix}--search-input {
    @include skeleton;
    width: 100%;

    &::placeholder {
      color: transparent;
    }
  }
}

@mixin search--x {
  .#{$prefix}--search {
    display: flex;
    align-items: center;
    position: relative;
    width: 100%;
  }

  .#{$prefix}--search .#{$prefix}--label {
    @include hidden;
  }

  .#{$prefix}--search-input {
    @include reset;
    @include type-style('body-short-02');
    @include focus-outline('reset');
    appearance: none;
    border: none;
    background-color: $field-01;
    color: $text-01;
    padding: 0 $carbon--spacing-08;
    text-overflow: ellipsis;
    width: 100%;
    order: 1;
    transition: background-color $duration--fast-01, outline $duration--fast-01;
    border-bottom: 1px solid $ui-04;

    &:focus {
      @include focus-outline('outline');
    }

    &::placeholder {
      color: $text-03;
      font-weight: 400;
    }

    &::-ms-clear {
      display: none;
    }
  }

  .#{$prefix}--search-input[disabled] {
    color: $disabled;
    background-color: $disabled-background-color;
    border-bottom: 1px solid transparent;
    cursor: not-allowed;

    &::placeholder {
      color: $disabled;
      font-weight: 400;
    }
  }

  .#{$prefix}--search-input[disabled] ~ .#{$prefix}--search-magnifier {
    fill: $disabled;
  }

  .#{$prefix}--search--light .#{$prefix}--search-input {
    background: $field-02;
  }

  .#{$prefix}--search--sm .#{$prefix}--search-input {
    @include type-style('body-short-01');
    height: rem(32px);
  }

  .#{$prefix}--search--xl .#{$prefix}--search-input {
    @include type-style('body-short-02');
    font-size: carbon--type-scale(4);
    height: rem(48px);
    padding: 0 rem(64px) 0 rem(48px);
  }

  .#{$prefix}--search-magnifier {
    left: 0.75rem;
    z-index: 2;
    position: absolute;
    height: rem(16px);
    width: rem(16px);
    top: 50%;
    transform: translateY(-50%);
    // Ensure clear icon is rendered in Firefox (#1127)
    fill: $text-02;
  }

  .#{$prefix}--search--xl .#{$prefix}--search-magnifier {
    height: rem(20px);
    width: rem(20px);
    left: rem(24px);
    transform: translate(-50%, -50%);
  }

  .#{$prefix}--search-close {
    @include button-reset(false);
    @include focus-outline('reset');
    display: flex;
    align-items: center;
    justify-content: center;
    transition: opacity $duration--fast-02, outline $duration--fast-02, background-color $duration--fast-02,
      border-color $duration--fast-02;
    border-bottom: 1px solid transparent;
    cursor: pointer;
    visibility: visible;
    opacity: 1;
    position: absolute;
    height: rem(40px);
    width: rem(40px);
    right: 0;
    fill: $icon-01;
    border: 2px solid transparent;
    border-left: 0;

    &:hover {
      background-color: $hover-ui;
      border-bottom: 1px solid $ui-04;
    }
    &:active {
      @include focus-outline('outline');
      background-color: $selected-ui;
    }
  }

  .#{$prefix}--search-input:focus ~ .#{$prefix}--search-close:hover {
    border: 2px solid $focus;
    border-left: 0;
  }

  .#{$prefix}--search--sm .#{$prefix}--search-close {
    height: rem(32px);
    width: rem(32px);
  }

  .#{$prefix}--search--xl .#{$prefix}--search-close {
    height: rem(48px);
    width: rem(48px);
  }

  .#{$prefix}--search-close:focus {
    @include focus-outline('outline');
  }

  .#{$prefix}--search-close--hidden {
    visibility: hidden;
    opacity: 0;
  }

  .#{$prefix}--search--lg.#{$prefix}--skeleton .#{$prefix}--search-input,
  .#{$prefix}--search--sm.#{$prefix}--skeleton .#{$prefix}--search-input {
    @include skeleton;
    width: 100%;

    &::placeholder {
      color: transparent;
    }
  }
}

@include exports('search') {
  @if feature-flag-enabled('components-x') {
    @include search--x;
  } @else {
    @include search;
  }
}
