material_components_web-sass 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +7 -0
  5. data/CHANGELOG.md +8 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +97 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/lib/material_components_web-sass.rb +52 -0
  13. data/lib/material_components_web/sass/engine.rb +18 -0
  14. data/lib/material_components_web/sass/version.rb +5 -0
  15. data/material_components_web-sass.gemspec +32 -0
  16. data/vendor/assets/fonts/material-icons/LICENSE +202 -0
  17. data/vendor/assets/fonts/material-icons/MaterialIcons-Regular.eot +0 -0
  18. data/vendor/assets/fonts/material-icons/MaterialIcons-Regular.ttf +0 -0
  19. data/vendor/assets/fonts/material-icons/MaterialIcons-Regular.woff +0 -0
  20. data/vendor/assets/fonts/material-icons/MaterialIcons-Regular.woff2 +0 -0
  21. data/vendor/assets/fonts/roboto/LICENSE.txt +202 -0
  22. data/vendor/assets/fonts/roboto/Roboto-Bold.ttf +0 -0
  23. data/vendor/assets/fonts/roboto/Roboto-Bold.woff +0 -0
  24. data/vendor/assets/fonts/roboto/Roboto-Bold.woff2 +0 -0
  25. data/vendor/assets/fonts/roboto/Roboto-Light.ttf +0 -0
  26. data/vendor/assets/fonts/roboto/Roboto-Light.woff +0 -0
  27. data/vendor/assets/fonts/roboto/Roboto-Light.woff2 +0 -0
  28. data/vendor/assets/fonts/roboto/Roboto-Medium.ttf +0 -0
  29. data/vendor/assets/fonts/roboto/Roboto-Medium.woff +0 -0
  30. data/vendor/assets/fonts/roboto/Roboto-Medium.woff2 +0 -0
  31. data/vendor/assets/fonts/roboto/Roboto-Regular.ttf +0 -0
  32. data/vendor/assets/fonts/roboto/Roboto-Regular.woff +0 -0
  33. data/vendor/assets/fonts/roboto/Roboto-Regular.woff2 +0 -0
  34. data/vendor/assets/fonts/roboto/Roboto-Thin.ttf +0 -0
  35. data/vendor/assets/fonts/roboto/Roboto-Thin.woff +0 -0
  36. data/vendor/assets/fonts/roboto/Roboto-Thin.woff2 +0 -0
  37. data/vendor/assets/javascripts/material-components-web.js +5492 -0
  38. data/vendor/assets/stylesheets/@material/animation/_functions.scss +25 -0
  39. data/vendor/assets/stylesheets/@material/animation/_mixins.scss +29 -0
  40. data/vendor/assets/stylesheets/@material/animation/_variables.scss +19 -0
  41. data/vendor/assets/stylesheets/@material/animation/mdc-animation.scss +31 -0
  42. data/vendor/assets/stylesheets/@material/button/mdc-button.scss +199 -0
  43. data/vendor/assets/stylesheets/@material/card/mdc-card.scss +179 -0
  44. data/vendor/assets/stylesheets/@material/checkbox/_keyframes.scss +180 -0
  45. data/vendor/assets/stylesheets/@material/checkbox/_variables.scss +31 -0
  46. data/vendor/assets/stylesheets/@material/checkbox/mdc-checkbox.scss +310 -0
  47. data/vendor/assets/stylesheets/@material/drawer/_mixins.scss +145 -0
  48. data/vendor/assets/stylesheets/@material/drawer/mdc-drawer.scss +18 -0
  49. data/vendor/assets/stylesheets/@material/drawer/permanent/mdc-permanent-drawer.scss +54 -0
  50. data/vendor/assets/stylesheets/@material/drawer/temporary/mdc-temporary-drawer.scss +134 -0
  51. data/vendor/assets/stylesheets/@material/elevation/_mixins.scss +68 -0
  52. data/vendor/assets/stylesheets/@material/elevation/_variables.scss +122 -0
  53. data/vendor/assets/stylesheets/@material/elevation/mdc-elevation.scss +27 -0
  54. data/vendor/assets/stylesheets/@material/fab/mdc-fab.scss +122 -0
  55. data/vendor/assets/stylesheets/@material/fonts/material-icons.scss +36 -0
  56. data/vendor/assets/stylesheets/@material/fonts/roboto.scss +45 -0
  57. data/vendor/assets/stylesheets/@material/form-field/mdc-form-field.scss +64 -0
  58. data/vendor/assets/stylesheets/@material/icon-toggle/mdc-icon-toggle.scss +133 -0
  59. data/vendor/assets/stylesheets/@material/list/mdc-list.scss +207 -0
  60. data/vendor/assets/stylesheets/@material/menu/mdc-menu.scss +22 -0
  61. data/vendor/assets/stylesheets/@material/menu/simple/mdc-simple-menu.scss +194 -0
  62. data/vendor/assets/stylesheets/@material/radio/mdc-radio.scss +198 -0
  63. data/vendor/assets/stylesheets/@material/ripple/_keyframes.scss +61 -0
  64. data/vendor/assets/stylesheets/@material/ripple/_mixins.scss +196 -0
  65. data/vendor/assets/stylesheets/@material/ripple/_variables.scss +17 -0
  66. data/vendor/assets/stylesheets/@material/ripple/mdc-ripple.scss +80 -0
  67. data/vendor/assets/stylesheets/@material/rtl/_mixins.scss +251 -0
  68. data/vendor/assets/stylesheets/@material/select/mdc-select.scss +174 -0
  69. data/vendor/assets/stylesheets/@material/snackbar/_variables.scss +22 -0
  70. data/vendor/assets/stylesheets/@material/snackbar/mdc-snackbar.scss +126 -0
  71. data/vendor/assets/stylesheets/@material/textfield/mdc-textfield.scss +512 -0
  72. data/vendor/assets/stylesheets/@material/theme/_constants.scss +285 -0
  73. data/vendor/assets/stylesheets/@material/theme/_functions.scss +64 -0
  74. data/vendor/assets/stylesheets/@material/theme/_mixins.scss +104 -0
  75. data/vendor/assets/stylesheets/@material/theme/_variables.scss +80 -0
  76. data/vendor/assets/stylesheets/@material/theme/mdc-theme.scss +43 -0
  77. data/vendor/assets/stylesheets/@material/typography/_mixins.scss +45 -0
  78. data/vendor/assets/stylesheets/@material/typography/_variables.scss +109 -0
  79. data/vendor/assets/stylesheets/@material/typography/mdc-typography.scss +32 -0
  80. data/vendor/assets/stylesheets/_material-components-web.scss +36 -0
  81. metadata +195 -0
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Copyright 2016 Google Inc. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ @import "@material/animation/functions";
18
+ @import "@material/typography/mixins";
19
+ @import "@material/theme/mixins";
20
+ @import "@material/rtl/mixins";
21
+
22
+ @mixin mdc-select-dd-arrow-svg-bg_($fill-hex-number: 000000, $opacity: .54) {
23
+ // stylelint-disable scss/dollar-variable-pattern
24
+ background-image: url(data:image/svg+xml,%3Csvg%20width%3D%2210px%22%20height%3D%225px%22%20viewBox%3D%227%2010%2010%205%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%0A%20%20%20%20%3Cpolygon%20id%3D%22Shape%22%20stroke%3D%22none%22%20fill%3D%22%23#{$fill-hex-number}%22%20fill-rule%3D%22evenodd%22%20opacity%3D%22#{$opacity}%22%20points%3D%227%2010%2012%2015%2017%2010%22%3E%3C%2Fpolygon%3E%0A%3C%2Fsvg%3E);
25
+ // stylelint-enable scss/dollar-variable-pattern
26
+ }
27
+
28
+ // postcss-bem-linter: define select
29
+ .mdc-select {
30
+ @include mdc-typography(subheading2);
31
+ @include mdc-theme-prop(color, text-primary-on-light);
32
+ @include mdc-rtl-reflexive-box(padding, right, 24px);
33
+
34
+ // Resets for <select> element
35
+ appearance: none;
36
+
37
+ &::-ms-expand {
38
+ display: none;
39
+ }
40
+
41
+ display: inline-flex;
42
+ align-items: center;
43
+ justify-content: flex-start;
44
+ height: 32px;
45
+ transition:
46
+ mdc-animation-exit(border-bottom-color, 150ms),
47
+ mdc-animation-exit(background-color, 150ms);
48
+ border: none;
49
+ border-bottom: 1px solid rgba(black, .12);
50
+ border-radius: 0;
51
+ background: none;
52
+ background-repeat: no-repeat;
53
+ background-position: right center;
54
+
55
+ @include mdc-select-dd-arrow-svg-bg_;
56
+
57
+ font-family: Roboto, sans-serif;
58
+ font-size: .936rem;
59
+ cursor: pointer;
60
+
61
+ &:focus {
62
+ @include mdc-theme-prop(border-bottom-color, primary);
63
+
64
+ outline: none;
65
+ background-color: rgba(black, .06);
66
+ }
67
+
68
+ @include mdc-rtl {
69
+ background-position: left center;
70
+ }
71
+
72
+ @include mdc-theme-dark {
73
+ @include mdc-theme-prop(color, text-primary-on-dark);
74
+ @include mdc-select-dd-arrow-svg-bg_(ffffff);
75
+
76
+ border-bottom: 1px solid rgba(white, .12);
77
+
78
+ &:focus {
79
+ @include mdc-theme-prop(border-bottom-color, primary);
80
+
81
+ background-color: rgba(white, .09);
82
+ }
83
+ }
84
+
85
+ &__menu {
86
+ position: fixed;
87
+ top: 0;
88
+ left: 0;
89
+ max-height: 100%;
90
+ transform-origin: center center;
91
+ overflow-y: scroll;
92
+ }
93
+
94
+ &__selected-text {
95
+ transition:
96
+ mdc-animation-exit(opacity, 125ms),
97
+ mdc-animation-exit(transform, 125ms);
98
+ }
99
+ }
100
+
101
+ .mdc-select--open {
102
+ .mdc-select__selected-text {
103
+ transform: translateY(8px);
104
+ transition:
105
+ mdc-animation-enter(opacity, 125ms, 125ms),
106
+ mdc-animation-enter(transform, 125ms, 125ms);
107
+ opacity: 0;
108
+ }
109
+ }
110
+
111
+ .mdc-select--disabled,
112
+ .mdc-select[disabled] {
113
+ @include mdc-theme-prop(color, text-disabled-on-light);
114
+ @include mdc-select-dd-arrow-svg-bg_(000000, .38);
115
+
116
+ border-bottom-style: dotted;
117
+ cursor: default;
118
+ pointer-events: none;
119
+ // Imitate native disabled functionality
120
+ user-select: none;
121
+
122
+ @include mdc-theme-dark(".mdc-select", true) {
123
+ @include mdc-theme-prop(color, text-disabled-on-dark);
124
+ @include mdc-select-dd-arrow-svg-bg_(ffffff, .38);
125
+
126
+ border-bottom: 1px dotted rgba(white, .38);
127
+ }
128
+ }
129
+
130
+ // postcss-bem-linter: end
131
+
132
+ .mdc-select__menu {
133
+ .mdc-list-item {
134
+ @include mdc-typography(subheading2);
135
+ @include mdc-theme-prop(color, text-secondary-on-light);
136
+
137
+ &[aria-selected="true"] {
138
+ @include mdc-theme-prop(color, text-primary-on-light);
139
+ }
140
+
141
+ @include mdc-theme-dark(".mdc-select") {
142
+ @include mdc-theme-prop(color, text-secondary-on-dark);
143
+
144
+ &[aria-selected="true"] {
145
+ @include mdc-theme-prop(color, text-primary-on-dark);
146
+ }
147
+ }
148
+ }
149
+
150
+ .mdc-list-group,
151
+ .mdc-list-group > .mdc-list-item:first-child {
152
+ margin-top: 12px;
153
+ }
154
+
155
+ .mdc-list-group {
156
+ @include mdc-theme-prop(color, text-hint-on-light);
157
+
158
+ font-weight: normal;
159
+
160
+ .mdc-list-item {
161
+ @include mdc-theme-prop(color, text-primary-on-light);
162
+ }
163
+ }
164
+
165
+ @include mdc-theme-dark(".mdc-select") {
166
+ .mdc-list-group {
167
+ @include mdc-theme-prop(color, text-hint-on-dark);
168
+
169
+ .mdc-list-item {
170
+ @include mdc-theme-prop(color, text-primary-on-dark);
171
+ }
172
+ }
173
+ }
174
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Copyright 2016 Google Inc. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ // Hard coded since the color is not present in any palette.
18
+ $mdc-snackbar-background-color: #323232;
19
+ $mdc-snackbar-foreground-color: white;
20
+ // TODO: Better spot to pull this breakpoint?
21
+ //$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;
22
+ $mdc-snackbar-tablet-breakpoint: 600px;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Copyright 2015 Google Inc. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ @import "@material/animation/functions";
18
+ @import "@material/rtl/mixins";
19
+ @import "@material/theme/mixins";
20
+ @import "@material/typography/mixins";
21
+ @import "./variables";
22
+
23
+ /* postcss-bem-linter: define snackbar */
24
+ .mdc-snackbar {
25
+ display: flex;
26
+ position: fixed;
27
+ bottom: 0;
28
+ left: 50%;
29
+ align-items: center;
30
+ justify-content: flex-start;
31
+ padding-right: 24px;
32
+ padding-left: 24px;
33
+ transform: translate(0, 100%);
34
+ transition: mdc-animation-exit(transform, .25s);
35
+ background-color: $mdc-snackbar-background-color;
36
+ will-change: transform;
37
+ pointer-events: none;
38
+
39
+ @media (max-width: ($mdc-snackbar-tablet-breakpoint - 1)) {
40
+ left: 0;
41
+ width: calc(100% - 48px);
42
+ }
43
+
44
+ @media (min-width: $mdc-snackbar-tablet-breakpoint) {
45
+ min-width: 288px;
46
+ max-width: 568px;
47
+ transform: translate(-50%, 100%);
48
+ border-radius: 2px;
49
+ }
50
+
51
+ &--active {
52
+ transform: translate(0, 0);
53
+ pointer-events: auto;
54
+ transition: mdc-animation-enter(transform, .25s);
55
+
56
+ @media (min-width: $mdc-snackbar-tablet-breakpoint) {
57
+ transform: translate(-50%, 0);
58
+ }
59
+ }
60
+
61
+ &--action-on-bottom {
62
+ flex-direction: column;
63
+ }
64
+
65
+ &--action-on-bottom &__text {
66
+ margin-right: inherit;
67
+ }
68
+
69
+ &--action-on-bottom &__action-wrapper {
70
+ flex-direction: column;
71
+ justify-content: flex-start;
72
+ margin-top: -12px;
73
+ margin-bottom: 8px;
74
+
75
+ @include mdc-rtl-reflexive-box(margin, left, auto);
76
+ }
77
+
78
+ &__text {
79
+ @include mdc-typography(body1);
80
+ @include mdc-rtl-reflexive-box(margin, right, auto, ".mdc-snackbar");
81
+
82
+ display: flex;
83
+ align-items: center;
84
+ height: 48px;
85
+ transition: mdc-animation-exit(opacity, .3s);
86
+ color: $mdc-snackbar-foreground-color;
87
+ opacity: 0;
88
+ }
89
+
90
+ &--multiline &__text {
91
+ height: 80px;
92
+ }
93
+
94
+ /* stylelint-disable plugin/selector-bem-pattern */
95
+ &--multiline#{&}--action-on-bottom &__text {
96
+ margin: 0;
97
+ }
98
+ /* stylelint-enable plugin/selector-bem-pattern */
99
+
100
+ &__action-button {
101
+ @include mdc-theme-prop(color, accent);
102
+ @include mdc-rtl-reflexive-box(margin, right, -16px, ".mdc-snackbar");
103
+
104
+ min-width: auto;
105
+ height: inherit;
106
+ transition: mdc-animation-exit(opacity, .3s);
107
+ opacity: 0;
108
+ visibility: hidden;
109
+
110
+ &::-moz-focus-inner {
111
+ border: 0;
112
+ }
113
+
114
+ &:not([aria-hidden]) {
115
+ visibility: inherit;
116
+ }
117
+ }
118
+
119
+ &--active &__text,
120
+ &--active &__action-button:not([aria-hidden]) {
121
+ transition: mdc-animation-exit(opacity, .3s);
122
+ opacity: 1;
123
+ }
124
+ }
125
+
126
+ /* postcss-bem-linter: end */
@@ -0,0 +1,512 @@
1
+ /**
2
+ * Copyright 2016 Google Inc. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ @import "@material/animation/variables";
18
+ @import "@material/rtl/mixins";
19
+ @import "@material/theme/variables";
20
+ @import "@material/theme/mixins";
21
+ @import "@material/typography/mixins";
22
+ @import "@material/typography/variables";
23
+
24
+ $mdc-textfield-error-on-light: #d50000;
25
+ $mdc-textfield-error-on-dark: #ff6e6e;
26
+ $mdc-textfield-divider-on-light: rgba(black, .12);
27
+ $mdc-textfield-divider-on-dark: rgba(white, .12);
28
+ $mdc-textfield-disabled-border-on-light: rgba(#231f20, .26);
29
+ $mdc-textfield-disabled-border-on-dark: rgba(white, .3);
30
+
31
+ @function mdc-textfield-transition($property) {
32
+ @return #{$property} 180ms $mdc-animation-fast-out-slow-in-timing-function;
33
+ }
34
+
35
+ /* postcss-bem-linter: define textfield */
36
+ .mdc-textfield {
37
+ @include mdc-typography-base;
38
+ // We use only a subset of the MDC typography values here as changing things such as line-height
39
+ // affects how the labels are transformed.
40
+ @each $prop in (font-size, letter-spacing) {
41
+ #{$prop}: map-get(map-get($mdc-typography-styles, subheading2), $prop);
42
+ }
43
+
44
+ display: inline-block;
45
+ margin-bottom: 8px;
46
+ will-change: opacity, transform, color;
47
+
48
+ &__input {
49
+ @include mdc-theme-prop(color, text-primary-on-light);
50
+
51
+ padding: 0 0 8px;
52
+ border: none;
53
+ background: none;
54
+ font-size: inherit;
55
+ appearance: none;
56
+
57
+ &::placeholder {
58
+ @include mdc-theme-prop(color, text-hint-on-light);
59
+
60
+ transition: mdc-textfield-transition(color);
61
+ opacity: 1;
62
+ }
63
+
64
+ &:focus {
65
+ outline: none;
66
+
67
+ &::placeholder {
68
+ @include mdc-theme-prop(color, text-secondary-on-light);
69
+ }
70
+ }
71
+
72
+ // Remove red outline on firefox
73
+ &:invalid {
74
+ box-shadow: none;
75
+ }
76
+
77
+ @include mdc-theme-dark {
78
+ color: white;
79
+
80
+ &::placeholder {
81
+ @include mdc-theme-prop(color, text-hint-on-dark);
82
+ }
83
+
84
+ &:focus::placeholder {
85
+ @include mdc-theme-prop(color, text-secondary-on-dark);
86
+ }
87
+ }
88
+ }
89
+
90
+ &__label {
91
+ @include mdc-theme-prop(color, text-hint-on-light);
92
+
93
+ position: absolute;
94
+ bottom: 8px;
95
+ left: 0;
96
+ transform-origin: left top;
97
+ transition: mdc-textfield-transition(transform), mdc-textfield-transition(color);
98
+ cursor: text;
99
+
100
+ /* stylelint-disable plugin/selector-bem-pattern */
101
+ @include mdc-rtl(".mdc-textfield") {
102
+ right: 0;
103
+ left: auto;
104
+ transform-origin: right top;
105
+ }
106
+ /* stylelint-enable plugin/selector-bem-pattern */
107
+
108
+ @include mdc-theme-dark(".mdc-textfield") {
109
+ @include mdc-theme-prop(color, text-hint-on-dark);
110
+ }
111
+
112
+ &--float-above {
113
+ transform: translateY(-100%) scale(.75, .75);
114
+ cursor: auto;
115
+ }
116
+ }
117
+ }
118
+
119
+ .mdc-textfield--upgraded:not(.mdc-textfield--fullwidth) {
120
+ display: inline-flex;
121
+ position: relative;
122
+ box-sizing: border-box;
123
+ align-items: flex-end;
124
+ margin-top: 16px;
125
+
126
+ &:not(.mdc-textfield--multiline) {
127
+ height: 48px;
128
+
129
+ &::after {
130
+ position: absolute;
131
+ bottom: 0;
132
+ left: 0;
133
+ width: 100%;
134
+ height: 1px;
135
+ transform: translateY(50%) scaleY(1);
136
+ transform-origin: center bottom;
137
+ transition: mdc-textfield-transition(background-color), mdc-textfield-transition(transform);
138
+ background-color: $mdc-textfield-divider-on-light;
139
+ content: "";
140
+
141
+ @include mdc-theme-dark(".mdc-textfield") {
142
+ background-color: $mdc-textfield-divider-on-dark;
143
+ }
144
+ }
145
+ }
146
+
147
+ .mdc-textfield__label {
148
+ pointer-events: none;
149
+ }
150
+ }
151
+
152
+ .mdc-textfield--focused {
153
+ @mixin mdc-textfield-after-styles {
154
+ @include mdc-theme-prop(background-color, primary);
155
+
156
+ transform: translateY(100%) scaleY(2);
157
+ transition: mdc-textfield-transition(transform);
158
+ }
159
+
160
+ @mixin mdc-textfield-label-styles {
161
+ @include mdc-theme-prop(color, primary);
162
+ }
163
+
164
+ &.mdc-textfield--upgraded:not(.mdc-textfield--fullwidth):not(.mdc-textfield--multiline)::after {
165
+ @include mdc-textfield-after-styles;
166
+
167
+ @include mdc-theme-dark(".mdc-textfield", true) {
168
+ @include mdc-textfield-after-styles;
169
+ }
170
+ }
171
+
172
+ .mdc-textfield__label {
173
+ @include mdc-textfield-label-styles;
174
+
175
+ @include mdc-theme-dark(".mdc-textfield") {
176
+ @include mdc-textfield-label-styles;
177
+ }
178
+ }
179
+ }
180
+
181
+ .mdc-textfield--dense {
182
+ margin-top: 12px;
183
+ margin-bottom: 4px;
184
+ font-size: .813rem;
185
+
186
+ .mdc-textfield__label--float-above {
187
+ // NOTE: This is an eyeball'd approximation of what's in the mocks.
188
+ transform: translateY(calc(-100% - 2px)) scale(.923, .923);
189
+ }
190
+ }
191
+
192
+ .mdc-textfield--invalid {
193
+ &:not(.mdc-textfield--focused) {
194
+ &::after {
195
+ background-color: $mdc-textfield-error-on-light;
196
+ }
197
+
198
+ .mdc-textfield__label {
199
+ color: $mdc-textfield-error-on-light;
200
+ }
201
+ }
202
+
203
+ @include mdc-theme-dark(".mdc-textfield", true) {
204
+ &:not(.mdc-textfield--focused) {
205
+ &::after {
206
+ background-color: $mdc-textfield-error-on-dark;
207
+ }
208
+
209
+ .mdc-textfield__label {
210
+ color: $mdc-textfield-error-on-dark;
211
+ }
212
+ }
213
+ }
214
+ }
215
+
216
+ .mdc-textfield--disabled {
217
+ &::after {
218
+ display: none;
219
+ }
220
+
221
+ // Account for offset by border
222
+ .mdc-textfield__input {
223
+ padding-bottom: 7px;
224
+ }
225
+
226
+ border-bottom: 1px dotted $mdc-textfield-disabled-border-on-light;
227
+
228
+ @include mdc-theme-dark(".mdc-textfield", true) {
229
+ border-bottom: 1px dotted $mdc-textfield-disabled-border-on-dark;
230
+ }
231
+
232
+ /* stylelint-disable plugin/selector-bem-pattern */
233
+ .mdc-textfield__input,
234
+ .mdc-textfield__label,
235
+ & + .mdc-textfield-helptext {
236
+ @include mdc-theme-prop(color, text-disabled-on-light);
237
+ }
238
+ /* stylelint-enable plugin/selector-bem-pattern */
239
+
240
+ .mdc-textfield__input,
241
+ .mdc-textfield__label {
242
+ @include mdc-theme-dark(".mdc-textfield") {
243
+ @include mdc-theme-prop(color, text-disabled-on-dark);
244
+ }
245
+ }
246
+
247
+ @include mdc-theme-dark(".mdc-textfield", true) {
248
+ /* stylelint-disable plugin/selector-bem-pattern */
249
+ + .mdc-textfield-helptext {
250
+ @include mdc-theme-prop(colr, text-disabled-on-dark);
251
+ }
252
+ /* stylelint-enable plugin/selector-bem-pattern */
253
+ }
254
+
255
+ .mdc-textfield__label {
256
+ bottom: 7px;
257
+ cursor: default;
258
+ }
259
+ }
260
+
261
+ .mdc-textfield__input:required + .mdc-textfield__label::after {
262
+ margin-left: 1px;
263
+ content: "*";
264
+
265
+ .mdc-textfield--focused & {
266
+ color: $mdc-textfield-error-on-light;
267
+ }
268
+
269
+ @include mdc-theme-dark(".mdc-textfield") {
270
+ .mdc-textfield--focused & {
271
+ color: $mdc-textfield-error-on-dark;
272
+ }
273
+ }
274
+ }
275
+
276
+ .mdc-textfield--multiline {
277
+ /* stylelint-disable scss/dollar-variable-pattern */
278
+ $padding-inset: 4px;
279
+ $label-offset-y: $padding-inset + 2;
280
+ $label-offset-x: $padding-inset;
281
+ /* stylelint-enable scss/dollar-variable-pattern */
282
+
283
+ display: flex;
284
+ height: initial;
285
+ transition: none;
286
+
287
+ &::after {
288
+ content: initial;
289
+ }
290
+
291
+ /* stylelint-disable plugin/selector-bem-pattern */
292
+
293
+ .mdc-textfield__input {
294
+ padding: $padding-inset;
295
+ transition: mdc-textfield-transition(border-color);
296
+ border: 1px solid $mdc-textfield-divider-on-light;
297
+ border-radius: 2px;
298
+
299
+ @include mdc-theme-dark(".mdc-textfield") {
300
+ border-color: $mdc-textfield-divider-on-dark;
301
+ }
302
+
303
+ &:focus {
304
+ @include mdc-theme-prop(border-color, primary);
305
+ }
306
+
307
+ &:invalid:not(:focus) {
308
+ border-color: $mdc-textfield-error-on-light;
309
+ }
310
+
311
+ @include mdc-theme-dark(".mdc-textfield") {
312
+ &:invalid:not(:focus) {
313
+ border-color: $mdc-textfield-error-on-dark;
314
+ }
315
+ }
316
+ }
317
+
318
+ .mdc-textfield__label {
319
+ top: $label-offset-y;
320
+ bottom: initial;
321
+ left: $label-offset-x;
322
+
323
+ @include mdc-rtl(".mdc-textfield--multiline") {
324
+ right: $label-offset-x;
325
+ left: auto;
326
+ }
327
+
328
+ &--float-above {
329
+ // Translate above the top of the input, and compensate for the amount of offset needed
330
+ // to position the label within the bounds of the inset padding.
331
+ // Note that the scale factor is an eyeball'd approximation of what's shown in the mocks.
332
+ transform: translateY(calc(-100% - #{$label-offset-y})) scale(.923, .923);
333
+ }
334
+ }
335
+
336
+ &.mdc-textfield--disabled {
337
+ border-bottom: none;
338
+
339
+ .mdc-textfield__input {
340
+ border: 1px dotted $mdc-textfield-disabled-border-on-light;
341
+
342
+ @include mdc-theme-dark(".mdc-textfield") {
343
+ border-color: $mdc-textfield-disabled-border-on-dark;
344
+ }
345
+ }
346
+ }
347
+ /* stylelint-enable plugin/selector-bem-pattern */
348
+ }
349
+
350
+ .mdc-textfield--fullwidth {
351
+ display: block;
352
+ width: 100%;
353
+ box-sizing: border-box;
354
+ margin: 0;
355
+ border: none;
356
+ border-bottom: 1px solid $mdc-textfield-divider-on-light;
357
+ outline: none;
358
+
359
+ /* stylelint-disable plugin/selector-bem-pattern */
360
+
361
+ &:not(.mdc-textfield--multiline) {
362
+ height: 56px;
363
+ }
364
+
365
+ &.mdc-textfield--multiline {
366
+ padding: 20px 0 0;
367
+ }
368
+
369
+ &.mdc-textfield--dense {
370
+ &:not(.mdc-textfield--multiline) {
371
+ height: 48px;
372
+ }
373
+
374
+ &.mdc-textfield--multiline {
375
+ padding: 16px 0 0;
376
+ }
377
+ }
378
+
379
+ &.mdc-textfield--disabled {
380
+ &,
381
+ &.mdc-textfield--multiline {
382
+ border-bottom: 1px dotted $mdc-textfield-divider-on-light;
383
+ }
384
+ }
385
+
386
+ @include mdc-theme-dark {
387
+ border-bottom: 1px solid $mdc-textfield-divider-on-dark;
388
+
389
+ &.mdc-textfield--disabled {
390
+ &,
391
+ &.mdc-textfield--multiline {
392
+ border-bottom: 1px dotted $mdc-textfield-divider-on-dark;
393
+ }
394
+ }
395
+ }
396
+
397
+ /* stylelint-enable plugin/selector-bem-pattern */
398
+
399
+ .mdc-textfield__input {
400
+ width: 100%;
401
+ height: 100%;
402
+ padding: 0;
403
+ resize: none;
404
+ // Use !important here to override all other border treatments
405
+ border: none !important;
406
+ }
407
+ }
408
+
409
+ // Graceful degredation for css-only inputs
410
+
411
+ .mdc-textfield {
412
+ &:not(.mdc-textfield--upgraded):not(.mdc-textfield--multiline) .mdc-textfield__input {
413
+ transition: mdc-textfield-transition(border-bottom-color);
414
+ border-bottom: 1px solid $mdc-textfield-divider-on-light;
415
+ }
416
+
417
+ &:not(.mdc-textfield--upgraded) .mdc-textfield__input {
418
+ &:focus {
419
+ @include mdc-theme-prop(border-color, primary);
420
+ }
421
+
422
+ &:disabled {
423
+ @include mdc-theme-prop(color, text-disabled-on-light);
424
+
425
+ border-style: dotted;
426
+ border-color: $mdc-textfield-disabled-border-on-light;
427
+ }
428
+
429
+ &:invalid:not(:focus) {
430
+ border-color: $mdc-textfield-error-on-light;
431
+ }
432
+ }
433
+
434
+ @include mdc-theme-dark {
435
+ &:not(.mdc-textfield--upgraded) .mdc-textfield__input {
436
+ &:not(:focus) {
437
+ border-color: rgba(white, .12);
438
+ }
439
+
440
+ &:disabled {
441
+ @include mdc-theme-prop(color, text-disabled-on-dark);
442
+
443
+ border-color: $mdc-textfield-disabled-border-on-dark;
444
+ }
445
+
446
+ &:invalid:not(:focus) {
447
+ border-color: $mdc-textfield-error-on-dark;
448
+ }
449
+ }
450
+ }
451
+ }
452
+
453
+ /* postcss-bem-linter: end */
454
+
455
+ /* postcss-bem-linter: define textfield-helptext */
456
+
457
+ .mdc-textfield-helptext {
458
+ @include mdc-theme-prop(color, text-hint-on-light);
459
+
460
+ margin: 0;
461
+ transition: mdc-textfield-transition(opacity);
462
+ font-size: .75rem;
463
+ opacity: 0;
464
+ will-change: opacity;
465
+
466
+ @include mdc-theme-dark {
467
+ @include mdc-theme-prop(color, text-hint-on-dark);
468
+ }
469
+
470
+ /* stylelint-disable plugin/selector-bem-pattern */
471
+ .mdc-textfield + & {
472
+ margin-bottom: 8px;
473
+ }
474
+
475
+ .mdc-textfield--dense + & {
476
+ margin-bottom: 4px;
477
+ }
478
+
479
+ .mdc-textfield--focused + &:not(#{&}--validation-msg) {
480
+ opacity: 1;
481
+ }
482
+
483
+ /* stylelint-enable plugin/selector-bem-pattern */
484
+ }
485
+
486
+ .mdc-textfield-helptext--persistent {
487
+ transition: none;
488
+ opacity: 1;
489
+ will-change: initial;
490
+ }
491
+
492
+ /* postcss-bem-linter: end */
493
+
494
+ .mdc-textfield--invalid {
495
+ + .mdc-textfield-helptext--validation-msg {
496
+ color: $mdc-textfield-error-on-light;
497
+ opacity: 1;
498
+ }
499
+
500
+ @include mdc-theme-dark(".mdc-textfield", true) {
501
+ + .mdc-textfield-helptext--validation-msg {
502
+ color: $mdc-textfield-error-on-dark;
503
+ }
504
+ }
505
+ }
506
+
507
+ // mdc-form-field tweaks to align text field label correctly
508
+ /* stylelint-disable selector-no-type */
509
+ .mdc-form-field > .mdc-textfield + label {
510
+ align-self: flex-start;
511
+ }
512
+ /* stylelint-enable selector-no-type */