Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
// Form control focus state
2
//
3
// Generate a customized focus state and for any input with the specified color,
4
// which defaults to the `$input-focus-border-color` variable.
5
//
6
// We highly encourage you to not customize the default value, but instead use
7
// this to tweak colors on an as-needed basis. This aesthetic change is based on
8
// WebKit's default styles, but applicable to a wider range of browsers. Its
9
// usability and accessibility should be taken into account with any change.
10
//
11
// Example usage: change the default blue border and shadow to white for better
12
// contrast against a dark gray background.
13
@mixin form-control-focus($ignore-warning: false) {
14
  &:focus {
15
    color: $input-focus-color;
16
    background-color: $input-focus-bg;
17
    border-color: $input-focus-border-color;
18
    outline: 0;
19
    @if $enable-shadows {
20
      @include box-shadow($input-box-shadow, $input-focus-box-shadow);
21
    } @else {
22
      // Avoid using mixin so we can pass custom focus shadow properly
23
      box-shadow: $input-focus-box-shadow;
24
    }
25
  }
26
  @include deprecate("The `form-control-focus()` mixin", "v4.4.0", "v5", $ignore-warning);
27
}
28
 
29
// This mixin uses an `if()` technique to be compatible with Dart Sass
30
// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details
31
@mixin form-validation-state-selector($state) {
32
  @if ($state == "valid" or $state == "invalid") {
33
    .was-validated #{if(&, "&", "")}:#{$state},
34
    #{if(&, "&", "")}.is-#{$state} {
35
      @content;
36
    }
37
  } @else {
38
    #{if(&, "&", "")}.is-#{$state} {
39
      @content;
40
    }
41
  }
42
}
43
 
44
@mixin form-validation-state($state, $color, $icon) {
45
  .#{$state}-feedback {
46
    display: none;
47
    width: 100%;
48
    margin-top: $form-feedback-margin-top;
49
    @include font-size($form-feedback-font-size);
50
    color: $color;
51
  }
52
 
53
  .#{$state}-tooltip {
54
    position: absolute;
55
    top: 100%;
56
    left: 0;
57
    z-index: 5;
58
    display: none;
59
    max-width: 100%; // Contain to parent when possible
60
    padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
61
    margin-top: .1rem;
62
    @include font-size($form-feedback-tooltip-font-size);
63
    line-height: $form-feedback-tooltip-line-height;
64
    color: color-yiq($color);
65
    background-color: rgba($color, $form-feedback-tooltip-opacity);
66
    @include border-radius($form-feedback-tooltip-border-radius);
67
 
68
    // See https://github.com/twbs/bootstrap/pull/31557
69
    // Align tooltip to form elements
70
    .form-row > .col > &,
71
    .form-row > [class*="col-"] > & {
72
      left: $form-grid-gutter-width * .5;
73
    }
74
  }
75
 
76
  @include form-validation-state-selector($state) {
77
    ~ .#{$state}-feedback,
78
    ~ .#{$state}-tooltip {
79
      display: block;
80
    }
81
  }
82
 
83
  .form-control {
84
    @include form-validation-state-selector($state) {
85
      border-color: $color;
86
 
87
      @if $enable-validation-icons {
88
        padding-right: $input-height-inner !important; // stylelint-disable-line declaration-no-important
89
        background-image: escape-svg($icon);
90
        background-repeat: no-repeat;
91
        background-position: right $input-height-inner-quarter center;
92
        background-size: $input-height-inner-half $input-height-inner-half;
93
      }
94
 
95
      &:focus {
96
        border-color: $color;
97
        box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
98
      }
99
    }
100
  }
101
 
102
  // stylelint-disable-next-line selector-no-qualifying-type
103
  select.form-control {
104
    @include form-validation-state-selector($state) {
105
      @if $enable-validation-icons {
106
        padding-right: $input-padding-x * 4 !important; // stylelint-disable-line declaration-no-important
107
        background-position: right $input-padding-x * 2 center;
108
      }
109
    }
110
  }
111
 
112
  // stylelint-disable-next-line selector-no-qualifying-type
113
  textarea.form-control {
114
    @include form-validation-state-selector($state) {
115
      @if $enable-validation-icons {
116
        padding-right: $input-height-inner;
117
        background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
118
      }
119
    }
120
  }
121
 
122
  .custom-select {
123
    @include form-validation-state-selector($state) {
124
      border-color: $color;
125
 
126
      @if $enable-validation-icons {
127
        padding-right: $custom-select-feedback-icon-padding-right !important; // stylelint-disable-line declaration-no-important
128
        background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;
129
      }
130
 
131
      &:focus {
132
        border-color: $color;
133
        box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
134
      }
135
    }
136
  }
137
 
138
  .form-check-input {
139
    @include form-validation-state-selector($state) {
140
      ~ .form-check-label {
141
        color: $color;
142
      }
143
 
144
      ~ .#{$state}-feedback,
145
      ~ .#{$state}-tooltip {
146
        display: block;
147
      }
148
    }
149
  }
150
 
151
  .custom-control-input {
152
    @include form-validation-state-selector($state) {
153
      ~ .custom-control-label {
154
        color: $color;
155
 
156
        &::before {
157
          border-color: $color;
158
        }
159
      }
160
 
161
      &:checked {
162
        ~ .custom-control-label::before {
163
          border-color: lighten($color, 10%);
164
          @include gradient-bg(lighten($color, 10%));
165
        }
166
      }
167
 
168
      &:focus {
169
        ~ .custom-control-label::before {
170
          box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
171
        }
172
 
173
        &:not(:checked) ~ .custom-control-label::before {
174
          border-color: $color;
175
        }
176
      }
177
    }
178
  }
179
 
180
  // custom file
181
  .custom-file-input {
182
    @include form-validation-state-selector($state) {
183
      ~ .custom-file-label {
184
        border-color: $color;
185
      }
186
 
187
      &:focus {
188
        ~ .custom-file-label {
189
          border-color: $color;
190
          box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
191
        }
192
      }
193
    }
194
  }
195
}