@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'common/var' as *;

:root,
:host {
  --xzx-field-label-width: 6.2em;
  --xzx-field-label-color: var(--xzx-text-color);
  --xzx-field-label-margin-right: var(--xzx-padding-sm);
  --xzx-field-input-text-color: var(--xzx-text-color);
  --xzx-field-input-error-text-color: var(--xzx-color-danger);
  --xzx-field-input-disabled-text-color: var(--xzx-text-color-4);
  --xzx-field-placeholder-text-color: var(--xzx-text-color-3);
  --xzx-field-icon-size: var(--xzx-text-md);
  --xzx-field-clear-icon-size: var(--xzx-text-md);
  --xzx-field-clear-icon-color: var(--xzx-text-color-3);
  --xzx-field-right-icon-color: var(--xzx-text-color);
  --xzx-field-error-message-color: var(--xzx-color-danger);
  --xzx-field-error-message-font-size: 12px;
  --xzx-field-text-area-min-height: 60px;
  --xzx-field-word-limit-color: var(--xzx-gray-7);
  --xzx-field-word-limit-font-size: var(--xzx-text-sm);
  --xzx-field-word-limit-line-height: 16px;
  --xzx-field-disabled-text-color: var(--xzx-text-color-4);
  --xzx-field-required-mark-color: var(--xzx-color-danger);
}

@include b(field) {
  flex-wrap: wrap;

  &__label {
    flex: none;
    box-sizing: border-box;
    width: var(--xzx-field-label-width);
    margin-right: var(--xzx-field-label-margin-right);
    color: var(--xzx-field-label-color);
    text-align: left;
    word-wrap: break-word;

    &--center {
      text-align: center;
    }

    &--right {
      text-align: right;
    }

    &--top {
      display: flex;
      width: 100%;
      text-align: left;
      margin-bottom: var(--xzx-padding-xs);
      overflow-wrap: break-word;
    }

    &--required {
      &::before {
        margin-right: 2px;
        color: var(--xzx-field-required-mark-color);
        content: '*';
      }
    }
  }

  &__value {
    overflow: visible;
  }

  &__body {
    display: flex;
    align-items: center;
  }

  &--disabled {
    cursor: not-allowed;

    .xzx-field__label,
    .xzx-field__value {
      color: var(--xzx-field-disabled-text-color);
    }

    &:active {
      background-color: transparent;
    }
  }

  &__control {
    display: block;
    box-sizing: border-box;
    width: 100%;
    min-width: 0; // for flex-shrink in field__button
    margin: 0;
    padding: 0;
    color: var(--xzx-field-input-text-color);
    line-height: inherit;
    text-align: left;
    background-color: transparent;
    border: 0;
    resize: none;
    // https://github.com/vant-ui/vant/pull/9418
    user-select: auto;

    &::placeholder {
      color: var(--xzx-field-placeholder-text-color);
    }

    &:read-only {
      cursor: default;
    }

    &:disabled {
      color: var(--xzx-field-input-disabled-text-color);
      cursor: not-allowed;
      opacity: 1;
      // fix disabled color in mobile safari
      -webkit-text-fill-color: var(--xzx-field-input-disabled-text-color);
    }

    &--center {
      justify-content: center;
      text-align: center;
    }

    &--right {
      justify-content: flex-end;
      text-align: right;
    }

    &--custom {
      display: flex;
      align-items: center;
      min-height: var(--xzx-cell-line-height);
    }

    &--error,
    &--error::placeholder {
      color: var(--xzx-field-input-error-text-color);
      -webkit-text-fill-color: currentColor;
    }

    &--min-height {
      min-height: var(--xzx-field-text-area-min-height);
    }

    // for ios wechat
    &[type='date'],
    &[type='time'],
    &[type='datetime-local'] {
      min-height: var(--xzx-cell-line-height);
    }

    // for safari
    &[type='search'] {
      -webkit-appearance: none;
    }
  }

  &__clear,
  &__icon,
  &__button,
  &__right-icon {
    flex-shrink: 0;
    box-sizing: initial;
  }

  &__clear,
  &__right-icon {
    margin-right: calc(var(--xzx-padding-xs) * -1);
    padding: 0 var(--xzx-padding-xs);
    line-height: inherit;
  }

  &__clear {
    color: var(--xzx-field-clear-icon-color);
    font-size: var(--xzx-field-clear-icon-size);
    cursor: pointer;
  }

  &__left-icon .xzx-icon,
  &__right-icon .xzx-icon {
    display: block;
    font-size: var(--xzx-field-icon-size);
    line-height: inherit;
  }

  &__left-icon {
    margin-right: var(--xzx-padding-base);
  }

  &__right-icon {
    color: var(--xzx-field-right-icon-color);
  }

  &__button {
    padding-left: var(--xzx-padding-xs);
  }

  &__error-message {
    color: var(--xzx-field-error-message-color);
    font-size: var(--xzx-field-error-message-font-size);
    text-align: left;

    &--center {
      text-align: center;
    }

    &--right {
      text-align: right;
    }
  }

  &__word-limit {
    margin-top: var(--xzx-padding-base);
    color: var(--xzx-field-word-limit-color);
    font-size: var(--xzx-field-word-limit-font-size);
    line-height: var(--xzx-field-word-limit-line-height);
    text-align: right;
  }
}
