@import '../../style/mixin.less';
@import './token.less';

@input-tag-prefix-cls: ~'@{prefix}-input-tag';

.input-tag-input-element-padding(@paddingLeft) {
  .@{input-tag-prefix-cls}-has-placeholder {
    input,
    .@{input-tag-prefix-cls}-input-mirror {
      box-sizing: border-box;
      padding-left: @paddingLeft;
    }
  }
}

.@{input-tag-prefix-cls} {
  display: inline-block;
  box-sizing: border-box;
  width: 100%;
  padding-left: @input-tag-padding-horizontal;
  padding-right: @input-tag-padding-horizontal;
  border-radius: @input-tag-border-radius;
  vertical-align: top;
  cursor: text;
  transition: all @transition-duration-1 @transition-timing-function-linear;

  &-view {
    display: flex;
    width: 100%;
  }

  &-inner {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    flex-grow: 1;
    position: relative;
    box-sizing: border-box;
    overflow: hidden;
  }

  &-suffix {
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    min-width: 22px;
    padding-right: 8px;
  }

  & &-clear-icon {
    display: none;
    font-size: @input-tag-size-icon-clear;
    color: @input-tag-color-icon-clear;
    cursor: pointer;

    > svg {
      transition: color @transition-duration-1 @transition-timing-function-linear;
      position: relative;
    }
  }

  &:hover &-clear-icon {
    display: block;

    & ~ * {
      display: none;
    }
  }

  &:not(&-focus) &-clear-icon:hover::before {
    background-color: @input-tag-color-icon-clear-bg_hover;
  }

  &-input {
    width: 100%;
    padding: 0;
    border: none;
    outline: none;
    background: none;
    font-size: inherit;
    cursor: inherit;
    color: inherit;

    &-mirror {
      position: absolute;
      top: 0;
      left: 0;
      visibility: hidden;
      pointer-events: none;
    }

    &::placeholder {
      color: @input-tag-color-placeholder;
    }
  }

  &-tag {
    margin-right: @input-tag-tag-margin-right;
    font-size: @input-tag-tag-font-size;
  }

  // 多状态下的颜色处理
  .status-color(@status) {
    background-color: ~'@{input-tag-color-bg_@{status}}';
    color: ~'@{input-tag-color-text_@{status}}';
    border: @input-tag-border-width solid ~'@{input-tag-color-border_@{status}}';

    &:hover {
      background-color: ~'@{input-tag-color-bg_@{status}_hover}';
      border: @input-tag-border-width solid ~'@{input-tag-color-border_@{status}_hover}';
    }

    &.@{input-tag-prefix-cls}-focus when not (@status = disabled) {
      background-color: ~'@{input-tag-color-bg_@{status}_focus}';
      border: @input-tag-border-width solid ~'@{input-tag-color-border_@{status}_focus}';
      box-shadow: 0 0 0 ~'@{input-tag-size-shadow_@{status}_focus}' ~'@{input-tag-color-shadow_@{status}_focus}';
    }
  }

  .@{prefix}-icon-hover {
    cursor: pointer;

    &.@{prefix}-icon-hover-disabled {
      cursor: not-allowed;
    }
  }

  .status-tag-color() {
    .@{input-tag-prefix-cls}-tag {
      color: @input-tag-color-text_default;
      border-color: @input-tag-tag-color-border;
      background-color: @input-tag-tag-color-bg;
      display: inline-flex;
      align-items: center;

      &-content {
        flex: 1;
        overflow: hidden;
        text-overflow: ellipsis;
      }
    }

    .@{prefix}-icon-hover:hover::before {
      background-color: @input-tag-tag-remove-icon-color-bg;
    }

    &.@{input-tag-prefix-cls}-focus {
      .@{input-tag-prefix-cls}-tag {
        border-color: @input-tag-tag-color-border_focus;
        background-color: @input-tag-tag-color-bg_focus;
      }

      .@{prefix}-icon-hover:hover::before {
        background-color: @input-tag-tag-remove-icon-color-bg_focus;
      }
    }

    &.@{input-tag-prefix-cls}-disabled {
      .@{input-tag-prefix-cls}-tag {
        color: @input-tag-color-text_disabled;
        border-color: @input-tag-tag-color-border_disabled;
        background-color: @input-tag-tag-color-bg_disabled;
      }
    }
  }

  .status-color(default);
  .status-tag-color();

  &-disabled {
    .status-color(disabled);

    cursor: not-allowed;

    .@{input-tag-prefix-cls}-input::placeholder {
      color: @input-tag-color-text_disabled;
    }
  }

  &-error {
    .status-color(error);
  }

  &-readonly {
    cursor: default;
  }
}

.@{input-tag-prefix-cls} {
  .size(@size) {
    &-size-@{size} {
      @ref-font-size: ~'input-tag-size-@{size}-font-size';
      @ref-height: ~'input-tag-size-@{size}-height';
      @ref-tag-height: ~'input-tag-size-@{size}-tag-height';
      @ref-padding-horizontal_not_tag: ~'input-tag-size-@{size}-padding_no_tag';

      @font-size: @@ref-font-size;
      @height: @@ref-height;
      @tag-height: @@ref-tag-height;
      @padding-horizontal_not_tag: @@ref-padding-horizontal_not_tag;

      font-size: @font-size;

      .@{input-tag-prefix-cls}-view {
        min-height: @height - @input-tag-border-width * 2;
      }

      .@{input-tag-prefix-cls}-inner {
        padding-top: (@height / 2) - (@tag-height / 2) - @input-tag-border-width -
          @input-tag-tag-margin-vertical;
        padding-bottom: $padding-top;
      }

      .@{input-tag-prefix-cls}-tag,
      .@{input-tag-prefix-cls}-tag + .@{input-tag-prefix-cls}-input {
        margin-top: (@input-tag-tag-margin-vertical / 2);
        margin-bottom: $margin-top;
        height: @tag-height;
        line-height: $height - 2;
      }

      &.@{input-tag-prefix-cls}-has-placeholder {
        input,
        .@{input-tag-prefix-cls}-input-mirror {
          box-sizing: border-box;
          padding-left: @padding-horizontal_not_tag - @input-tag-padding-horizontal;
        }
      }
    }
  }

  .size(mini);
  .size(default);
  .size(small);
  .size(large);
}
