@import "../../settings/all";
@import "../../tools/all";
@import "../../helpers/all";

@import "../error-message/error-message";
@import "../hint/hint";
@import "../label/label";

@include govuk-exports("govuk/component/input") {
  .govuk-input {
    @include govuk-font($size: 19);

    box-sizing: border-box;
    width: 100%;
    height: 40px;
    margin-top: 0;

    padding: govuk-spacing(1);
    // setting any background-color makes text invisible when changing colours to dark backgrounds in Firefox (https://bugzilla.mozilla.org/show_bug.cgi?id=1335476)
    // as background-color and color need to always be set together, color should not be set either
    border: $govuk-border-width-form-element solid $govuk-input-border-colour;
    border-radius: 0;

    // Disable inner shadow and remove rounded corners
    -webkit-appearance: none;
       -moz-appearance: none;
            appearance: none;

    &:focus {
      outline: $govuk-focus-width solid $govuk-focus-colour;
      // Ensure outline appears outside of the element
      outline-offset: 0;
      // Double the border by adding its width again. Use `box-shadow` for this // instead of changing `border-width` - this is for consistency with
      // components such as textarea where we avoid changing `border-width` as
      // it will change the element size. Also, `outline` cannot be utilised
      // here as it is already used for the yellow focus state.
      box-shadow: inset 0 0 0 $govuk-border-width-form-element;

      @include govuk-if-ie8 {
        // IE8 doesn't support `box-shadow` so double the border with
        // `border-width`.
        border-width: $govuk-border-width-form-element * 2;
      }
    }
  }

  .govuk-input::-webkit-outer-spin-button,
  .govuk-input::-webkit-inner-spin-button {
    margin: 0;
    -webkit-appearance: none;
  }

  .govuk-input[type="number"] {
    -moz-appearance: textfield;
  }

  .govuk-input--error {
    border: $govuk-border-width-form-element-error solid $govuk-error-colour;

    &:focus {
      border-color: $govuk-input-border-colour;
      // Remove `box-shadow` inherited from `:focus` as `input--error`
      // already has the thicker border.
      box-shadow: none;
    }
  }

  // The ex measurements are based on the number of W's that can fit inside the input
  // Extra space is left on the right hand side to allow for the Safari prefill icon
  // Linear regression estimation based on visual tests: y = 1.76 + 1.81x

  .govuk-input--width-30 {
    max-width: 56ex + 3ex;
  }

  .govuk-input--width-20 {
    max-width: 38ex + 3ex;
  }

  .govuk-input--width-10 {
    max-width: 20ex + 3ex;
  }

  .govuk-input--width-5 {
    max-width: 10.8ex;
  }

  .govuk-input--width-4 {
    max-width: 9ex;
  }

  .govuk-input--width-3 {
    max-width: 7.2ex;
  }

  .govuk-input--width-2 {
    max-width: 5.4ex;
  }

}
