Added form validation

This commit is contained in:
Yohn 2024-11-13 03:42:58 -05:00
parent 359e51ee06
commit 7602474cfd
241 changed files with 17845 additions and 118 deletions

View file

@ -33,6 +33,7 @@
@use "forms/input-file"; // type="file"
@use "forms/input-range"; // type="range"
@use "forms/input-search"; // type="search"
@use "forms/validation"; // validation for all form elements except select[multiple],select[size], input:not([type="button"], [type="reset"], [type="image"], [type="submit"], [type="checkbox"], [type="radio"]
// Components
@use "components/accordion"; // details, summary

View file

@ -131,6 +131,7 @@ $modules: map.merge(
"forms/input-file": true,
"forms/input-range": true,
"forms/input-search": true,
"forms/validation": true,
// Components
"components/accordion": true,

164
scss/forms/_validation.scss Normal file
View file

@ -0,0 +1,164 @@
@use "sass:map";
@use "../colors/index" as *;
@use "../settings" as *;
@if map.get($modules, "forms/validation") {
input:user-valid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
),
input:user-invalid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
) {
padding-right: calc(1.5em + 0.75rem);
background-position: right calc(0.375em + 0.1875rem) center;
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
background-repeat: no-repeat;
}
select:user-valid:not([multiple], [size]),
select:user-invalid:not([multiple], [size]) {
padding-right: calc(1.5em + 0.75rem);
padding-right: 4.2rem;
background-position:
right 0.75rem center,
center right 2.25rem;
background-repeat: no-repeat;
}
select:user-invalid:not([multiple], [size]) {
background-image: var(#{$css-var-prefix}icon-chevron), var(#{$css-var-prefix}icon-invalid);
}
select:user-valid:not([multiple], [size]) {
background-image: var(#{$css-var-prefix}icon-chevron), var(#{$css-var-prefix}icon-valid);
}
textarea:user-valid,
textarea:user-invalid {
padding-right: calc(1.5em + 0.75rem);
background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
background-repeat: no-repeat;
}
input:user-invalid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
),
select:user-invalid,
textarea:user-invalid {
border-color: var(#{$css-var-prefix}form-element-invalid-border-color);
background-image: var(#{$css-var-prefix}icon-invalid);
}
input:user-valid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
),
select:user-valid,
textarea:user-valid {
border-color: var(#{$css-var-prefix}form-element-valid-border-color);
background-image: var(#{$css-var-prefix}icon-valid);
}
input:required:user-invalid:is([type="checkbox"]) {
border-color: var(#{$css-var-prefix}form-element-invalid-border-color);
}
/********** To include a message after the element with info ************/
input:user-valid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
)
+ small[data-valid]::after,
select:user-valid:not([multiple], [size]) + small[data-valid]::after,
textarea:user-valid + small[data-valid]::after {
content: attr(data-valid);
color: var(#{$css-var-prefix}form-element-valid-border-color);
}
textarea:user-invalid + small[data-invalid]::after,
select:user-invalid:not([multiple], [size]) + small[data-invalid]::after,
input:user-invalid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
)
+ [data-invalid]::after,
input[type="file"]:user-invalid + ul + [data-invalid]::after {
content: attr(data-invalid);
color: var(#{$css-var-prefix}form-element-invalid-border-color);
}
input:user-valid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
)
+ [data-valid]::after,
input:user-invalid:not(
[type="button"],
[type="reset"],
[type="image"],
[type="submit"],
[type="checkbox"],
[type="radio"]
)
+ [data-invalid]::after,
textarea:user-valid + [data-valid]::after,
input[type="file"]:user-invalid + [data-invalid]::after,
input[type="file"]:user-invalid + ul + [data-invalid]::after {
display: block;
}
//input[type="file"]:user-invalid + [data-invalid]::after,
input[type="file"]:user-invalid + ul + [data-invalid]::after {
position: relative;
top: -2rem;
}
// the file btn
input[type="file"]:user-invalid::file-selector-button {
border-color: var(#{$css-var-prefix}form-element-invalid-border-color);
background-color: var(#{$css-var-prefix}form-element-invalid-border-color);
}
.btn-file-rm {
margin-left: 10px;
padding: calc(var(#{$css-var-prefix}form-element-spacing-vertical) * 0.5)
calc(var(#{$css-var-prefix}form-element-spacing-horizontal) * 0.5);
border-color: var(#{$css-var-prefix}form-element-invalid-border-color);
color: var(#{$css-var-prefix}form-element-invalid-border-color);
}
/* File list when selected from the file input */
.file-list {
margin-left: 0;
padding-right: 0;
padding-left: 0;
li {
list-style-type: none;
&:nth-child(2n) {
background-color: $grey-900;
}
&:hover {
background-color: var(#{$css-var-prefix}muted-border-color);
}
}
}
}