/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@import '../../../shared/mixins';

:host {
  max-height: @dropdown-max-height;
  max-width: @dropdown-max-width;
  overflow-y: auto;
  z-index: 1100;

  > li {
    .dropdown-item-default;
    transition: opacity 300ms ease-in, height 100ms 400ms ease-in;
    text-overflow: ellipsis;
    &.filtered {
      overflow: hidden;
      opacity: 0;
      height: 0;
    }
    &.disabled {
      color: @fluid-gray-2;
      cursor: default;
    }
    .list-item-label {
      .dropdown-item-child-default;

      label {
        margin-bottom: 0;
        cursor: pointer;
      }

      input[type=checkbox]:checked + label:after {
        top: @checkbox-top;
      }

      .label-container {
        width: 100%;
      }
    }
    .item-secondary-label-text {
      color: @fluid-gray-2;
      display: block;
      font-size: .8em;
    }
    &.filter {
      padding: 0 .25em;
      position: relative;
      &:hover {
        background-color: transparent;
      }
      .fa {
        margin: 0 .6em 0 0;
        opacity: .8;
        position: absolute;
        right: 0;
        top: .5em
      }
      .fa-search {
        cursor: auto;
      }
      .clear-filter {
        right: 1.3em;
      }
      input {
        height: 2em;
        width: 100%;
      }
      .clear-filter {
        cursor: pointer;
        float: right;
      }
    }
    &.selections {
      font-size: .75em;
      padding: .5em 20px;
      &.use-clear-to-default {
        span.total-selection {
          display: block;
        }
        a {
          padding: 3px 5px;
          &:first-of-type {
            padding-left: 0;
          }
          &:last-of-type {
            padding-right: 0;
          }
        }
      }
      a {
        display: inline;
        &:hover {
          background: transparent none;
          text-decoration: underline;
        }
      }
    }
    &.selections:hover {
      background: transparent none;
    }
  }
}
