%base-input {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;

	width: 100%;
	height: 100%;
	padding-left: 12px;
	padding-right: 12px;

	background-color: $color-white;

	vertical-align: top;

	border-radius: inherit;
	border: 1px solid $color-border-input;

	outline: none;

	&:hover {
		border-color: darken($color-border-input, 10%);
	}

	&:focus, :active {
		border-color: $color-primary;
		box-shadow: 0 0 0 2px transparentize($color-primary, 0.7);
	}
}

$components-colors: (
	'positive': $color-positive,
	'negative': $color-negative,
	'warning' : $color-warning,
	'info'    : $color-info,
);

.#{$component-prefix}field {
	label {
		font-weight: $font-weight-bold;
		display: inline-block;
		margin-bottom: 0.25rem;
	}

	small {
		display: inline-block;
		margin-top: 0.2rem;
	}

	// color
	@each $key, $value in $components-colors {
		&.-#{$key} {
			.#{$component-prefix}input > input,
			.#{$component-prefix}textarea > textarea,
			.#{$component-prefix}select > select {
				border-color: $value;

				&:focus, :active {
					box-shadow: 0 0 0 2px transparentize($value, 0.8);
				}
			}

			small, i {
				color: $value;
			}
		}
	};

	// size
	&.-big {
		.#{$component-prefix}input,
		.#{$component-prefix}select:not(.-multiple) {
			height: 3rem;
		}
		.#{$component-prefix}input > input,
		.#{$component-prefix}select:not(.-multiple) > select {
			font-size: 1.25rem;
			height: 100%;
		}
	}

	&.-small {
		.#{$component-prefix}input,
		.#{$component-prefix}select:not(.-multiple) {
			height: 1.875em;
		}
		.#{$component-prefix}input > input,
		.#{$component-prefix}select:not(.-multiple) > select {
			font-size: 0.75rem;
			height: 100%;
		}
	}

	// disabled
	&.-disabled,
	.disabled,
	[disabled] {
		.#{$component-prefix}input > input,
		.#{$component-prefix}textarea > textarea,
		.#{$component-prefix}select > select {
			cursor: not-allowed;
			background-color: $color-disable-input;
			border-color: $color-border-input;
		}

		small {
			color: $color-dark
		}
	}
}

.#{$component-prefix}input,
.#{$component-prefix}textarea,
.#{$component-prefix}select {
	border-radius: 4px;
}

.#{$component-prefix}input > input,
.#{$component-prefix}textarea > textarea,
.#{$component-prefix}select > select {
	@extend %base-input;
}

.#{$component-prefix}select {
	position: relative;

	> select {
		padding-right: 32px;
		cursor: pointer;
	}

	&:after {
		content: '';
		border-left: 2px solid $color-dark;
		border-bottom: 2px solid $color-dark;
		height: 0.5rem;
		width: 0.5rem;
		position: absolute;
		right: 0.5rem;
		top: 50%;
		border-color: $color-select-chevron;
		transform: rotate(-45deg) translate(0, calc(-50% - 4px));
		pointer-events: none;
	}
}

.#{$component-prefix}textarea > textarea {
	padding: 8px 12px;
	line-height: 1.25;
}

.#{$component-prefix}input,
.#{$component-prefix}select {
	height: 2.5rem;
}

// input icon
.#{$component-prefix}input.-has-icon-left,
.#{$component-prefix}select.-has-icon-left,
.#{$component-prefix}input.-has-icon-right {
	position: relative;

	> .icon {
		position: absolute;
		top: 0;

		display: flex;
		align-items: center;
		justify-content: center;

		width: 2.625rem;
		height: 100%;

		color: $color-border-input;

		font-size: 1rem;
	}
}

.#{$component-prefix}input.-has-icon-left {
	> input {
		padding-left: 2.625rem;
	}

	> .icon:not(.-is-right) {
		left: 0;
	}
}

.#{$component-prefix}select.-has-icon-left {
	> select {
		padding-left: 2.625rem;
	}

	> .icon:not(.-is-right) {
		left: 0;
	}
}

.#{$component-prefix}input.-has-icon-right {
	> input {
		padding-right: 2.625rem;
	}

	> .icon.-is-right {
		right: 0;
	}
}

.#{$component-prefix}field.-small {
	.#{$component-prefix}input.-has-icon-left {
		> input {
			padding-left: 2rem;
		}

		> .icon:not(.-is-right) {
			left: 0;

			width: 2rem;

			font-size: .875rem;
		}
	}
	.#{$component-prefix}select.-has-icon-left {
		> select {
			padding-left: 2rem;
		}

		> .icon:not(.-is-right) {
			left: 0;

			width: 2rem;

			font-size: .875rem;
		}
	}
	.#{$component-prefix}input.-has-icon-right {
		> input {
			padding-right: 2rem;
		}

		> .icon.-is-right {
			right: 0;

			width: 2rem;

			font-size: .875rem;
		}
	}
}

.#{$component-prefix}field.-big {
	.#{$component-prefix}input.-has-icon-left {
		> input {
			padding-left: 3rem;
		}

		> .icon:not(.-is-right) {
			left: 0;

			width: 3rem;

			font-size: 1.33333rem;
		}
	}
	.#{$component-prefix}select.-has-icon-left {
		> select {
			padding-left: 3rem;
		}

		> .icon:not(.-is-right) {
			left: 0;

			width: 3rem;

			font-size: 1.33333rem;
		}
	}
	.#{$component-prefix}input.-has-icon-right {
		> input {
			padding-right: 3rem;
		}

		> .icon.-is-right {
			right: 0;

			width: 3rem;

			font-size: 1.33333rem;
		}
	}
}
