bourbon 4.2.4 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (265) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +34 -0
  3. data/.github/ISSUE_TEMPLATE.md +22 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -0
  5. data/.gitignore +1 -1
  6. data/.hound.yml +3 -1
  7. data/.npmignore +7 -4
  8. data/.stylelintrc.json +3 -0
  9. data/.tool-versions +2 -0
  10. data/CHANGELOG.md +415 -0
  11. data/CODE_OF_CONDUCT.md +6 -0
  12. data/CONTRIBUTING.md +81 -28
  13. data/Gemfile +1 -1
  14. data/LICENSE.md +1 -1
  15. data/README.md +164 -86
  16. data/RELEASING.md +33 -0
  17. data/Rakefile +0 -2
  18. data/bin/bourbon +1 -2
  19. data/bourbon.gemspec +30 -24
  20. data/core/_bourbon.scss +54 -0
  21. data/core/bourbon/helpers/_buttons-list.scss +14 -0
  22. data/core/bourbon/helpers/_scales.scss +27 -0
  23. data/core/bourbon/helpers/_text-inputs-list.scss +26 -0
  24. data/core/bourbon/library/_border-color.scss +26 -0
  25. data/core/bourbon/library/_border-radius.scss +85 -0
  26. data/core/bourbon/library/_border-style.scss +25 -0
  27. data/core/bourbon/library/_border-width.scss +25 -0
  28. data/core/bourbon/library/_buttons.scss +84 -0
  29. data/{app/assets/stylesheets/addons → core/bourbon/library}/_clearfix.scss +5 -5
  30. data/core/bourbon/library/_contrast-switch.scss +81 -0
  31. data/{app/assets/stylesheets/addons → core/bourbon/library}/_ellipsis.scss +12 -6
  32. data/core/bourbon/library/_font-face.scss +65 -0
  33. data/core/bourbon/library/_font-stacks.scss +248 -0
  34. data/core/bourbon/library/_hide-text.scss +24 -0
  35. data/core/bourbon/library/_hide-visually.scss +70 -0
  36. data/core/bourbon/library/_margin.scss +37 -0
  37. data/core/bourbon/library/_modular-scale.scss +120 -0
  38. data/core/bourbon/library/_overflow-wrap.scss +28 -0
  39. data/core/bourbon/library/_padding.scss +36 -0
  40. data/core/bourbon/library/_position.scss +62 -0
  41. data/core/bourbon/library/_prefixer.scss +37 -0
  42. data/core/bourbon/library/_shade.scss +32 -0
  43. data/core/bourbon/library/_size.scss +50 -0
  44. data/core/bourbon/library/_strip-unit.scss +17 -0
  45. data/core/bourbon/library/_text-inputs.scss +163 -0
  46. data/core/bourbon/library/_timing-functions.scss +36 -0
  47. data/core/bourbon/library/_tint.scss +32 -0
  48. data/core/bourbon/library/_triangle.scss +82 -0
  49. data/core/bourbon/library/_value-prefixer.scss +37 -0
  50. data/core/bourbon/settings/_settings.scss +75 -0
  51. data/core/bourbon/utilities/_assign-inputs.scss +28 -0
  52. data/core/bourbon/utilities/_compact-shorthand.scss +42 -0
  53. data/core/bourbon/utilities/_contrast-ratio.scss +31 -0
  54. data/core/bourbon/utilities/_directional-property.scss +68 -0
  55. data/core/bourbon/utilities/_fetch-bourbon-setting.scss +16 -0
  56. data/{app/assets/stylesheets/helpers → core/bourbon/utilities}/_font-source-declaration.scss +23 -15
  57. data/core/bourbon/utilities/_gamma.scss +24 -0
  58. data/core/bourbon/utilities/_lightness.scss +24 -0
  59. data/{app/assets/stylesheets/functions/_unpack.scss → core/bourbon/utilities/_unpack-shorthand.scss} +8 -6
  60. data/{app/assets/stylesheets/functions → core/bourbon/validators}/_contains-falsy.scss +6 -6
  61. data/{app/assets/stylesheets/functions → core/bourbon/validators}/_contains.scss +8 -8
  62. data/core/bourbon/validators/_is-color.scss +13 -0
  63. data/{app/assets/stylesheets/functions → core/bourbon/validators}/_is-length.scss +6 -2
  64. data/core/bourbon/validators/_is-number.scss +15 -0
  65. data/core/bourbon/validators/_is-size.scss +18 -0
  66. data/eyeglass-exports.js +7 -0
  67. data/features/install.feature +0 -1
  68. data/features/step_definitions/bourbon_steps.rb +13 -5
  69. data/features/update.feature +0 -1
  70. data/features/version.feature +0 -2
  71. data/index.js +2 -2
  72. data/lib/bourbon/generator.rb +11 -10
  73. data/lib/bourbon/version.rb +1 -1
  74. data/lib/bourbon.rb +6 -19
  75. data/package-lock.json +3449 -0
  76. data/package.json +24 -13
  77. data/spec/bourbon/{addons → library}/border_color_spec.rb +8 -8
  78. data/spec/bourbon/{addons → library}/border_radius_spec.rb +1 -1
  79. data/spec/bourbon/{addons → library}/border_style_spec.rb +1 -1
  80. data/spec/bourbon/{addons → library}/border_width_spec.rb +1 -1
  81. data/spec/bourbon/{addons → library}/buttons_spec.rb +4 -4
  82. data/spec/bourbon/{addons → library}/clearfix_spec.rb +3 -3
  83. data/spec/bourbon/library/contrast_switch_spec.rb +23 -0
  84. data/spec/bourbon/{addons → library}/ellipsis_spec.rb +1 -1
  85. data/spec/bourbon/library/font_face_spec_1.rb +16 -0
  86. data/spec/bourbon/library/font_face_spec_2.rb +21 -0
  87. data/spec/bourbon/library/font_face_spec_3.rb +16 -0
  88. data/spec/bourbon/library/font_face_spec_4.rb +17 -0
  89. data/spec/bourbon/library/font_stacks_spec.rb +42 -0
  90. data/spec/bourbon/{addons → library}/hide_text_spec.rb +1 -1
  91. data/spec/bourbon/library/hide_visually_spec.rb +37 -0
  92. data/spec/bourbon/{addons → library}/margin_spec.rb +1 -1
  93. data/spec/bourbon/{functions → library}/modular_scale_spec.rb +6 -6
  94. data/spec/bourbon/library/overflow_wrap_spec.rb +27 -0
  95. data/spec/bourbon/{addons → library}/padding_spec.rb +1 -1
  96. data/spec/bourbon/{addons → library}/position_spec.rb +1 -1
  97. data/spec/bourbon/library/prefixer_spec.rb +34 -0
  98. data/spec/bourbon/{functions → library}/shade_spec.rb +1 -1
  99. data/spec/bourbon/{addons → library}/size_spec.rb +1 -1
  100. data/spec/bourbon/{functions/strip_units_spec.rb → library/strip_unit_spec.rb} +2 -2
  101. data/spec/bourbon/{addons → library}/text_inputs_spec.rb +25 -15
  102. data/spec/bourbon/{functions → library}/tint_spec.rb +1 -1
  103. data/spec/bourbon/library/triangle_spec.rb +31 -0
  104. data/spec/bourbon/{functions → utilities}/assign_inputs_spec.rb +8 -8
  105. data/spec/bourbon/utilities/compact_shorthand_spec.rb +30 -0
  106. data/spec/bourbon/utilities/contrast_ratio_spec.rb +23 -0
  107. data/spec/bourbon/utilities/directional_property_spec.rb +28 -0
  108. data/spec/bourbon/utilities/fetch_bourbon_setting_spec.rb +31 -0
  109. data/spec/bourbon/{helpers → utilities}/font_source_declaration_spec.rb +1 -1
  110. data/spec/bourbon/utilities/gamma_spec.rb +23 -0
  111. data/spec/bourbon/utilities/lightness_spec.rb +31 -0
  112. data/spec/bourbon/{functions → utilities}/unpack_spec.rb +1 -1
  113. data/spec/bourbon/{functions → validators}/contains_spec.rb +1 -1
  114. data/spec/bourbon/{functions → validators}/is_length_spec.rb +1 -1
  115. data/spec/bourbon/{functions → validators}/is_number_spec.rb +1 -1
  116. data/spec/bourbon/{functions → validators}/is_size_spec.rb +1 -1
  117. data/spec/fixtures/_setup.scss +1 -1
  118. data/spec/fixtures/{addons → library}/border-color.scss +4 -4
  119. data/spec/fixtures/{addons → library}/border-radius.scss +0 -0
  120. data/spec/fixtures/{addons → library}/border-style.scss +0 -0
  121. data/spec/fixtures/{addons → library}/border-width.scss +0 -0
  122. data/spec/fixtures/{addons → library}/buttons.scss +0 -0
  123. data/spec/fixtures/{addons → library}/clearfix.scss +0 -0
  124. data/spec/fixtures/library/contrast-switch.scss +9 -0
  125. data/spec/fixtures/{addons → library}/ellipsis.scss +0 -0
  126. data/spec/fixtures/library/font-face-1.scss +6 -0
  127. data/spec/fixtures/library/font-face-2.scss +10 -0
  128. data/spec/fixtures/library/font-face-3.scss +8 -0
  129. data/spec/fixtures/library/font-face-4.scss +7 -0
  130. data/spec/fixtures/library/font-stacks.scss +41 -0
  131. data/spec/fixtures/{addons → library}/hide-text.scss +0 -0
  132. data/spec/fixtures/library/hide-visually.scss +9 -0
  133. data/spec/fixtures/{addons → library}/margin.scss +0 -0
  134. data/spec/fixtures/{functions → library}/modular-scale.scss +0 -0
  135. data/spec/fixtures/library/overflow-wrap.scss +9 -0
  136. data/spec/fixtures/{addons → library}/padding.scss +0 -0
  137. data/spec/fixtures/{addons → library}/position.scss +0 -4
  138. data/spec/fixtures/library/prefixer.scss +13 -0
  139. data/spec/fixtures/{functions → library}/shade.scss +1 -1
  140. data/spec/fixtures/{addons → library}/size.scss +2 -2
  141. data/spec/fixtures/library/strip-unit.scss +17 -0
  142. data/spec/fixtures/{addons → library}/text-inputs.scss +4 -0
  143. data/spec/fixtures/{functions → library}/tint.scss +1 -1
  144. data/spec/fixtures/library/triangle.scss +9 -0
  145. data/spec/fixtures/utilities/assign-inputs.scss +19 -0
  146. data/spec/fixtures/utilities/compact-shorthand.scss +21 -0
  147. data/spec/fixtures/utilities/contrast-ratio.scss +9 -0
  148. data/spec/fixtures/utilities/directional-property.scss +17 -0
  149. data/spec/fixtures/utilities/fetch-bourbon-setting.scss +16 -0
  150. data/spec/fixtures/utilities/font-source-declaration.scss +11 -0
  151. data/spec/fixtures/utilities/gamma.scss +9 -0
  152. data/spec/fixtures/utilities/lightness.scss +13 -0
  153. data/spec/fixtures/utilities/unpack.scss +17 -0
  154. data/spec/fixtures/{functions → validators}/contains.scss +1 -1
  155. data/spec/fixtures/{functions → validators}/is-length.scss +1 -1
  156. data/spec/fixtures/{functions → validators}/is-number.scss +1 -1
  157. data/spec/fixtures/{functions → validators}/is-size.scss +1 -1
  158. data/spec/support/matchers/have_value.rb +1 -1
  159. metadata +246 -282
  160. data/.scss-lint.yml +0 -14
  161. data/.travis.yml +0 -8
  162. data/app/assets/stylesheets/_bourbon-deprecated-upcoming.scss +0 -411
  163. data/app/assets/stylesheets/_bourbon.scss +0 -87
  164. data/app/assets/stylesheets/addons/_border-color.scss +0 -26
  165. data/app/assets/stylesheets/addons/_border-radius.scss +0 -48
  166. data/app/assets/stylesheets/addons/_border-style.scss +0 -25
  167. data/app/assets/stylesheets/addons/_border-width.scss +0 -25
  168. data/app/assets/stylesheets/addons/_buttons.scss +0 -64
  169. data/app/assets/stylesheets/addons/_font-stacks.scss +0 -31
  170. data/app/assets/stylesheets/addons/_hide-text.scss +0 -27
  171. data/app/assets/stylesheets/addons/_margin.scss +0 -26
  172. data/app/assets/stylesheets/addons/_padding.scss +0 -26
  173. data/app/assets/stylesheets/addons/_position.scss +0 -48
  174. data/app/assets/stylesheets/addons/_prefixer.scss +0 -66
  175. data/app/assets/stylesheets/addons/_retina-image.scss +0 -25
  176. data/app/assets/stylesheets/addons/_size.scss +0 -51
  177. data/app/assets/stylesheets/addons/_text-inputs.scss +0 -113
  178. data/app/assets/stylesheets/addons/_timing-functions.scss +0 -34
  179. data/app/assets/stylesheets/addons/_triangle.scss +0 -63
  180. data/app/assets/stylesheets/addons/_word-wrap.scss +0 -29
  181. data/app/assets/stylesheets/css3/_animation.scss +0 -43
  182. data/app/assets/stylesheets/css3/_appearance.scss +0 -3
  183. data/app/assets/stylesheets/css3/_backface-visibility.scss +0 -3
  184. data/app/assets/stylesheets/css3/_background-image.scss +0 -42
  185. data/app/assets/stylesheets/css3/_background.scss +0 -55
  186. data/app/assets/stylesheets/css3/_border-image.scss +0 -59
  187. data/app/assets/stylesheets/css3/_calc.scss +0 -4
  188. data/app/assets/stylesheets/css3/_columns.scss +0 -47
  189. data/app/assets/stylesheets/css3/_filter.scss +0 -4
  190. data/app/assets/stylesheets/css3/_flex-box.scss +0 -287
  191. data/app/assets/stylesheets/css3/_font-face.scss +0 -24
  192. data/app/assets/stylesheets/css3/_font-feature-settings.scss +0 -4
  193. data/app/assets/stylesheets/css3/_hidpi-media-query.scss +0 -10
  194. data/app/assets/stylesheets/css3/_hyphens.scss +0 -4
  195. data/app/assets/stylesheets/css3/_image-rendering.scss +0 -14
  196. data/app/assets/stylesheets/css3/_keyframes.scss +0 -36
  197. data/app/assets/stylesheets/css3/_linear-gradient.scss +0 -38
  198. data/app/assets/stylesheets/css3/_perspective.scss +0 -8
  199. data/app/assets/stylesheets/css3/_placeholder.scss +0 -8
  200. data/app/assets/stylesheets/css3/_radial-gradient.scss +0 -39
  201. data/app/assets/stylesheets/css3/_selection.scss +0 -42
  202. data/app/assets/stylesheets/css3/_text-decoration.scss +0 -19
  203. data/app/assets/stylesheets/css3/_transform.scss +0 -15
  204. data/app/assets/stylesheets/css3/_transition.scss +0 -71
  205. data/app/assets/stylesheets/css3/_user-select.scss +0 -3
  206. data/app/assets/stylesheets/functions/_assign-inputs.scss +0 -11
  207. data/app/assets/stylesheets/functions/_is-light.scss +0 -21
  208. data/app/assets/stylesheets/functions/_is-number.scss +0 -11
  209. data/app/assets/stylesheets/functions/_is-size.scss +0 -13
  210. data/app/assets/stylesheets/functions/_modular-scale.scss +0 -69
  211. data/app/assets/stylesheets/functions/_px-to-em.scss +0 -13
  212. data/app/assets/stylesheets/functions/_px-to-rem.scss +0 -15
  213. data/app/assets/stylesheets/functions/_shade.scss +0 -24
  214. data/app/assets/stylesheets/functions/_strip-units.scss +0 -17
  215. data/app/assets/stylesheets/functions/_tint.scss +0 -24
  216. data/app/assets/stylesheets/functions/_transition-property-name.scss +0 -22
  217. data/app/assets/stylesheets/helpers/_convert-units.scss +0 -21
  218. data/app/assets/stylesheets/helpers/_directional-values.scss +0 -96
  219. data/app/assets/stylesheets/helpers/_gradient-positions-parser.scss +0 -13
  220. data/app/assets/stylesheets/helpers/_linear-angle-parser.scss +0 -25
  221. data/app/assets/stylesheets/helpers/_linear-gradient-parser.scss +0 -41
  222. data/app/assets/stylesheets/helpers/_linear-positions-parser.scss +0 -61
  223. data/app/assets/stylesheets/helpers/_linear-side-corner-parser.scss +0 -31
  224. data/app/assets/stylesheets/helpers/_radial-arg-parser.scss +0 -69
  225. data/app/assets/stylesheets/helpers/_radial-gradient-parser.scss +0 -50
  226. data/app/assets/stylesheets/helpers/_radial-positions-parser.scss +0 -18
  227. data/app/assets/stylesheets/helpers/_render-gradients.scss +0 -26
  228. data/app/assets/stylesheets/helpers/_shape-size-stripper.scss +0 -10
  229. data/app/assets/stylesheets/helpers/_str-to-num.scss +0 -50
  230. data/app/assets/stylesheets/settings/_asset-pipeline.scss +0 -7
  231. data/app/assets/stylesheets/settings/_prefixer.scss +0 -9
  232. data/app/assets/stylesheets/settings/_px-to-em.scss +0 -1
  233. data/bower.json +0 -36
  234. data/lib/bourbon/engine.rb +0 -5
  235. data/lib/tasks/install.rake +0 -20
  236. data/sache.json +0 -5
  237. data/spec/bourbon/addons/font_stacks_spec.rb +0 -25
  238. data/spec/bourbon/addons/retina_image_spec.rb +0 -57
  239. data/spec/bourbon/addons/triangle_spec.rb +0 -32
  240. data/spec/bourbon/addons/word_wrap_spec.rb +0 -29
  241. data/spec/bourbon/css3/font_face_spec.rb +0 -45
  242. data/spec/bourbon/css3/hidpi_media_query_spec.rb +0 -23
  243. data/spec/bourbon/functions/is_light_spec.rb +0 -37
  244. data/spec/bourbon/functions/px_to_em_spec.rb +0 -31
  245. data/spec/bourbon/functions/px_to_rem_spec.rb +0 -25
  246. data/spec/bourbon/helpers/convert_units_spec.rb +0 -31
  247. data/spec/bourbon/helpers/directional_values_spec.rb +0 -39
  248. data/spec/bourbon/helpers/str_to_num_spec.rb +0 -25
  249. data/spec/fixtures/addons/font-stacks.scss +0 -21
  250. data/spec/fixtures/addons/retina-image.scss +0 -21
  251. data/spec/fixtures/addons/triangle.scss +0 -9
  252. data/spec/fixtures/addons/word-wrap.scss +0 -9
  253. data/spec/fixtures/css3/font-face.scss +0 -6
  254. data/spec/fixtures/css3/hidpi-media-query.scss +0 -13
  255. data/spec/fixtures/functions/assign-inputs.scss +0 -19
  256. data/spec/fixtures/functions/is-light.scss +0 -29
  257. data/spec/fixtures/functions/px-to-em.scss +0 -17
  258. data/spec/fixtures/functions/px-to-rem.scss +0 -15
  259. data/spec/fixtures/functions/strip-units.scss +0 -17
  260. data/spec/fixtures/functions/unpack.scss +0 -17
  261. data/spec/fixtures/helpers/convert-units.scss +0 -17
  262. data/spec/fixtures/helpers/directional-values.scss +0 -29
  263. data/spec/fixtures/helpers/font-source-declaration.scss +0 -10
  264. data/spec/fixtures/helpers/str-to-num.scss +0 -13
  265. data/spec/support/matchers/be_contained_in.rb +0 -10
@@ -0,0 +1,37 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Provides a concise, one-line method for setting `margin` on specific edges
4
+ /// of a box. Use a `null` value to “skip” edges of the box with standard
5
+ /// CSS shorthand.
6
+ ///
7
+ /// @argument {list} $values
8
+ /// List of margin values; accepts CSS shorthand.
9
+ ///
10
+ /// @example scss
11
+ /// .element {
12
+ /// @include margin(null auto);
13
+ /// }
14
+ ///
15
+ /// // CSS Output
16
+ /// .element {
17
+ /// margin-left: auto;
18
+ /// margin-right: auto;
19
+ /// }
20
+ ///
21
+ /// @example scss
22
+ /// .element {
23
+ /// @include margin(10px 3em 20vh null);
24
+ /// }
25
+ ///
26
+ /// // CSS Output
27
+ /// .element {
28
+ /// margin-bottom: 20vh;
29
+ /// margin-right: 3em;
30
+ /// margin-top: 10px;
31
+ /// }
32
+ ///
33
+ /// @require {mixin} _directional-property
34
+
35
+ @mixin margin($values) {
36
+ @include _directional-property(margin, null, $values);
37
+ }
@@ -0,0 +1,120 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Increments up or down a defined scale and returns an adjusted value. This
4
+ /// helps establish consistent measurements and spacial relationships throughout
5
+ /// your project. We provide a list of commonly used scales as
6
+ /// [pre-defined variables][scales].
7
+ ///
8
+ /// [scales]: https://github.com/thoughtbot/bourbon/blob/master/core/bourbon/helpers/_scales.scss
9
+ ///
10
+ /// @argument {number (unitless)} $increment
11
+ /// How many steps to increment up or down the scale.
12
+ ///
13
+ /// @argument {number (with unit) | list} $value [1em]
14
+ /// The base value the scale starts at. Can also be set globally using the
15
+ /// `modular-scale-base` key in the Bourbon settings.
16
+ ///
17
+ /// @argument {number (unitless)} $ratio [1.25]
18
+ /// The ratio the scale is built on. Can also be set globally using the
19
+ /// `modular-scale-ratio` key in the Bourbon settings.
20
+ ///
21
+ /// @return {number (with unit)}
22
+ ///
23
+ /// @example scss
24
+ /// .element {
25
+ /// font-size: modular-scale(2);
26
+ /// }
27
+ ///
28
+ /// // CSS Output
29
+ /// .element {
30
+ /// font-size: 1.5625em;
31
+ /// }
32
+ ///
33
+ /// @example scss
34
+ /// .element {
35
+ /// margin-right: modular-scale(3, 2em);
36
+ /// }
37
+ ///
38
+ /// // CSS Output
39
+ /// .element {
40
+ /// margin-right: 3.90625em;
41
+ /// }
42
+ ///
43
+ /// @example scss
44
+ /// .element {
45
+ /// font-size: modular-scale(3, 1em 1.6em, $major-seventh);
46
+ /// }
47
+ ///
48
+ /// // CSS Output
49
+ /// .element {
50
+ /// font-size: 3em;
51
+ /// }
52
+ ///
53
+ /// @example scss
54
+ /// // Globally change the base ratio
55
+ /// $bourbon: (
56
+ /// "modular-scale-ratio": 1.2,
57
+ /// );
58
+ ///
59
+ /// .element {
60
+ /// font-size: modular-scale(3);
61
+ /// }
62
+ ///
63
+ /// // CSS Output
64
+ /// .element {
65
+ /// font-size: 1.728em;
66
+ /// }
67
+ ///
68
+ /// @require {function} _fetch-bourbon-setting
69
+
70
+ @function modular-scale(
71
+ $increment,
72
+ $value: _fetch-bourbon-setting("modular-scale-base"),
73
+ $ratio: _fetch-bourbon-setting("modular-scale-ratio")
74
+ ) {
75
+ $v1: nth($value, 1);
76
+ $v2: nth($value, length($value));
77
+ $value: $v1;
78
+
79
+ // scale $v2 to just above $v1
80
+ @while $v2 > $v1 {
81
+ $v2: ($v2 / $ratio); // will be off-by-1
82
+ }
83
+ @while $v2 < $v1 {
84
+ $v2: ($v2 * $ratio); // will fix off-by-1
85
+ }
86
+
87
+ // check AFTER scaling $v2 to prevent double-counting corner-case
88
+ $double-stranded: $v2 > $v1;
89
+
90
+ @if $increment > 0 {
91
+ @for $i from 1 through $increment {
92
+ @if $double-stranded and ($v1 * $ratio) > $v2 {
93
+ $value: $v2;
94
+ $v2: ($v2 * $ratio);
95
+ } @else {
96
+ $v1: ($v1 * $ratio);
97
+ $value: $v1;
98
+ }
99
+ }
100
+ }
101
+
102
+ @if $increment < 0 {
103
+ // adjust $v2 to just below $v1
104
+ @if $double-stranded {
105
+ $v2: ($v2 / $ratio);
106
+ }
107
+
108
+ @for $i from $increment through -1 {
109
+ @if $double-stranded and ($v1 / $ratio) < $v2 {
110
+ $value: $v2;
111
+ $v2: ($v2 / $ratio);
112
+ } @else {
113
+ $v1: ($v1 / $ratio);
114
+ $value: $v1;
115
+ }
116
+ }
117
+ }
118
+
119
+ @return $value;
120
+ }
@@ -0,0 +1,28 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Outputs the `overflow-wrap` property and its legacy name `word-wrap` to
4
+ /// support browsers that do not yet use `overflow-wrap`.
5
+ ///
6
+ /// @argument {string} $wrap [break-word]
7
+ /// Accepted CSS values are `normal`, `break-word`, `inherit`, `initial`,
8
+ /// or `unset`.
9
+ ///
10
+ /// @example scss
11
+ /// .wrapper {
12
+ /// @include overflow-wrap;
13
+ /// }
14
+ ///
15
+ /// // CSS Output
16
+ /// .wrapper {
17
+ /// word-wrap: break-word;
18
+ /// overflow-wrap: break-word;
19
+ /// }
20
+
21
+ /* stylelint-disable order/properties-alphabetical-order */
22
+
23
+ @mixin overflow-wrap($wrap: break-word) {
24
+ word-wrap: $wrap;
25
+ overflow-wrap: $wrap;
26
+ }
27
+
28
+ /* stylelint-enable */
@@ -0,0 +1,36 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Provides a concise method for targeting `padding` on specific sides of a
4
+ /// box. Use a `null` value to “skip” a side.
5
+ ///
6
+ /// @argument {list} $values
7
+ /// List of padding values; accepts CSS shorthand.
8
+ ///
9
+ /// @example scss
10
+ /// .element-one {
11
+ /// @include padding(null 1rem);
12
+ /// }
13
+ ///
14
+ /// // CSS Output
15
+ /// .element-one {
16
+ /// padding-left: 1rem;
17
+ /// padding-right: 1rem;
18
+ /// }
19
+ ///
20
+ /// @example scss
21
+ /// .element-two {
22
+ /// @include padding(10vh null 10px 5%);
23
+ /// }
24
+ ///
25
+ /// // CSS Output
26
+ /// .element-two {
27
+ /// padding-bottom: 10px;
28
+ /// padding-left: 5%;
29
+ /// padding-top: 10vh;
30
+ /// }
31
+ ///
32
+ /// @require {mixin} _directional-property
33
+
34
+ @mixin padding($values) {
35
+ @include _directional-property(padding, null, $values);
36
+ }
@@ -0,0 +1,62 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Provides a concise, one-line method for setting an element’s positioning
4
+ /// properties: `position`, `top`, `right`, `bottom` and `left`. Use a `null`
5
+ /// value to “skip” an edge of the box.
6
+ ///
7
+ /// @argument {string} $position
8
+ /// A CSS position value.
9
+ ///
10
+ /// @argument {list} $box-edge-values
11
+ /// List of lengths; accepts CSS shorthand.
12
+ ///
13
+ /// @example scss
14
+ /// .element {
15
+ /// @include position(relative, 0 null null 10em);
16
+ /// }
17
+ ///
18
+ /// // CSS Output
19
+ /// .element {
20
+ /// left: 10em;
21
+ /// position: relative;
22
+ /// top: 0;
23
+ /// }
24
+ ///
25
+ /// @example scss
26
+ /// .element {
27
+ /// @include position(absolute, 0);
28
+ /// }
29
+ ///
30
+ /// // CSS Output
31
+ /// .element {
32
+ /// position: absolute;
33
+ /// top: 0;
34
+ /// right: 0;
35
+ /// bottom: 0;
36
+ /// left: 0;
37
+ /// }
38
+ ///
39
+ /// @require {function} _is-length
40
+ ///
41
+ /// @require {function} _unpack-shorthand
42
+
43
+ @mixin position(
44
+ $position,
45
+ $box-edge-values
46
+ ) {
47
+ $box-edge-values: _unpack-shorthand($box-edge-values);
48
+ $offsets: (
49
+ top: nth($box-edge-values, 1),
50
+ right: nth($box-edge-values, 2),
51
+ bottom: nth($box-edge-values, 3),
52
+ left: nth($box-edge-values, 4),
53
+ );
54
+
55
+ position: $position;
56
+
57
+ @each $offset, $value in $offsets {
58
+ @if _is-length($value) {
59
+ #{$offset}: $value;
60
+ }
61
+ }
62
+ }
@@ -0,0 +1,37 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Generates vendor prefixes.
4
+ ///
5
+ /// @argument {string} $property
6
+ /// Property to prefix.
7
+ ///
8
+ /// @argument {string} $value
9
+ /// Value to use.
10
+ ///
11
+ /// @argument {list} $prefixes
12
+ /// Vendor prefixes to output.
13
+ ///
14
+ /// @example scss
15
+ /// .element {
16
+ /// @include prefixer(appearance, none, ("webkit", "moz"));
17
+ /// }
18
+ ///
19
+ /// // CSS Output
20
+ /// .element {
21
+ /// -webkit-appearance: none;
22
+ /// -moz-appearance: none;
23
+ /// appearance: none;
24
+ /// }
25
+ ///
26
+ /// @author Hugo Giraudel
27
+
28
+ @mixin prefixer(
29
+ $property,
30
+ $value,
31
+ $prefixes: ()
32
+ ) {
33
+ @each $prefix in $prefixes {
34
+ #{"-" + $prefix + "-" + $property}: $value;
35
+ }
36
+ #{$property}: $value;
37
+ }
@@ -0,0 +1,32 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Mixes a color with black.
4
+ ///
5
+ /// @argument {color} $color
6
+ ///
7
+ /// @argument {number (percentage)} $percent
8
+ /// The amount of black to be mixed in.
9
+ ///
10
+ /// @return {color}
11
+ ///
12
+ /// @example scss
13
+ /// .element {
14
+ /// background-color: shade(#ffbb52, 60%);
15
+ /// }
16
+ ///
17
+ /// // CSS Output
18
+ /// .element {
19
+ /// background-color: #664a20;
20
+ /// }
21
+
22
+ @function shade(
23
+ $color,
24
+ $percent
25
+ ) {
26
+ @if not _is-color($color) {
27
+ @error "`#{$color}` is not a valid color for the `$color` argument in " +
28
+ "the `shade` mixin.";
29
+ } @else {
30
+ @return mix(#000, $color, $percent);
31
+ }
32
+ }
@@ -0,0 +1,50 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Sets the `width` and `height` of the element in one statement.
4
+ ///
5
+ /// @argument {number (with unit) | string} $width
6
+ ///
7
+ /// @argument {number (with unit) | string} $height [$width]
8
+ ///
9
+ /// @example scss
10
+ /// .first-element {
11
+ /// @include size(2em);
12
+ /// }
13
+ ///
14
+ /// // CSS Output
15
+ /// .first-element {
16
+ /// width: 2em;
17
+ /// height: 2em;
18
+ /// }
19
+ ///
20
+ /// @example scss
21
+ /// .second-element {
22
+ /// @include size(auto, 10em);
23
+ /// }
24
+ ///
25
+ /// // CSS Output
26
+ /// .second-element {
27
+ /// width: auto;
28
+ /// height: 10em;
29
+ /// }
30
+ ///
31
+ /// @require {function} _is-size
32
+
33
+ @mixin size(
34
+ $width,
35
+ $height: $width
36
+ ) {
37
+ @if _is-size($height) {
38
+ height: $height;
39
+ } @else {
40
+ @error "`#{$height}` is not a valid length for the `$height` argument " +
41
+ "in the `size` mixin.";
42
+ }
43
+
44
+ @if _is-size($width) {
45
+ width: $width;
46
+ } @else {
47
+ @error "`#{$width}` is not a valid length for the `$width` argument " +
48
+ "in the `size` mixin.";
49
+ }
50
+ }
@@ -0,0 +1,17 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Strips the unit from a number.
4
+ ///
5
+ /// @argument {number} $value
6
+ ///
7
+ /// @return {number (unitless)}
8
+ ///
9
+ /// @example scss
10
+ /// $dimension: strip-unit(10em);
11
+ ///
12
+ /// // Output
13
+ /// $dimension: 10;
14
+
15
+ @function strip-unit($value) {
16
+ @return ($value / ($value * 0 + 1));
17
+ }
@@ -0,0 +1,163 @@
1
+ @charset "UTF-8";
2
+
3
+ ////
4
+ /// @type list
5
+ ///
6
+ /// @require {function} _assign-inputs
7
+ ///
8
+ /// @require {variable} $_text-inputs-list
9
+ ////
10
+
11
+ /// A list of all _text-based_ HTML inputs. Please note that you must
12
+ /// interpolate the variable (`#{}`) to use it as a selector.
13
+ ///
14
+ /// @example scss
15
+ /// #{$all-text-inputs} {
16
+ /// border: 1px solid #ccc;
17
+ /// }
18
+ ///
19
+ /// // CSS Output
20
+ /// [type='color'],
21
+ /// [type='date'],
22
+ /// [type='datetime'],
23
+ /// [type='datetime-local'],
24
+ /// [type='email'],
25
+ /// [type='month'],
26
+ /// [type='number'],
27
+ /// [type='password'],
28
+ /// [type='search'],
29
+ /// [type='tel'],
30
+ /// [type='text'],
31
+ /// [type='time'],
32
+ /// [type='url'],
33
+ /// [type='week'],
34
+ /// input:not([type]),
35
+ /// textarea {
36
+ /// border: 1px solid #ccc;
37
+ /// }
38
+
39
+ $all-text-inputs: _assign-inputs($_text-inputs-list);
40
+
41
+ /// A list of all _text-based_ HTML inputs with the `:active` pseudo-class
42
+ /// applied. Please note that you must interpolate the variable (`#{}`) to use
43
+ /// it as a selector.
44
+ ///
45
+ /// @example scss
46
+ /// #{$all-text-inputs-active} {
47
+ /// border: 1px solid #aaa;
48
+ /// }
49
+ ///
50
+ /// // CSS Output
51
+ /// [type='color']:active,
52
+ /// [type='date']:active,
53
+ /// [type='datetime']:active,
54
+ /// [type='datetime-local']:active,
55
+ /// [type='email']:active,
56
+ /// [type='month']:active,
57
+ /// [type='number']:active,
58
+ /// [type='password']:active,
59
+ /// [type='search']:active,
60
+ /// [type='tel']:active,
61
+ /// [type='text']:active,
62
+ /// [type='time']:active,
63
+ /// [type='url']:active,
64
+ /// [type='week']:active,
65
+ /// input:not([type]):active,
66
+ /// textarea:active {
67
+ /// border: 1px solid #aaa;
68
+ /// }
69
+
70
+ $all-text-inputs-active: _assign-inputs($_text-inputs-list, active);
71
+
72
+ /// A list of all _text-based_ HTML inputs with the `:focus` pseudo-class
73
+ /// applied. Please note that you must interpolate the variable (`#{}`) to use
74
+ /// it as a selector.
75
+ ///
76
+ /// @example scss
77
+ /// #{$all-text-inputs-focus} {
78
+ /// border: 1px solid #1565c0;
79
+ /// }
80
+ ///
81
+ /// // CSS Output
82
+ /// [type='color']:focus,
83
+ /// [type='date']:focus,
84
+ /// [type='datetime']:focus,
85
+ /// [type='datetime-local']:focus,
86
+ /// [type='email']:focus,
87
+ /// [type='month']:focus,
88
+ /// [type='number']:focus,
89
+ /// [type='password']:focus,
90
+ /// [type='search']:focus,
91
+ /// [type='tel']:focus,
92
+ /// [type='text']:focus,
93
+ /// [type='time']:focus,
94
+ /// [type='url']:focus,
95
+ /// [type='week']:focus,
96
+ /// input:not([type]):focus,
97
+ /// textarea:focus {
98
+ /// border: 1px solid #1565c0;
99
+ /// }
100
+
101
+ $all-text-inputs-focus: _assign-inputs($_text-inputs-list, focus);
102
+
103
+ /// A list of all _text-based_ HTML inputs with the `:hover` pseudo-class
104
+ /// applied. Please note that you must interpolate the variable (`#{}`) to use
105
+ /// it as a selector.
106
+ ///
107
+ /// @example scss
108
+ /// #{$all-text-inputs-hover} {
109
+ /// border: 1px solid #aaa;
110
+ /// }
111
+ ///
112
+ /// // CSS Output
113
+ /// [type='color']:hover,
114
+ /// [type='date']:hover,
115
+ /// [type='datetime']:hover,
116
+ /// [type='datetime-local']:hover,
117
+ /// [type='email']:hover,
118
+ /// [type='month']:hover,
119
+ /// [type='number']:hover,
120
+ /// [type='password']:hover,
121
+ /// [type='search']:hover,
122
+ /// [type='tel']:hover,
123
+ /// [type='text']:hover,
124
+ /// [type='time']:hover,
125
+ /// [type='url']:hover,
126
+ /// [type='week']:hover,
127
+ /// input:not([type]):hover,
128
+ /// textarea:hover {
129
+ /// border: 1px solid #aaa;
130
+ /// }
131
+
132
+ $all-text-inputs-hover: _assign-inputs($_text-inputs-list, hover);
133
+
134
+ /// A list of all _text-based_ HTML inputs with the `:invalid` pseudo-class
135
+ /// applied. Please note that you must interpolate the variable (`#{}`) to use
136
+ /// it as a selector.
137
+ ///
138
+ /// @example scss
139
+ /// #{$all-text-inputs-invalid} {
140
+ /// border: 1px solid #00f;
141
+ /// }
142
+ ///
143
+ /// // CSS Output
144
+ /// [type='color']:invalid,
145
+ /// [type='date']:invalid,
146
+ /// [type='datetime']:invalid,
147
+ /// [type='datetime-local']:invalid,
148
+ /// [type='email']:invalid,
149
+ /// [type='month']:invalid,
150
+ /// [type='number']:invalid,
151
+ /// [type='password']:invalid,
152
+ /// [type='search']:invalid,
153
+ /// [type='tel']:invalid,
154
+ /// [type='text']:invalid,
155
+ /// [type='time']:invalid,
156
+ /// [type='url']:invalid,
157
+ /// [type='week']:invalid,
158
+ /// input:not([type]):invalid,
159
+ /// textarea:invalid {
160
+ /// border: 1px solid #00f;
161
+ /// }
162
+
163
+ $all-text-inputs-invalid: _assign-inputs($_text-inputs-list, invalid);
@@ -0,0 +1,36 @@
1
+ @charset "UTF-8";
2
+
3
+ ////
4
+ /// CSS cubic-bezier timing functions.
5
+ ///
6
+ /// @link https://goo.gl/p8u6SK
7
+ ///
8
+ /// @type string
9
+ ////
10
+
11
+ $ease-in-quad: cubic-bezier(0.55, 0.085, 0.68, 0.53);
12
+ $ease-in-cubic: cubic-bezier(0.55, 0.055, 0.675, 0.19);
13
+ $ease-in-quart: cubic-bezier(0.895, 0.03, 0.685, 0.22);
14
+ $ease-in-quint: cubic-bezier(0.755, 0.05, 0.855, 0.06);
15
+ $ease-in-sine: cubic-bezier(0.47, 0, 0.745, 0.715);
16
+ $ease-in-expo: cubic-bezier(0.95, 0.05, 0.795, 0.035);
17
+ $ease-in-circ: cubic-bezier(0.6, 0.04, 0.98, 0.335);
18
+ $ease-in-back: cubic-bezier(0.6, -0.28, 0.735, 0.045);
19
+
20
+ $ease-out-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94);
21
+ $ease-out-cubic: cubic-bezier(0.215, 0.61, 0.355, 1);
22
+ $ease-out-quart: cubic-bezier(0.165, 0.84, 0.44, 1);
23
+ $ease-out-quint: cubic-bezier(0.23, 1, 0.32, 1);
24
+ $ease-out-sine: cubic-bezier(0.39, 0.575, 0.565, 1);
25
+ $ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1);
26
+ $ease-out-circ: cubic-bezier(0.075, 0.82, 0.165, 1);
27
+ $ease-out-back: cubic-bezier(0.175, 0.885, 0.32, 1.275);
28
+
29
+ $ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955);
30
+ $ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1);
31
+ $ease-in-out-quart: cubic-bezier(0.77, 0, 0.175, 1);
32
+ $ease-in-out-quint: cubic-bezier(0.86, 0, 0.07, 1);
33
+ $ease-in-out-sine: cubic-bezier(0.445, 0.05, 0.55, 0.95);
34
+ $ease-in-out-expo: cubic-bezier(1, 0, 0, 1);
35
+ $ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.15, 0.86);
36
+ $ease-in-out-back: cubic-bezier(0.68, -0.55, 0.265, 1.55);
@@ -0,0 +1,32 @@
1
+ @charset "UTF-8";
2
+
3
+ /// Mixes a color with white.
4
+ ///
5
+ /// @argument {color} $color
6
+ ///
7
+ /// @argument {number (percentage)} $percent
8
+ /// The amount of white to be mixed in.
9
+ ///
10
+ /// @return {color}
11
+ ///
12
+ /// @example scss
13
+ /// .element {
14
+ /// background-color: tint(#6ecaa6, 40%);
15
+ /// }
16
+ ///
17
+ /// // CSS Output
18
+ /// .element {
19
+ /// background-color: #a8dfc9;
20
+ /// }
21
+
22
+ @function tint(
23
+ $color,
24
+ $percent
25
+ ) {
26
+ @if not _is-color($color) {
27
+ @error "`#{$color}` is not a valid color for the `$color` argument in " +
28
+ "the `tint` mixin.";
29
+ } @else {
30
+ @return mix(#fff, $color, $percent);
31
+ }
32
+ }