// 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; } } }