| rev | 
   line source | 
| 
bsw/jbe@1309
 | 
     1 /**
 | 
| 
bsw/jbe@1309
 | 
     2  * Copyright 2015 Google Inc. All Rights Reserved.
 | 
| 
bsw/jbe@1309
 | 
     3  *
 | 
| 
bsw/jbe@1309
 | 
     4  * Licensed under the Apache License, Version 2.0 (the "License");
 | 
| 
bsw/jbe@1309
 | 
     5  * you may not use this file except in compliance with the License.
 | 
| 
bsw/jbe@1309
 | 
     6  * You may obtain a copy of the License at
 | 
| 
bsw/jbe@1309
 | 
     7  *
 | 
| 
bsw/jbe@1309
 | 
     8  *      http://www.apache.org/licenses/LICENSE-2.0
 | 
| 
bsw/jbe@1309
 | 
     9  *
 | 
| 
bsw/jbe@1309
 | 
    10  * Unless required by applicable law or agreed to in writing, software
 | 
| 
bsw/jbe@1309
 | 
    11  * distributed under the License is distributed on an "AS IS" BASIS,
 | 
| 
bsw/jbe@1309
 | 
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
| 
bsw/jbe@1309
 | 
    13  * See the License for the specific language governing permissions and
 | 
| 
bsw/jbe@1309
 | 
    14  * limitations under the License.
 | 
| 
bsw/jbe@1309
 | 
    15  */
 | 
| 
bsw/jbe@1309
 | 
    16 
 | 
| 
bsw/jbe@1309
 | 
    17 @import "../variables";
 | 
| 
bsw/jbe@1309
 | 
    18 @import "../mixins";
 | 
| 
bsw/jbe@1309
 | 
    19 
 | 
| 
bsw/jbe@1309
 | 
    20 // The container for the whole component.
 | 
| 
bsw/jbe@1309
 | 
    21 .mdl-textfield {
 | 
| 
bsw/jbe@1309
 | 
    22   position: relative;
 | 
| 
bsw/jbe@1309
 | 
    23   font-size: $input-text-font-size;
 | 
| 
bsw/jbe@1309
 | 
    24   display: inline-block;
 | 
| 
bsw/jbe@1309
 | 
    25   box-sizing: border-box;
 | 
| 
bsw/jbe@1309
 | 
    26   width: 300px;
 | 
| 
bsw/jbe@1309
 | 
    27   max-width: 100%;
 | 
| 
bsw/jbe@1309
 | 
    28   margin: 0;
 | 
| 
bsw/jbe@1309
 | 
    29   padding: $input-text-vertical-spacing 0;
 | 
| 
bsw/jbe@1309
 | 
    30 
 | 
| 
bsw/jbe@1309
 | 
    31   // Align buttons, if used.
 | 
| 
bsw/jbe@1309
 | 
    32   & .mdl-button {
 | 
| 
bsw/jbe@1309
 | 
    33     position: absolute;
 | 
| 
bsw/jbe@1309
 | 
    34     bottom: $input-text-vertical-spacing;
 | 
| 
bsw/jbe@1309
 | 
    35   }
 | 
| 
bsw/jbe@1309
 | 
    36 }
 | 
| 
bsw/jbe@1309
 | 
    37 
 | 
| 
bsw/jbe@1309
 | 
    38 // Optional class to align right.
 | 
| 
bsw/jbe@1309
 | 
    39 .mdl-textfield--align-right {
 | 
| 
bsw/jbe@1309
 | 
    40   text-align: right;
 | 
| 
bsw/jbe@1309
 | 
    41 }
 | 
| 
bsw/jbe@1309
 | 
    42 
 | 
| 
bsw/jbe@1309
 | 
    43 // Optional class to display at full width.
 | 
| 
bsw/jbe@1309
 | 
    44 .mdl-textfield--full-width {
 | 
| 
bsw/jbe@1309
 | 
    45   width: 100%;
 | 
| 
bsw/jbe@1309
 | 
    46 }
 | 
| 
bsw/jbe@1309
 | 
    47 
 | 
| 
bsw/jbe@1309
 | 
    48 // Optional class to make the text field expandable.
 | 
| 
bsw/jbe@1309
 | 
    49 .mdl-textfield--expandable {
 | 
| 
bsw/jbe@1309
 | 
    50   min-width: $input-text-button-size;
 | 
| 
bsw/jbe@1309
 | 
    51   width: auto;
 | 
| 
bsw/jbe@1309
 | 
    52   min-height: $input-text-button-size;
 | 
| 
bsw/jbe@1309
 | 
    53   
 | 
| 
bsw/jbe@1309
 | 
    54   // Align icon button
 | 
| 
bsw/jbe@1309
 | 
    55   .mdl-button--icon {
 | 
| 
bsw/jbe@1309
 | 
    56     top: $input-text-expandable-icon-top;
 | 
| 
bsw/jbe@1309
 | 
    57   }
 | 
| 
bsw/jbe@1309
 | 
    58 }
 | 
| 
bsw/jbe@1309
 | 
    59 
 | 
| 
bsw/jbe@1309
 | 
    60 // Styling for the input element.
 | 
| 
bsw/jbe@1309
 | 
    61 .mdl-textfield__input {
 | 
| 
bsw/jbe@1309
 | 
    62   border: none;
 | 
| 
bsw/jbe@1309
 | 
    63   border-bottom: 1px solid $input-text-bottom-border-color;
 | 
| 
bsw/jbe@1309
 | 
    64   display: block;
 | 
| 
bsw/jbe@1309
 | 
    65   font-size: $input-text-font-size;
 | 
| 
bsw/jbe@1309
 | 
    66   font-family: $performance_font;
 | 
| 
bsw/jbe@1309
 | 
    67   margin: 0;
 | 
| 
bsw/jbe@1309
 | 
    68   padding: $input-text-padding 0;
 | 
| 
bsw/jbe@1309
 | 
    69   width: $input-text-width;
 | 
| 
bsw/jbe@1309
 | 
    70   background: none;
 | 
| 
bsw/jbe@1309
 | 
    71   text-align: left;
 | 
| 
bsw/jbe@1309
 | 
    72   color: inherit;
 | 
| 
bsw/jbe@1309
 | 
    73 
 | 
| 
bsw/jbe@1309
 | 
    74   &[type="number"] {
 | 
| 
bsw/jbe@1309
 | 
    75     -moz-appearance: textfield;
 | 
| 
bsw/jbe@1309
 | 
    76   }
 | 
| 
bsw/jbe@1309
 | 
    77 
 | 
| 
bsw/jbe@1309
 | 
    78   &[type="number"]::-webkit-inner-spin-button,
 | 
| 
bsw/jbe@1309
 | 
    79   &[type="number"]::-webkit-outer-spin-button {
 | 
| 
bsw/jbe@1309
 | 
    80     -webkit-appearance: none;
 | 
| 
bsw/jbe@1309
 | 
    81     margin: 0;
 | 
| 
bsw/jbe@1309
 | 
    82   }
 | 
| 
bsw/jbe@1309
 | 
    83 
 | 
| 
bsw/jbe@1309
 | 
    84   .mdl-textfield.is-focused & {
 | 
| 
bsw/jbe@1309
 | 
    85     outline: none;
 | 
| 
bsw/jbe@1309
 | 
    86   }
 | 
| 
bsw/jbe@1309
 | 
    87 
 | 
| 
bsw/jbe@1309
 | 
    88   .mdl-textfield.is-invalid & {
 | 
| 
bsw/jbe@1309
 | 
    89     border-color: $input-text-error-color;
 | 
| 
bsw/jbe@1309
 | 
    90     box-shadow: none;
 | 
| 
bsw/jbe@1309
 | 
    91   }
 | 
| 
bsw/jbe@1309
 | 
    92 
 | 
| 
bsw/jbe@1309
 | 
    93   fieldset[disabled] .mdl-textfield &,
 | 
| 
bsw/jbe@1309
 | 
    94   .mdl-textfield.is-disabled & {
 | 
| 
bsw/jbe@1309
 | 
    95     background-color: transparent;
 | 
| 
bsw/jbe@1309
 | 
    96     border-bottom: 1px dotted $input-text-disabled-color;
 | 
| 
bsw/jbe@1309
 | 
    97     color: $input-text-disabled-text-color;
 | 
| 
bsw/jbe@1309
 | 
    98   }
 | 
| 
bsw/jbe@1309
 | 
    99 }
 | 
| 
bsw/jbe@1309
 | 
   100 
 | 
| 
bsw/jbe@1309
 | 
   101 .mdl-textfield textarea.mdl-textfield__input {
 | 
| 
bsw/jbe@1309
 | 
   102   display: block;
 | 
| 
bsw/jbe@1309
 | 
   103 }
 | 
| 
bsw/jbe@1309
 | 
   104 
 | 
| 
bsw/jbe@1309
 | 
   105 // Styling for the label / floating label.
 | 
| 
bsw/jbe@1309
 | 
   106 .mdl-textfield__label {
 | 
| 
bsw/jbe@1309
 | 
   107   bottom: 0;
 | 
| 
bsw/jbe@1309
 | 
   108   color: $input-text-label-color;
 | 
| 
bsw/jbe@1309
 | 
   109   font-size: $input-text-font-size;
 | 
| 
bsw/jbe@1309
 | 
   110   left: 0;
 | 
| 
bsw/jbe@1309
 | 
   111   right: 0;
 | 
| 
bsw/jbe@1309
 | 
   112   pointer-events: none;
 | 
| 
bsw/jbe@1309
 | 
   113   position: absolute;
 | 
| 
bsw/jbe@1309
 | 
   114   display: block;
 | 
| 
bsw/jbe@1309
 | 
   115   top: ($input-text-padding + $input-text-vertical-spacing);
 | 
| 
bsw/jbe@1309
 | 
   116   width: 100%;
 | 
| 
bsw/jbe@1309
 | 
   117   overflow: hidden;
 | 
| 
bsw/jbe@1309
 | 
   118   white-space: nowrap;
 | 
| 
bsw/jbe@1309
 | 
   119   text-align: left;
 | 
| 
bsw/jbe@1309
 | 
   120 
 | 
| 
bsw/jbe@1309
 | 
   121   .mdl-textfield.is-dirty &,
 | 
| 
bsw/jbe@1309
 | 
   122   .mdl-textfield.has-placeholder & {
 | 
| 
bsw/jbe@1309
 | 
   123     visibility: hidden;
 | 
| 
bsw/jbe@1309
 | 
   124   }
 | 
| 
bsw/jbe@1309
 | 
   125 
 | 
| 
bsw/jbe@1309
 | 
   126   // Floating Label
 | 
| 
bsw/jbe@1309
 | 
   127   .mdl-textfield--floating-label & {
 | 
| 
bsw/jbe@1309
 | 
   128     @include material-animation-default();
 | 
| 
bsw/jbe@1309
 | 
   129   }
 | 
| 
bsw/jbe@1309
 | 
   130 
 | 
| 
bsw/jbe@1309
 | 
   131   .mdl-textfield--floating-label.has-placeholder & {
 | 
| 
bsw/jbe@1309
 | 
   132     transition: none;
 | 
| 
bsw/jbe@1309
 | 
   133   }
 | 
| 
bsw/jbe@1309
 | 
   134 
 | 
| 
bsw/jbe@1309
 | 
   135   fieldset[disabled] .mdl-textfield &,
 | 
| 
bsw/jbe@1309
 | 
   136   .mdl-textfield.is-disabled.is-disabled & {
 | 
| 
bsw/jbe@1309
 | 
   137     color: $input-text-disabled-text-color;
 | 
| 
bsw/jbe@1309
 | 
   138   }
 | 
| 
bsw/jbe@1309
 | 
   139 
 | 
| 
bsw/jbe@1309
 | 
   140   .mdl-textfield--floating-label.is-focused &,
 | 
| 
bsw/jbe@1309
 | 
   141   .mdl-textfield--floating-label.is-dirty &,
 | 
| 
bsw/jbe@1309
 | 
   142   .mdl-textfield--floating-label.has-placeholder & {
 | 
| 
bsw/jbe@1309
 | 
   143     color: $input-text-highlight-color;
 | 
| 
bsw/jbe@1309
 | 
   144     font-size : $input-text-floating-label-fontsize;
 | 
| 
bsw/jbe@1309
 | 
   145     top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);
 | 
| 
bsw/jbe@1309
 | 
   146     visibility: visible;
 | 
| 
bsw/jbe@1309
 | 
   147   }
 | 
| 
bsw/jbe@1309
 | 
   148 
 | 
| 
bsw/jbe@1309
 | 
   149   .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder &,
 | 
| 
bsw/jbe@1309
 | 
   150   .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder &,
 | 
| 
bsw/jbe@1309
 | 
   151   .mdl-textfield--floating-label.has-placeholder .mdl-textfield__expandable-holder & {
 | 
| 
bsw/jbe@1309
 | 
   152     top: -($input-text-floating-label-fontsize + $input-text-padding);
 | 
| 
bsw/jbe@1309
 | 
   153   }
 | 
| 
bsw/jbe@1309
 | 
   154 
 | 
| 
bsw/jbe@1309
 | 
   155   .mdl-textfield--floating-label.is-invalid & {
 | 
| 
bsw/jbe@1309
 | 
   156     color: $input-text-error-color;
 | 
| 
bsw/jbe@1309
 | 
   157     font-size: $input-text-floating-label-fontsize;
 | 
| 
bsw/jbe@1309
 | 
   158   }
 | 
| 
bsw/jbe@1309
 | 
   159 
 | 
| 
bsw/jbe@1309
 | 
   160   // The after label is the colored underline for the TextField.
 | 
| 
bsw/jbe@1309
 | 
   161   &:after {
 | 
| 
bsw/jbe@1309
 | 
   162     background-color: $input-text-highlight-color;
 | 
| 
bsw/jbe@1309
 | 
   163     bottom: $input-text-vertical-spacing;
 | 
| 
bsw/jbe@1309
 | 
   164     content: '';
 | 
| 
bsw/jbe@1309
 | 
   165     height: 2px;
 | 
| 
bsw/jbe@1309
 | 
   166     left: 45%;
 | 
| 
bsw/jbe@1309
 | 
   167     position: absolute;
 | 
| 
bsw/jbe@1309
 | 
   168     @include material-animation-default();
 | 
| 
bsw/jbe@1309
 | 
   169     visibility: hidden;
 | 
| 
bsw/jbe@1309
 | 
   170     width: 10px;
 | 
| 
bsw/jbe@1309
 | 
   171   }
 | 
| 
bsw/jbe@1309
 | 
   172 
 | 
| 
bsw/jbe@1309
 | 
   173   .mdl-textfield.is-focused &:after {
 | 
| 
bsw/jbe@1309
 | 
   174     left: 0;
 | 
| 
bsw/jbe@1309
 | 
   175     visibility: visible;
 | 
| 
bsw/jbe@1309
 | 
   176     width: 100%;
 | 
| 
bsw/jbe@1309
 | 
   177   }
 | 
| 
bsw/jbe@1309
 | 
   178 
 | 
| 
bsw/jbe@1309
 | 
   179   .mdl-textfield.is-invalid &:after {
 | 
| 
bsw/jbe@1309
 | 
   180     background-color: $input-text-error-color;
 | 
| 
bsw/jbe@1309
 | 
   181   }
 | 
| 
bsw/jbe@1309
 | 
   182 }
 | 
| 
bsw/jbe@1309
 | 
   183 
 | 
| 
bsw/jbe@1309
 | 
   184 // TextField Error.
 | 
| 
bsw/jbe@1309
 | 
   185 .mdl-textfield__error {
 | 
| 
bsw/jbe@1309
 | 
   186   color: $input-text-error-color;
 | 
| 
bsw/jbe@1309
 | 
   187   position: absolute;
 | 
| 
bsw/jbe@1309
 | 
   188   font-size: $input-text-floating-label-fontsize;
 | 
| 
bsw/jbe@1309
 | 
   189   margin-top: 3px;
 | 
| 
bsw/jbe@1309
 | 
   190   visibility: hidden;
 | 
| 
bsw/jbe@1309
 | 
   191   display: block;
 | 
| 
bsw/jbe@1309
 | 
   192 
 | 
| 
bsw/jbe@1309
 | 
   193   .mdl-textfield.is-invalid & {
 | 
| 
bsw/jbe@1309
 | 
   194     visibility: visible;
 | 
| 
bsw/jbe@1309
 | 
   195   }
 | 
| 
bsw/jbe@1309
 | 
   196 }
 | 
| 
bsw/jbe@1309
 | 
   197 
 | 
| 
bsw/jbe@1309
 | 
   198 // Expandable Holder.
 | 
| 
bsw/jbe@1309
 | 
   199 .mdl-textfield__expandable-holder {
 | 
| 
bsw/jbe@1309
 | 
   200   display: inline-block;
 | 
| 
bsw/jbe@1309
 | 
   201   position: relative;
 | 
| 
bsw/jbe@1309
 | 
   202   margin-left: $input-text-button-size;
 | 
| 
bsw/jbe@1309
 | 
   203 
 | 
| 
bsw/jbe@1309
 | 
   204   @include material-animation-default();
 | 
| 
bsw/jbe@1309
 | 
   205   display: inline-block;
 | 
| 
bsw/jbe@1309
 | 
   206 
 | 
| 
bsw/jbe@1309
 | 
   207   // Safari (possibly others) need to be convinced that this field is actually
 | 
| 
bsw/jbe@1309
 | 
   208   // visible, otherwise it cannot be tabbed to nor focused via a <label>.
 | 
| 
bsw/jbe@1309
 | 
   209   // TODO: In some cases (Retina displays), this is big enough to render the
 | 
| 
bsw/jbe@1309
 | 
   210   // inner element :(
 | 
| 
bsw/jbe@1309
 | 
   211   max-width: 0.1px;
 | 
| 
bsw/jbe@1309
 | 
   212 
 | 
| 
bsw/jbe@1309
 | 
   213   .mdl-textfield.is-focused &, .mdl-textfield.is-dirty & {
 | 
| 
bsw/jbe@1309
 | 
   214     // This is an unfortunate hack. Animating between widths in percent (%)
 | 
| 
bsw/jbe@1309
 | 
   215     // in many browsers (Chrome, Firefox) only animates the inner visual style
 | 
| 
bsw/jbe@1309
 | 
   216     // of the input - the outer bounding box still 'jumps'.
 | 
| 
bsw/jbe@1309
 | 
   217     // Thus assume a sensible maximum, and animate to/from that value.
 | 
| 
bsw/jbe@1309
 | 
   218     max-width: 600px;
 | 
| 
bsw/jbe@1309
 | 
   219   }
 | 
| 
bsw/jbe@1309
 | 
   220   .mdl-textfield__label:after {
 | 
| 
bsw/jbe@1309
 | 
   221     bottom: 0;
 | 
| 
bsw/jbe@1309
 | 
   222   }
 | 
| 
bsw/jbe@1309
 | 
   223 }
 |