// Floating Labels
// *******************************************************************************

// Floating label (Filled)
.form-floating:not(.form-floating-outline) {
  > .form-control,
  > .form-control-plaintext,
  > .form-select {
    background-color: $form-floating-input-bg;
    border: 0;
    border-bottom: 1px solid $input-border-color;
    @include border-bottom-start-radius(0);
    @include border-bottom-end-radius(0);

    &:focus,
    &:not(:placeholder-shown) {
      padding: $form-floating-input-padding-t $form-floating-padding-x $form-floating-input-padding-b
        $form-floating-padding-x;
      &::placeholder {
        color: $input-placeholder-color;
      }
    }
    // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
    &:-webkit-autofill {
      padding: $form-floating-input-padding-t $form-floating-padding-x calc($form-floating-input-padding-b - 1px)
        $form-floating-padding-x;
    }
  }
  // Transform bottom bordered
  > .form-control:focus,
  > .form-select:focus {
    ~ .form-floating-focused {
      transform: scaleX(1);
    }
  }
}
// Floating label (Filled) border bottom
.form-floating-focused {
  position: relative;
  top: -1px;
  z-index: 9;
  display: block;
  width: 100%;
  height: $input-focus-border-width;
  transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s;
  transform: scaleX(0);
}

// Floating label (Outlined)
.form-floating.form-floating-outline {
  > .form-control,
  > .form-select {
    &:focus {
      border-width: $input-focus-border-width;
    }
    &:focus,
    &:not(:placeholder-shown) {
      padding-top: $form-floating-padding-y;
      padding-bottom: $form-floating-padding-y;
      &::placeholder {
        color: $input-placeholder-color;
      }
      // Floating (outline) label position on focus
      ~ label {
        width: auto;
        height: auto;
        padding: 0 $input-focus-border-width;
        margin-left: $form-floating-padding-y;
        transform: $form-floating-outline-label-transform;
        opacity: 1;
        &:after {
          content: '';
          position: absolute;
          height: 0.5rem;
          width: 100%;
          left: 0;
          top: 0.35rem;
          z-index: -1;
        }
      }
    }
    // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped
    &:-webkit-autofill {
      padding-top: $form-floating-padding-y;
      padding-bottom: $form-floating-padding-y;
      ~ label {
        transform: $form-floating-outline-label-transform;
        opacity: 1;
      }
    }
  }

  // Form control padding on focus
  &:focus-within {
    > .form-control:first-child,
    > .form-select:first-child {
      padding: $form-floating-padding-y calc($form-floating-padding-x - 1px);
    }
  }

  // Input group (not first-child) floating (outline) label position
  .input-group & {
    &:not(:first-child) {
      > .form-control:focus,
      > .form-control:not(:placeholder-shown),
      > .form-select {
        ~ label {
          padding: 0 $input-focus-border-width !important;
          margin-left: calc($input-focus-border-width * -1);
          transform: $form-floating-outline-label-transform;
        }
      }
    }
  }
}

// Fie Upload : Floating label File
.form-floating {
  .form-control {
    &::file-selector-button {
      padding: $form-floating-padding-y $form-floating-padding-x;
      margin: (-$form-floating-padding-y) (-$form-floating-padding-x);
      margin-inline-end: $form-floating-padding-x;
    }
  }
}

// RTL
@include rtl-only {
  // Floating label (Filled)
  .form-floating:not(.form-floating-outline) {
    > label {
      right: 0;
      left: inherit;
      transform-origin: 100% 0;
    }

    > .form-control:focus,
    > .form-control:not(:placeholder-shown),
    > .form-select {
      ~ label {
        transform: $form-floating-label-transform-rtl;
      }
    }

    > .form-control:-webkit-autofill {
      ~ label {
        transform: $form-floating-label-transform-rtl;
      }
    }
  }

  // Floating label (Outlined)
  .form-floating.form-floating-outline {
    > label {
      right: 0;
      left: inherit;
      transform-origin: 100% 0;
    }
    // Floating (outline) label position
    > .form-control:focus,
    > .form-control:not(:placeholder-shown),
    > .form-select {
      ~ label {
        margin-right: $form-floating-padding-y;
        margin-left: 0px;
        transform: $form-floating-outline-label-transform-rtl;
      }
    }

    > .form-control:-webkit-autofill {
      ~ label {
        transform: $form-floating-outline-label-transform-rtl;
      }
    }
  }
  .input-group {
    .form-floating.form-floating-outline:not(:first-child) {
      > .form-control:focus,
      > .form-control:not(:placeholder-shown),
      > .form-select {
        ~ label {
          margin-right: calc($input-focus-border-width * -1);
          transform: $form-floating-outline-label-transform-rtl;
        }
      }
    }
  }
}
