@use 'exports' as *;
@use '@lucca-front/scss/src/commons/utils/namespace';

.form.mod-framed {
	@layer mods {
		.textfield,
		.radiosfield,
		.checkboxesfield {
			@include framed;
		}

		.is-error {
			@include fieldFramedState('error');
			@include fieldFramedError('textfield');
			@include fieldFramedError('radiosfield');
			@include fieldFramedError('checkboxesfield');
		}

		.is-warning {
			@include fieldFramedState('warning');
		}

		.is-valid,
		.is-success {
			@include fieldFramedState('success');
		}
	}
}

.textfield,
.radiosfield,
.checkboxesfield {
	@layer components {
		@include vars;
		@include component;
	}

	@layer mods {
		&.mod-inline {
			@include inline;
		}

		&.mod-block {
			@include block;
		}

		&:is(.is-required, .required) {
			@include required;
		}

		&:is(.is-loading, .loading) {
			@include loading;
		}

		&:is(.is-success, .success, .is-valid, .valid) {
			@include success;
		}

		&:is(.is-error, .error, .is-invalid, .invalid) {
			@include error;
		}

		&.mod-compact {
			@include compact;

			&.mod-block {
				@include compactBlock;
			}
		}

		&.mod-framed {
			@include framed;

			&.mod-search {
				@include framedSearch;
			}

			&.is-error {
				@include fieldFramedState('error');
				@include fieldFramedError('textfield');
				@include fieldFramedError('radiosfield');
				@include fieldFramedError('checkboxesfield');
			}

			&.is-warning {
				@include fieldFramedState('warning');
			}

			&.is-valid,
			&.is-success {
				@include fieldFramedState('success');
			}
		}

		.textfield-input,
		.radiosfield-input,
		.checkboxesfield-input {
			&:is([disabled], [readonly]) {
				@include inputDisabled;
			}

			&:is(.is-valid, .valid, .is-success, .success) {
				@include inputState('success');
			}

			&:is(.is-warning, .warning) {
				@include inputState('warning');
			}

			&:is(.is-invalid, .invalid, .is-error, .error) {
				@include inputState('error');
			}

			&:is([required]),
			&:is([aria-required='true']) {
				@include required;
			}

			&.mod-row {
				@include inputRow;
			}
		}
	}
}
