// Input - error
$pf-c-form-control--invalid--Color: $pf-global--danger-color--100 !default;
$pf-c-form-control--invalid--Coordinates: "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z" !default;
$pf-c-form-control__select--Coordinates: "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z" !default;
$pf-c-form-control__select--ViewBox: "320" !default;

// Input - success
$pf-c-form-control--success--Color: $pf-global--success-color--100 !default;
$pf-c-form-control--success--Coordinates: "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z" !default;

// Input - search
$pf-c-form-control--m-search--Color: $pf-global--icon--Color--light !default;
$pf-c-form-control--m-search--Coordinates: "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" !default;


.pf-c-form-control {
  // Component
  --pf-c-form-control--FontSize: var(--pf-global--FontSize--md);
  --pf-c-form-control--LineHeight: var(--pf-global--LineHeight--md);
  --pf-c-form-control--BorderWidth: var(--pf-global--BorderWidth--sm);
  --pf-c-form-control--BorderTopColor: var(--pf-global--BorderColor--300);
  --pf-c-form-control--BorderRightColor: var(--pf-global--BorderColor--300);
  --pf-c-form-control--BorderBottomColor: var(--pf-global--BorderColor--200);
  --pf-c-form-control--BorderLeftColor: var(--pf-global--BorderColor--300);
  --pf-c-form-control--BorderRadius: 0;
  --pf-c-form-control--BackgroundColor: var(--pf-global--BackgroundColor--100);
  --pf-c-form-control--Height: calc(var(--pf-c-form-control--FontSize) * var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth) * 2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom)); // Needed for various browsers that compute height of form elements differently

  // padding
  // Note for top/bottom padding, subtracting the border height so the height of the input is consistent with buttons and dropdowns that use the same spacing but draw their borders with pseudo elements
  --pf-c-form-control--PaddingTop: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));
  --pf-c-form-control--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));
  --pf-c-form-control--PaddingRight: var(--pf-global--spacer--sm);
  --pf-c-form-control--PaddingLeft: var(--pf-global--spacer--sm);

  // hover
  --pf-c-form-control--hover--BorderBottomColor: var(--pf-global--primary-color--100);

  // focus
  --pf-c-form-control--focus--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-form-control--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));
  --pf-c-form-control--focus--BorderBottomColor: var(--pf-global--primary-color--100);

  // input placeholder style
  --pf-c-form-control--placeholder--Color: var(--pf-global--Color--dark-200);

  // input disabled style
  --pf-c-form-control--disabled--Color: var(--pf-global--disabled-color--100);
  --pf-c-form-control--disabled--BackgroundColor: var(--pf-global--disabled-color--300);
  --pf-c-form-control--disabled--BorderColor: transparent;

  // input readonly style
  --pf-c-form-control--readonly--focus--BackgroundColor: var(--pf-global--disabled-color--300);
  --pf-c-form-control--readonly--focus--PaddingBottom: var(--pf-c-form-control--PaddingBottom);
  --pf-c-form-control--readonly--focus--BorderBottomWidth: var(--pf-global--BorderWidth--sm);
  --pf-c-form-control--readonly--focus--BorderBottomColor: var(--pf-global--disabled-color--100);

  // Input m-invalid
  --pf-c-form-control--invalid--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-form-control--invalid--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--invalid--BorderBottomWidth));
  --pf-c-form-control--invalid--BorderBottomColor: var(--pf-global--danger-color--100);
  --pf-c-form-control--invalid--PaddingRight: var(--pf-global--spacer--xl);
  --pf-c-form-control--invalid--BackgroundPosition: calc(100% - var(--pf-c-form-control--PaddingLeft)) var(--pf-c-form-control--PaddingLeft);
  --pf-c-form-control--invalid--BackgroundSize: var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);
  --pf-c-form-control--invalid--BackgroundUrl: #{pf-bg-svg($pf-c-form-control--invalid--Coordinates, $svg-color: $pf-c-form-control--invalid--Color)};
  --pf-c-form-control--invalid--exclamation--Background: var(--pf-c-form-control--invalid--BackgroundUrl) var(--pf-c-form-control--invalid--BackgroundPosition) / var(--pf-c-form-control--invalid--BackgroundSize) no-repeat;
  --pf-c-form-control--invalid--Background: var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control--invalid--exclamation--Background);

  // Input m-success
  --pf-c-form-control--success--BorderBottomWidth: var(--pf-global--BorderWidth--md);
  --pf-c-form-control--success--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--success--BorderBottomWidth));
  --pf-c-form-control--success--BorderBottomColor: var(--pf-global--success-color--100);
  --pf-c-form-control--success--PaddingRight: var(--pf-global--spacer--xl);
  --pf-c-form-control--success--BackgroundPosition: calc(100% - var(--pf-c-form-control--PaddingLeft)) var(--pf-c-form-control--PaddingLeft);
  --pf-c-form-control--success--BackgroundSize: var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);
  --pf-c-form-control--success--BackgroundUrl: #{pf-bg-svg($pf-c-form-control--success--Coordinates, $svg-color: $pf-c-form-control--success--Color)};
  --pf-c-form-control--success--check--Background: var(--pf-c-form-control--success--BackgroundUrl) var(--pf-c-form-control--success--BackgroundPosition) / var(--pf-c-form-control--success--BackgroundSize) no-repeat;
  --pf-c-form-control--success--Background: var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control--success--check--Background);

  // Input m-search
  --pf-c-form-control--m-search--PaddingLeft: var(--pf-global--spacer--xl);
  --pf-c-form-control--m-search--BackgroundPosition: var(--pf-c-form-control--PaddingLeft);
  --pf-c-form-control--m-search--BackgroundSize: var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);
  --pf-c-form-control--m-search--BackgroundUrl: #{pf-bg-svg($pf-c-form-control--m-search--Coordinates, $svg-color: $pf-c-form-control--m-search--Color)};
  --pf-c-form-control--m-search--Background: var(--pf-c-form-control--m-search--BackgroundUrl) var(--pf-c-form-control--m-search--BackgroundPosition) / var(--pf-c-form-control--m-search--BackgroundSize) no-repeat;

  // Select
  --pf-c-form-control__select--PaddingRight: var(--pf-global--spacer--lg);
  --pf-c-form-control__select--BackgroundUrl: #{pf-bg-svg($pf-c-form-control__select--Coordinates, $pf-c-form-control__select--ViewBox)};
  --pf-c-form-control__select--BackgroundSize: #{pf-size-prem(14px)};
  --pf-c-form-control__select--BackgroundPosition: calc(100% - var(--pf-global--spacer--sm)) center;
  --pf-c-form-control__select--arrow--Background: var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control__select--BackgroundUrl) var(--pf-c-form-control__select--BackgroundPosition) / var(--pf-c-form-control__select--BackgroundSize) no-repeat;
  --pf-c-form-control__select--Background: var(--pf-c-form-control__select--arrow--Background);
  --pf-c-form-control__select--invalid--Background: var(--pf-c-form-control--invalid--exclamation--Background), var(--pf-c-form-control__select--arrow--Background);
  --pf-c-form-control__select--invalid--PaddingRight: calc(var(--pf-global--spacer--sm) + var(--pf-global--spacer--2xl));
  --pf-c-form-control__select--success--Background: var(--pf-c-form-control--success--check--Background), var(--pf-c-form-control__select--arrow--Background);
  --pf-c-form-control__select--success--PaddingRight: calc(var(--pf-global--spacer--sm) + var(--pf-global--spacer--2xl));

  // This component always needs to be light
  @include pf-t-light;

  width: 100%;
  padding: var(--pf-c-form-control--PaddingTop) var(--pf-c-form-control--PaddingRight) var(--pf-c-form-control--PaddingBottom) var(--pf-c-form-control--PaddingLeft);
  font-size: var(--pf-c-form-control--FontSize);
  line-height: var(--pf-c-form-control--LineHeight);
  background-color: var(--pf-c-form-control--BackgroundColor);
  border: var(--pf-c-form-control--BorderWidth) solid;
  border-color: var(--pf-c-form-control--BorderTopColor) var(--pf-c-form-control--BorderRightColor) var(--pf-c-form-control--BorderBottomColor) var(--pf-c-form-control--BorderLeftColor);
  border-radius: var(--pf-c-form-control--BorderRadius);
  // stylelint-disable
  -moz-appearance: none;
  -webkit-appearance: none;
  // stylelint-enable

  &::placeholder {
    --pf-c-form-control--Color: var(--pf-c-form-control--placeholder--Color);
  }

  &:not(textarea) {
    height: var(--pf-c-form-control--Height);

    // truncate overflow text
    text-overflow: ellipsis;
  }

  &[readonly] {
    &,
    &.pf-m-hover,
    &:hover,
    &.pf-m-focus,
    &:focus {
      --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--readonly--focus--BorderBottomColor);

      padding-bottom: var(--pf-c-form-control--readonly--focus--PaddingBottom); // Can't redefine --pf-c-form-control--PaddingBottom b/c the hover padding bottom uses the focus padding var to compute it's padding
      background-color: var(--pf-c-form-control--readonly--focus--BackgroundColor);
      border-bottom-width: var(--pf-c-form-control--readonly--focus--BorderBottomWidth);
    }
  }

  &.pf-m-hover,
  &:hover {
    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--hover--BorderBottomColor);
  }

  &.pf-m-focus,
  &:focus {
    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--focus--BorderBottomColor);

    padding-bottom: var(--pf-c-form-control--focus--PaddingBottom); // Can't redefine --pf-c-form-control--PaddingBottom b/c the hover padding bottom uses the focus padding var to compute it's padding
    border-bottom-width: var(--pf-c-form-control--focus--BorderBottomWidth);
  }

  &:disabled {
    --pf-c-form-control--Color: var(--pf-c-form-control--disabled--Color);
    --pf-c-form-control--BackgroundColor: var(--pf-c-form-control--disabled--BackgroundColor);

    cursor: not-allowed;
    border-color: var(--pf-c-form-control--disabled--BorderColor);
  }

  &[aria-invalid="true"] {
    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--invalid--PaddingRight);
    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--invalid--BorderBottomColor);

    padding-bottom: var(--pf-c-form-control--invalid--PaddingBottom); // Can't redefine --pf-c-form-control--PaddingBottom b/c the hover padding bottom uses the focus padding var to compute it's padding
    background: var(--pf-c-form-control--invalid--Background);
    border-bottom-width: var(--pf-c-form-control--invalid--BorderBottomWidth);
  }

  &.pf-m-success {
    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--success--PaddingRight);
    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--success--BorderBottomColor);

    padding-bottom: var(--pf-c-form-control--success--PaddingBottom); // Can't redefine --pf-c-form-control--PaddingBottom b/c the hover padding bottom uses the focus padding var to compute it's padding
    background: var(--pf-c-form-control--success--Background);
    border-bottom-width: var(--pf-c-form-control--success--BorderBottomWidth);
  }

  &.pf-m-search {
    padding-left: var(--pf-c-form-control--m-search--PaddingLeft);
    background: var(--pf-c-form-control--m-search--Background);
  }

  @at-root select#{&} {
    --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--PaddingRight);

    background: var(--pf-c-form-control__select--Background);

    &[aria-invalid="true"] {
      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--invalid--PaddingRight);
      --pf-c-form-control--invalid--BackgroundPosition: calc(100% - var(--pf-global--spacer--sm) - var(--pf-global--spacer--lg));
      --pf-c-form-control--invalid--Background: var(--pf-c-form-control__select--invalid--Background);
    }

    &.pf-m-success {
      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--success--PaddingRight);
      --pf-c-form-control--success--BackgroundPosition: calc(100% - var(--pf-global--spacer--sm) - var(--pf-global--spacer--lg));
      --pf-c-form-control--success--Background: var(--pf-c-form-control__select--success--Background);
    }
  }

  &.pf-m-resize-vertical {
    resize: vertical;
  }

  &.pf-m-resize-horizontal {
    resize: horizontal;
  }
}
