ECOMMERCE/resources/scss/components/_forms.scss

494 lines
12 KiB
SCSS

// Extend default Bootstrap's .form-control / .form-select classes
.form-control,
.form-select {
--#{$prefix}form-control-bg: #{$input-bg};
--#{$prefix}form-control-border-color: #{$input-border-color};
--#{$prefix}form-control-focus-bg: #{$input-focus-bg};
--#{$prefix}form-control-focus-border-color: #{$input-focus-border-color};
background-color: var(--#{$prefix}form-control-bg);
border-color: var(--#{$prefix}form-control-border-color);
&:focus {
background-color: var(--#{$prefix}form-control-focus-bg);
border-color: var(--#{$prefix}form-control-focus-border-color);
}
&:disabled {
border-style: dashed;
}
}
// Fix small select idicator position
.form-select.form-select-sm {
background-position: right $form-select-padding-x-sm * .875 center;
}
// Remove default -webkit search input clear button
.form-control {
&::-webkit-search-decoration,
&::-webkit-search-cancel-button,
&::-webkit-search-results-button,
&::-webkit-search-results-decoration {
display: none;
}
}
// Remove default -webkit time input icon
.form-control::-webkit-calendar-picker-indicator {
background: none;
}
// Floating labels
.form-floating > label::after {
background-color: transparent !important;
}
// Flush form select
.form-select-flush {
background-position: right center;
border: 0;
border-bottom: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !important;
border-radius: 0;
&.form-select-lg {
background-size: 17px 13px;
}
}
// Absolutely positioned icon inside .form-control
.form-icon-start {
padding-left: calc($input-padding-x + $input-border-width + $font-size-base + .375rem);
&.form-control-lg {
padding-left: calc($input-padding-x-lg + $input-border-width + $font-size-lg + .25rem);
}
&.form-control-sm {
padding-left: calc($input-padding-x-sm + $input-border-width + $font-size-sm);
}
}
.form-icon-end {
padding-right: calc($input-padding-x + $input-border-width + $font-size-base + .375rem);
&.form-control-lg {
padding-right: calc($input-padding-x-lg + $input-border-width + $font-size-lg + .25rem);
}
&.form-control-sm {
padding-right: calc($input-padding-x-sm + $input-border-width + $font-size-sm);
}
}
// Checkboxes and radios
.form-check-label {
font-size: $form-label-font-size;
}
.form-check-input {
&:focus {
box-shadow: none;
}
&:focus-visible {
box-shadow: $focus-ring-box-shadow;
}
&:active {
background-color: transparent;
filter: none;
}
}
// Switch
.form-switch {
min-height: $form-switch-height;
margin-bottom: $form-switch-margin-bottom;
.form-check-input {
height: $form-switch-height;
margin-top: 0;
background-color: $form-switch-bg-color;
border: 0 !important;
&:checked {
background-color: $form-switch-checked-bg-color !important;
}
}
}
// Password toggle
.password-toggle {
position: relative;
.form-control {
padding-right: $input-padding-x * 2 + $input-font-size;
}
}
.password-toggle-button {
position: absolute;
top: 0;
right: 0;
display: flex;
align-items: center;
height: 100%;
padding: 0 $input-padding-x;
color: $password-toggle-button-color;
cursor: pointer;
transition: color .2s ease-in-out;
&:hover {
color: $password-toggle-button-hover-color;
}
}
// Count input
.count-input {
display: inline-flex;
overflow: hidden;
background-color: $input-bg;
border: var(--#{$prefix}border-width) solid $input-border-color;
border-radius: $input-border-radius;
transform: translateZ(0);
.form-control {
width: $btn-icon-size;
padding: 0 .25rem;
font-weight: $font-weight-medium;
text-align: center;
/* stylelint-disable property-no-vendor-prefix */
-moz-appearance: textfield;
appearance: textfield;
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
margin: 0;
-webkit-appearance: none;
}
/* stylelint-enable property-no-vendor-prefix */
background-color: transparent;
border: 0;
border-radius: 0;
}
.btn {
border: 0;
border-radius: 0;
}
.btn:not(.btn-primary) {
--#{$prefix}btn-hover-color: var(--#{$prefix}component-hover-color);
--#{$prefix}btn-hover-bg: var(--#{$prefix}secondary-bg);
--#{$prefix}btn-active-bg: var(--#{$prefix}secondary-bg);
}
.btn-sm + .form-control {
width: $btn-icon-size-sm;
}
.btn-lg + .form-control {
width: $btn-icon-size-lg;
}
&.disabled {
background-color: $input-disabled-bg;
border-color: $input-disabled-border-color;
border-style: dashed;
}
}
.count-input-collapsible {
&.collapsed {
[data-decrement],
.form-control {
display: none;
}
}
}
// Range slider
.range-slider {
--#{$prefix}range-slider-height: #{$range-slider-height};
--#{$prefix}range-slider-bg: #{$range-slider-bg};
--#{$prefix}range-slider-connect-bg: #{$range-slider-connect-bg};
--#{$prefix}range-slider-handle-size: #{$range-slider-handle-size};
--#{$prefix}range-slider-handle-bg: #{$range-slider-handle-bg};
--#{$prefix}range-slider-handle-active-bg: #{$range-slider-handle-active-bg};
--#{$prefix}range-slider-handle-border-width: #{$range-slider-handle-border-width};
--#{$prefix}range-slider-handle-border-color: #{$range-slider-handle-border-color};
--#{$prefix}range-slider-handle-border-radius: 50%;
--#{$prefix}range-slider-pips-color: var(--#{$prefix}body-color);
--#{$prefix}range-slider-pips-font-size: #{$range-slider-pips-font-size};
--#{$prefix}range-slider-pips-border-width: var(--#{$prefix}border-width);
--#{$prefix}range-slider-pips-border-color: #{adjust-color($border-color, $lightness: -6%)}; // stylelint-disable-line
--#{$prefix}range-slider-tooltip-padding-y: #{$tooltip-padding-y};
--#{$prefix}range-slider-tooltip-padding-x: #{$tooltip-padding-x};
--#{$prefix}range-slider-tooltip-bg: #{$range-slider-tooltip-bg};
--#{$prefix}range-slider-tooltip-color: #{$range-slider-tooltip-color};
--#{$prefix}range-slider-tooltip-font-size: #{$range-slider-tooltip-font-size};
--#{$prefix}range-slider-tooltip-border-radius: #{$tooltip-border-radius};
}
/* stylelint-disable selector-class-pattern */
.range-slider-ui {
height: var(--#{$prefix}range-slider-height);
margin: 0;
margin: {
top: 2.25rem;
right: 0;
bottom: 1.75rem;
left: 0;
}
background-color: var(--#{$prefix}range-slider-bg);
border: 0;
box-shadow: none;
.noUi-connect {
background-color: var(--#{$prefix}range-slider-connect-bg);
}
.noUi-handle {
top: 50%;
width: var(--#{$prefix}range-slider-handle-size);
height: var(--#{$prefix}range-slider-handle-size);
margin-top: calc(var(--#{$prefix}range-slider-handle-size) * -.5);
background-color: var(--#{$prefix}range-slider-handle-bg);
border: var(--#{$prefix}range-slider-handle-border-width) solid var(--#{$prefix}range-slider-handle-border-color);
border-radius: var(--#{$prefix}range-slider-handle-border-radius);
box-shadow: none;
&::before,
&::after {
display: none;
}
&:active,
&:focus-visible {
background-color: var(--#{$prefix}range-slider-handle-active-bg);
}
&:focus {
outline: none;
}
&:focus-visible {
box-shadow: $focus-ring-box-shadow;
}
}
.noUi-marker-normal {
display: none;
}
.noUi-marker-horizontal {
&.noUi-marker {
width: var(--#{$prefix}range-slider-pips-border-width);
background-color: var(--#{$prefix}range-slider-pips-border-color);
}
&.noUi-marker-large { height: .75rem; }
}
.noUi-value {
padding-top: .125rem;
font-size: var(--#{$prefix}range-slider-pips-font-size);
color: var(--#{$prefix}range-slider-pips-color);
}
.noUi-tooltip {
padding: var(--#{$prefix}range-slider-tooltip-padding-y) var(--#{$prefix}range-slider-tooltip-padding-x);
line-height: 1.2;
font: {
size: var(--#{$prefix}range-slider-tooltip-font-size);
weight: $font-weight-medium;
}
color: var(--#{$prefix}range-slider-tooltip-color);
background-color: var(--#{$prefix}range-slider-tooltip-bg);
border: 0;
@include border-radius(var(--#{$prefix}range-slider-tooltip-border-radius));
}
}
html:not([dir="rtl"]) .range-slider-ui.noUi-horizontal .noUi-handle {
right: calc(var(--#{$prefix}range-slider-handle-size) * -.5);
}
.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle {
/* rtl:begin:ignore */
left: -.5rem;
/* rtl:end:ignore */
}
/* stylelint-enable selector-class-pattern */
// Form validation
.was-validated .form-control:valid,
.form-control.is-valid,
.was-validated .form-select:valid,
.form-select.is-valid {
border-color: var(--#{$prefix}form-control-border-color);
&:focus {
border-color: var(--#{$prefix}form-control-focus-border-color);
}
}
.was-validated .password-toggle .form-control:valid,
.password-toggle .form-control.is-valid,
.was-validated .password-toggle .form-control:invalid,
.password-toggle .form-control.is-invalid {
background-position: $form-select-feedback-icon-position;
}
.was-validated .form-check-input:valid,
.form-check-input.is-valid {
border: $form-check-input-border;
&:checked {
background-color: $form-check-input-checked-bg-color;
border-color: $form-check-input-checked-border-color;
}
&:focus {
box-shadow: none;
}
~ .form-check-label {
color: var(--#{$prefix}body-color);
}
}
.was-validated .form-switch .form-check-input:invalid,
.form-switch .form-check-input.is-invalid {
background-color: var(--#{$prefix}form-invalid-color) !important;
}
.valid-tooltip {
color: var(--#{$prefix}form-valid-color);
background-color: var(--#{$prefix}success-bg-subtle);
}
.invalid-tooltip {
color: var(--#{$prefix}form-invalid-color);
background-color: var(--#{$prefix}danger-bg-subtle);
}
// Force formatted numeric input fileds RTL
[data-input-format] {
direction: ltr;
}
// Dark mode
@if $enable-dark-mode {
@include color-mode(dark) {
.form-control:not([data-bs-theme="light"]),
.form-select:not([data-bs-theme="light"]) {
--#{$prefix}form-control-bg: #{$input-bg-dark};
--#{$prefix}form-control-border-color: #{$input-border-color-dark};
--#{$prefix}form-control-focus-bg: #{$input-focus-bg-dark};
--#{$prefix}form-control-focus-border-color: #{$input-focus-border-color-dark};
}
.form-select:not([data-bs-theme="light"]) option {
background-color: $dropdown-dark-bg;
}
.form-check-input:not([data-bs-theme="light"]) {
background-color: $form-check-input-bg-dark;
border: $form-check-input-border-dark;
&:checked {
background-color: $form-check-input-checked-bg-color-dark;
border-color: $form-check-input-checked-border-color-dark;
&[type="checkbox"] {
@if $enable-gradients {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image-dark)}, var(--#{$prefix}gradient);
} @else {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image-dark)};
}
}
&[type="radio"] {
@if $enable-gradients {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image-dark)}, var(--#{$prefix}gradient);
} @else {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image-dark)};
}
}
}
&[type="checkbox"]:indeterminate {
background-color: $form-check-input-indeterminate-bg-color-dark;
border-color: $form-check-input-indeterminate-border-color-dark;
@if $enable-gradients {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image-dark)}, var(--#{$prefix}gradient);
} @else {
--#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image-dark)};
}
}
}
.was-validated .form-check-input:invalid,
.form-check-input.is-invalid {
border-color: var(--#{$prefix}form-invalid-border-color);
}
.form-switch:not([data-bs-theme="light"]) {
.form-check-input {
background-color: $form-switch-bg-color-dark;
border: 0;
&:checked {
background-color: $form-switch-checked-bg-color;
}
&:not(:checked):not(:focus) {
--#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};
}
}
}
.count-input:not([data-bs-theme="light"]) {
background-color: $input-bg-dark;
border-color: $input-border-color-dark;
}
.input-group:not([data-bs-theme="light"]) .input-group-text {
border-color: $input-group-addon-border-color-dark;
}
}
}