@import '../mixins.scss';
@import '../animation/variables.scss';
@import '../components/ivue-icon-mixin.scss';

$name: 'ivue-select';

:root {
  // loading
  --#{$name}-loading-padding: 7px 16px;
  --#{$name}-loading-height: 100px;
  --#{$name}-loading-load-size: 17px;

  // input
  --#{$name}-input-height: 36px;

  // close
  --#{$name}-close-color: #666666;

  // loading
  --#{$name}-loading-color: #9ab0c6;

  // visible
  --#{$name}-visible-selection-color: rgba(91, 142, 255, 0.8);
  --#{$name}-visible-selection-shadow-color: rgba(91, 142, 255, 0.2);
  --#{$name}-disabled-selection-hover-color: var(--ivue-border-color);

  // tag
  --#{$name}-tag-border-color: #e8eaec;
  --#{$name}-tag-border-bg: #f8f9fd;
  --#{$name}-tag-icon-color: #bfcdd9;

  // dropdown
  --#{$name}-dropdown-shadow-color: rgba(0, 0, 0, 0.2);

  // not-find
  --#{$name}-not-find-color: #9ab0c6;
}

.#{$name} {
  position: relative;
  display: inline-block;
  width: 100%;
  box-sizing: border-box;
  vertical-align: middle;
  color: var(--ivue-text-color);
  font-size: var(--ivue-font-base-size);
  line-height: normal;

  // 加载中
  &-loading {
    padding: var(--#{$name}-loading-padding);
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--#{$name}-loading-color);
    height: var(--#{$name}-loading-height);

    &--load {
      display: flex;
      align-items: center;

      .load {
        margin-right: 10px;
        position: relative;
        width: var(--#{$name}-loading-load-size);
        height: var(--#{$name}-loading-load-size);
      }
    }
  }

  // 禁用样式
  &-disabled {
    .#{$name}-selection {
      opacity: 1;
      cursor: not-allowed;
      color: var(--ivue-input-disabled-color);
      background-color: var(--ivue-input-disabled-bg);

      &:hover {
        border-color: var(--#{$name}-disabled-selection-hover-color);
      }
    }

    .#{$name}-arrow {
      color: var(--ivue-input-disabled-color);
    }
  }

  // 默认样式
  &-default {
    .#{$name}-selection {
      position: relative;
      height: var(--#{$name}-input-height);

      // 输入提示
      .#{$name}-placeholder {
        color: var(--ivue-input-placeholder-color);
      }

      .#{$name}-placeholder {
        display: block;
        height: calc(var(--#{$name}-input-height) - 2px);
        line-height: calc(var(--#{$name}-input-height) - 2px);
        font-size: var(--ivue-font-base-size);
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        padding: 0 24px 0 8px;
      }
    }

    .#{$name}-input-filter {
      width: 100%;
    }
  }

  // 多选样式
  &-multiple &-selection {
    padding: 0 24px 0 4px;

    .#{$name}-placeholder {
      position: absolute;
      top: 0;
      display: block;
      height: calc(var(--#{$name}-input-height) - 2px);
      line-height: calc(var(--#{$name}-input-height) - 2px);
      color: var(--ivue-input-placeholder-color);
      font-size: var(--ivue-font-base-size);
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      padding: 0 22px 0 4px;
    }
  }

  // 头部开启prefix
  &-head-is-prefix {
    .#{$name}-placeholder {
      position: relative !important;
    }
  }

  &-head-input {
    padding: 0;
    outline: 0;
    border: none;
    background: 0 0;
    cursor: inherit;
  }

  // 选择框
  &-selection {
    display: block;
    position: relative;
    box-sizing: border-box;
    outline: none;
    user-select: none;
    border-radius: var(--ivue-border-radius);
    border: 1px solid var(--ivue-border-color);
    background-color: var(--ivue-white-color);
    min-height: var(--#{$name}-input-height);
    cursor: pointer;
    transition: var(--ivue-all-transition);

    &:hover {
      border-color: var(--#{$name}-visible-selection-color);
    }
  }

  // 多项选择
  &-selection-multiple {
    display: inline-block;
    margin: 3px 4px 3px 0;
    padding: 0 8px;
    height: 24px;
    line-height: 22px;
    font-size: var(--ivue-font-base-size);
    vertical-align: middle;
    opacity: 1;
    overflow: hidden;
    border: 1px solid var(--ivue-border-multiple-color);
    border-radius: 3px;
    background: var(--ivue-background-color-multiple);
    cursor: pointer;

    &-close {
      display: inline-block;
      position: relative;
      top: -1px;
      margin-left: 2px;
      opacity: 0.6;
      font-size: var(--ivue-font-base-size);
      width: auto;
      min-width: auto;
      height: auto;
      color: var(--#{$name}-close-color);
      cursor: pointer;
    }
  }

  // 过滤输入框
  &-input-filter {
    display: inline-block;
    position: relative;
    padding: 0 24px 0 8px;
    font-size: var(--ivue-font-base-size);
    outline: none;
    border: none;
    box-sizing: border-box;
    height: var(--#{$name}-input-height);
    line-height: var(--#{$name}-input-height);
    color: var(--ivue-text-color);
    background-color: transparent;
    cursor: pointer;

    @include placeholder;

    &[disabled] {
      cursor: not-allowed;
      color: var(--ivue-input-disabled-color);
    }
  }

  // 在 Select 内显示图标
  &-prefix {
    padding-left: 4px;
    display: inline-block;
    vertical-align: middle;
    height: calc(var(--#{$name}-input-height) - 2px);
    line-height: calc(var(--#{$name}-input-height) - 2px);
  }

  // 多选头部外层
  &-head-wrapper {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    width: 100%;
  }

  // 有图标设置样式
  &-head-with-prefix {
    flex: 1;
    padding-left: 4px !important;
    display: inline-block !important;
    vertical-align: middle;
  }

  // 多选和设置了最大显示数时的方框
  &-tag {
    position: relative;
    display: inline-block;
    height: 22px;
    line-height: 22px;
    margin: 2px 4px 2px 0;
    padding: 0 8px;
    border: 1px solid var(--#{$name}-tag-border-color);
    border-radius: 3px;
    background: var(--#{$name}-tag-border-bg);
    font-size: var(--ivue-font-base-size);
    vertical-align: middle;
    opacity: 1;
    overflow: hidden;
    transition: all $ivue-transition-default;

    // 文字
    &-text {
      color: var(--ivue-text-color);
      transition: color $ivue-transition-default;
    }

    .ivue-icon {
      margin: 0;
      width: auto;
      min-width: auto;
      height: auto;
      cursor: pointer;
      font-size: 14px;
      color: var(--#{$name}-tag-icon-color);
      line-height: 26px;
      transition: color $ivue-transition-default;
    }

    // hover
    &:hover {
      background: var(--ivue-primary-color);
      border-color: var(--ivue-primary-color);

      // 文字
      .#{$name}-tag-text,
      .ivue-icon {
        color: var(--ivue-white-color);
      }
    }
  }

  // 头部开启了过滤 && 自定义了 prefix
  &-head-flex {
    display: flex;
    align-items: center;
    padding-left: 4px;
  }

  // 开启了多选
  &-multiple {
    .#{$name}-prefix {
      padding: 0 4px 0 0;
    }

    // tag 隐藏
    &-tag-hidden {
      margin-right: 0 !important;
    }

    .#{$name}-head-with-prefix {
      padding-left: 0 !important;
    }

    .#{$name}-tag {
      height: 28px;
      line-height: 26px;
      margin: 3px 4px 3px 0;
      max-width: 100%;
      position: relative;

      i {
        display: block;
        position: absolute;
        right: 4px;
        top: 0;
      }
    }

    .#{$name}-tag span:not(.ivue-select-max-tag) {
      display: block;
      margin-right: 14px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
    }

    .#{$name}-item {
      &-selected:after {
        @include ivue-icon;

        content: 'done';
        position: absolute;
        top: 0;
        bottom: 0;
        right: 8px;
        padding: 0 !important;
        font-size: 17px;
        color: currentColor;
        transition: none;
      }
    }
  }

  // 头部开启了过滤 && 自定义了 prefix && 开启了多选
  &-multiple &-head-flex &-prefix {
    margin-right: 4px;
  }

  &-multiple &-input-filter {
    padding: 0 0 0 4px;
    height: calc(var(--#{$name}-input-height) - 2px);
    line-height: calc(var(--#{$name}-input-height) - 12px);
  }

  &-multiple &-input-filter-placeholder {
    height: calc(var(--#{$name}-input-height) - 2px);
    line-height: calc(var(--#{$name}-input-height) - 12px);
  }

  // 输入框箭头方向
  .#{$name}-arrow {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    line-height: 1;
    font-size: var(--ivue-font-default-size);
    font-weight: bold;
    color: var(--ivue-arrow-color);
    height: 100%;
    transition: var(--ivue-all-transition);
  }

  // 删除图标
  &-clear {
    text-align: center;
  }

  &-selection-value {
    display: block;
    padding-left: 8px;
    padding-right: 24px;
    height: calc(var(--#{$name}-input-height) - 2px);
    line-height: calc(var(--#{$name}-input-height) - 2px);
    font-size: var(--ivue-font-base-size);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  &-visible {
    .#{$name}-selection {
      border-color: var(--#{$name}-visible-selection-color);
      outline: 0;
      box-shadow: 0 0 0 2px var(--#{$name}-visible-selection-shadow-color);
    }

    .#{$name}-arrow {
      transform: rotate(180deg);
      transform-origin: center center;
    }
  }

  // 下拉菜单
  &-dropdown {
    position: absolute;
    padding: 5px 0;
    width: inherit;
    max-height: 200px;
    overflow: auto;
    background-color: var(--ivue-white-color);
    box-sizing: border-box;
    border-radius: var(--ivue-border-radius);
    box-shadow: 0 1px 6px var(--#{$name}-dropdown-shadow-color);
    z-index: 999;
    transform-origin: center top 0px;
    opacity: 1;

    &[data-popper-placement='top'] {
      transform-origin: center bottom 0px;
    }

    &--transfer {
      z-index: 1060;
      width: auto;
    }
  }

  .ivue-auto-complete {
    height: auto;
  }

  // 下拉菜单列表
  &-dropdown-list {
    width: 100%;
  }

  // 没有数据时的提示
  &-not-find {
    padding: 7px 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--#{$name}-not-find-color);
    height: 100px;

    li {
      margin-bottom: 0;
    }
  }

  // 菜单数据列表
  &-item {
    position: relative;
    margin: 0;
    padding: 7px 16px;
    clear: both;
    line-height: normal;
    font-size: var(--ivue-font-base-size);
    list-style: none;
    cursor: pointer;
    word-break: break-all;
    display: flex;
    align-items: center;
    color: var(--ivue-text-color);
    transition: all $ivue-transition-default;

    @media screen and (min-width: 800px) {
      &:hover {
        color: var(--ivue-white-color);
      }
    }

    &--create {
      justify-content: space-between;

      .text {
        flex: 1;
        width: 100%;
        margin: 0;
      }

      i {
        font-size: 14px;
        margin: 0;
        transition: all 0.1s $ivue-transition-default-timing;
      }
    }

    // 选项菜单禁用样式
    &-disabled {
      cursor: not-allowed;
      color: var(--ivue-input-disabled-color);

      &:hover {
        color: var(--ivue-input-disabled-color);
      }
    }

    &-selected {
      opacity: 1;
      color: var(--ivue-white-color);
    }
  }

  // 菜单数据列表group
  &-group {
    list-style: none;
    margin: 0;
    padding: 0;

    &-title {
      padding-left: 8px;
      font-size: var(--ivue-font-base-size);
      color: var(--ivue-legend-color);
      height: 30px;
      line-height: 30px;
    }
  }
}

// 下拉菜单动画
.transition-drop-appear,
.transition-drop-enter-active {
  animation-duration: 0.3s;
  animation-fill-mode: both;
  animation-name: transitionDropIn;
  animation-play-state: running;
  opacity: 0;
  animation-timing-function: ease-in-out;
}

.transition-drop-leave-active {
  animation-duration: 0.3s;
  animation-fill-mode: both;
  animation-timing-function: ease-in-out;
  animation-name: transitionDropOut;
  animation-play-state: running;
}

@keyframes transitionDropIn {
  0% {
    opacity: 0;
    transform: scaleY(0.8);
  }

  100% {
    opacity: 1;
    transform: scaleY(1);
  }
}

@keyframes transitionDropOut {
  0% {
    opacity: 1;
    transform: scaleY(1);
  }

  100% {
    opacity: 0;
    transform: scaleY(0.8);
  }
}

// 多选选项动画
.multiple-transition-enter-active,
.multiple-transition-leave-active {
  transition: opacity 0.3s ease-in-out;
}

.multiple-transition-enter-from,
.multiple-transition-leave-to {
  opacity: 0;
}

// 提示输入框动画
.ivue-select-fade-enter-active,
.ivue-select-fade-leave-active {
  transition: opacity 0.3s ease-in-out;
}

.ivue-select-fade-enter-from,
.ivue-select-fade-leave-to {
  opacity: 0;
}

// 下拉菜单选项动画
.ivue-select-item-fade-enter-active {
  transition: opacity 0.3s ease-in-out;
}

.ivue-select-item-fade-enter-from,
.ivue-select-item-fade-leave-to {
  opacity: 0;
}
